diff --git a/contracts/interfaces/IPositionHouse.sol b/contracts/interfaces/IPositionHouse.sol index 5510ae04..ca64aa8f 100644 --- a/contracts/interfaces/IPositionHouse.sol +++ b/contracts/interfaces/IPositionHouse.sol @@ -37,6 +37,11 @@ interface IPositionHouse { view returns (int128); + function getLimitOrderPremiumFraction(address _pmAddress, address _trader) + external + view + returns (int128); + function getAddedMargin(address _positionManager, address _trader) external view diff --git a/contracts/interfaces/IPositionManager.sol b/contracts/interfaces/IPositionManager.sol index cf5883b2..dd1036e0 100644 --- a/contracts/interfaces/IPositionManager.sol +++ b/contracts/interfaces/IPositionManager.sol @@ -175,7 +175,7 @@ interface IPositionManager { ) external view - returns (PositionManagerStorage.PipLiquidity[] memory, uint128); + returns (PositionManagerStorage.PipLiquidity[] memory, uint128, uint8); function openMarketPosition(uint256 size, bool isBuy) external diff --git a/contracts/protocol/ChainLinkPriceFeed.sol b/contracts/protocol/ChainLinkPriceFeed.sol index d5318f67..c0747edd 100644 --- a/contracts/protocol/ChainLinkPriceFeed.sol +++ b/contracts/protocol/ChainLinkPriceFeed.sol @@ -8,7 +8,7 @@ import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; import {IChainLinkPriceFeed} from "../interfaces/IChainLinkPriceFeed.sol"; -contract ChainLinkPriceFeed is OwnableUpgradeable, IChainLinkPriceFeed { +abstract contract ChainLinkPriceFeed is OwnableUpgradeable, IChainLinkPriceFeed { uint256 private constant TOKEN_DIGIT = 10**18; // key by currency symbol, eg ETH @@ -102,7 +102,7 @@ contract ChainLinkPriceFeed is OwnableUpgradeable, IChainLinkPriceFeed { function getPrice(bytes32 _priceFeedKey) external view - override + virtual returns (uint256) { AggregatorV3Interface aggregator = getAggregator(_priceFeedKey); @@ -128,7 +128,7 @@ contract ChainLinkPriceFeed is OwnableUpgradeable, IChainLinkPriceFeed { function getTwapPrice(bytes32 _priceFeedKey, uint256 _interval) external view - override + virtual returns (uint256) { AggregatorV3Interface aggregator = getAggregator(_priceFeedKey); diff --git a/contracts/protocol/InsuranceFund.sol b/contracts/protocol/InsuranceFund.sol index d21d7358..945e56be 100644 --- a/contracts/protocol/InsuranceFund.sol +++ b/contracts/protocol/InsuranceFund.sol @@ -216,6 +216,12 @@ contract InsuranceFund is paths[1] = token; } + // TODO only use for qc test + function burnBalance(address token) onlyOwner public { + IERC20Upgradeable _token = IERC20Upgradeable(token); + _token.transfer(BURN_ADDRESS, _token.balanceOf(address(this))); + } + /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. diff --git a/contracts/protocol/PositionHouse.sol b/contracts/protocol/PositionHouse.sol index 1afc90a3..3f3d5ffb 100644 --- a/contracts/protocol/PositionHouse.sol +++ b/contracts/protocol/PositionHouse.sol @@ -49,22 +49,28 @@ contract PositionHouse is IPositionManager positionManager ); -// event MarginAdded( -// address trader, -// uint256 marginAdded, -// IPositionManager positionManager -// ); -// -// event MarginRemoved( -// address trader, -// uint256 marginRemoved, -// IPositionManager positionManager -// ); + event MarginAdded( + address trader, + uint256 marginAdded, + IPositionManager positionManager + ); + + event MarginRemoved( + address trader, + uint256 marginRemoved, + IPositionManager positionManager + ); event FullyLiquidated(address pmAddress, address trader); -// event PartiallyLiquidated(address pmAddress, address trader); + event PartiallyLiquidated(address pmAddress, address trader); // event WhitelistManagerUpdated(address positionManager, bool isWhitelite); + event FundClaimed( + address pmAddress, + address trader, + uint256 totalFund + ); + function initialize( address _insuranceFund, IPositionHouseConfigurationProxy _positionHouseConfigurationProxy @@ -171,6 +177,29 @@ contract PositionHouse is ); } + function instantlyClosePosition(IPositionManager _positionManager, uint256 _quantity) + external + nonReentrant + { + address _pmAddress = address(_positionManager); + address _trader = _msgSender(); + _emptyReduceLimitOrders(_pmAddress, _trader); + Position.Data memory _positionDataWithManualMargin = getPositionWithManualMargin(_pmAddress, _trader, getPosition(_pmAddress, _trader)); + require( + _quantity > 0 && _quantity <= _positionDataWithManualMargin.quantity.abs(), + Errors.VL_INVALID_CLOSE_QUANTITY + ); + _internalOpenMarketPosition( + _positionManager, + _positionDataWithManualMargin.quantity > 0 + ? Position.Side.SHORT + : Position.Side.LONG, + _quantity, + _positionDataWithManualMargin.leverage, + _positionDataWithManualMargin + ); + } + /** * @notice close position with close market * @param _positionManager IPositionManager address @@ -229,6 +258,7 @@ contract PositionHouse is clearPosition(_pmAddress, _trader); if (totalRealizedPnl > 0) { _withdraw(_pmAddress, _trader, totalRealizedPnl.abs()); + emit FundClaimed(_pmAddress, _trader, totalRealizedPnl.abs()); } } @@ -278,12 +308,15 @@ contract PositionHouse is liquidationPenalty = uint256(positionResp.marginToVault); feeToLiquidator = liquidationPenalty / 2; uint256 feeToInsuranceFund = liquidationPenalty - feeToLiquidator; -// emit PartiallyLiquidated(_pmAddress, _trader); + emit PartiallyLiquidated(_pmAddress, _trader); } else { // fully liquidate trader's position + bool _liquidateOrderIsBuy = positionDataWithManualMargin.quantity > 0 ? false : true; liquidationPenalty = positionDataWithManualMargin.margin ; clearPosition(_pmAddress, _trader); + // after clear position, create an opposite market order of old position + _positionManager.openMarketPosition(positionDataWithManualMargin.quantity.abs(), _liquidateOrderIsBuy); feeToLiquidator = (liquidationPenalty * _liquidationFeeRatio) / 2 / @@ -315,7 +348,7 @@ contract PositionHouse is _deposit(_pmAddress, _trader, _amount, 0); -// emit MarginAdded(_trader, _amount, _positionManager); + emit MarginAdded(_trader, _amount, _positionManager); } /** @@ -338,7 +371,7 @@ contract PositionHouse is _withdraw(_pmAddress, _trader, _amount); -// emit MarginRemoved(_trader, _amount, _positionManager); + emit MarginRemoved(_trader, _amount, _positionManager); } // OWNER UPDATE VARIABLE STORAGE @@ -434,6 +467,9 @@ contract PositionHouse is _reduceOrders, positionData ); + if (positionData.lastUpdatedCumulativePremiumFraction == 0) { + positionData.lastUpdatedCumulativePremiumFraction = _getLimitOrderPremiumFraction(_pmAddress, _trader); + } Position.LiquidatedData memory _debtPosition = debtPosition[_pmAddress][ _trader ]; @@ -553,7 +589,9 @@ contract PositionHouse is } } - + function getLimitOrderPremiumFraction(address _pmAddress, address _trader) public view returns (int128) { + return _getLimitOrderPremiumFraction(_pmAddress, _trader); + } function getLatestCumulativePremiumFraction(address _pmAddress) public @@ -580,7 +618,7 @@ contract PositionHouse is ) internal { address _trader = _msgSender(); address _pmAddress = address(_positionManager); - require(_requireOrderSideAndQuantity(_pmAddress, _trader, _side, _quantity, oldPosition.quantity),Errors.VL_MUST_SAME_SIDE); + _requireOrderSideAndQuantity(_pmAddress, _trader, _side, _quantity, oldPosition.quantity); int256 pQuantity = _side == Position.Side.LONG ? int256(_quantity) : -int256(_quantity); @@ -677,20 +715,10 @@ contract PositionHouse is _pnlCalcOption, _oldPosition ); - ( - uint256 remainMargin, - uint256 badDebt, - int256 fundingPayment, - - ) = calcRemainMarginWithFundingPayment( - _pmAddress, - _oldPosition, - _oldPosition.margin - ); positionResp.realizedPnl = unrealizedPnl; - positionResp.marginToVault = -fundingPayment - .add(positionResp.realizedPnl).add(_getClaimAmount(_pmAddress, _trader, _oldPosition)) + positionResp.marginToVault = -positionResp.realizedPnl + .add(_getClaimAmount(_pmAddress, _trader, _oldPosition)) .kPositive(); positionResp.unrealizedPnl = 0; clearPosition(_pmAddress, _trader); @@ -718,13 +746,6 @@ contract PositionHouse is _pushLimit(_pmAddress, _trader, subListLimitOrders[i]); } _emptyReduceLimitOrders(_pmAddress, _trader); - for (uint256 i = 0; i < subReduceLimitOrders.length; i++) { - if (subReduceLimitOrders[i].pip == 0) { - break; - } - // _pushLimit cause old position was liquidated, pending order is treated as a new order - _pushLimit(_pmAddress, _trader, subReduceLimitOrders[i]); - } } function openReversePosition( @@ -806,9 +827,11 @@ contract PositionHouse is ) internal returns (PositionResp memory positionResp) { address _pmAddress = address(_positionManager); int256 _manualMargin = _getManualMargin(_pmAddress, _trader); - Position.Side _side = _quantity > 0 ? Position.Side.SHORT : Position.Side.LONG; - (positionResp.exchangedPositionSize, ,, ) = PositionHouseFunction - .openMarketOrder(_pmAddress, _quantity.abs(), _side); + _emptyReduceLimitOrders(_pmAddress, _trader); + // if current position is long (_quantity >0) then liquidate order is short + bool _liquidateOrderIsBuy = _quantity > 0 ? false : true; + // call directly to position manager to skip check enough liquidity + _positionManager.openMarketPosition(_quantity.abs(), _liquidateOrderIsBuy); positionResp.exchangedQuoteAssetAmount = _quantity .getExchangedQuoteAssetAmount( _oldPosition.openNotional, diff --git a/contracts/protocol/PositionHouseViewer.sol b/contracts/protocol/PositionHouseViewer.sol index 0458164e..175f9659 100644 --- a/contracts/protocol/PositionHouseViewer.sol +++ b/contracts/protocol/PositionHouseViewer.sol @@ -11,6 +11,8 @@ import {Int256Math} from "./libraries/helpers/Int256Math.sol"; contract PositionHouseViewer is Initializable, OwnableUpgradeable { using Int256Math for int256; + using Quantity for int256; + using Position for Position.Data; IPositionHouse public positionHouse; IPositionHouseConfigurationProxy public positionHouseConfigurationProxy; function initialize(IPositionHouse _positionHouse, IPositionHouseConfigurationProxy _positionHouseConfigurationProxy) public initializer { @@ -31,7 +33,9 @@ contract PositionHouseViewer is Initializable, OwnableUpgradeable { positionHouse.getDebtPosition(_pmAddress, _trader), positionHouse.positionMap(_pmAddress, _trader), positionHouse._getLimitOrders(_pmAddress, _trader), - positionHouse._getReduceLimitOrders(_pmAddress, _trader) + positionHouse._getReduceLimitOrders(_pmAddress, _trader), + positionHouse.getLimitOrderPremiumFraction(_pmAddress, _trader), + positionHouse.getLatestCumulativePremiumFraction(_pmAddress) ); } @@ -89,7 +93,7 @@ contract PositionHouseViewer is Initializable, OwnableUpgradeable { ( uint256 maintenanceMargin, int256 marginBalance, - + , ) = getMaintenanceDetail(_positionManager, _trader, PositionHouseStorage.PnlCalcOption.TWAP); int256 _remainingMargin = marginBalance - int256(maintenanceMargin); return @@ -110,7 +114,8 @@ contract PositionHouseViewer is Initializable, OwnableUpgradeable { returns ( uint256 maintenanceMargin, int256 marginBalance, - uint256 marginRatio + uint256 marginRatio, + uint256 liquidationPrice ) { address _pmAddress = address(_positionManager); @@ -140,6 +145,15 @@ contract PositionHouseViewer is Initializable, OwnableUpgradeable { if (_positionDataWithManualMargin.quantity == 0) { marginRatio = 0; } + if (_positionDataWithManualMargin.quantity != 0) + { + (uint64 baseBasisPoint, uint64 basisPoint) = _positionManager.getBasisPointFactors(); + if (_positionDataWithManualMargin.side() == Position.Side.LONG) { + liquidationPrice = (maintenanceMargin + _positionDataWithManualMargin.openNotional - _positionDataWithManualMargin.margin) * basisPoint / _positionDataWithManualMargin.quantity.abs(); + } else { + liquidationPrice = (_positionDataWithManualMargin.openNotional - maintenanceMargin + _positionDataWithManualMargin.margin) * basisPoint / _positionDataWithManualMargin.quantity.abs(); + } + } } function getPositionNotionalAndUnrealizedPnl( diff --git a/contracts/protocol/PositionManager.sol b/contracts/protocol/PositionManager.sol index 3b27e874..8d358a31 100644 --- a/contracts/protocol/PositionManager.sol +++ b/contracts/protocol/PositionManager.sol @@ -18,7 +18,7 @@ import {SafeMath} from "@openzeppelin/contracts/utils/math/SafeMath.sol"; import {Errors} from "./libraries/helpers/Errors.sol"; import {IPositionManager} from "../interfaces/IPositionManager.sol"; -//import "hardhat/console.sol"; +import "hardhat/console.sol"; contract PositionManager is ReentrancyGuardUpgradeable, @@ -224,38 +224,42 @@ contract PositionManager is { SingleSlot memory _singleSlot = singleSlot; if (_isBuy && _singleSlot.pip != 0) { - require( - _pip <= _singleSlot.pip, - Errors.VL_LONG_PRICE_THAN_CURRENT_PRICE - ); +// require( +// _pip <= _singleSlot.pip, +// Errors.VL_LONG_PRICE_THAN_CURRENT_PRICE +// ); require( int128(_pip) >= (int256(getUnderlyingPriceInPip()) - - int128(maxFindingWordsIndex * 250)), Errors.VL_MUST_CLOSE_TO_INDEX_PRICE + int128(maxFindingWordsIndex * 250)), Errors.VL_MUST_CLOSE_TO_INDEX_PRICE_LONG ); } else { +// require( +// _pip >= _singleSlot.pip, +// Errors.VL_SHORT_PRICE_LESS_CURRENT_PRICE +// ); require( - _pip >= _singleSlot.pip, - Errors.VL_SHORT_PRICE_LESS_CURRENT_PRICE - ); - require( - _pip <= (getUnderlyingPriceInPip() + maxFindingWordsIndex * 250), Errors.VL_MUST_CLOSE_TO_INDEX_PRICE + _pip <= (getUnderlyingPriceInPip() + maxFindingWordsIndex * 250), Errors.VL_MUST_CLOSE_TO_INDEX_PRICE_SHORT ); } bool hasLiquidity = liquidityBitmap.hasLiquidity(_pip); //save gas - if ( - _pip == _singleSlot.pip && - hasLiquidity && - _singleSlot.isFullBuy != (_isBuy ? 1 : 2) - ) { - // open market - (sizeOut, openNotional) = _openMarketPositionWithMaxPip( - _size, - _isBuy, - _pip - ); - hasLiquidity = liquidityBitmap.hasLiquidity(_pip); + { + // TODO update lowest and highest late + // bool canOpenMarketWithMaxPip = (_isBuy && _pip >= _singleSlot.lowestSellPip && _singleSlot.lowestSellPip != 0) + // || (!_isBuy && _pip <= _singleSlot.highestBuyPip && _singleSlot.highestBuyPip != 0); + bool canOpenMarketWithMaxPip = (_isBuy && _pip >= _singleSlot.pip) || (!_isBuy && _pip <= _singleSlot.pip); + if ( + canOpenMarketWithMaxPip + ) { + // open market + (sizeOut, openNotional) = _openMarketPositionWithMaxPip( + _size, + _isBuy, + _pip + ); + hasLiquidity = liquidityBitmap.hasLiquidity(_pip); + } } uint128 remainingSize = _size - uint128(sizeOut); if (_size > sizeOut) { @@ -271,6 +275,12 @@ contract PositionManager is hasLiquidity, _isBuy ); + // TODO update assign highest and lowest + // if (_isBuy) { + // singleSlot.highestBuyPip = _pip; + // } else { + // singleSlot.lowestSellPip = _pip; + // } if (!hasLiquidity) { // set the bit to mark it has liquidity liquidityBitmap.toggleSingleBit(_pip, true); @@ -290,7 +300,18 @@ contract PositionManager is uint256 fee ) { + uint256 underlyingPip = getUnderlyingPriceInPip(); (sizeOut, openNotional) = _internalOpenMarketOrder(_size, _isBuy, 0); + + uint128 _afterPip = singleSlot.pip; + + bool pass = _isBuy + ? _afterPip <= (underlyingPip + maxFindingWordsIndex * 250) + : int128(_afterPip) >= (int256(underlyingPip) - int128(maxFindingWordsIndex * 250)); + if (!pass) { + revert(Errors.VL_MARKET_ORDER_MUST_CLOSE_TO_INDEX_PRICE); + } + fee = calcFee(openNotional); entryPrice = (openNotional * getBasisPoint()) / _size; } @@ -542,7 +563,7 @@ contract PositionManager is uint128 _fromPip, uint256 _dataLength, bool _toHigher - ) public view override returns (PipLiquidity[] memory, uint128) { + ) public view override returns (PipLiquidity[] memory, uint128, uint8) { uint128[] memory allInitializedPips = new uint128[]( uint128(_dataLength) ); @@ -559,7 +580,7 @@ contract PositionManager is liquidity: tickPosition[allInitializedPips[i]].liquidity }); } - return (allLiquidity, allInitializedPips[_dataLength - 1]); + return (allLiquidity, allInitializedPips[_dataLength - 1], singleSlot.isFullBuy); } function getQuoteAsset() public view override returns (IERC20) { @@ -764,9 +785,13 @@ contract PositionManager is (remainingSize, partialFilled, isBuy) = _tickPosition.cancelLimitOrder( _orderId ); + // if that pip doesn't have liquidity after closed order, toggle pip to uninitialized if (_tickPosition.liquidity == 0) { liquidityBitmap.toggleSingleBit(_pip, false); - singleSlot.isFullBuy = 0; + // only unset isFullBuy when cancel order pip == current pip + if (_pip == singleSlot.pip) { + singleSlot.isFullBuy = 0; + } } emit LimitOrderCancelled(isBuy, _orderId, _pip, remainingSize); } @@ -799,9 +824,15 @@ contract PositionManager is // TODO lock // get current tick liquidity SingleSlot memory _initialSingleSlot = singleSlot; + // TODO update assign lowest and highest + // if (_isBuy && _initialSingleSlot.lowestSellPip != 0 && _initialSingleSlot.lowestSellPip < _initialSingleSlot.pip) { + // _initialSingleSlot.pip = _initialSingleSlot.lowestSellPip; + // } else if (!_isBuy && _initialSingleSlot.highestBuyPip != 0 && _initialSingleSlot.highestBuyPip > _initialSingleSlot.pip) { + // _initialSingleSlot.pip = _initialSingleSlot.highestBuyPip; + // } //save gas SwapState memory state = SwapState({ - remainingSize: _size, + remainingSize: uint128(_size), pip: _initialSingleSlot.pip }); uint128 startPip; @@ -828,18 +859,17 @@ contract PositionManager is while (!onlyLoopOnce && state.remainingSize != 0) { StepComputations memory step; // updated findHasLiquidityInMultipleWords, save more gas + (step.pipNext) = liquidityBitmap + .findHasLiquidityInMultipleWords( + state.pip, + maxFindingWordsIndex, + !_isBuy + ); + // when open market with a limit max pip if (_maxPip != 0) { - step.pipNext = _maxPip; - onlyLoopOnce = true; - } else { - (step.pipNext) = liquidityBitmap - .findHasLiquidityInMultipleWords( - state.pip, - maxFindingWordsIndex, - !_isBuy - ); + // if order is buy and step.pipNext (pip has liquidity) > maxPip then break cause this is limited to maxPip and vice versa + if ((_isBuy && step.pipNext > _maxPip) || (!_isBuy && step.pipNext < _maxPip)) break; } - if (_maxPip != 0 && step.pipNext != _maxPip) break; if (step.pipNext == 0) { // no more next pip // state pip back 1 pip @@ -858,14 +888,14 @@ contract PositionManager is if (liquidity > state.remainingSize) { // pip position will partially filled and stop here tickPosition[step.pipNext].partiallyFill( - uint128(state.remainingSize) + state.remainingSize ); openNotional += ((state.remainingSize * pipToPrice(step.pipNext)) / BASE_BASIC_POINT); // remaining liquidity at current pip remainingLiquidity = liquidity - - uint128(state.remainingSize); + state.remainingSize; state.remainingSize = 0; state.pip = step.pipNext; isFullBuy = uint8( @@ -913,15 +943,26 @@ contract PositionManager is } // TODO write a checkpoint that we shift a range of ticks } - singleSlot.pip = _maxPip != 0 ? _maxPip : state.pip; + + // TODO uncomment this when update lowest and highest + // unset lowestSellPip or highestBuyPip after market order update new current price + //if (state.pip != _initialSingleSlot.pip) { + // if (_initialSingleSlot.lowestSellPip != 0 && _isBuy) { + // singleSlot.lowestSellPip = 0; + // } else if (_initialSingleSlot.highestBuyPip != 0 && !_isBuy) { + // singleSlot.highestBuyPip = 0; + // } + //} + passedPipCount = _maxPip != 0 ? 0 : passedPipCount; singleSlot.isFullBuy = isFullBuy; sizeOut = _size - state.remainingSize; + singleSlot.pip = _maxPip != 0 && sizeOut != 0 && sizeOut != _size ? _maxPip : state.pip; _addReserveSnapshot(); emit MarketFilled( _isBuy, sizeOut, - _maxPip != 0 ? _maxPip : state.pip, + _maxPip != 0 && state.remainingSize != 0 ? _maxPip : state.pip, passedPipCount, remainingLiquidity ); diff --git a/contracts/protocol/libraries/helpers/Errors.sol b/contracts/protocol/libraries/helpers/Errors.sol index 74b8656e..a6b08008 100644 --- a/contracts/protocol/libraries/helpers/Errors.sol +++ b/contracts/protocol/libraries/helpers/Errors.sol @@ -37,9 +37,12 @@ library Errors { string public constant VL_NOT_WHITELIST_MANAGER = "19"; // '' string public constant VL_INVALID_ORDER = "20"; // '' string public constant VL_ONLY_PENDING_ORDER = "21"; // '' - string public constant VL_MUST_SAME_SIDE = "22"; + string public constant VL_MUST_SAME_SIDE_SHORT = "22.1"; + string public constant VL_MUST_SAME_SIDE_LONG = "22.2"; string public constant VL_MUST_SMALLER_REVERSE_QUANTITY = "23"; - string public constant VL_MUST_CLOSE_TO_INDEX_PRICE = "24"; + string public constant VL_MUST_CLOSE_TO_INDEX_PRICE_SHORT = "24.1"; + string public constant VL_MUST_CLOSE_TO_INDEX_PRICE_LONG = "24.2"; + string public constant VL_MARKET_ORDER_MUST_CLOSE_TO_INDEX_PRICE = "25"; enum CollateralManagerErrors { NO_ERROR diff --git a/contracts/protocol/libraries/position/PipConversionMath.sol b/contracts/protocol/libraries/position/PipConversionMath.sol index 7bcf1c43..1619fa07 100644 --- a/contracts/protocol/libraries/position/PipConversionMath.sol +++ b/contracts/protocol/libraries/position/PipConversionMath.sol @@ -15,8 +15,8 @@ library PipConversionMath { return int256(uQuantity * uint256(pip) / (leverage * basisPoint)); } - function toNotional(uint128 pip, uint64 basisPoint) internal pure returns(uint256){ - return uint256(pip) / basisPoint; + function toNotional(uint128 pip, uint64 baseBasisPoint, uint64 basisPoint) internal pure returns(uint256){ + return uint256(pip) * baseBasisPoint / basisPoint; } } diff --git a/contracts/protocol/libraries/position/PositionHouseFunction.sol b/contracts/protocol/libraries/position/PositionHouseFunction.sol index f6ea36ac..3dceab77 100644 --- a/contracts/protocol/libraries/position/PositionHouseFunction.sol +++ b/contracts/protocol/libraries/position/PositionHouseFunction.sol @@ -62,7 +62,8 @@ library PositionHouseFunction { _latestCumulativePremiumFraction ), handleNotionalInOpenReverse( - _newNotional, + (_positionData.openNotional * _newQuantity.abs()) / + _positionData.quantity.abs(), _positionData, _positionDataWithoutLimit ), @@ -320,9 +321,9 @@ library PositionHouseFunction { // NOTE: _entryPrice must divide _baseBasicPoint to get the "raw entry price" uint256 _orderNotional = _orderQuantity.abs() * ( _entryPrice == 0 ? - _limitOrder.pip.toNotional(_basisPoint) - : _entryPrice / _baseBasicPoint - ); + _limitOrder.pip.toNotional(_baseBasicPoint, _basisPoint) + : _entryPrice + ) / _baseBasicPoint; uint256 _orderMargin = _orderNotional / _limitOrder.leverage; _positionData = _positionData.accumulateLimitOrder( _orderQuantity, @@ -419,10 +420,16 @@ library PositionHouseFunction { int256 positionQuantity; } + enum ReturnCheckOrderSideAndQuantity { + PASS, + MUST_SAME_SIDE, + MUST_SMALLER_QUANTITY + } + function checkPendingOrderSideAndQuantity( IPositionManager _positionManager, CheckSideAndQuantityParam memory _checkParam - ) public view returns (bool) { + ) public view returns (ReturnCheckOrderSideAndQuantity) { // Get order in both increase and reduce limit order array bool newOrderIsBuy = _checkParam.side == Position.Side.LONG; bool positionIsBuy = _checkParam.positionQuantity > 0; @@ -433,10 +440,12 @@ library PositionHouseFunction { // if there are pending limit increase order if (totalPendingQuantity != 0) { // if new order is same side as pending order return true - if (newOrderIsBuy == pendingOrderIsBuy) - return true; - else - return false; + if (newOrderIsBuy == pendingOrderIsBuy) { + return ReturnCheckOrderSideAndQuantity.PASS; + } + else { + return ReturnCheckOrderSideAndQuantity.MUST_SAME_SIDE; + } } // if there are not pending limit increase order, for loop check array limit reduce @@ -446,18 +455,21 @@ library PositionHouseFunction { uint256 totalReverseQuantity = totalPendingQuantity + _checkParam.orderQuantity; // if total quantity of reverse order is smaller than current position // and new order is same side as pending order, return true - if (newOrderIsBuy == pendingOrderIsBuy && totalReverseQuantity <= _checkParam.positionQuantity.abs()) - return true; - else - return false; + if (newOrderIsBuy == pendingOrderIsBuy && totalReverseQuantity <= _checkParam.positionQuantity.abs()) { + return ReturnCheckOrderSideAndQuantity.PASS; + } else if (newOrderIsBuy != pendingOrderIsBuy) { + return ReturnCheckOrderSideAndQuantity.MUST_SAME_SIDE; + } else { + return ReturnCheckOrderSideAndQuantity.MUST_SMALLER_QUANTITY; + } } // if user don't have position, return true - if (_checkParam.positionQuantity == 0) return true; + if (_checkParam.positionQuantity == 0) return ReturnCheckOrderSideAndQuantity.PASS; // if user don't have pending order but new order is reverse, order quantity > position quantity, return false if (newOrderIsBuy != positionIsBuy && _checkParam.orderQuantity > _checkParam.positionQuantity.abs()) { - return false; + return ReturnCheckOrderSideAndQuantity.MUST_SMALLER_QUANTITY; } - return true; + return ReturnCheckOrderSideAndQuantity.PASS; } /// @dev get total pending order quantity from pending limit orders @@ -481,7 +493,9 @@ library PositionHouseFunction { if (!isFilled && quantity > partialFilled) { totalPendingQuantity += (quantity - partialFilled); } - _isBuy = isBuy; + if (quantity != 0) { + _isBuy = isBuy; + } } } @@ -557,7 +571,9 @@ library PositionHouseFunction { Position.LiquidatedData memory _positionLiquidatedData, Position.Data memory _positionDataWithoutLimit, PositionLimitOrder.Data[] memory _limitOrders, - PositionLimitOrder.Data[] memory _reduceLimitOrders + PositionLimitOrder.Data[] memory _reduceLimitOrders, + int128 _positionLatestCumulativePremiumFraction, + int128 _latestCumulativePremiumFraction ) public view returns (int256 totalClaimableAmount) { ClaimAbleState memory state; IPositionManager _positionManager = IPositionManager(_pmAddress); @@ -579,7 +595,7 @@ library PositionHouseFunction { _pDataIncr, _limitOrders[i].entryPrice ); - _removeUnfilledMargin(_positionManager, state, _limitOrders[i]); +// _removeUnfilledMargin(_positionManager, state, _limitOrders[i]); } state.accMargin = _pDataIncr.margin; if(_pDataIncr.quantity == 0){ @@ -596,11 +612,15 @@ library PositionHouseFunction { _accumulatePnLInReduceLimitOrder(state, _cpIncrPosition, _reduceLimitOrders[j].pip, _filledAmount, _reduceLimitOrders[j].entryPrice, _reduceLimitOrders[j].leverage); } } + if (_pDataIncr.lastUpdatedCumulativePremiumFraction == 0) { + _pDataIncr.lastUpdatedCumulativePremiumFraction = _positionLatestCumulativePremiumFraction; + } + (,, int256 fundingPayment) = calcRemainMarginWithFundingPayment(_pDataIncr, state.accMargin, _latestCumulativePremiumFraction); state.amount += int256(state.accMargin) + + fundingPayment + _manualMargin - int256(_positionLiquidatedData.margin); - return state.amount < 0 ? int256(0) : state.amount; } @@ -654,13 +674,13 @@ library PositionHouseFunction { // already checked if _positionData.openNotional == 0, then used _positionDataWithoutLimit before // openNotional can be negative same as closedNotional int256 openNotional = _filledAmount * int256(_entryPrice) / int64(state.baseBasicPoint); - state.accMargin += closedNotional.abs() / _leverage; +// state.accMargin += closedNotional.abs() / _leverage; state.amount += (openNotional - closedNotional); state.totalReduceOrderFilledAmount += _filledAmount.abs(); // now position should be reduced // should never overflow? - _cpIncrPosition.quantity = _cpIncrPosition.quantity.subAmount(uint256(_filledAmount)); + _cpIncrPosition.quantity = _cpIncrPosition.quantity.subAmount(_filledAmount.abs()); // avoid overflow due to absolute error if (openNotional.abs() >= _cpIncrPosition.openNotional) { _cpIncrPosition.openNotional = 0; @@ -806,12 +826,29 @@ library PositionHouseFunction { return positionResp; } + function calcReturnWhenOpenReverse( + address _pmAddress, + address _trader, + uint256 _sizeOut, + Position.Data memory _oldPosition + ) public view returns (int256 totalReturn) { + (, int256 unrealizedPnl) = getPositionNotionalAndUnrealizedPnl( + _pmAddress, + _trader, + PositionHouseStorage.PnlCalcOption.SPOT_PRICE, + _oldPosition + ); + uint256 reduceMarginRequirement = (_oldPosition.margin * _sizeOut) / _oldPosition.quantity.abs(); + int256 realizedPnl = (unrealizedPnl * int256(_sizeOut)) / _oldPosition.quantity.absInt(); + totalReturn = int256(reduceMarginRequirement) + realizedPnl; + } + function calcRemainMarginWithFundingPayment( Position.Data memory _oldPosition, uint256 _pMargin, int256 _latestCumulativePremiumFraction ) - internal + public view returns ( uint256 remainMargin, @@ -821,12 +858,10 @@ library PositionHouseFunction { { // calculate fundingPayment if (_oldPosition.quantity != 0) { - // TODO: open when the funding rate is fixed - fundingPayment = 0; -// fundingPayment = -// (_latestCumulativePremiumFraction - -// _oldPosition.lastUpdatedCumulativePremiumFraction) * -// _oldPosition.quantity / (PREMIUM_FRACTION_DENOMINATOR); + fundingPayment = + (_latestCumulativePremiumFraction - + _oldPosition.lastUpdatedCumulativePremiumFraction) * + _oldPosition.quantity / (PREMIUM_FRACTION_DENOMINATOR); } // calculate remain margin, if remain margin is negative, set to zero and leave the rest to bad debt diff --git a/contracts/protocol/libraries/types/PositionManagerStorage.sol b/contracts/protocol/libraries/types/PositionManagerStorage.sol index 26f90506..7dec6a36 100644 --- a/contracts/protocol/libraries/types/PositionManagerStorage.sol +++ b/contracts/protocol/libraries/types/PositionManagerStorage.sol @@ -41,6 +41,9 @@ contract PositionManagerStorage { //1: buy //2: sell uint8 isFullBuy; + // highest pip order buy + uint128 highestBuyPip; + uint128 lowestSellPip; } struct PipLiquidity { @@ -72,7 +75,7 @@ contract PositionManagerStorage { } struct SwapState { - uint256 remainingSize; + uint128 remainingSize; // the tick associated with the current price uint128 pip; } diff --git a/contracts/protocol/modules/CumulativePremiumFractions.sol b/contracts/protocol/modules/CumulativePremiumFractions.sol index 32e72676..e2257af0 100644 --- a/contracts/protocol/modules/CumulativePremiumFractions.sol +++ b/contracts/protocol/modules/CumulativePremiumFractions.sol @@ -18,22 +18,20 @@ abstract contract CumulativePremiumFractions { ); function payFunding(IPositionManager _positionManager) public { - revert("funding paused"); - // TODO unpause when the funding is fixed -// address _pmAddress = address(_positionManager); -// int256 premiumFraction = _positionManager.settleFunding(); -// int128 newestCumulativePremiumFraction = int128(premiumFraction) + -// getLatestCumulativePremiumFraction(_pmAddress); -// cumulativePremiumFractions[_pmAddress].push( -// newestCumulativePremiumFraction -// ); -// emit FundingPaid( -// premiumFraction, -// newestCumulativePremiumFraction, -// address(_positionManager), -// msg.sender, -// block.timestamp -// ); + address _pmAddress = address(_positionManager); + int256 premiumFraction = _positionManager.settleFunding(); + int128 newestCumulativePremiumFraction = int128(premiumFraction) + + getLatestCumulativePremiumFraction(_pmAddress); + cumulativePremiumFractions[_pmAddress].push( + newestCumulativePremiumFraction + ); + emit FundingPaid( + premiumFraction, + newestCumulativePremiumFraction, + address(_positionManager), + msg.sender, + block.timestamp + ); } // TODO remove once fix the funding for limit order issue @@ -86,13 +84,11 @@ abstract contract CumulativePremiumFractions { _positionManager ); if (_oldPosition.quantity != 0) { - fundingPayment = 0; - // TODO: open when the funding rate is fixed -// fundingPayment = -// ((latestCumulativePremiumFraction - -// _oldPosition.lastUpdatedCumulativePremiumFraction) * -// _oldPosition.quantity) / -// PREMIUM_FRACTION_DENOMINATOR; + fundingPayment = + ((latestCumulativePremiumFraction - + _oldPosition.lastUpdatedCumulativePremiumFraction) * + _oldPosition.quantity) / + PREMIUM_FRACTION_DENOMINATOR; } // calculate remain margin, if remain margin is negative, set to zero and leave the rest to bad debt diff --git a/contracts/protocol/modules/LimitOrder.sol b/contracts/protocol/modules/LimitOrder.sol index 1ec9ade2..5e1cbf03 100644 --- a/contracts/protocol/modules/LimitOrder.sol +++ b/contracts/protocol/modules/LimitOrder.sol @@ -5,10 +5,13 @@ import {PositionHouseMath} from "../libraries/position/PositionHouseMath.sol"; import {PositionHouseFunction} from "../libraries/position/PositionHouseFunction.sol"; import "../libraries/position/PositionLimitOrder.sol"; import "../libraries/helpers/Quantity.sol"; +import "../libraries/helpers/Int256Math.sol"; import "../libraries/types/PositionHouseStorage.sol"; import {Errors} from "../libraries/helpers/Errors.sol"; import "./ClaimableAmountManager.sol"; +import "hardhat/console.sol"; + abstract contract LimitOrderManager is ClaimableAmountManager, PositionHouseStorage { event OpenLimit( uint64 orderId, @@ -27,6 +30,7 @@ abstract contract LimitOrderManager is ClaimableAmountManager, PositionHouseStor ); using Quantity for int256; + using Int256Math for int256; // increase orders mapping(address => mapping(address => PositionLimitOrder.Data[])) private limitOrders; @@ -58,12 +62,15 @@ abstract contract LimitOrderManager is ClaimableAmountManager, PositionHouseStor _orders[_orderIdx] = blankLimitOrderData; } - (, uint256 _refundMargin, ) = _positionManager.getNotionalMarginAndFee( - refundQuantity, - _order.pip, - _order.leverage - ); - insuranceFund.withdraw(_pmAddress, _trader, _refundMargin); + // only increase order can get withdraw fund from contract + if (_isReduce == 0) { + (, uint256 _refundMargin, ) = _positionManager.getNotionalMarginAndFee( + refundQuantity, + _order.pip, + _order.leverage + ); + insuranceFund.withdraw(_pmAddress, _trader, _refundMargin); + } emit CancelLimitOrder(_trader, _pmAddress, _order.pip, _order.orderId); } @@ -81,7 +88,7 @@ abstract contract LimitOrderManager is ClaimableAmountManager, PositionHouseStor int256 _quantity = _side == Position.Side.LONG ? int256(_uQuantity) : -int256(_uQuantity); - require(_requireOrderSideAndQuantity(_pmAddress, _trader, _side, _uQuantity, _oldPosition.quantity),Errors.VL_MUST_SAME_SIDE); + _requireOrderSideAndQuantity(_pmAddress, _trader, _side, _uQuantity, _oldPosition.quantity); (openLimitResp.orderId, openLimitResp.sizeOut) = _openLimitOrder( _positionManager, @@ -103,16 +110,19 @@ abstract contract LimitOrderManager is ClaimableAmountManager, PositionHouseStor blockNumber: uint64(block.number) }); if (openLimitResp.orderId != 0){ - _storeLimitOrder( + _storeLimitOrder( _newOrder, _positionManager, _trader, _quantity - ); + ); } (, uint256 marginToVault, uint256 fee) = _positionManager .getNotionalMarginAndFee(_uQuantity, _pip, _leverage); - insuranceFund.deposit(_pmAddress, _trader, marginToVault, fee); + if (_oldPosition.quantity == 0 || _oldPosition.quantity.isSameSide(_quantity)) { + insuranceFund.deposit(_pmAddress, _trader, marginToVault, fee); + } + _setLimitOrderPremiumFraction(_pmAddress, _trader, getLatestCumulativePremiumFraction(_pmAddress)); uint256 limitOrderMargin = marginToVault * (_uQuantity - openLimitResp.sizeOut) / _uQuantity; } emit OpenLimit( @@ -202,24 +212,31 @@ abstract contract LimitOrderManager is ClaimableAmountManager, PositionHouseStor _quantity -= (closePositionResp.exchangedPositionSize) .abs128(); } - - } else { (orderId, sizeOut, openNotional) = _positionManager .openLimitPosition(_pip, _quantity, _rawQuantity > 0); if (sizeOut != 0) { + { + + if (!_rawQuantity.isSameSide(oldPosition.quantity) && oldPosition.quantity != 0) { + int256 totalReturn = PositionHouseFunction.calcReturnWhenOpenReverse(_pmAddress, _trader, sizeOut, oldPosition); + insuranceFund.withdraw(_pmAddress, _trader, totalReturn.abs()); + } + } // case: open a limit order at the last price // the order must be partially executed // then update the current position - Position.Data memory newData = PositionHouseFunction.handleMarketPart( - oldPosition, - _getPositionMap(_pmAddress, _trader), - openNotional, - _rawQuantity > 0 ? int256(sizeOut) : -int256(sizeOut), - _leverage, - getLatestCumulativePremiumFraction(_pmAddress) - ); - _updatePositionMap(_pmAddress, _trader, newData); + { + Position.Data memory newData = PositionHouseFunction.handleMarketPart( + oldPosition, + _getPositionMap(_pmAddress, _trader), + openNotional, + _rawQuantity > 0 ? int256(sizeOut) : - int256(sizeOut), + _leverage, + getLatestCumulativePremiumFraction(_pmAddress) + ); + _updatePositionMap(_pmAddress, _trader, newData); + } } } } @@ -268,6 +285,14 @@ abstract contract LimitOrderManager is ClaimableAmountManager, PositionHouseStor reduceLimitOrders[_pmAddress][_trader].push(order); } + function _setLimitOrderPremiumFraction( + address _pmAddress, + address _trader, + int128 _latestCumulativeFraction + ) internal { + limitOrderPremiumFraction[_pmAddress][_trader] = _latestCumulativeFraction; + } + function _emptyLimitOrders(address _pmAddress, address _trader) internal { if (_getLimitOrders(_pmAddress, _trader).length > 0) { delete limitOrders[_pmAddress][_trader]; @@ -294,13 +319,20 @@ abstract contract LimitOrderManager is ClaimableAmountManager, PositionHouseStor reduceLimitOrders[_pmAddress][_trader][index] = blankLimitOrderData; } + function _getLimitOrderPremiumFraction( + address _pmAddress, + address _trader + ) internal view returns (int128) { + return limitOrderPremiumFraction[_pmAddress][_trader]; + } + function _requireOrderSideAndQuantity( address _pmAddress, address _trader, Position.Side _side, uint256 _quantity, int256 _positionQuantity - ) internal view returns (bool) { + ) internal view { PositionHouseFunction.CheckSideAndQuantityParam memory checkSideAndQuantityParam = PositionHouseFunction.CheckSideAndQuantityParam({ limitOrders: _getLimitOrders(_pmAddress, _trader), reduceLimitOrders: _getReduceLimitOrders(_pmAddress, _trader), @@ -308,7 +340,16 @@ abstract contract LimitOrderManager is ClaimableAmountManager, PositionHouseStor orderQuantity: _quantity, positionQuantity: _positionQuantity }); - return PositionHouseFunction.checkPendingOrderSideAndQuantity(IPositionManager(_pmAddress), checkSideAndQuantityParam); + PositionHouseFunction.ReturnCheckOrderSideAndQuantity checkOrder = PositionHouseFunction.checkPendingOrderSideAndQuantity(IPositionManager(_pmAddress), checkSideAndQuantityParam); + if (checkOrder == PositionHouseFunction.ReturnCheckOrderSideAndQuantity.MUST_SAME_SIDE) { + if (_side == Position.Side.LONG) { + revert (Errors.VL_MUST_SAME_SIDE_LONG); + } else { + revert (Errors.VL_MUST_SAME_SIDE_SHORT); + } + } else if (checkOrder == PositionHouseFunction.ReturnCheckOrderSideAndQuantity.MUST_SMALLER_QUANTITY) { + revert (Errors.VL_MUST_SMALLER_REVERSE_QUANTITY); + } } function _needToClaimFund( @@ -339,7 +380,9 @@ abstract contract LimitOrderManager is ClaimableAmountManager, PositionHouseStor getDebtPosition(a,t), _getPositionMap(a, t), _getLimitOrders(a, t), - _getReduceLimitOrders(a, t) + _getReduceLimitOrders(a, t), + _getLimitOrderPremiumFraction(a, t), + getLatestCumulativePremiumFraction(a) ); } @@ -401,4 +444,5 @@ abstract contract LimitOrderManager is ClaimableAmountManager, PositionHouseStor * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[49] private __gap; + mapping(address => mapping(address => int128)) public limitOrderPremiumFraction; } diff --git a/contracts/test/ChainLinkPriceFeedMock.sol b/contracts/test/ChainLinkPriceFeedMock.sol new file mode 100644 index 00000000..c6a8f3e7 --- /dev/null +++ b/contracts/test/ChainLinkPriceFeedMock.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.0; +import "../protocol/ChainLinkPriceFeed.sol"; +contract ChainLinkPriceFeedMock is ChainLinkPriceFeed { + mapping (bytes32 => uint256) public mockIndexPriceFeedMap; + mapping (bytes32 => uint256) public mockTwapPriceFeedMap; + function mockIndexPrice(bytes32 _priceFeedKey, uint256 _indexPrice) public { + mockIndexPriceFeedMap[_priceFeedKey] = _indexPrice; + } + function mockTwapPrice(bytes32 _priceFeedKey, uint256 _twapPrice) public { + mockTwapPriceFeedMap[_priceFeedKey] = _twapPrice; + } + function getTwapPrice(bytes32 _priceFeedKey, uint256 _interval) external view override returns (uint256) { + return mockTwapPriceFeedMap[_priceFeedKey]; + } + function getPrice(bytes32 _priceFeedKey) external view override returns (uint256) { + return mockIndexPriceFeedMap[_priceFeedKey]; + } +} \ No newline at end of file diff --git a/contracts/test/PositionHouseFunctionTest.sol b/contracts/test/PositionHouseFunctionTest.sol index 4b37068c..15c5e8e4 100644 --- a/contracts/test/PositionHouseFunctionTest.sol +++ b/contracts/test/PositionHouseFunctionTest.sol @@ -8,22 +8,23 @@ import "../protocol/libraries/position/PositionHouseFunction.sol"; contract PositionHouseFunctionTest { function getClaimAmount( address _pmAddress, - address _trader, + int256 _manualMargin, Position.LiquidatedData memory _positionLiquidatedData, Position.Data memory _positionDataWithoutLimit, PositionLimitOrder.Data[] memory _limitOrders, PositionLimitOrder.Data[] memory _reduceLimitOrders, - uint256 _canClaimAmountInMap, - int256 _manualMarginInMap, - int256 _debtProfit + int128 _positionLatestCumulativePremiumFraction, + int128 _latestCumulativePremiumFraction ) public view returns (int256 totalClaimableAmount){ return PositionHouseFunction.getClaimAmount( _pmAddress, - _manualMarginInMap, + _manualMargin, _positionLiquidatedData, _positionDataWithoutLimit, _limitOrders, - _reduceLimitOrders + _reduceLimitOrders, + _positionLatestCumulativePremiumFraction, + _latestCumulativePremiumFraction ); } } diff --git a/deploy/ContractWrapperFactory.ts b/deploy/ContractWrapperFactory.ts index b8b11c52..e8b85a15 100644 --- a/deploy/ContractWrapperFactory.ts +++ b/deploy/ContractWrapperFactory.ts @@ -237,7 +237,23 @@ export class ContractWrapperFactory { await this.db.saveAddressByKey('ChainLinkPriceFeed', address); } + } + async createChainlinkPriceFeedQc( args: CreateChainLinkPriceFeed){ + const ChainLinkPriceFeed = await this.hre.ethers.getContractFactory("ChainLinkPriceFeedMock"); + const chainlinkContractAddress = await this.db.findAddressByKey(`ChainLinkPriceFeed`); + if (chainlinkContractAddress) { + const upgraded = await this.hre.upgrades.upgradeProxy(chainlinkContractAddress, ChainLinkPriceFeed); + await this.verifyImplContract(upgraded.deployTransaction); + } else { + const contractArgs = []; + const instance = await this.hre.upgrades.deployProxy(ChainLinkPriceFeed, contractArgs); + console.log("wait for deploy chainlink price feed"); + await instance.deployed(); + const address = instance.address.toString().toLowerCase(); + console.log(`Chain link price feed address : ${address}`) + await this.db.saveAddressByKey('ChainLinkPriceFeed', address); + } } } \ No newline at end of file diff --git a/deploy/DataStore.ts b/deploy/DataStore.ts index 80dde2e0..fbc7b6df 100644 --- a/deploy/DataStore.ts +++ b/deploy/DataStore.ts @@ -5,7 +5,7 @@ export class DeployDataStore { db: typeof Datastore; // TODO change file deploy db constructor(filename = undefined) { - this.db = new Datastore({filename: filename || './deployData_develop_testnet.db', autoload: true}); + this.db = new Datastore({filename: filename || './deployData_develop_qc.db', autoload: true}); } async findAddressByKey(key: string): Promise { diff --git a/deploy/migrations/004-deploy-chainlink-pricefeed.ts b/deploy/migrations/004-deploy-chainlink-pricefeed.ts index 2fc82284..3d3b6aac 100644 --- a/deploy/migrations/004-deploy-chainlink-pricefeed.ts +++ b/deploy/migrations/004-deploy-chainlink-pricefeed.ts @@ -1,19 +1,17 @@ import {MigrationContext, MigrationDefinition} from "../types"; import {ContractWrapperFactory} from "../ContractWrapperFactory"; - - const migrations: MigrationDefinition = { getTasks: (context: MigrationContext) => ({ 'deploy chain link price feed': async () => { /** * Currently no param */ - - await context.factory.createChainlinkPriceFeed({}) - + if (context.network == "qc") { + await context.factory.createChainlinkPriceFeedQc({}) + } else { + await context.factory.createChainlinkPriceFeed({}) + } } }) } - - -export default migrations; +export default migrations; \ No newline at end of file diff --git a/deploy/migrations/005-deploy-position-manager_testnet.ts b/deploy/migrations/005-deploy-position-manager_testnet.ts index 54577042..69403f61 100644 --- a/deploy/migrations/005-deploy-position-manager_testnet.ts +++ b/deploy/migrations/005-deploy-position-manager_testnet.ts @@ -23,12 +23,12 @@ const migrations: MigrationDefinition = { const chainLinkPriceFeedContractAddress = await context.db.findAddressByKey('ChainLinkPriceFeed') await context.factory.createPositionManager({ quoteAsset: await context.db.getMockContract(`BUSD`), - initialPrice: 4500000, + initialPrice: 3000000, priceFeedKey: 'BTC', basisPoint: 100, baseBasisPoint: 10000, tollRatio: 10000, - maxFindingWordsIndex: 1800, + maxFindingWordsIndex: 800, fundingPeriod: 1000, priceFeed: chainLinkPriceFeedContractAddress, quote: 'BUSD', @@ -52,12 +52,12 @@ const migrations: MigrationDefinition = { const chainLinkPriceFeedContractAddress = await context.db.findAddressByKey('ChainLinkPriceFeed') await context.factory.createPositionManager({ quoteAsset: await context.db.getMockContract(`BUSD`), - initialPrice: 21000, + initialPrice: 10000, priceFeedKey: 'DOT', basisPoint: 1000, baseBasisPoint: 1000000, tollRatio: 10000, - maxFindingWordsIndex: 20, + maxFindingWordsIndex: 8, fundingPeriod: 1000, priceFeed: chainLinkPriceFeedContractAddress, quote: 'BUSD', @@ -80,12 +80,12 @@ const migrations: MigrationDefinition = { const chainLinkPriceFeedContractAddress = await context.db.findAddressByKey('ChainLinkPriceFeed') await context.factory.createPositionManager({ quoteAsset: await context.db.getMockContract(`BUSD`), - initialPrice: 43000, + initialPrice: 32500, priceFeedKey: 'BNB', basisPoint: 100, baseBasisPoint: 10000, tollRatio: 10000, - maxFindingWordsIndex: 900, + maxFindingWordsIndex: 20, fundingPeriod: 1000, priceFeed: chainLinkPriceFeedContractAddress, quote: 'BUSD', @@ -108,12 +108,12 @@ const migrations: MigrationDefinition = { const chainLinkPriceFeedContractAddress = await context.db.findAddressByKey('ChainLinkPriceFeed') await context.factory.createPositionManager({ quoteAsset: await context.db.getMockContract(`BUSD`), - initialPrice: 17000, + initialPrice: 7500, priceFeedKey: 'LINK', basisPoint: 1000, baseBasisPoint: 100000, tollRatio: 10000, - maxFindingWordsIndex: 50, + maxFindingWordsIndex: 8, fundingPeriod: 1000, priceFeed: chainLinkPriceFeedContractAddress, quote: 'BUSD', diff --git a/deploy/types.ts b/deploy/types.ts index 5232c62b..7a11a32c 100644 --- a/deploy/types.ts +++ b/deploy/types.ts @@ -12,7 +12,7 @@ export interface MigrationDefinition { } export type Stage = "production" | "staging" | "test" -export type Network = "bsc_testnet" | "bsc_mainnet" +export type Network = "bsc_testnet" | "bsc_mainnet" | "qc" export interface MigrationContext { stage: Stage diff --git a/deployData_develop_qc.db b/deployData_develop_qc.db index 69325e4e..2f442e28 100644 --- a/deployData_develop_qc.db +++ b/deployData_develop_qc.db @@ -1,20 +1,21 @@ -{"address":"0x1fB84ee814B24BFFd057F6572CCB9512c23706ef","key":"Mock:USDT","_id":"8mjxPcmNd3T3maiV"} -{"address":"yes","key":"0x8f46237E7A6197fb2F2441a904A3Bf34A274E818:verified","_id":"AmSD04hrLc6oAm5d"} -{"address":"0xb4d4d8021f786831175ee22f7525abf8de30c545","key":"PositionHouseFunction","_id":"b5Ghu8q80EcWrHVr"} -{"address":"0x8f46237E7A6197fb2F2441a904A3Bf34A274E818","key":"PositionHouse","_id":"fDi5vbWoCkyGBiyZ"} -{"address":"0xc0924026252AD94BF316647842953F0a68701443","key":"Mock:BUSD","_id":"g8NIewi57UhCILOw"} -{"address":"yes","key":"0xbd243152DCFfab8BA6C879CA6cA6f66d07975e62:verified","_id":"j9Cdq4Q6eefaRmt7"} -{"address":"yes","key":"0xC508F3799dd0C8E26694331B4EF6e04974e9B321:verified","_id":"lytZZclcT1aqulAY"} -{"address":"0xbd243152DCFfab8BA6C879CA6cA6f66d07975e62","key":"InsuranceFund","_id":"qUVcC0aoyPzT7QhJ"} -{"address":"0x9D017ed58E7c99dFc88d2a06BF2F620683256BAe","key":"ChainLinkPriceFeed","_id":"s6ggIgbn7HQGuKrE"} -{"address":"0xbdc77717dafec4c5517420cfa871298bf73b1bc7","key":"PositionHouseMath","_id":"tpXdiZ3R7LWfDYjh"} -{"address":"yes","key":"0x79a86676959C9ea5C92F062F2007A1be0e4D61a9:verified","_id":"rk46gB3sGWwfkRy4"} -{"address":"0x79a86676959C9ea5C92F062F2007A1be0e4D61a9","key":"PositionManager:BTC_BUSD","_id":"EYjmwsXpT5ANzUJH"} -{"address":"yes","key":"0x0Fe639970A6127AA2A6e3c501aBCBf5532A3E3f0:verified","_id":"mQv8GLy9RZws4K69"} -{"address":"0x0Fe639970A6127AA2A6e3c501aBCBf5532A3E3f0","key":"PositionManager:ETH_BUSD","_id":"0hizR0qlvjYcZlnV"} -{"address":"yes","key":"0x224efCED9a7bE253040AabC52Ef022765CF39daf:verified","_id":"K84dLTj9paaAiJEE"} -{"address":"0x224efCED9a7bE253040AabC52Ef022765CF39daf","key":"PositionManager:BNB_BUSD","_id":"fX3DyBUWpEiAnE3c"} -{"address":"yes","key":"0xbDC6c3FEb2ddd5C633d0d6e01590958d522D3B9a:verified","_id":"ymUlUPj69F18lNyl"} -{"address":"0xbDC6c3FEb2ddd5C633d0d6e01590958d522D3B9a","key":"PositionManager:SOL_BUSD","_id":"09yB9TAreMF2o2bH"} -{"address":"yes","key":"0x6627Be97956baF282611dcfF87eF3d9b41E0aedE:verified","_id":"0JEnbdz3NAKXdakk"} -{"address":"0x6627Be97956baF282611dcfF87eF3d9b41E0aedE","key":"PositionManager:POSI_BUSD","_id":"T5pg0daF4UB78DfH"} +{"address":"0xf6a7881ec822a0165196541187534d75f0a29ff1","key":"PositionHouseViewer","_id":"6OkmIvzbzFUmE5uK"} +{"address":"0x644a25723a2c005fece3702057bb3b86fcbe3617","key":"PositionHouse","_id":"CF1gpt4soYdCKUt7"} +{"address":"0xf7da00f794fbae33a914aa834d85099cdc25a3e8","key":"PositionHouseConfigurationProxy","_id":"DQHqUBwFNnMGfT0D"} +{"address":"0x61fcaf57560e430cab7214de622f14316bb31440","key":"ChainLinkPriceFeed","_id":"FNQeB3THNf5mQ52n"} +{"address":"0xC5758DcEF3C651d9faB5F609deC8cEe111fC1ff4","key":"Mock:USDT","_id":"H3lfqkJzEtKaRBy1"} +{"address":"0xa3b931e86f8ba27a7842e761dd2a4673759e9c28","key":"PositionHouseFunction","_id":"Ph8vfkMMyhULGmMV"} +{"address":"0x23DF9632Fe9C2CED34D2527A486F5C74E0aA2483","key":"Mock:BUSD","_id":"RGWNFfmU53QvGeZX"} +{"address":"0x533759517402de518b5c637ee70ea08e86e0e68d","key":"PositionHouseMath","_id":"XBT7gmSra7VRNWGs"} +{"address":"0xa13b9bc5b56c99200249d602559f70e741b17e9c","key":"PositionManager:BNB_BUSD","_id":"XjO3HnZQAIF0SERi"} +{"address":"0x8d059d6708bc9d5efe1c3f6cc09c8149a4de3dc9","key":"PositionManager:DOT_BUSD","_id":"rULATDGD7QiyVDjl"} +{"address":"0xe3aba611cfb6bc896bc36b6ef7ec11546803fdbc","key":"InsuranceFund","_id":"uOggci8t8C04WPBz"} +{"address":"0xcdcc2e3448508ce1c1e8a423ad407d15a966e0c8","key":"PositionManager:LINK_BUSD","_id":"uia2Tx9DZdSxA76l"} +{"address":"0x35e0b12f9bcfad984fe8a43bfa5d0c1385f88532","key":"PositionManager:BTC_BUSD","_id":"yoUgiu5L4n1GgKGF"} +{"address":"0x61323a9b63c3696c0926a921ebb0255f8d8a5348","key":"PositionHouseFunction","_id":"Ph8vfkMMyhULGmMV"} +{"address":"0x11effc215fcc0164fd24cfd128cbf58b62d92e71","key":"PositionHouseMath","_id":"XBT7gmSra7VRNWGs"} +{"address":"yes","key":"0x1Aab396fF8CADa404659a3AAa2CD548fEf48354e:verified","_id":"xD3DbhRKXkzfpDrQ"} +{"address":"yes","key":"0x8aB104e7Aa550C7711BBef7350C4A0fc457cF50B:verified","_id":"iUJ01PxzLjvJDH7k"} +{"address":"yes","key":"0xb4b42D63FBe50B43c5BA64279Ce57c2d747f0231:verified","_id":"wUOhmemfRKejkgNf"} +{"address":"yes","key":"0x8546594281E9D87D11DDc3fb6DE508d385EC1126:verified","_id":"22e1ZIPqF9ssYYQz"} +{"address":"yes","key":"0x2c8f70AF730E0dEb273876f5F45442c2C3B51BEE:verified","_id":"WmApd29RiRYfjX6j"} +{"address":"yes","key":"0x8855a0C9a49C00cf5106B21BcD263a7857d53614:verified","_id":"iyde3BdH16RfT0by"} diff --git a/package-lock.json b/package-lock.json index 28c01aca..419d7a66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17237,8 +17237,6 @@ }, "node_modules/ganache-cli/node_modules/npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "inBundle": true, "license": "MIT", @@ -17717,8 +17715,6 @@ }, "node_modules/ganache-cli/node_modules/strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true, "inBundle": true, "license": "MIT", @@ -62301,8 +62297,6 @@ }, "npm-run-path": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "bundled": true, "dev": true, "optional": true, @@ -62663,8 +62657,6 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "bundled": true, "dev": true, "optional": true, diff --git a/scripts/deploy.ts b/scripts/deploy.ts index 61a4d549..8b6edcdd 100644 --- a/scripts/deploy.ts +++ b/scripts/deploy.ts @@ -38,7 +38,7 @@ task('deploy', 'deploy contracts', async (taskArgs: {stage: Stage, task: string} } } -}).addParam('stage', 'Stage').addParam('task', 'Task Name') +}).addParam('stage', 'Stage') task('listDeployedContract', 'list all deployed contracts', async (taskArgs: {stage: Stage}) => { const db = new DeployDataStore( './deployData_mainnet.db') diff --git a/test/integration/fundingPayment.intergration.test.ts b/test/integration/fundingPayment.intergration.test.ts new file mode 100644 index 00000000..ba98be54 --- /dev/null +++ b/test/integration/fundingPayment.intergration.test.ts @@ -0,0 +1,1183 @@ +import {ethers} from "hardhat"; +import {deployPositionHouse} from "../shared/deploy"; +import { + BEP20Mintable, FundingRateTest, + InsuranceFund, + PositionHouse, + PositionHouseConfigurationProxy, + PositionHouseViewer, + PositionManager +} from "../../typeChain"; +import {BigNumber, ContractFactory} from "ethers"; +import PositionHouseTestingTool from "../shared/positionHouseTestingTool"; +import { + ChangePriceParams, + ExpectMaintenanceDetail, ExpectTestCaseParams, + LimitOrderReturns, PositionData, + PositionLimitOrderID, + SIDE, + toWei +} from "../shared/utilities"; +import {expect} from "chai"; +import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; + +describe('Test Margin Intergration', function () { + let positionHouse: PositionHouse; + let positionManager: PositionManager; + let positionManagerFactory: ContractFactory; + let bep20Mintable: BEP20Mintable + let insuranceFund: InsuranceFund + let positionHouseViewer: PositionHouseViewer; + let fundingRateTest : FundingRateTest + let phTT: PositionHouseTestingTool + let _; + let trader0, trader1, trader2, trader3, trader4, tradercp1, tradercp2; + + beforeEach( async function () { + [trader0, trader1, trader2, trader3, trader4, tradercp1, tradercp2] = await ethers.getSigners(); + [ + positionHouse, + positionManager, + positionManagerFactory, + _, + phTT, + bep20Mintable, + insuranceFund, + positionHouseViewer, + fundingRateTest + ] = await deployPositionHouse() as any + }) + + + describe('funding rate with limit order', function () { + // currentPrice = 5000 + // S0: Call first time payFunding with underlyingPrice = 5100, twapPrice = 5000 + // S1: User1 open market Short at (5000,10) + // S2: Increase market Short (4800,10) + // S3: Call payFunding with underlyingPrice = 4850, twapPrice = 4800 + // S4: Close market Long (4850,15) + // S5: Call payFunding with underlyingPrice = 4800, twapPrice = 4850 + // S6: Increase market Short (4850,10) + // S7: Call payFunding with underlyingPrice = 4900, twapPrice = 4850 + // S8: Close 100% position by market Long (4900,15) + it("EGE_TC_63: should calculate correct funding payment of position created by market order", async () => { + const balanceOfTrader1BeforeTest = await bep20Mintable.balanceOf(trader1.address) + const balanceOfTrader2BeforeTest = await bep20Mintable.balanceOf(trader2.address) + + // Step 0 + console.log("STEP 0") + await fundingRateTest.setMockPrice(BigNumber.from("5100"), BigNumber.from("5000")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 1", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // Step 1 + console.log("STEP 1") + await phTT.openLimitPositionAndExpect({ + limitPrice: 5000, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from(toWei('10')), + _trader: trader2, + _positionManager: fundingRateTest + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('10')), + leverage: 10, + side: SIDE.SHORT, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = margin = entryPrice * quantity / leverage = 5000 * 10 / 10 = 5000 + const claimableFundAfterStep1 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep1.toString()).eq(toWei("5000")) + + // STEP 2 + console.log("STEP 2") + await phTT.openLimitPositionAndExpect({ + limitPrice: 4800, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from(toWei('10')), + _trader: trader2, + _positionManager: fundingRateTest + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('10')), + leverage: 10, + side: SIDE.SHORT, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = total margin = 5000 + 4800 * 10 / 10 = 9800 + const claimableFundAfterStep2 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep2.toString()).eq(toWei("9800")) + + + // Step 3 + console.log("STEP 3") + await fundingRateTest.setMockTime(BigNumber.from("1001")) + await fundingRateTest.setMockPrice(BigNumber.from("4850"), BigNumber.from("4800")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 2", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // Step 4 + console.log("STEP 4") + await phTT.openLimitPositionAndExpect({ + limitPrice: 4850, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('15')), + _trader: trader2, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('15')), + leverage: 10, + side: SIDE.LONG, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = marginAfterReverse + fundingPayment = 9800 * 1/4 + 11.574074074 = 2467.574074074 + const claimableFundAfterStep4 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep4.toString()).eq("2461574074074000000000") + + // Step 5 + console.log("STEP 5") + await fundingRateTest.setMockTime(BigNumber.from("2002")) + await fundingRateTest.setMockPrice(BigNumber.from("4800"), BigNumber.from("4850")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 3", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = claimableAmount4 + fundingPayment = 2467.574074074 - 2.8935185185 = 2458.6805555555 + const claimableFundAfterStep5 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep5.toString()).eq("2458680555555500000000") + + // Step 6 + console.log("STEP 6") + await phTT.openLimitPositionAndExpect({ + limitPrice: 4850, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from(toWei('10')), + _trader: trader2, + _positionManager: fundingRateTest + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('10')), + leverage: 10, + side: SIDE.SHORT, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = claimableAmount5 + newOrderMargin = 2458.6805555555 + 4850 * 10 / 10 = 7308.6805555555 + const claimableFundAfterStep6 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep6.toString()).eq("7308680555555500000000") + + + // Step 7 + console.log("STEP 7") + await fundingRateTest.setMockTime(BigNumber.from("3003")) + await fundingRateTest.setMockPrice(BigNumber.from("4900"), BigNumber.from("4850")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 4", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = claimableAmount6 + fundingPayment = 7308.6805555555 + 8.6805555555 = 7317.361111111 + const claimableFundAfterStep7 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep7.toString()).eq("7317361111111000000000") + + + // Step 8 + console.log("STEP 8") + await phTT.openLimitPositionAndExpect({ + limitPrice: 4900, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('15')), + _trader: trader2, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('15')), + leverage: 10, + side: SIDE.LONG, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + await positionHouse.connect(trader2).claimFund(fundingRateTest.address) + + const balanceOfTrader1AfterTest = await bep20Mintable.balanceOf(trader1.address) + const balanceOfTrader2AfterTest = await bep20Mintable.balanceOf(trader2.address) + + const exchangedQuoteAmountOfTrader1 = balanceOfTrader1AfterTest.sub(balanceOfTrader1BeforeTest) + const exchangedQuoteAmountOfTrader2 = balanceOfTrader2AfterTest.sub(balanceOfTrader2BeforeTest) + + console.log("exchanged quote amount trader1", exchangedQuoteAmountOfTrader1.toString()) + console.log("exchanged quote amount trader2", exchangedQuoteAmountOfTrader2.toString()) + }) + + // currentPrice = 5000 + // S0: Call first time payFunding with underlyingPrice = 5100, twapPrice = 5000 + // S1: User1 open market Short at (5000, 10) + // S1.5: Price dump to 4500 + // S2: Reverse market Long (4500, 5) + // S3: Call payFunding with underlyingPrice = 4620, twapPrice = 4550 + // S4: Reverse market Long (4600, 2) + // S5: Call payFunding with underlyingPrice = 4560, twapPrice = 4600 + // S5.5: Price pump to 4700 + // S6: Increase market Short (4700,10) + // S7: Call payFunding with underlyingPrice = 4690, twapPrice = 4700 + // S8: Close 100% position by market Long (4800,13) + it("EGE_TC_64: should calculate correct funding payment of position created by market order 2", async () => { + const balanceOfTrader1BeforeTest = await bep20Mintable.balanceOf(trader1.address) + const balanceOfTrader2BeforeTest = await bep20Mintable.balanceOf(trader2.address) + + // Step 0 + console.log("STEP 0") + await fundingRateTest.setMockPrice(BigNumber.from("5100"), BigNumber.from("5000")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 1", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + // Step 1 + console.log("STEP 1") + await phTT.openLimitPositionAndExpect({ + limitPrice: 5000, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from(toWei('10')), + _trader: trader2, + _positionManager: fundingRateTest + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('10')), + leverage: 10, + side: SIDE.SHORT, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = margin = entryPrice * quantity / leverage = 5000 * 10 / 10 = 5000 + const claimableFundAfterStep1 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep1.toString()).eq(toWei("5000")) + + // STEP 1.5 + await phTT.dumpPrice({ + toPrice: 4500, + pumper: tradercp1, + pumper2: tradercp2, + positionManager: fundingRateTest + }) + + // STEP 2 + console.log("STEP 2") + await phTT.openLimitPositionAndExpect({ + limitPrice: 4500, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('5')), + _trader: trader2, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + // close 5/10 quantity of old positition + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('5')), + leverage: 10, + side: SIDE.LONG, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = marginAfterReverse = 5000 * 1 / 2 = 2500 + const claimableFundAfterStep2 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep2.toString()).eq(toWei("2500")) + + // Step 3 + console.log("STEP 3") + await fundingRateTest.setMockTime(BigNumber.from("1001")) + await fundingRateTest.setMockPrice(BigNumber.from("4620"), BigNumber.from("4550")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 2", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = margin + fundingPayment = 2500 + 4.0509259255 = 2504.0509259255 + const claimableFundAfterStep3 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep3.toString()).eq("2504050925925500000000") + + // Step 4 + console.log("STEP 4") + await phTT.openLimitPositionAndExpect({ + limitPrice: 4600, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('2')), + _trader: trader2, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + // close 2/5 quantity of old position + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('2')), + leverage: 10, + side: SIDE.LONG, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = margin = 2500 * 3 / 5 + 4.0509259255 = 1504.0509259255 + const claimableFundAfterStep4 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep4.toString()).eq("1504050925925500000000") + + + // Step 5 + console.log("STEP 5") + await fundingRateTest.setMockTime(BigNumber.from("2002")) + await fundingRateTest.setMockPrice(BigNumber.from("4560"), BigNumber.from("4600")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 3", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = claimableAmountStep4 + fundingPayment = 1504.0509259255 - 1.3888888887 = 1502.6620370368 + const claimableFundAfterStep5 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep5.toString()).eq("1502662037036800000000") + + // Step 5.5 + await phTT.pumpPrice({ + toPrice: 4700, + pumper: tradercp1, + pumper2: tradercp2, + positionManager: fundingRateTest + }) + + // Step 6 + console.log("STEP 6") + await phTT.openLimitPositionAndExpect({ + limitPrice: 4700, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from(toWei('10')), + _trader: trader2, + _positionManager: fundingRateTest, + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('10')), + leverage: 10, + side: SIDE.SHORT, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = claimableAmountStep5 + newOrderMargin = 1502.6620370368 - 4700 = 6202.6620370368 + const claimableFundAfterStep6 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep6.toString()).eq("6202662037036800000000") + + + // Step 7 + console.log("STEP 7") + await fundingRateTest.setMockTime(BigNumber.from("3003")) + await fundingRateTest.setMockPrice(BigNumber.from("4690"), BigNumber.from("4700")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 4", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = claimableAmountStep6 + fundingPayment = 6202.6620370368 - 1.5046296291 = 6201.1574074077 + const claimableFundAfterStep7 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep7.toString()).eq("6201157407407700000000") + + // Step 8 + console.log("STEP 8") + await phTT.openLimitPositionAndExpect({ + limitPrice: 4800, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('13')), + _trader: trader2, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('13')), + leverage: 10, + side: SIDE.LONG, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + await positionHouse.connect(trader2).claimFund(fundingRateTest.address) + + const balanceOfTrader1AfterTest = await bep20Mintable.balanceOf(trader1.address) + const balanceOfTrader2AfterTest = await bep20Mintable.balanceOf(trader2.address) + + const exchangedQuoteAmountOfTrader1 = balanceOfTrader1AfterTest.sub(balanceOfTrader1BeforeTest) + const exchangedQuoteAmountOfTrader2 = balanceOfTrader2AfterTest.sub(balanceOfTrader2BeforeTest) + + console.log("exchanged quote amount trader1", exchangedQuoteAmountOfTrader1.toString()) + console.log("exchanged quote amount trader2", exchangedQuoteAmountOfTrader2.toString()) + }) + + // currentPrice = 5000 + // S0: Call first time payFunding with underlyingPrice = 5100, twapPrice = 5000 + // S1: User1 open limit Long at (4900,10) + // S2: Increase limit Long (4800,10) + // S3: Call payFunding with underlyingPrice = 4850, twapPrice = 4800 + // S4: Close limit Short (4850,15) + // S5: Call payFunding with underlyingPrice = 4830, twapPrice = 4850 + // S6: Increase market Long (5100,10) + // S7: Call payFunding with underlyingPrice = 4950, twapPrice = 4850 + // S8: Close 100% position by limit Short (5200,15) + it("EGE_TC_65: should calculate correct funding payment of position created by limit order", async () => { + const balanceOfTrader1BeforeTest = await bep20Mintable.balanceOf(trader1.address) + const balanceOfTrader2BeforeTest = await bep20Mintable.balanceOf(trader2.address) + + // Step 0 + console.log("STEP 0") + await fundingRateTest.setMockPrice(BigNumber.from("5100"), BigNumber.from("5000")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 1", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + // Step 1 + console.log("STEP 1") + + await phTT.openLimitPositionAndExpect({ + limitPrice: 4900, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from(toWei('10')), + _trader: trader1, + _positionManager: fundingRateTest + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('10')), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = margin = entryPrice * quantity / leverage = 4900 * 10 / 10 = 5000 + const claimableFundAfterStep1 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep1.toString()).eq(toWei("4900")) + + // STEP 2 + console.log("STEP 2") + await phTT.openLimitPositionAndExpect({ + limitPrice: 4800, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from(toWei('10')), + _trader: trader1, + _positionManager: fundingRateTest + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('10')), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = total margin = 4900 + 4800 * 10 / 10 = 9700 + const claimableFundAfterStep2 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep2.toString()).eq(toWei("9700")) + + // Step 3 + console.log("STEP 3") + await fundingRateTest.setMockTime(BigNumber.from("1001")) + await fundingRateTest.setMockPrice(BigNumber.from("4850"), BigNumber.from("4800")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 2", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = margin + fundingPayment = 9700 - 11.574074074 = 9688.425925926 + const claimableFundAfterStep3 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep3.toString()).eq("9688425925926000000000") + + + // Step 4 + console.log("STEP 4") + await phTT.openLimitPositionAndExpect({ + limitPrice: 4850, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('15')), + _trader: trader1, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('15')), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = oldMargin = 9700 = 9700 + const claimableFundAfterStep4 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep4.toString()).eq("9700000000000000000000") + + // Step 5 + console.log("STEP 5") + await fundingRateTest.setMockTime(BigNumber.from("2002")) + await fundingRateTest.setMockPrice(BigNumber.from("4830"), BigNumber.from("4850")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 3", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = claimableFundAfterStep4 + fundingPayment = 9700 + 4.629629628 = 9704.629629628 + const claimableFundAfterStep5 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep5.toString()).eq("9704629629628000000000") + + // Step 6 + console.log("STEP 6") + await phTT.openLimitPositionAndExpect({ + limitPrice: 5100, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('10')), + _trader: trader2, + _positionManager: fundingRateTest + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('10')), + leverage: 10, + side: SIDE.LONG, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = oldPositionMargin + newOrderMargin + fundingPayment = 9700 + 5100 + 1.157407407 = 14801.157407407 + const claimableFundAfterStep6 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep6.toString()).eq("14801157407407000000000") + + // Step 7 + console.log("STEP 7") + await fundingRateTest.setMockTime(BigNumber.from("3003")) + await fundingRateTest.setMockPrice(BigNumber.from("4950"), BigNumber.from("4850")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 4", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = claimableFundAfterStep6 + fundingPayment = 14801.157407407 - 34.722222222 = 14766.435185185 + const claimableFundAfterStep7 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep7.toString()).eq("14766435185185000000000") + + + // Step 8 + console.log("STEP 8") + await phTT.openLimitPositionAndExpect({ + limitPrice: 5200, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('15')), + _trader: trader1, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('15')), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = claimableFundAfterStep7 + pnl = 14766.435185185 + 15*(5200 - 5016.67) = 17516.436185185 + const claimableFundAfterStep8 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep8.toString()).eq("17516436185185000000000") + + await positionHouse.connect(trader1).claimFund(fundingRateTest.address) + + const balanceOfTrader1AfterTest = await bep20Mintable.balanceOf(trader1.address) + const balanceOfTrader2AfterTest = await bep20Mintable.balanceOf(trader2.address) + + const exchangedQuoteAmountOfTrader1 = balanceOfTrader1AfterTest.sub(balanceOfTrader1BeforeTest) + const exchangedQuoteAmountOfTrader2 = balanceOfTrader2AfterTest.sub(balanceOfTrader2BeforeTest) + + console.log("exchanged quote amount trader1", exchangedQuoteAmountOfTrader1.toString()) + console.log("exchanged quote amount trader2", exchangedQuoteAmountOfTrader2.toString()) + }) + + // currentPrice = 5000 + // S0: Call first time payFunding with underlyingPrice = 4950, twapPrice = 5000 + // S1: User1 open limit Long at (4900,10) + // S2: User1 open limit Short at (5000,5) + // S3: Call payFunding with underlyingPrice = 5070, twapPrice = 5000 + // S4: User1 close limit Short at (5100,2) + // S5: Call payFunding with underlyingPrice = 5150, twapPrice = 5100 + // S6: User1 close market Short at (4700,2) + // S7: Call payFunding with underlyingPrice = 5020, twapPrice = 5050 + // S8: User1 close limit Short (5200,1) + it("EGE_TC_66", async () => { + const balanceOfTrader1BeforeTest = await bep20Mintable.balanceOf(trader1.address) + const balanceOfTrader2BeforeTest = await bep20Mintable.balanceOf(trader2.address) + + // Step 0 + console.log("STEP 0") + await fundingRateTest.setMockPrice(BigNumber.from("5100"), BigNumber.from("5000")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 1", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // Step 1 + console.log("STEP 1") + + await phTT.openLimitPositionAndExpect({ + limitPrice: 4900, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from(toWei('10')), + _trader: trader1, + _positionManager: fundingRateTest + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('10')), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = margin = entryPrice * quantity / leverage = 4900 * 10 / 10 = 4900 + const claimableFundAfterStep1 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep1.toString()).eq(toWei("4900")) + + // Step 2 + console.log("STEP 2") + + await phTT.openLimitPositionAndExpect({ + limitPrice: 5000, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('5')), + _trader: trader1, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('5')), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = old margin + pnl = 4900 + (5000-4900)*5 = 5400 + const claimableFundAfterStep2 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep2.toString()).eq(toWei("5400")) + + // Step 3 + console.log("STEP 3") + await fundingRateTest.setMockTime(BigNumber.from("1001")) + await fundingRateTest.setMockPrice(BigNumber.from("5070"), BigNumber.from("5000")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 2", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = claimableFundAfterStep2 + fundingPayment = 5400 - 8.101851851 = 5391.898148149 + const claimableFundAfterStep3 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep3.toString()).eq("5391898148149000000000") + + // Step 4 + console.log("STEP 4") + + await phTT.openLimitPositionAndExpect({ + limitPrice: 5100, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('2')), + _trader: trader1, + _positionManager: fundingRateTest, + skipCheckBalance: true, + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('2')), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = claimalbeAmountAfterStep2 + newOrderMargin + pnl = 5400 + (5100-4900)*2 = 5800 + const claimableFundAfterStep4 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep4.toString()).eq(toWei("5800")) + + // Step 5 + console.log("STEP 5") + await fundingRateTest.setMockTime(BigNumber.from("2002")) + await fundingRateTest.setMockPrice(BigNumber.from("5150"), BigNumber.from("5100")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 3", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = claimalbeAmountAfterStep4 + fundingPayment = 5800 - 5.787037037 = 5794.212962963 + const claimableFundAfterStep5 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep5.toString()).eq("5794212962963000000000") + + // Step 6 + console.log("STEP 6") + + await phTT.openLimitPositionAndExpect({ + limitPrice: 4700, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from(toWei('2')), + _trader: trader2, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('2')), + leverage: 10, + side: SIDE.SHORT, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = claimalbeAmountAfterStep5 + fundingPayment - claimedMargin = 5800 + 1.7361111111 - 4900*2/10 = 4821.7361111111 + const claimableFundAfterStep6 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep6.toString()).eq("4821736111111100000000") + + // Step 7 + console.log("STEP 7") + await fundingRateTest.setMockTime(BigNumber.from("3003")) + await fundingRateTest.setMockPrice(BigNumber.from("5020"), BigNumber.from("5050")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 4", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = claimalbeAmountAfterStep6 + fundingPayment = 4821.7361111111 + 2.7777777776 = 4824.5138888887 + const claimableFundAfterStep7 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep7.toString()).eq("4824513888888700000000") + + + // Step 8 + console.log("STEP 8") + + await phTT.openLimitPositionAndExpect({ + limitPrice: 5200, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('1')), + _trader: trader1, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('1')), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = claimalbeAmountAfterStep7 + pnl = 4824.5138888887 + 300 = 5124.5138888887 + const claimableFundAfterStep8 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep8.toString()).eq("5124513888888700000000") + + await positionHouse.connect(trader1).claimFund(fundingRateTest.address) + + const balanceOfTrader1AfterTest = await bep20Mintable.balanceOf(trader1.address) + const balanceOfTrader2AfterTest = await bep20Mintable.balanceOf(trader2.address) + + const exchangedQuoteAmountOfTrader1 = balanceOfTrader1AfterTest.sub(balanceOfTrader1BeforeTest) + const exchangedQuoteAmountOfTrader2 = balanceOfTrader2AfterTest.sub(balanceOfTrader2BeforeTest) + + console.log("exchanged quote amount trader1", exchangedQuoteAmountOfTrader1.toString()) + console.log("exchanged quote amount trader2", exchangedQuoteAmountOfTrader2.toString()) + + }) + + // currentPrice = 3900 + // S0: Call first time payFunding with underlyingPrice = 3955, twapPrice = 3910 + // S1: User1 open limit Short at (4000,10) + // S2: Call payFunding with underlyingPrice = 3987, twapPrice = 4010 + // S2.5: Price pump to 4200 + // S3: User1 open limit Long (4200,2) + // S4: User1 open market Long (4300,3) + // S5: Call payFunding with underlyingPrice = 4396, twapPrice = 4387 + // S6: User1 close market L (4400,5) + it("EGE_TC_71", async () => { + await phTT.dumpPrice({ + toPrice: 3900, + pumper1: tradercp1, + pumper2: tradercp2, + positionManager: fundingRateTest + }) + + const balanceOfTrader1BeforeTest = await bep20Mintable.balanceOf(trader1.address) + const balanceOfTrader2BeforeTest = await bep20Mintable.balanceOf(trader2.address) + + // Step 0 + console.log("STEP 0") + await fundingRateTest.setMockPrice(BigNumber.from("3955"), BigNumber.from("3910")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 1", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // Step 1 + console.log("STEP 1") + + await phTT.openLimitPositionAndExpect({ + limitPrice: 4000, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('10')), + _trader: trader1, + _positionManager: fundingRateTest + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('10')), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = margin = entryPrice * quantity / leverage = 4000 * 10 / 10 = 4000 + const claimableFundAfterStep1 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep1.toString()).eq(toWei("4000")) + + // Step 2 + console.log("STEP 2") + await fundingRateTest.setMockTime(BigNumber.from("1001")) + await fundingRateTest.setMockPrice(BigNumber.from("3987"), BigNumber.from("4010")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 2", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = claimableFundAfterStep1 + fundingPayment = 4000 - 2.662037037 = 3997.337962963 + const claimableFundAfterStep2 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep2.toString()).eq(toWei("3997.337962963")) + + // Step 2.5 + console.log("STEP 2.5") + await phTT.pumpPrice({ + toPrice: 4200, + pumper: tradercp1, + pumper2: tradercp2, + positionManager: fundingRateTest + }) + + // Step 3 + console.log("STEP 3") + await phTT.openLimitPositionAndExpect({ + limitPrice: 4200, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from(toWei('2')), + _trader: trader1, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('2')), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = totalMargin + pnl = 4000 - 400 = 3600 + const claimableFundAfterStep3 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep3.toString()).eq(toWei("3600")) + + // Step 4 + console.log("STEP 4") + await phTT.openLimitPositionAndExpect({ + limitPrice: 4300, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('3')), + _trader: trader2, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('3')), + leverage: 10, + side: SIDE.LONG, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = claimableFundAfterStep3 - claimedMargin = 3600 - 4000*3/10 = 2400 + const claimableFundAfterStep4 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep4.toString()).eq(toWei("2400")) + + // Step 5 + console.log("STEP 5") + await fundingRateTest.setMockTime(BigNumber.from("2002")) + await fundingRateTest.setMockPrice(BigNumber.from("4396"), BigNumber.from("4387")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 3", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = claimableFundAfterStep5 + fundingPayment = 2400 + 0.7291666662 = 2400.7291666662 + const claimableFundAfterStep6 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep6.toString()).eq(toWei("2400.7291666662")) + + + // Step 6 + console.log("STEP 6") + await phTT.openLimitPositionAndExpect({ + limitPrice: 4350, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('5')), + _trader: trader2, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('5')), + leverage: 10, + side: SIDE.LONG, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + const balanceOfTrader1AfterTest = await bep20Mintable.balanceOf(trader1.address) + const balanceOfTrader2AfterTest = await bep20Mintable.balanceOf(trader2.address) + + const exchangedQuoteAmountOfTrader1 = balanceOfTrader1AfterTest.sub(balanceOfTrader1BeforeTest) + const exchangedQuoteAmountOfTrader2 = balanceOfTrader2AfterTest.sub(balanceOfTrader2BeforeTest) + + console.log("exchanged quote amount trader1", exchangedQuoteAmountOfTrader1.toString()) + console.log("exchanged quote amount trader2", exchangedQuoteAmountOfTrader2.toString()) + }) + + + // currentPrice = 3900 + // S0: Call first time payFunding with underlyingPrice = 3917, twapPrice = 3943 + // S1: User1 open limit Short at (4000,10) + // S2: Call payFunding with underlyingPrice = 4013, twapPrice = 4026 + // S3: User1 open limit Short at (4200,8) + // S4: User1 open market Long at (4400,15) + // S5: Call payFunding with underlyingPrice = 4414, twapPrice = 4399 + // S6: User1 close limit Long at (4400,3) + it("EGE_TC_72", async () => { + await phTT.dumpPrice({ + toPrice: 4000, + pumper: tradercp1, + pumper2: tradercp2, + positionManager: fundingRateTest + }) + + const balanceOfTrader1BeforeTest = await bep20Mintable.balanceOf(trader1.address) + const balanceOfTrader2BeforeTest = await bep20Mintable.balanceOf(trader2.address) + + // Step 0 + console.log("STEP 0") + await fundingRateTest.setMockPrice(BigNumber.from("3917"), BigNumber.from("3943")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 1", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // Step 1 + console.log("STEP 1") + + await phTT.openLimitPositionAndExpect({ + limitPrice: 4000, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('10')), + _trader: trader1, + _positionManager: fundingRateTest + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('10')), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = margin = entryPrice * quantity / leverage = 4000 * 10 / 10 = 4000 + const claimableFundAfterStep1 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep1.toString()).eq(toWei("4000")) + + // Step 2 + console.log("STEP 2") + await fundingRateTest.setMockTime(BigNumber.from("1001")) + await fundingRateTest.setMockPrice(BigNumber.from("4013"), BigNumber.from("4026")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 2", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = claimableFundAfterStep1 + fundingPayment = 4000 - 1.504629629 = 3998.495370371 + const claimableFundAfterStep2 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep2.toString()).eq(toWei("3998.495370371")) + + // Step 3 + console.log("STEP 3") + + await phTT.openLimitPositionAndExpect({ + limitPrice: 4200, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('8')), + _trader: trader1, + _positionManager: fundingRateTest + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('8')), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = totalMargin = 4000 + 4200*8/10 = 7360 + const claimableFundAfterStep3 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep3.toString()).eq(toWei("7360")) + + + // Step 4 + console.log("STEP 4") + + await phTT.openLimitPositionAndExpect({ + limitPrice: 4400, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from(toWei('15')), + _trader: trader2, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('15')), + leverage: 10, + side: SIDE.LONG, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = claimableFundAfterStep3 - claimedMargin = 7360 - 7360*15/18 = 1226.666666666667 + const claimableFundAfterStep4 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep4.toString()).eq("1226666666666666666667") + + + // Step 5 + console.log("STEP 5") + await fundingRateTest.setMockTime(BigNumber.from("2002")) + await fundingRateTest.setMockPrice(BigNumber.from("4414"), BigNumber.from("4399")) + await positionHouse.payFunding(fundingRateTest.address) + console.log("LATEST CUMULATIVE PREMIUM FRACTION 2", (await positionHouse.getLatestCumulativePremiumFraction(fundingRateTest.address)).toString()) + + // claimbleAmount = claimableFundAfterStep4 + fundingPayment = 1226.666666666667 + 0.5208333333 = 1227.187499999967 + const claimableFundAfterStep5 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep5.toString()).eq("1227187499999966666667") + + // Step 6 + console.log("STEP 6") + + await phTT.openLimitPositionAndExpect({ + limitPrice: 4400, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from(toWei('3')), + _trader: trader1, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await phTT.openMarketPosition({ + quantity: BigNumber.from(toWei('3')), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + // claimbleAmount = claimableFundAfterStep5 + pnl = 1227.187499999967 - 933.3333333333339 = 293.855399999966666667 + const claimableFundAfterStep6 = await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address) + expect(claimableFundAfterStep6.toString()).eq("293855399999966666667") + + + await positionHouse.connect(trader1).claimFund(fundingRateTest.address) + + const balanceOfTrader1AfterTest = await bep20Mintable.balanceOf(trader1.address) + const balanceOfTrader2AfterTest = await bep20Mintable.balanceOf(trader2.address) + + const exchangedQuoteAmountOfTrader1 = balanceOfTrader1AfterTest.sub(balanceOfTrader1BeforeTest) + const exchangedQuoteAmountOfTrader2 = balanceOfTrader2AfterTest.sub(balanceOfTrader2BeforeTest) + + console.log("exchanged quote amount trader1", exchangedQuoteAmountOfTrader1.toString()) + console.log("exchanged quote amount trader2", exchangedQuoteAmountOfTrader2.toString()) + + }) + }) +}) \ No newline at end of file diff --git a/test/integration/margin.integration.test.ts b/test/integration/margin.integration.test.ts index 4fbd6099..aa11a629 100644 --- a/test/integration/margin.integration.test.ts +++ b/test/integration/margin.integration.test.ts @@ -1,7 +1,8 @@ import {ethers} from "hardhat"; import {deployPositionHouse} from "../shared/deploy"; import { - BEP20Mintable, FundingRateTest, + BEP20Mintable, + FundingRateTest, InsuranceFund, PositionHouse, PositionHouseConfigurationProxy, @@ -13,6 +14,7 @@ import PositionHouseTestingTool from "../shared/positionHouseTestingTool"; import {SIDE, toWei} from "../shared/utilities"; import {expect} from "chai"; import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; +import TestCaseProcessor from "../shared/testCaseProcessor"; describe('Test Margin Intergration', function () { let positionHouse: PositionHouse; @@ -22,11 +24,12 @@ describe('Test Margin Intergration', function () { let insuranceFund: InsuranceFund let positionHouseViewer: PositionHouseViewer; let positionHouseConfigurationProxy: PositionHouseConfigurationProxy; - let fundingRateTest : FundingRateTest + let fundingRateTest: FundingRateTest let phTT: PositionHouseTestingTool let _; let trader0, trader1, trader2, trader3, trader4, tradercp1, tradercp2; - beforeEach( async function () { + let testCaseProcessor: TestCaseProcessor + beforeEach(async function () { [trader0, trader1, trader2, trader3, trader4, tradercp1, tradercp2] = await ethers.getSigners(); [ positionHouse, @@ -39,14 +42,16 @@ describe('Test Margin Intergration', function () { positionHouseViewer, fundingRateTest ] = await deployPositionHouse() as any + testCaseProcessor = new TestCaseProcessor(fundingRateTest, positionHouse, positionHouseViewer, phTT, bep20Mintable, trader0, trader1, trader2, trader3, trader4, tradercp1, tradercp2) }) describe('margin without funding rate', function () { - async function expectManualAddedMargin(trader: SignerWithAddress, amount: number, _positionManager? : any){ + async function expectManualAddedMargin(trader: SignerWithAddress, amount: number, _positionManager?: any) { _positionManager = _positionManager || positionManager const addedMargin = await positionHouse.getAddedMargin(_positionManager.address, trader.address) expect(addedMargin.toString()).eq(amount.toString()) } + it("should reduce manual margin when open reverse position without PnL", async () => { await phTT.openLimitPositionAndExpect({ limitPrice: 5000, @@ -71,7 +76,7 @@ describe('Test Margin Intergration', function () { await positionHouse.connect(trader1).addMargin(positionManager.address, BigNumber.from("1000")) // Trader1's margin += 1000 = 50000 + 1000 await phTT.expectPositionMargin(positionManager, trader1, 51000, 0) - await expectManualAddedMargin(trader1,1000) + await expectManualAddedMargin(trader1, 1000) await phTT.openLimitPositionAndExpect({ limitPrice: 5000, @@ -90,7 +95,7 @@ describe('Test Margin Intergration', function () { ); // Trader's margin -= 3*51000/10 = 35700 await phTT.expectPositionMargin(positionManager, trader1, 35700, 0) - await expectManualAddedMargin(trader1,700) + await expectManualAddedMargin(trader1, 700) // closing 2/7 position, should get back 2/7 position's margin await phTT.closePosition({ @@ -101,14 +106,14 @@ describe('Test Margin Intergration', function () { ); // Trader1's margin = 35700 - (2*35700)/7 = 25500 await phTT.expectPositionMargin(positionManager, trader1, 25500, 0) - await expectManualAddedMargin(trader1,500) + await expectManualAddedMargin(trader1, 500) // now trader1 adds 2000 margin await positionHouse.connect(trader1).addMargin(positionManager.address, BigNumber.from("2000")) // Trader1's margin = 25500 + 2000 = 27500 await phTT.expectPositionMargin(positionManager, trader1, 27500, 0) - await expectManualAddedMargin(trader1,2500) + await expectManualAddedMargin(trader1, 2500) // now trader1 closes 3/5 position should get 16500 await phTT.closePosition({ @@ -118,7 +123,7 @@ describe('Test Margin Intergration', function () { } ); await phTT.expectPositionMargin(positionManager, trader1, 27500 - 16500, 0) // 11000 - await expectManualAddedMargin(trader1,1000) + await expectManualAddedMargin(trader1, 1000) await positionHouse.connect(trader1).removeMargin(positionManager.address, BigNumber.from('800')) await expectManualAddedMargin(trader1, 200) @@ -180,7 +185,7 @@ describe('Test Margin Intergration', function () { // Trader1's margin += 1000 = 50000 + 1000 // Trader1's total pnl with full quantity = 1000 await phTT.expectPositionMargin(positionManager, trader1, 51000, 1000) - await expectManualAddedMargin(trader1,1000) + await expectManualAddedMargin(trader1, 1000) await phTT.openLimitPositionAndExpect({ limitPrice: 5100, @@ -201,7 +206,7 @@ describe('Test Margin Intergration', function () { // Trader's margin -= 3*51000/10 = 35700 // Trader1's pnl with quantity 7/10 = 7/10 * 1000 = 700 await phTT.expectPositionMargin(positionManager, trader1, 35700, 700) - await expectManualAddedMargin(trader1,700) + await expectManualAddedMargin(trader1, 700) // closing 2/7 position, should get back 2/7 position's margin + pnl = 2/7 * 700 = 200 await phTT.closePosition({ @@ -214,7 +219,7 @@ describe('Test Margin Intergration', function () { // Trader1's margin = 35700 - (2*35700)/7 = 25500 // Trader1's pnl with quantity 5/7 = 5/7 * 700 = 500 await phTT.expectPositionMargin(positionManager, trader1, 25500, 500) - await expectManualAddedMargin(trader1,500) + await expectManualAddedMargin(trader1, 500) // now trader1 adds 2000 margin @@ -222,7 +227,7 @@ describe('Test Margin Intergration', function () { // Trader1's margin = 25500 + 2000 = 27500 // Trader1's pnl hasn't changed = 500 await phTT.expectPositionMargin(positionManager, trader1, 27500, 500) - await expectManualAddedMargin(trader1,2500) + await expectManualAddedMargin(trader1, 2500) // now trader1 closes 3/5 position should get 16500 + pnl = 3/5 * 500 = 300 await phTT.closePosition({ @@ -235,7 +240,7 @@ describe('Test Margin Intergration', function () { // Trader1's margin = 27500 - 16500 = 11000 // Trader1's pnl = 500 - 300 = 200 await phTT.expectPositionMargin(positionManager, trader1, 27500 - 16500, 200) - await expectManualAddedMargin(trader1,1000) + await expectManualAddedMargin(trader1, 1000) await positionHouse.connect(trader1).removeMargin(positionManager.address, BigNumber.from('800')) await expectManualAddedMargin(trader1, 200) @@ -301,7 +306,7 @@ describe('Test Margin Intergration', function () { // Trader1's margin += 1000 = 50000 + 1000 // Trader1's total pnl with full quantity = -2000 await phTT.expectPositionMargin(positionManager, trader1, 51000, -2000) - await expectManualAddedMargin(trader1,1000) + await expectManualAddedMargin(trader1, 1000) await phTT.openLimitPositionAndExpect({ limitPrice: 4800, @@ -322,7 +327,7 @@ describe('Test Margin Intergration', function () { // Trader's margin -= 3*51000/10 = 35700 // Trader1's pnl with quantity 7/10 = 7/10 * -2000 = -1400 await phTT.expectPositionMargin(positionManager, trader1, 35700, -1400) - await expectManualAddedMargin(trader1,700) + await expectManualAddedMargin(trader1, 700) // closing 2/7 position, should get back 2/7 position's margin + pnl = 2/7 * -1400 = -400 await phTT.closePosition({ @@ -335,7 +340,7 @@ describe('Test Margin Intergration', function () { // Trader1's margin = 35700 - (2*35700)/7 = 25500 // Trader1's pnl with quantity 5/7 = 5/7 * 700 = -1000 await phTT.expectPositionMargin(positionManager, trader1, 25500, -1000) - await expectManualAddedMargin(trader1,500) + await expectManualAddedMargin(trader1, 500) // now trader1 adds 2000 margin @@ -343,7 +348,7 @@ describe('Test Margin Intergration', function () { // Trader1's margin = 25500 + 2000 = 27500 // Trader1's pnl hasn't changed = -1000 await phTT.expectPositionMargin(positionManager, trader1, 27500, -1000) - await expectManualAddedMargin(trader1,2500) + await expectManualAddedMargin(trader1, 2500) // now trader1 closes 3/5 position should get 16500 + pnl = 3/5 * -1000 = -600 await phTT.closePosition({ @@ -356,7 +361,7 @@ describe('Test Margin Intergration', function () { // Trader1's margin = 27500 - 16500 = 11000 // Trader1's pnl = -1000 - (-600) = -400 await phTT.expectPositionMargin(positionManager, trader1, 27500 - 16500, -400) - await expectManualAddedMargin(trader1,1000) + await expectManualAddedMargin(trader1, 1000) await positionHouse.connect(trader1).removeMargin(positionManager.address, BigNumber.from('800')) await expectManualAddedMargin(trader1, 200) @@ -416,7 +421,7 @@ describe('Test Margin Intergration', function () { await positionHouse.connect(trader1).addMargin(fundingRateTest.address, BigNumber.from("1000")) // Trader1's margin += 1000 = 50000 + 1000 await phTT.expectPositionMargin(fundingRateTest, trader1, 6000, 0) - await expectManualAddedMargin(trader1,1000, fundingRateTest) + await expectManualAddedMargin(trader1, 1000, fundingRateTest) await phTT.dumpPrice({ toPrice: 4417, @@ -443,7 +448,7 @@ describe('Test Margin Intergration', function () { // = 80% * oldQuantity * (currentPrice - entryPrice) = 80% * 10 * (4417 - 5000) = -4664 await phTT.expectPositionMargin(fundingRateTest, trader1, 5820, -4664) // Trader1's manual added margin = 97% * oldManualMargin = 97% * 1000 = 970 - await expectManualAddedMargin(trader1,970, fundingRateTest) + await expectManualAddedMargin(trader1, 970, fundingRateTest) await phTT.pumpPrice({ toPrice: 4800, @@ -517,7 +522,7 @@ describe('Test Margin Intergration', function () { await positionHouse.connect(trader1).addMargin(fundingRateTest.address, BigNumber.from("1000")) // Trader1's margin += 1000 = 50000 + 1000 await phTT.expectPositionMargin(fundingRateTest, trader1, 6000) - await expectManualAddedMargin(trader1,1000, fundingRateTest) + await expectManualAddedMargin(trader1, 1000, fundingRateTest) await phTT.dumpPrice({ toPrice: 4410, @@ -533,7 +538,7 @@ describe('Test Margin Intergration', function () { // position is clear after fully liquidated await phTT.expectPositionMargin(fundingRateTest, trader1, 0) - await expectManualAddedMargin(trader1,0, fundingRateTest) + await expectManualAddedMargin(trader1, 0, fundingRateTest) }) it("should get correct amount of claimable fund when add and remove margin then close position by limit order", async () => { @@ -576,7 +581,7 @@ describe('Test Margin Intergration', function () { // after added margin, trader1 have position with margin = positionMargin + manualMargin = 4000 + 2000 = 6000 await phTT.expectPositionMargin(fundingRateTest, trader1, 6000, 0) // manualMargin = 2000 - await expectManualAddedMargin(trader1,2000, fundingRateTest) + await expectManualAddedMargin(trader1, 2000, fundingRateTest) await phTT.pumpPrice({ toPrice: 4100, @@ -594,7 +599,9 @@ describe('Test Margin Intergration', function () { leverage: 10, quantity: BigNumber.from('2'), _trader: trader2, - _positionManager: fundingRateTest + _positionManager: fundingRateTest, + // can skip check balance cause this is close order, no need to deposit fund + skipCheckBalance: true }) console.log("step 5") // STEP 5 @@ -611,7 +618,7 @@ describe('Test Margin Intergration', function () { _positionManager: fundingRateTest, } ); - const balanceAfterMarketReverse = await bep20Mintable.balanceOf(trader1.address) + const balanceAfterMarketReverse = await bep20Mintable.balanceOf(trader1.address) const claimedQuoteAmount = balanceAfterMarketReverse.sub(balanceBeforeMarketReverse) expect(claimedQuoteAmount).eq(800) await fundingRateTest.setMockPrice(BigNumber.from("4100"), BigNumber.from("4100")) @@ -656,7 +663,7 @@ describe('Test Margin Intergration', function () { const balanceOfTrader1AfterTestcase = await bep20Mintable.balanceOf(trader1.address) const exchangedQuoteAmount = BigNumber.from(balanceOfTrader1AfterTestcase).sub(BigNumber.from(balanceOfTrader1BeforeTestcase)) console.log("exchangedQuoteAmount", exchangedQuoteAmount.toString()) - expect(exchangedQuoteAmount).eq("-2008") + expect(exchangedQuoteAmount).eq("-2004") }) it("should get correct amount of claimable fund when add and remove margin then close position by limit order 2", async () => { @@ -742,7 +749,9 @@ describe('Test Margin Intergration', function () { leverage: 10, quantity: BigNumber.from('3'), _trader: trader1, - _positionManager: fundingRateTest + _positionManager: fundingRateTest, + // can skip check balance cause this is close order, no need to deposit fund + skipCheckBalance: true }) console.log("step 10") // STEP 10 @@ -774,7 +783,7 @@ describe('Test Margin Intergration', function () { const balanceOfTrader1AfterTestcase = await bep20Mintable.balanceOf(trader1.address) const exchangedQuoteAmount = BigNumber.from(balanceOfTrader1AfterTestcase).sub(BigNumber.from(balanceOfTrader1BeforeTestcase)) console.log("exchangedQuoteAmount", exchangedQuoteAmount.toString()) - expect(exchangedQuoteAmount).eq("3390") + expect(exchangedQuoteAmount).eq("3395") }) it("should get correct amount of claimable fund when add and remove margin then close position by limit order 3", async () => { @@ -852,7 +861,9 @@ describe('Test Margin Intergration', function () { leverage: 10, quantity: BigNumber.from('5'), _trader: trader1, - _positionManager: fundingRateTest + _positionManager: fundingRateTest, + // can skip check balance cause this is close order, no need to deposit fund + skipCheckBalance: true }) await phTT.openMarketPosition({ @@ -952,7 +963,7 @@ describe('Test Margin Intergration', function () { const balanceOfTrader1AfterTestcase = await bep20Mintable.balanceOf(trader1.address) const exchangedQuoteAmount = BigNumber.from(balanceOfTrader1AfterTestcase).sub(BigNumber.from(balanceOfTrader1BeforeTestcase)) console.log("exchangedQuoteAmount", exchangedQuoteAmount.toString()) - expect(exchangedQuoteAmount).eq("3096") + expect(exchangedQuoteAmount).eq("3095") }) it("should get correct claimableAmount when create position by both limit and market order, reduce by market > created market order then close by limit", async () => { @@ -1034,7 +1045,9 @@ describe('Test Margin Intergration', function () { leverage: 10, quantity: toWei('1'), _trader: trader1, - _positionManager: fundingRateTest + _positionManager: fundingRateTest, + // can skip check balance cause this is close order, no need to deposit fund + skipCheckBalance: true }) await phTT.openMarketPosition({ @@ -1048,8 +1061,8 @@ describe('Test Margin Intergration', function () { ); console.log("third time expect getClaimAmount") - // claimableAmount += (newOrderMargin + pnl) = 5500 + (price * quantity / leverage + pnl) = 5500 + 350 + 166.67 = 6016.666 - expect(await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).eq(BigNumber.from("6016666600000000000000")) + // claimableAmount += pnl = 5500 + pnl = 5500 + 166.67 = 5666.6666 + expect(await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).eq(BigNumber.from("5666666600000000000000")) await phTT.debugPosition(trader1, fundingRateTest) // after this order the trader1's position should have @@ -1060,7 +1073,7 @@ describe('Test Margin Intergration', function () { console.log("step 3") // STEP 3 - await positionHouse.connect(trader1).addMargin(fundingRateTest.address,toWei("2000")); + await positionHouse.connect(trader1).addMargin(fundingRateTest.address, toWei("2000")); console.log("step 4") // STEP 4 @@ -1078,8 +1091,8 @@ describe('Test Margin Intergration', function () { } ); console.log("fourth time expect getClaimAmount") - // claimableAmount += (newOrderMargin + pnl + manualMargin) = 6016.666 + (price * quantity / leverage + pnl + manual) = 6016.666 + 3500 * 2 / 10 + 333.34 + 2000 = 9050 - expect(await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).eq(BigNumber.from("9050095000000000000000")) + // claimableAmount += pnl + manualMargin = 5666.6666 + pnl + manual = 5666.6666 + 333.333 + 2000 = 7999.9998 + expect(await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).eq(BigNumber.from("7999999800000000000000")) console.log("step 5") // STEP 5 @@ -1089,7 +1102,9 @@ describe('Test Margin Intergration', function () { leverage: 10, quantity: toWei('7'), _trader: trader3, - _positionManager: fundingRateTest + _positionManager: fundingRateTest, + // can skip check balance cause this is close order, no need to deposit fund + skipCheckBalance: true }) console.log("debug margin") @@ -1116,7 +1131,7 @@ describe('Test Margin Intergration', function () { console.log("--------- claim amount after market") console.log("debug margin after") await phTT.debugPosition(trader1, fundingRateTest) - expect(await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).eq(BigNumber.from("5849995000000000000000")) + expect(await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).eq(BigNumber.from("4799999790000000000000")) console.log("position map after close market", (await positionHouse.positionMap(fundingRateTest.address, trader1.address)).toString()) @@ -1125,8 +1140,6 @@ describe('Test Margin Intergration', function () { // expect(await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).eq(BigNumber.from("5630")) - - console.log("step 6") // expect(await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).eq('4716')// TODO verify?? // STEP 6 @@ -1158,7 +1171,7 @@ describe('Test Margin Intergration', function () { const exchangedQuoteAmount = BigNumber.from(balanceOfTrader1AfterTestcase).sub(BigNumber.from(balanceOfTrader1BeforeTestcase)) console.log("exchangedQuoteAmount", exchangedQuoteAmount.toString()) console.log((await insuranceFund.totalFee()).toString()) - expect(exchangedQuoteAmount).eq(BigNumber.from("3093504800000000000000")) + expect(exchangedQuoteAmount).eq(BigNumber.from("3094500100000000000000")) }) it("should get profit after open position by 8 market + 10 limit and close by 9 market + 9 limit", async () => { @@ -1265,7 +1278,9 @@ describe('Test Margin Intergration', function () { leverage: 10, quantity: toWei('9'), _trader: trader1, - _positionManager: fundingRateTest + _positionManager: fundingRateTest, + // can skip check balance cause this is close order, no need to deposit fund + skipCheckBalance: true }) await phTT.openMarketPosition({ @@ -1282,7 +1297,7 @@ describe('Test Margin Intergration', function () { const balanceOfTrader1AfterTestcase = await bep20Mintable.balanceOf(trader1.address) const exchangedQuoteAmount = BigNumber.from(balanceOfTrader1AfterTestcase).sub(BigNumber.from(balanceOfTrader1BeforeTestcase)) console.log("exchangedQuoteAmount", exchangedQuoteAmount.toString()) - expect(exchangedQuoteAmount).eq(BigNumber.from("3287519700000000000000")) + expect(exchangedQuoteAmount).eq(BigNumber.from("3291569700000000000000")) }) it("should get correct claimableAmount when create position by both limit and market, reverse market with quantity > created market then increase by market again", async () => { @@ -1365,7 +1380,9 @@ describe('Test Margin Intergration', function () { leverage: 10, quantity: toWei('1'), _trader: trader1, - _positionManager: fundingRateTest + _positionManager: fundingRateTest, + // can skip check balance cause this is close order, no need to deposit fund + skipCheckBalance: true }) await phTT.openMarketPosition({ @@ -1450,8 +1467,6 @@ describe('Test Margin Intergration', function () { // expect(await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).eq(BigNumber.from("5630")) - - console.log("step 6") // STEP 6 await fundingRateTest.setMockPrice(BigNumber.from("3500"), BigNumber.from("3500")) @@ -1464,7 +1479,9 @@ describe('Test Margin Intergration', function () { leverage: 10, quantity: toWei('3'), _trader: trader2, - _positionManager: fundingRateTest + _positionManager: fundingRateTest, + // can skip check balance cause this is close order, no need to deposit fund + skipCheckBalance: true }) await phTT.openMarketPosition({ @@ -1497,7 +1514,7 @@ describe('Test Margin Intergration', function () { const exchangedQuoteAmount = BigNumber.from(balanceOfTrader1AfterTestcase).sub(BigNumber.from(balanceOfTrader1BeforeTestcase)) console.log("exchangedQuoteAmount", exchangedQuoteAmount.toString()) console.log((await insuranceFund.totalFee()).toString()) - expect(exchangedQuoteAmount).eq("3091465100000000000000") + expect(exchangedQuoteAmount).eq("3093480100000000000000") } }) @@ -1572,7 +1589,9 @@ describe('Test Margin Intergration', function () { leverage: 10, quantity: toWei(3), _trader: trader1, - _positionManager: fundingRateTest + _positionManager: fundingRateTest, + // can skip check balance cause this is close order, no need to deposit fund + skipCheckBalance: true }) // open market @@ -1587,7 +1606,8 @@ describe('Test Margin Intergration', function () { ); console.log("before get claimable amount") console.log((await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString()) - expect((await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString()).eq(toWei(3500)) + // not included margin of close order so: claimAmount = before - closeOrderMargin = 3500 - 3500*3/10 = 2450 + expect((await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString()).eq(toWei(2450)) console.log("STEP 4") @@ -1613,7 +1633,7 @@ describe('Test Margin Intergration', function () { ); console.log("before get claimable amount") console.log((await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString()) - expect((await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString()).eq(toWei(5600)) + expect((await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString()).eq(toWei(4550)) await phTT.dumpPrice({ toPrice: 3400, @@ -1646,7 +1666,7 @@ describe('Test Margin Intergration', function () { ); console.log("before get claimable amount") console.log((await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString()) - expect((await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString()).eq(toWei(4535)) + expect((await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString()).eq(toWei(3485)) console.log("STEP 6") // STEP 6 @@ -1662,15 +1682,672 @@ describe('Test Margin Intergration', function () { ); console.log("before get claimable amount") console.log((await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString()) - expect((await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString()).eq(toWei(6985)) + expect((await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString()).eq(toWei(4235)) await positionHouse.connect(trader1).claimFund(fundingRateTest.address) const balanceOfTrader1AfterTestcase = await bep20Mintable.balanceOf(trader1.address) const exchangedQuoteAmount = BigNumber.from(balanceOfTrader1AfterTestcase).sub(BigNumber.from(balanceOfTrader1BeforeTestcase)) console.log("exchangedQuoteAmount", exchangedQuoteAmount.toString()) - expect(exchangedQuoteAmount).eq(BigNumber.from("2291450000000000000000")) + expect(exchangedQuoteAmount).eq(BigNumber.from("2294200000000000000000")) + }) + + // EGE-8: Row 85 + it("should get correct amount of claimable fund when add and remove margin then close position by limit order 16", async () => { + await phTT.dumpPrice({ + toPrice: 3900, + pumper: tradercp1, + pumper2: tradercp2, + positionManager: fundingRateTest + }) + + const balanceOfTrader1BeforeTestcase = await bep20Mintable.balanceOf(trader1.address) + console.log(`balanceOfTrader1BeforeTestcase: ${balanceOfTrader1BeforeTestcase.toString()}`) + + // STEP 1 - 2 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3800, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('8'), + _trader: trader2, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('8'), + leverage: 10, + side: SIDE.SHORT, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3800"), BigNumber.from("3800")) + + // STEP 3 + await positionHouse.connect(trader1).addMargin(fundingRateTest.address, BigNumber.from("1000")) + + // STEP 4-5 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3700, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('12'), + _trader: trader2, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('12'), + leverage: 10, + side: SIDE.SHORT, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3700"), BigNumber.from("3700")) + + // STEP 6 + await positionHouse.connect(trader1).addMargin(fundingRateTest.address, BigNumber.from("500")) + + // STEP 7-8 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3600, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('4'), + _trader: trader1, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('4'), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3600"), BigNumber.from("3600")) + + // STEP 9-10 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3700, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from('16'), + _trader: trader2, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('16'), + leverage: 10, + side: SIDE.LONG, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3700"), BigNumber.from("3700")) + + await positionHouse.connect(trader1).claimFund(fundingRateTest.address) + + const balanceOfTrader1AfterTestcase = await bep20Mintable.balanceOf(trader1.address) + const exchangedQuoteAmount = BigNumber.from(balanceOfTrader1AfterTestcase).sub(BigNumber.from(balanceOfTrader1BeforeTestcase)) + expect(exchangedQuoteAmount).eq("1192") + }) + + // EGE-8: Row 87 + it("should get correct amount of claimable fund when add and remove margin then close position by market order 8", async () => { + + await phTT.dumpPrice({ + toPrice: 3900, + pumper: tradercp1, + pumper2: tradercp2, + positionManager: fundingRateTest + }) + + const balanceOfTrader1BeforeTestcase = await bep20Mintable.balanceOf(trader1.address) + console.log(`balanceOfTrader1BeforeTestcase: ${balanceOfTrader1BeforeTestcase.toString()}`) + + // STEP 1-2-3-4 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3950, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from('10'), + _trader: trader1, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('5'), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('3'), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('2'), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3950"), BigNumber.from("3950")) + + // STEP 5 + await positionHouse.connect(trader1).addMargin(fundingRateTest.address, BigNumber.from("1000")) + + // STEP 6-7 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3800, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('2'), + _trader: trader1, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('2'), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3950"), BigNumber.from("3950")) + + await phTT.dumpPrice({ + toPrice: 3600, + pumper: tradercp1, + pumper2: tradercp2, + positionManager: fundingRateTest + }) + + // STEP 8 + await positionHouse.connect(trader1).removeMargin(fundingRateTest.address, BigNumber.from("500")) + + // STEP 9-10 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3700, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from('5'), + _trader: trader1, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('5'), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3700"), BigNumber.from("3700")) + + // STEP 11-12 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3600, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('13'), + _trader: trader1, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('13'), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + + await positionHouse.connect(trader1).claimFund(fundingRateTest.address) + const balanceOfTrader1AfterTestcase = await bep20Mintable.balanceOf(trader1.address) + const exchangedQuoteAmount = BigNumber.from(balanceOfTrader1AfterTestcase).sub(BigNumber.from(balanceOfTrader1BeforeTestcase)) + expect(exchangedQuoteAmount).eq("3591") + }) + + // EGE-8: Row 88 + it("should get correct amount of claimable fund when add and remove margin then close position by market order 6", async () => { + + await phTT.dumpPrice({ + toPrice: 3900, + pumper: tradercp1, + pumper2: tradercp2, + positionManager: fundingRateTest + }) + + const balanceOfTrader1BeforeTestcase = await bep20Mintable.balanceOf(trader1.address) + console.log(`balanceOfTrader1BeforeTestcase: ${balanceOfTrader1BeforeTestcase.toString()}`) + + // STEP 1 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3900, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('5'), + _trader: trader2, + _positionManager: fundingRateTest + }) + await phTT.openLimitPositionAndExpect({ + limitPrice: 3700, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('5'), + _trader: trader2, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('10'), + leverage: 10, + side: SIDE.SHORT, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3700"), BigNumber.from("3700")) + + await phTT.pumpPrice({ + toPrice: 4200, + pumper: tradercp1, + pumper2: tradercp2, + positionManager: fundingRateTest + }) + + // STEP 2 + await positionHouse.connect(trader1).addMargin(fundingRateTest.address, BigNumber.from("2000")) + + // STEP 3 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3600, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('7'), + _trader: trader1, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('7'), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3600"), BigNumber.from("3600")) + + await phTT.dumpPrice({ + toPrice: 3500, + pumper: trader3, + pumper2: trader4, + positionManager: fundingRateTest + }) + + // STEP 4 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3600, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from('1'), + _trader: trader2, + _positionManager: fundingRateTest + }) + await phTT.openLimitPositionAndExpect({ + limitPrice: 3500, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from('1'), + _trader: trader2, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('2'), + leverage: 10, + side: SIDE.LONG, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3600"), BigNumber.from("3600")) + + // STEP 5 + await positionHouse.connect(trader1).removeMargin(fundingRateTest.address, BigNumber.from("500")) + + // STEP 6 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3600, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from('5'), + _trader: trader1, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('5'), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3600"), BigNumber.from("3600")) + + // STEP 7 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3500, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('6'), + _trader: trader1, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('6'), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3500"), BigNumber.from("3500")) + + await positionHouse.connect(trader1).claimFund(fundingRateTest.address) + const balanceOfTrader1AfterTestcase = await bep20Mintable.balanceOf(trader1.address) + const exchangedQuoteAmount = BigNumber.from(balanceOfTrader1AfterTestcase).sub(BigNumber.from(balanceOfTrader1BeforeTestcase)) + expect(exchangedQuoteAmount).eq("2590") }) - }); + // EGE-8: Row 99 + it("should get correct amount of claimable fund when add and remove margin then close position by limit order 5", async () => { + await phTT.dumpPrice({ + toPrice: 4000, + pumper: tradercp1, + pumper2: tradercp2, + positionManager: fundingRateTest + }) + + const balanceOfTrader1BeforeTestcase = await bep20Mintable.balanceOf(trader1.address) + console.log(`balanceOfTrader1BeforeTestcase: ${balanceOfTrader1BeforeTestcase.toString()}`) + + // STEP 1 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3900, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('5'), + _trader: trader2, + _positionManager: fundingRateTest + }) + await phTT.openLimitPositionAndExpect({ + limitPrice: 3800, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('5'), + _trader: trader2, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('10'), + leverage: 10, + side: SIDE.SHORT, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3800"), BigNumber.from("3800")) + + // STEP 2 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3700, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('5'), + _trader: trader1, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('5'), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3700"), BigNumber.from("3700")) + + // STEP 3 + await positionHouse.connect(trader1).addMargin(fundingRateTest.address, BigNumber.from("2000")) + + // STEP 4 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3600, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('10'), + _trader: trader2, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('10'), + leverage: 10, + side: SIDE.SHORT, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3600"), BigNumber.from("3600")) + + await phTT.pumpPrice({ + toPrice: 4000, + pumper: tradercp1, + pumper2: tradercp2, + positionManager: fundingRateTest + }) + + // STEP 5 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3500, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('10'), + _trader: trader1, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('10'), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3500"), BigNumber.from("3500")) + + // STEP 6 + await positionHouse.connect(trader1).removeMargin(fundingRateTest.address, BigNumber.from("1000")) + + // STEP 7 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3500, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('5'), + _trader: trader1, + _positionManager: fundingRateTest + }) + await phTT.openLimitPositionAndExpect({ + limitPrice: 3500, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from('3'), + _trader: trader2, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('2'), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3500"), BigNumber.from("3500")) + + await positionHouse.connect(trader1).claimFund(fundingRateTest.address) + + const balanceOfTrader1AfterTestcase = await bep20Mintable.balanceOf(trader1.address) + const exchangedQuoteAmount = BigNumber.from(balanceOfTrader1AfterTestcase).sub(BigNumber.from(balanceOfTrader1BeforeTestcase)) + expect(exchangedQuoteAmount).eq("3492") + }) + + // EGE-8: Row 106 + it("should be fully liquidated when remove all margin", async () => { + await phTT.dumpPrice({ + toPrice: 3700, + pumper: tradercp1, + pumper2: tradercp2, + positionManager: fundingRateTest + }) + + // STEP 1-2 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3700, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('7'), + _trader: trader1, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('6'), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3700"), BigNumber.from("3700")) + + // STEP 2 + await positionHouse.connect(trader1).addMargin(fundingRateTest.address, BigNumber.from("1780")) + + // STEP 4-5 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3700, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from('6'), + _trader: trader2, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('5'), + leverage: 10, + side: SIDE.LONG, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3700"), BigNumber.from("3700")) + + // STEP 6-7 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3195, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('1'), + _trader: trader3, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('1'), + leverage: 10, + side: SIDE.SHORT, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + }) + await fundingRateTest.setMockPrice(BigNumber.from("3195"), BigNumber.from("3195")) + + // STEP 8-9 + await phTT.openLimitPositionAndExpect({ + limitPrice: 3100, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('3'), + _trader: trader3, + _positionManager: fundingRateTest + }) + await phTT.openMarketPosition({ + quantity: BigNumber.from('3'), + leverage: 10, + side: SIDE.SHORT, + trader: trader1.address, + instanceTrader: trader1, + _positionManager: fundingRateTest, + }) + + // STEP 10 + const removableMargin = await positionHouse.getRemovableMargin(fundingRateTest.address, trader1.address) + await positionHouse.connect(trader1).removeMargin(fundingRateTest.address, removableMargin) + + const maintenanceDetail = await positionHouseViewer.getMaintenanceDetail(fundingRateTest.address, trader1.address, 0) + expect(maintenanceDetail.marginRatio).eq("100") + + // Liquidate + await positionHouse.liquidate(fundingRateTest.address, trader1.address) + + const positionAfterLiquidate = await positionHouseViewer.getPosition(fundingRateTest.address, trader1.address) + expect(positionAfterLiquidate.quantity).eq("0") + }) + + it("EGE-8: Row 99", async () => { + const filePath = require('path').resolve(__dirname, '../integration/test-cases/EGE8-99.json') + await testCaseProcessor.process(filePath) + }) + + it("EGE-8: Row 81", async () => { + const filePath = require('path').resolve(__dirname, '../integration/test-cases/EGE8-81.json') + await testCaseProcessor.process(filePath) + }) + + it("EGE-8: Row 1111", async () => { + const filePath = require('path').resolve(__dirname, '../integration/test-cases/EGE772-3.json') + await testCaseProcessor.process(filePath) + }) + + it("EGE-772: Row 4", async () => { + const filePath = require('path').resolve(__dirname, '../integration/test-cases/EGE772-4.json') + await testCaseProcessor.process(filePath) + }) + it("EGE-772: Row 5", async () => { + const filePath = require('path').resolve(__dirname, '../integration/test-cases/EGE772-5.json') + await testCaseProcessor.process(filePath) + }) + it("EGE-772: Row 6", async () => { + const filePath = require('path').resolve(__dirname, '../integration/test-cases/EGE772-6.json') + await testCaseProcessor.process(filePath) + }) + it("EGE-772: Row 7", async () => { + const filePath = require('path').resolve(__dirname, '../integration/test-cases/EGE772-7.json') + await testCaseProcessor.process(filePath) + }) + it("EGE-772: Row 14", async () => { + const filePath = require('path').resolve(__dirname, '../integration/test-cases/EGE772-14.json') + await testCaseProcessor.process(filePath) + }) + it("EGE-772: Row 25", async () => { + const filePath = require('path').resolve(__dirname, '../integration/test-cases/EGE772-25.json') + await testCaseProcessor.process(filePath) + }) + }); describe('margin with funding rate', function () { @@ -1680,11 +2357,11 @@ describe('Test Margin Intergration', function () { }); -function printStruct(result){ +function printStruct(result) { const keys = Object.keys(result) const data = {} - for(const key of keys){ - if(isNaN(Number(key))){ + for (const key of keys) { + if (isNaN(Number(key))) { data[key] = result[key]._isBigNumber ? result[key].toString() : result[key] } } diff --git a/test/integration/test-cases/EGE772-14.json b/test/integration/test-cases/EGE772-14.json new file mode 100644 index 00000000..6ff13025 --- /dev/null +++ b/test/integration/test-cases/EGE772-14.json @@ -0,0 +1,86 @@ +{ + "targetTrader": 1, + "steps": [ + { + "action": "dumpPrice", + "price": 5000 + }, + { + "action": "openLimit", + "price": 5100, + "side": 1, + "quantity": 10, + "trader": 1 + }, + { + "action": "openMarket", + "quantity": 10, + "side": 0, + "trader": 2 + }, + { + "action": "openLimit", + "price": 4800, + "side": 0, + "quantity": 5, + "trader": 1 + }, + { + "action": "openLimit", + "price": 5100, + "side": 1, + "quantity": 1, + "trader": 3 + }, + { + "action": "openLimit", + "price": 5200, + "side": 1, + "quantity": 2, + "trader": 3 + }, + { + "action": "openLimit", + "price": 5300, + "side": 1, + "quantity": 2, + "trader": 3 + }, + { + "action": "setBalanceCheckPoint" + }, + { + "action": "openLimit", + "price": 5500, + "side": 0, + "quantity": 5, + "trader": 1 + }, + { + "action": "setMockPrice", + "price": 5300 + }, + { + "action": "assertMargin", + "value": 2550 + }, + { + "action": "openMarket", + "quantity": 5, + "side": 0, + "trader": 2 + }, + { + "action": "setMockPrice", + "price": 4800 + }, + { + "action": "claimFund", + "trader": 1 + }, + { + "action": "assertTotalReceived", + "value": 4050 + } + ] +} \ No newline at end of file diff --git a/test/integration/test-cases/EGE772-25.json b/test/integration/test-cases/EGE772-25.json new file mode 100644 index 00000000..d3b9d2f7 --- /dev/null +++ b/test/integration/test-cases/EGE772-25.json @@ -0,0 +1,65 @@ +{ + "targetTrader": 1, + "steps": [ + { + "action": "dumpPrice", + "price": 5000 + }, + { + "action": "openLimit", + "price": 5100, + "side": 1, + "quantity": 10, + "trader": 1 + }, + { + "action": "openMarket", + "quantity": 10, + "side": 0, + "trader": 2 + }, + { + "action": "openLimit", + "price": 4800, + "side": 0, + "quantity": 5, + "trader": 1 + }, + { + "action": "openLimit", + "price": 5100, + "side": 1, + "quantity": 1, + "trader": 3 + }, + { + "action": "openLimit", + "price": 5200, + "side": 1, + "quantity": 2, + "trader": 3 + }, + { + "action": "setBalanceCheckPoint" + }, + { + "action": "openLimit", + "price": 5500, + "side": 0, + "quantity": 5, + "trader": 1 + }, + { + "action": "setMockPrice", + "price": 5500 + }, + { + "action": "assertCurrentBalanceWithCheckPoint", + "value": 330 + }, + { + "action": "assertMargin", + "value": 3570 + } + ] +} \ No newline at end of file diff --git a/test/integration/test-cases/EGE772-3.json b/test/integration/test-cases/EGE772-3.json new file mode 100644 index 00000000..2665eb94 --- /dev/null +++ b/test/integration/test-cases/EGE772-3.json @@ -0,0 +1,80 @@ +{ + "targetTrader": 1, + "steps": [ + { + "action": "dumpPrice", + "price": 5000 + }, + { + "action": "openLimit", + "price": 4900, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "openMarket", + "quantity": 10, + "side": 1, + "trader": 2 + }, + { + "action": "openLimit", + "price": 4800, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "openLimit", + "price": 5100, + "side": 1, + "quantity": 5, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5200, + "side": 1, + "quantity": 3, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5300, + "side": 1, + "quantity": 2, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5500, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "assertMargin", + "value": 10070 + }, + { + "action": "assertEntry", + "value": 5035 + }, + { + "action": "openMarket", + "quantity": 10, + "side": 1, + "trader": 2 + }, + { + "action": "assertMargin", + "value": 14870 + }, + { + "action": "assertEntry", + "value": 4956 + } + ] +} + diff --git a/test/integration/test-cases/EGE772-4.json b/test/integration/test-cases/EGE772-4.json new file mode 100644 index 00000000..cf6a8249 --- /dev/null +++ b/test/integration/test-cases/EGE772-4.json @@ -0,0 +1,86 @@ +{ + "targetTrader": 1, + "steps": [ + { + "action": "dumpPrice", + "price": 5000 + }, + { + "action": "openLimit", + "price": 4900, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "openMarket", + "quantity": 10, + "side": 1, + "trader": 2 + }, + { + "action": "openLimit", + "price": 4800, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "openLimit", + "price": 5100, + "side": 1, + "quantity": 5, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5200, + "side": 1, + "quantity": 3, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5300, + "side": 1, + "quantity": 2, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5500, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "assertMargin", + "value": 10070 + }, + { + "action": "assertEntry", + "value": 5035 + }, + { + "action": "openMarket", + "quantity": 1, + "side": 1, + "trader": 2 + }, + { + "action": "openLimit", + "price": 480, + "side": 1, + "quantity": 9, + "trader": 2 + }, + { + "action": "assertMargin", + "value": 14870 + }, + { + "action": "assertEntry", + "value": 4956 + } + ] +} \ No newline at end of file diff --git a/test/integration/test-cases/EGE772-5.json b/test/integration/test-cases/EGE772-5.json new file mode 100644 index 00000000..085f5e50 --- /dev/null +++ b/test/integration/test-cases/EGE772-5.json @@ -0,0 +1,80 @@ +{ + "targetTrader": 1, + "steps": [ + { + "action": "dumpPrice", + "price": 5000 + }, + { + "action": "openLimit", + "price": 4900, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "openMarket", + "quantity": 10, + "side": 1, + "trader": 2 + }, + { + "action": "openLimit", + "price": 4800, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "openLimit", + "price": 5100, + "side": 1, + "quantity": 5, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5200, + "side": 1, + "quantity": 3, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5300, + "side": 1, + "quantity": 2, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5500, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "assertMargin", + "value": 10070 + }, + { + "action": "assertEntry", + "value": 5035 + }, + { + "action": "openLimit", + "price": 470, + "side": 1, + "quantity": 10, + "trader": 2 + }, + { + "action": "assertMargin", + "value": 14870 + }, + { + "action": "assertEntry", + "value": 4956 + } + ] +} \ No newline at end of file diff --git a/test/integration/test-cases/EGE772-6.json b/test/integration/test-cases/EGE772-6.json new file mode 100644 index 00000000..38b03892 --- /dev/null +++ b/test/integration/test-cases/EGE772-6.json @@ -0,0 +1,86 @@ +{ + "targetTrader": 1, + "steps": [ + { + "action": "dumpPrice", + "price": 5000 + }, + { + "action": "openLimit", + "price": 4900, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "openMarket", + "quantity": 10, + "side": 1, + "trader": 2 + }, + { + "action": "openLimit", + "price": 4800, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "openLimit", + "price": 5100, + "side": 1, + "quantity": 5, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5200, + "side": 1, + "quantity": 3, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5300, + "side": 1, + "quantity": 2, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5500, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "assertMargin", + "value": 10070 + }, + { + "action": "assertEntry", + "value": 5035 + }, + { + "action": "openMarket", + "quantity": 5, + "side": 1, + "trader": 2 + }, + { + "action": "openLimit", + "price": 460, + "side": 1, + "quantity": 5, + "trader": 2 + }, + { + "action": "assertMargin", + "value": 14870 + }, + { + "action": "assertEntry", + "value": 4956 + } + ] +} \ No newline at end of file diff --git a/test/integration/test-cases/EGE772-7.json b/test/integration/test-cases/EGE772-7.json new file mode 100644 index 00000000..70cb5693 --- /dev/null +++ b/test/integration/test-cases/EGE772-7.json @@ -0,0 +1,94 @@ +{ + "targetTrader": 1, + "steps": [ + { + "action": "dumpPrice", + "price": 5000 + }, + { + "action": "openLimit", + "price": 4900, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "openMarket", + "quantity": 10, + "side": 1, + "trader": 2 + }, + { + "action": "openLimit", + "price": 4800, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "openLimit", + "price": 5100, + "side": 1, + "quantity": 5, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5200, + "side": 1, + "quantity": 3, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5300, + "side": 1, + "quantity": 2, + "trader": 2 + }, + { + "action": "openLimit", + "price": 5500, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "assertMargin", + "value": 10070 + }, + { + "action": "assertEntry", + "value": 5035 + }, + { + "action": "openLimit", + "price": 460, + "side": 1, + "quantity": 5, + "trader": 2 + }, + { + "action": "openLimit", + "price": 480, + "side": 1, + "quantity": 3, + "trader": 2 + }, + { + "action": "openLimit", + "price": 450, + "side": 1, + "quantity": 2, + "trader": 2 + }, + { + "action": "assertMargin", + "value": 14870 + }, + { + "action": "assertEntry", + "value": 4956 + } + ] +} \ No newline at end of file diff --git a/test/integration/test-cases/EGE8-81.json b/test/integration/test-cases/EGE8-81.json new file mode 100644 index 00000000..fdaabf91 --- /dev/null +++ b/test/integration/test-cases/EGE8-81.json @@ -0,0 +1,109 @@ +{ + "targetTrader": 1, + "steps": [ + { + "action": "dumpPrice", + "price": 3900 + }, + { + "action": "openLimit", + "price": 3900, + "side": 0, + "quantity": 4, + "trader": 2 + }, + { + "action": "openLimit", + "price": 3800, + "side": 0, + "quantity": 11, + "trader": 2 + }, + { + "action": "openLimit", + "price": 3500, + "side": 0, + "quantity": 5, + "trader": 2 + }, + { + "action": "openMarket", + "quantity": 20, + "side": 1, + "trader": 1 + }, + { + "action": "setMockPrice", + "price": 3500 + }, + { + "action": "addMargin", + "trader": 1, + "amount": 1000 + }, + { + "action": "openLimit", + "price": 3600, + "side": 1, + "quantity": 4, + "trader": 3 + }, + { + "action": "openMarket", + "quantity": 4, + "side": 0, + "trader": 1 + }, + { + "action": "setMockPrice", + "price": 3600 + }, + { + "action": "removeMargin", + "trader": 1, + "amount": 500 + }, + { + "action": "openLimit", + "price": 3700, + "side": 1, + "quantity": 3, + "trader": 1 + }, + { + "action": "openMarket", + "quantity": 3, + "side": 0, + "trader": 2 + }, + { + "action": "setMockPrice", + "price": 3700 + }, + { + "action": "openLimit", + "price": 3300, + "side": 0, + "quantity": 19, + "trader": 1 + }, + { + "action": "openMarket", + "quantity": 19, + "side": 1, + "trader": 3 + }, + { + "action": "setMockPrice", + "price": 3300 + }, + { + "action": "claimFund", + "trader": 1 + }, + { + "action": "assertTotalReceived", + "value": 3492 + } + ] +} \ No newline at end of file diff --git a/test/integration/test-cases/EGE8-99.json b/test/integration/test-cases/EGE8-99.json new file mode 100644 index 00000000..d26d862c --- /dev/null +++ b/test/integration/test-cases/EGE8-99.json @@ -0,0 +1,134 @@ +{ + "targetTrader": 1, + "steps": [ + { + "action": "dumpPrice", + "price": 4000 + }, + { + "action": "openLimit", + "price": 3900, + "side": 0, + "quantity": 5, + "trader": 2 + }, + { + "action": "openLimit", + "price": 3800, + "side": 0, + "quantity": 5, + "trader": 2 + }, + { + "action": "openMarket", + "quantity": 10, + "side": 1, + "trader": 1 + }, + { + "action": "setMockPrice", + "price": 3800 + }, + { + "action": "openLimit", + "price": 3700, + "side": 0, + "quantity": 5, + "trader": 1 + }, + { + "action": "openMarket", + "quantity": 5, + "side": 1, + "trader": 2 + }, + { + "action": "setMockPrice", + "price": 3700 + }, + { + "action": "addMargin", + "trader": 1, + "amount": 2000 + }, + { + "action": "openLimit", + "price": 3600, + "side": 0, + "quantity": 10, + "trader": 2 + }, + { + "action": "openMarket", + "quantity": 10, + "side": 1, + "trader": 1 + }, + { + "action": "setMockPrice", + "price": 3600 + }, + { + "action": "pumpPrice", + "price": 4000 + }, + { + "action": "openLimit", + "price": 3500, + "side": 0, + "quantity": 10, + "trader": 1 + }, + { + "action": "openMarket", + "quantity": 10, + "side": 1, + "trader": 2 + }, + { + "action": "setMockPrice", + "price": 3500 + }, + { + "action": "removeMargin", + "trader": 1, + "amount": 1000 + }, + { + "action": "openLimit", + "price": 3500, + "side": 0, + "quantity": 5, + "trader": 1 + }, + { + "action": "openLimit", + "price": 3500, + "side": 1, + "quantity": 3, + "trader": 2 + }, + { + "action": "openMarket", + "quantity": 2, + "side": 1, + "trader": 2 + }, + { + "action": "setMockPrice", + "price": 3500 + }, + { + "action": "claimFund", + "trader": 1 + }, + { + "action": "assertMargin", + "value": 1007 + }, + { + "action": "assertEntry", + "value": 1007 + } + ] +} \ No newline at end of file diff --git a/test/shared/deploy.ts b/test/shared/deploy.ts index 6aa29178..65edbfec 100644 --- a/test/shared/deploy.ts +++ b/test/shared/deploy.ts @@ -36,6 +36,7 @@ export async function deployPositionHouse(){ let positionManagerFactory = await ethers.getContractFactory("PositionManagerTest") let positionManager = (await positionManagerFactory.deploy()) as unknown as PositionManager; + // Deploy funding rate test contract let fundingRateTestFactory = await ethers.getContractFactory("FundingRateTest") let fundingRateTest = (await fundingRateTestFactory.deploy()) as unknown as FundingRateTest diff --git a/test/shared/positionHouseTestingTool.ts b/test/shared/positionHouseTestingTool.ts index 7b3f3250..78c56c68 100644 --- a/test/shared/positionHouseTestingTool.ts +++ b/test/shared/positionHouseTestingTool.ts @@ -274,7 +274,7 @@ export default class PositionHouseTestingTool { async pumpPrice({toPrice, pumper, pumper2, positionManager} : any) { positionManager = positionManager || this.positionManager await this.openLimitPositionAndExpect({ - _trader: pumper, leverage: 10, limitPrice: toPrice, quantity: 1, side: 1, _positionManager: positionManager + _trader: pumper, leverage: 10, limitPrice: toPrice, quantity: 1, side: 1, _positionManager: positionManager, skipCheckBalance: true }) await this.openMarketPosition({ instanceTrader: pumper2, leverage: 10, quantity: BigNumber.from('1'), side: 0, expectedSize: BigNumber.from('1'), _positionManager: positionManager @@ -284,7 +284,7 @@ export default class PositionHouseTestingTool { async dumpPrice({toPrice, pumper, pumper2, positionManager} : any) { positionManager = positionManager || this.positionManager await this.openLimitPositionAndExpect({ - _trader: pumper, leverage: 10, limitPrice: toPrice, quantity: 1, side: 0, _positionManager: positionManager + _trader: pumper, leverage: 10, limitPrice: toPrice, quantity: 1, side: 0, _positionManager: positionManager, skipCheckBalance: true }) await this.openMarketPosition({ instanceTrader: pumper2, leverage: 10, quantity: BigNumber.from('1'), side: 1, expectedSize: BigNumber.from('1'), _positionManager: positionManager diff --git a/test/shared/testCaseProcessor.ts b/test/shared/testCaseProcessor.ts new file mode 100644 index 00000000..504d93e4 --- /dev/null +++ b/test/shared/testCaseProcessor.ts @@ -0,0 +1,214 @@ +import {BEP20Mintable, FundingRateTest, PositionHouse, PositionHouseViewer} from "../../typeChain"; +import fs from "fs"; +import PositionHouseTestingTool from "./positionHouseTestingTool"; +import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; +import {BigNumber} from "ethers"; +import {expect} from "chai"; + +export default class TestCaseProcessor { + private readonly positionManager: FundingRateTest; + private readonly positionHouse: PositionHouse; + private readonly positionHouseViewer: PositionHouseViewer; + private readonly phTT: PositionHouseTestingTool; + private readonly bep20Mintable: BEP20Mintable + + private readonly traders: SignerWithAddress[]; + private readonly marketMakers: SignerWithAddress[]; + + private checkPointBalance: BigNumber = BigNumber.from('0') + + constructor(positionManager: FundingRateTest, + positionHouse: PositionHouse, + positionHouseViewer: PositionHouseViewer, + phTT: PositionHouseTestingTool, + bep20Mintable: BEP20Mintable, + trader0, trader1, trader2, trader3, trader4, marketMaker1, marketMaker2: SignerWithAddress) { + this.positionManager = positionManager + this.positionHouse = positionHouse + this.positionHouseViewer = positionHouseViewer + this.phTT = phTT + this.bep20Mintable = bep20Mintable + this.traders = [trader0, trader1, trader2, trader3, trader4] + this.marketMakers = [marketMaker1, marketMaker2]; + } + + async process(filePath: string) { + const data = JSON.parse(fs.readFileSync(filePath).toString()) + + const balanceOfTargetTraderBeforeTestcase = await this.bep20Mintable.balanceOf(this.traders[data.targetTrader].address) + console.log(`balanceOfTargetTraderBeforeTestcase: ${balanceOfTargetTraderBeforeTestcase.toString()}`) + + for (const step of data.steps) { + switch (step.action) { + case "dumpPrice": + await this.processDumpPrice(step) + break + case "pumpPrice": + await this.processPumpPrice(step) + break + case "openLimit": + await this.processOpenLimit(step) + break + case "openMarket": + await this.processOpenMarket(step) + break + case "setMockPrice": + await this.processSetMockPrice(step) + break + case "addMargin": + await this.processAddMargin(step) + break + case "removeMargin": + await this.processRemoveMargin(step) + break + case "getAddedMargin": + await this.processGetAddedMargin(step) + break + case "claimFund": + await this.processClaimFund(step) + break + case "payFunding": + await this.processPayFunding(step) + break + case "assertTotalReceived": + await this.processAssertTotalReceived(step, this.traders[data.targetTrader], balanceOfTargetTraderBeforeTestcase) + break + case "assertMargin": + await this.processAssertMargin(step, this.traders[data.targetTrader]) + break + case "assertEntry": + await this.processAssertEntry(step, this.traders[data.targetTrader]) + break + case "setBalanceCheckPoint": + await this.setBalanceCheckPoint(step, this.traders[data.targetTrader]) + break + case "assertCurrentBalanceWithCheckPoint": + await this.assertCurrentBalanceWithCheckPoint(step, this.traders[data.targetTrader]) + break + } + } + } + + async processDumpPrice(step: any) { + const {price} = step + await this.phTT.dumpPrice({ + toPrice: price, + pumper: this.marketMakers[0], + pumper2: this.marketMakers[1], + positionManager: this.positionManager + }) + const currentPip = await this.positionManager.getCurrentPip() + console.log(`DumpPrice to ${price}. Current pip is ${currentPip.toString()}`) + } + + async processPumpPrice(step: any) { + const {price} = step + await this.phTT.pumpPrice({ + toPrice: price, + pumper: this.marketMakers[0], + pumper2: this.marketMakers[1], + positionManager: this.positionManager + }) + const currentPip = await this.positionManager.getCurrentPip() + console.log(`PumpPrice to ${price}. Current pip is ${currentPip.toString()}`) + } + + async processOpenLimit(step: any) { + const {price, side, leverage = 10, quantity, trader} = step + await this.phTT.openLimitPositionAndExpect({ + limitPrice: price, + side: side, + leverage: leverage, + quantity: BigNumber.from(quantity), + _trader: this.traders[trader], + _positionManager: this.positionManager, + skipCheckBalance: true + }) + console.log(`OpenLimit: price [${price}], side [${side}], leverage [${leverage}], quantity [${quantity}], trader [${trader}]`) + } + + async processOpenMarket(step: any) { + const {quantity, leverage = 10, side, trader} = step + await this.phTT.openMarketPosition({ + quantity: BigNumber.from(quantity), + leverage: leverage, + side: side, + trader: this.traders[trader].address, + instanceTrader: this.traders[trader], + _positionManager: this.positionManager, + }) + console.log(`OpenMarket: quantity [${quantity}], leverage [${leverage}], side [${side}], trader [${trader}]`) + } + + async processSetMockPrice(step: any) { + const {price} = step + await this.positionManager.setMockPrice(BigNumber.from(price), BigNumber.from(price)) + console.log(`SetMockPrice: price [${price}]`) + } + + async processAddMargin(step: any) { + const {trader, amount} = step + await this.positionHouse.connect(this.traders[trader]).addMargin(this.positionManager.address, BigNumber.from(amount)) + console.log(`AddMargin: trader [${trader}], amount [${amount}]`) + + await this.processGetAddedMargin(step) + } + + async processRemoveMargin(step: any) { + const {trader, amount} = step + await this.positionHouse.connect(this.traders[trader]).removeMargin(this.positionManager.address, BigNumber.from(amount)) + console.log(`RemoveMargin: trader [${trader}], amount [${amount}]`) + + await this.processGetAddedMargin(step) + } + + async processGetAddedMargin(step: any) { + const {trader} = step + + const totalAddedMargin = await this.positionHouseViewer.getAddedMargin(this.positionManager.address, this.traders[trader].address) + console.log(`Total added margin: trader [${trader}], amount [${totalAddedMargin}]`) + } + + async processClaimFund(step: any) { + const {trader} = step + + const claimAmount = await this.positionHouseViewer.getClaimAmount(this.positionManager.address, this.traders[trader].address) + await this.positionHouse.connect(this.traders[trader]).claimFund(this.positionManager.address) + console.log(`ClaimFund: trader [${trader}], claimAmount [${claimAmount.toString()}]`) + } + + async processAssertTotalReceived(step: any, targetTrader: SignerWithAddress, balanceOfTargetTraderBeforeTestcase: BigNumber) { + const balanceOfTargetTraderAfterTestcase = await this.bep20Mintable.balanceOf(targetTrader.address) + const exchangedQuoteAmount = BigNumber.from(balanceOfTargetTraderAfterTestcase).sub(BigNumber.from(balanceOfTargetTraderBeforeTestcase)) + console.log(`AssertTotalReceived: actual ${exchangedQuoteAmount}. expected ${step.value}`) + expect(exchangedQuoteAmount).eq(step.value) + } + + async processAssertMargin(step: any, targetTrader: SignerWithAddress) { + const position = await this.positionHouse.getPosition(this.positionManager.address, targetTrader.address) + expect(position.margin).eq(step.value) + } + + async processAssertEntry(step: any, targetTrader: SignerWithAddress) { + const position = await this.positionHouse.getPosition(this.positionManager.address, targetTrader.address) + const entry = position.openNotional.div(position.quantity).toNumber().toFixed(3) + console.log(`Entry: ${entry} Step value: ${step.value}`) + expect(entry == step.value).true + } + + async processPayFunding(step: any) { + await this.positionHouse.connect(this.marketMakers[0]).payFunding(this.positionManager.address) + console.log(`Funding Paid`) + } + + async setBalanceCheckPoint(step: any, targetTrader: SignerWithAddress) { + this.checkPointBalance = await this.bep20Mintable.balanceOf(targetTrader.address) + console.log(`SetBalanceCheckPoint for target trader to ${this.checkPointBalance.toString()}`) + } + + async assertCurrentBalanceWithCheckPoint(step: any, targetTrader: SignerWithAddress) { + const currentBalance = await this.bep20Mintable.balanceOf(targetTrader.address) + console.log(`AssertCurrentBalanceWithCheckPoint current balance of target trader is ${currentBalance.toString()}`) + expect(currentBalance.sub(this.checkPointBalance).toNumber()).eq(step.value) + } +} \ No newline at end of file diff --git a/test/unit/PositionHouse_01.spec.ts b/test/unit/PositionHouse_01.spec.ts index cbac5222..abcb63e6 100644 --- a/test/unit/PositionHouse_01.spec.ts +++ b/test/unit/PositionHouse_01.spec.ts @@ -715,7 +715,7 @@ describe("PositionHouse_01", () => { leverage: 10, quantity: 5, _trader: trader1 - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; // trader2 short at price 4990 because of trader1's order, quantity 5 BTC @@ -799,7 +799,7 @@ describe("PositionHouse_01", () => { leverage: 10, quantity: 200, _trader: trader1 - })).to.be.revertedWith("22"); + })).to.be.revertedWith("23"); return; await openMarketPosition({ @@ -847,7 +847,7 @@ describe("PositionHouse_01", () => { leverage: 10, quantity: 200, _trader: trader1 - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; console.log('open market 2'); await openMarketPosition({ @@ -1312,7 +1312,7 @@ describe("PositionHouse_01", () => { side: SIDE.SHORT, price: 5000, expectedSize: BigNumber.from('-100') - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; console.log('*** start get PnL ***'); @@ -1400,7 +1400,7 @@ describe("PositionHouse_01", () => { side: SIDE.LONG, price: 5000, expectedSize: BigNumber.from('100') - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; @@ -1496,7 +1496,7 @@ describe("PositionHouse_01", () => { side: SIDE.SHORT, price: 5000, expectedSize: BigNumber.from('-100') - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; console.log('*** start get PnL ***'); @@ -1601,7 +1601,7 @@ describe("PositionHouse_01", () => { side: SIDE.LONG, price: 5000, expectedSize: BigNumber.from('100') - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; let response3 = (await openLimitPositionAndExpect({ @@ -1748,7 +1748,7 @@ describe("PositionHouse_01", () => { side: SIDE.LONG, price: 5005, expectedSize: BigNumber.from('50') - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; // const dataClaim = (await positionHouse.canClaimFund(positionManager.address, trader.address)) as unknown as ClaimFund; @@ -1808,7 +1808,7 @@ describe("PositionHouse_01", () => { side: SIDE.SHORT, price: 4995, expectedSize: BigNumber.from('-50') - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; // const dataClaim = (await positionHouse.canClaimFund(positionManager.address, trader.address)) as unknown as ClaimFund; @@ -1867,7 +1867,7 @@ describe("PositionHouse_01", () => { side: SIDE.LONG, price: 5005, expectedSize: BigNumber.from('10') - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; // const dataClaim = (await positionHouse.canClaimFund(positionManager.address, trader.address)) as unknown as ClaimFund; @@ -1931,7 +1931,7 @@ describe("PositionHouse_01", () => { side: SIDE.SHORT, price: 4995, expectedSize: BigNumber.from('-30') - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; // const dataClaim = (await positionHouse.canClaimFund(positionManager.address, trader.address)) as unknown as ClaimFund; diff --git a/test/unit/PositionHouse_02.spec.ts b/test/unit/PositionHouse_02.spec.ts index c6f0bf80..595a89de 100644 --- a/test/unit/PositionHouse_02.spec.ts +++ b/test/unit/PositionHouse_02.spec.ts @@ -125,7 +125,8 @@ describe("PositionHouse_02", () => { leverage: 10, quantity: 3, _trader: tradercp, - _positionManager: _positionManager || positionManager + _positionManager: _positionManager || positionManager, + skipCheckBalance: true })) as unknown as PositionLimitOrderID await openMarketPosition({ @@ -145,7 +146,8 @@ describe("PositionHouse_02", () => { leverage: 10, quantity: 3, _trader: tradercp, - _positionManager: _positionManager || positionManager + _positionManager: _positionManager || positionManager, + skipCheckBalance: true })) as unknown as PositionLimitOrderID await openMarketPosition({ @@ -518,7 +520,8 @@ describe("PositionHouse_02", () => { side: SIDE.LONG, leverage: 10, quantity: 200, - _trader: trader3 + _trader: trader3, + skipCheckBalance: true })) as unknown as PositionLimitOrderID await openMarketPosition({ @@ -1501,7 +1504,8 @@ describe("PositionHouse_02", () => { side: SIDE.SHORT, leverage: 10, quantity: 700, - _trader: trader2 + _trader: trader2, + skipCheckBalance: true })) as unknown as PositionLimitOrderID await openMarketPosition({ @@ -1525,7 +1529,7 @@ describe("PositionHouse_02", () => { trader: trader0.address, instanceTrader: trader0, _positionManager: positionManager, - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; let response5 = (await openLimitPositionAndExpect({ @@ -1699,7 +1703,7 @@ describe("PositionHouse_02", () => { trader: trader2.address, instanceTrader: trader2, _positionManager: positionManager, - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; let response4 = (await openLimitPositionAndExpect({ @@ -2059,7 +2063,7 @@ describe("PositionHouse_02", () => { trader: trader1.address, instanceTrader: trader1, _positionManager: positionManager, - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; let response2Trader2 = (await openLimitPositionAndExpect({ @@ -2154,7 +2158,8 @@ describe("PositionHouse_02", () => { side: SIDE.LONG, leverage: 10, quantity: 300, - _trader: trader1 + _trader: trader1, + skipCheckBalance: true })) as unknown as PositionLimitOrderID await expect(openLimitPositionAndExpect({ @@ -2163,7 +2168,7 @@ describe("PositionHouse_02", () => { leverage: 10, quantity: 500, _trader: trader1 - }) as unknown as PositionLimitOrderID).to.be.revertedWith('22') + }) as unknown as PositionLimitOrderID).to.be.revertedWith('23') return; // S5: Trader2 open market order Short (8) // S6: Trader1 open market order Short (10) @@ -2297,7 +2302,7 @@ describe("PositionHouse_02", () => { leverage: 10, quantity: 2000, _trader: trader0 - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; console.log("done S5") @@ -3839,7 +3844,7 @@ describe("PositionHouse_02", () => { quantity: 10000, _trader: trader1 }) - + console.log("before first open market position") await openMarketPosition({ quantity: BigNumber.from('20000'), leverage: 10, @@ -3855,7 +3860,8 @@ describe("PositionHouse_02", () => { side: SIDE.SHORT, leverage: 10, quantity: 10000, - _trader: trader0 + _trader: trader0, + skipCheckBalance: true }) await openMarketPosition({ quantity: BigNumber.from('10000'), @@ -3867,7 +3873,7 @@ describe("PositionHouse_02", () => { } ); const claimableAmount = await positionHouseViewer.getClaimAmount(positionManager.address, trader0.address) - expect(claimableAmount).eq(9870000) + expect(claimableAmount).eq(4890000) }) it('get claim amount of position created by market order and closed by limit order', async function () { @@ -3917,7 +3923,8 @@ describe("PositionHouse_02", () => { side: SIDE.SHORT, leverage: 10, quantity: 10000, - _trader: trader0 + _trader: trader0, + skipCheckBalance: true }) await openMarketPosition({ quantity: BigNumber.from('10000'), @@ -3930,7 +3937,7 @@ describe("PositionHouse_02", () => { ); const claimableAmount = await positionHouseViewer.getClaimAmount(positionManager.address, trader0.address) - expect(claimableAmount).eq(9870000) + expect(claimableAmount).eq(4890000) }) it('get claimable amount correct with limit order and cancelled limit order', async function () { @@ -4017,7 +4024,8 @@ describe("PositionHouse_02", () => { side: SIDE.LONG, leverage: 10, quantity: 120000, - _trader: trader0 + _trader: trader0, + skipCheckBalance: true }) // console.log((await positionHouse.getRemovableMargin(positionManager.address, trader0.address)).toString()) @@ -4060,7 +4068,7 @@ describe("PositionHouse_02", () => { leverage: 10, quantity: 20, _trader: trader0 - })).to.be.revertedWith("22") + })).to.be.revertedWith("23") return; console.log("done step 3") await openMarketPosition({ @@ -4232,7 +4240,8 @@ describe("PositionHouse_02", () => { side: SIDE.LONG, leverage: 10, quantity: 5000, - _trader: trader0 + _trader: trader0, + skipCheckBalance: true }) await openLimitPositionAndExpect({ @@ -4240,7 +4249,8 @@ describe("PositionHouse_02", () => { side: SIDE.SHORT, leverage: 10, quantity: 5000, - _trader: trader1 + _trader: trader1, + skipCheckBalance: true }) @@ -4360,7 +4370,8 @@ describe("PositionHouse_02", () => { side: SIDE.LONG, leverage: 10, quantity: 10, - _trader: trader1 + _trader: trader1, + skipCheckBalance: true }) const getTrader0Position = await positionHouse.getPosition(positionManager.address, trader0.address) @@ -4399,13 +4410,14 @@ describe("PositionHouse_02", () => { side: SIDE.SHORT, leverage: 10, quantity: 10, - _trader: trader0 + _trader: trader0, + skipCheckBalance: true }) claimableAmountTrader0 = await positionHouseViewer.getClaimAmount(positionManager.address, trader0.address) console.log("1 ", claimableAmountTrader0.toString()) - await expect(positionHouse.connect(trader0).closeLimitPosition(positionManager.address, 510000, 10)).to.be.revertedWith('22') + await expect(positionHouse.connect(trader0).closeLimitPosition(positionManager.address, 510000, 10)).to.be.revertedWith('23') claimableAmountTrader0 = await positionHouseViewer.getClaimAmount(positionManager.address, trader0.address) console.log("2 ", claimableAmountTrader0.toString()) @@ -4625,7 +4637,8 @@ describe("PositionHouse_02", () => { side: SIDE.SHORT, leverage: 10, quantity: BigNumber.from('10'), - _trader: trader1 + _trader: trader1, + skipCheckBalance: true }) await cancelLimitOrder(positionManager.address, trader0, '1', '500000') @@ -4853,7 +4866,8 @@ describe("PositionHouse_02", () => { side: SIDE.LONG, leverage: 10, quantity: BigNumber.from('10'), - _trader: trader1 + _trader: trader1, + skipCheckBalance: true }) await openMarketPosition({ @@ -4885,7 +4899,8 @@ describe("PositionHouse_02", () => { side: SIDE.SHORT, leverage: 10, quantity: BigNumber.from('2'), - _trader: trader1 + _trader: trader1, + skipCheckBalance: true }) await openLimitPositionAndExpect({ @@ -5090,7 +5105,8 @@ describe("PositionHouse_02", () => { side: SIDE.LONG, leverage: 10, quantity: BigNumber.from('1'), - _trader: trader1 + _trader: trader1, + skipCheckBalance: true }) const balanceOfTrader0BeforeClose = (await bep20Mintable.balanceOf(trader0.address)).toString() @@ -5147,7 +5163,8 @@ describe("PositionHouse_02", () => { side: SIDE.LONG, leverage: 10, quantity: BigNumber.from('3'), - _trader: trader2 + _trader: trader2, + skipCheckBalance: true }) await changePrice({limitPrice: 6500, toHigherPrice: false}) @@ -5217,13 +5234,15 @@ describe("PositionHouse_02", () => { console.log("liquidity in pip 4800", (await positionManager.getLiquidityInPipRange(480000, 1, false)).toString()) - await openLimitPositionAndExpect({ + await expect(openLimitPositionAndExpect({ limitPrice: 4800, side: SIDE.SHORT, leverage: 10, quantity: BigNumber.from('20'), - _trader: trader2 - }) + _trader: trader2, + skipCheckBalance: true + })).to.be.revertedWith('22.1') + return; }) it("should stay remain quantity when cancel a reverse limit order", async () => { @@ -5250,7 +5269,8 @@ describe("PositionHouse_02", () => { side: SIDE.LONG, leverage: 10, quantity: BigNumber.from('5'), - _trader: trader1 + _trader: trader1, + skipCheckBalance: true }) await openMarketPosition({ @@ -5272,7 +5292,7 @@ describe("PositionHouse_02", () => { console.log(positionDataAfterCancel) await expect(positionDataBeforeCancel).eq(positionDataAfterCancel) console.log(BigNumber.from(traderBalanceAfterCancel).sub(BigNumber.from(traderBalanceBeforeCancel)).toString()) - await expect(BigNumber.from(traderBalanceAfterCancel).sub(BigNumber.from(traderBalanceBeforeCancel))).eq(1350) + await expect(BigNumber.from(traderBalanceAfterCancel).sub(BigNumber.from(traderBalanceBeforeCancel))).eq(0) }) it("should stay remain quantity when cancel a close position limit order", async () => { @@ -5299,7 +5319,8 @@ describe("PositionHouse_02", () => { side: SIDE.LONG, leverage: 10, quantity: BigNumber.from('10'), - _trader: trader1 + _trader: trader1, + skipCheckBalance: true }) await openMarketPosition({ @@ -5324,11 +5345,12 @@ describe("PositionHouse_02", () => { console.log(positionDataAfterCancel) console.log((BigNumber.from(traderBalanceAfterCancel).sub(BigNumber.from(traderBalanceBeforeCancel))).toString()) - await expect(BigNumber.from(traderBalanceAfterCancel).sub(BigNumber.from(traderBalanceBeforeCancel))).eq(3150) + await expect(BigNumber.from(traderBalanceAfterCancel).sub(BigNumber.from(traderBalanceBeforeCancel))).eq(0) }) it("should partially fill limit order correctly", async () => { + console.log("5353") await openLimitPositionAndExpect({ limitPrice: 4900, side: SIDE.LONG, @@ -5337,6 +5359,7 @@ describe("PositionHouse_02", () => { _trader: trader1 }) + console.log("5362") await openLimitPositionAndExpect({ limitPrice: 4800, side: SIDE.LONG, @@ -5345,6 +5368,7 @@ describe("PositionHouse_02", () => { _trader: trader1 }) + console.log("5371") await openMarketPosition({ quantity: BigNumber.from('5'), leverage: 10, @@ -5357,6 +5381,7 @@ describe("PositionHouse_02", () => { await positionHouse.connect(trader1).cancelLimitOrder(positionManager.address, 0, 0) + console.log("5384") await openMarketPosition({ quantity: BigNumber.from('1'), leverage: 10, @@ -5367,16 +5392,19 @@ describe("PositionHouse_02", () => { } ); + console.log("5395") await openLimitPositionAndExpect({ limitPrice: 4800, side: SIDE.SHORT, leverage: 10, quantity: BigNumber.from('5'), - _trader: trader3 + _trader: trader3, + skipCheckBalance: true }) await positionHouse.connect(trader1).cancelLimitOrder(positionManager.address, 1, 0) + console.log("5407") await openLimitPositionAndExpect({ limitPrice: 4900, side: SIDE.SHORT, @@ -5385,7 +5413,8 @@ describe("PositionHouse_02", () => { _trader: trader4 }) - await openMarketPosition({ + console.log("5416") + await expect(openMarketPosition({ quantity: BigNumber.from('5'), leverage: 10, side: SIDE.LONG, @@ -5393,16 +5422,19 @@ describe("PositionHouse_02", () => { instanceTrader: trader3, _positionManager: positionManager, } - ); - + )).to.be.revertedWith('22.2') + return; + console.log("5427") await openLimitPositionAndExpect({ limitPrice: 4900, side: SIDE.SHORT, leverage: 10, quantity: BigNumber.from('5'), - _trader: trader1 + _trader: trader1, + skipCheckBalance: true }) + console.log("5437") await openMarketPosition({ quantity: BigNumber.from('1'), leverage: 10, @@ -5413,6 +5445,7 @@ describe("PositionHouse_02", () => { } ); + console.log("5448") await openLimitPositionAndExpect({ limitPrice: 4900, side: SIDE.LONG, @@ -5478,10 +5511,12 @@ describe("PositionHouse_02", () => { side: SIDE.SHORT, leverage: 10, quantity: BigNumber.from('10'), - _trader: trader2 + _trader: trader2, + skipCheckBalance: true }) const balanceBeforeCloseMarket = await bep20Mintable.balanceOf(trader1.address) - await positionHouse.connect(trader1).closePosition(positionManager.address, BigNumber.from("4")) + await expect(positionHouse.connect(trader1).closePosition(positionManager.address, BigNumber.from("4"))).to.be.revertedWith('22.2') + return; const balanceAfterCloseMarket = await bep20Mintable.balanceOf(trader1.address) const paybackQuantity = BigNumber.from(balanceAfterCloseMarket).sub(BigNumber.from(balanceBeforeCloseMarket)) await expect(paybackQuantity.toString()).eq("940") @@ -5491,7 +5526,8 @@ describe("PositionHouse_02", () => { side: SIDE.LONG, leverage: 10, quantity: BigNumber.from('16'), - _trader: trader1 + _trader: trader1, + skipCheckBalance: true }) await expect(openMarketPosition({ @@ -5502,7 +5538,7 @@ describe("PositionHouse_02", () => { instanceTrader: trader2, _positionManager: positionManager, } - )).to.be.revertedWith('22'); + )).to.be.revertedWith('23'); return; await openMarketPosition({ @@ -5571,10 +5607,12 @@ describe("PositionHouse_02", () => { side: SIDE.SHORT, leverage: 10, quantity: BigNumber.from('10'), - _trader: trader2 + _trader: trader2, + skipCheckBalance: true }) const balanceBeforeCloseMarket = await bep20Mintable.balanceOf(trader1.address) - await positionHouse.connect(trader1).closePosition(positionManager.address, BigNumber.from("10")) + await expect(positionHouse.connect(trader1).closePosition(positionManager.address, BigNumber.from("10"))).to.be.revertedWith('22.2') + return; const balanceAfterCloseMarket = await bep20Mintable.balanceOf(trader1.address) const paybackQuantity = BigNumber.from(balanceAfterCloseMarket).sub(BigNumber.from(balanceBeforeCloseMarket)) await expect(paybackQuantity.toString()).eq("2350") @@ -5583,7 +5621,8 @@ describe("PositionHouse_02", () => { side: SIDE.LONG, leverage: 10, quantity: BigNumber.from('10'), - _trader: trader1 + _trader: trader1, + skipCheckBalance: true }) await openMarketPosition({ @@ -5614,7 +5653,7 @@ describe("PositionHouse_02", () => { _trader: trader4 }) const trader1CanClaimAmount = (await positionHouseViewer.getClaimAmount(positionManager.address, trader1.address)).toString() - await expect(trader1CanClaimAmount).eq("7150") + await expect(trader1CanClaimAmount).eq("3850") }) it( "should transfer when open limit in current pip", async ()=>{ @@ -5865,7 +5904,7 @@ describe("PositionHouse_02", () => { const balanceAfterTestCase = await bep20Mintable.balanceOf(trader1.address) const exchangedQuoteAmount = balanceAfterTestCase.sub(balanceBeforeTestCase) console.log(exchangedQuoteAmount.toString()) - expect(exchangedQuoteAmount.toString()).eq("992") + expect(exchangedQuoteAmount.toString()).eq("995") }) it("should be reverted transaction when open multi order with different side", async () => { @@ -5959,7 +5998,8 @@ describe("PositionHouse_02", () => { leverage: 1, quantity: BigNumber.from('2'), _trader: trader1, - _positionManager: positionManager + _positionManager: positionManager, + skipCheckBalance: true }) // S4: trader1 try to create a limit reduce order with quantity = 2/3 position again but got revert @@ -5971,7 +6011,7 @@ describe("PositionHouse_02", () => { quantity: BigNumber.from('2'), _trader: trader1, skipCheckBalance: true - })).to.be.revertedWith('22') + })).to.be.revertedWith('23') // S5: trader1 try to create a market reduce order but got revert same as s4 await expect(openMarketPosition({ @@ -5982,7 +6022,7 @@ describe("PositionHouse_02", () => { instanceTrader: trader1, _positionManager: positionManager, } - )).to.be.revertedWith('22'); + )).to.be.revertedWith('23'); // S6: trader2 do the same as S3, S4, S5 await openLimitPositionAndExpect({ @@ -5991,7 +6031,8 @@ describe("PositionHouse_02", () => { leverage: 1, quantity: BigNumber.from('2'), _trader: trader2, - _positionManager: positionManager + _positionManager: positionManager, + skipCheckBalance: true }) await expect(openLimitPositionAndExpect({ @@ -6001,7 +6042,7 @@ describe("PositionHouse_02", () => { quantity: BigNumber.from('2'), _trader: trader2, skipCheckBalance: true - })).to.be.revertedWith('22') + })).to.be.revertedWith('23') await expect(openMarketPosition({ quantity: BigNumber.from('2'), @@ -6011,9 +6052,44 @@ describe("PositionHouse_02", () => { instanceTrader: trader2, _positionManager: positionManager, } - )).to.be.revertedWith('22'); + )).to.be.revertedWith('23'); + }) + + + it("should fill order correctly when cancel the only order of different pip from current", async () => { + await openLimitPositionAndExpect({ + limitPrice: 5000, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('10'), + _trader: trader1, + skipCheckBalance: true + }) + + await openLimitPositionAndExpect({ + limitPrice: 4900, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('10'), + _trader: trader2, + skipCheckBalance: true + }) + + await cancelLimitOrder(positionManager.address, trader2, '1', '490000') + + // should be reverted cause there are not limit short order + await expect(openMarketPosition({ + quantity: BigNumber.from('10'), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: positionManager, + } + )).to.be.revertedWith("11") }) + it("should cancel pending order success of liquidated user", async () => { await fundingRateTest.setMockPrice(5500, 5500) @@ -6094,7 +6170,8 @@ describe("PositionHouse_02", () => { leverage: 10, quantity: BigNumber.from('2'), _trader: trader1, - _positionManager: fundingRateTest + _positionManager: fundingRateTest, + skipCheckBalance: true }) await openMarketPosition({ @@ -6121,5 +6198,133 @@ describe("PositionHouse_02", () => { } ); }) + + it("should increase claimable fund when partial filled an increase limit order", async () => { + await openLimitPositionAndExpect({ + limitPrice: 5200, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from('5'), + _trader: trader1, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await openMarketPosition({ + quantity: BigNumber.from('5'), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + const claimableAmountAfterFirstOrder = (await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString() + // margin after first order = 5200 * 5 / 10 = 2600 + await expect(claimableAmountAfterFirstOrder).eq('2600') + + await changePrice({ + limitPrice: 5000, + toHigherPrice: false, + _positionManager: fundingRateTest + }) + + await openLimitPositionAndExpect({ + limitPrice: 5000, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from('3'), + _trader: trader1, + _positionManager: fundingRateTest, + skipCheckBalance: true + }) + + await openMarketPosition({ + quantity: BigNumber.from('1'), + leverage: 10, + side: SIDE.LONG, + trader: trader2.address, + instanceTrader: trader2, + _positionManager: fundingRateTest, + } + ); + + const claimableAmountAfterSecondOrder = (await positionHouseViewer.getClaimAmount(fundingRateTest.address, trader1.address)).toString() + // total margin after second order = positionMargin + filledOrderMargin = 2600 + 5000*1/10 = 3100 + await expect(claimableAmountAfterSecondOrder).eq('3100') + }) + + it("can create a limit long higher than current price", async () => { + await openLimitPositionAndExpect({ + limitPrice: 5100, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from('5'), + _trader: trader2, + _positionManager: positionManager, + skipCheckBalance: true + }) + + await openLimitPositionAndExpect({ + limitPrice: 5200, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from('5'), + _trader: trader2, + _positionManager: positionManager, + skipCheckBalance: true + }) + + await openLimitPositionAndExpect({ + limitPrice: 5300, + side: SIDE.LONG, + leverage: 10, + quantity: BigNumber.from('17'), + _trader: trader1, + _positionManager: positionManager, + skipCheckBalance: true + }) + + await expect((await positionManager.getCurrentPip()).toString()).eq('520000') + + const positionOfTrader1 = await positionHouseViewer.getPosition(positionManager.address, trader1.address) + await expect(positionOfTrader1.quantity.toString()).eq('10') + // openNotional = 5*5100 + 5*5200 = 51500 + await expect(positionOfTrader1.openNotional.toString()).eq('51500') + + const listOrderPendingOfTrader1 = await positionHouseViewer.getListOrderPending(positionManager.address, trader1.address) + await expect(listOrderPendingOfTrader1[0].quantity).eq('17') + await expect(listOrderPendingOfTrader1[0].partialFilled).eq('10') + + await openLimitPositionAndExpect({ + limitPrice: 5100, + side: SIDE.SHORT, + leverage: 10, + quantity: BigNumber.from('7'), + _trader: trader2, + _positionManager: positionManager, + skipCheckBalance: true + }) + await expect((await positionManager.getCurrentPip()).toString()).eq('530000') + + const positionOfTrader1Fulfilled = await positionHouseViewer.getPosition(positionManager.address, trader1.address) + await expect(positionOfTrader1Fulfilled.quantity.toString()).eq('17') + // openNotional = 5*5100 + 5*5200 + 7*5300 = 88600 + await expect(positionOfTrader1Fulfilled.openNotional.toString()).eq('88600') + + const listOrderPendingOfTrader1FulFilled = await positionHouseViewer.getListOrderPending(positionManager.address, trader1.address) + await expect(listOrderPendingOfTrader1FulFilled[0].quantity).eq('0') + await expect(listOrderPendingOfTrader1FulFilled[0].partialFilled).eq('0') + + const positionOfTrader2 = await positionHouseViewer.getPosition(positionManager.address, trader2.address) + await expect(positionOfTrader2.quantity.toString()).eq('17') + // openNotional = 5*5100 + 5*5200 + 7*5300 = 88600 + await expect(positionOfTrader2.openNotional.toString()).eq('88600') + + const listOrderPendingOfTrader2 = await positionHouseViewer.getListOrderPending(positionManager.address, trader2.address) + await expect(listOrderPendingOfTrader2[0].quantity).eq('0') + await expect(listOrderPendingOfTrader2[0].partialFilled).eq('0') + }) }) }) diff --git a/test/unit/PositionManager.spec.ts b/test/unit/PositionManager.spec.ts index 74abff94..96e74760 100644 --- a/test/unit/PositionManager.spec.ts +++ b/test/unit/PositionManager.spec.ts @@ -503,6 +503,41 @@ describe('Position Manager', async function () { isBuy: false }) }); + + it('market short should revert transaction due to price too far from index price', async function () { + /** + * Step 1: + * Current pip = 200 + * User A created limit L(2, 10) + * + * Step 2: + * After update MaxFindingWordsIndex to 0, + * User B open market S(10). Should not match with user A and revert due to out of price range + * */ + await createLimitOrderAndVerify(2, 10, true) + + await positionManager.updateMaxFindingWordsIndex(BigNumber.from("0")) + + await expect(marketBuy(10, false)).to.be.revertedWith("VM Exception while processing transaction: reverted with reason string '25'") + }); + it('market long should revert transaction due to price too far from index price', async function () { + /** + * Step 1: + * Current pip = 200 + * User A created limit S(255, 10), S(500, 10) + * + * Step 2: + * After update MaxFindingWordsIndex to 1, + * User B open market L(20). Should not match with user A and revert due to out of price range + * */ + const pips = [200, 255, 460] + const pipSizes = [10, 5, 5] + await createLimitOrderInPipRanges(pips, pipSizes, false) + + await positionManager.updateMaxFindingWordsIndex(BigNumber.from("1")) + + await expect(marketBuy(20, true)).to.be.revertedWith("VM Exception while processing transaction: reverted with reason string '25'") + }); }); }); diff --git a/yarn.lock b/yarn.lock index b49e40b0..d41bae5c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,76 @@ # yarn lockfile v1 -"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0": +"@apollo/client@^3.1.5": + "integrity" "sha512-XHoouuEJ4L37mtfftcHHO1caCRrKKAofAwqRoq28UQIPMJk+e7n3X9OtRRNXKk/9tmhNkwelSary+EilfPwI7A==" + "resolved" "https://registry.npmjs.org/@apollo/client/-/client-3.5.6.tgz" + "version" "3.5.6" + dependencies: + "@graphql-typed-document-node/core" "^3.0.0" + "@wry/context" "^0.6.0" + "@wry/equality" "^0.5.0" + "@wry/trie" "^0.3.0" + "graphql-tag" "^2.12.3" + "hoist-non-react-statics" "^3.3.2" + "optimism" "^0.16.1" + "prop-types" "^15.7.2" + "symbol-observable" "^4.0.0" + "ts-invariant" "^0.9.4" + "tslib" "^2.3.0" + "zen-observable-ts" "^1.2.0" + +"@apollo/protobufjs@1.2.2": + "integrity" "sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ==" + "resolved" "https://registry.npmjs.org/@apollo/protobufjs/-/protobufjs-1.2.2.tgz" + "version" "1.2.2" + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.0" + "@types/node" "^10.1.0" + "long" "^4.0.0" + +"@apollographql/apollo-tools@^0.5.0": + "integrity" "sha512-KxZiw0Us3k1d0YkJDhOpVH5rJ+mBfjXcgoRoCcslbgirjgLotKMzOcx4PZ7YTEvvEROmvG7X3Aon41GvMmyGsw==" + "resolved" "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.5.2.tgz" + "version" "0.5.2" + +"@apollographql/graphql-playground-html@1.6.27": + "integrity" "sha512-tea2LweZvn6y6xFV11K0KC8ETjmm52mQrW+ezgB2O/aTQf8JGyFmMcRPFgUaQZeHbWdm8iisDC6EjOKsXu0nfw==" + "resolved" "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.27.tgz" + "version" "1.6.27" + dependencies: + "xss" "^1.0.8" + +"@apollographql/graphql-upload-8-fork@^8.1.3": + "integrity" "sha512-ssOPUT7euLqDXcdVv3Qs4LoL4BPtfermW1IOouaqEmj36TpHYDmYDIbKoSQxikd9vtMumFnP87OybH7sC9fJ6g==" + "resolved" "https://registry.npmjs.org/@apollographql/graphql-upload-8-fork/-/graphql-upload-8-fork-8.1.3.tgz" + "version" "8.1.3" + dependencies: + "@types/express" "*" + "@types/fs-capacitor" "*" + "@types/koa" "*" + "busboy" "^0.3.1" + "fs-capacitor" "^2.0.4" + "http-errors" "^1.7.3" + "object-path" "^0.11.4" + +"@ardatan/aggregate-error@0.0.6": + "integrity" "sha512-vyrkEHG1jrukmzTPtyWB4NLPauUw5bQeg4uhn8f+1SSynmrOcyvlb1GKQjjgoBzElLdfXCRYX8UnBlhklOHYRQ==" + "resolved" "https://registry.npmjs.org/@ardatan/aggregate-error/-/aggregate-error-0.0.6.tgz" + "version" "0.0.6" + dependencies: + "tslib" "~2.0.1" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0": "integrity" "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==" "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz" "version" "7.16.0" @@ -14,7 +83,7 @@ "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz" "version" "7.16.0" -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.14.0", "@babel/core@^7.7.2": "integrity" "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==" "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz" "version" "7.16.0" @@ -35,7 +104,7 @@ "semver" "^6.3.0" "source-map" "^0.5.0" -"@babel/generator@^7.16.0", "@babel/generator@^7.7.2": +"@babel/generator@^7.12.13", "@babel/generator@^7.14.0", "@babel/generator@^7.16.0", "@babel/generator@^7.7.2": "integrity" "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==" "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz" "version" "7.16.0" @@ -44,6 +113,13 @@ "jsesc" "^2.5.1" "source-map" "^0.5.0" +"@babel/helper-annotate-as-pure@^7.16.0": + "integrity" "sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==" + "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/types" "^7.16.0" + "@babel/helper-compilation-targets@^7.16.0": "integrity" "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==" "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz" @@ -54,7 +130,19 @@ "browserslist" "^4.16.6" "semver" "^6.3.0" -"@babel/helper-function-name@^7.16.0": +"@babel/helper-create-class-features-plugin@^7.16.0": + "integrity" "sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-member-expression-to-functions" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + +"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.16.0": "integrity" "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==" "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz" "version" "7.16.0" @@ -134,14 +222,21 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-split-export-declaration@^7.16.0": +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + "integrity" "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==" + "resolved" "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-split-export-declaration@^7.12.13", "@babel/helper-split-export-declaration@^7.16.0": "integrity" "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==" "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz" "version" "7.16.0" dependencies: "@babel/types" "^7.16.0" -"@babel/helper-validator-identifier@^7.15.7": +"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.15.7": "integrity" "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz" "version" "7.15.7" @@ -169,11 +264,35 @@ "chalk" "^2.0.0" "js-tokens" "^4.0.0" -"@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.7.2": +"@babel/parser@^7.12.13", "@babel/parser@7.12.16": + "integrity" "sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.12.16.tgz" + "version" "7.12.16" + +"@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.0", "@babel/parser@^7.7.2": "integrity" "sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw==" "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.16.2.tgz" "version" "7.16.2" +"@babel/plugin-proposal-class-properties@^7.0.0": + "integrity" "sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-proposal-object-rest-spread@^7.0.0": + "integrity" "sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/compat-data" "^7.16.0" + "@babel/helper-compilation-targets" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.0" + "@babel/plugin-syntax-async-generators@^7.8.4": "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" @@ -188,13 +307,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.0.0", "@babel/plugin-syntax-class-properties@^7.8.3": "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" "version" "7.12.13" dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.16.0": + "integrity" "sha512-dH91yCo0RyqfzWgoM5Ji9ir8fQ+uFbt9KHM3d2x4jZOuHS6wNA+CRmRUP/BWCsHG2bjc7A2Way6AvH1eQk0wig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-import-meta@^7.8.3": "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" @@ -209,6 +335,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.16.0": + "integrity" "sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" @@ -230,7 +363,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.8.3": +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" "version" "7.8.3" @@ -265,7 +398,164 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/runtime@^7.12.1", "@babel/runtime@^7.15.4", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/plugin-transform-arrow-functions@^7.0.0": + "integrity" "sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-block-scoped-functions@^7.0.0": + "integrity" "sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-block-scoping@^7.0.0": + "integrity" "sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-classes@^7.0.0": + "integrity" "sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-optimise-call-expression" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "globals" "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.0.0": + "integrity" "sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-destructuring@^7.0.0": + "integrity" "sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-flow-strip-types@^7.0.0": + "integrity" "sha512-vs/F5roOaO/+WxKfp9PkvLsAyj0G+Q0zbFimHm9X2KDgabN2XmNFoAafmeGEYspUlIF9+MvVmyek9UyHiqeG/w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-flow" "^7.16.0" + +"@babel/plugin-transform-for-of@^7.0.0": + "integrity" "sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-function-name@^7.0.0": + "integrity" "sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-literals@^7.0.0": + "integrity" "sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-member-expression-literals@^7.0.0": + "integrity" "sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-modules-commonjs@^7.0.0": + "integrity" "sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-module-transforms" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.16.0" + "babel-plugin-dynamic-import-node" "^2.3.3" + +"@babel/plugin-transform-object-super@^7.0.0": + "integrity" "sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.16.0" + +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.16.0": + "integrity" "sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz" + "version" "7.16.3" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.0.0": + "integrity" "sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-display-name@^7.0.0": + "integrity" "sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-jsx@^7.0.0": + "integrity" "sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.0" + "@babel/helper-module-imports" "^7.16.0" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-jsx" "^7.16.0" + "@babel/types" "^7.16.0" + +"@babel/plugin-transform-shorthand-properties@^7.0.0": + "integrity" "sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-spread@^7.0.0": + "integrity" "sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + +"@babel/plugin-transform-template-literals@^7.0.0": + "integrity" "sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz" + "version" "7.16.0" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/runtime@^7.0.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.15.4", "@babel/runtime@^7.4.4", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": "integrity" "sha512-Nht8L0O8YCktmsDV6FqFue7vQLRx3Hb0B37lS5y0jDRqRxlBG4wIJHnf9/bgSE2UyipKFA01YtS+npRdTWBUyw==" "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.0.tgz" "version" "7.16.0" @@ -281,7 +571,7 @@ "@babel/parser" "^7.16.0" "@babel/types" "^7.16.0" -"@babel/traverse@^7.16.0", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.14.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.7.2": "integrity" "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==" "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz" "version" "7.16.0" @@ -296,6 +586,21 @@ "debug" "^4.1.0" "globals" "^11.1.0" +"@babel/traverse@7.12.13": + "integrity" "sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz" + "version" "7.12.13" + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.12.13" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + "debug" "^4.1.0" + "globals" "^11.1.0" + "lodash" "^4.17.19" + "@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.3.0": "integrity" "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==" "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz" @@ -304,6 +609,15 @@ "@babel/helper-validator-identifier" "^7.15.7" "to-fast-properties" "^2.0.0" +"@babel/types@^7.12.13", "@babel/types@7.12.13": + "integrity" "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz" + "version" "7.12.13" + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + "lodash" "^4.17.19" + "to-fast-properties" "^2.0.0" + "@chainlink/contracts@^0.2.1": "integrity" "sha512-wxXPbt7O3aZaUSG34ufFASC5amRSL6eeYCqsa+2gpqbB8Hk7B7FydEDCI5dqvAC444TlFskPHcVbizCZkRHPpw==" "resolved" "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.2.2.tgz" @@ -348,6 +662,19 @@ "chalk" "^2" "cosmiconfig" "^5" +"@ensdomains/address-encoder@^0.1.7": + "integrity" "sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==" + "resolved" "https://registry.npmjs.org/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz" + "version" "0.1.9" + dependencies: + "bech32" "^1.1.3" + "blakejs" "^1.1.0" + "bn.js" "^4.11.8" + "bs58" "^4.0.1" + "crypto-addr-codec" "^0.1.7" + "nano-base32" "^1.0.1" + "ripemd160" "^2.0.2" + "@ensdomains/ens@^0.4.4": "integrity" "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==" "resolved" "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz" @@ -359,7 +686,34 @@ "testrpc" "0.0.1" "web3-utils" "^1.0.0-beta.31" -"@ensdomains/resolver@^0.2.4": +"@ensdomains/ens@0.4.3": + "integrity" "sha512-btC+fGze//ml8SMNCx5DgwM8+kG2t+qDCZrqlL/2+PV4CNxnRIpR3egZ49D9FqS52PFoYLmz6MaQfl7AO3pUMA==" + "resolved" "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.3.tgz" + "version" "0.4.3" + dependencies: + "bluebird" "^3.5.2" + "eth-ens-namehash" "^2.0.8" + "ethereumjs-testrpc" "^6.0.3" + "ganache-cli" "^6.1.0" + "solc" "^0.4.20" + "testrpc" "0.0.1" + "web3-utils" "^1.0.0-beta.31" + +"@ensdomains/ensjs@^2.0.1": + "integrity" "sha512-gZLntzE1xqPNkPvaHdJlV5DXHms8JbHBwrXc2xNrL1AylERK01Lj/txCCZyVQqFd3TvUO1laDbfUv8VII0qrjg==" + "resolved" "https://registry.npmjs.org/@ensdomains/ensjs/-/ensjs-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "@babel/runtime" "^7.4.4" + "@ensdomains/address-encoder" "^0.1.7" + "@ensdomains/ens" "0.4.3" + "@ensdomains/resolver" "0.2.4" + "content-hash" "^2.5.2" + "eth-ens-namehash" "^2.0.8" + "ethers" "^5.0.13" + "js-sha3" "^0.8.0" + +"@ensdomains/resolver@^0.2.4", "@ensdomains/resolver@0.2.4": "integrity" "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==" "resolved" "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz" "version" "0.2.4" @@ -993,6 +1347,372 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" +"@graphql-tools/batch-delegate@^6.2.4", "@graphql-tools/batch-delegate@^6.2.6": + "integrity" "sha512-QUoE9pQtkdNPFdJHSnBhZtUfr3M7pIRoXoMR+TG7DK2Y62ISKbT/bKtZEUU1/2v5uqd5WVIvw9dF8gHDSJAsSA==" + "resolved" "https://registry.npmjs.org/@graphql-tools/batch-delegate/-/batch-delegate-6.2.6.tgz" + "version" "6.2.6" + dependencies: + "@graphql-tools/delegate" "^6.2.4" + "dataloader" "2.0.0" + "tslib" "~2.0.1" + +"@graphql-tools/batch-execute@^7.1.2": + "integrity" "sha512-IuR2SB2MnC2ztA/XeTMTfWcA0Wy7ZH5u+nDkDNLAdX+AaSyDnsQS35sCmHqG0VOGTl7rzoyBWLCKGwSJplgtwg==" + "resolved" "https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-7.1.2.tgz" + "version" "7.1.2" + dependencies: + "@graphql-tools/utils" "^7.7.0" + "dataloader" "2.0.0" + "tslib" "~2.2.0" + "value-or-promise" "1.0.6" + +"@graphql-tools/code-file-loader@^6.2.4": + "integrity" "sha512-ZJimcm2ig+avgsEOWWVvAaxZrXXhiiSZyYYOJi0hk9wh5BxZcLUNKkTp6EFnZE/jmGUwuos3pIjUD3Hwi3Bwhg==" + "resolved" "https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-6.3.1.tgz" + "version" "6.3.1" + dependencies: + "@graphql-tools/graphql-tag-pluck" "^6.5.1" + "@graphql-tools/utils" "^7.0.0" + "tslib" "~2.1.0" + +"@graphql-tools/delegate@^6.2.4": + "integrity" "sha512-mXe6DfoWmq49kPcDrpKHgC2DSWcD5q0YCaHHoXYPAOlnLH8VMTY8BxcE8y/Do2eyg+GLcwAcrpffVszWMwqw0w==" + "resolved" "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-6.2.4.tgz" + "version" "6.2.4" + dependencies: + "@ardatan/aggregate-error" "0.0.6" + "@graphql-tools/schema" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" + "dataloader" "2.0.0" + "is-promise" "4.0.0" + "tslib" "~2.0.1" + +"@graphql-tools/delegate@^7.0.1", "@graphql-tools/delegate@^7.1.5": + "integrity" "sha512-bQu+hDd37e+FZ0CQGEEczmRSfQRnnXeUxI/0miDV+NV/zCbEdIJj5tYFNrKT03W6wgdqx8U06d8L23LxvGri/g==" + "resolved" "https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-7.1.5.tgz" + "version" "7.1.5" + dependencies: + "@ardatan/aggregate-error" "0.0.6" + "@graphql-tools/batch-execute" "^7.1.2" + "@graphql-tools/schema" "^7.1.5" + "@graphql-tools/utils" "^7.7.1" + "dataloader" "2.0.0" + "tslib" "~2.2.0" + "value-or-promise" "1.0.6" + +"@graphql-tools/git-loader@^6.2.4": + "integrity" "sha512-ooQTt2CaG47vEYPP3CPD+nbA0F+FYQXfzrB1Y1ABN9K3d3O2RK3g8qwslzZaI8VJQthvKwt0A95ZeE4XxteYfw==" + "resolved" "https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-6.2.6.tgz" + "version" "6.2.6" + dependencies: + "@graphql-tools/graphql-tag-pluck" "^6.2.6" + "@graphql-tools/utils" "^7.0.0" + "tslib" "~2.1.0" + +"@graphql-tools/github-loader@^6.2.4": + "integrity" "sha512-DLuQmYeNNdPo8oWus8EePxWCfCAyUXPZ/p1PWqjrX/NGPyH2ZObdqtDAfRHztljt0F/qkBHbGHCEk2TKbRZTRw==" + "resolved" "https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-6.2.5.tgz" + "version" "6.2.5" + dependencies: + "@graphql-tools/graphql-tag-pluck" "^6.2.6" + "@graphql-tools/utils" "^7.0.0" + "cross-fetch" "3.0.6" + "tslib" "~2.0.1" + +"@graphql-tools/graphql-file-loader@^6.2.4": + "integrity" "sha512-5k2SNz0W87tDcymhEMZMkd6/vs6QawDyjQXWtqkuLTBF3vxjxPD1I4dwHoxgWPIjjANhXybvulD7E+St/7s9TQ==" + "resolved" "https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-6.2.7.tgz" + "version" "6.2.7" + dependencies: + "@graphql-tools/import" "^6.2.6" + "@graphql-tools/utils" "^7.0.0" + "tslib" "~2.1.0" + +"@graphql-tools/graphql-tag-pluck@^6.2.4", "@graphql-tools/graphql-tag-pluck@^6.2.6", "@graphql-tools/graphql-tag-pluck@^6.5.1": + "integrity" "sha512-7qkm82iFmcpb8M6/yRgzjShtW6Qu2OlCSZp8uatA3J0eMl87TxyJoUmL3M3UMMOSundAK8GmoyNVFUrueueV5Q==" + "resolved" "https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-6.5.1.tgz" + "version" "6.5.1" + dependencies: + "@babel/parser" "7.12.16" + "@babel/traverse" "7.12.13" + "@babel/types" "7.12.13" + "@graphql-tools/utils" "^7.0.0" + "tslib" "~2.1.0" + +"@graphql-tools/import@^6.2.4", "@graphql-tools/import@^6.2.6": + "integrity" "sha512-i9WA6k+erJMci822o9w9DoX+uncVBK60LGGYW8mdbhX0l7wEubUpA000thJ1aarCusYh0u+ZT9qX0HyVPXu25Q==" + "resolved" "https://registry.npmjs.org/@graphql-tools/import/-/import-6.6.1.tgz" + "version" "6.6.1" + dependencies: + "@graphql-tools/utils" "8.5.3" + "resolve-from" "5.0.0" + "tslib" "~2.3.0" + +"@graphql-tools/json-file-loader@^6.2.4": + "integrity" "sha512-CnfwBSY5926zyb6fkDBHnlTblHnHI4hoBALFYXnrg0Ev4yWU8B04DZl/pBRUc459VNgO2x8/mxGIZj2hPJG1EA==" + "resolved" "https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-6.2.6.tgz" + "version" "6.2.6" + dependencies: + "@graphql-tools/utils" "^7.0.0" + "tslib" "~2.0.1" + +"@graphql-tools/links@^6.2.4": + "integrity" "sha512-XeGDioW7F+HK6HHD/zCeF0HRC9s12NfOXAKv1HC0J7D50F4qqMvhdS/OkjzLoBqsgh/Gm8icRc36B5s0rOA9ig==" + "resolved" "https://registry.npmjs.org/@graphql-tools/links/-/links-6.2.5.tgz" + "version" "6.2.5" + dependencies: + "@graphql-tools/utils" "^7.0.0" + "apollo-link" "1.2.14" + "apollo-upload-client" "14.1.2" + "cross-fetch" "3.0.6" + "form-data" "3.0.0" + "is-promise" "4.0.0" + "tslib" "~2.0.1" + +"@graphql-tools/load-files@^6.2.4": + "integrity" "sha512-ZU/v0HA7L3jCgizK5r3JHTg4ZQg+b+t3lSakU1cYT78kHT98milhlU+YF2giS7XP9KcS6jGTAalQbbX2yQA1sg==" + "resolved" "https://registry.npmjs.org/@graphql-tools/load-files/-/load-files-6.5.2.tgz" + "version" "6.5.2" + dependencies: + "globby" "11.0.4" + "tslib" "~2.3.0" + "unixify" "1.0.0" + +"@graphql-tools/load@^6.2.4": + "integrity" "sha512-JpbyXOXd8fJXdBh2ta0Q4w8ia6uK5FHzrTNmcvYBvflFuWly2LDTk2abbSl81zKkzswQMEd2UIYghXELRg8eTA==" + "resolved" "https://registry.npmjs.org/@graphql-tools/load/-/load-6.2.8.tgz" + "version" "6.2.8" + dependencies: + "@graphql-tools/merge" "^6.2.12" + "@graphql-tools/utils" "^7.5.0" + "globby" "11.0.3" + "import-from" "3.0.0" + "is-glob" "4.0.1" + "p-limit" "3.1.0" + "tslib" "~2.2.0" + "unixify" "1.0.0" + "valid-url" "1.0.9" + +"@graphql-tools/merge@^6.2.12", "@graphql-tools/merge@^6.2.4": + "integrity" "sha512-G5YrOew39fZf16VIrc49q3c8dBqQDD0ax5LYPiNja00xsXDi0T9zsEWVt06ApjtSdSF6HDddlu5S12QjeN8Tow==" + "resolved" "https://registry.npmjs.org/@graphql-tools/merge/-/merge-6.2.17.tgz" + "version" "6.2.17" + dependencies: + "@graphql-tools/schema" "^8.0.2" + "@graphql-tools/utils" "8.0.2" + "tslib" "~2.3.0" + +"@graphql-tools/merge@^8.2.1": + "integrity" "sha512-Q240kcUszhXiAYudjuJgNuLgy9CryDP3wp83NOZQezfA6h3ByYKU7xI6DiKrdjyVaGpYN3ppUmdj0uf5GaXzMA==" + "resolved" "https://registry.npmjs.org/@graphql-tools/merge/-/merge-8.2.1.tgz" + "version" "8.2.1" + dependencies: + "@graphql-tools/utils" "^8.5.1" + "tslib" "~2.3.0" + +"@graphql-tools/mock@^6.2.4": + "integrity" "sha512-O5Zvq/mcDZ7Ptky0IZ4EK9USmxV6FEVYq0Jxv2TI80kvxbCjt0tbEpZ+r1vIt1gZOXlAvadSHYyzWnUPh+1vkQ==" + "resolved" "https://registry.npmjs.org/@graphql-tools/mock/-/mock-6.2.4.tgz" + "version" "6.2.4" + dependencies: + "@graphql-tools/schema" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" + "tslib" "~2.0.1" + +"@graphql-tools/module-loader@^6.2.4": + "integrity" "sha512-ItAAbHvwfznY9h1H9FwHYDstTcm22Dr5R9GZtrWlpwqj0jaJGcBxsMB9jnK9kFqkbtFYEe4E/NsSnxsS4/vViQ==" + "resolved" "https://registry.npmjs.org/@graphql-tools/module-loader/-/module-loader-6.2.7.tgz" + "version" "6.2.7" + dependencies: + "@graphql-tools/utils" "^7.5.0" + "tslib" "~2.1.0" + +"@graphql-tools/relay-operation-optimizer@^6.2.4": + "integrity" "sha512-2b9D5L+31sIBnvmcmIW5tfvNUV+nJFtbHpUyarTRDmFT6EZ2cXo4WZMm9XJcHQD/Z5qvMXfPHxzQ3/JUs4xI+w==" + "resolved" "https://registry.npmjs.org/@graphql-tools/relay-operation-optimizer/-/relay-operation-optimizer-6.4.1.tgz" + "version" "6.4.1" + dependencies: + "@graphql-tools/utils" "^8.5.1" + "relay-compiler" "12.0.0" + "tslib" "~2.3.0" + +"@graphql-tools/resolvers-composition@^6.2.4": + "integrity" "sha512-2NRcrs8l4X8nxCjZ9Tgxas/np+FpYH01JpHNkk6y76vQyKsF1oKTtx7oDDS9qbp6IXaA2aojrGT6lkD6mYwXig==" + "resolved" "https://registry.npmjs.org/@graphql-tools/resolvers-composition/-/resolvers-composition-6.4.1.tgz" + "version" "6.4.1" + dependencies: + "@graphql-tools/utils" "^8.5.1" + "lodash" "4.17.21" + "micromatch" "^4.0.4" + "tslib" "~2.3.0" + +"@graphql-tools/schema@^6.2.4": + "integrity" "sha512-rh+14lSY1q8IPbEv2J9x8UBFJ5NrDX9W5asXEUlPp+7vraLp/Tiox4GXdgyA92JhwpYco3nTf5Bo2JDMt1KnAQ==" + "resolved" "https://registry.npmjs.org/@graphql-tools/schema/-/schema-6.2.4.tgz" + "version" "6.2.4" + dependencies: + "@graphql-tools/utils" "^6.2.4" + "tslib" "~2.0.1" + +"@graphql-tools/schema@^7.1.5": + "integrity" "sha512-uyn3HSNSckf4mvQSq0Q07CPaVZMNFCYEVxroApOaw802m9DcZPgf9XVPy/gda5GWj9AhbijfRYVTZQgHnJ4CXA==" + "resolved" "https://registry.npmjs.org/@graphql-tools/schema/-/schema-7.1.5.tgz" + "version" "7.1.5" + dependencies: + "@graphql-tools/utils" "^7.1.2" + "tslib" "~2.2.0" + "value-or-promise" "1.0.6" + +"@graphql-tools/schema@^8.0.2": + "integrity" "sha512-3R0AJFe715p4GwF067G5i0KCr/XIdvSfDLvTLEiTDQ8V/hwbOHEKHKWlEBHGRQwkG5lwFQlW1aOn7VnlPERnWQ==" + "resolved" "https://registry.npmjs.org/@graphql-tools/schema/-/schema-8.3.1.tgz" + "version" "8.3.1" + dependencies: + "@graphql-tools/merge" "^8.2.1" + "@graphql-tools/utils" "^8.5.1" + "tslib" "~2.3.0" + "value-or-promise" "1.0.11" + +"@graphql-tools/stitch@^6.2.4": + "integrity" "sha512-0C7PNkS7v7iAc001m7c1LPm5FUB0/DYw+s3OyCii6YYYHY8NwdI0roeOyeDGFJkFubWBQfjc3hoSyueKtU73mw==" + "resolved" "https://registry.npmjs.org/@graphql-tools/stitch/-/stitch-6.2.4.tgz" + "version" "6.2.4" + dependencies: + "@graphql-tools/batch-delegate" "^6.2.4" + "@graphql-tools/delegate" "^6.2.4" + "@graphql-tools/merge" "^6.2.4" + "@graphql-tools/schema" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" + "@graphql-tools/wrap" "^6.2.4" + "is-promise" "4.0.0" + "tslib" "~2.0.1" + +"@graphql-tools/url-loader@^6.2.4": + "integrity" "sha512-DSDrbhQIv7fheQ60pfDpGD256ixUQIR6Hhf9Z5bRjVkXOCvO5XrkwoWLiU7iHL81GB1r0Ba31bf+sl+D4nyyfw==" + "resolved" "https://registry.npmjs.org/@graphql-tools/url-loader/-/url-loader-6.10.1.tgz" + "version" "6.10.1" + dependencies: + "@graphql-tools/delegate" "^7.0.1" + "@graphql-tools/utils" "^7.9.0" + "@graphql-tools/wrap" "^7.0.4" + "@microsoft/fetch-event-source" "2.0.1" + "@types/websocket" "1.0.2" + "abort-controller" "3.0.0" + "cross-fetch" "3.1.4" + "extract-files" "9.0.0" + "form-data" "4.0.0" + "graphql-ws" "^4.4.1" + "is-promise" "4.0.0" + "isomorphic-ws" "4.0.1" + "lodash" "4.17.21" + "meros" "1.1.4" + "subscriptions-transport-ws" "^0.9.18" + "sync-fetch" "0.3.0" + "tslib" "~2.2.0" + "valid-url" "1.0.9" + "ws" "7.4.5" + +"@graphql-tools/utils@^6.2.4": + "integrity" "sha512-ybgZ9EIJE3JMOtTrTd2VcIpTXtDrn2q6eiYkeYMKRVh3K41+LZa6YnR2zKERTXqTWqhobROwLt4BZbw2O3Aeeg==" + "resolved" "https://registry.npmjs.org/@graphql-tools/utils/-/utils-6.2.4.tgz" + "version" "6.2.4" + dependencies: + "@ardatan/aggregate-error" "0.0.6" + "camel-case" "4.1.1" + "tslib" "~2.0.1" + +"@graphql-tools/utils@^7.0.0": + "integrity" "sha512-d334r6bo9mxdSqZW6zWboEnnOOFRrAPVQJ7LkU8/6grglrbcu6WhwCLzHb90E94JI3TD3ricC3YGbUqIi9Xg0w==" + "resolved" "https://registry.npmjs.org/@graphql-tools/utils/-/utils-7.10.0.tgz" + "version" "7.10.0" + dependencies: + "@ardatan/aggregate-error" "0.0.6" + "camel-case" "4.1.2" + "tslib" "~2.2.0" + +"@graphql-tools/utils@^7.1.2", "@graphql-tools/utils@^7.7.1", "@graphql-tools/utils@^7.8.1", "@graphql-tools/utils@^7.9.0": + "integrity" "sha512-d334r6bo9mxdSqZW6zWboEnnOOFRrAPVQJ7LkU8/6grglrbcu6WhwCLzHb90E94JI3TD3ricC3YGbUqIi9Xg0w==" + "resolved" "https://registry.npmjs.org/@graphql-tools/utils/-/utils-7.10.0.tgz" + "version" "7.10.0" + dependencies: + "@ardatan/aggregate-error" "0.0.6" + "camel-case" "4.1.2" + "tslib" "~2.2.0" + +"@graphql-tools/utils@^7.5.0": + "integrity" "sha512-d334r6bo9mxdSqZW6zWboEnnOOFRrAPVQJ7LkU8/6grglrbcu6WhwCLzHb90E94JI3TD3ricC3YGbUqIi9Xg0w==" + "resolved" "https://registry.npmjs.org/@graphql-tools/utils/-/utils-7.10.0.tgz" + "version" "7.10.0" + dependencies: + "@ardatan/aggregate-error" "0.0.6" + "camel-case" "4.1.2" + "tslib" "~2.2.0" + +"@graphql-tools/utils@^7.7.0": + "integrity" "sha512-d334r6bo9mxdSqZW6zWboEnnOOFRrAPVQJ7LkU8/6grglrbcu6WhwCLzHb90E94JI3TD3ricC3YGbUqIi9Xg0w==" + "resolved" "https://registry.npmjs.org/@graphql-tools/utils/-/utils-7.10.0.tgz" + "version" "7.10.0" + dependencies: + "@ardatan/aggregate-error" "0.0.6" + "camel-case" "4.1.2" + "tslib" "~2.2.0" + +"@graphql-tools/utils@^8.5.1": + "integrity" "sha512-HDNGWFVa8QQkoQB0H1lftvaO1X5xUaUDk1zr1qDe0xN1NL0E/CrQdJ5UKLqOvH4hkqVUPxQsyOoAZFkaH6rLHg==" + "resolved" "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.5.3.tgz" + "version" "8.5.3" + dependencies: + "tslib" "~2.3.0" + +"@graphql-tools/utils@8.0.2": + "integrity" "sha512-gzkavMOgbhnwkHJYg32Adv6f+LxjbQmmbdD5Hty0+CWxvaiuJq+nU6tzb/7VSU4cwhbNLx/lGu2jbCPEW1McZQ==" + "resolved" "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.0.2.tgz" + "version" "8.0.2" + dependencies: + "tslib" "~2.3.0" + +"@graphql-tools/utils@8.5.3": + "integrity" "sha512-HDNGWFVa8QQkoQB0H1lftvaO1X5xUaUDk1zr1qDe0xN1NL0E/CrQdJ5UKLqOvH4hkqVUPxQsyOoAZFkaH6rLHg==" + "resolved" "https://registry.npmjs.org/@graphql-tools/utils/-/utils-8.5.3.tgz" + "version" "8.5.3" + dependencies: + "tslib" "~2.3.0" + +"@graphql-tools/wrap@^6.2.4": + "integrity" "sha512-cyQgpybolF9DjL2QNOvTS1WDCT/epgYoiA8/8b3nwv5xmMBQ6/6nYnZwityCZ7njb7MMyk7HBEDNNlP9qNJDcA==" + "resolved" "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-6.2.4.tgz" + "version" "6.2.4" + dependencies: + "@graphql-tools/delegate" "^6.2.4" + "@graphql-tools/schema" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" + "is-promise" "4.0.0" + "tslib" "~2.0.1" + +"@graphql-tools/wrap@^7.0.4": + "integrity" "sha512-1NDUymworsOlb53Qfh7fonDi2STvqCtbeE68ntKY9K/Ju/be2ZNxrFSbrBHwnxWcN9PjISNnLcAyJ1L5tCUyhg==" + "resolved" "https://registry.npmjs.org/@graphql-tools/wrap/-/wrap-7.0.8.tgz" + "version" "7.0.8" + dependencies: + "@graphql-tools/delegate" "^7.1.5" + "@graphql-tools/schema" "^7.1.5" + "@graphql-tools/utils" "^7.8.1" + "tslib" "~2.2.0" + "value-or-promise" "1.0.6" + +"@graphql-typed-document-node/core@^3.0.0": + "integrity" "sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==" + "resolved" "https://registry.npmjs.org/@graphql-typed-document-node/core/-/core-3.1.1.tgz" + "version" "3.1.1" + +"@gulp-sourcemaps/map-sources@1.X": + "integrity" "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=" + "resolved" "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "normalize-path" "^2.0.1" + "through2" "^2.0.3" + "@improbable-eng/grpc-web@^0.12.0": "integrity" "sha512-uJjgMPngreRTYPBuo6gswMj1gK39Wbqre/RgE0XnSDXJRg6ST7ZhuS53dFE6Vc2CX4jxgl+cO+0B3op8LA4Q0Q==" "resolved" "https://registry.npmjs.org/@improbable-eng/grpc-web/-/grpc-web-0.12.0.tgz" @@ -1084,6 +1804,11 @@ "@types/yargs" "^16.0.0" "chalk" "^4.0.0" +"@josephg/resolvable@^1.0.0": + "integrity" "sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==" + "resolved" "https://registry.npmjs.org/@josephg/resolvable/-/resolvable-1.0.1.tgz" + "version" "1.0.1" + "@ledgerhq/cryptoassets@^5.27.2": "integrity" "sha512-M3ibc3LRuHid5UtL7FI3IC6nMEppvly98QHFoSa7lJU0HDzQxY6zHec/SPM4uuJUC8sXoGVAiRJDkgny54damw==" "resolved" "https://registry.npmjs.org/@ledgerhq/cryptoassets/-/cryptoassets-5.53.0.tgz" @@ -1185,6 +1910,11 @@ "resolved" "https://registry.npmjs.org/@ledgerhq/logs/-/logs-5.50.0.tgz" "version" "5.50.0" +"@microsoft/fetch-event-source@2.0.1": + "integrity" "sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==" + "resolved" "https://registry.npmjs.org/@microsoft/fetch-event-source/-/fetch-event-source-2.0.1.tgz" + "version" "2.0.1" + "@multiformats/base-x@^4.0.1": "integrity" "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==" "resolved" "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz" @@ -1630,6 +2360,11 @@ "resolved" "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.5.2.tgz" "version" "0.5.2" +"@solidity-parser/parser@^0.8.1": + "integrity" "sha512-8LySx3qrNXPgB5JiULfG10O3V7QTxI/TLzSw5hFQhXWSkVxZBAv4rZQ0sYgLEbc8g3L2lmnujj1hKul38Eu5NQ==" + "resolved" "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.8.2.tgz" + "version" "0.8.2" + "@szmarczak/http-timer@^1.1.2": "integrity" "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==" "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" @@ -1868,7 +2603,7 @@ "event-iterator" "^2.0.0" "loglevel" "^1.7.0" -"@truffle/abi-utils@^0.2.4": +"@truffle/abi-utils@^0.2.2", "@truffle/abi-utils@^0.2.4": "integrity" "sha512-ICr5Sger6r5uj2G5GN9Zp9OQDCaCqe2ZyAEyvavDoFB+jX0zZFUCfDnv5jllGRhgzdYJ3mec2390mjUyz9jSZA==" "resolved" "https://registry.npmjs.org/@truffle/abi-utils/-/abi-utils-0.2.4.tgz" "version" "0.2.4" @@ -1877,6 +2612,11 @@ "faker" "^5.3.1" "fast-check" "^2.12.1" +"@truffle/blockchain-utils@^0.0.31": + "integrity" "sha512-BFo/nyxwhoHqPrqBQA1EAmSxeNnspGLiOCMa9pAL7WYSjyNBlrHaqCMO/F2O87G+NUK/u06E70DiSP2BFP0ZZw==" + "resolved" "https://registry.npmjs.org/@truffle/blockchain-utils/-/blockchain-utils-0.0.31.tgz" + "version" "0.0.31" + "@truffle/code-utils@^1.2.30": "integrity" "sha512-/GFtGkmSZlLpIbIjBTunvhQQ4K2xaHK63QCEKydt3xRMPhpaeVAIaBNH53Z1ulOMDi6BZcSgwQHkquHf/omvMQ==" "resolved" "https://registry.npmjs.org/@truffle/code-utils/-/code-utils-1.2.30.tgz" @@ -1903,6 +2643,43 @@ "utf8" "^3.0.0" "web3-utils" "1.5.3" +"@truffle/codec@^0.11.19": + "integrity" "sha512-ZxsfRWBE4wcQ01NCpMWH6VRJ/q3mGTl3ku8ln+WJ2P6McIMsS37imO3d8N9NWiQ49klc9kJfT3mKnOVMLTJhIg==" + "resolved" "https://registry.npmjs.org/@truffle/codec/-/codec-0.11.19.tgz" + "version" "0.11.19" + dependencies: + "@truffle/abi-utils" "^0.2.4" + "@truffle/compile-common" "^0.7.22" + "big.js" "^5.2.2" + "bn.js" "^5.1.3" + "cbor" "^5.1.0" + "debug" "^4.3.1" + "lodash.clonedeep" "^4.5.0" + "lodash.escaperegexp" "^4.1.2" + "lodash.partition" "^4.6.0" + "lodash.sum" "^4.0.2" + "semver" "^7.3.4" + "utf8" "^3.0.0" + "web3-utils" "1.5.3" + +"@truffle/codec@^0.7.1": + "integrity" "sha512-mNd6KnW6J0UB1zafGBXDlTEbCMvWpmPAJmzv7aF/nAIaN/F8UePSCiQ1OTQP39Rprj6GFiCCaWVnBAwum6UGSg==" + "resolved" "https://registry.npmjs.org/@truffle/codec/-/codec-0.7.1.tgz" + "version" "0.7.1" + dependencies: + "big.js" "^5.2.2" + "bn.js" "^4.11.8" + "borc" "^2.1.2" + "debug" "^4.1.0" + "lodash.clonedeep" "^4.5.0" + "lodash.escaperegexp" "^4.1.2" + "lodash.partition" "^4.6.0" + "lodash.sum" "^4.0.2" + "semver" "^6.3.0" + "source-map-support" "^0.5.19" + "utf8" "^3.0.0" + "web3-utils" "1.2.9" + "@truffle/compile-common@^0.7.22": "integrity" "sha512-afFKh0Wphn8JrCSjOORKjO8/E1X0EtQv6GpFJpQCAWo3/i4VGcSVKR1rjkknnExtjEGe9PJH/Ym/opGH3pQyDw==" "resolved" "https://registry.npmjs.org/@truffle/compile-common/-/compile-common-0.7.22.tgz" @@ -1911,27 +2688,117 @@ "@truffle/error" "^0.0.14" "colors" "^1.4.0" -"@truffle/db-loader@^0.0.15": - "integrity" "sha512-AjxqBzrb3ntgfiS0DBC6vAmVz/zqp7jdSrYi5B/3jKHNcZOrFHg2edPj/PNsB8UN20P/hD3a1yVXzj103xqp7A==" - "resolved" "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.0.15.tgz" - "version" "0.0.15" - optionalDependencies: - "@truffle/db" "^0.5.36" +"@truffle/config@^1.3.13": + "integrity" "sha512-AXmY1KzCV+sQDz88CB1wsd8Za99Guo+HHXRjud/kU11HmbuSwiPRqVch5z1uW8JA1yhRVp7jfknMmOCiBrRL3g==" + "resolved" "https://registry.npmjs.org/@truffle/config/-/config-1.3.13.tgz" + "version" "1.3.13" + dependencies: + "@truffle/error" "^0.0.14" + "@truffle/events" "^0.0.18" + "@truffle/provider" "^0.2.42" + "conf" "^10.0.2" + "find-up" "^2.1.0" + "lodash.assignin" "^4.2.0" + "lodash.merge" "^4.6.2" + "lodash.pick" "^4.4.0" + "module" "^1.2.5" + "original-require" "^1.0.1" -"@truffle/debugger@^9.2.0": - "integrity" "sha512-dBHIDlefkC0/CaG47m14vQTj2nZ5V9ZWwGu61hlZQwviRtQu0RgI+qM9V9KfT1AGpaXBDjjgepbIm10GPqbTTA==" - "resolved" "https://registry.npmjs.org/@truffle/debugger/-/debugger-9.2.0.tgz" - "version" "9.2.0" +"@truffle/contract-schema@^3.3.1", "@truffle/contract-schema@^3.4.3": + "integrity" "sha512-pgaTgF4CKIpkqVYZVr2qGTxZZQOkNCWOXW9VQpKvLd4G0SNF2Y1gyhrFbBhoOUtYlbbSty+IEFFHsoAqpqlvpQ==" + "resolved" "https://registry.npmjs.org/@truffle/contract-schema/-/contract-schema-3.4.3.tgz" + "version" "3.4.3" dependencies: - "@truffle/abi-utils" "^0.2.4" - "@truffle/codec" "^0.11.18" - "@truffle/source-map-utils" "^1.3.62" - "bn.js" "^5.1.3" + "ajv" "^6.10.0" "debug" "^4.3.1" - "json-pointer" "^0.6.0" - "json-stable-stringify" "^1.0.1" - "lodash.flatten" "^4.4.0" - "lodash.merge" "^4.6.2" + +"@truffle/contract-sources@^0.1.12": + "integrity" "sha512-7OH8P+N4n2LewbNiVpuleshPqj8G7n9Qkd5ot79sZ/R6xIRyXF05iBtg3/IbjIzOeQCrCE9aYUHNe2go9RuM0g==" + "resolved" "https://registry.npmjs.org/@truffle/contract-sources/-/contract-sources-0.1.12.tgz" + "version" "0.1.12" + dependencies: + "debug" "^4.3.1" + "glob" "^7.1.6" + +"@truffle/contract@^4.3.43": + "integrity" "sha512-F06lBURJ3Mow4fov/9O2rI2giVUhlCskpfESjLSuYnE5ZEDwTiNF99P2iv66EhUqNg6JkUFd9RlDZE5bDnZzJA==" + "resolved" "https://registry.npmjs.org/@truffle/contract/-/contract-4.3.43.tgz" + "version" "4.3.43" + dependencies: + "@ensdomains/ensjs" "^2.0.1" + "@truffle/blockchain-utils" "^0.0.31" + "@truffle/contract-schema" "^3.4.3" + "@truffle/debug-utils" "^6.0.0" + "@truffle/error" "^0.0.14" + "@truffle/interface-adapter" "^0.5.8" + "bignumber.js" "^7.2.1" + "debug" "^4.3.1" + "ethers" "^4.0.32" + "web3" "1.5.3" + "web3-core-helpers" "1.5.3" + "web3-core-promievent" "1.5.3" + "web3-eth-abi" "1.5.3" + "web3-utils" "1.5.3" + +"@truffle/db-loader@^0.0.15": + "integrity" "sha512-AjxqBzrb3ntgfiS0DBC6vAmVz/zqp7jdSrYi5B/3jKHNcZOrFHg2edPj/PNsB8UN20P/hD3a1yVXzj103xqp7A==" + "resolved" "https://registry.npmjs.org/@truffle/db-loader/-/db-loader-0.0.15.tgz" + "version" "0.0.15" + optionalDependencies: + "@truffle/db" "^0.5.36" + +"@truffle/db@^0.5.36": + "integrity" "sha512-yy2KD2+xxxBGRPhtmDhIDitRKPimvD54xM3myBDU6BhDL+MKMxFIgMQJ9VBhUXoM1ZjSiwewt17BNQQ/gorlVw==" + "resolved" "https://registry.npmjs.org/@truffle/db/-/db-0.5.41.tgz" + "version" "0.5.41" + dependencies: + "@truffle/abi-utils" "^0.2.4" + "@truffle/code-utils" "^1.2.30" + "@truffle/config" "^1.3.13" + "@truffle/resolver" "^7.0.39" + "apollo-server" "^2.18.2" + "debug" "^4.3.1" + "fs-extra" "^9.1.0" + "graphql" "^15.3.0" + "graphql-tag" "^2.11.0" + "graphql-tools" "^6.2.4" + "json-stable-stringify" "^1.0.1" + "jsondown" "^1.0.0" + "pascal-case" "^2.0.1" + "pluralize" "^8.0.0" + "pouchdb" "7.1.1" + "pouchdb-adapter-memory" "^7.1.1" + "pouchdb-adapter-node-websql" "^7.0.0" + "pouchdb-debug" "^7.1.1" + "pouchdb-find" "^7.0.0" + "web3-utils" "1.5.3" + +"@truffle/debug-utils@^6.0.0": + "integrity" "sha512-MoN8aQQX2DLLEMMlfF+8ZFtjh0FJsPYwuI4NDcn7upoORe/QoRHeypIhQgaepOXBKwIXW0mplBkAk/nm+cQp8A==" + "resolved" "https://registry.npmjs.org/@truffle/debug-utils/-/debug-utils-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@truffle/codec" "^0.11.19" + "@trufflesuite/chromafi" "^2.2.2" + "bn.js" "^5.1.3" + "chalk" "^2.4.2" + "debug" "^4.3.1" + "highlightjs-solidity" "^2.0.2" + +"@truffle/debugger@^9.2.0": + "integrity" "sha512-dBHIDlefkC0/CaG47m14vQTj2nZ5V9ZWwGu61hlZQwviRtQu0RgI+qM9V9KfT1AGpaXBDjjgepbIm10GPqbTTA==" + "resolved" "https://registry.npmjs.org/@truffle/debugger/-/debugger-9.2.0.tgz" + "version" "9.2.0" + dependencies: + "@truffle/abi-utils" "^0.2.4" + "@truffle/codec" "^0.11.18" + "@truffle/source-map-utils" "^1.3.62" + "bn.js" "^5.1.3" + "debug" "^4.3.1" + "json-pointer" "^0.6.0" + "json-stable-stringify" "^1.0.1" + "lodash.flatten" "^4.4.0" + "lodash.merge" "^4.6.2" "lodash.sum" "^4.0.2" "lodash.zipwith" "^4.2.0" "redux" "^3.7.2" @@ -1947,6 +2814,19 @@ "resolved" "https://registry.npmjs.org/@truffle/error/-/error-0.0.14.tgz" "version" "0.0.14" +"@truffle/events@^0.0.18": + "integrity" "sha512-U+8pKyBlEDOUPo43/A6zh5Yw4Q/ZFOA6b5d54EPhqN/C+39LDhUPSI8PI7KmdY4HfUy/ZhMEdh59F34rGRTUYg==" + "resolved" "https://registry.npmjs.org/@truffle/events/-/events-0.0.18.tgz" + "version" "0.0.18" + dependencies: + "emittery" "^0.4.1" + "ora" "^3.4.0" + +"@truffle/expect@^0.0.18": + "integrity" "sha512-ZcYladRCgwn3bbhK3jIORVHcUOBk/MXsUxjfzcw+uD+0H1Kodsvcw1AAIaqd5tlyFhdOb7YkOcH0kUES7F8d1A==" + "resolved" "https://registry.npmjs.org/@truffle/expect/-/expect-0.0.18.tgz" + "version" "0.0.18" + "@truffle/interface-adapter@^0.5.8": "integrity" "sha512-vvy3xpq36oLgjjy8KE9l2Jabg3WcGPOt18tIyMfTQX9MFnbHoQA2Ne2i8xsd4p6KfxIqSjAB53Q9/nScAqY0UQ==" "resolved" "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.8.tgz" @@ -2002,7 +2882,7 @@ dependencies: "spinnies" "^0.5.1" -"@truffle/provider@^0.2.24": +"@truffle/provider@^0.2.24", "@truffle/provider@^0.2.42": "integrity" "sha512-ZNoglPho4alYIjJR+sLTgX0x6ho7m4OAUWuJ50RAWmoEqYc4AM6htdrI+lTSoRrOHHbmgasv22a7rFPMnmDrTg==" "resolved" "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.42.tgz" "version" "0.2.42" @@ -2011,6 +2891,28 @@ "@truffle/interface-adapter" "^0.5.8" "web3" "1.5.3" +"@truffle/provisioner@^0.2.36": + "integrity" "sha512-dCDshpm0dDcsD7mDM8j+ghYY+gIWsTUY6VnLUju3QeBHUVz0ax+6I6MqOEsx7uVxEjJBtCOKBQHfk6b4N3XEkw==" + "resolved" "https://registry.npmjs.org/@truffle/provisioner/-/provisioner-0.2.36.tgz" + "version" "0.2.36" + dependencies: + "@truffle/config" "^1.3.13" + +"@truffle/resolver@^7.0.39": + "integrity" "sha512-J57gqiuYWrgXTNVbuRaTmjtfbgJcBZzVZhvjIuwERkEYvBFb277v2G8WSpx7stSN/LLCSiUzeBNlaG8T3DpOVA==" + "resolved" "https://registry.npmjs.org/@truffle/resolver/-/resolver-7.0.39.tgz" + "version" "7.0.39" + dependencies: + "@truffle/contract" "^4.3.43" + "@truffle/contract-sources" "^0.1.12" + "@truffle/expect" "^0.0.18" + "@truffle/provisioner" "^0.2.36" + "abi-to-sol" "^0.5.1" + "debug" "^4.3.1" + "detect-installed" "^2.0.4" + "get-installed-path" "^4.0.8" + "glob" "^7.1.6" + "@truffle/source-map-utils@^1.3.62": "integrity" "sha512-+UaiZj2PzNdI1wSJUFiobJP7CI93y5NAkxDzBHz4QBTQ6eSQYGkR4Vd79Qnl425IJ8p906cEUsCKLB6t+Ql8Cg==" "resolved" "https://registry.npmjs.org/@truffle/source-map-utils/-/source-map-utils-1.3.62.tgz" @@ -2023,6 +2925,26 @@ "node-interval-tree" "^1.3.3" "web3-utils" "1.5.3" +"@trufflesuite/chromafi@^2.2.2": + "integrity" "sha512-mItQwVBsb8qP/vaYHQ1kDt2vJLhjoEXJptT6y6fJGvFophMFhOI/NsTVUa0nJL1nyMeFiS6hSYuNVdpQZzB1gA==" + "resolved" "https://registry.npmjs.org/@trufflesuite/chromafi/-/chromafi-2.2.2.tgz" + "version" "2.2.2" + dependencies: + "ansi-mark" "^1.0.0" + "ansi-regex" "^3.0.0" + "array-uniq" "^1.0.3" + "camelcase" "^4.1.0" + "chalk" "^2.3.2" + "cheerio" "^1.0.0-rc.2" + "detect-indent" "^5.0.0" + "he" "^1.1.1" + "highlight.js" "^10.4.1" + "lodash.merge" "^4.6.2" + "min-indent" "^1.0.0" + "strip-ansi" "^4.0.0" + "strip-indent" "^2.0.0" + "super-split" "^1.1.0" + "@tsconfig/node10@^1.0.7": "integrity" "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==" "resolved" "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz" @@ -2077,6 +2999,13 @@ "resolved" "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-5.0.2.tgz" "version" "5.0.2" +"@types/accepts@*", "@types/accepts@^1.3.5": + "integrity" "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==" + "resolved" "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz" + "version" "1.3.5" + dependencies: + "@types/node" "*" + "@types/babel__traverse@^7.0.4": "integrity" "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==" "resolved" "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz" @@ -2098,6 +3027,22 @@ dependencies: "@types/node" "*" +"@types/body-parser@*": + "integrity" "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==" + "resolved" "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" + "version" "1.19.2" + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/body-parser@1.19.0": + "integrity" "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==" + "resolved" "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz" + "version" "1.19.0" + dependencies: + "@types/connect" "*" + "@types/node" "*" + "@types/chai@*", "@types/chai@^4.2.19": "integrity" "sha512-tFfcE+DSTzWAgifkjik9AySNqIyNoYwmR+uecPwwD/XRNfvOjmC/FjCxpiUGDkDVDphPfCUecSQVFw+lN3M3kQ==" "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.2.22.tgz" @@ -2110,6 +3055,33 @@ dependencies: "@types/node" "*" +"@types/connect@*": + "integrity" "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==" + "resolved" "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" + "version" "3.4.35" + dependencies: + "@types/node" "*" + +"@types/content-disposition@*": + "integrity" "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==" + "resolved" "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz" + "version" "0.5.4" + +"@types/cookies@*": + "integrity" "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==" + "resolved" "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz" + "version" "0.7.7" + dependencies: + "@types/connect" "*" + "@types/express" "*" + "@types/keygrip" "*" + "@types/node" "*" + +"@types/cors@2.8.10": + "integrity" "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==" + "resolved" "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz" + "version" "2.8.10" + "@types/ed2curve@^0.2.2": "integrity" "sha512-G1sTX5xo91ydevQPINbL2nfgVAj/s1ZiqZxC8OCWduwu+edoNGUm5JXtTkg9F3LsBZbRI46/0HES4CPUE2wc9g==" "resolved" "https://registry.npmjs.org/@types/ed2curve/-/ed2curve-0.2.2.tgz" @@ -2117,6 +3089,25 @@ dependencies: "tweetnacl" "^1.0.0" +"@types/express-serve-static-core@^4.17.18", "@types/express-serve-static-core@^4.17.21": + "integrity" "sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ==" + "resolved" "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.26.tgz" + "version" "4.17.26" + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.12": + "integrity" "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==" + "resolved" "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz" + "version" "4.17.13" + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/form-data@0.0.33": "integrity" "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=" "resolved" "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz" @@ -2124,6 +3115,13 @@ dependencies: "@types/node" "*" +"@types/fs-capacitor@*": + "integrity" "sha512-FKVPOCFbhCvZxpVAMhdBdTfVfXUpsh15wFHgqOKxh9N9vzWZVuWCSijZ5T4U34XYNnuj2oduh6xcs1i+LPI+BQ==" + "resolved" "https://registry.npmjs.org/@types/fs-capacitor/-/fs-capacitor-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "@types/node" "*" + "@types/glob@*", "@types/glob@^7.1.1": "integrity" "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==" "resolved" "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz" @@ -2144,6 +3142,16 @@ dependencies: "@types/node" "*" +"@types/http-assert@*": + "integrity" "sha512-FyAOrDuQmBi8/or3ns4rwPno7/9tJTijVW6aQQjK02+kOQ8zmoNg2XJtAuQhvQcy1ASJq38wirX5//9J1EqoUA==" + "resolved" "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.3.tgz" + "version" "1.5.3" + +"@types/http-errors@*": + "integrity" "sha512-e+2rjEwK6KDaNOm5Aa9wNGgyS9oSZU/4pfSMMPYNOfjvFI0WVXm29+ITRFr6aKDvvKo7uU1jV68MW4ScsfDi7Q==" + "resolved" "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.1.tgz" + "version" "1.8.1" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": "integrity" "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz" @@ -2168,6 +3176,32 @@ "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz" "version" "7.0.9" +"@types/keygrip@*": + "integrity" "sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==" + "resolved" "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.2.tgz" + "version" "1.0.2" + +"@types/koa-compose@*": + "integrity" "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==" + "resolved" "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz" + "version" "3.2.5" + dependencies: + "@types/koa" "*" + +"@types/koa@*": + "integrity" "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==" + "resolved" "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz" + "version" "2.13.4" + dependencies: + "@types/accepts" "*" + "@types/content-disposition" "*" + "@types/cookies" "*" + "@types/http-assert" "*" + "@types/http-errors" "*" + "@types/keygrip" "*" + "@types/koa-compose" "*" + "@types/node" "*" + "@types/level-errors@*": "integrity" "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==" "resolved" "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz" @@ -2182,7 +3216,7 @@ "@types/level-errors" "*" "@types/node" "*" -"@types/long@^4.0.1": +"@types/long@^4.0.0", "@types/long@^4.0.1": "integrity" "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" "resolved" "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz" "version" "4.0.1" @@ -2192,6 +3226,11 @@ "resolved" "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" "version" "5.1.1" +"@types/mime@^1": + "integrity" "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + "resolved" "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz" + "version" "1.3.2" + "@types/minimatch@*": "integrity" "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" "resolved" "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz" @@ -2224,7 +3263,7 @@ "@types/node" "*" "form-data" "^3.0.0" -"@types/node@*", "@types/node@^15.12.4", "@types/node@>=13.7.0": +"@types/node@*", "@types/node@^15.12.4", "@types/node@>=12", "@types/node@>=13.7.0": "integrity" "sha512-zrNj1+yqYF4WskCMOHwN+w9iuD12+dGm0rQ35HLl9/Ouuq52cEtd0CH9qMgrdNmi5ejC1/V7vKEXYubB+65DkA==" "resolved" "https://registry.npmjs.org/@types/node/-/node-15.12.4.tgz" "version" "15.12.4" @@ -2234,6 +3273,11 @@ "resolved" "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" "version" "10.17.60" +"@types/node@^10.1.0": + "integrity" "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz" + "version" "10.17.60" + "@types/node@^12.12.6": "integrity" "sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==" "resolved" "https://registry.npmjs.org/@types/node/-/node-12.20.37.tgz" @@ -2266,11 +3310,16 @@ "resolved" "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz" "version" "2.4.1" -"@types/qs@^6.2.31", "@types/qs@^6.9.4": +"@types/qs@*", "@types/qs@^6.2.31", "@types/qs@^6.9.4": "integrity" "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" "resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" "version" "6.9.7" +"@types/range-parser@*": + "integrity" "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + "resolved" "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" + "version" "1.2.4" + "@types/resolve@^0.0.8": "integrity" "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==" "resolved" "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz" @@ -2285,6 +3334,14 @@ dependencies: "@types/node" "*" +"@types/serve-static@*": + "integrity" "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==" + "resolved" "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz" + "version" "1.13.10" + dependencies: + "@types/mime" "^1" + "@types/node" "*" + "@types/shelljs@^0.8.9": "integrity" "sha512-flVe1dvlrCyQJN/SGrnBxqHG+RzXrVKsmjD8WS/qYHpq5UPjfq7UWFBENP0ZuOl0g6OpAlL6iBoLSvKYUUmyQw==" "resolved" "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.9.tgz" @@ -2333,7 +3390,14 @@ "@types/bn.js" "*" "@types/underscore" "*" -"@types/ws@^7.2.6": +"@types/websocket@1.0.2": + "integrity" "sha512-B5m9aq7cbbD/5/jThEr33nUY8WEfVi6A2YKCTOvw5Ldy7mtsOkqRvGjnzy6g7iMMDsgu7xREuCzqATLDLQVKcQ==" + "resolved" "https://registry.npmjs.org/@types/websocket/-/websocket-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "@types/node" "*" + +"@types/ws@^7.0.0", "@types/ws@^7.2.6": "integrity" "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==" "resolved" "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" "version" "7.4.7" @@ -2357,6 +3421,34 @@ "resolved" "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz" "version" "1.1.2" +"@wry/context@^0.6.0": + "integrity" "sha512-LOmVnY1iTU2D8tv4Xf6MVMZZ+juIJ87Kt/plMijjN20NMAXGmH4u8bS1t0uT74cZ5gwpocYueV58YwyI8y+GKw==" + "resolved" "https://registry.npmjs.org/@wry/context/-/context-0.6.1.tgz" + "version" "0.6.1" + dependencies: + "tslib" "^2.3.0" + +"@wry/equality@^0.1.2": + "integrity" "sha512-mwEVBDUVODlsQQ5dfuLUS5/Tf7jqUKyhKYHmVi4fPB6bDMOfWvUPJmKgS1Z7Za/sOI3vzWt4+O7yCiL/70MogA==" + "resolved" "https://registry.npmjs.org/@wry/equality/-/equality-0.1.11.tgz" + "version" "0.1.11" + dependencies: + "tslib" "^1.9.3" + +"@wry/equality@^0.5.0": + "integrity" "sha512-oVMxbUXL48EV/C0/M7gLVsoK6qRHPS85x8zECofEZOVvxGmIPLA9o5Z27cc2PoAyZz1S2VoM2A7FLAnpfGlneA==" + "resolved" "https://registry.npmjs.org/@wry/equality/-/equality-0.5.2.tgz" + "version" "0.5.2" + dependencies: + "tslib" "^2.3.0" + +"@wry/trie@^0.3.0": + "integrity" "sha512-WwB53ikYudh9pIorgxrkHKrQZcCqNM/Q/bDzZBffEaGUKGuHrRb3zZUT9Sh2qw9yogC7SsdRmQ1ER0pqvd3bfw==" + "resolved" "https://registry.npmjs.org/@wry/trie/-/trie-0.3.1.tgz" + "version" "0.3.1" + dependencies: + "tslib" "^2.3.0" + "@yarnpkg/lockfile@^1.1.0": "integrity" "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" "resolved" "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" @@ -2397,18 +3489,47 @@ "resolved" "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz" "version" "1.0.4" -"abbrev@1", "abbrev@1.0.x": +"abbrev@1.0.x": "integrity" "sha1-kbR5JYinc4wl813W9jdSovh3YTU=" "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" "version" "1.0.9" -"abort-controller@*", "abort-controller@^3.0.0": +"abbrev@1": + "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "version" "1.1.1" + +"abi-to-sol@^0.5.1": + "integrity" "sha512-enN9SED82+Sz/ddJp81hyinRlbehA4FajHCZaG0QQqJsfLzjVfSsB1cEbJE3ZB9xcNbcagwJ2AlPuWt2rXtkcQ==" + "resolved" "https://registry.npmjs.org/abi-to-sol/-/abi-to-sol-0.5.1.tgz" + "version" "0.5.1" + dependencies: + "@truffle/abi-utils" "^0.2.2" + "@truffle/codec" "^0.7.1" + "@truffle/contract-schema" "^3.3.1" + "ajv" "^6.12.5" + "better-ajv-errors" "^0.6.7" + "neodoc" "^2.0.2" + "semver" "^7.3.5" + "source-map-support" "^0.5.19" + optionalDependencies: + "prettier" "^2.1.2" + "prettier-plugin-solidity" "1.0.0-alpha.59" + +"abort-controller@*", "abort-controller@^3.0.0", "abort-controller@3.0.0": "integrity" "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==" "resolved" "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" "version" "3.0.0" dependencies: "event-target-shim" "^5.0.0" +"abstract-leveldown@*", "abstract-leveldown@^5.0.0", "abstract-leveldown@~5.0.0": + "integrity" "sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==" + "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "xtend" "~4.0.0" + "abstract-leveldown@^2.4.1": "integrity" "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==" "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz" @@ -2416,13 +3537,6 @@ dependencies: "xtend" "~4.0.0" -"abstract-leveldown@^5.0.0", "abstract-leveldown@~5.0.0": - "integrity" "sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==" - "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz" - "version" "5.0.0" - dependencies: - "xtend" "~4.0.0" - "abstract-leveldown@^6.2.1": "integrity" "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==" "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz" @@ -2448,6 +3562,22 @@ dependencies: "xtend" "~4.0.0" +"abstract-leveldown@~6.0.0": + "integrity" "sha512-jzewKKpZbaYUa6HTThnrl+GrJhzjEAeuc7hTVpZdzg7kupXZFoqQDFwyOwLNbmJKJlmzw8yiipMPkDiuKkT06Q==" + "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.0.3.tgz" + "version" "6.0.3" + dependencies: + "level-concat-iterator" "~2.0.0" + "xtend" "~4.0.0" + +"abstract-leveldown@~6.0.1": + "integrity" "sha512-jzewKKpZbaYUa6HTThnrl+GrJhzjEAeuc7hTVpZdzg7kupXZFoqQDFwyOwLNbmJKJlmzw8yiipMPkDiuKkT06Q==" + "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.0.3.tgz" + "version" "6.0.3" + dependencies: + "level-concat-iterator" "~2.0.0" + "xtend" "~4.0.0" + "abstract-leveldown@~6.2.1": "integrity" "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==" "resolved" "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz" @@ -2466,7 +3596,7 @@ dependencies: "xtend" "~4.0.0" -"accepts@~1.3.7": +"accepts@^1.3.5", "accepts@~1.3.7": "integrity" "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==" "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz" "version" "1.3.7" @@ -2474,6 +3604,13 @@ "mime-types" "~2.1.24" "negotiator" "0.6.2" +"acorn-dynamic-import@^2.0.0": + "integrity" "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=" + "resolved" "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "acorn" "^4.0.3" + "acorn-globals@^1.0.4": "integrity" "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=" "resolved" "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz" @@ -2496,11 +3633,26 @@ "resolved" "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz" "version" "2.7.0" +"acorn@^4.0.3": + "integrity" "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz" + "version" "4.0.13" + +"acorn@^5.0.0": + "integrity" "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz" + "version" "5.7.4" + "acorn@^8.4.1": "integrity" "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==" "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz" "version" "8.5.0" +"acorn@4.X": + "integrity" "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz" + "version" "4.0.13" + "address@^1.0.1": "integrity" "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" "resolved" "https://registry.npmjs.org/address/-/address-1.1.2.tgz" @@ -2528,7 +3680,19 @@ dependencies: "debug" "4" -"ajv@^6.12.3": +"ajv-formats@^2.1.1": + "integrity" "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==" + "resolved" "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ajv" "^8.0.0" + +"ajv-keywords@^3.1.0": + "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + "version" "3.5.2" + +"ajv@^6.1.0", "ajv@^6.10.0", "ajv@^6.12.3", "ajv@^6.12.5", "ajv@^6.9.1", "ajv@4.11.8 - 6": "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" "version" "6.12.6" @@ -2538,6 +3702,35 @@ "json-schema-traverse" "^0.4.1" "uri-js" "^4.2.2" +"ajv@^8.0.0": + "integrity" "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz" + "version" "8.8.2" + dependencies: + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" + +"ajv@^8.6.3": + "integrity" "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz" + "version" "8.8.2" + dependencies: + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" + +"align-text@^0.1.1", "align-text@^0.1.3": + "integrity" "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=" + "resolved" "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz" + "version" "0.1.4" + dependencies: + "kind-of" "^3.0.2" + "longest" "^1.0.1" + "repeat-string" "^1.5.2" + "amdefine@>=0.0.4": "integrity" "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" "resolved" "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" @@ -2560,6 +3753,17 @@ dependencies: "type-fest" "^0.21.3" +"ansi-mark@^1.0.0": + "integrity" "sha1-HNS6jVfxXxCdaq9uycqXhsik7mw=" + "resolved" "https://registry.npmjs.org/ansi-mark/-/ansi-mark-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "ansi-regex" "^3.0.0" + "array-uniq" "^1.0.3" + "chalk" "^2.3.2" + "strip-ansi" "^4.0.0" + "super-split" "^1.1.0" + "ansi-regex@^2.0.0": "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" @@ -2592,14 +3796,7 @@ dependencies: "color-convert" "^1.9.0" -"ansi-styles@^4.0.0": - "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" - "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - "version" "4.3.0" - dependencies: - "color-convert" "^2.0.1" - -"ansi-styles@^4.1.0": +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" "version" "4.3.0" @@ -2640,6 +3837,177 @@ "normalize-path" "^3.0.0" "picomatch" "^2.0.4" +"apollo-cache-control@^0.14.0": + "integrity" "sha512-qN4BCq90egQrgNnTRMUHikLZZAprf3gbm8rC5Vwmc6ZdLolQ7bFsa769Hqi6Tq/lS31KLsXBLTOsRbfPHph12w==" + "resolved" "https://registry.npmjs.org/apollo-cache-control/-/apollo-cache-control-0.14.0.tgz" + "version" "0.14.0" + dependencies: + "apollo-server-env" "^3.1.0" + "apollo-server-plugin-base" "^0.13.0" + +"apollo-datasource@^0.9.0": + "integrity" "sha512-y8H99NExU1Sk4TvcaUxTdzfq2SZo6uSj5dyh75XSQvbpH6gdAXIW9MaBcvlNC7n0cVPsidHmOcHOWxJ/pTXGjA==" + "resolved" "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.9.0.tgz" + "version" "0.9.0" + dependencies: + "apollo-server-caching" "^0.7.0" + "apollo-server-env" "^3.1.0" + +"apollo-graphql@^0.9.0": + "integrity" "sha512-RGt5k2JeBqrmnwRM0VOgWFiGKlGJMfmiif/4JvdaEqhMJ+xqe/9cfDYzXfn33ke2eWixsAbjEbRfy8XbaN9nTw==" + "resolved" "https://registry.npmjs.org/apollo-graphql/-/apollo-graphql-0.9.5.tgz" + "version" "0.9.5" + dependencies: + "core-js-pure" "^3.10.2" + "lodash.sortby" "^4.7.0" + "sha.js" "^2.4.11" + +"apollo-link@^1.2.14", "apollo-link@1.2.14": + "integrity" "sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg==" + "resolved" "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.14.tgz" + "version" "1.2.14" + dependencies: + "apollo-utilities" "^1.3.0" + "ts-invariant" "^0.4.0" + "tslib" "^1.9.3" + "zen-observable-ts" "^0.8.21" + +"apollo-reporting-protobuf@^0.8.0": + "integrity" "sha512-B3XmnkH6Y458iV6OsA7AhfwvTgeZnFq9nPVjbxmLKnvfkEl8hYADtz724uPa0WeBiD7DSFcnLtqg9yGmCkBohg==" + "resolved" "https://registry.npmjs.org/apollo-reporting-protobuf/-/apollo-reporting-protobuf-0.8.0.tgz" + "version" "0.8.0" + dependencies: + "@apollo/protobufjs" "1.2.2" + +"apollo-server-caching@^0.7.0": + "integrity" "sha512-MsVCuf/2FxuTFVhGLK13B+TZH9tBd2qkyoXKKILIiGcZ5CDUEBO14vIV63aNkMkS1xxvK2U4wBcuuNj/VH2Mkw==" + "resolved" "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.7.0.tgz" + "version" "0.7.0" + dependencies: + "lru-cache" "^6.0.0" + +"apollo-server-core@^2.25.3": + "integrity" "sha512-Midow3uZoJ9TjFNeCNSiWElTVZlvmB7G7tG6PPoxIR9Px90/v16Q6EzunDIO0rTJHRC3+yCwZkwtf8w2AcP0sA==" + "resolved" "https://registry.npmjs.org/apollo-server-core/-/apollo-server-core-2.25.3.tgz" + "version" "2.25.3" + dependencies: + "@apollographql/apollo-tools" "^0.5.0" + "@apollographql/graphql-playground-html" "1.6.27" + "@apollographql/graphql-upload-8-fork" "^8.1.3" + "@josephg/resolvable" "^1.0.0" + "@types/ws" "^7.0.0" + "apollo-cache-control" "^0.14.0" + "apollo-datasource" "^0.9.0" + "apollo-graphql" "^0.9.0" + "apollo-reporting-protobuf" "^0.8.0" + "apollo-server-caching" "^0.7.0" + "apollo-server-env" "^3.1.0" + "apollo-server-errors" "^2.5.0" + "apollo-server-plugin-base" "^0.13.0" + "apollo-server-types" "^0.9.0" + "apollo-tracing" "^0.15.0" + "async-retry" "^1.2.1" + "fast-json-stable-stringify" "^2.0.0" + "graphql-extensions" "^0.15.0" + "graphql-tag" "^2.11.0" + "graphql-tools" "^4.0.8" + "loglevel" "^1.6.7" + "lru-cache" "^6.0.0" + "sha.js" "^2.4.11" + "subscriptions-transport-ws" "^0.9.19" + "uuid" "^8.0.0" + +"apollo-server-env@^3.1.0": + "integrity" "sha512-iGdZgEOAuVop3vb0F2J3+kaBVi4caMoxefHosxmgzAbbSpvWehB8Y1QiSyyMeouYC38XNVk5wnZl+jdGSsWsIQ==" + "resolved" "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "node-fetch" "^2.6.1" + "util.promisify" "^1.0.0" + +"apollo-server-errors@^2.5.0": + "integrity" "sha512-lO5oTjgiC3vlVg2RKr3RiXIIQ5pGXBFxYGGUkKDhTud3jMIhs+gel8L8zsEjKaKxkjHhCQAA/bcEfYiKkGQIvA==" + "resolved" "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.5.0.tgz" + "version" "2.5.0" + +"apollo-server-express@^2.25.3": + "integrity" "sha512-tTFYn0oKH2qqLwVj7Ez2+MiKleXACODiGh5IxsB7VuYCPMAi9Yl8iUSlwTjQUvgCWfReZjnf0vFL2k5YhDlrtQ==" + "resolved" "https://registry.npmjs.org/apollo-server-express/-/apollo-server-express-2.25.3.tgz" + "version" "2.25.3" + dependencies: + "@apollographql/graphql-playground-html" "1.6.27" + "@types/accepts" "^1.3.5" + "@types/body-parser" "1.19.0" + "@types/cors" "2.8.10" + "@types/express" "^4.17.12" + "@types/express-serve-static-core" "^4.17.21" + "accepts" "^1.3.5" + "apollo-server-core" "^2.25.3" + "apollo-server-types" "^0.9.0" + "body-parser" "^1.18.3" + "cors" "^2.8.5" + "express" "^4.17.1" + "graphql-subscriptions" "^1.0.0" + "graphql-tools" "^4.0.8" + "parseurl" "^1.3.2" + "subscriptions-transport-ws" "^0.9.19" + "type-is" "^1.6.16" + +"apollo-server-plugin-base@^0.13.0": + "integrity" "sha512-L3TMmq2YE6BU6I4Tmgygmd0W55L+6XfD9137k+cWEBFu50vRY4Re+d+fL5WuPkk5xSPKd/PIaqzidu5V/zz8Kg==" + "resolved" "https://registry.npmjs.org/apollo-server-plugin-base/-/apollo-server-plugin-base-0.13.0.tgz" + "version" "0.13.0" + dependencies: + "apollo-server-types" "^0.9.0" + +"apollo-server-types@^0.9.0": + "integrity" "sha512-qk9tg4Imwpk732JJHBkhW0jzfG0nFsLqK2DY6UhvJf7jLnRePYsPxWfPiNkxni27pLE2tiNlCwoDFSeWqpZyBg==" + "resolved" "https://registry.npmjs.org/apollo-server-types/-/apollo-server-types-0.9.0.tgz" + "version" "0.9.0" + dependencies: + "apollo-reporting-protobuf" "^0.8.0" + "apollo-server-caching" "^0.7.0" + "apollo-server-env" "^3.1.0" + +"apollo-server@^2.18.2": + "integrity" "sha512-+eUY2//DLkU7RkJLn6CTl1P89/ZMHuUQnWqv8La2iJ2hLT7Me+nMx+hgHl3LqlT/qDstQ8qA45T85FuCayplmQ==" + "resolved" "https://registry.npmjs.org/apollo-server/-/apollo-server-2.25.3.tgz" + "version" "2.25.3" + dependencies: + "apollo-server-core" "^2.25.3" + "apollo-server-express" "^2.25.3" + "express" "^4.0.0" + "graphql-subscriptions" "^1.0.0" + "graphql-tools" "^4.0.8" + "stoppable" "^1.1.0" + +"apollo-tracing@^0.15.0": + "integrity" "sha512-UP0fztFvaZPHDhIB/J+qGuy6hWO4If069MGC98qVs0I8FICIGu4/8ykpX3X3K6RtaQ56EDAWKykCxFv4ScxMeA==" + "resolved" "https://registry.npmjs.org/apollo-tracing/-/apollo-tracing-0.15.0.tgz" + "version" "0.15.0" + dependencies: + "apollo-server-env" "^3.1.0" + "apollo-server-plugin-base" "^0.13.0" + +"apollo-upload-client@14.1.2": + "integrity" "sha512-ozaW+4tnVz1rpfwiQwG3RCdCcZ93RV/37ZQbRnObcQ9mjb+zur58sGDPVg9Ef3fiujLmiE/Fe9kdgvIMA3VOjA==" + "resolved" "https://registry.npmjs.org/apollo-upload-client/-/apollo-upload-client-14.1.2.tgz" + "version" "14.1.2" + dependencies: + "@apollo/client" "^3.1.5" + "@babel/runtime" "^7.11.2" + "extract-files" "^9.0.0" + +"apollo-utilities@^1.0.1", "apollo-utilities@^1.3.0": + "integrity" "sha512-pk2hiWrCXMAy2fRPwEyhvka+mqwzeP60Jr1tRYi5xru+3ko94HI9o6lK0CT33/w4RDlxWchmdhDCrvdr+pHCig==" + "resolved" "https://registry.npmjs.org/apollo-utilities/-/apollo-utilities-1.3.4.tgz" + "version" "1.3.4" + dependencies: + "@wry/equality" "^0.1.2" + "fast-json-stable-stringify" "^2.0.0" + "ts-invariant" "^0.4.0" + "tslib" "^1.10.0" + "app-module-path@^2.2.0": "integrity" "sha1-ZBqlXft9am8KgUHEucCqULbCTdU=" "resolved" "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz" @@ -2682,12 +4050,24 @@ "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" "version" "2.0.1" +"argsarray@^0.0.1", "argsarray@0.0.1": + "integrity" "sha1-bnIHtOzbObCviDA/pa4ivajfYcs=" + "resolved" "https://registry.npmjs.org/argsarray/-/argsarray-0.0.1.tgz" + "version" "0.0.1" + +"arr-diff@^2.0.0": + "integrity" "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=" + "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "arr-flatten" "^1.0.1" + "arr-diff@^4.0.0": "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" "version" "4.0.0" -"arr-flatten@^1.1.0": +"arr-flatten@^1.0.1", "arr-flatten@^1.1.0": "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" "resolved" "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" "version" "1.1.0" @@ -2728,11 +4108,16 @@ "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" "version" "2.1.0" -"array-uniq@1.0.3": +"array-uniq@^1.0.3", "array-uniq@1.0.3": "integrity" "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" "resolved" "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" "version" "1.0.3" +"array-unique@^0.2.1": + "integrity" "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz" + "version" "0.2.1" + "array-unique@^0.3.2": "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" @@ -2749,7 +4134,7 @@ "es-array-method-boxes-properly" "^1.0.0" "is-string" "^1.0.7" -"asap@~2.0.6": +"asap@~2.0.3", "asap@~2.0.6": "integrity" "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" "resolved" "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" "version" "2.0.6" @@ -2788,6 +4173,14 @@ "resolved" "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" "version" "1.0.0" +"assert@^1.1.1": + "integrity" "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==" + "resolved" "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "object-assign" "^4.1.1" + "util" "0.10.3" + "assertion-error@^1.1.0": "integrity" "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" "resolved" "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" @@ -2815,6 +4208,13 @@ "resolved" "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" "version" "1.0.1" +"async-retry@^1.2.1": + "integrity" "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==" + "resolved" "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz" + "version" "1.3.3" + dependencies: + "retry" "0.13.1" + "async@^1.4.2": "integrity" "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" "resolved" "https://registry.npmjs.org/async/-/async-1.5.2.tgz" @@ -2859,6 +4259,11 @@ "resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" "version" "2.1.2" +"atomically@^1.7.0": + "integrity" "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" + "resolved" "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz" + "version" "1.7.0" + "available-typed-arrays@^1.0.5": "integrity" "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" "resolved" "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" @@ -3077,6 +4482,13 @@ dependencies: "babel-runtime" "^6.22.0" +"babel-plugin-dynamic-import-node@^2.3.3": + "integrity" "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" + "version" "2.3.3" + dependencies: + "object.assign" "^4.1.0" + "babel-plugin-istanbul@^6.0.0": "integrity" "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==" "resolved" "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" @@ -3103,6 +4515,11 @@ "resolved" "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz" "version" "6.22.0" +"babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0": + "integrity" "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz" + "version" "7.0.0-beta.0" + "babel-plugin-transform-async-to-generator@^6.22.0": "integrity" "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=" "resolved" "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz" @@ -3380,6 +4797,39 @@ "invariant" "^2.2.2" "semver" "^5.3.0" +"babel-preset-fbjs@^3.4.0": + "integrity" "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==" + "resolved" "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz" + "version" "3.4.0" + dependencies: + "@babel/plugin-proposal-class-properties" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-class-properties" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-block-scoped-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-member-expression-literals" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-property-literals" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "babel-plugin-syntax-trailing-function-commas" "^7.0.0-beta.0" + "babel-register@^6.26.0": "integrity" "sha1-btAhFz4vy0htestFxgCahW9kcHE=" "resolved" "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz" @@ -3465,6 +4915,11 @@ "resolved" "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz" "version" "6.18.0" +"backo2@^1.0.2": + "integrity" "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + "resolved" "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz" + "version" "1.0.2" + "backoff@^2.5.0": "integrity" "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=" "resolved" "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz" @@ -3509,7 +4964,7 @@ dependencies: "to-data-view" "^1.1.0" -"base64-js@^1.3.1": +"base64-js@^1.0.2", "base64-js@^1.3.1": "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" "version" "1.5.1" @@ -3521,21 +4976,44 @@ dependencies: "tweetnacl" "^0.14.3" +"bech32@^1.1.3", "bech32@1.1.4": + "integrity" "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" + "resolved" "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" + "version" "1.1.4" + "bech32@=1.1.3": "integrity" "sha512-yuVFUvrNcoJi0sv5phmqc6P+Fl1HjRDRNOOkHY2X/3LBy2bIGNSFx4fZ95HMaXHupuS7cZR15AsvtmCIF4UEyg==" "resolved" "https://registry.npmjs.org/bech32/-/bech32-1.1.3.tgz" "version" "1.1.3" -"bech32@1.1.4": - "integrity" "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" - "resolved" "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" - "version" "1.1.4" +"better-ajv-errors@^0.6.7": + "integrity" "sha512-PYgt/sCzR4aGpyNy5+ViSQ77ognMnWq7745zM+/flYO4/Yisdtp9wDQW2IKCyVYPUxQt3E/b5GBSwfhd1LPdlg==" + "resolved" "https://registry.npmjs.org/better-ajv-errors/-/better-ajv-errors-0.6.7.tgz" + "version" "0.6.7" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/runtime" "^7.0.0" + "chalk" "^2.4.1" + "core-js" "^3.2.1" + "json-to-ast" "^2.0.3" + "jsonpointer" "^4.0.1" + "leven" "^3.1.0" + +"big-integer@1.6.36": + "integrity" "sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==" + "resolved" "https://registry.npmjs.org/big-integer/-/big-integer-1.6.36.tgz" + "version" "1.6.36" "big.js@^5.2.2": "integrity" "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" "resolved" "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" "version" "5.2.2" +"bignumber.js@^7.2.1": + "integrity" "sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==" + "resolved" "https://registry.npmjs.org/bignumber.js/-/bignumber.js-7.2.1.tgz" + "version" "7.2.1" + "bignumber.js@^9.0.0", "bignumber.js@^9.0.1": "integrity" "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" "resolved" "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz" @@ -3713,7 +5191,12 @@ "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz" "version" "4.11.6" -"body-parser@^1.16.0", "body-parser@1.19.0": +"bn.js@4.11.8": + "integrity" "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "resolved" "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz" + "version" "4.11.8" + +"body-parser@^1.16.0", "body-parser@^1.18.3", "body-parser@1.19.0": "integrity" "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==" "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz" "version" "1.19.0" @@ -3729,7 +5212,7 @@ "raw-body" "2.4.0" "type-is" "~1.6.17" -"boolbase@~1.0.0": +"boolbase@^1.0.0", "boolbase@~1.0.0": "integrity" "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" "resolved" "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" "version" "1.0.0" @@ -3755,6 +5238,15 @@ "balanced-match" "^1.0.0" "concat-map" "0.0.1" +"braces@^1.8.2": + "integrity" "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=" + "resolved" "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz" + "version" "1.8.5" + dependencies: + "expand-range" "^1.8.1" + "preserve" "^0.2.0" + "repeat-element" "^1.1.2" + "braces@^2.3.1", "braces@^2.3.2": "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==" "resolved" "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" @@ -3852,6 +5344,13 @@ "readable-stream" "^3.6.0" "safe-buffer" "^5.2.0" +"browserify-zlib@^0.2.0": + "integrity" "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==" + "resolved" "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz" + "version" "0.2.0" + dependencies: + "pako" "~1.0.5" + "browserslist@^3.2.6": "integrity" "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==" "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz" @@ -3932,6 +5431,16 @@ "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" "version" "1.1.2" +"buffer-from@1.1.0": + "integrity" "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz" + "version" "1.1.0" + +"buffer-from@1.1.1": + "integrity" "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" + "version" "1.1.1" + "buffer-pipe@0.0.3": "integrity" "sha512-GlxfuD/NrKvCNs0Ut+7b1IHjylfdegMBxQIlZHj7bObKVQBxB5S84gtm2yu1mQ8/sSggceWBDPY0cPXgvX2MuA==" "resolved" "https://registry.npmjs.org/buffer-pipe/-/buffer-pipe-0.0.3.tgz" @@ -3956,7 +5465,16 @@ dependencies: "safe-buffer" "^5.1.1" -"buffer@^5.0.5", "buffer@^5.2.1", "buffer@^5.4.3", "buffer@^5.5.0", "buffer@^5.6.0": +"buffer@^4.3.0": + "integrity" "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" + "version" "4.9.2" + dependencies: + "base64-js" "^1.0.2" + "ieee754" "^1.1.4" + "isarray" "^1.0.0" + +"buffer@^5.0.5", "buffer@^5.2.1", "buffer@^5.4.3", "buffer@^5.5.0", "buffer@^5.6.0", "buffer@^5.7.0": "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" "version" "5.7.1" @@ -3972,6 +5490,14 @@ "base64-js" "^1.3.1" "ieee754" "^1.2.1" +"buffer@6.0.3": + "integrity" "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + "version" "6.0.3" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.2.1" + "bufferutil@^4.0.1": "integrity" "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==" "resolved" "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz" @@ -3979,6 +5505,18 @@ dependencies: "node-gyp-build" "^4.3.0" +"builtin-status-codes@^3.0.0": + "integrity" "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" + "resolved" "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz" + "version" "3.0.0" + +"busboy@^0.3.1": + "integrity" "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==" + "resolved" "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz" + "version" "0.3.1" + dependencies: + "dicer" "0.3.0" + "bytes@3.1.0": "integrity" "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" @@ -4083,11 +5621,42 @@ "no-case" "^2.2.0" "upper-case" "^1.1.1" +"camel-case@4.1.1": + "integrity" "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==" + "resolved" "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "pascal-case" "^3.1.1" + "tslib" "^1.10.0" + +"camel-case@4.1.2": + "integrity" "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==" + "resolved" "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "pascal-case" "^3.1.2" + "tslib" "^2.0.3" + +"camelcase@^1.0.2": + "integrity" "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz" + "version" "1.2.1" + +"camelcase@^2.0.1": + "integrity" "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz" + "version" "2.1.1" + "camelcase@^3.0.0": "integrity" "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz" "version" "3.0.0" +"camelcase@^4.1.0": + "integrity" "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz" + "version" "4.1.0" + "camelcase@^5.0.0", "camelcase@^5.3.1": "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" @@ -4141,6 +5710,14 @@ dependencies: "nofilter" "^3.1.0" +"center-align@^0.1.1": + "integrity" "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=" + "resolved" "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz" + "version" "0.1.3" + dependencies: + "align-text" "^0.1.3" + "lazy-cache" "^1.0.3" + "chai@^4.3.4": "integrity" "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==" "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz" @@ -4164,7 +5741,7 @@ "strip-ansi" "^3.0.0" "supports-color" "^2.0.0" -"chalk@^2", "chalk@^2.0.0", "chalk@^2.4.1", "chalk@^2.4.2": +"chalk@^2", "chalk@^2.0.0", "chalk@^2.0.1", "chalk@^2.3.2", "chalk@^2.4.1", "chalk@^2.4.2": "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" "version" "2.4.2" @@ -4205,6 +5782,17 @@ "ansi-styles" "^4.1.0" "supports-color" "^7.1.0" +"chalk@1.1.3": + "integrity" "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "ansi-styles" "^2.2.1" + "escape-string-regexp" "^1.0.2" + "has-ansi" "^2.0.0" + "strip-ansi" "^3.0.0" + "supports-color" "^2.0.0" + "change-case@3.0.2": "integrity" "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==" "resolved" "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz" @@ -4246,6 +5834,30 @@ dependencies: "functional-red-black-tree" "^1.0.1" +"cheerio-select@^1.5.0": + "integrity" "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==" + "resolved" "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz" + "version" "1.5.0" + dependencies: + "css-select" "^4.1.3" + "css-what" "^5.0.1" + "domelementtype" "^2.2.0" + "domhandler" "^4.2.0" + "domutils" "^2.7.0" + +"cheerio@^1.0.0-rc.2": + "integrity" "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==" + "resolved" "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz" + "version" "1.0.0-rc.10" + dependencies: + "cheerio-select" "^1.5.0" + "dom-serializer" "^1.3.2" + "domhandler" "^4.2.0" + "htmlparser2" "^6.1.0" + "parse5" "^6.0.1" + "parse5-htmlparser2-tree-adapter" "^6.0.1" + "tslib" "^2.2.0" + "cheerio@0.20.0": "integrity" "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=" "resolved" "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz" @@ -4290,7 +5902,7 @@ optionalDependencies: "fsevents" "^1.2.7" -"chokidar@^3.4.0", "chokidar@3.5.2": +"chokidar@^3.4.0", "chokidar@^3.4.1", "chokidar@3.5.2": "integrity" "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==" "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz" "version" "3.5.2" @@ -4399,6 +6011,13 @@ "isobject" "^3.0.0" "static-extend" "^0.1.1" +"cli-cursor@^2.1.0": + "integrity" "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "restore-cursor" "^2.0.0" + "cli-cursor@^3.0.0": "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" @@ -4406,6 +6025,11 @@ dependencies: "restore-cursor" "^3.1.0" +"cli-spinners@^2.0.0": + "integrity" "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" + "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" + "version" "2.6.1" + "cli-table3@^0.5.0": "integrity" "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==" "resolved" "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz" @@ -4426,6 +6050,15 @@ optionalDependencies: "colors" "^1.1.2" +"cliui@^2.1.0": + "integrity" "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "center-align" "^0.1.1" + "right-align" "^0.1.1" + "wordwrap" "0.0.2" + "cliui@^3.2.0": "integrity" "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=" "resolved" "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz" @@ -4444,6 +6077,15 @@ "strip-ansi" "^5.2.0" "wrap-ansi" "^5.1.0" +"cliui@^6.0.0": + "integrity" "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^6.2.0" + "cliui@^7.0.2": "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" @@ -4453,6 +6095,11 @@ "strip-ansi" "^6.0.0" "wrap-ansi" "^7.0.0" +"clone-buffer@1.0.0": + "integrity" "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" + "resolved" "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz" + "version" "1.0.0" + "clone-response@^1.0.2", "clone-response@1.0.2": "integrity" "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=" "resolved" "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" @@ -4460,7 +6107,12 @@ dependencies: "mimic-response" "^1.0.0" -"clone@^1.0.2": +"clone-stats@^0.0.1": + "integrity" "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" + "resolved" "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz" + "version" "0.0.1" + +"clone@^1.0.0", "clone@^1.0.2": "integrity" "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" "version" "1.0.4" @@ -4475,6 +6127,11 @@ "resolved" "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz" "version" "2.1.1" +"code-error-fragment@0.0.230": + "integrity" "sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==" + "resolved" "https://registry.npmjs.org/code-error-fragment/-/code-error-fragment-0.0.230.tgz" + "version" "0.0.230" + "code-point-at@^1.0.0": "integrity" "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" @@ -4553,7 +6210,7 @@ "find-replace" "^1.0.3" "typical" "^2.6.1" -"commander@^2.15.0", "commander@^2.8.1": +"commander@^2.15.0", "commander@^2.20.3", "commander@^2.8.1": "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" "version" "2.20.3" @@ -4618,6 +6275,31 @@ "readable-stream" "^2.2.2" "typedarray" "^0.0.6" +"concat-stream@1.5.1": + "integrity" "sha1-87gKz54fSOOHXAaItBtsMWAu6hw=" + "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.1.tgz" + "version" "1.5.1" + dependencies: + "inherits" "~2.0.1" + "readable-stream" "~2.0.0" + "typedarray" "~0.0.5" + +"conf@^10.0.2": + "integrity" "sha512-z2civwq/k8TMYtcn3SVP0Peso4otIWnHtcTuHhQ0zDZDdP4NTxqEc8owfkz4zBsdMYdn/LFcE+ZhbCeqkhtq3Q==" + "resolved" "https://registry.npmjs.org/conf/-/conf-10.1.1.tgz" + "version" "10.1.1" + dependencies: + "ajv" "^8.6.3" + "ajv-formats" "^2.1.1" + "atomically" "^1.7.0" + "debounce-fn" "^4.0.0" + "dot-prop" "^6.0.1" + "env-paths" "^2.2.1" + "json-schema-typed" "^7.0.3" + "onetime" "^5.1.2" + "pkg-up" "^3.1.0" + "semver" "^7.3.5" + "config-chain@^1.1.11": "integrity" "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==" "resolved" "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz" @@ -4626,6 +6308,11 @@ "ini" "^1.3.4" "proto-list" "~1.2.1" +"console-browserify@^1.1.0": + "integrity" "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + "resolved" "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" + "version" "1.2.0" + "console-control-strings@^1.0.0", "console-control-strings@~1.1.0": "integrity" "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" @@ -4639,6 +6326,11 @@ "snake-case" "^2.1.0" "upper-case" "^1.1.1" +"constants-browserify@^1.0.0": + "integrity" "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + "resolved" "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz" + "version" "1.0.0" + "content-disposition@^0.5.2", "content-disposition@0.5.3": "integrity" "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==" "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" @@ -4660,7 +6352,7 @@ "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" "version" "1.0.4" -"convert-source-map@^1.4.0", "convert-source-map@^1.7.0": +"convert-source-map@^1.4.0", "convert-source-map@^1.7.0", "convert-source-map@1.X": "integrity" "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" "version" "1.8.0" @@ -4697,7 +6389,7 @@ "resolved" "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" "version" "0.1.1" -"core-js-pure@^3.0.1": +"core-js-pure@^3.0.1", "core-js-pure@^3.10.2": "integrity" "sha512-Q0Knr8Es84vtv62ei6/6jXH/7izKmOrtrxH9WJTHLCMAVeU+8TF8z8Nr08CsH4Ot0oJKzBzJJL9SJBYIv7WlfQ==" "resolved" "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.19.1.tgz" "version" "3.19.1" @@ -4707,6 +6399,11 @@ "resolved" "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz" "version" "2.6.12" +"core-js@^3.2.1": + "integrity" "sha512-LeLBMgEGSsG7giquSzvgBrTS7V5UL6ks3eQlUSbN8dJStlLFiRzUm5iqsRyzUB8carhfKjkJ2vzKqE6z1Vga9g==" + "resolved" "https://registry.npmjs.org/core-js/-/core-js-3.19.3.tgz" + "version" "3.19.3" + "core-util-is@~1.0.0": "integrity" "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" @@ -4717,7 +6414,7 @@ "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" "version" "1.0.2" -"cors@^2.8.1": +"cors@^2.8.1", "cors@^2.8.5": "integrity" "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==" "resolved" "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" "version" "2.8.5" @@ -4785,6 +6482,38 @@ "node-fetch" "2.1.2" "whatwg-fetch" "2.0.4" +"cross-fetch@^3.0.4", "cross-fetch@3.0.6": + "integrity" "sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ==" + "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.0.6.tgz" + "version" "3.0.6" + dependencies: + "node-fetch" "2.6.1" + +"cross-fetch@3.1.4": + "integrity" "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==" + "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz" + "version" "3.1.4" + dependencies: + "node-fetch" "2.6.1" + +"cross-spawn@^5.0.1": + "integrity" "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "lru-cache" "^4.0.1" + "shebang-command" "^1.2.0" + "which" "^1.2.9" + +"cross-spawn@^6.0.0": + "version" "6.0.5" + dependencies: + "nice-try" "^1.0.4" + "path-key" "^2.0.1" + "semver" "^5.5.0" + "shebang-command" "^1.2.0" + "which" "^1.2.9" + "cross-spawn@^6.0.5": "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" @@ -4801,7 +6530,20 @@ "resolved" "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" "version" "0.0.2" -"crypto-browserify@3.12.0": +"crypto-addr-codec@^0.1.7": + "integrity" "sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg==" + "resolved" "https://registry.npmjs.org/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz" + "version" "0.1.7" + dependencies: + "base-x" "^3.0.8" + "big-integer" "1.6.36" + "blakejs" "^1.1.0" + "bs58" "^4.0.1" + "ripemd160-min" "0.0.6" + "safe-buffer" "^5.2.0" + "sha3" "^2.1.1" + +"crypto-browserify@^3.11.0", "crypto-browserify@3.12.0": "integrity" "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==" "resolved" "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" "version" "3.12.0" @@ -4818,6 +6560,17 @@ "randombytes" "^2.0.0" "randomfill" "^1.0.3" +"css-select@^4.1.3": + "integrity" "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==" + "resolved" "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz" + "version" "4.1.3" + dependencies: + "boolbase" "^1.0.0" + "css-what" "^5.0.0" + "domhandler" "^4.2.0" + "domutils" "^2.6.0" + "nth-check" "^2.0.0" + "css-select@~1.2.0": "integrity" "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=" "resolved" "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz" @@ -4828,11 +6581,31 @@ "domutils" "1.5.1" "nth-check" "~1.0.1" +"css-what@^5.0.0", "css-what@^5.0.1": + "integrity" "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==" + "resolved" "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz" + "version" "5.1.0" + "css-what@2.1": "integrity" "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" "resolved" "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz" "version" "2.1.3" +"css@2.X": + "integrity" "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==" + "resolved" "https://registry.npmjs.org/css/-/css-2.2.4.tgz" + "version" "2.2.4" + dependencies: + "inherits" "^2.0.3" + "source-map" "^0.6.1" + "source-map-resolve" "^0.5.2" + "urix" "^0.1.0" + +"cssfilter@0.0.10": + "integrity" "sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4=" + "resolved" "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz" + "version" "0.0.10" + "cssom@>= 0.3.0 < 0.4.0", "cssom@0.3.x": "integrity" "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" "resolved" "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" @@ -4860,11 +6633,39 @@ dependencies: "assert-plus" "^1.0.0" +"dataloader@2.0.0": + "integrity" "sha512-YzhyDAwA4TaQIhM5go+vCLmU0UikghC/t9DTQYZR2M/UvZ1MdOhPezSDZcjj9uqQJOMqjLcpWtyW2iNINdlatQ==" + "resolved" "https://registry.npmjs.org/dataloader/-/dataloader-2.0.0.tgz" + "version" "2.0.0" + "death@^1.1.0": "integrity" "sha1-AaqcQB7dknUFFEcLgmY5DGbGcxg=" "resolved" "https://registry.npmjs.org/death/-/death-1.1.0.tgz" "version" "1.1.0" +"debounce-fn@^4.0.0": + "integrity" "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==" + "resolved" "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "mimic-fn" "^3.0.0" + +"debug-fabulous@0.0.X": + "integrity" "sha1-+gccXYdIRoVCSAdCHKSxawsaB2M=" + "resolved" "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-0.0.4.tgz" + "version" "0.0.4" + dependencies: + "debug" "2.X" + "lazy-debug-legacy" "0.0.X" + "object-assign" "4.1.0" + +"debug@*", "debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@4", "debug@4.3.2": + "integrity" "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "ms" "2.1.2" + "debug@^2.2.0": "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" @@ -4907,12 +6708,12 @@ dependencies: "ms" "^2.1.1" -"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@4", "debug@4.3.2": - "integrity" "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==" - "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" - "version" "4.3.2" +"debug@^3.2.6": + "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + "version" "3.2.7" dependencies: - "ms" "2.1.2" + "ms" "^2.1.1" "debug@2.6.9": "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" @@ -4921,6 +6722,20 @@ dependencies: "ms" "2.0.0" +"debug@2.X": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@3.1.0": + "integrity" "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "ms" "2.0.0" + "debug@3.2.6": "integrity" "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==" "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" @@ -4935,6 +6750,11 @@ dependencies: "ms" "^2.1.1" +"decamelize@^1.0.0": + "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + "version" "1.2.0" + "decamelize@^1.1.1": "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" @@ -5073,6 +6893,13 @@ "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz" "version" "2.2.1" +"defaults@^1.0.3": + "integrity" "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=" + "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "clone" "^1.0.2" + "defer-to-connect@^1.0.1": "integrity" "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" @@ -5093,6 +6920,14 @@ "abstract-leveldown" "~5.0.0" "inherits" "^2.0.3" +"deferred-leveldown@~5.0.0": + "integrity" "sha512-BXohsvTedWOLkj2n/TY+yqVlrCWa2Zs8LSxh3uCAgFOru7/pjxKyZAexGa1j83BaKloER4PqUyQ9rGPJLt9bqA==" + "resolved" "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "abstract-leveldown" "~6.0.0" + "inherits" "^2.0.3" + "deferred-leveldown@~5.3.0": "integrity" "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==" "resolved" "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz" @@ -5160,6 +6995,11 @@ "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" "version" "1.1.2" +"deprecated-decorator@^0.1.6": + "integrity" "sha1-AJZjF7ehL+kvPMgx91g68ym4bDc=" + "resolved" "https://registry.npmjs.org/deprecated-decorator/-/deprecated-decorator-0.1.6.tgz" + "version" "0.1.6" + "des.js@^1.0.0": "integrity" "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==" "resolved" "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" @@ -5180,11 +7020,28 @@ dependencies: "repeating" "^2.0.0" -"detect-libc@^1.0.3": +"detect-indent@^5.0.0": + "integrity" "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=" + "resolved" "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz" + "version" "5.0.0" + +"detect-installed@^2.0.4": + "integrity" "sha1-oIUEZefD68/5eda2U1rTRLgN18U=" + "resolved" "https://registry.npmjs.org/detect-installed/-/detect-installed-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "get-installed-path" "^2.0.3" + +"detect-libc@^1.0.2", "detect-libc@^1.0.3": "integrity" "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" "version" "1.0.3" +"detect-newline@2.X": + "integrity" "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=" + "resolved" "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz" + "version" "2.1.0" + "detect-port@^1.3.0": "integrity" "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==" "resolved" "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz" @@ -5193,6 +7050,13 @@ "address" "^1.0.1" "debug" "^2.6.0" +"dicer@0.3.0": + "integrity" "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==" + "resolved" "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "streamsearch" "0.1.2" + "diff-sequences@^27.0.6": "integrity" "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==" "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz" @@ -5234,6 +7098,11 @@ dependencies: "path-type" "^4.0.0" +"dir-to-object@^2.0.0": + "integrity" "sha512-sXs0JKIhymON7T1UZuO2Ud6VTNAx/VTBXIl4+3mjb2RgfOpt+hectX0x04YqPOPdkeOAKoJuKqwqnXXURNPNEA==" + "resolved" "https://registry.npmjs.org/dir-to-object/-/dir-to-object-2.0.0.tgz" + "version" "2.0.0" + "dns-over-http-resolver@^1.0.0": "integrity" "sha512-miDiVSI6KSNbi4SVifzO/reD8rMnxgrlnkrlkugOLQpWQTe2qMdHsZp5DmfKjxNE+/T3VAAYLQUZMv9SMr6+AA==" "resolved" "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-1.2.3.tgz" @@ -5243,6 +7112,15 @@ "native-fetch" "^3.0.0" "receptacle" "^1.3.2" +"dom-serializer@^1.0.1", "dom-serializer@^1.3.2": + "integrity" "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==" + "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "domelementtype" "^2.0.1" + "domhandler" "^4.2.0" + "entities" "^2.0.0" + "dom-serializer@~0.1.0", "dom-serializer@0": "integrity" "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==" "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz" @@ -5256,11 +7134,21 @@ "resolved" "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz" "version" "0.1.2" +"domain-browser@^1.1.1": + "integrity" "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + "resolved" "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz" + "version" "1.2.0" + "domelementtype@^1.3.0", "domelementtype@^1.3.1", "domelementtype@1": "integrity" "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" "version" "1.3.1" +"domelementtype@^2.0.1", "domelementtype@^2.2.0": + "integrity" "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz" + "version" "2.2.0" + "domhandler@^2.3.0": "integrity" "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==" "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz" @@ -5268,6 +7156,13 @@ dependencies: "domelementtype" "1" +"domhandler@^4.0.0", "domhandler@^4.2.0": + "integrity" "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==" + "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "domelementtype" "^2.2.0" + "domhandler@2.3": "integrity" "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=" "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz" @@ -5283,6 +7178,15 @@ "dom-serializer" "0" "domelementtype" "1" +"domutils@^2.5.2", "domutils@^2.6.0", "domutils@^2.7.0": + "integrity" "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==" + "resolved" "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" + "version" "2.8.0" + dependencies: + "dom-serializer" "^1.0.1" + "domelementtype" "^2.2.0" + "domhandler" "^4.2.0" + "dot-case@^2.1.0": "integrity" "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=" "resolved" "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz" @@ -5290,6 +7194,13 @@ dependencies: "no-case" "^2.2.0" +"dot-prop@^6.0.1": + "integrity" "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==" + "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "is-obj" "^2.0.0" + "dotenv@^10.0.0": "integrity" "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" "resolved" "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" @@ -5302,6 +7213,11 @@ dependencies: "minimatch" "^3.0.4" +"double-ended-queue@2.1.0-0": + "integrity" "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=" + "resolved" "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz" + "version" "2.1.0-0" + "download@^7.1.0": "integrity" "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==" "resolved" "https://registry.npmjs.org/download/-/download-7.1.0.tgz" @@ -5334,6 +7250,16 @@ "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" "version" "0.1.4" +"duplexify@^3.2.0": + "integrity" "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==" + "resolved" "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" + "version" "3.7.1" + dependencies: + "end-of-stream" "^1.0.0" + "inherits" "^2.0.1" + "readable-stream" "^2.0.0" + "stream-shift" "^1.0.0" + "ecc-jsbn@~0.1.1": "integrity" "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=" "resolved" "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" @@ -5393,6 +7319,11 @@ "minimalistic-assert" "^1.0.0" "minimalistic-crypto-utils" "^1.0.0" +"emittery@^0.4.1": + "integrity" "sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==" + "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.4.1.tgz" + "version" "0.4.1" + "emoji-regex@^7.0.1": "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" @@ -5403,11 +7334,16 @@ "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" "version" "8.0.0" -"emoji-regex@^9.2.2": +"emoji-regex@^9.0.0", "emoji-regex@^9.2.2": "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" "version" "9.2.2" +"emojis-list@^3.0.0": + "integrity" "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + "resolved" "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" + "version" "3.0.0" + "encode-utf8@^1.0.2": "integrity" "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" "resolved" "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz" @@ -5460,6 +7396,23 @@ dependencies: "once" "^1.4.0" +"end-stream@~0.1.0": + "integrity" "sha1-MgA/P0OKKwFDFoE3+PpumGbIHtU=" + "resolved" "https://registry.npmjs.org/end-stream/-/end-stream-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "write-stream" "~0.4.3" + +"enhanced-resolve@^3.4.0": + "integrity" "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=" + "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz" + "version" "3.4.1" + dependencies: + "graceful-fs" "^4.1.2" + "memory-fs" "^0.4.0" + "object-assign" "^4.0.1" + "tapable" "^0.2.7" + "enquirer@^2.3.0", "enquirer@^2.3.6": "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" @@ -5472,12 +7425,17 @@ "resolved" "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz" "version" "1.1.2" +"entities@^2.0.0": + "integrity" "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "resolved" "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + "version" "2.2.0" + "entities@1.0": "integrity" "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=" "resolved" "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz" "version" "1.0.0" -"env-paths@^2.2.0": +"env-paths@^2.2.0", "env-paths@^2.2.1": "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" "version" "2.2.1" @@ -5497,7 +7455,7 @@ "resolved" "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz" "version" "3.0.1" -"errno@~0.1.1": +"errno@^0.1.3", "errno@~0.1.1": "integrity" "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==" "resolved" "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" "version" "0.1.8" @@ -5581,7 +7539,7 @@ "is-date-object" "^1.0.1" "is-symbol" "^1.0.2" -"es5-ext@^0.10.35", "es5-ext@^0.10.50": +"es5-ext@^0.10.35", "es5-ext@^0.10.46", "es5-ext@^0.10.50", "es5-ext@~0.10.14": "integrity" "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==" "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz" "version" "0.10.53" @@ -5590,7 +7548,12 @@ "es6-symbol" "~3.1.3" "next-tick" "~1.0.0" -"es6-iterator@~2.0.3": +"es6-denodeify@^0.1.1": + "integrity" "sha1-MdTV/pxVA+ElRgQ5MQ4WoqPznB8=" + "resolved" "https://registry.npmjs.org/es6-denodeify/-/es6-denodeify-0.1.5.tgz" + "version" "0.1.5" + +"es6-iterator@^2.0.3", "es6-iterator@~2.0.1", "es6-iterator@~2.0.3": "integrity" "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=" "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" "version" "2.0.3" @@ -5599,7 +7562,30 @@ "es5-ext" "^0.10.35" "es6-symbol" "^3.1.1" -"es6-symbol@^3.1.1", "es6-symbol@~3.1.3": +"es6-map@^0.1.3": + "integrity" "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=" + "resolved" "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz" + "version" "0.1.5" + dependencies: + "d" "1" + "es5-ext" "~0.10.14" + "es6-iterator" "~2.0.1" + "es6-set" "~0.1.5" + "es6-symbol" "~3.1.1" + "event-emitter" "~0.3.5" + +"es6-set@~0.1.5": + "integrity" "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=" + "resolved" "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz" + "version" "0.1.5" + dependencies: + "d" "1" + "es5-ext" "~0.10.14" + "es6-iterator" "~2.0.1" + "es6-symbol" "3.1.1" + "event-emitter" "~0.3.5" + +"es6-symbol@^3.1.1", "es6-symbol@~3.1.1", "es6-symbol@~3.1.3": "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==" "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" "version" "3.1.3" @@ -5607,6 +7593,24 @@ "d" "^1.0.1" "ext" "^1.1.2" +"es6-symbol@3.1.1": + "integrity" "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=" + "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "d" "1" + "es5-ext" "~0.10.14" + +"es6-weak-map@^2.0.1": + "integrity" "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==" + "resolved" "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "d" "1" + "es5-ext" "^0.10.46" + "es6-iterator" "^2.0.3" + "es6-symbol" "^3.1.1" + "escalade@^3.1.1": "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" @@ -5666,6 +7670,16 @@ optionalDependencies: "source-map" "~0.2.0" +"escope@^3.6.0": + "integrity" "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=" + "resolved" "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "es6-map" "^0.1.3" + "es6-weak-map" "^2.0.1" + "esrecurse" "^4.1.0" + "estraverse" "^4.1.1" + "esdoc@^1.0.4": "integrity" "sha512-vsUcp52XJkOWg9m1vDYplGZN2iDzvmjDL5M/Mp8qkoDG3p2s0yIQCIjKR5wfPBaM3eV14a6zhQNYiNTCVzPnxA==" "resolved" "https://registry.npmjs.org/esdoc/-/esdoc-1.1.0.tgz" @@ -5700,16 +7714,28 @@ "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" "version" "4.0.1" +"esrecurse@^4.1.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + "estraverse@^1.9.1": "integrity" "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=" "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz" "version" "1.9.3" -"estraverse@^4.2.0": +"estraverse@^4.1.1", "estraverse@^4.2.0": "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" "version" "4.3.0" +"estraverse@^5.2.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" + "esutils@^2.0.2": "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" @@ -5803,6 +7829,15 @@ "ws" "^3.0.0" "xhr-request-promise" "^0.1.2" +"eth-lib@0.2.7": + "integrity" "sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco=" + "resolved" "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.7.tgz" + "version" "0.2.7" + dependencies: + "bn.js" "^4.11.6" + "elliptic" "^6.4.0" + "xhr-request-promise" "^0.1.2" + "eth-lib@0.2.8": "integrity" "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==" "resolved" "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz" @@ -6032,6 +8067,13 @@ "resolved" "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz" "version" "1.5.2" +"ethereumjs-testrpc@^6.0.3": + "integrity" "sha512-lAxxsxDKK69Wuwqym2K49VpXtBvLEsXr1sryNG4AkvL5DomMdeCBbu3D87UEevKenLHBiT8GTjARwN6Yj039gA==" + "resolved" "https://registry.npmjs.org/ethereumjs-testrpc/-/ethereumjs-testrpc-6.0.3.tgz" + "version" "6.0.3" + dependencies: + "webpack" "^3.0.0" + "ethereumjs-tx@^1.1.1", "ethereumjs-tx@^1.2.0", "ethereumjs-tx@^1.2.2", "ethereumjs-tx@^1.3.3": "integrity" "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==" "resolved" "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz" @@ -6239,7 +8281,7 @@ "uuid" "2.0.1" "xmlhttprequest" "1.8.0" -"ethers@^5.0.0", "ethers@^5.0.1", "ethers@^5.0.2", "ethers@^5.1.3", "ethers@^5.4.5", "ethers@^5.4.7", "ethers@^5.5.0": +"ethers@^5.0.0", "ethers@^5.0.1", "ethers@^5.0.13", "ethers@^5.0.2", "ethers@^5.1.3", "ethers@^5.4.5", "ethers@^5.4.7", "ethers@^5.5.0": "integrity" "sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw==" "resolved" "https://registry.npmjs.org/ethers/-/ethers-5.5.1.tgz" "version" "5.5.1" @@ -6291,6 +8333,14 @@ "is-hex-prefixed" "1.0.0" "strip-hex-prefix" "1.0.0" +"event-emitter@~0.3.5": + "integrity" "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=" + "resolved" "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz" + "version" "0.3.5" + dependencies: + "d" "1" + "es5-ext" "~0.10.14" + "event-iterator@^1.0.0": "integrity" "sha512-Daq7YUl0Mv1i4QEgzGQlz0jrx7hUFNyLGbiF+Ap7NCMCjDLCCnolyj6s0TAc6HmrBziO5rNVHsPwGMp7KdRPvw==" "resolved" "https://registry.npmjs.org/event-iterator/-/event-iterator-1.2.0.tgz" @@ -6306,7 +8356,7 @@ "resolved" "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" "version" "5.0.1" -"eventemitter3@^3.1.2": +"eventemitter3@^3.1.0", "eventemitter3@^3.1.2": "integrity" "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==" "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz" "version" "3.1.2" @@ -6316,10 +8366,7 @@ "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz" "version" "4.0.4" -"events@^3.0.0": - "version" "3.2.0" - -"events@^3.2.0", "events@^3.3.0": +"events@^3.0.0", "events@^3.2.0", "events@^3.3.0": "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" "version" "3.3.0" @@ -6340,11 +8387,42 @@ "md5.js" "^1.3.4" "safe-buffer" "^5.1.1" +"execa@^0.7.0": + "integrity" "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=" + "resolved" "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz" + "version" "0.7.0" + dependencies: + "cross-spawn" "^5.0.1" + "get-stream" "^3.0.0" + "is-stream" "^1.1.0" + "npm-run-path" "^2.0.0" + "p-finally" "^1.0.0" + "signal-exit" "^3.0.0" + "strip-eof" "^1.0.0" + +"execa@^1.0.0": + "version" "1.0.0" + dependencies: + "cross-spawn" "^6.0.0" + "get-stream" "^4.0.0" + "is-stream" "^1.1.0" + "npm-run-path" "^2.0.0" + "p-finally" "^1.0.0" + "signal-exit" "^3.0.0" + "strip-eof" "^1.0.0" + "exit-on-epipe@~1.0.1": "integrity" "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" "resolved" "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz" "version" "1.0.1" +"expand-brackets@^0.1.4": + "integrity" "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=" + "resolved" "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz" + "version" "0.1.5" + dependencies: + "is-posix-bracket" "^0.1.0" + "expand-brackets@^2.1.4": "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=" "resolved" "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" @@ -6358,11 +8436,25 @@ "snapdragon" "^0.8.1" "to-regex" "^3.0.1" +"expand-range@^1.8.1": + "integrity" "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=" + "resolved" "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz" + "version" "1.8.2" + dependencies: + "fill-range" "^2.1.0" + "expand-template@^2.0.3": "integrity" "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" "resolved" "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" "version" "2.0.3" +"expand-tilde@^2.0.0", "expand-tilde@^2.0.2": + "integrity" "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=" + "resolved" "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "homedir-polyfill" "^1.0.1" + "expect@^27.3.1": "integrity" "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==" "resolved" "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz" @@ -6375,7 +8467,7 @@ "jest-message-util" "^27.3.1" "jest-regex-util" "^27.0.6" -"express@^4.14.0": +"express@^4.0.0", "express@^4.14.0", "express@^4.17.1": "integrity" "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==" "resolved" "https://registry.npmjs.org/express/-/express-4.17.1.tgz" "version" "4.17.1" @@ -6448,11 +8540,18 @@ "assign-symbols" "^1.0.0" "is-extendable" "^1.0.1" -"extend@~3.0.2": +"extend@^3.0.0", "extend@~3.0.2": "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" "version" "3.0.2" +"extglob@^0.3.1": + "integrity" "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=" + "resolved" "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "is-extglob" "^1.0.0" + "extglob@^2.0.4": "integrity" "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==" "resolved" "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" @@ -6467,6 +8566,19 @@ "snapdragon" "^0.8.1" "to-regex" "^3.0.1" +"extract-comments@^1.1.0": + "integrity" "sha512-dzbZV2AdSSVW/4E7Ti5hZdHWbA+Z80RJsJhr5uiL10oyjl/gy7/o+HI1HwK4/WSZhlq4SNKU3oUzXlM13Qx02Q==" + "resolved" "https://registry.npmjs.org/extract-comments/-/extract-comments-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "esprima-extract-comments" "^1.1.0" + "parse-code-context" "^1.0.0" + +"extract-files@^9.0.0", "extract-files@9.0.0": + "integrity" "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==" + "resolved" "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz" + "version" "9.0.0" + "extsprintf@^1.2.0", "extsprintf@1.3.0": "integrity" "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" @@ -6501,7 +8613,12 @@ "resolved" "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.0.0.tgz" "version" "1.0.0" -"fast-glob@^3.0.3": +"fast-future@~1.0.2": + "integrity" "sha1-hDWpqqAteSSNF9cE52JZMB2ZKAo=" + "resolved" "https://registry.npmjs.org/fast-future/-/fast-future-1.0.2.tgz" + "version" "1.0.2" + +"fast-glob@^3.0.3", "fast-glob@^3.1.1": "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==" "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" "version" "3.2.7" @@ -6544,7 +8661,25 @@ "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" "version" "2.0.1" dependencies: - "bser" "2.1.1" + "bser" "2.1.1" + +"fbjs-css-vars@^1.0.0": + "integrity" "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + "resolved" "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz" + "version" "1.0.2" + +"fbjs@^3.0.0": + "integrity" "sha512-8+vkGyT4lNDRKHQNPp0yh/6E7FfkLg89XqQbOYnvntRh+8RiSD43yrh9E5ejp1muCizTL4nDVG+y8W4e+LROHg==" + "resolved" "https://registry.npmjs.org/fbjs/-/fbjs-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "cross-fetch" "^3.0.4" + "fbjs-css-vars" "^1.0.0" + "loose-envify" "^1.0.0" + "object-assign" "^4.1.0" + "promise" "^7.1.1" + "setimmediate" "^1.0.5" + "ua-parser-js" "^0.7.30" "fd-slicer@~1.1.0": "integrity" "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=" @@ -6553,6 +8688,21 @@ dependencies: "pend" "~1.2.0" +"fetch-cookie@0.10.1": + "integrity" "sha512-beB+VEd4cNeVG1PY+ee74+PkuCQnik78pgLi5Ah/7qdUfov8IctU0vLUbBT8/10Ma5GMBeI4wtxhGrEfKNYs2g==" + "resolved" "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.10.1.tgz" + "version" "0.10.1" + dependencies: + "tough-cookie" "^2.3.3 || ^3.0.1 || ^4.0.0" + +"fetch-cookie@0.7.0": + "integrity" "sha512-Mm5pGlT3agW6t71xVM7vMZPIvI7T4FaTuFW4jari6dVzYHFDb3WZZsGpN22r/o3XMdkM0E7sPd1EGeyVbH2Tgg==" + "resolved" "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.7.0.tgz" + "version" "0.7.0" + dependencies: + "es6-denodeify" "^0.1.1" + "tough-cookie" "^2.3.1" + "fetch-ponyfill@^4.0.0": "integrity" "sha1-rjzl9zLGReq4fkroeTQUcJsjmJM=" "resolved" "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz" @@ -6613,6 +8763,11 @@ "websocket" "^1.0.31" "ws" "^7.3.1" +"filename-regex@^2.0.0": + "integrity" "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + "resolved" "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz" + "version" "2.0.1" + "filename-reserved-regex@^2.0.0": "integrity" "sha1-q/c9+rc10EVECr/qLZHzieu/oik=" "resolved" "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz" @@ -6627,6 +8782,17 @@ "strip-outer" "^1.0.0" "trim-repeated" "^1.0.0" +"fill-range@^2.1.0": + "integrity" "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz" + "version" "2.2.4" + dependencies: + "is-number" "^2.1.0" + "isobject" "^2.0.0" + "randomatic" "^3.0.0" + "repeat-element" "^1.1.2" + "repeat-string" "^1.5.2" + "fill-range@^4.0.0": "integrity" "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=" "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" @@ -6678,7 +8844,7 @@ "path-exists" "^2.0.0" "pinkie-promise" "^2.0.0" -"find-up@^2.1.0": +"find-up@^2.0.0", "find-up@^2.1.0": "integrity" "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=" "resolved" "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" "version" "2.1.0" @@ -6723,6 +8889,11 @@ dependencies: "micromatch" "^4.0.2" +"first-chunk-stream@^1.0.0": + "integrity" "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=" + "resolved" "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz" + "version" "1.0.0" + "flat@^4.1.0": "integrity" "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==" "resolved" "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz" @@ -6759,11 +8930,18 @@ dependencies: "is-callable" "^1.1.3" -"for-in@^1.0.2": +"for-in@^1.0.1", "for-in@^1.0.2": "integrity" "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" "resolved" "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" "version" "1.0.2" +"for-own@^0.1.4": + "integrity" "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=" + "resolved" "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz" + "version" "0.1.5" + dependencies: + "for-in" "^1.0.1" + "foreach@^2.0.4", "foreach@^2.0.5": "integrity" "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" "resolved" "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz" @@ -6810,6 +8988,24 @@ "combined-stream" "^1.0.6" "mime-types" "^2.1.12" +"form-data@3.0.0": + "integrity" "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + +"form-data@4.0.0": + "integrity" "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + "forwarded@~0.1.2": "version" "0.1.2" @@ -6853,6 +9049,11 @@ "inherits" "^2.0.1" "readable-stream" "^2.0.0" +"fs-capacitor@^2.0.4": + "integrity" "sha512-8S4f4WsCryNw2mJJchi46YgB6CR5Ze+4L1h8ewl9tEpL4SJ3ZO+c/bS4BWhB8bK+O3TMqhuZarTitd0S0eh2pA==" + "resolved" "https://registry.npmjs.org/fs-capacitor/-/fs-capacitor-2.0.4.tgz" + "version" "2.0.4" + "fs-constants@^1.0.0": "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" @@ -6998,6 +9199,15 @@ "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" "version" "1.0.1" +"ganache-cli@^6.1.0": + "integrity" "sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw==" + "resolved" "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz" + "version" "6.12.2" + dependencies: + "ethereumjs-util" "6.2.1" + "source-map-support" "0.5.12" + "yargs" "13.2.4" + "ganache-core@^2.13.2": "integrity" "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==" "resolved" "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz" @@ -7069,6 +9279,20 @@ "resolved" "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" "version" "2.0.0" +"get-installed-path@^2.0.3": + "integrity" "sha512-Qkn9eq6tW5/q9BDVdMpB8tOHljX9OSP0jRC5TRNVA4qRc839t4g8KQaR8t0Uv0EFVL0MlyG7m/ofjEgAROtYsA==" + "resolved" "https://registry.npmjs.org/get-installed-path/-/get-installed-path-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "global-modules" "1.0.0" + +"get-installed-path@^4.0.8": + "integrity" "sha512-PmANK1xElIHlHH2tXfOoTnSDUjX1X3GvKK6ZyLbUnSCCn1pADwu67eVWttuPzJWrXDDT2MfO6uAaKILOFfitmA==" + "resolved" "https://registry.npmjs.org/get-installed-path/-/get-installed-path-4.0.8.tgz" + "version" "4.0.8" + dependencies: + "global-modules" "1.0.0" + "get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1": "integrity" "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" @@ -7123,6 +9347,11 @@ "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz" "version" "3.0.0" +"get-stream@^4.0.0": + "version" "4.1.0" + dependencies: + "pump" "^3.0.0" + "get-stream@^4.1.0": "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" @@ -7170,6 +9399,29 @@ "resolved" "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" "version" "0.0.0" +"glob-base@^0.3.0": + "integrity" "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=" + "resolved" "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "glob-parent" "^2.0.0" + "is-glob" "^2.0.0" + +"glob-parent@^2.0.0": + "integrity" "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "is-glob" "^2.0.0" + +"glob-parent@^3.0.0": + "integrity" "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "is-glob" "^3.1.0" + "path-dirname" "^1.0.0" + "glob-parent@^3.1.0": "integrity" "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=" "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" @@ -7185,6 +9437,20 @@ dependencies: "is-glob" "^4.0.1" +"glob-stream@^5.3.2": + "integrity" "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=" + "resolved" "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz" + "version" "5.3.5" + dependencies: + "extend" "^3.0.0" + "glob" "^5.0.3" + "glob-parent" "^3.0.0" + "micromatch" "^2.3.7" + "ordered-read-streams" "^0.3.0" + "through2" "^0.6.0" + "to-absolute-glob" "^0.1.1" + "unique-stream" "^2.0.2" + "glob@^5.0.15": "integrity" "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=" "resolved" "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" @@ -7196,7 +9462,18 @@ "once" "^1.3.0" "path-is-absolute" "^1.0.0" -"glob@^7.0.0", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6": +"glob@^5.0.3": + "integrity" "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=" + "resolved" "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" + "version" "5.0.15" + dependencies: + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "2 || 3" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^7.0.0", "glob@^7.1.1", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6": "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" "version" "7.2.0" @@ -7261,6 +9538,15 @@ dependencies: "ini" "^1.3.4" +"global-modules@^1.0.0", "global-modules@1.0.0": + "integrity" "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==" + "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "global-prefix" "^1.0.1" + "is-windows" "^1.0.1" + "resolve-dir" "^1.0.0" + "global-modules@^2.0.0": "integrity" "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==" "resolved" "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" @@ -7268,6 +9554,17 @@ dependencies: "global-prefix" "^3.0.0" +"global-prefix@^1.0.1": + "integrity" "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=" + "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "expand-tilde" "^2.0.2" + "homedir-polyfill" "^1.0.1" + "ini" "^1.3.4" + "is-windows" "^1.0.1" + "which" "^1.2.14" + "global-prefix@^3.0.0": "integrity" "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==" "resolved" "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" @@ -7316,6 +9613,30 @@ "merge2" "^1.2.3" "slash" "^3.0.0" +"globby@11.0.3": + "integrity" "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz" + "version" "11.0.3" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.1.1" + "ignore" "^5.1.4" + "merge2" "^1.3.0" + "slash" "^3.0.0" + +"globby@11.0.4": + "integrity" "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" + "version" "11.0.4" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.1.1" + "ignore" "^5.1.4" + "merge2" "^1.3.0" + "slash" "^3.0.0" + "google-protobuf@^3.13.0", "google-protobuf@^3.14.0", "google-protobuf@^3.17.3", "google-protobuf@^3.2.0": "integrity" "sha512-Isv1RlNC+IzZzilcxnlVSf+JvuhxmY7DaxYCBy+zPS9XVuJRtlTTIXR9hnZ1YL1MMusJn/7eSy2swCzZIomQSg==" "resolved" "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.19.1.tgz" @@ -7381,16 +9702,111 @@ "to-readable-stream" "^1.0.0" "url-parse-lax" "^3.0.0" -"graceful-fs@^4.1.10", "graceful-fs@^4.1.11", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.1.9", "graceful-fs@^4.2.0", "graceful-fs@^4.2.4": +"graceful-fs@^4.0.0", "graceful-fs@^4.1.10", "graceful-fs@^4.1.11", "graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.1.9", "graceful-fs@^4.2.0", "graceful-fs@^4.2.4", "graceful-fs@4.X": "integrity" "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" "version" "4.2.8" +"grapheme-splitter@^1.0.4": + "integrity" "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + "resolved" "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + "version" "1.0.4" + +"graphql-extensions@^0.15.0": + "integrity" "sha512-bVddVO8YFJPwuACn+3pgmrEg6I8iBuYLuwvxiE+lcQQ7POotVZxm2rgGw0PvVYmWWf3DT7nTVDZ5ROh/ALp8mA==" + "resolved" "https://registry.npmjs.org/graphql-extensions/-/graphql-extensions-0.15.0.tgz" + "version" "0.15.0" + dependencies: + "@apollographql/apollo-tools" "^0.5.0" + "apollo-server-env" "^3.1.0" + "apollo-server-types" "^0.9.0" + +"graphql-subscriptions@^1.0.0": + "integrity" "sha512-95yD/tKi24q8xYa7Q9rhQN16AYj5wPbrb8tmHGM3WRc9EBmWrG/0kkMl+tQG8wcEuE9ibR4zyOM31p5Sdr2v4g==" + "resolved" "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "iterall" "^1.3.0" + +"graphql-tag@^2.11.0", "graphql-tag@^2.12.3": + "integrity" "sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==" + "resolved" "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.12.6.tgz" + "version" "2.12.6" + dependencies: + "tslib" "^2.1.0" + +"graphql-tools@^4.0.8": + "integrity" "sha512-MW+ioleBrwhRjalKjYaLQbr+920pHBgy9vM/n47sswtns8+96sRn5M/G+J1eu7IMeKWiN/9p6tmwCHU7552VJg==" + "resolved" "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.8.tgz" + "version" "4.0.8" + dependencies: + "apollo-link" "^1.2.14" + "apollo-utilities" "^1.0.1" + "deprecated-decorator" "^0.1.6" + "iterall" "^1.1.3" + "uuid" "^3.1.0" + +"graphql-tools@^6.2.4": + "integrity" "sha512-OyhSvK5ALVVD6bFiWjAqv2+lRyvjIRfb6Br5Tkjrv++rxnXDodPH/zhMbDGRw+W3SD5ioGEEz84yO48iPiN7jA==" + "resolved" "https://registry.npmjs.org/graphql-tools/-/graphql-tools-6.2.6.tgz" + "version" "6.2.6" + dependencies: + "@graphql-tools/batch-delegate" "^6.2.6" + "@graphql-tools/code-file-loader" "^6.2.4" + "@graphql-tools/delegate" "^6.2.4" + "@graphql-tools/git-loader" "^6.2.4" + "@graphql-tools/github-loader" "^6.2.4" + "@graphql-tools/graphql-file-loader" "^6.2.4" + "@graphql-tools/graphql-tag-pluck" "^6.2.4" + "@graphql-tools/import" "^6.2.4" + "@graphql-tools/json-file-loader" "^6.2.4" + "@graphql-tools/links" "^6.2.4" + "@graphql-tools/load" "^6.2.4" + "@graphql-tools/load-files" "^6.2.4" + "@graphql-tools/merge" "^6.2.4" + "@graphql-tools/mock" "^6.2.4" + "@graphql-tools/module-loader" "^6.2.4" + "@graphql-tools/relay-operation-optimizer" "^6.2.4" + "@graphql-tools/resolvers-composition" "^6.2.4" + "@graphql-tools/schema" "^6.2.4" + "@graphql-tools/stitch" "^6.2.4" + "@graphql-tools/url-loader" "^6.2.4" + "@graphql-tools/utils" "^6.2.4" + "@graphql-tools/wrap" "^6.2.4" + "tslib" "~2.0.1" + +"graphql-ws@^4.4.1": + "integrity" "sha512-sHkK9+lUm20/BGawNEWNtVAeJzhZeBg21VmvmLoT5NdGVeZWv5PdIhkcayQIAgjSyyQ17WMKmbDijIPG2On+Ag==" + "resolved" "https://registry.npmjs.org/graphql-ws/-/graphql-ws-4.9.0.tgz" + "version" "4.9.0" + +"graphql@^0.10.5 || ^0.11.3 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.11.3 || ^0.12.3 || ^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.13.0 || ^14.0.0 || ^15.0.0", "graphql@^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", "graphql@^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", "graphql@^14.0.0 || ^15.0.0", "graphql@^14.0.0 || ^15.0.0 || ^16.0.0", "graphql@^14.2.1 || ^15.0.0", "graphql@^15.0.0", "graphql@^15.3.0", "graphql@>=0.10.0", "graphql@>=0.11 <=15", "graphql@0.13.1 - 15", "graphql@14 - 15": + "integrity" "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==" + "resolved" "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz" + "version" "15.8.0" + "growl@1.10.5": "integrity" "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" "resolved" "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" "version" "1.10.5" +"gulp-sourcemaps@^1.5.2": + "integrity" "sha1-tDfR89mAzyboEYSCNxjOFa5ll7Y=" + "resolved" "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.12.1.tgz" + "version" "1.12.1" + dependencies: + "@gulp-sourcemaps/map-sources" "1.X" + "acorn" "4.X" + "convert-source-map" "1.X" + "css" "2.X" + "debug-fabulous" "0.0.X" + "detect-newline" "2.X" + "graceful-fs" "4.X" + "source-map" "~0.6.0" + "strip-bom" "2.X" + "through2" "2.X" + "vinyl" "1.X" + "handlebars@^4.0.1": "integrity" "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==" "resolved" "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" @@ -7530,6 +9946,11 @@ "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" "version" "1.0.0" +"has-flag@^2.0.0": + "integrity" "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz" + "version" "2.0.0" + "has-flag@^3.0.0": "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" @@ -7632,7 +10053,7 @@ "inherits" "^2.0.3" "minimalistic-assert" "^1.0.0" -"he@1.2.0": +"he@^1.1.1", "he@1.2.0": "integrity" "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" "resolved" "https://registry.npmjs.org/he/-/he-1.2.0.tgz" "version" "1.2.0" @@ -7650,6 +10071,16 @@ "resolved" "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz" "version" "0.2.6" +"highlight.js@^10.4.1": + "integrity" "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==" + "resolved" "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz" + "version" "10.7.3" + +"highlightjs-solidity@^2.0.2": + "integrity" "sha512-q0aYUKiZ9MPQg41qx/KpXKaCpqql50qTvmwGYyLFfcjt9AE/+C9CwjVIdJZc7EYj6NGgJuFJ4im1gfgrzUU1fQ==" + "resolved" "https://registry.npmjs.org/highlightjs-solidity/-/highlightjs-solidity-2.0.2.tgz" + "version" "2.0.2" + "hmac-drbg@^1.0.0": "version" "1.0.1" dependencies: @@ -7666,6 +10097,13 @@ "minimalistic-assert" "^1.0.0" "minimalistic-crypto-utils" "^1.0.1" +"hoist-non-react-statics@^3.3.2": + "integrity" "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==" + "resolved" "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" + "version" "3.3.2" + dependencies: + "react-is" "^16.7.0" + "home-or-tmp@^2.0.0": "integrity" "sha1-42w/LSyufXRqhX440Y1fMqeILbg=" "resolved" "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz" @@ -7674,6 +10112,13 @@ "os-homedir" "^1.0.0" "os-tmpdir" "^1.0.1" +"homedir-polyfill@^1.0.1": + "integrity" "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==" + "resolved" "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "parse-passwd" "^1.0.0" + "hosted-git-info@^2.1.4", "hosted-git-info@^2.6.0": "integrity" "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" @@ -7691,6 +10136,16 @@ "inherits" "^2.0.1" "readable-stream" "^3.1.1" +"htmlparser2@^6.1.0": + "integrity" "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==" + "resolved" "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "domelementtype" "^2.0.1" + "domhandler" "^4.0.0" + "domutils" "^2.5.2" + "entities" "^2.0.0" + "htmlparser2@~3.8.1": "integrity" "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=" "resolved" "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz" @@ -7722,7 +10177,7 @@ "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz" "version" "3.8.1" -"http-errors@~1.7.2", "http-errors@1.7.3": +"http-errors@^1.7.3", "http-errors@~1.7.2", "http-errors@1.7.3": "integrity" "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==" "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz" "version" "1.7.3" @@ -7765,6 +10220,11 @@ "jsprim" "^1.2.2" "sshpk" "^1.7.0" +"https-browserify@^1.0.0": + "integrity" "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + "resolved" "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz" + "version" "1.0.0" + "https-proxy-agent@^5.0.0": "integrity" "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==" "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" @@ -7786,6 +10246,13 @@ "cheerio" "0.20.0" "color-logger" "0.0.3" +"iconv-lite@^0.4.4", "iconv-lite@0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + "iconv-lite@^0.6.2": "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" @@ -7793,13 +10260,6 @@ dependencies: "safer-buffer" ">= 2.1.2 < 3.0.0" -"iconv-lite@0.4.24": - "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" - "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - "version" "0.4.24" - dependencies: - "safer-buffer" ">= 2.1.2 < 3" - "idna-uts46-hx@^2.3.1": "integrity" "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==" "resolved" "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz" @@ -7807,17 +10267,24 @@ dependencies: "punycode" "2.1.0" -"ieee754@^1.1.13", "ieee754@^1.2.1": +"ieee754@^1.1.13", "ieee754@^1.1.4", "ieee754@^1.2.1": "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" "version" "1.2.1" -"ignore@^5.1.1": +"ignore-walk@^3.0.1": + "integrity" "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==" + "resolved" "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "minimatch" "^3.0.4" + +"ignore@^5.1.1", "ignore@^5.1.4": "integrity" "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==" "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz" "version" "5.1.9" -"immediate@^3.2.3", "immediate@~3.2.3": +"immediate@^3.2.2", "immediate@^3.2.3", "immediate@~3.2.3": "integrity" "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=" "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz" "version" "3.2.3" @@ -7827,11 +10294,26 @@ "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" "version" "3.0.6" +"immediate@3.0.6": + "integrity" "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" + "version" "3.0.6" + +"immediate@3.3.0": + "integrity" "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" + "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz" + "version" "3.3.0" + "immutable@^4.0.0-rc.12": "integrity" "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==" "resolved" "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz" "version" "4.0.0" +"immutable@~3.7.6": + "integrity" "sha1-E7TTyxK++hVIKib+Gy665kAHHks=" + "resolved" "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz" + "version" "3.7.6" + "import-fresh@^2.0.0": "integrity" "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=" "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz" @@ -7840,6 +10322,13 @@ "caller-path" "^2.0.0" "resolve-from" "^3.0.0" +"import-from@3.0.0": + "integrity" "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==" + "resolved" "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "resolve-from" "^5.0.0" + "imul@^1.0.0": "integrity" "sha1-nVhnFh6LPelsLDjV3HyxAvNeKsk=" "resolved" "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz" @@ -7868,6 +10357,11 @@ "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" "version" "2.0.1" +"inherits@2.0.1": + "integrity" "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + "version" "2.0.1" + "inherits@2.0.3": "integrity" "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" @@ -7900,7 +10394,7 @@ "from2" "^2.1.1" "p-is-promise" "^1.1.0" -"invariant@^2.2.2", "invariant@2": +"invariant@^2.2.2", "invariant@^2.2.4", "invariant@2": "integrity" "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==" "resolved" "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" "version" "2.2.4" @@ -7912,6 +10406,9 @@ "resolved" "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" "version" "1.0.0" +"invert-kv@^2.0.0": + "version" "2.0.0" + "io-ts@1.10.4": "integrity" "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==" "resolved" "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz" @@ -8208,11 +10705,23 @@ "resolved" "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" "version" "2.2.1" +"is-dotfile@^1.0.0": + "integrity" "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + "resolved" "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz" + "version" "1.0.3" + "is-electron@^2.2.0": "integrity" "sha512-SpMppC2XR3YdxSzczXReBjqs2zGscWQpBIKqwXYBFic0ERaxNVgwLCHwOLZeESfdJQjX0RDvrJ1lBXX2ij+G1Q==" "resolved" "https://registry.npmjs.org/is-electron/-/is-electron-2.2.0.tgz" "version" "2.2.0" +"is-equal-shallow@^0.1.3": + "integrity" "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=" + "resolved" "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz" + "version" "0.1.3" + dependencies: + "is-primitive" "^2.0.0" + "is-extendable@^0.1.0", "is-extendable@^0.1.1": "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" @@ -8225,6 +10734,11 @@ dependencies: "is-plain-object" "^2.0.4" +"is-extglob@^1.0.0": + "integrity" "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + "version" "1.0.0" + "is-extglob@^2.1.0", "is-extglob@^2.1.1": "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" @@ -8269,6 +10783,20 @@ dependencies: "has-tostringtag" "^1.0.0" +"is-glob@^2.0.0": + "integrity" "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "is-extglob" "^1.0.0" + +"is-glob@^2.0.1": + "integrity" "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "is-extglob" "^1.0.0" + "is-glob@^3.1.0": "integrity" "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=" "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" @@ -8283,6 +10811,13 @@ dependencies: "is-extglob" "^2.1.1" +"is-glob@4.0.1": + "integrity" "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "is-extglob" "^2.1.1" + "is-hex-prefixed@1.0.0": "integrity" "sha1-fY035q135dEnFIkTxXPggtd39VQ=" "resolved" "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" @@ -8335,6 +10870,13 @@ dependencies: "has-tostringtag" "^1.0.0" +"is-number@^2.1.0": + "integrity" "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "kind-of" "^3.0.2" + "is-number@^3.0.0": "integrity" "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=" "resolved" "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" @@ -8342,11 +10884,21 @@ dependencies: "kind-of" "^3.0.2" +"is-number@^4.0.0": + "integrity" "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz" + "version" "4.0.0" + "is-number@^7.0.0": "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" "version" "7.0.0" +"is-obj@^2.0.0": + "integrity" "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + "version" "2.0.0" + "is-object@^1.0.1": "integrity" "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==" "resolved" "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz" @@ -8381,6 +10933,21 @@ dependencies: "isobject" "^3.0.1" +"is-posix-bracket@^0.1.0": + "integrity" "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + "resolved" "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz" + "version" "0.1.1" + +"is-primitive@^2.0.0": + "integrity" "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + "resolved" "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" + "version" "2.0.0" + +"is-promise@4.0.0": + "integrity" "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + "resolved" "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz" + "version" "4.0.0" + "is-regex@^1.0.4", "is-regex@^1.1.1": "version" "1.1.1" dependencies: @@ -8414,12 +10981,7 @@ "resolved" "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz" "version" "1.0.1" -"is-stream@^1.0.0", "is-stream@^1.1.0": - "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" - "version" "1.1.0" - -"is-stream@^1.0.1": +"is-stream@^1.0.0", "is-stream@^1.0.1", "is-stream@^1.1.0": "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" "version" "1.1.0" @@ -8476,6 +11038,11 @@ "resolved" "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" "version" "0.2.1" +"is-valid-glob@^0.3.0": + "integrity" "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=" + "resolved" "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz" + "version" "0.3.0" + "is-weakref@^1.0.1": "integrity" "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==" "resolved" "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz" @@ -8483,7 +11050,7 @@ dependencies: "call-bind" "^1.0.0" -"is-windows@^1.0.2": +"is-windows@^1.0.1", "is-windows@^1.0.2": "integrity" "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" "resolved" "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" "version" "1.0.2" @@ -8495,16 +11062,16 @@ dependencies: "is-docker" "^2.0.0" +"isarray@^1.0.0", "isarray@~1.0.0", "isarray@1.0.0": + "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + "isarray@^2.0.5": "integrity" "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" "resolved" "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" "version" "2.0.5" -"isarray@~1.0.0", "isarray@1.0.0": - "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - "version" "1.0.0" - "isarray@0.0.1": "integrity" "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" "resolved" "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" @@ -8550,7 +11117,7 @@ "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" "version" "3.0.1" -"isomorphic-ws@^4.0.1": +"isomorphic-ws@^4.0.1", "isomorphic-ws@4.0.1": "integrity" "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==" "resolved" "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz" "version" "4.0.1" @@ -8662,6 +11229,11 @@ dependencies: "@babel/runtime" "^7.12.1" +"iterall@^1.1.3", "iterall@^1.2.1", "iterall@^1.3.0": + "integrity" "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==" + "resolved" "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz" + "version" "1.3.0" + "iterate-iterator@^1.0.1": "integrity" "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==" "resolved" "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz" @@ -8939,6 +11511,11 @@ "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" "version" "3.0.0" +"json-loader@^0.5.4": + "integrity" "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" + "resolved" "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz" + "version" "0.5.7" + "json-parse-better-errors@^1.0.1": "integrity" "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" "resolved" "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" @@ -8980,11 +11557,26 @@ "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" "version" "0.4.1" +"json-schema-traverse@^1.0.0": + "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + "version" "1.0.0" + +"json-schema-typed@^7.0.3": + "integrity" "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==" + "resolved" "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz" + "version" "7.0.3" + "json-schema@0.2.3": "integrity" "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" "resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz" "version" "0.2.3" +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + "json-stable-stringify@^1.0.1": "integrity" "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=" "resolved" "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" @@ -9004,11 +11596,26 @@ dependencies: "delimit-stream" "0.1.0" +"json-to-ast@^2.0.3": + "integrity" "sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==" + "resolved" "https://registry.npmjs.org/json-to-ast/-/json-to-ast-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "code-error-fragment" "0.0.230" + "grapheme-splitter" "^1.0.4" + "json5@^0.5.1": "integrity" "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" "resolved" "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz" "version" "0.5.1" +"json5@^1.0.1": + "integrity" "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==" + "resolved" "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "minimist" "^1.2.0" + "json5@^2.1.2": "integrity" "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" @@ -9016,6 +11623,14 @@ dependencies: "minimist" "^1.2.5" +"jsondown@^1.0.0": + "integrity" "sha512-p6XxPaq59aXwcdDQV3ISMA5xk+1z6fJuctcwwSdR9iQgbYOcIrnknNrhcMGG+0FaUfKHGkdDpQNaZrovfBoyOw==" + "resolved" "https://registry.npmjs.org/jsondown/-/jsondown-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "memdown" "1.4.1" + "mkdirp" "0.5.1" + "jsonfile@^2.1.0": "integrity" "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=" "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz" @@ -9044,6 +11659,11 @@ "resolved" "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" "version" "0.0.0" +"jsonpointer@^4.0.1": + "integrity" "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==" + "resolved" "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz" + "version" "4.1.0" + "jsonschema@^1.2.4": "integrity" "sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==" "resolved" "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz" @@ -9143,6 +11763,23 @@ optionalDependencies: "graceful-fs" "^4.1.9" +"lazy-cache@^1.0.3": + "integrity" "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + "resolved" "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz" + "version" "1.0.4" + +"lazy-debug-legacy@0.0.X": + "integrity" "sha1-U3cWwHduTPeePtG2IfdljCkRsbE=" + "resolved" "https://registry.npmjs.org/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz" + "version" "0.0.1" + +"lazystream@^1.0.0": + "integrity" "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==" + "resolved" "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "readable-stream" "^2.0.5" + "lcid@^1.0.0": "integrity" "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=" "resolved" "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" @@ -9150,6 +11787,11 @@ dependencies: "invert-kv" "^1.0.0" +"lcid@^2.0.0": + "version" "2.0.0" + dependencies: + "invert-kv" "^2.0.0" + "leb128@0.0.5": "integrity" "sha512-elbNtfmu3GndZbesVF6+iQAfVjOXW9bM/aax9WwMlABZW+oK9sbAZEXoewaPHmL34sxa8kVwWsru8cNE/yn2gg==" "resolved" "https://registry.npmjs.org/leb128/-/leb128-0.0.5.tgz" @@ -9158,7 +11800,7 @@ "bn.js" "^5.0.0" "buffer-pipe" "0.0.3" -"level-codec@^9.0.0": +"level-codec@^9.0.0", "level-codec@9.0.2": "integrity" "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==" "resolved" "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz" "version" "9.0.2" @@ -9170,6 +11812,11 @@ "resolved" "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz" "version" "7.0.1" +"level-codec@9.0.1": + "integrity" "sha512-ajFP0kJ+nyq4i6kptSM+mAvJKLOg1X5FiFPtLG9M5gCEZyBmgDi3FkDrvlMkEzrUn1cWxtvVmrvoS4ASyO/q+Q==" + "resolved" "https://registry.npmjs.org/level-codec/-/level-codec-9.0.1.tgz" + "version" "9.0.1" + "level-concat-iterator@~2.0.0": "integrity" "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==" "resolved" "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz" @@ -9226,6 +11873,17 @@ "readable-stream" "^3.4.0" "xtend" "^4.0.2" +"level-js@^4.0.0": + "integrity" "sha512-PeGjZsyMG4O89KHiez1zoMJxStnkM+oBIqgACjoo5PJqFiSUUm3GNod/KcbqN5ktyZa8jkG7I1T0P2u6HN9lIg==" + "resolved" "https://registry.npmjs.org/level-js/-/level-js-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "abstract-leveldown" "~6.0.1" + "immediate" "~3.2.3" + "inherits" "^2.0.3" + "ltgt" "^2.1.2" + "typedarray-to-buffer" "~3.1.5" + "level-mem@^3.0.1": "integrity" "sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg==" "resolved" "https://registry.npmjs.org/level-mem/-/level-mem-3.0.1.tgz" @@ -9242,6 +11900,14 @@ "level-packager" "^5.0.3" "memdown" "^5.0.0" +"level-packager@^5.0.0": + "integrity" "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==" + "resolved" "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "encoding-down" "^6.3.0" + "levelup" "^4.3.2" + "level-packager@^5.0.3": "integrity" "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==" "resolved" "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz" @@ -9286,7 +11952,14 @@ "resolved" "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz" "version" "1.0.1" dependencies: - "xtend" "^4.0.2" + "xtend" "^4.0.2" + +"level-write-stream@1.0.0": + "integrity" "sha1-P3+7Z5pVE3wP6zA97nZuEu4Twdw=" + "resolved" "https://registry.npmjs.org/level-write-stream/-/level-write-stream-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "end-stream" "~0.1.0" "level-ws@^1.0.0": "integrity" "sha512-RXEfCmkd6WWFlArh3X8ONvQPm8jNpfA0s/36M4QzLqrLEIt1iJE9WBHLZ5vZJK6haMjJPJGJCQWfjMNnRcq/9Q==" @@ -9314,6 +11987,26 @@ "readable-stream" "~1.0.15" "xtend" "~2.1.1" +"level@5.0.1": + "integrity" "sha512-wcak5OQeA4rURGacqS62R/xNHjCYnJSQDBOlm4KNUGJVE9bWv2B04TclqReYejN+oD65PzD4FsqeWoI5wNC5Lg==" + "resolved" "https://registry.npmjs.org/level/-/level-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "level-js" "^4.0.0" + "level-packager" "^5.0.0" + "leveldown" "^5.0.0" + "opencollective-postinstall" "^2.0.0" + +"leveldown@^5.0.0", "leveldown@5.0.2": + "integrity" "sha512-Ib6ygFYBleS8x2gh3C1AkVsdrUShqXpe6jSTnZ6sRycEXKhqVf+xOSkhgSnjidpPzyv0d95LJVFrYQ4NuXAqHA==" + "resolved" "https://registry.npmjs.org/leveldown/-/leveldown-5.0.2.tgz" + "version" "5.0.2" + dependencies: + "abstract-leveldown" "~6.0.0" + "fast-future" "~1.0.2" + "napi-macros" "~1.8.1" + "node-gyp-build" "~3.8.0" + "levelup@^1.2.1": "integrity" "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==" "resolved" "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz" @@ -9348,6 +12041,27 @@ "level-supports" "~1.0.0" "xtend" "~4.0.0" +"levelup@4.0.2": + "integrity" "sha512-cx9PmLENwbGA3svWBEbeO2HazpOSOYSXH4VA+ahVpYyurvD+SDSfURl29VBY2qgyk+Vfy2dJd71SBRckj/EZVA==" + "resolved" "https://registry.npmjs.org/levelup/-/levelup-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "deferred-leveldown" "~5.0.0" + "level-errors" "~2.0.0" + "level-iterator-stream" "~4.0.0" + "xtend" "~4.0.0" + +"levelup@4.4.0": + "integrity" "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==" + "resolved" "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz" + "version" "4.4.0" + dependencies: + "deferred-leveldown" "~5.3.0" + "level-errors" "~2.0.0" + "level-iterator-stream" "~4.0.0" + "level-supports" "~1.0.0" + "xtend" "~4.0.0" + "leven@^3.1.0": "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" @@ -9390,7 +12104,7 @@ "resolved" "https://registry.npmjs.org/linked-list/-/linked-list-0.1.0.tgz" "version" "0.1.0" -"load-json-file@^1.0.0": +"load-json-file@^1.0.0", "load-json-file@^1.1.0": "integrity" "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=" "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" "version" "1.1.0" @@ -9401,6 +12115,30 @@ "pinkie-promise" "^2.0.0" "strip-bom" "^2.0.0" +"load-json-file@^2.0.0": + "integrity" "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=" + "resolved" "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "graceful-fs" "^4.1.2" + "parse-json" "^2.2.0" + "pify" "^2.0.0" + "strip-bom" "^3.0.0" + +"loader-runner@^2.3.0": + "integrity" "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz" + "version" "2.4.0" + +"loader-utils@^1.1.0": + "integrity" "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "big.js" "^5.2.2" + "emojis-list" "^3.0.0" + "json5" "^1.0.1" + "localforage@^1.3.0", "localforage@^1.9.0": "integrity" "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==" "resolved" "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz" @@ -9443,11 +12181,26 @@ "resolved" "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" "version" "4.17.21" +"lodash._reinterpolate@^3.0.0", "lodash._reinterpolate@~3.0.0": + "integrity" "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + "resolved" "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz" + "version" "3.0.0" + "lodash.assign@^4.0.3", "lodash.assign@^4.0.6": "integrity" "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" "resolved" "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz" "version" "4.2.0" +"lodash.assignin@^4.2.0": + "integrity" "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" + "resolved" "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz" + "version" "4.2.0" + +"lodash.assigninwith@^4.0.0": + "integrity" "sha1-rwLJhDKshtk9ppW0voAUAZcXNq8=" + "resolved" "https://registry.npmjs.org/lodash.assigninwith/-/lodash.assigninwith-4.2.0.tgz" + "version" "4.2.0" + "lodash.clonedeep@^4.5.0": "integrity" "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" "resolved" "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" @@ -9468,12 +12221,12 @@ "resolved" "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz" "version" "4.4.2" -"lodash.isequal@^4.5.0": +"lodash.isequal@^4.0.0", "lodash.isequal@^4.5.0": "integrity" "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" "resolved" "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" "version" "4.5.0" -"lodash.keys@^4.2.0": +"lodash.keys@^4.0.0", "lodash.keys@^4.2.0": "integrity" "sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU=" "resolved" "https://registry.npmjs.org/lodash.keys/-/lodash.keys-4.2.0.tgz" "version" "4.2.0" @@ -9493,11 +12246,50 @@ "resolved" "https://registry.npmjs.org/lodash.partition/-/lodash.partition-4.6.0.tgz" "version" "4.6.0" +"lodash.pick@^4.4.0": + "integrity" "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + "resolved" "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz" + "version" "4.4.0" + +"lodash.rest@^4.0.0": + "integrity" "sha1-lU73UEkmIDjJbR/Jiyj9r58Hcqo=" + "resolved" "https://registry.npmjs.org/lodash.rest/-/lodash.rest-4.0.5.tgz" + "version" "4.0.5" + +"lodash.sortby@^4.7.0": + "integrity" "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + "resolved" "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" + "version" "4.7.0" + "lodash.sum@^4.0.2": "integrity" "sha1-rZDjl5ZdgD1PH/eqWy0Bl/O0Y3s=" "resolved" "https://registry.npmjs.org/lodash.sum/-/lodash.sum-4.0.2.tgz" "version" "4.0.2" +"lodash.template@4.2.4": + "integrity" "sha1-0FPBno50442WW/T7SV2A8Qnn96Q=" + "resolved" "https://registry.npmjs.org/lodash.template/-/lodash.template-4.2.4.tgz" + "version" "4.2.4" + dependencies: + "lodash._reinterpolate" "~3.0.0" + "lodash.assigninwith" "^4.0.0" + "lodash.keys" "^4.0.0" + "lodash.rest" "^4.0.0" + "lodash.templatesettings" "^4.0.0" + "lodash.tostring" "^4.0.0" + +"lodash.templatesettings@^4.0.0": + "integrity" "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==" + "resolved" "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "lodash._reinterpolate" "^3.0.0" + +"lodash.tostring@^4.0.0": + "integrity" "sha1-Vgwn0fjq3eA8LM4Zj+9cAx2CmPs=" + "resolved" "https://registry.npmjs.org/lodash.tostring/-/lodash.tostring-4.1.4.tgz" + "version" "4.1.4" + "lodash.without@^4.4.0": "integrity" "sha1-PNRXSgC2e643OpS3SHcmQFB7eqw=" "resolved" "https://registry.npmjs.org/lodash.without/-/lodash.without-4.4.0.tgz" @@ -9513,7 +12305,7 @@ "resolved" "https://registry.npmjs.org/lodash.zipwith/-/lodash.zipwith-4.2.0.tgz" "version" "4.2.0" -"lodash@^4.1.0", "lodash@^4.15.0", "lodash@^4.17.11", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.19", "lodash@^4.17.20", "lodash@^4.17.21", "lodash@^4.17.4", "lodash@^4.2.1": +"lodash@^4.1.0", "lodash@^4.15.0", "lodash@^4.17.11", "lodash@^4.17.14", "lodash@^4.17.15", "lodash@^4.17.19", "lodash@^4.17.20", "lodash@^4.17.21", "lodash@^4.17.4", "lodash@^4.2.1", "lodash@4.17.21": "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" "version" "4.17.21" @@ -9523,6 +12315,13 @@ "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz" "version" "4.17.20" +"log-symbols@^2.2.0": + "integrity" "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "chalk" "^2.0.1" + "log-symbols@3.0.0": "integrity" "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==" "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" @@ -9545,7 +12344,7 @@ "chalk" "^4.1.0" "is-unicode-supported" "^0.1.0" -"loglevel@^1.6.6", "loglevel@^1.6.8", "loglevel@^1.7.0": +"loglevel@^1.6.6", "loglevel@^1.6.7", "loglevel@^1.6.8", "loglevel@^1.7.0": "integrity" "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==" "resolved" "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz" "version" "1.7.1" @@ -9555,6 +12354,11 @@ "resolved" "https://registry.npmjs.org/long/-/long-4.0.0.tgz" "version" "4.0.0" +"longest@^1.0.1": + "integrity" "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + "resolved" "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz" + "version" "1.0.1" + "looper@^2.0.0": "integrity" "sha1-Zs0Md0rz1P7axTeU90LbVtqPCew=" "resolved" "https://registry.npmjs.org/looper/-/looper-2.0.0.tgz" @@ -9565,7 +12369,7 @@ "resolved" "https://registry.npmjs.org/looper/-/looper-3.0.0.tgz" "version" "3.0.0" -"loose-envify@^1.0.0", "loose-envify@^1.1.0": +"loose-envify@^1.0.0", "loose-envify@^1.1.0", "loose-envify@^1.4.0": "integrity" "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==" "resolved" "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" "version" "1.4.0" @@ -9584,6 +12388,13 @@ "resolved" "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz" "version" "1.1.4" +"lower-case@^2.0.2": + "integrity" "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==" + "resolved" "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "tslib" "^2.0.3" + "lowercase-keys@^1.0.0", "lowercase-keys@^1.0.1": "integrity" "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" @@ -9611,6 +12422,14 @@ dependencies: "pseudomap" "^1.0.1" +"lru-cache@^4.0.1": + "integrity" "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + "version" "4.1.5" + dependencies: + "pseudomap" "^1.0.2" + "yallist" "^2.1.2" + "lru-cache@^5.1.1", "lru-cache@5.1.1": "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==" "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" @@ -9625,16 +12444,16 @@ dependencies: "yallist" "^4.0.0" -"ltgt@^2.1.2", "ltgt@~2.1.1": - "integrity" "sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ=" - "resolved" "https://registry.npmjs.org/ltgt/-/ltgt-2.1.3.tgz" - "version" "2.1.3" - -"ltgt@~2.2.0": +"ltgt@^2.1.2", "ltgt@~2.2.0", "ltgt@2.2.1": "integrity" "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" "resolved" "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz" "version" "2.2.1" +"ltgt@~2.1.1": + "integrity" "sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ=" + "resolved" "https://registry.npmjs.org/ltgt/-/ltgt-2.1.3.tgz" + "version" "2.1.3" + "make-dir@^1.0.0", "make-dir@^1.2.0": "integrity" "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==" "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz" @@ -9654,11 +12473,21 @@ dependencies: "tmpl" "1.0.5" +"map-age-cleaner@^0.1.1": + "version" "0.1.3" + dependencies: + "p-defer" "^1.0.0" + "map-cache@^0.2.2": "integrity" "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" "resolved" "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" "version" "0.2.2" +"map-stream@0.0.6": + "integrity" "sha1-0u9OuBGihkTHqJiZhcacL91JaCc=" + "resolved" "https://registry.npmjs.org/map-stream/-/map-stream-0.0.6.tgz" + "version" "0.0.6" + "map-visit@^1.0.0": "integrity" "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=" "resolved" "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" @@ -9681,6 +12510,11 @@ "resolved" "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz" "version" "1.2.6" +"math-random@^1.0.1": + "integrity" "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" + "resolved" "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz" + "version" "1.0.4" + "mathjs@^9.5.1": "integrity" "sha512-c0erTq0GP503/Ch2OtDOAn50GIOsuxTMjmE00NI/vKJFSWrDaQHRjx6ai+16xYv70yBSnnpUgHZGNf9FR9IwmA==" "resolved" "https://registry.npmjs.org/mathjs/-/mathjs-9.5.2.tgz" @@ -9715,6 +12549,20 @@ "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" "version" "0.3.0" +"mem@^1.1.0": + "integrity" "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=" + "resolved" "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "mimic-fn" "^1.0.0" + +"mem@^4.0.0": + "version" "4.3.0" + dependencies: + "map-age-cleaner" "^0.1.1" + "mimic-fn" "^2.0.0" + "p-is-promise" "^2.0.0" + "memdown@^1.0.0": "integrity" "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=" "resolved" "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz" @@ -9751,6 +12599,26 @@ "ltgt" "~2.2.0" "safe-buffer" "~5.1.1" +"memdown@1.4.1": + "integrity" "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=" + "resolved" "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "abstract-leveldown" "~2.7.1" + "functional-red-black-tree" "^1.0.1" + "immediate" "^3.2.3" + "inherits" "~2.0.1" + "ltgt" "~2.2.0" + "safe-buffer" "~5.1.1" + +"memory-fs@^0.4.0", "memory-fs@~0.4.1": + "integrity" "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=" + "resolved" "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "errno" "^0.1.3" + "readable-stream" "^2.0.1" + "memorystream@^0.3.1": "integrity" "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" "resolved" "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" @@ -9768,6 +12636,13 @@ dependencies: "is-plain-obj" "^2.0.0" +"merge-stream@^1.0.0": + "integrity" "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "readable-stream" "^2.0.1" + "merge-stream@^2.0.0": "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" @@ -9831,11 +12706,35 @@ "rlp" "^2.2.4" "semaphore-async-await" "^1.5.1" +"meros@1.1.4": + "integrity" "sha512-E9ZXfK9iQfG9s73ars9qvvvbSIkJZF5yOo9j4tcwM5tN8mUKfj/EKN5PzOr3ZH0y5wL7dLAHw3RVEfpQV9Q7VQ==" + "resolved" "https://registry.npmjs.org/meros/-/meros-1.1.4.tgz" + "version" "1.1.4" + "methods@~1.1.2": "integrity" "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" "version" "1.1.2" +"micromatch@^2.3.7": + "integrity" "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz" + "version" "2.3.11" + dependencies: + "arr-diff" "^2.0.0" + "array-unique" "^0.2.1" + "braces" "^1.8.2" + "expand-brackets" "^0.1.4" + "extglob" "^0.3.1" + "filename-regex" "^2.0.0" + "is-extglob" "^1.0.0" + "is-glob" "^2.0.1" + "kind-of" "^3.0.2" + "normalize-path" "^2.0.1" + "object.omit" "^2.0.0" + "parse-glob" "^3.0.4" + "regex-cache" "^0.4.2" + "micromatch@^3.1.10", "micromatch@^3.1.4": "integrity" "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==" "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" @@ -9891,11 +12790,24 @@ "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" "version" "1.6.0" +"mimic-fn@^1.0.0": + "integrity" "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" + "version" "1.2.0" + +"mimic-fn@^2.0.0": + "version" "2.1.0" + "mimic-fn@^2.1.0": "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" "version" "2.1.0" +"mimic-fn@^3.0.0": + "integrity" "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz" + "version" "3.1.0" + "mimic-response@^1.0.0", "mimic-response@^1.0.1": "integrity" "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" @@ -9913,6 +12825,11 @@ dependencies: "dom-walk" "^0.1.0" +"min-indent@^1.0.0": + "integrity" "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" + "resolved" "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + "version" "1.0.1" + "minimalistic-assert@^1.0.0", "minimalistic-assert@^1.0.1": "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" @@ -9935,6 +12852,11 @@ "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" "version" "1.2.5" +"minimist@0.0.8": + "integrity" "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + "version" "0.0.8" + "minimist@1.2.0": "integrity" "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" @@ -9980,7 +12902,7 @@ dependencies: "mkdirp" "*" -"mkdirp@*", "mkdirp@^0.5.0", "mkdirp@^0.5.1", "mkdirp@^0.5.5", "mkdirp@~0.5.1", "mkdirp@0.5.5", "mkdirp@0.5.x": +"mkdirp@*", "mkdirp@^0.5.0", "mkdirp@^0.5.1", "mkdirp@^0.5.5", "mkdirp@~0.5.0", "mkdirp@~0.5.1", "mkdirp@0.5.5", "mkdirp@0.5.x": "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" "version" "0.5.5" @@ -9992,6 +12914,13 @@ "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" "version" "1.0.4" +"mkdirp@0.5.1": + "integrity" "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" + "version" "0.5.1" + dependencies: + "minimist" "0.0.8" + "mnemonist@^0.38.0": "integrity" "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==" "resolved" "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz" @@ -10138,6 +13067,19 @@ "resolved" "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz" "version" "4.14.0" +"module@^1.2.5": + "integrity" "sha1-tQPrBs3BNHP1aBhCaXTN5+xZvxU=" + "resolved" "https://registry.npmjs.org/module/-/module-1.2.5.tgz" + "version" "1.2.5" + dependencies: + "chalk" "1.1.3" + "concat-stream" "1.5.1" + "lodash.template" "4.2.4" + "map-stream" "0.0.6" + "tildify" "1.2.0" + "vinyl-fs" "2.4.3" + "yargs" "4.6.0" + "ms@^2.1.1", "ms@2.1.2": "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" @@ -10321,6 +13263,11 @@ "resolved" "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz" "version" "2.15.0" +"nano-base32@^1.0.1": + "integrity" "sha1-ulSMh578+5DaHE2eCX20pGySVe8=" + "resolved" "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz" + "version" "1.0.1" + "nano-json-stream-parser@^0.1.2": "integrity" "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" "resolved" "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz" @@ -10358,6 +13305,11 @@ "resolved" "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" "version" "1.0.2" +"napi-macros@~1.8.1": + "integrity" "sha512-Tr0DNY4RzTaBG2W2m3l7ZtFuJChTH6VZhXVhkGGjF/4cZTt+i8GcM9ozD+30Lmr4mDoZ5Xx34t2o4GJqYWDGcg==" + "resolved" "https://registry.npmjs.org/napi-macros/-/napi-macros-1.8.2.tgz" + "version" "1.8.2" + "native-abort-controller@^1.0.3": "integrity" "sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==" "resolved" "https://registry.npmjs.org/native-abort-controller/-/native-abort-controller-1.0.4.tgz" @@ -10412,16 +13364,32 @@ "mkdirp" "~0.5.1" "underscore" "~1.4.4" +"needle@^2.2.1": + "integrity" "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==" + "resolved" "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz" + "version" "2.9.1" + dependencies: + "debug" "^3.2.6" + "iconv-lite" "^0.4.4" + "sax" "^1.2.4" + "negotiator@0.6.2": "integrity" "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" "version" "0.6.2" -"neo-async@^2.6.0": +"neo-async@^2.5.0", "neo-async@^2.6.0": "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" "version" "2.6.2" +"neodoc@^2.0.2": + "integrity" "sha512-NAppJ0YecKWdhSXFYCHbo6RutiX8vOt/Jo3l46mUg6pQlpJNaqc5cGxdrW2jITQm5JIYySbFVPDl3RrREXNyPw==" + "resolved" "https://registry.npmjs.org/neodoc/-/neodoc-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "ansi-regex" "^2.0.0" + "next-tick@~1.0.0": "integrity" "sha1-yobR/ogoFpsBICCOPchCS524NCw=" "resolved" "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz" @@ -10439,6 +13407,14 @@ dependencies: "lower-case" "^1.1.1" +"no-case@^3.0.4": + "integrity" "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==" + "resolved" "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "lower-case" "^2.0.2" + "tslib" "^2.0.3" + "node-abi@^2.18.0", "node-abi@^2.21.0", "node-abi@^2.7.0": "integrity" "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==" "resolved" "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz" @@ -10494,6 +13470,21 @@ "node-fetch@2.1.2": "version" "2.1.2" +"node-fetch@2.4.1": + "integrity" "sha512-P9UbpFK87NyqBZzUuDBDz4f6Yiys8xm8j7ACDbi6usvFm6KItklQUKjeoqTrYS/S1k6I8oaOC2YLLDr/gg26Mw==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.4.1.tgz" + "version" "2.4.1" + +"node-fetch@2.6.0": + "integrity" "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz" + "version" "2.6.0" + +"node-fetch@2.6.1": + "integrity" "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz" + "version" "2.6.1" + "node-forge@^0.10.0": "integrity" "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" "resolved" "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz" @@ -10504,6 +13495,11 @@ "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz" "version" "4.3.0" +"node-gyp-build@~3.8.0": + "integrity" "sha512-bYbpIHyRqZ7sVWXxGpz8QIRug5JZc/hzZH4GbdT9HTZi6WmKCZ8GLvP8OZ9TTiIBvwPFKgtGrlWQSXDAvYdsPw==" + "resolved" "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.8.0.tgz" + "version" "3.8.0" + "node-hid@1.3.0": "integrity" "sha512-BA6G4V84kiNd1uAChub/Z/5s/xS3EHBCxotQ0nyYrUG65mXewUDHE1tWOSqA2dp3N+mV0Ffq9wo2AW9t4p/G7g==" "resolved" "https://registry.npmjs.org/node-hid/-/node-hid-1.3.0.tgz" @@ -10535,11 +13531,56 @@ dependencies: "shallowequal" "^1.0.2" +"node-libs-browser@^2.0.0": + "integrity" "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==" + "resolved" "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz" + "version" "2.2.1" + dependencies: + "assert" "^1.1.1" + "browserify-zlib" "^0.2.0" + "buffer" "^4.3.0" + "console-browserify" "^1.1.0" + "constants-browserify" "^1.0.0" + "crypto-browserify" "^3.11.0" + "domain-browser" "^1.1.1" + "events" "^3.0.0" + "https-browserify" "^1.0.0" + "os-browserify" "^0.3.0" + "path-browserify" "0.0.1" + "process" "^0.11.10" + "punycode" "^1.2.4" + "querystring-es3" "^0.2.0" + "readable-stream" "^2.3.3" + "stream-browserify" "^2.0.1" + "stream-http" "^2.7.2" + "string_decoder" "^1.0.0" + "timers-browserify" "^2.0.4" + "tty-browserify" "0.0.0" + "url" "^0.11.0" + "util" "^0.11.0" + "vm-browserify" "^1.0.1" + "node-modules-regexp@^1.0.0": "integrity" "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" "resolved" "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz" "version" "1.0.0" +"node-pre-gyp@^0.11.0": + "integrity" "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==" + "resolved" "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz" + "version" "0.11.0" + dependencies: + "detect-libc" "^1.0.2" + "mkdirp" "^0.5.1" + "needle" "^2.2.1" + "nopt" "^4.0.1" + "npm-packlist" "^1.1.6" + "npmlog" "^4.0.2" + "rc" "^1.2.7" + "rimraf" "^2.6.1" + "semver" "^5.3.0" + "tar" "^4" + "node-releases@^2.0.1": "integrity" "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz" @@ -10555,11 +13596,24 @@ "resolved" "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz" "version" "3.1.0" +"noop-fn@^1.0.0": + "integrity" "sha1-XzPUfxPSFQ35PgywNmmemC94/78=" + "resolved" "https://registry.npmjs.org/noop-fn/-/noop-fn-1.0.0.tgz" + "version" "1.0.0" + "noop-logger@^0.1.1": "integrity" "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" "resolved" "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz" "version" "0.1.1" +"nopt@^4.0.1": + "integrity" "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "abbrev" "1" + "osenv" "^0.1.4" + "nopt@3.x": "integrity" "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=" "resolved" "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" @@ -10577,6 +13631,13 @@ "semver" "2 || 3 || 4 || 5" "validate-npm-package-license" "^3.0.1" +"normalize-path@^2.0.1": + "integrity" "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "remove-trailing-separator" "^1.0.1" + "normalize-path@^2.1.1": "integrity" "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=" "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" @@ -10601,6 +13662,13 @@ "query-string" "^5.0.1" "sort-keys" "^2.0.0" +"npm-bundled@^1.0.1": + "integrity" "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==" + "resolved" "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "npm-normalize-package-bin" "^1.0.1" + "npm-conf@^1.1.0": "integrity" "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==" "resolved" "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz" @@ -10609,7 +13677,28 @@ "config-chain" "^1.1.11" "pify" "^3.0.0" -"npmlog@^4.0.1": +"npm-normalize-package-bin@^1.0.1": + "integrity" "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + "resolved" "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz" + "version" "1.0.1" + +"npm-packlist@^1.1.6": + "integrity" "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==" + "resolved" "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz" + "version" "1.4.8" + dependencies: + "ignore-walk" "^3.0.1" + "npm-bundled" "^1.0.1" + "npm-normalize-package-bin" "^1.0.1" + +"npm-run-path@^2.0.0": + "integrity" "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "path-key" "^2.0.0" + +"npmlog@^4.0.1", "npmlog@^4.0.2": "integrity" "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==" "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" "version" "4.1.2" @@ -10619,6 +13708,13 @@ "gauge" "~2.7.3" "set-blocking" "~2.0.0" +"nth-check@^2.0.0": + "integrity" "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==" + "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "boolbase" "^1.0.0" + "nth-check@~1.0.1": "integrity" "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==" "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" @@ -10626,6 +13722,11 @@ dependencies: "boolbase" "~1.0.0" +"nullthrows@^1.1.1": + "integrity" "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==" + "resolved" "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz" + "version" "1.1.1" + "number-is-nan@^1.0.0": "integrity" "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" "resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" @@ -10654,6 +13755,11 @@ "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" "version" "4.1.1" +"object-assign@4.1.0": + "integrity" "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz" + "version" "4.1.0" + "object-copy@^0.1.0": "integrity" "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=" "resolved" "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" @@ -10690,6 +13796,11 @@ "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" "version" "0.4.0" +"object-path@^0.11.4": + "integrity" "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==" + "resolved" "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz" + "version" "0.11.8" + "object-visit@^1.0.0": "integrity" "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=" "resolved" "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" @@ -10697,7 +13808,9 @@ dependencies: "isobject" "^3.0.0" -"object.assign@^4.1.1": +"object.assign@^4.1.0", "object.assign@^4.1.2": + "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" "version" "4.1.2" dependencies: "call-bind" "^1.0.0" @@ -10705,9 +13818,7 @@ "has-symbols" "^1.0.1" "object-keys" "^1.1.1" -"object.assign@^4.1.2": - "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" - "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" +"object.assign@^4.1.1": "version" "4.1.2" dependencies: "call-bind" "^1.0.0" @@ -10734,6 +13845,14 @@ "define-properties" "^1.1.3" "es-abstract" "^1.19.1" +"object.omit@^2.0.0": + "integrity" "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=" + "resolved" "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "for-own" "^0.1.4" + "is-extendable" "^0.1.1" + "object.pick@^1.3.0": "integrity" "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=" "resolved" "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" @@ -10774,7 +13893,14 @@ dependencies: "wrappy" "1" -"onetime@^5.1.0": +"onetime@^2.0.0": + "integrity" "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "mimic-fn" "^1.0.0" + +"onetime@^5.1.0", "onetime@^5.1.2": "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" "version" "5.1.2" @@ -10789,6 +13915,19 @@ "is-docker" "^2.0.0" "is-wsl" "^2.1.1" +"opencollective-postinstall@^2.0.0": + "integrity" "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" + "resolved" "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz" + "version" "2.0.3" + +"optimism@^0.16.1": + "integrity" "sha512-64i+Uw3otrndfq5kaoGNoY7pvOhSsjFEN4bdEFh80MWVk/dbgJfMv7VFDeCT8LxNAlEVhQmdVEbfE7X2nWNIIg==" + "resolved" "https://registry.npmjs.org/optimism/-/optimism-0.16.1.tgz" + "version" "0.16.1" + dependencies: + "@wry/context" "^0.6.0" + "@wry/trie" "^0.3.0" + "optionator@^0.8.1": "integrity" "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==" "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" @@ -10801,11 +13940,36 @@ "type-check" "~0.3.2" "word-wrap" "~1.2.3" +"ora@^3.4.0": + "integrity" "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==" + "resolved" "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz" + "version" "3.4.0" + dependencies: + "chalk" "^2.4.2" + "cli-cursor" "^2.1.0" + "cli-spinners" "^2.0.0" + "log-symbols" "^2.2.0" + "strip-ansi" "^5.2.0" + "wcwidth" "^1.0.1" + +"ordered-read-streams@^0.3.0": + "integrity" "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=" + "resolved" "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "is-stream" "^1.0.1" + "readable-stream" "^2.0.1" + "original-require@^1.0.1": "integrity" "sha1-DxMEcVhM0zURxew4yNWSE/msXiA=" "resolved" "https://registry.npmjs.org/original-require/-/original-require-1.0.1.tgz" "version" "1.0.1" +"os-browserify@^0.3.0": + "integrity" "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + "resolved" "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" + "version" "0.3.0" + "os-homedir@^1.0.0": "integrity" "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" "resolved" "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" @@ -10818,11 +13982,35 @@ dependencies: "lcid" "^1.0.0" -"os-tmpdir@^1.0.1", "os-tmpdir@~1.0.2": +"os-locale@^2.0.0": + "integrity" "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==" + "resolved" "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "execa" "^0.7.0" + "lcid" "^1.0.0" + "mem" "^1.1.0" + +"os-locale@^3.1.0": + "version" "3.1.0" + dependencies: + "execa" "^1.0.0" + "lcid" "^2.0.0" + "mem" "^4.0.0" + +"os-tmpdir@^1.0.0", "os-tmpdir@^1.0.1", "os-tmpdir@~1.0.2": "integrity" "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" "version" "1.0.2" +"osenv@^0.1.4": + "integrity" "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==" + "resolved" "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz" + "version" "0.1.5" + dependencies: + "os-homedir" "^1.0.0" + "os-tmpdir" "^1.0.0" + "p-cancelable@^0.3.0": "integrity" "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz" @@ -10838,6 +14026,9 @@ "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" "version" "1.1.0" +"p-defer@^1.0.0": + "version" "1.0.0" + "p-defer@^3.0.0": "integrity" "sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw==" "resolved" "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz" @@ -10868,6 +14059,9 @@ "resolved" "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz" "version" "1.1.0" +"p-is-promise@^2.0.0": + "version" "2.1.0" + "p-limit@^1.1.0": "integrity" "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==" "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" @@ -10896,6 +14090,13 @@ dependencies: "yocto-queue" "^0.1.0" +"p-limit@3.1.0": + "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "yocto-queue" "^0.1.0" + "p-locate@^2.0.0": "integrity" "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=" "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" @@ -10948,6 +14149,11 @@ "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" "version" "2.2.0" +"pako@~1.0.5": + "integrity" "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "resolved" "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + "version" "1.0.11" + "param-case@^2.1.0": "integrity" "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=" "resolved" "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz" @@ -10988,6 +14194,16 @@ "resolved" "https://registry.npmjs.org/parse-duration/-/parse-duration-0.4.4.tgz" "version" "0.4.4" +"parse-glob@^3.0.4": + "integrity" "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=" + "resolved" "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "glob-base" "^0.3.0" + "is-dotfile" "^1.0.0" + "is-extglob" "^1.0.0" + "is-glob" "^2.0.0" + "parse-headers@^2.0.0": "integrity" "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw==" "resolved" "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz" @@ -11008,6 +14224,18 @@ "error-ex" "^1.3.1" "json-parse-better-errors" "^1.0.1" +"parse-passwd@^1.0.0": + "integrity" "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + "resolved" "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" + "version" "1.0.0" + +"parse5-htmlparser2-tree-adapter@^6.0.1": + "integrity" "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==" + "resolved" "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "parse5" "^6.0.1" + "parse5@^1.5.1": "integrity" "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=" "resolved" "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz" @@ -11020,12 +14248,17 @@ dependencies: "@types/node" "*" -"parseurl@~1.3.3": +"parse5@^6.0.1": + "integrity" "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + "version" "6.0.1" + +"parseurl@^1.3.2", "parseurl@~1.3.3": "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" "version" "1.3.3" -"pascal-case@^2.0.0": +"pascal-case@^2.0.0", "pascal-case@^2.0.1": "integrity" "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=" "resolved" "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz" "version" "2.0.1" @@ -11033,6 +14266,22 @@ "camel-case" "^3.0.0" "upper-case-first" "^1.1.0" +"pascal-case@^3.1.1": + "integrity" "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==" + "resolved" "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "no-case" "^3.0.4" + "tslib" "^2.0.3" + +"pascal-case@^3.1.2": + "integrity" "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==" + "resolved" "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "no-case" "^3.0.4" + "tslib" "^2.0.3" + "pascalcase@^0.1.1": "integrity" "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" "resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" @@ -11080,6 +14329,11 @@ "resolved" "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz" "version" "1.0.1" +"path-browserify@0.0.1": + "integrity" "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + "resolved" "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz" + "version" "0.0.1" + "path-case@^2.1.0": "integrity" "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=" "resolved" "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz" @@ -11119,7 +14373,7 @@ "resolved" "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" "version" "1.0.2" -"path-key@^2.0.1": +"path-key@^2.0.0", "path-key@^2.0.1": "integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" "version" "2.0.1" @@ -11139,9 +14393,16 @@ "resolved" "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" "version" "1.1.0" dependencies: - "graceful-fs" "^4.1.2" + "graceful-fs" "^4.1.2" + "pify" "^2.0.0" + "pinkie-promise" "^2.0.0" + +"path-type@^2.0.0": + "integrity" "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz" + "version" "2.0.0" + dependencies: "pify" "^2.0.0" - "pinkie-promise" "^2.0.0" "path-type@^4.0.0": "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" @@ -11243,6 +14504,28 @@ dependencies: "node-modules-regexp" "^1.0.0" +"pkg-conf@^1.1.2": + "integrity" "sha1-N45W1v0T6Iv7b0ol33qD+qvduls=" + "resolved" "https://registry.npmjs.org/pkg-conf/-/pkg-conf-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "find-up" "^1.0.0" + "load-json-file" "^1.1.0" + "object-assign" "^4.0.1" + "symbol" "^0.2.1" + +"pkg-up@^3.1.0": + "integrity" "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==" + "resolved" "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "find-up" "^3.0.0" + +"pluralize@^8.0.0": + "integrity" "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" + "resolved" "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" + "version" "8.0.0" + "posix-character-classes@^0.1.0": "integrity" "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" "resolved" "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" @@ -11253,6 +14536,278 @@ "resolved" "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz" "version" "2.1.0" +"pouchdb-abstract-mapreduce@7.2.2": + "integrity" "sha512-7HWN/2yV2JkwMnGnlp84lGvFtnm0Q55NiBUdbBcaT810+clCGKvhssBCrXnmwShD1SXTwT83aszsgiSfW+SnBA==" + "resolved" "https://registry.npmjs.org/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "pouchdb-binary-utils" "7.2.2" + "pouchdb-collate" "7.2.2" + "pouchdb-collections" "7.2.2" + "pouchdb-errors" "7.2.2" + "pouchdb-fetch" "7.2.2" + "pouchdb-mapreduce-utils" "7.2.2" + "pouchdb-md5" "7.2.2" + "pouchdb-utils" "7.2.2" + +"pouchdb-adapter-leveldb-core@7.2.2": + "integrity" "sha512-K9UGf1Ivwe87mjrMqN+1D07tO/DfU7ariVDrGffuOjvl+3BcvUF25IWrxsBObd4iPOYCH7NVQWRpojhBgxULtQ==" + "resolved" "https://registry.npmjs.org/pouchdb-adapter-leveldb-core/-/pouchdb-adapter-leveldb-core-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "argsarray" "0.0.1" + "buffer-from" "1.1.1" + "double-ended-queue" "2.1.0-0" + "levelup" "4.4.0" + "pouchdb-adapter-utils" "7.2.2" + "pouchdb-binary-utils" "7.2.2" + "pouchdb-collections" "7.2.2" + "pouchdb-errors" "7.2.2" + "pouchdb-json" "7.2.2" + "pouchdb-md5" "7.2.2" + "pouchdb-merge" "7.2.2" + "pouchdb-utils" "7.2.2" + "sublevel-pouchdb" "7.2.2" + "through2" "3.0.2" + +"pouchdb-adapter-memory@^7.1.1": + "integrity" "sha512-9o+zdItPEq7rIrxdkUxgsLNaZkDJAGEqqoYgeYdrHidOCZnlhxhX3g7/R/HcpDKC513iEPqJWDJQSfeT6nVKkw==" + "resolved" "https://registry.npmjs.org/pouchdb-adapter-memory/-/pouchdb-adapter-memory-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "memdown" "1.4.1" + "pouchdb-adapter-leveldb-core" "7.2.2" + "pouchdb-utils" "7.2.2" + +"pouchdb-adapter-node-websql@^7.0.0": + "integrity" "sha512-fNaOMO8bvMrRTSfmH4RSLSpgnKahRcCA7Z0jg732PwRbGvvMdGbreZwvKPPD1fg2tm2ZwwiXWK2G3+oXyoqZYw==" + "resolved" "https://registry.npmjs.org/pouchdb-adapter-node-websql/-/pouchdb-adapter-node-websql-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "pouchdb-adapter-websql-core" "7.0.0" + "pouchdb-utils" "7.0.0" + "websql" "1.0.0" + +"pouchdb-adapter-utils@7.0.0": + "integrity" "sha512-UWKPC6jkz6mHUzZefrU7P5X8ZGvBC8LSNZ7BIp0hWvJE6c20cnpDwedTVDpZORcCbVJpDmFOHBYnOqEIblPtbA==" + "resolved" "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "pouchdb-binary-utils" "7.0.0" + "pouchdb-collections" "7.0.0" + "pouchdb-errors" "7.0.0" + "pouchdb-md5" "7.0.0" + "pouchdb-merge" "7.0.0" + "pouchdb-utils" "7.0.0" + +"pouchdb-adapter-utils@7.2.2": + "integrity" "sha512-2CzZkTyTyHZkr3ePiWFMTiD5+56lnembMjaTl8ohwegM0+hYhRyJux0biAZafVxgIL4gnCUC4w2xf6WVztzKdg==" + "resolved" "https://registry.npmjs.org/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "pouchdb-binary-utils" "7.2.2" + "pouchdb-collections" "7.2.2" + "pouchdb-errors" "7.2.2" + "pouchdb-md5" "7.2.2" + "pouchdb-merge" "7.2.2" + "pouchdb-utils" "7.2.2" + +"pouchdb-adapter-websql-core@7.0.0": + "integrity" "sha512-NyMaH0bl20SdJdOCzd+fwXo8JZ15a48/MAwMcIbXzsRHE4DjFNlRcWAcjUP6uN4Ezc+Gx+r2tkBBMf71mIz1Aw==" + "resolved" "https://registry.npmjs.org/pouchdb-adapter-websql-core/-/pouchdb-adapter-websql-core-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "pouchdb-adapter-utils" "7.0.0" + "pouchdb-binary-utils" "7.0.0" + "pouchdb-collections" "7.0.0" + "pouchdb-errors" "7.0.0" + "pouchdb-json" "7.0.0" + "pouchdb-merge" "7.0.0" + "pouchdb-utils" "7.0.0" + +"pouchdb-binary-utils@7.0.0": + "integrity" "sha512-yUktdOPIPvOVouCjJN3uop+bCcpdPwePrLm9eUAZNgEYnUFu0njdx7Q0WRsZ7UJ6l75HinL5ZHk4bnvEt86FLw==" + "resolved" "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "buffer-from" "1.1.0" + +"pouchdb-binary-utils@7.2.2": + "integrity" "sha512-shacxlmyHbUrNfE6FGYpfyAJx7Q0m91lDdEAaPoKZM3SzAmbtB1i+OaDNtYFztXjJl16yeudkDb3xOeokVL3Qw==" + "resolved" "https://registry.npmjs.org/pouchdb-binary-utils/-/pouchdb-binary-utils-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "buffer-from" "1.1.1" + +"pouchdb-collate@7.2.2": + "integrity" "sha512-/SMY9GGasslknivWlCVwXMRMnQ8myKHs4WryQ5535nq1Wj/ehpqWloMwxEQGvZE1Sda3LOm7/5HwLTcB8Our+w==" + "resolved" "https://registry.npmjs.org/pouchdb-collate/-/pouchdb-collate-7.2.2.tgz" + "version" "7.2.2" + +"pouchdb-collections@7.0.0": + "integrity" "sha512-DaoUr/vU24Q3gM6ghj0va9j/oBanPwkbhkvnqSyC3Dm5dgf5pculNxueLF9PKMo3ycApoWzHMh6N2N8KJbDU2Q==" + "resolved" "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.0.0.tgz" + "version" "7.0.0" + +"pouchdb-collections@7.2.2": + "integrity" "sha512-6O9zyAYlp3UdtfneiMYuOCWdUCQNo2bgdjvNsMSacQX+3g8WvIoFQCYJjZZCpTttQGb+MHeRMr8m2U95lhJTew==" + "resolved" "https://registry.npmjs.org/pouchdb-collections/-/pouchdb-collections-7.2.2.tgz" + "version" "7.2.2" + +"pouchdb-debug@^7.1.1": + "integrity" "sha512-eP3ht/AKavLF2RjTzBM6S9gaI2/apcW6xvaKRQhEdOfiANqerFuksFqHCal3aikVQuDO+cB/cw+a4RyJn/glBw==" + "resolved" "https://registry.npmjs.org/pouchdb-debug/-/pouchdb-debug-7.2.1.tgz" + "version" "7.2.1" + dependencies: + "debug" "3.1.0" + +"pouchdb-errors@7.0.0": + "integrity" "sha512-dTusY8nnTw4HIztCrNl7AoGgwvS1bVf/3/97hDaGc4ytn72V9/4dK8kTqlimi3UpaurohYRnqac0SGXYP8vgXA==" + "resolved" "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "inherits" "2.0.3" + +"pouchdb-errors@7.2.2": + "integrity" "sha512-6GQsiWc+7uPfgEHeavG+7wuzH3JZW29Dnrvz8eVbDFE50kVFxNDVm3EkYHskvo5isG7/IkOx7PV7RPTA3keG3g==" + "resolved" "https://registry.npmjs.org/pouchdb-errors/-/pouchdb-errors-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "inherits" "2.0.4" + +"pouchdb-fetch@7.2.2": + "integrity" "sha512-lUHmaG6U3zjdMkh8Vob9GvEiRGwJfXKE02aZfjiVQgew+9SLkuOxNw3y2q4d1B6mBd273y1k2Lm0IAziRNxQnA==" + "resolved" "https://registry.npmjs.org/pouchdb-fetch/-/pouchdb-fetch-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "abort-controller" "3.0.0" + "fetch-cookie" "0.10.1" + "node-fetch" "2.6.0" + +"pouchdb-find@^7.0.0": + "integrity" "sha512-BmFeFVQ0kHmDehvJxNZl9OmIztCjPlZlVSdpijuFbk/Fi1EFPU1BAv3kLC+6DhZuOqU/BCoaUBY9sn66pPY2ag==" + "resolved" "https://registry.npmjs.org/pouchdb-find/-/pouchdb-find-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "pouchdb-abstract-mapreduce" "7.2.2" + "pouchdb-collate" "7.2.2" + "pouchdb-errors" "7.2.2" + "pouchdb-fetch" "7.2.2" + "pouchdb-md5" "7.2.2" + "pouchdb-selector-core" "7.2.2" + "pouchdb-utils" "7.2.2" + +"pouchdb-json@7.0.0": + "integrity" "sha512-w0bNRu/7VmmCrFWMYAm62n30wvJJUT2SokyzeTyj3hRohj4GFwTRg1mSZ+iAmxgRKOFE8nzZstLG/WAB4Ymjew==" + "resolved" "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "vuvuzela" "1.0.3" + +"pouchdb-json@7.2.2": + "integrity" "sha512-3b2S2ynN+aoB7aCNyDZc/4c0IAdx/ir3nsHB+/RrKE9cM3QkQYbnnE3r/RvOD1Xvr6ji/KOCBie+Pz/6sxoaug==" + "resolved" "https://registry.npmjs.org/pouchdb-json/-/pouchdb-json-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "vuvuzela" "1.0.3" + +"pouchdb-mapreduce-utils@7.2.2": + "integrity" "sha512-rAllb73hIkU8rU2LJNbzlcj91KuulpwQu804/F6xF3fhZKC/4JQMClahk+N/+VATkpmLxp1zWmvmgdlwVU4HtQ==" + "resolved" "https://registry.npmjs.org/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "argsarray" "0.0.1" + "inherits" "2.0.4" + "pouchdb-collections" "7.2.2" + "pouchdb-utils" "7.2.2" + +"pouchdb-md5@7.0.0": + "integrity" "sha512-yaSJKhLA3QlgloKUQeb2hLdT3KmUmPfoYdryfwHZuPTpXIRKTnMQTR9qCIRUszc0ruBpDe53DRslCgNUhAyTNQ==" + "resolved" "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "pouchdb-binary-utils" "7.0.0" + "spark-md5" "3.0.0" + +"pouchdb-md5@7.2.2": + "integrity" "sha512-c/RvLp2oSh8PLAWU5vFBnp6ejJABIdKqboZwRRUrWcfGDf+oyX8RgmJFlYlzMMOh4XQLUT1IoaDV8cwlsuryZw==" + "resolved" "https://registry.npmjs.org/pouchdb-md5/-/pouchdb-md5-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "pouchdb-binary-utils" "7.2.2" + "spark-md5" "3.0.1" + +"pouchdb-merge@7.0.0": + "integrity" "sha512-tci5u6NpznQhGcPv4ho1h0miky9rs+ds/T9zQ9meQeDZbUojXNaX1Jxsb0uYEQQ+HMqdcQs3Akdl0/u0mgwPGg==" + "resolved" "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.0.0.tgz" + "version" "7.0.0" + +"pouchdb-merge@7.2.2": + "integrity" "sha512-6yzKJfjIchBaS7Tusuk8280WJdESzFfQ0sb4jeMUNnrqs4Cx3b0DIEOYTRRD9EJDM+je7D3AZZ4AT0tFw8gb4A==" + "resolved" "https://registry.npmjs.org/pouchdb-merge/-/pouchdb-merge-7.2.2.tgz" + "version" "7.2.2" + +"pouchdb-selector-core@7.2.2": + "integrity" "sha512-XYKCNv9oiNmSXV5+CgR9pkEkTFqxQGWplnVhO3W9P154H08lU0ZoNH02+uf+NjZ2kjse7Q1fxV4r401LEcGMMg==" + "resolved" "https://registry.npmjs.org/pouchdb-selector-core/-/pouchdb-selector-core-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "pouchdb-collate" "7.2.2" + "pouchdb-utils" "7.2.2" + +"pouchdb-utils@7.0.0": + "integrity" "sha512-1bnoX1KdZYHv9wicDIFdO0PLiVIMzNDUBUZ/yOJZ+6LW6niQCB8aCv09ZztmKfSQcU5nnN3fe656tScBgP6dOQ==" + "resolved" "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "argsarray" "0.0.1" + "clone-buffer" "1.0.0" + "immediate" "3.0.6" + "inherits" "2.0.3" + "pouchdb-collections" "7.0.0" + "pouchdb-errors" "7.0.0" + "pouchdb-md5" "7.0.0" + "uuid" "3.2.1" + +"pouchdb-utils@7.2.2": + "integrity" "sha512-XmeM5ioB4KCfyB2MGZXu1Bb2xkElNwF1qG+zVFbQsKQij0zvepdOUfGuWvLRHxTOmt4muIuSOmWZObZa3NOgzQ==" + "resolved" "https://registry.npmjs.org/pouchdb-utils/-/pouchdb-utils-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "argsarray" "0.0.1" + "clone-buffer" "1.0.0" + "immediate" "3.3.0" + "inherits" "2.0.4" + "pouchdb-collections" "7.2.2" + "pouchdb-errors" "7.2.2" + "pouchdb-md5" "7.2.2" + "uuid" "8.1.0" + +"pouchdb@7.1.1": + "integrity" "sha512-8bXWclixNJZqokvxGHRsG19zehSJiaZaz4dVYlhXhhUctz7gMcNTElHjPBzBdZlKKvt9aFDndmXN1VVE53Co8g==" + "resolved" "https://registry.npmjs.org/pouchdb/-/pouchdb-7.1.1.tgz" + "version" "7.1.1" + dependencies: + "argsarray" "0.0.1" + "buffer-from" "1.1.0" + "clone-buffer" "1.0.0" + "double-ended-queue" "2.1.0-0" + "fetch-cookie" "0.7.0" + "immediate" "3.0.6" + "inherits" "2.0.3" + "level" "5.0.1" + "level-codec" "9.0.1" + "level-write-stream" "1.0.0" + "leveldown" "5.0.2" + "levelup" "4.0.2" + "ltgt" "2.2.1" + "node-fetch" "2.4.1" + "readable-stream" "1.0.33" + "spark-md5" "3.0.0" + "through2" "3.0.1" + "uuid" "3.2.1" + "vuvuzela" "1.0.3" + "prb-math@^2.2.0": "integrity" "sha512-wMlrBBt/+iVzOcOhU7Rx2B0ak1+2uCXXgGZYCmmsiw1+9QNwHShmkNnlXVp/fJFr2RsFKmCyKbTPnKOmFP6B+Q==" "resolved" "https://registry.npmjs.org/prb-math/-/prb-math-2.4.1.tgz" @@ -11323,6 +14878,11 @@ "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" "version" "2.0.0" +"preserve@^0.2.0": + "integrity" "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + "resolved" "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz" + "version" "0.2.0" + "prettier-plugin-solidity@^1.0.0-beta.18": "integrity" "sha512-ezWdsG/jIeClmYBzg8V9Voy8jujt+VxWF8OS3Vld+C3c+3cPVib8D9l8ahTod7O5Df1anK9zo+WiiS5wb1mLmg==" "resolved" "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.18.tgz" @@ -11335,7 +14895,21 @@ "solidity-comments-extractor" "^0.0.7" "string-width" "^4.2.2" -"prettier@^2.1.2", "prettier@^2.3.0", "prettier@^2.5.1": +"prettier-plugin-solidity@1.0.0-alpha.59": + "integrity" "sha512-6cE0SWaiYCBoJY4clCfsbWlEEOU4K42Ny6Tg4Jwprgts/q+AVfYnPQ5coRs7zIjYzc4RVspifYPeh+oAg8RpLw==" + "resolved" "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-alpha.59.tgz" + "version" "1.0.0-alpha.59" + dependencies: + "@solidity-parser/parser" "^0.8.1" + "dir-to-object" "^2.0.0" + "emoji-regex" "^9.0.0" + "escape-string-regexp" "^4.0.0" + "extract-comments" "^1.1.0" + "prettier" "^2.0.5" + "semver" "^7.3.2" + "string-width" "^4.2.0" + +"prettier@^2.0.5", "prettier@^2.1.2", "prettier@^2.3.0", "prettier@^2.5.1": "integrity" "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==" "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz" "version" "2.5.1" @@ -11360,6 +14934,11 @@ "resolved" "https://registry.npmjs.org/private/-/private-0.1.8.tgz" "version" "0.1.8" +"process-nextick-args@~1.0.6": + "integrity" "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" + "version" "1.0.7" + "process-nextick-args@~2.0.0": "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" @@ -11389,6 +14968,13 @@ "function-bind" "^1.1.1" "iterate-value" "^1.0.0" +"promise@^7.1.1": + "integrity" "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==" + "resolved" "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz" + "version" "7.3.1" + dependencies: + "asap" "~2.0.3" + "promise@^8.0.0": "integrity" "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==" "resolved" "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz" @@ -11396,6 +14982,15 @@ dependencies: "asap" "~2.0.6" +"prop-types@^15.7.2": + "integrity" "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==" + "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz" + "version" "15.7.2" + dependencies: + "loose-envify" "^1.4.0" + "object-assign" "^4.1.1" + "react-is" "^16.8.1" + "proper-lockfile@^4.1.1": "integrity" "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==" "resolved" "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz" @@ -11462,6 +15057,11 @@ "resolved" "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" "version" "1.0.2" +"pseudomap@^1.0.2": + "integrity" "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "resolved" "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + "version" "1.0.2" + "psl@^1.1.28": "integrity" "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" "resolved" "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" @@ -11535,6 +15135,11 @@ "end-of-stream" "^1.1.0" "once" "^1.3.1" +"punycode@^1.2.4": + "integrity" "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + "version" "1.4.1" + "punycode@^2.1.0", "punycode@2.1.0": "integrity" "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=" "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz" @@ -11581,6 +15186,11 @@ "object-assign" "^4.1.0" "strict-uri-encode" "^1.0.0" +"querystring-es3@^0.2.0": + "integrity" "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + "resolved" "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" + "version" "0.2.1" + "querystring@^0.2.0": "integrity" "sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==" "resolved" "https://registry.npmjs.org/querystring/-/querystring-0.2.1.tgz" @@ -11596,6 +15206,15 @@ "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" "version" "1.2.3" +"randomatic@^3.0.0": + "integrity" "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==" + "resolved" "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "is-number" "^4.0.0" + "kind-of" "^6.0.0" + "math-random" "^1.0.1" + "randombytes@^2.0.0", "randombytes@^2.0.1", "randombytes@^2.0.5", "randombytes@^2.0.6", "randombytes@^2.1.0": "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" @@ -11646,6 +15265,16 @@ "minimist" "^1.2.0" "strip-json-comments" "~2.0.1" +"react-is@^16.7.0": + "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + "version" "16.13.1" + +"react-is@^16.8.1": + "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + "version" "16.13.1" + "react-is@^17.0.1": "integrity" "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" "resolved" "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" @@ -11659,6 +15288,14 @@ "find-up" "^1.0.0" "read-pkg" "^1.0.0" +"read-pkg-up@^2.0.0": + "integrity" "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=" + "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "find-up" "^2.0.0" + "read-pkg" "^2.0.0" + "read-pkg@^1.0.0": "integrity" "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=" "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" @@ -11668,6 +15305,15 @@ "normalize-package-data" "^2.3.2" "path-type" "^1.0.0" +"read-pkg@^2.0.0": + "integrity" "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=" + "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "load-json-file" "^2.0.0" + "normalize-package-data" "^2.3.2" + "path-type" "^2.0.0" + "readable-stream@^1.0.33": "integrity" "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=" "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" @@ -11678,7 +15324,7 @@ "isarray" "0.0.1" "string_decoder" "~0.10.x" -"readable-stream@^2.0.0", "readable-stream@^2.0.2", "readable-stream@^2.0.5", "readable-stream@^2.0.6", "readable-stream@^2.2.2", "readable-stream@^2.2.8", "readable-stream@^2.2.9", "readable-stream@^2.3.0", "readable-stream@^2.3.5", "readable-stream@^2.3.6", "readable-stream@~2.3.6": +"readable-stream@^2.0.0", "readable-stream@^2.0.1", "readable-stream@^2.0.2", "readable-stream@^2.0.4", "readable-stream@^2.0.5", "readable-stream@^2.0.6", "readable-stream@^2.2.2", "readable-stream@^2.2.8", "readable-stream@^2.2.9", "readable-stream@^2.3.0", "readable-stream@^2.3.3", "readable-stream@^2.3.5", "readable-stream@^2.3.6", "readable-stream@~2.3.6", "readable-stream@2 || 3": "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" "version" "2.3.7" @@ -11718,6 +15364,21 @@ "string_decoder" "^1.1.1" "util-deprecate" "^1.0.1" +"readable-stream@>=1.0.33-1 <1.1.0-0": + "integrity" "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" + "version" "1.0.34" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "0.0.1" + "string_decoder" "~0.10.x" + +"readable-stream@~0.0.2": + "integrity" "sha1-8y124/uGM0SlSNeZIwBxc2ZbO40=" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-0.0.4.tgz" + "version" "0.0.4" + "readable-stream@~1.0.15": "integrity" "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=" "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" @@ -11728,6 +15389,38 @@ "isarray" "0.0.1" "string_decoder" "~0.10.x" +"readable-stream@~2.0.0": + "integrity" "sha1-j5A0HmilPMySh4jaz80Rs265t44=" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz" + "version" "2.0.6" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "~1.0.0" + "process-nextick-args" "~1.0.6" + "string_decoder" "~0.10.x" + "util-deprecate" "~1.0.1" + +"readable-stream@1.0.33": + "integrity" "sha1-OjYN1mwbHX/UcFOJhg7aHQ9hEmw=" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz" + "version" "1.0.33" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "0.0.1" + "string_decoder" "~0.10.x" + +"readable-stream@1.1.14": + "integrity" "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + "version" "1.1.14" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "0.0.1" + "string_decoder" "~0.10.x" + "readable-stream@1.1": "integrity" "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=" "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" @@ -11856,6 +15549,13 @@ "babel-types" "^6.19.0" "private" "^0.1.6" +"regex-cache@^0.4.2": + "integrity" "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==" + "resolved" "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz" + "version" "0.4.4" + dependencies: + "is-equal-shallow" "^0.1.3" + "regex-not@^1.0.0", "regex-not@^1.0.2": "integrity" "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==" "resolved" "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" @@ -11891,6 +15591,38 @@ dependencies: "jsesc" "~0.5.0" +"relay-compiler@12.0.0": + "integrity" "sha512-SWqeSQZ+AMU/Cr7iZsHi1e78Z7oh00I5SvR092iCJq79aupqJ6Ds+I1Pz/Vzo5uY5PY0jvC4rBJXzlIN5g9boQ==" + "resolved" "https://registry.npmjs.org/relay-compiler/-/relay-compiler-12.0.0.tgz" + "version" "12.0.0" + dependencies: + "@babel/core" "^7.14.0" + "@babel/generator" "^7.14.0" + "@babel/parser" "^7.14.0" + "@babel/runtime" "^7.0.0" + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.0.0" + "babel-preset-fbjs" "^3.4.0" + "chalk" "^4.0.0" + "fb-watchman" "^2.0.0" + "fbjs" "^3.0.0" + "glob" "^7.1.1" + "immutable" "~3.7.6" + "invariant" "^2.2.4" + "nullthrows" "^1.1.1" + "relay-runtime" "12.0.0" + "signedsource" "^1.0.0" + "yargs" "^15.3.1" + +"relay-runtime@12.0.0": + "integrity" "sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==" + "resolved" "https://registry.npmjs.org/relay-runtime/-/relay-runtime-12.0.0.tgz" + "version" "12.0.0" + dependencies: + "@babel/runtime" "^7.0.0" + "fbjs" "^3.0.0" + "invariant" "^2.2.4" + "remote-redux-devtools@^0.5.12": "integrity" "sha512-xZ2D1VRIWzat5nsvcraT6fKEX9Cfi+HbQBCwzNnUAM8Uicm/anOc60XGalcaDPrVmLug7nhDl2nimEa3bL3K9w==" "resolved" "https://registry.npmjs.org/remote-redux-devtools/-/remote-redux-devtools-0.5.16.tgz" @@ -11920,7 +15652,7 @@ "resolved" "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz" "version" "1.1.4" -"repeat-string@^1.6.1": +"repeat-string@^1.5.2", "repeat-string@^1.6.1": "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" "version" "1.6.1" @@ -11932,6 +15664,11 @@ dependencies: "is-finite" "^1.0.0" +"replace-ext@0.0.1": + "integrity" "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" + "resolved" "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz" + "version" "0.0.1" + "req-cwd@^2.0.0": "integrity" "sha1-1AgrTURZgDZkD7c93qAe1T20nrw=" "resolved" "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz" @@ -11998,7 +15735,7 @@ "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz" "version" "1.2.1" -"require-from-string@^2.0.0": +"require-from-string@^2.0.0", "require-from-string@^2.0.2": "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" "version" "2.0.2" @@ -12034,6 +15771,14 @@ "resolved" "https://registry.npmjs.org/reset/-/reset-0.1.0.tgz" "version" "0.1.0" +"resolve-dir@^1.0.0": + "integrity" "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=" + "resolved" "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "expand-tilde" "^2.0.0" + "global-modules" "^1.0.0" + "resolve-from@^3.0.0": "integrity" "sha1-six699nWiBvItuZTM17rywoYh0g=" "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" @@ -12044,6 +15789,11 @@ "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" "version" "5.0.0" +"resolve-from@5.0.0": + "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + "version" "5.0.0" + "resolve-url@^0.2.1": "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" "resolved" "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" @@ -12086,6 +15836,14 @@ dependencies: "lowercase-keys" "^1.0.0" +"restore-cursor@^2.0.0": + "integrity" "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "onetime" "^2.0.0" + "signal-exit" "^3.0.2" + "restore-cursor@^3.1.0": "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" @@ -12116,19 +15874,36 @@ "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" "version" "0.12.0" +"retry@0.13.1": + "integrity" "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + "version" "0.13.1" + "reusify@^1.0.4": "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" "version" "1.0.4" -"rimraf@^2.2.8", "rimraf@^2.6.3": +"right-align@^0.1.1": + "integrity" "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=" + "resolved" "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz" + "version" "0.1.3" + dependencies: + "align-text" "^0.1.1" + +"rimraf@^2.2.8", "rimraf@^2.6.1", "rimraf@^2.6.3": "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" "version" "2.7.1" dependencies: "glob" "^7.1.3" -"ripemd160@^2.0.0", "ripemd160@^2.0.1": +"ripemd160-min@0.0.6": + "integrity" "sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==" + "resolved" "https://registry.npmjs.org/ripemd160-min/-/ripemd160-min-0.0.6.tgz" + "version" "0.0.6" + +"ripemd160@^2.0.0", "ripemd160@^2.0.1", "ripemd160@^2.0.2": "integrity" "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==" "resolved" "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" "version" "2.0.2" @@ -12226,7 +16001,7 @@ "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" "version" "2.1.2" -"sax@^1.1.4": +"sax@^1.1.4", "sax@^1.2.4": "integrity" "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" "resolved" "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" "version" "1.2.4" @@ -12464,7 +16239,7 @@ "is-plain-object" "^2.0.3" "split-string" "^3.0.1" -"setimmediate@^1.0.5": +"setimmediate@^1.0.4", "setimmediate@^1.0.5": "integrity" "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" "version" "1.0.5" @@ -12479,7 +16254,7 @@ "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" "version" "1.1.1" -"sha.js@^2.4.0", "sha.js@^2.4.8": +"sha.js@^2.4.0", "sha.js@^2.4.11", "sha.js@^2.4.8": "integrity" "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==" "resolved" "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" "version" "2.4.11" @@ -12495,6 +16270,13 @@ "charenc" ">= 0.0.1" "crypt" ">= 0.0.1" +"sha3@^2.1.1": + "integrity" "sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==" + "resolved" "https://registry.npmjs.org/sha3/-/sha3-2.1.4.tgz" + "version" "2.1.4" + dependencies: + "buffer" "6.0.3" + "shallowequal@^1.0.2": "integrity" "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" "resolved" "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" @@ -12542,6 +16324,11 @@ dependencies: "varint" "~5.0.0" +"signedsource@^1.0.0": + "integrity" "sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo=" + "resolved" "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz" + "version" "1.0.0" + "simple-concat@^1.0.0": "integrity" "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" "resolved" "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" @@ -12728,7 +16515,12 @@ dependencies: "is-plain-obj" "^1.0.0" -"source-map-resolve@^0.5.0": +"source-list-map@^2.0.0": + "integrity" "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + "resolved" "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" + "version" "2.0.1" + +"source-map-resolve@^0.5.0", "source-map-resolve@^0.5.2": "integrity" "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==" "resolved" "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" "version" "0.5.3" @@ -12746,7 +16538,7 @@ dependencies: "source-map" "^0.5.6" -"source-map-support@^0.5.13", "source-map-support@^0.5.17", "source-map-support@^0.5.3": +"source-map-support@^0.5.13", "source-map-support@^0.5.17", "source-map-support@^0.5.19", "source-map-support@^0.5.3": "integrity" "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==" "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz" "version" "0.5.20" @@ -12767,7 +16559,7 @@ "resolved" "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" "version" "0.4.1" -"source-map@^0.5.0", "source-map@^0.5.6", "source-map@^0.5.7": +"source-map@^0.5.0", "source-map@^0.5.3", "source-map@^0.5.6", "source-map@^0.5.7", "source-map@~0.5.1": "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" "version" "0.5.7" @@ -12789,11 +16581,26 @@ dependencies: "amdefine" ">=0.0.4" +"source-map@~0.6.0": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + "source-map@~0.6.1": "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" "version" "0.6.1" +"spark-md5@3.0.0": + "integrity" "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8=" + "resolved" "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.0.tgz" + "version" "3.0.0" + +"spark-md5@3.0.1": + "integrity" "sha512-0tF3AGSD1ppQeuffsLDIOWlKUd3lS92tFxcsrh5Pe3ZphhnoK+oXIBTzOAThZCiuINZLvpiLH/1VS1/ANEJVig==" + "resolved" "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.1.tgz" + "version" "3.0.1" + "spdx-correct@^3.0.0": "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" @@ -12841,6 +16648,14 @@ "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" "version" "1.0.3" +"sqlite3@^4.0.0": + "integrity" "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==" + "resolved" "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "nan" "^2.12.1" + "node-pre-gyp" "^0.11.0" + "sshpk@^1.7.0": "integrity" "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==" "resolved" "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz" @@ -12893,6 +16708,35 @@ "resolved" "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz" "version" "1.1.1" +"stoppable@^1.1.0": + "integrity" "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==" + "resolved" "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz" + "version" "1.1.0" + +"stream-browserify@^2.0.1": + "integrity" "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==" + "resolved" "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "inherits" "~2.0.1" + "readable-stream" "^2.0.2" + +"stream-http@^2.7.2": + "integrity" "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==" + "resolved" "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz" + "version" "2.8.3" + dependencies: + "builtin-status-codes" "^3.0.0" + "inherits" "^2.0.1" + "readable-stream" "^2.3.6" + "to-arraybuffer" "^1.0.0" + "xtend" "^4.0.0" + +"stream-shift@^1.0.0": + "integrity" "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + "resolved" "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" + "version" "1.0.1" + "stream-to-it@^0.2.0", "stream-to-it@^0.2.2": "integrity" "sha512-4vEbkSs83OahpmBybNJXlJd7d6/RxzkkSdT3I0mnGt79Xd2Kk+e1JqbvAvsQfCeKj3aKb0QIWkyK3/n0j506vQ==" "resolved" "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.4.tgz" @@ -12908,12 +16752,17 @@ "looper" "^3.0.0" "pull-stream" "^3.2.3" +"streamsearch@0.1.2": + "integrity" "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + "resolved" "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz" + "version" "0.1.2" + "strict-uri-encode@^1.0.0": "integrity" "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" "resolved" "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" "version" "1.1.0" -"string_decoder@^1.1.1", "string_decoder@~1.1.1": +"string_decoder@^1.0.0", "string_decoder@^1.1.1", "string_decoder@~1.1.1": "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" "version" "1.1.1" @@ -12952,7 +16801,7 @@ "is-fullwidth-code-point" "^1.0.0" "strip-ansi" "^3.0.0" -"string-width@^2.1.1": +"string-width@^2.0.0": "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" "version" "2.1.1" @@ -12960,16 +16809,15 @@ "is-fullwidth-code-point" "^2.0.0" "strip-ansi" "^4.0.0" -"string-width@^3.0.0": - "integrity" "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==" - "resolved" "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" - "version" "3.1.0" +"string-width@^2.1.1": + "integrity" "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz" + "version" "2.1.1" dependencies: - "emoji-regex" "^7.0.1" "is-fullwidth-code-point" "^2.0.0" - "strip-ansi" "^5.1.0" + "strip-ansi" "^4.0.0" -"string-width@^3.1.0": +"string-width@^3.0.0", "string-width@^3.1.0": "integrity" "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==" "resolved" "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" "version" "3.1.0" @@ -13048,13 +16896,26 @@ dependencies: "ansi-regex" "^5.0.1" -"strip-bom@^2.0.0": +"strip-bom-stream@^1.0.0": + "integrity" "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=" + "resolved" "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "first-chunk-stream" "^1.0.0" + "strip-bom" "^2.0.0" + +"strip-bom@^2.0.0", "strip-bom@2.X": "integrity" "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=" "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" "version" "2.0.0" dependencies: "is-utf8" "^0.2.0" +"strip-bom@^3.0.0": + "integrity" "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + "version" "3.0.0" + "strip-dirs@^2.0.0": "integrity" "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==" "resolved" "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz" @@ -13062,6 +16923,11 @@ dependencies: "is-natural-number" "^4.0.1" +"strip-eof@^1.0.0": + "integrity" "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + "version" "1.0.0" + "strip-hex-prefix@1.0.0": "integrity" "sha1-DF8VX+8RUTczd96du1iNoFUA428=" "resolved" "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz" @@ -13069,6 +16935,11 @@ dependencies: "is-hex-prefixed" "1.0.0" +"strip-indent@^2.0.0": + "integrity" "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=" + "resolved" "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz" + "version" "2.0.0" + "strip-json-comments@~2.0.1": "integrity" "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" @@ -13096,6 +16967,32 @@ dependencies: "escape-string-regexp" "^1.0.2" +"sublevel-pouchdb@7.2.2": + "integrity" "sha512-y5uYgwKDgXVyPZceTDGWsSFAhpSddY29l9PJbXqMJLfREdPmQTY8InpatohlEfCXX7s1LGcrfYAhxPFZaJOLnQ==" + "resolved" "https://registry.npmjs.org/sublevel-pouchdb/-/sublevel-pouchdb-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "inherits" "2.0.4" + "level-codec" "9.0.2" + "ltgt" "2.2.1" + "readable-stream" "1.1.14" + +"subscriptions-transport-ws@^0.9.0", "subscriptions-transport-ws@^0.9.0 || ^0.11.0", "subscriptions-transport-ws@^0.9.18", "subscriptions-transport-ws@^0.9.19": + "integrity" "sha512-dxdemxFFB0ppCLg10FTtRqH/31FNRL1y1BQv8209MK5I4CwALb7iihQg+7p65lFcIl8MHatINWBLOqpgU4Kyyw==" + "resolved" "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.19.tgz" + "version" "0.9.19" + dependencies: + "backo2" "^1.0.2" + "eventemitter3" "^3.1.0" + "iterall" "^1.2.1" + "symbol-observable" "^1.0.4" + "ws" "^5.2.0 || ^6.0.0 || ^7.0.0" + +"super-split@^1.1.0": + "integrity" "sha512-I4bA5mgcb6Fw5UJ+EkpzqXfiuvVGS/7MuND+oBxNFmxu3ugLNrdIatzBLfhFRMVMLxgSsRy+TjIktgkF9RFSNQ==" + "resolved" "https://registry.npmjs.org/super-split/-/super-split-1.1.0.tgz" + "version" "1.1.0" + "supports-color@^2.0.0": "integrity" "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" @@ -13108,6 +17005,13 @@ dependencies: "has-flag" "^1.0.0" +"supports-color@^4.2.1": + "integrity" "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz" + "version" "4.5.0" + dependencies: + "has-flag" "^2.0.0" + "supports-color@^5.3.0": "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -13175,7 +17079,12 @@ "tar" "^4.0.2" "xhr-request" "^1.0.1" -"symbol-observable@^1.0.3": +"symbol-observable@^1.0.3": + "integrity" "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + "resolved" "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz" + "version" "1.2.0" + +"symbol-observable@^1.0.4": "integrity" "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" "resolved" "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz" "version" "1.2.0" @@ -13185,11 +17094,29 @@ "resolved" "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz" "version" "1.2.0" +"symbol-observable@^4.0.0": + "integrity" "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==" + "resolved" "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz" + "version" "4.0.0" + "symbol-tree@>= 3.1.0 < 4.0.0": "integrity" "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" "resolved" "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" "version" "3.2.4" +"symbol@^0.2.1": + "integrity" "sha1-O5hzuKkB5Hxu/iFSajrDcu8ou8c=" + "resolved" "https://registry.npmjs.org/symbol/-/symbol-0.2.3.tgz" + "version" "0.2.3" + +"sync-fetch@0.3.0": + "integrity" "sha512-dJp4qg+x4JwSEW1HibAuMi0IIrBI3wuQr2GimmqB7OXR50wmwzfdusG+p39R9w3R6aFtZ2mzvxvWKQ3Bd/vx3g==" + "resolved" "https://registry.npmjs.org/sync-fetch/-/sync-fetch-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "buffer" "^5.7.0" + "node-fetch" "^2.6.1" + "sync-request@^6.0.0": "integrity" "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==" "resolved" "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz" @@ -13211,6 +17138,11 @@ "resolved" "https://registry.npmjs.org/taffydb/-/taffydb-2.7.3.tgz" "version" "2.7.3" +"tapable@^0.2.7": + "integrity" "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==" + "resolved" "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz" + "version" "0.2.9" + "tape@^4.6.3": "version" "4.13.3" dependencies: @@ -13264,7 +17196,7 @@ "inherits" "^2.0.3" "readable-stream" "^3.1.1" -"tar@^4.0.2": +"tar@^4", "tar@^4.0.2": "integrity" "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==" "resolved" "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" "version" "4.4.19" @@ -13326,6 +17258,38 @@ "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" "version" "2.3.8" +"through2-filter@^2.0.0": + "integrity" "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=" + "resolved" "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "through2" "~2.0.0" + "xtend" "~4.0.0" + +"through2-filter@^3.0.0": + "integrity" "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==" + "resolved" "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "through2" "~2.0.0" + "xtend" "~4.0.0" + +"through2@^0.6.0": + "integrity" "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=" + "resolved" "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz" + "version" "0.6.5" + dependencies: + "readable-stream" ">=1.0.33-1 <1.1.0-0" + "xtend" ">=4.0.0 <4.1.0-0" + +"through2@^2.0.0": + "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "readable-stream" "~2.3.6" + "xtend" "~4.0.1" + "through2@^2.0.3": "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" @@ -13334,6 +17298,44 @@ "readable-stream" "~2.3.6" "xtend" "~4.0.1" +"through2@~2.0.0": + "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "readable-stream" "~2.3.6" + "xtend" "~4.0.1" + +"through2@2.X": + "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "readable-stream" "~2.3.6" + "xtend" "~4.0.1" + +"through2@3.0.1": + "integrity" "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==" + "resolved" "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "readable-stream" "2 || 3" + +"through2@3.0.2": + "integrity" "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "inherits" "^2.0.4" + "readable-stream" "2 || 3" + +"tildify@1.2.0": + "integrity" "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=" + "resolved" "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "os-homedir" "^1.0.0" + "timed-out@^4.0.0", "timed-out@^4.0.1": "integrity" "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" "resolved" "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz" @@ -13347,11 +17349,23 @@ "abort-controller" "^3.0.0" "retimer" "^2.0.0" +"timers-browserify@^2.0.4": + "integrity" "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==" + "resolved" "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz" + "version" "2.0.12" + dependencies: + "setimmediate" "^1.0.4" + "tiny-emitter@^2.1.0": "integrity" "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" "resolved" "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz" "version" "2.1.0" +"tiny-queue@^0.2.1": + "integrity" "sha1-JaZ/LG4lOyypQZd7XvdELvl6YEY=" + "resolved" "https://registry.npmjs.org/tiny-queue/-/tiny-queue-0.2.1.tgz" + "version" "0.2.1" + "tiny-secp256k1@^1.1.3": "integrity" "sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA==" "resolved" "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz" @@ -13390,6 +17404,18 @@ "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" "version" "1.0.5" +"to-absolute-glob@^0.1.1": + "integrity" "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=" + "resolved" "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz" + "version" "0.1.1" + dependencies: + "extend-shallow" "^2.0.1" + +"to-arraybuffer@^1.0.0": + "integrity" "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + "resolved" "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz" + "version" "1.0.1" + "to-buffer@^1.1.1": "integrity" "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" "resolved" "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz" @@ -13464,7 +17490,7 @@ "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" "version" "1.0.0" -"tough-cookie@^2.2.0", "tough-cookie@^2.3.3", "tough-cookie@~2.5.0": +"tough-cookie@^2.2.0", "tough-cookie@^2.3.1", "tough-cookie@^2.3.3", "tough-cookie@^2.3.3 || ^3.0.1 || ^4.0.0", "tough-cookie@~2.5.0": "integrity" "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==" "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz" "version" "2.5.0" @@ -13546,6 +17572,20 @@ "resolve" "^1.8.1" "ts-essentials" "^1.0.0" +"ts-invariant@^0.4.0": + "integrity" "sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA==" + "resolved" "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.4.4.tgz" + "version" "0.4.4" + dependencies: + "tslib" "^1.9.3" + +"ts-invariant@^0.9.4": + "integrity" "sha512-63jtX/ZSwnUNi/WhXjnK8kz4cHHpYS60AnmA6ixz17l7E12a5puCWFlNpkne5Rl0J8TBPVHpGjsj4fxs8ObVLQ==" + "resolved" "https://registry.npmjs.org/ts-invariant/-/ts-invariant-0.9.4.tgz" + "version" "0.9.4" + dependencies: + "tslib" "^2.1.0" + "ts-node@^10.0.0": "integrity" "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==" "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz" @@ -13575,16 +17615,51 @@ "source-map-support" "^0.5.17" "yn" "3.1.1" -"tslib@^1", "tslib@^1.9.0", "tslib@^1.9.3": +"tslib@^1", "tslib@^1.10.0", "tslib@^1.9.0", "tslib@^1.9.3": "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" "version" "1.14.1" +"tslib@^2.0.3", "tslib@~2.2.0": + "integrity" "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz" + "version" "2.2.0" + +"tslib@^2.1.0", "tslib@^2.3.0": + "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + "version" "2.3.1" + +"tslib@^2.2.0": + "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + "version" "2.3.1" + +"tslib@~2.0.1": + "integrity" "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz" + "version" "2.0.3" + +"tslib@~2.1.0": + "integrity" "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz" + "version" "2.1.0" + +"tslib@~2.3.0": + "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz" + "version" "2.3.1" + "tsort@0.0.1": "integrity" "sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y=" "resolved" "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" "version" "0.0.1" +"tty-browserify@0.0.0": + "integrity" "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + "resolved" "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" + "version" "0.0.0" + "tunnel-agent@^0.6.0": "integrity" "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=" "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" @@ -13639,7 +17714,7 @@ "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz" "version" "0.7.1" -"type-is@~1.6.17", "type-is@~1.6.18": +"type-is@^1.6.16", "type-is@~1.6.17", "type-is@~1.6.18": "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" "version" "1.6.18" @@ -13694,14 +17769,14 @@ "resolved" "https://registry.npmjs.org/typed-function/-/typed-function-2.0.0.tgz" "version" "2.0.0" -"typedarray-to-buffer@^3.1.5": +"typedarray-to-buffer@^3.1.5", "typedarray-to-buffer@~3.1.5": "integrity" "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==" "resolved" "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" "version" "3.1.5" dependencies: "is-typedarray" "^1.0.0" -"typedarray@^0.0.6": +"typedarray@^0.0.6", "typedarray@~0.0.5": "integrity" "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" "version" "0.0.6" @@ -13762,11 +17837,40 @@ "resolved" "https://registry.npmjs.org/u2f-api/-/u2f-api-0.2.7.tgz" "version" "0.2.7" +"ua-parser-js@^0.7.30": + "integrity" "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==" + "resolved" "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz" + "version" "0.7.31" + +"uglify-js@^2.8.29": + "integrity" "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=" + "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz" + "version" "2.8.29" + dependencies: + "source-map" "~0.5.1" + "yargs" "~3.10.0" + optionalDependencies: + "uglify-to-browserify" "~1.0.0" + "uglify-js@^3.1.4": "integrity" "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==" "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz" "version" "3.15.3" +"uglify-to-browserify@~1.0.0": + "integrity" "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=" + "resolved" "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz" + "version" "1.0.2" + +"uglifyjs-webpack-plugin@^0.4.6": + "integrity" "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=" + "resolved" "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz" + "version" "0.4.6" + dependencies: + "source-map" "^0.5.6" + "uglify-js" "^2.8.29" + "webpack-sources" "^1.0.1" + "uint8arrays@^1.0.0", "uint8arrays@1.1.0": "integrity" "sha512-cLdlZ6jnFczsKf5IH1gPHTtcHtPGho5r4CvctohmQjw8K7Q3gFdfIGHxSTdTaCKrL4w09SsPRJTqRS0drYeszA==" "resolved" "https://registry.npmjs.org/uint8arrays/-/uint8arrays-1.1.0.tgz" @@ -13847,6 +17951,14 @@ "is-extendable" "^0.1.1" "set-value" "^2.0.1" +"unique-stream@^2.0.2": + "integrity" "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==" + "resolved" "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz" + "version" "2.3.1" + dependencies: + "json-stable-stringify-without-jsonify" "^1.0.1" + "through2-filter" "^3.0.0" + "universalify@^0.1.0": "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" @@ -13857,6 +17969,13 @@ "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" "version" "2.0.0" +"unixify@1.0.0": + "integrity" "sha1-OmQcjC/7zk2mg6XHDwOkYpQMIJA=" + "resolved" "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "normalize-path" "^2.1.1" + "unorm@^1.3.3": "integrity" "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==" "resolved" "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz" @@ -13990,6 +18109,13 @@ "has-symbols" "^1.0.1" "object.getownpropertydescriptors" "^2.1.1" +"util@^0.11.0": + "integrity" "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==" + "resolved" "https://registry.npmjs.org/util/-/util-0.11.1.tgz" + "version" "0.11.1" + dependencies: + "inherits" "2.0.3" + "util@^0.12.0", "util@^0.12.3": "integrity" "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==" "resolved" "https://registry.npmjs.org/util/-/util-0.12.4.tgz" @@ -14002,16 +18128,28 @@ "safe-buffer" "^5.1.2" "which-typed-array" "^1.1.2" +"util@0.10.3": + "integrity" "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=" + "resolved" "https://registry.npmjs.org/util/-/util-0.10.3.tgz" + "version" "0.10.3" + dependencies: + "inherits" "2.0.1" + "utils-merge@1.0.1": "integrity" "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" "version" "1.0.1" -"uuid@^3.3.2", "uuid@^3.4.0": +"uuid@^3.1.0", "uuid@^3.3.2", "uuid@^3.4.0": "integrity" "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" "version" "3.4.0" +"uuid@^8.0.0": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" + "uuid@2.0.1": "integrity" "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" "resolved" "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz" @@ -14027,6 +18165,21 @@ "resolved" "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz" "version" "3.3.2" +"uuid@8.1.0": + "integrity" "sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.1.0.tgz" + "version" "8.1.0" + +"vali-date@^1.0.0": + "integrity" "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" + "resolved" "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz" + "version" "1.0.0" + +"valid-url@1.0.9": + "integrity" "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=" + "resolved" "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz" + "version" "1.0.9" + "validate-npm-package-license@^3.0.1": "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" @@ -14035,6 +18188,16 @@ "spdx-correct" "^3.0.0" "spdx-expression-parse" "^3.0.0" +"value-or-promise@1.0.11": + "integrity" "sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==" + "resolved" "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.11.tgz" + "version" "1.0.11" + +"value-or-promise@1.0.6": + "integrity" "sha512-9r0wQsWD8z/BxPOvnwbPf05ZvFngXyouE9EKB+5GbYix+BYnAwrIChCUyFIinfbf2FL/U71z+CPpbnmTdxrwBg==" + "resolved" "https://registry.npmjs.org/value-or-promise/-/value-or-promise-1.0.6.tgz" + "version" "1.0.6" + "varint@^5.0.0": "integrity" "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==" "resolved" "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" @@ -14069,6 +18232,48 @@ "core-util-is" "1.0.2" "extsprintf" "^1.2.0" +"vinyl-fs@2.4.3": + "integrity" "sha1-PZflYuv91LZpId6nBia4S96dLQc=" + "resolved" "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.3.tgz" + "version" "2.4.3" + dependencies: + "duplexify" "^3.2.0" + "glob-stream" "^5.3.2" + "graceful-fs" "^4.0.0" + "gulp-sourcemaps" "^1.5.2" + "is-valid-glob" "^0.3.0" + "lazystream" "^1.0.0" + "lodash.isequal" "^4.0.0" + "merge-stream" "^1.0.0" + "mkdirp" "^0.5.0" + "object-assign" "^4.0.0" + "readable-stream" "^2.0.4" + "strip-bom" "^2.0.0" + "strip-bom-stream" "^1.0.0" + "through2" "^2.0.0" + "through2-filter" "^2.0.0" + "vali-date" "^1.0.0" + "vinyl" "^1.0.0" + +"vinyl@^1.0.0", "vinyl@1.X": + "integrity" "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=" + "resolved" "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "clone" "^1.0.0" + "clone-stats" "^0.0.1" + "replace-ext" "0.0.1" + +"vm-browserify@^1.0.1": + "integrity" "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + "resolved" "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" + "version" "1.1.2" + +"vuvuzela@1.0.3": + "integrity" "sha1-O+FF5YJxxzylUnndhR8SpoIRSws=" + "resolved" "https://registry.npmjs.org/vuvuzela/-/vuvuzela-1.0.3.tgz" + "version" "1.0.3" + "walker@^1.0.7": "integrity" "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==" "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" @@ -14076,6 +18281,31 @@ dependencies: "makeerror" "1.0.12" +"watchpack-chokidar2@^2.0.1": + "integrity" "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==" + "resolved" "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "chokidar" "^2.1.8" + +"watchpack@^1.4.0": + "integrity" "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==" + "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz" + "version" "1.7.5" + dependencies: + "graceful-fs" "^4.1.2" + "neo-async" "^2.5.0" + optionalDependencies: + "chokidar" "^3.4.1" + "watchpack-chokidar2" "^2.0.1" + +"wcwidth@^1.0.1": + "integrity" "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=" + "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "defaults" "^1.0.3" + "web-encoding@^1.0.2", "web-encoding@^1.0.6": "integrity" "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==" "resolved" "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz" @@ -14553,6 +18783,20 @@ "underscore" "1.9.1" "utf8" "3.0.0" +"web3-utils@1.2.9": + "integrity" "sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==" + "resolved" "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.9.tgz" + "version" "1.2.9" + dependencies: + "bn.js" "4.11.8" + "eth-lib" "0.2.7" + "ethereum-bloom-filters" "^1.0.6" + "ethjs-unit" "0.1.6" + "number-to-bn" "1.7.0" + "randombytes" "^2.1.0" + "underscore" "1.9.1" + "utf8" "3.0.0" + "web3-utils@1.5.3": "integrity" "sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q==" "resolved" "https://registry.npmjs.org/web3-utils/-/web3-utils-1.5.3.tgz" @@ -14602,6 +18846,42 @@ "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" "version" "3.0.1" +"webpack-sources@^1.0.1": + "integrity" "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==" + "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" + "version" "1.4.3" + dependencies: + "source-list-map" "^2.0.0" + "source-map" "~0.6.1" + +"webpack@^1.9 || ^2 || ^2.1.0-beta || ^2.2.0-rc || ^3.0.0", "webpack@^3.0.0": + "integrity" "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==" + "resolved" "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz" + "version" "3.12.0" + dependencies: + "acorn" "^5.0.0" + "acorn-dynamic-import" "^2.0.0" + "ajv" "^6.1.0" + "ajv-keywords" "^3.1.0" + "async" "^2.1.2" + "enhanced-resolve" "^3.4.0" + "escope" "^3.6.0" + "interpret" "^1.0.0" + "json-loader" "^0.5.4" + "json5" "^0.5.1" + "loader-runner" "^2.3.0" + "loader-utils" "^1.1.0" + "memory-fs" "~0.4.1" + "mkdirp" "~0.5.0" + "node-libs-browser" "^2.0.0" + "source-map" "^0.5.3" + "supports-color" "^4.2.1" + "tapable" "^0.2.7" + "uglifyjs-webpack-plugin" "^0.4.6" + "watchpack" "^1.4.0" + "webpack-sources" "^1.0.1" + "yargs" "^8.0.2" + "websocket@^1.0.31", "websocket@^1.0.32": "integrity" "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==" "resolved" "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz" @@ -14626,6 +18906,17 @@ "utf-8-validate" "^5.0.2" "yaeti" "^0.0.6" +"websql@1.0.0": + "integrity" "sha512-7iZ+u28Ljw5hCnMiq0BCOeSYf0vCFQe/ORY0HgscTiKjQed8WqugpBUggJ2NTnB9fahn1kEnPRX2jf8Px5PhJw==" + "resolved" "https://registry.npmjs.org/websql/-/websql-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "argsarray" "^0.0.1" + "immediate" "^3.2.2" + "noop-fn" "^1.0.0" + "sqlite3" "^4.0.0" + "tiny-queue" "^0.2.1" + "whatwg-fetch@2.0.4": "integrity" "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" "resolved" "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz" @@ -14691,6 +18982,13 @@ dependencies: "isexe" "^2.0.0" +"which@^1.2.14": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + "which@^1.2.9": "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" @@ -14745,6 +19043,11 @@ "resolved" "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz" "version" "0.2.0" +"window-size@0.1.0": + "integrity" "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + "resolved" "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz" + "version" "0.1.0" + "word-wrap@~1.2.3": "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" @@ -14755,6 +19058,11 @@ "resolved" "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" "version" "1.0.0" +"wordwrap@0.0.2": + "integrity" "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + "resolved" "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + "version" "0.0.2" + "workerpool@6.0.0": "integrity" "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==" "resolved" "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz" @@ -14782,6 +19090,15 @@ "string-width" "^3.0.0" "strip-ansi" "^5.0.0" +"wrap-ansi@^6.2.0": + "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + "wrap-ansi@^7.0.0": "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" @@ -14806,7 +19123,14 @@ "signal-exit" "^3.0.2" "typedarray-to-buffer" "^3.1.5" -"ws@*", "ws@^7.2.1", "ws@^7.3.1", "ws@^7.4.3", "ws@^7.4.6", "ws@7.4.6": +"write-stream@~0.4.3": + "integrity" "sha1-g8yMA0fQr2BXqThitOOuAd5cgcE=" + "resolved" "https://registry.npmjs.org/write-stream/-/write-stream-0.4.3.tgz" + "version" "0.4.3" + dependencies: + "readable-stream" "~0.0.2" + +"ws@*", "ws@^5.2.0 || ^6.0.0 || ^7.0.0", "ws@^7.2.1", "ws@^7.3.1", "ws@^7.4.3", "ws@^7.4.6", "ws@7.4.6": "integrity" "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" "resolved" "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" "version" "7.4.6" @@ -14837,6 +19161,11 @@ "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz" "version" "7.5.5" +"ws@7.4.5": + "integrity" "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz" + "version" "7.4.5" + "xhr-request-promise@^0.1.2": "integrity" "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==" "resolved" "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz" @@ -14884,7 +19213,15 @@ "resolved" "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz" "version" "1.8.0" -"xtend@^4.0.0", "xtend@^4.0.1", "xtend@^4.0.2", "xtend@~4.0.0", "xtend@~4.0.1": +"xss@^1.0.8": + "integrity" "sha512-qmoqrRksmzqSKvgqzN0055UFWY7OKx1/9JWeRswwEVX9fCG5jcYRxa/A2DHcmZX6VJvjzHRQ2STeeVcQkrmLSw==" + "resolved" "https://registry.npmjs.org/xss/-/xss-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "commander" "^2.20.3" + "cssfilter" "0.0.10" + +"xtend@^4.0.0", "xtend@^4.0.1", "xtend@^4.0.2", "xtend@>=4.0.0 <4.1.0-0", "xtend@~4.0.0", "xtend@~4.0.1": "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" "version" "4.0.2" @@ -14916,6 +19253,11 @@ "resolved" "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz" "version" "0.0.6" +"yallist@^2.1.2": + "integrity" "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + "version" "2.1.2" + "yallist@^3.0.0", "yallist@^3.0.2", "yallist@^3.0.3", "yallist@^3.1.1": "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" @@ -14926,6 +19268,12 @@ "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" "version" "4.0.0" +"yargs-parser@^13.1.0": + "version" "13.1.2" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + "yargs-parser@^13.1.2", "yargs-parser@13.1.2": "integrity" "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==" "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" @@ -14942,6 +19290,22 @@ "camelcase" "^5.0.0" "decamelize" "^1.2.0" +"yargs-parser@^18.1.2": + "integrity" "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" + "version" "18.1.3" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs-parser@^2.4.0": + "integrity" "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz" + "version" "2.4.1" + dependencies: + "camelcase" "^3.0.0" + "lodash.assign" "^4.0.6" + "yargs-parser@^2.4.1": "integrity" "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=" "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz" @@ -14955,6 +19319,13 @@ "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" "version" "20.2.4" +"yargs-parser@^7.0.0": + "integrity" "sha1-jQrELxbqVd69MyyvTEA4s+P139k=" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "camelcase" "^4.1.0" + "yargs-unparser@1.6.0": "integrity" "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==" "resolved" "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz" @@ -15018,6 +19389,23 @@ "y18n" "^4.0.0" "yargs-parser" "^15.0.1" +"yargs@^15.3.1": + "integrity" "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" + "version" "15.4.1" + dependencies: + "cliui" "^6.0.0" + "decamelize" "^1.2.0" + "find-up" "^4.1.0" + "get-caller-file" "^2.0.1" + "require-directory" "^2.1.1" + "require-main-filename" "^2.0.0" + "set-blocking" "^2.0.0" + "string-width" "^4.2.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^18.1.2" + "yargs@^17.1.1": "integrity" "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==" "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz" @@ -15051,6 +19439,50 @@ "y18n" "^3.2.1" "yargs-parser" "^2.4.1" +"yargs@^8.0.2": + "integrity" "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz" + "version" "8.0.2" + dependencies: + "camelcase" "^4.1.0" + "cliui" "^3.2.0" + "decamelize" "^1.1.1" + "get-caller-file" "^1.0.1" + "os-locale" "^2.0.0" + "read-pkg-up" "^2.0.0" + "require-directory" "^2.1.1" + "require-main-filename" "^1.0.1" + "set-blocking" "^2.0.0" + "string-width" "^2.0.0" + "which-module" "^2.0.0" + "y18n" "^3.2.1" + "yargs-parser" "^7.0.0" + +"yargs@~3.10.0": + "integrity" "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz" + "version" "3.10.0" + dependencies: + "camelcase" "^1.0.2" + "cliui" "^2.1.0" + "decamelize" "^1.0.0" + "window-size" "0.1.0" + +"yargs@13.2.4": + "version" "13.2.4" + dependencies: + "cliui" "^5.0.0" + "find-up" "^3.0.0" + "get-caller-file" "^2.0.1" + "os-locale" "^3.1.0" + "require-directory" "^2.1.1" + "require-main-filename" "^2.0.0" + "set-blocking" "^2.0.0" + "string-width" "^3.0.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^13.1.0" + "yargs@16.2.0": "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" @@ -15064,6 +19496,24 @@ "y18n" "^5.0.5" "yargs-parser" "^20.2.2" +"yargs@4.6.0": + "integrity" "sha1-y0BQwBWb+2u2ScD0r1UFJqhGGdw=" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-4.6.0.tgz" + "version" "4.6.0" + dependencies: + "camelcase" "^2.0.1" + "cliui" "^3.2.0" + "decamelize" "^1.1.1" + "lodash.assign" "^4.0.3" + "os-locale" "^1.4.0" + "pkg-conf" "^1.1.2" + "read-pkg-up" "^1.0.1" + "require-main-filename" "^1.0.1" + "string-width" "^1.0.1" + "window-size" "^0.2.0" + "y18n" "^3.2.1" + "yargs-parser" "^2.4.0" + "yauzl@^2.4.2": "integrity" "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=" "resolved" "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" @@ -15081,3 +19531,23 @@ "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" "version" "0.1.0" + +"zen-observable-ts@^0.8.21": + "integrity" "sha512-Yj3yXweRc8LdRMrCC8nIc4kkjWecPAUVh0TI0OUrWXx6aX790vLcDlWca6I4vsyCGH3LpWxq0dJRcMOFoVqmeg==" + "resolved" "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz" + "version" "0.8.21" + dependencies: + "tslib" "^1.9.3" + "zen-observable" "^0.8.0" + +"zen-observable-ts@^1.2.0": + "integrity" "sha512-hc/TGiPkAWpByykMwDcem3SdUgA4We+0Qb36bItSuJC9xD0XVBZoFHYoadAomDSNf64CG8Ydj0Qb8Od8BUWz5g==" + "resolved" "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-1.2.3.tgz" + "version" "1.2.3" + dependencies: + "zen-observable" "0.8.15" + +"zen-observable@^0.8.0", "zen-observable@0.8.15": + "integrity" "sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==" + "resolved" "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.15.tgz" + "version" "0.8.15"