From 8500e5865c607937944d58bfa281be3bd563b398 Mon Sep 17 00:00:00 2001 From: Nian Yanchuan Date: Wed, 4 May 2022 14:56:43 +0800 Subject: [PATCH 01/87] fix comments in IACLManager --- contracts/interfaces/IACLManager.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/interfaces/IACLManager.sol b/contracts/interfaces/IACLManager.sol index 4bb6e645b..97ac8049d 100644 --- a/contracts/interfaces/IACLManager.sol +++ b/contracts/interfaces/IACLManager.sol @@ -123,7 +123,7 @@ interface IACLManager { function addFlashBorrower(address borrower) external; /** - * @notice Removes an admin as FlashBorrower + * @notice Removes an address as FlashBorrower * @param borrower The address of the FlashBorrower to remove */ function removeFlashBorrower(address borrower) external; From 526a1e6965c00c7fbac41578bcc139404f751c5b Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Fri, 3 Jun 2022 12:37:54 +0200 Subject: [PATCH 02/87] fix: Return real backing amount when backUnbacked --- contracts/interfaces/IPool.sol | 7 ++++--- contracts/protocol/libraries/logic/BridgeLogic.sol | 6 +++++- contracts/protocol/pool/Pool.sol | 5 +++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index 7f64b4ab4..301d3639c 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -211,7 +211,7 @@ interface IPool { event MintedToTreasury(address indexed reserve, uint256 amountMinted); /** - * @dev Mints an `amount` of aTokens to the `onBehalfOf` + * @notice Mints an `amount` of aTokens to the `onBehalfOf` * @param asset The address of the underlying asset to mint * @param amount The amount to mint * @param onBehalfOf The address that will receive the aTokens @@ -226,16 +226,17 @@ interface IPool { ) external; /** - * @dev Back the current unbacked underlying with `amount` and pay `fee`. + * @notice Back the current unbacked underlying with `amount` and pay `fee`. * @param asset The address of the underlying asset to back * @param amount The amount to back * @param fee The amount paid in fees + * @return The backed amount **/ function backUnbacked( address asset, uint256 amount, uint256 fee - ) external; + ) external returns (uint256); /** * @notice Supplies an `amount` of underlying asset into the reserve, receiving in return overlying aTokens. diff --git a/contracts/protocol/libraries/logic/BridgeLogic.sol b/contracts/protocol/libraries/logic/BridgeLogic.sol index d5f1ce9e2..fc2b6fc6e 100644 --- a/contracts/protocol/libraries/logic/BridgeLogic.sol +++ b/contracts/protocol/libraries/logic/BridgeLogic.sol @@ -100,12 +100,14 @@ library BridgeLogic { /** * @notice Back the current unbacked with `amount` and pay `fee`. + * @dev It is not possible to back more than the existing unbacked amount of the reserve * @dev Emits the `BackUnbacked` event * @param reserve The reserve to back unbacked for * @param asset The address of the underlying asset to repay * @param amount The amount to back * @param fee The amount paid in fees * @param protocolFeeBps The fraction of fees in basis points paid to the protocol + * @return The backed amount **/ function executeBackUnbacked( DataTypes.ReserveData storage reserve, @@ -113,7 +115,7 @@ library BridgeLogic { uint256 amount, uint256 fee, uint256 protocolFeeBps - ) external { + ) external returns (uint256) { DataTypes.ReserveCache memory reserveCache = reserve.cache(); reserve.updateState(reserveCache); @@ -137,5 +139,7 @@ library BridgeLogic { IERC20(asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, added); emit BackUnbacked(asset, msg.sender, backingAmount, fee); + + return backingAmount; } } diff --git a/contracts/protocol/pool/Pool.sol b/contracts/protocol/pool/Pool.sol index b89b3b60a..8c3fcacda 100644 --- a/contracts/protocol/pool/Pool.sol +++ b/contracts/protocol/pool/Pool.sol @@ -136,8 +136,9 @@ contract Pool is VersionedInitializable, PoolStorage, IPool { address asset, uint256 amount, uint256 fee - ) external virtual override onlyBridge { - BridgeLogic.executeBackUnbacked(_reserves[asset], asset, amount, fee, _bridgeProtocolFee); + ) external virtual override onlyBridge returns (uint256) { + return + BridgeLogic.executeBackUnbacked(_reserves[asset], asset, amount, fee, _bridgeProtocolFee); } /// @inheritdoc IPool From cd508a713d3cdd4e09c514fe0c47cf8f51383b07 Mon Sep 17 00:00:00 2001 From: The-3D Date: Mon, 8 Aug 2022 17:13:25 +0200 Subject: [PATCH 03/87] fix: reentrancy in liquidationCall --- .../protocol/libraries/logic/LiquidationLogic.sol | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/contracts/protocol/libraries/logic/LiquidationLogic.sol b/contracts/protocol/libraries/logic/LiquidationLogic.sol index 7d91d3365..2a0ce11d6 100644 --- a/contracts/protocol/libraries/logic/LiquidationLogic.sol +++ b/contracts/protocol/libraries/logic/LiquidationLogic.sol @@ -165,6 +165,13 @@ library LiquidationLogic { if (vars.userTotalDebt == vars.actualDebtToLiquidate) { userConfig.setBorrowing(debtReserve.id, false); } + + // If the collateral being liquidated is equal to the user balance, + // we set the currency as not being used as collateral anymore + if (vars.actualCollateralToLiquidate == vars.userCollateralBalance) { + userConfig.setUsingAsCollateral(collateralReserve.id, false); + emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user); + } _burnDebtTokens(params, vars); @@ -198,13 +205,6 @@ library LiquidationLogic { ); } - // If the collateral being liquidated is equal to the user balance, - // we set the currency as not being used as collateral anymore - if (vars.actualCollateralToLiquidate == vars.userCollateralBalance) { - userConfig.setUsingAsCollateral(collateralReserve.id, false); - emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user); - } - // Transfers the debt asset being repaid to the aToken, where the liquidity is kept IERC20(params.debtAsset).safeTransferFrom( msg.sender, From e497caf615a1d4d2628745ad8db57e764080340f Mon Sep 17 00:00:00 2001 From: The-3D Date: Mon, 8 Aug 2022 17:26:31 +0200 Subject: [PATCH 04/87] Revert "fix: reentrancy in liquidationCall" This reverts commit cd508a713d3cdd4e09c514fe0c47cf8f51383b07. --- .../protocol/libraries/logic/LiquidationLogic.sol | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/contracts/protocol/libraries/logic/LiquidationLogic.sol b/contracts/protocol/libraries/logic/LiquidationLogic.sol index 2a0ce11d6..7d91d3365 100644 --- a/contracts/protocol/libraries/logic/LiquidationLogic.sol +++ b/contracts/protocol/libraries/logic/LiquidationLogic.sol @@ -165,13 +165,6 @@ library LiquidationLogic { if (vars.userTotalDebt == vars.actualDebtToLiquidate) { userConfig.setBorrowing(debtReserve.id, false); } - - // If the collateral being liquidated is equal to the user balance, - // we set the currency as not being used as collateral anymore - if (vars.actualCollateralToLiquidate == vars.userCollateralBalance) { - userConfig.setUsingAsCollateral(collateralReserve.id, false); - emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user); - } _burnDebtTokens(params, vars); @@ -205,6 +198,13 @@ library LiquidationLogic { ); } + // If the collateral being liquidated is equal to the user balance, + // we set the currency as not being used as collateral anymore + if (vars.actualCollateralToLiquidate == vars.userCollateralBalance) { + userConfig.setUsingAsCollateral(collateralReserve.id, false); + emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user); + } + // Transfers the debt asset being repaid to the aToken, where the liquidity is kept IERC20(params.debtAsset).safeTransferFrom( msg.sender, From 45f47b44dd47b4cd0757fbaefa0fcbc008a45b59 Mon Sep 17 00:00:00 2001 From: zhoujia6139 Date: Sat, 27 Aug 2022 01:35:50 +0800 Subject: [PATCH 05/87] a liquidation fail case. --- test-suites/liquidation-with-fee.spec.ts | 108 +++++++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/test-suites/liquidation-with-fee.spec.ts b/test-suites/liquidation-with-fee.spec.ts index ff01fca6b..377275635 100644 --- a/test-suites/liquidation-with-fee.spec.ts +++ b/test-suites/liquidation-with-fee.spec.ts @@ -26,6 +26,114 @@ makeSuite('Pool Liquidation: Add fee to liquidations', (testEnv) => { await waitForTx(await addressesProvider.setPriceOracle(aaveOracle.address)); }); + it('position should be liquidated when turn on liquidation protocol fee.', async () => { + const { pool, users, usdc, weth, oracle, configurator, helpersContract } = testEnv; + + const depositor = users[0]; + const borrower = users[1]; + const liquidator = users[2]; + + //1, prepare asset price. + await oracle.setAssetPrice(usdc.address, '1000000000000000'); //weth = 1000 usdc + + //2, depositor deposit 100000 usdc and 10 eth + await usdc + .connect(depositor.signer) + ['mint(uint256)'](await convertToCurrencyDecimals(usdc.address, '10000')); + await usdc.connect(depositor.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(depositor.signer) + .supply( + usdc.address, + await convertToCurrencyDecimals(usdc.address, '10000'), + depositor.address, + 0 + ); + + await weth + .connect(depositor.signer) + ['mint(uint256)'](convertToCurrencyDecimals(weth.address, '10')); + await weth.connect(depositor.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(depositor.signer) + .supply(weth.address, convertToCurrencyDecimals(weth.address, '10'), depositor.address, 0); + + //3, borrower deposit 10 eth, borrow 5000 usdc + await weth + .connect(borrower.signer) + ['mint(uint256)'](convertToCurrencyDecimals(weth.address, '10')); + await weth.connect(borrower.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(borrower.signer) + .supply(weth.address, convertToCurrencyDecimals(weth.address, '10'), borrower.address, 0); + + await pool + .connect(borrower.signer) + .borrow( + usdc.address, + await convertToCurrencyDecimals(usdc.address, '5000'), + RateMode.Variable, + 0, + borrower.address + ); + + //4, liquidator deposit 10000 usdc and borrow 5 eth. + await usdc + .connect(liquidator.signer) + ['mint(uint256)'](await convertToCurrencyDecimals(usdc.address, '20000')); + await usdc.connect(liquidator.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(liquidator.signer) + .supply( + usdc.address, + await convertToCurrencyDecimals(usdc.address, '10000'), + liquidator.address, + 0 + ); + + await pool + .connect(liquidator.signer) + .borrow( + weth.address, + convertToCurrencyDecimals(weth.address, '5'), + RateMode.Variable, + 0, + liquidator.address + ); + + //5, advance block to make ETH income index > 1 + await increaseTime(86400); + + //6, decrease weth price to allow liquidation + await oracle.setAssetPrice(usdc.address, '20000000000000000'); //weth = 500 usdc + + //7, turn on liquidation protocol fee + expect(await configurator.setLiquidationProtocolFee(weth.address, 500)); + const wethLiquidationProtocolFee = await helpersContract.getLiquidationProtocolFee( + weth.address + ); + expect(wethLiquidationProtocolFee).to.be.eq(500); + + const tryMaxTimes = 20; + for (let i = 1; i <= tryMaxTimes; i++) { + const tmpSnap = await evmSnapshot(); + await increaseTime(i); + expect( + await pool + .connect(liquidator.signer) + .liquidationCall(weth.address, usdc.address, borrower.address, MAX_UINT_AMOUNT, false) + ); + + if (i !== tryMaxTimes) { + await evmRevert(tmpSnap); + } + } + + expect(await weth.balanceOf(liquidator.address)).to.be.gt( + convertToCurrencyDecimals(weth.address, '5') + ); + }); + it('Sets the WETH protocol liquidation fee to 1000 (10.00%)', async () => { const { configurator, weth, aave, helpersContract } = testEnv; From 623730b3db4146281a11c5424938d339c4005357 Mon Sep 17 00:00:00 2001 From: zhoujia6139 Date: Sat, 27 Aug 2022 01:43:14 +0800 Subject: [PATCH 06/87] fix: solution to fix liquidation failed case. --- contracts/protocol/libraries/logic/LiquidationLogic.sol | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/contracts/protocol/libraries/logic/LiquidationLogic.sol b/contracts/protocol/libraries/logic/LiquidationLogic.sol index 7d91d3365..090565baf 100644 --- a/contracts/protocol/libraries/logic/LiquidationLogic.sol +++ b/contracts/protocol/libraries/logic/LiquidationLogic.sol @@ -191,6 +191,12 @@ library LiquidationLogic { // Transfer fee to treasury if it is non-zero if (vars.liquidationProtocolFeeAmount != 0) { + uint256 index = collateralReserve.getNormalizedIncome(); + uint256 aTokenAmount = vars.liquidationProtocolFeeAmount.rayDiv(index); + uint256 aTokenBalance = vars.collateralAToken.scaledBalanceOf(params.user); + if (aTokenAmount > aTokenBalance) { + vars.liquidationProtocolFeeAmount = aTokenBalance.rayMul(index); + } vars.collateralAToken.transferOnLiquidation( params.user, vars.collateralAToken.RESERVE_TREASURY_ADDRESS(), From bb625723211944a7325b505caf6199edf4b8ed2a Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Mon, 29 Aug 2022 06:59:51 -0400 Subject: [PATCH 07/87] feat: enable and disable flashloans --- .gitignore | 4 ++- contracts/deployments/ReservesSetupHelper.sol | 2 ++ contracts/interfaces/IPoolConfigurator.sol | 15 ++++++++++ .../configuration/ReserveConfiguration.sol | 28 +++++++++++++++++++ .../protocol/libraries/helpers/Errors.sol | 1 + .../libraries/logic/ValidationLogic.sol | 1 + contracts/protocol/pool/PoolConfigurator.sol | 18 +++++++++++- 7 files changed, 67 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 0b724ca7c..c122f7bf1 100644 --- a/.gitignore +++ b/.gitignore @@ -18,4 +18,6 @@ coverage .coverage_cache .coverage_contracts coverage.json -deployments/ \ No newline at end of file +deployments/ + +.DS_Store \ No newline at end of file diff --git a/contracts/deployments/ReservesSetupHelper.sol b/contracts/deployments/ReservesSetupHelper.sol index 8176f6cfe..89e0054f5 100644 --- a/contracts/deployments/ReservesSetupHelper.sol +++ b/contracts/deployments/ReservesSetupHelper.sol @@ -21,6 +21,7 @@ contract ReservesSetupHelper is Ownable { uint256 supplyCap; bool stableBorrowingEnabled; bool borrowingEnabled; + bool flashLoanEnabled; } /** @@ -43,6 +44,7 @@ contract ReservesSetupHelper is Ownable { if (inputParams[i].borrowingEnabled) { configurator.setReserveBorrowing(inputParams[i].asset, true); + configurator.setReserveFlashLoaning(inputParams[i].asset, inputParams[i].flashLoanEnabled); configurator.setBorrowCap(inputParams[i].asset, inputParams[i].borrowCap); configurator.setReserveStableRateBorrowing( diff --git a/contracts/interfaces/IPoolConfigurator.sol b/contracts/interfaces/IPoolConfigurator.sol index d84454a70..1ff0ec077 100644 --- a/contracts/interfaces/IPoolConfigurator.sol +++ b/contracts/interfaces/IPoolConfigurator.sol @@ -32,6 +32,13 @@ interface IPoolConfigurator { **/ event ReserveBorrowing(address indexed asset, bool enabled); + /** + * @dev Emitted when flashloans are enabled or disabled on a reserve. + * @param asset The address of the underlying asset of the reserve + * @param enabled True if flashloans are enabled, False if flashloans are disabled + */ + event ReserveFlashLoaning(address indexed asset, bool enabled); + /** * @dev Emitted when the collateralization risk parameters for the specified asset are updated. * @param asset The address of the underlying asset of the reserve @@ -310,6 +317,14 @@ interface IPoolConfigurator { **/ function setReserveStableRateBorrowing(address asset, bool enabled) external; + /** + * @notice Configures flashloans on a reserve + * @dev Can only be enabled (set to true) if borrowing is enabled + * @param asset The address of the underlying asset of the reserve + * @param enabled True if flashloans need to be enabled, false to disable falshloans + */ + function setReserveFlashLoaning(address asset, bool enabled) external; + /** * @notice Activate or deactivate a reserve * @param asset The address of the underlying asset of the reserve diff --git a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol index ed38c5c36..36ccf827d 100644 --- a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol +++ b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol @@ -28,6 +28,7 @@ library ReserveConfiguration { uint256 internal constant EMODE_CATEGORY_MASK = 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore uint256 internal constant UNBACKED_MINT_CAP_MASK = 0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore uint256 internal constant DEBT_CEILING_MASK = 0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore + uint256 internal constant FLASHLOAN_ENABLED_MASK = 0xEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16; @@ -49,6 +50,7 @@ library ReserveConfiguration { uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168; uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176; uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212; + uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 252; uint256 internal constant MAX_VALID_LTV = 65535; uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535; @@ -547,6 +549,32 @@ library ReserveConfiguration { return (self.data & ~EMODE_CATEGORY_MASK) >> EMODE_CATEGORY_START_BIT_POSITION; } + /** + * @dev Set whether or not FlashLoaning this asset is enabled + * @param self The reserve configuration + * @param flashLoanEnabled boolean to indicated if Flashloans should be enabled (1) or disabled (0) + */ + function setFlashLoanEnabled(DataTypes.ReserveConfigurationMap memory self, bool flashLoanEnabled) + internal + pure + { + self.data = + (self.data & FLASHLOAN_ENABLED_MASK) | + (uint256(flashLoanEnabled ? 1 : 0) << FLASHLOAN_ENABLED_START_BIT_POSITION); + } + + /** + * @dev Get the flashLoanEnabledSetting + * @param self The reserve configuration + */ + function getFlashLoanEnabled(DataTypes.ReserveConfigurationMap memory self) + internal + pure + returns (bool) + { + return (self.data & ~FLASHLOAN_ENABLED_MASK) != 0; + } + /** * @notice Gets the configuration flags of the reserve * @param self The reserve configuration diff --git a/contracts/protocol/libraries/helpers/Errors.sol b/contracts/protocol/libraries/helpers/Errors.sol index 640e46322..1ef762b49 100644 --- a/contracts/protocol/libraries/helpers/Errors.sol +++ b/contracts/protocol/libraries/helpers/Errors.sol @@ -97,4 +97,5 @@ library Errors { string public constant STABLE_BORROWING_ENABLED = '88'; // 'Stable borrowing is enabled' string public constant SILOED_BORROWING_VIOLATION = '89'; // 'User is trying to borrow multiple assets including a siloed one' string public constant RESERVE_DEBT_NOT_ZERO = '90'; // the total debt of the reserve needs to be 0 + string public constant FLASHLOAN_DISABLED = '91'; // FlashLoaning for this asset is disabled } diff --git a/contracts/protocol/libraries/logic/ValidationLogic.sol b/contracts/protocol/libraries/logic/ValidationLogic.sol index fb2eda0c1..86374e4f7 100644 --- a/contracts/protocol/libraries/logic/ValidationLogic.sol +++ b/contracts/protocol/libraries/logic/ValidationLogic.sol @@ -472,6 +472,7 @@ library ValidationLogic { .configuration; require(!configuration.getPaused(), Errors.RESERVE_PAUSED); require(configuration.getActive(), Errors.RESERVE_INACTIVE); + require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED); } } diff --git a/contracts/protocol/pool/PoolConfigurator.sol b/contracts/protocol/pool/PoolConfigurator.sol index b99610c2e..780e01b55 100644 --- a/contracts/protocol/pool/PoolConfigurator.sol +++ b/contracts/protocol/pool/PoolConfigurator.sol @@ -69,7 +69,7 @@ contract PoolConfigurator is VersionedInitializable, IPoolConfigurator { uint256 public constant CONFIGURATOR_REVISION = 0x1; /// @inheritdoc VersionedInitializable - function getRevision() internal pure virtual override returns (uint256) { + function getRevision() internal virtual override pure returns (uint256) { return CONFIGURATOR_REVISION; } @@ -191,6 +191,22 @@ contract PoolConfigurator is VersionedInitializable, IPoolConfigurator { emit ReserveStableRateBorrowing(asset, enabled); } + /// @inheritdoc IPoolConfigurator + function setReserveFlashLoaning(address asset, bool enabled) + external + override + onlyRiskOrPoolAdmins + { + DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset); + + if (enabled) { + require(currentConfig.getBorrowingEnabled(), Errors.BORROWING_NOT_ENABLED); + } + currentConfig.setFlashLoanEnabled(enabled); + _pool.setConfiguration(asset, currentConfig); + emit ReserveFlashLoaning(asset, enabled); + } + /// @inheritdoc IPoolConfigurator function setReserveActive(address asset, bool active) external override onlyPoolAdmin { if (!active) _checkNoSuppliers(asset); From d7aa26af60d2b9f34c95316fe42c17f51115630b Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Mon, 29 Aug 2022 07:06:53 -0400 Subject: [PATCH 08/87] fix: remove gitignore update --- .gitignore | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index c122f7bf1..0b724ca7c 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,4 @@ coverage .coverage_cache .coverage_contracts coverage.json -deployments/ - -.DS_Store \ No newline at end of file +deployments/ \ No newline at end of file From 348ce204a7b30a9846dbe9637b17e86125137d6f Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Mon, 29 Aug 2022 07:19:36 -0400 Subject: [PATCH 09/87] feat: bump to beta version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index af85985ab..efa81b006 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@aave/core-v3", - "version": "1.16.2", + "version": "1.16.2-beta.0", "description": "Aave Protocol V3 core smart contracts", "files": [ "contracts", From 8b9221b822c0ecf1cc84831b51d4137072dc28d3 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Mon, 29 Aug 2022 10:33:48 -0400 Subject: [PATCH 10/87] feat: remove borrow enabled requirement --- contracts/protocol/pool/PoolConfigurator.sol | 3 --- package-lock.json | 21 +++++++++++--------- package.json | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/contracts/protocol/pool/PoolConfigurator.sol b/contracts/protocol/pool/PoolConfigurator.sol index 780e01b55..cebbb0cfa 100644 --- a/contracts/protocol/pool/PoolConfigurator.sol +++ b/contracts/protocol/pool/PoolConfigurator.sol @@ -199,9 +199,6 @@ contract PoolConfigurator is VersionedInitializable, IPoolConfigurator { { DataTypes.ReserveConfigurationMap memory currentConfig = _pool.getConfiguration(asset); - if (enabled) { - require(currentConfig.getBorrowingEnabled(), Errors.BORROWING_NOT_ENABLED); - } currentConfig.setFlashLoanEnabled(enabled); _pool.setConfiguration(asset, currentConfig); emit ReserveFlashLoaning(asset, enabled); diff --git a/package-lock.json b/package-lock.json index f58c17f04..fc1e73ff1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@aave/core-v3", - "version": "1.16.2", + "version": "1.16.2-beta.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@aave/core-v3", - "version": "1.16.2", + "version": "1.16.2-beta.0", "license": "BUSL-1.1", "dependencies": { "@nomiclabs/hardhat-etherscan": "^2.1.7", @@ -14,7 +14,7 @@ "tmp-promise": "^3.0.2" }, "devDependencies": { - "@aave/deploy-v3": "1.27.0", + "@aave/deploy-v3": "1.24.0-beta.0", "@aave/periphery-v3": "1.18.0", "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.13", "@tenderly/hardhat-tenderly": "1.1.0-beta.5", @@ -69,15 +69,18 @@ } }, "node_modules/@aave/deploy-v3": { - "version": "1.27.0", - "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.27.0/43e2eb3f7bab0f99324d1ce9cbd97fdd40c25a33bdc253d1d7780f61d561b1f4", - "integrity": "sha512-NhZwkPn81yPeCU5GmHXcVLkp/+ljjw6np1wW61v+IWZjqeV+RB4Bm0kf2IE9Pc09aeZsyIZJ5kLbL4OQW0Mprg==", + "version": "1.24.0-beta.0", + "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.24.0-beta.0/db0a131eff2539798c1e5128f1d28b9fe7d39080", + "integrity": "sha512-MQtuDGbk2qC3lylf8dX3omvgSnMsHjIDZPrQmfmqgegcPzDPySzyGb9STSuBn2unDbG48F+eP2tVlAGGQDt3EA==", "dev": true, "license": "AGPLv3", "dependencies": { "bip39": "^3.0.4", "defender-relay-client": "^1.11.1" }, + "engines": { + "node": ">=16.0.0" + }, "peerDependencies": { "@aave/core-v3": "1.x", "@aave/periphery-v3": "1.x", @@ -23908,9 +23911,9 @@ } }, "@aave/deploy-v3": { - "version": "1.27.0", - "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.27.0/43e2eb3f7bab0f99324d1ce9cbd97fdd40c25a33bdc253d1d7780f61d561b1f4", - "integrity": "sha512-NhZwkPn81yPeCU5GmHXcVLkp/+ljjw6np1wW61v+IWZjqeV+RB4Bm0kf2IE9Pc09aeZsyIZJ5kLbL4OQW0Mprg==", + "version": "1.24.0-beta.0", + "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.24.0-beta.0/db0a131eff2539798c1e5128f1d28b9fe7d39080", + "integrity": "sha512-MQtuDGbk2qC3lylf8dX3omvgSnMsHjIDZPrQmfmqgegcPzDPySzyGb9STSuBn2unDbG48F+eP2tVlAGGQDt3EA==", "dev": true, "requires": { "bip39": "^3.0.4", diff --git a/package.json b/package.json index efa81b006..bf0b93fbd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@aave/core-v3", - "version": "1.16.2-beta.0", + "version": "1.16.2-beta.1", "description": "Aave Protocol V3 core smart contracts", "files": [ "contracts", @@ -30,7 +30,7 @@ "prepublish": "npm run compile" }, "devDependencies": { - "@aave/deploy-v3": "1.27.0", + "@aave/deploy-v3": "1.24.0-beta.0", "@aave/periphery-v3": "1.18.0", "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.13", "@tenderly/hardhat-tenderly": "1.1.0-beta.5", From 8d12d798cee82ab2d2b210c35a9ca69089b5ded3 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Mon, 29 Aug 2022 14:35:20 -0400 Subject: [PATCH 11/87] feat: updates and tests --- contracts/deployments/ReservesSetupHelper.sol | 2 +- contracts/misc/AaveProtocolDataProvider.sol | 12 ++ package-lock.json | 18 +- package.json | 2 +- test-suites/configurator.spec.ts | 190 ++++++++++-------- test-suites/pool-flashloan.spec.ts | 100 +++++---- 6 files changed, 195 insertions(+), 129 deletions(-) diff --git a/contracts/deployments/ReservesSetupHelper.sol b/contracts/deployments/ReservesSetupHelper.sol index 89e0054f5..047150328 100644 --- a/contracts/deployments/ReservesSetupHelper.sol +++ b/contracts/deployments/ReservesSetupHelper.sol @@ -44,7 +44,6 @@ contract ReservesSetupHelper is Ownable { if (inputParams[i].borrowingEnabled) { configurator.setReserveBorrowing(inputParams[i].asset, true); - configurator.setReserveFlashLoaning(inputParams[i].asset, inputParams[i].flashLoanEnabled); configurator.setBorrowCap(inputParams[i].asset, inputParams[i].borrowCap); configurator.setReserveStableRateBorrowing( @@ -52,6 +51,7 @@ contract ReservesSetupHelper is Ownable { inputParams[i].stableBorrowingEnabled ); } + configurator.setReserveFlashLoaning(inputParams[i].asset, inputParams[i].flashLoanEnabled); configurator.setSupplyCap(inputParams[i].asset, inputParams[i].supplyCap); configurator.setReserveFactor(inputParams[i].asset, inputParams[i].reserveFactor); } diff --git a/contracts/misc/AaveProtocolDataProvider.sol b/contracts/misc/AaveProtocolDataProvider.sol index 21bef5d02..f954755bc 100644 --- a/contracts/misc/AaveProtocolDataProvider.sol +++ b/contracts/misc/AaveProtocolDataProvider.sol @@ -374,4 +374,16 @@ contract AaveProtocolDataProvider is IPoolDataProvider { return (reserve.interestRateStrategyAddress); } + + /** + * @notice Returns whether the reserve has FlashLoans enabled or disabled + * @param asset The address of the underlying asset of the reserve + * @return enabled True if FlashLoans are enabled, False if disabled + * */ + function getFlashLoanEnabled(address asset) external view returns (bool) { + DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool()) + .getConfiguration(asset); + + return configuration.getFlashLoanEnabled(); + } } diff --git a/package-lock.json b/package-lock.json index fc1e73ff1..cb99f0671 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@aave/core-v3", - "version": "1.16.2-beta.0", + "version": "1.16.2-beta.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@aave/core-v3", - "version": "1.16.2-beta.0", + "version": "1.16.2-beta.1", "license": "BUSL-1.1", "dependencies": { "@nomiclabs/hardhat-etherscan": "^2.1.7", @@ -14,7 +14,7 @@ "tmp-promise": "^3.0.2" }, "devDependencies": { - "@aave/deploy-v3": "1.24.0-beta.0", + "@aave/deploy-v3": "1.24.0-beta.2", "@aave/periphery-v3": "1.18.0", "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.13", "@tenderly/hardhat-tenderly": "1.1.0-beta.5", @@ -69,9 +69,9 @@ } }, "node_modules/@aave/deploy-v3": { - "version": "1.24.0-beta.0", - "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.24.0-beta.0/db0a131eff2539798c1e5128f1d28b9fe7d39080", - "integrity": "sha512-MQtuDGbk2qC3lylf8dX3omvgSnMsHjIDZPrQmfmqgegcPzDPySzyGb9STSuBn2unDbG48F+eP2tVlAGGQDt3EA==", + "version": "1.24.0-beta.2", + "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.24.0-beta.2/1033edf05212730628eddb7896ea874d29516a44", + "integrity": "sha512-05d73D7UaK8vOOV2VYU8tJuE+WGbF+dX1MTknYpJ5KWddwJ9gSsSmIY6wCVONLNwyYoeYI6Romf7Anyob2KQew==", "dev": true, "license": "AGPLv3", "dependencies": { @@ -23911,9 +23911,9 @@ } }, "@aave/deploy-v3": { - "version": "1.24.0-beta.0", - "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.24.0-beta.0/db0a131eff2539798c1e5128f1d28b9fe7d39080", - "integrity": "sha512-MQtuDGbk2qC3lylf8dX3omvgSnMsHjIDZPrQmfmqgegcPzDPySzyGb9STSuBn2unDbG48F+eP2tVlAGGQDt3EA==", + "version": "1.24.0-beta.2", + "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.24.0-beta.2/1033edf05212730628eddb7896ea874d29516a44", + "integrity": "sha512-05d73D7UaK8vOOV2VYU8tJuE+WGbF+dX1MTknYpJ5KWddwJ9gSsSmIY6wCVONLNwyYoeYI6Romf7Anyob2KQew==", "dev": true, "requires": { "bip39": "^3.0.4", diff --git a/package.json b/package.json index bf0b93fbd..6eb441409 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "prepublish": "npm run compile" }, "devDependencies": { - "@aave/deploy-v3": "1.24.0-beta.0", + "@aave/deploy-v3": "1.24.0-beta.2", "@aave/periphery-v3": "1.18.0", "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.13", "@tenderly/hardhat-tenderly": "1.1.0-beta.5", diff --git a/test-suites/configurator.spec.ts b/test-suites/configurator.spec.ts index cca200aad..df0b9d420 100644 --- a/test-suites/configurator.spec.ts +++ b/test-suites/configurator.spec.ts @@ -1,9 +1,9 @@ -import { expect } from 'chai'; -import { utils, BigNumber, BigNumberish } from 'ethers'; -import { strategyWETH } from '@aave/deploy-v3/dist/markets/test/reservesConfigs'; -import { getFirstSigner } from '@aave/deploy-v3/dist/helpers/utilities/signer'; -import { MAX_UINT_AMOUNT, ONE_ADDRESS, RAY, ZERO_ADDRESS } from '../helpers/constants'; -import { ProtocolErrors } from '../helpers/types'; +import {expect} from 'chai'; +import {utils, BigNumber, BigNumberish} from 'ethers'; +import {strategyWETH} from '@aave/deploy-v3/dist/markets/test/reservesConfigs'; +import {getFirstSigner} from '@aave/deploy-v3/dist/helpers/utilities/signer'; +import {MAX_UINT_AMOUNT, ONE_ADDRESS, RAY, ZERO_ADDRESS} from '../helpers/constants'; +import {ProtocolErrors} from '../helpers/types'; import { AaveProtocolDataProvider, AToken__factory, @@ -12,8 +12,8 @@ import { StableDebtToken__factory, VariableDebtToken__factory, } from '../types'; -import { TestEnv, makeSuite } from './helpers/make-suite'; -import { advanceTimeAndBlock, evmRevert, evmSnapshot } from '@aave/deploy-v3'; +import {TestEnv, makeSuite} from './helpers/make-suite'; +import {advanceTimeAndBlock, evmRevert, evmSnapshot} from '@aave/deploy-v3'; type ReserveConfigurationValues = { reserveDecimals: string; @@ -85,8 +85,7 @@ const getReserveData = async (helpersContract: AaveProtocolDataProvider, asset: makeSuite('PoolConfigurator', (testEnv: TestEnv) => { let baseConfigValues: ReserveConfigurationValues; - const { RESERVE_LIQUIDITY_NOT_ZERO, INVALID_DEBT_CEILING, RESERVE_DEBT_NOT_ZERO } = - ProtocolErrors; + const {RESERVE_LIQUIDITY_NOT_ZERO, INVALID_DEBT_CEILING, RESERVE_DEBT_NOT_ZERO} = ProtocolErrors; before(() => { const { @@ -119,7 +118,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('InitReserves via AssetListing admin', async () => { - const { addressesProvider, configurator, poolAdmin, aclManager, users, pool } = testEnv; + const {addressesProvider, configurator, poolAdmin, aclManager, users, pool} = testEnv; // const snapId const assetListingAdmin = users[4]; @@ -188,21 +187,21 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Deactivates the ETH reserve', async () => { - const { configurator, weth, helpersContract } = testEnv; + const {configurator, weth, helpersContract} = testEnv; expect(await configurator.setReserveActive(weth.address, false)); - const { isActive } = await helpersContract.getReserveConfigurationData(weth.address); + const {isActive} = await helpersContract.getReserveConfigurationData(weth.address); expect(isActive).to.be.equal(false); }); it('Reactivates the ETH reserve', async () => { - const { configurator, weth, helpersContract } = testEnv; + const {configurator, weth, helpersContract} = testEnv; expect(await configurator.setReserveActive(weth.address, true)); - const { isActive } = await helpersContract.getReserveConfigurationData(weth.address); + const {isActive} = await helpersContract.getReserveConfigurationData(weth.address); expect(isActive).to.be.equal(true); }); it('Pauses the ETH reserve by pool admin', async () => { - const { configurator, weth, helpersContract } = testEnv; + const {configurator, weth, helpersContract} = testEnv; expect(await configurator.setReservePause(weth.address, true)) .to.emit(configurator, 'ReservePaused') .withArgs(weth.address, true); @@ -214,16 +213,16 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Unpauses the ETH reserve by pool admin', async () => { - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; expect(await configurator.setReservePause(weth.address, false)) .to.emit(configurator, 'ReservePaused') .withArgs(weth.address, false); - await expectReserveConfigurationData(helpersContract, weth.address, { ...baseConfigValues }); + await expectReserveConfigurationData(helpersContract, weth.address, {...baseConfigValues}); }); it('Pauses the ETH reserve by emergency admin', async () => { - const { configurator, weth, helpersContract, emergencyAdmin } = testEnv; + const {configurator, weth, helpersContract, emergencyAdmin} = testEnv; expect(await configurator.connect(emergencyAdmin.signer).setReservePause(weth.address, true)) .to.emit(configurator, 'ReservePaused') .withArgs(weth.address, true); @@ -235,16 +234,16 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Unpauses the ETH reserve by emergency admin', async () => { - const { configurator, helpersContract, weth, emergencyAdmin } = testEnv; + const {configurator, helpersContract, weth, emergencyAdmin} = testEnv; expect(await configurator.connect(emergencyAdmin.signer).setReservePause(weth.address, false)) .to.emit(configurator, 'ReservePaused') .withArgs(weth.address, false); - await expectReserveConfigurationData(helpersContract, weth.address, { ...baseConfigValues }); + await expectReserveConfigurationData(helpersContract, weth.address, {...baseConfigValues}); }); it('Freezes the ETH reserve by pool Admin', async () => { - const { configurator, weth, helpersContract } = testEnv; + const {configurator, weth, helpersContract} = testEnv; expect(await configurator.setReserveFreeze(weth.address, true)) .to.emit(configurator, 'ReserveFrozen') @@ -257,16 +256,16 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Unfreezes the ETH reserve by Pool admin', async () => { - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; expect(await configurator.setReserveFreeze(weth.address, false)) .to.emit(configurator, 'ReserveFrozen') .withArgs(weth.address, false); - await expectReserveConfigurationData(helpersContract, weth.address, { ...baseConfigValues }); + await expectReserveConfigurationData(helpersContract, weth.address, {...baseConfigValues}); }); it('Freezes the ETH reserve by Risk Admin', async () => { - const { configurator, weth, helpersContract, riskAdmin } = testEnv; + const {configurator, weth, helpersContract, riskAdmin} = testEnv; expect(await configurator.connect(riskAdmin.signer).setReserveFreeze(weth.address, true)) .to.emit(configurator, 'ReserveFrozen') .withArgs(weth.address, true); @@ -278,16 +277,16 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Unfreezes the ETH reserve by Risk admin', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; expect(await configurator.connect(riskAdmin.signer).setReserveFreeze(weth.address, false)) .to.emit(configurator, 'ReserveFrozen') .withArgs(weth.address, false); - await expectReserveConfigurationData(helpersContract, weth.address, { ...baseConfigValues }); + await expectReserveConfigurationData(helpersContract, weth.address, {...baseConfigValues}); }); it('Deactivates the ETH reserve for borrowing via pool admin while stable borrowing is active (revert expected)', async () => { - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; await expect(configurator.setReserveBorrowing(weth.address, false)).to.be.revertedWith( ProtocolErrors.STABLE_BORROWING_ENABLED ); @@ -297,7 +296,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Deactivates the ETH reserve for borrowing via risk admin while stable borrowing is active (revert expected)', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; await expect( configurator.connect(riskAdmin.signer).setReserveBorrowing(weth.address, false) @@ -310,7 +309,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { it('Disable stable borrow rate on the ETH reserve via pool admin', async () => { const snap = await evmSnapshot(); - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; expect(await configurator.setReserveStableRateBorrowing(weth.address, false)) .to.emit(configurator, 'ReserveStableRateBorrowing') .withArgs(weth.address, false); @@ -323,7 +322,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Disable stable borrow rate on the ETH reserve via risk admin', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; expect( await configurator .connect(riskAdmin.signer) @@ -340,7 +339,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { it('Deactivates the ETH reserve for borrowing via pool admin', async () => { const snap = await evmSnapshot(); - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; expect(await configurator.setReserveBorrowing(weth.address, false)) .to.emit(configurator, 'ReserveBorrowing') .withArgs(weth.address, false); @@ -354,7 +353,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Deactivates the ETH reserve for borrowing via risk admin', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; expect(await configurator.connect(riskAdmin.signer).setReserveBorrowing(weth.address, false)) .to.emit(configurator, 'ReserveBorrowing') .withArgs(weth.address, false); @@ -367,7 +366,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Enables stable borrow rate on the ETH reserve via pool admin while borrowing is disabled (revert expected)', async () => { - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; await expect(configurator.setReserveStableRateBorrowing(weth.address, true)).to.be.revertedWith( ProtocolErrors.BORROWING_NOT_ENABLED ); @@ -380,7 +379,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Enables stable borrow rate on the ETH reserve via risk admin while borrowing is disabled (revert expected)', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; await expect( configurator.connect(riskAdmin.signer).setReserveStableRateBorrowing(weth.address, true) ).to.be.revertedWith(ProtocolErrors.BORROWING_NOT_ENABLED); @@ -394,12 +393,12 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { it('Activates the ETH reserve for borrowing via pool admin', async () => { const snap = await evmSnapshot(); - const { configurator, weth, helpersContract } = testEnv; + const {configurator, weth, helpersContract} = testEnv; expect(await configurator.setReserveBorrowing(weth.address, true)) .to.emit(configurator, 'ReserveBorrowing') .withArgs(weth.address, true); - const { variableBorrowIndex } = await helpersContract.getReserveData(weth.address); + const {variableBorrowIndex} = await helpersContract.getReserveData(weth.address); await expectReserveConfigurationData(helpersContract, weth.address, { ...baseConfigValues, @@ -410,12 +409,12 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Activates the ETH reserve for borrowing via risk admin', async () => { - const { configurator, weth, helpersContract, riskAdmin } = testEnv; + const {configurator, weth, helpersContract, riskAdmin} = testEnv; expect(await configurator.connect(riskAdmin.signer).setReserveBorrowing(weth.address, true)) .to.emit(configurator, 'ReserveBorrowing') .withArgs(weth.address, true); - const { variableBorrowIndex } = await helpersContract.getReserveData(weth.address); + const {variableBorrowIndex} = await helpersContract.getReserveData(weth.address); await expectReserveConfigurationData(helpersContract, weth.address, { ...baseConfigValues, @@ -426,7 +425,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { it('Enables stable borrow rate on the ETH reserve via pool admin', async () => { const snap = await evmSnapshot(); - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; expect(await configurator.setReserveStableRateBorrowing(weth.address, true)) .to.emit(configurator, 'ReserveStableRateBorrowing') .withArgs(weth.address, true); @@ -438,7 +437,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Enables stable borrow rate on the ETH reserve via risk admin', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; expect( await configurator.connect(riskAdmin.signer).setReserveStableRateBorrowing(weth.address, true) ) @@ -451,7 +450,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Deactivates the ETH reserve as collateral via pool admin', async () => { - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; expect(await configurator.configureReserveAsCollateral(weth.address, 0, 0, 0)) .to.emit(configurator, 'CollateralConfigurationChanged') .withArgs(weth.address, 0, 0, 0); @@ -466,7 +465,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Activates the ETH reserve as collateral via pool admin', async () => { - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; expect(await configurator.configureReserveAsCollateral(weth.address, '8000', '8250', '10500')) .to.emit(configurator, 'CollateralConfigurationChanged') .withArgs(weth.address, '8000', '8250', '10500'); @@ -480,7 +479,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Deactivates the ETH reserve as collateral via risk admin', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; expect( await configurator .connect(riskAdmin.signer) @@ -499,7 +498,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Activates the ETH reserve as collateral via risk admin', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; expect( await configurator .connect(riskAdmin.signer) @@ -517,9 +516,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Changes the reserve factor of WETH via pool admin', async () => { - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; - const { reserveFactor: oldReserveFactor } = await helpersContract.getReserveConfigurationData( + const {reserveFactor: oldReserveFactor} = await helpersContract.getReserveConfigurationData( weth.address ); @@ -535,9 +534,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Changes the reserve factor of WETH via risk admin', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; - const { reserveFactor: oldReserveFactor } = await helpersContract.getReserveConfigurationData( + const {reserveFactor: oldReserveFactor} = await helpersContract.getReserveConfigurationData( weth.address ); @@ -556,9 +555,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { it('Updates the reserve factor of WETH equal to PERCENTAGE_FACTOR', async () => { const snapId = await evmSnapshot(); - const { configurator, helpersContract, weth, poolAdmin } = testEnv; + const {configurator, helpersContract, weth, poolAdmin} = testEnv; - const { reserveFactor: oldReserveFactor } = await helpersContract.getReserveConfigurationData( + const {reserveFactor: oldReserveFactor} = await helpersContract.getReserveConfigurationData( weth.address ); @@ -577,7 +576,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the unbackedMintCap of WETH via pool admin', async () => { - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; const oldWethUnbackedMintCap = await helpersContract.getUnbackedMintCap(weth.address); @@ -590,7 +589,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the unbackedMintCap of WETH via risk admin', async () => { - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; const oldWethUnbackedMintCap = await helpersContract.getUnbackedMintCap(weth.address); @@ -603,9 +602,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the borrowCap of WETH via pool admin', async () => { - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; - const { borrowCap: wethOldBorrowCap } = await helpersContract.getReserveCaps(weth.address); + const {borrowCap: wethOldBorrowCap} = await helpersContract.getReserveCaps(weth.address); const newBorrowCap = '3000000'; expect(await configurator.setBorrowCap(weth.address, newBorrowCap)) @@ -619,9 +618,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the borrowCap of WETH risk admin', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; - const { borrowCap: wethOldBorrowCap } = await helpersContract.getReserveCaps(weth.address); + const {borrowCap: wethOldBorrowCap} = await helpersContract.getReserveCaps(weth.address); const newBorrowCap = '3000000'; expect(await configurator.connect(riskAdmin.signer).setBorrowCap(weth.address, newBorrowCap)) @@ -635,9 +634,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the supplyCap of WETH via pool admin', async () => { - const { configurator, helpersContract, weth } = testEnv; + const {configurator, helpersContract, weth} = testEnv; - const { supplyCap: oldWethSupplyCap } = await helpersContract.getReserveCaps(weth.address); + const {supplyCap: oldWethSupplyCap} = await helpersContract.getReserveCaps(weth.address); const newBorrowCap = '3000000'; const newSupplyCap = '3000000'; @@ -653,9 +652,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the supplyCap of WETH via risk admin', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; - const { supplyCap: oldWethSupplyCap } = await helpersContract.getReserveCaps(weth.address); + const {supplyCap: oldWethSupplyCap} = await helpersContract.getReserveCaps(weth.address); const newBorrowCap = '3000000'; const newSupplyCap = '3000000'; @@ -671,9 +670,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the ReserveInterestRateStrategy address of WETH via pool admin', async () => { - const { poolAdmin, pool, configurator, weth } = testEnv; + const {poolAdmin, pool, configurator, weth} = testEnv; - const { interestRateStrategyAddress: interestRateStrategyAddressBefore } = + const {interestRateStrategyAddress: interestRateStrategyAddressBefore} = await pool.getReserveData(weth.address); expect( @@ -683,7 +682,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { ) .to.emit(configurator, 'ReserveInterestRateStrategyChanged') .withArgs(weth.address, interestRateStrategyAddressBefore, ZERO_ADDRESS); - const { interestRateStrategyAddress: interestRateStrategyAddressAfter } = + const {interestRateStrategyAddress: interestRateStrategyAddressAfter} = await pool.getReserveData(weth.address); expect(interestRateStrategyAddressBefore).to.not.be.eq(ZERO_ADDRESS); @@ -696,9 +695,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the ReserveInterestRateStrategy address of WETH via risk admin', async () => { - const { riskAdmin, pool, configurator, weth } = testEnv; + const {riskAdmin, pool, configurator, weth} = testEnv; - const { interestRateStrategyAddress: interestRateStrategyAddressBefore } = + const {interestRateStrategyAddress: interestRateStrategyAddressBefore} = await pool.getReserveData(weth.address); expect( @@ -708,7 +707,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { ) .to.emit(configurator, 'ReserveInterestRateStrategyChanged') .withArgs(weth.address, interestRateStrategyAddressBefore, ONE_ADDRESS); - const { interestRateStrategyAddress: interestRateStrategyAddressAfter } = + const {interestRateStrategyAddress: interestRateStrategyAddressAfter} = await pool.getReserveData(weth.address); expect(interestRateStrategyAddressBefore).to.not.be.eq(ONE_ADDRESS); @@ -721,7 +720,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Register a new risk Admin', async () => { - const { aclManager, poolAdmin, users, riskAdmin } = testEnv; + const {aclManager, poolAdmin, users, riskAdmin} = testEnv; const riskAdminRole = await aclManager.RISK_ADMIN_ROLE(); @@ -735,7 +734,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Unregister the new risk admin', async () => { - const { aclManager, poolAdmin, users, riskAdmin } = testEnv; + const {aclManager, poolAdmin, users, riskAdmin} = testEnv; const riskAdminRole = await aclManager.RISK_ADMIN_ROLE(); @@ -749,7 +748,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Authorized a new flash borrower', async () => { - const { aclManager, poolAdmin, users } = testEnv; + const {aclManager, poolAdmin, users} = testEnv; const authorizedFlashBorrowerRole = await aclManager.FLASH_BORROWER_ROLE(); @@ -762,7 +761,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Unauthorized flash borrower', async () => { - const { aclManager, poolAdmin, users } = testEnv; + const {aclManager, poolAdmin, users} = testEnv; const authorizedFlashBorrowerRole = await aclManager.FLASH_BORROWER_ROLE(); @@ -775,7 +774,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates bridge protocol fee equal to PERCENTAGE_FACTOR', async () => { - const { pool, configurator } = testEnv; + const {pool, configurator} = testEnv; const newProtocolFee = 10000; const oldBridgeProtocolFee = await pool.BRIDGE_PROTOCOL_FEE(); @@ -788,7 +787,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates bridge protocol fee', async () => { - const { pool, configurator } = testEnv; + const {pool, configurator} = testEnv; const oldBridgeProtocolFee = await pool.BRIDGE_PROTOCOL_FEE(); @@ -804,7 +803,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { it('Updates flash loan premiums equal to PERCENTAGE_FACTOR: 10000 toProtocol, 10000 total', async () => { const snapId = await evmSnapshot(); - const { pool, configurator } = testEnv; + const {pool, configurator} = testEnv; const oldFlashloanPremiumTotal = await pool.FLASHLOAN_PREMIUM_TOTAL(); const oldFlashloanPremiumToProtocol = await pool.FLASHLOAN_PREMIUM_TO_PROTOCOL(); @@ -826,7 +825,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates flash loan premiums: 10 toProtocol, 40 total', async () => { - const { pool, configurator } = testEnv; + const {pool, configurator} = testEnv; const oldFlashloanPremiumTotal = await pool.FLASHLOAN_PREMIUM_TOTAL(); const oldFlashloanPremiumToProtocol = await pool.FLASHLOAN_PREMIUM_TO_PROTOCOL(); @@ -846,7 +845,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Adds a new eMode category for stablecoins', async () => { - const { configurator, pool, poolAdmin } = testEnv; + const {configurator, pool, poolAdmin} = testEnv; expect( await configurator @@ -870,7 +869,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Set a eMode category to an asset', async () => { - const { configurator, pool, helpersContract, poolAdmin, dai } = testEnv; + const {configurator, pool, helpersContract, poolAdmin, dai} = testEnv; const oldCategoryId = await helpersContract.getReserveEModeCategory(dai.address); @@ -894,7 +893,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Sets siloed borrowing through the pool admin', async () => { - const { configurator, helpersContract, weth, poolAdmin } = testEnv; + const {configurator, helpersContract, weth, poolAdmin} = testEnv; const oldSiloedBorrowing = await helpersContract.getSiloedBorrowing(weth.address); @@ -908,7 +907,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Sets siloed borrowing through the risk admin', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; const oldSiloedBorrowing = await helpersContract.getSiloedBorrowing(weth.address); @@ -961,7 +960,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Sets a debt ceiling through the pool admin', async () => { - const { configurator, helpersContract, weth, poolAdmin } = testEnv; + const {configurator, helpersContract, weth, poolAdmin} = testEnv; const oldDebtCeiling = await helpersContract.getDebtCeiling(weth.address); @@ -978,7 +977,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Sets a debt ceiling through the risk admin', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; const oldDebtCeiling = await helpersContract.getDebtCeiling(weth.address); @@ -995,7 +994,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Sets a debt ceiling larger than max (revert expected)', async () => { - const { configurator, helpersContract, weth, riskAdmin } = testEnv; + const {configurator, helpersContract, weth, riskAdmin} = testEnv; const MAX_VALID_DEBT_CEILING = BigNumber.from('1099511627775'); const debtCeiling = MAX_VALID_DEBT_CEILING.add(1); @@ -1072,7 +1071,32 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Read debt ceiling decimals', async () => { - const { helpersContract } = testEnv; + const {helpersContract} = testEnv; expect(await helpersContract.getDebtCeilingDecimals()).to.be.eq(2); }); + + it('Check that the reserves have flashloans enabled', async () => { + const {weth, aave, usdc, dai, helpersContract} = testEnv; + + const wethFlashLoanEnabled = await helpersContract.getFlashLoanEnabled(weth.address); + expect(wethFlashLoanEnabled).to.be.equal(true); + + const aaveFlashLoanEnabled = await helpersContract.getFlashLoanEnabled(aave.address); + expect(aaveFlashLoanEnabled).to.be.equal(true); + + const usdcFlashLoanEnabled = await helpersContract.getFlashLoanEnabled(usdc.address); + expect(usdcFlashLoanEnabled).to.be.equal(true); + + const daiFlashLoanEnabled = await helpersContract.getFlashLoanEnabled(dai.address); + expect(daiFlashLoanEnabled).to.be.equal(true); + }); + + it('Disable weth flashloans', async () => { + const {weth, configurator, helpersContract} = testEnv; + + expect(await configurator.setReserveFlashLoaning(weth.address, false)); + + const wethFlashLoanEnabled = await helpersContract.getFlashLoanEnabled(weth.address); + expect(wethFlashLoanEnabled).to.be.equal(false); + }); }); diff --git a/test-suites/pool-flashloan.spec.ts b/test-suites/pool-flashloan.spec.ts index a8154ae41..4fb4b843e 100644 --- a/test-suites/pool-flashloan.spec.ts +++ b/test-suites/pool-flashloan.spec.ts @@ -1,17 +1,17 @@ -import { expect } from 'chai'; -import { BigNumber, ethers, Event, utils } from 'ethers'; -import { MAX_UINT_AMOUNT } from '../helpers/constants'; -import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; -import { MockFlashLoanReceiver } from '../types/MockFlashLoanReceiver'; -import { ProtocolErrors } from '../helpers/types'; +import {expect} from 'chai'; +import {BigNumber, ethers, Event, utils} from 'ethers'; +import {MAX_UINT_AMOUNT} from '../helpers/constants'; +import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; +import {MockFlashLoanReceiver} from '../types/MockFlashLoanReceiver'; +import {ProtocolErrors} from '../helpers/types'; import { getMockFlashLoanReceiver, getStableDebtToken, getVariableDebtToken, } from '@aave/deploy-v3/dist/helpers/contract-getters'; -import { TestEnv, makeSuite } from './helpers/make-suite'; +import {TestEnv, makeSuite} from './helpers/make-suite'; import './helpers/utils/wadraymath'; -import { waitForTx } from '@aave/deploy-v3'; +import {waitForTx} from '@aave/deploy-v3'; makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { let _mockFlashLoanReceiver = {} as MockFlashLoanReceiver; @@ -30,7 +30,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Configurator sets total premium = 9 bps, premium to protocol = 30%', async () => { - const { configurator, pool } = testEnv; + const {configurator, pool} = testEnv; await configurator.updateFlashloanPremiumTotal(TOTAL_PREMIUM); await configurator.updateFlashloanPremiumToProtocol(PREMIUM_TO_PROTOCOL); @@ -38,7 +38,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { expect(await pool.FLASHLOAN_PREMIUM_TO_PROTOCOL()).to.be.equal(PREMIUM_TO_PROTOCOL); }); it('Deposits WETH into the reserve', async () => { - const { pool, weth, aave, dai } = testEnv; + const {pool, weth, aave, dai} = testEnv; const userAddress = await pool.signer.getAddress(); const amountToDeposit = ethers.utils.parseEther('1'); @@ -61,7 +61,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes WETH + Dai flash loan with mode = 0, returns the funds correctly', async () => { - const { pool, helpersContract, weth, aWETH, dai, aDai } = testEnv; + const {pool, helpersContract, weth, aWETH, dai, aDai} = testEnv; const wethFlashBorrowedAmount = ethers.utils.parseEther('0.8'); const daiFlashBorrowedAmount = ethers.utils.parseEther('0.3'); @@ -138,7 +138,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { // Check event values for `ReserveDataUpdated` const reserveDataUpdatedEvents = tx.events?.filter( - ({ event }) => event === 'ReserveDataUpdated' + ({event}) => event === 'ReserveDataUpdated' ) as Event[]; for (const reserveDataUpdatedEvent of reserveDataUpdatedEvents) { const reserveData = await helpersContract.getReserveData( @@ -194,8 +194,9 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { expect(totalLiquidityBefore.add(totalFees)).to.be.closeTo(totalLiquidityAfter, 2); }); + it('Takes an ETH flashloan with mode = 0 as big as the available liquidity', async () => { - const { pool, helpersContract, weth, aWETH, deployer } = testEnv; + const {pool, helpersContract, weth, aWETH, deployer} = testEnv; let reserveData = await helpersContract.getReserveData(weth.address); @@ -253,8 +254,41 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { reservesAfter.sub(feesToProtocol).mul(liquidityIndexBefore).div(currentLiquidityIndex) ).to.be.closeTo(reservesBefore, 2); }); + + it('Disable ETH flashloan and takes an ETH flashloan (revert expected)', async () => { + const {pool, configurator, helpersContract, weth, deployer} = testEnv; + + expect(await configurator.setReserveFlashLoaning(weth.address, false)); + + let wethFlashLoanEnabled = await helpersContract.getFlashLoanEnabled(weth.address); + expect(wethFlashLoanEnabled).to.be.equal(false); + + let reserveData = await helpersContract.getReserveData(weth.address); + + const totalLiquidityBefore = reserveData.totalAToken; + + const flashBorrowedAmount = totalLiquidityBefore; + + await expect( + pool.flashLoan( + _mockFlashLoanReceiver.address, + [weth.address], + [flashBorrowedAmount], + [0], + _mockFlashLoanReceiver.address, + '0x10', + '0' + ) + ).to.be.reverted; + + expect(await configurator.setReserveFlashLoaning(weth.address, true)); + + wethFlashLoanEnabled = await helpersContract.getFlashLoanEnabled(weth.address); + expect(wethFlashLoanEnabled).to.be.equal(true); + }); + it('Takes WETH flashloan, does not return the funds with mode = 0 (revert expected)', async () => { - const { pool, weth, users } = testEnv; + const {pool, weth, users} = testEnv; const caller = users[1]; await _mockFlashLoanReceiver.setFailExecutionTransfer(true); @@ -274,7 +308,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes WETH flashloan, simulating a receiver as EOA (revert expected)', async () => { - const { pool, weth, users } = testEnv; + const {pool, weth, users} = testEnv; const caller = users[1]; await _mockFlashLoanReceiver.setFailExecutionTransfer(true); await _mockFlashLoanReceiver.setSimulateEOA(true); @@ -295,7 +329,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes a WETH flashloan with an invalid mode (revert expected)', async () => { - const { pool, weth, users } = testEnv; + const {pool, weth, users} = testEnv; const caller = users[1]; await _mockFlashLoanReceiver.setSimulateEOA(false); await _mockFlashLoanReceiver.setFailExecutionTransfer(true); @@ -316,7 +350,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller deposits 1000 DAI as collateral, Takes WETH flashloan with mode = 2, does not return the funds. A variable loan for caller is created', async () => { - const { dai, pool, weth, users, helpersContract } = testEnv; + const {dai, pool, weth, users, helpersContract} = testEnv; const caller = users[1]; @@ -362,7 +396,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { 0 ); - const { variableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( + const {variableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses( weth.address ); reserveData = await helpersContract.getReserveData(weth.address); @@ -383,7 +417,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { await pool.connect(caller.signer).repay(weth.address, MAX_UINT_AMOUNT, 2, caller.address); }); it('Tries to take a flashloan that is bigger than the available liquidity (revert expected)', async () => { - const { pool, weth, users } = testEnv; + const {pool, weth, users} = testEnv; const caller = users[1]; await expect( @@ -401,7 +435,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Tries to take a flashloan using a non contract address as receiver (revert expected)', async () => { - const { pool, deployer, weth, users } = testEnv; + const {pool, deployer, weth, users} = testEnv; const caller = users[1]; await expect( @@ -418,7 +452,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Deposits USDC into the reserve', async () => { - const { usdc, pool } = testEnv; + const {usdc, pool} = testEnv; const userAddress = await pool.signer.getAddress(); await usdc['mint(uint256)'](await convertToCurrencyDecimals(usdc.address, '1000')); @@ -431,7 +465,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes out a 500 USDC flashloan, returns the funds correctly', async () => { - const { usdc, aUsdc, pool, helpersContract, deployer: depositor } = testEnv; + const {usdc, aUsdc, pool, helpersContract, deployer: depositor} = testEnv; await _mockFlashLoanReceiver.setFailExecutionTransfer(false); @@ -479,7 +513,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes out a 500 USDC flashloan with mode = 0, does not return the funds (revert expected)', async () => { - const { usdc, pool, users } = testEnv; + const {usdc, pool, users} = testEnv; const caller = users[2]; const flashloanAmount = await convertToCurrencyDecimals(usdc.address, '500'); @@ -502,7 +536,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller deposits 5 WETH as collateral, Takes a USDC flashloan with mode = 2, does not return the funds. A loan for caller is created', async () => { - const { usdc, pool, weth, users, helpersContract } = testEnv; + const {usdc, pool, weth, users, helpersContract} = testEnv; const caller = users[2]; @@ -531,7 +565,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { '0x10', '0' ); - const { variableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( + const {variableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses( usdc.address ); @@ -543,7 +577,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller deposits 1000 DAI as collateral, Takes a WETH flashloan with mode = 0, does not approve the transfer of the funds', async () => { - const { dai, pool, weth, users } = testEnv; + const {dai, pool, weth, users} = testEnv; const caller = users[3]; await dai @@ -577,7 +611,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller takes a WETH flashloan with mode = 1', async () => { - const { pool, weth, users, helpersContract } = testEnv; + const {pool, weth, users, helpersContract} = testEnv; const caller = users[3]; @@ -601,9 +635,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { .to.emit(pool, 'FlashLoan') .withArgs(_mockFlashLoanReceiver.address, caller.address, weth.address, flashAmount, 1, 0, 0); - const { stableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( - weth.address - ); + const {stableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses(weth.address); const wethDebtToken = await getStableDebtToken(stableDebtTokenAddress); @@ -613,7 +645,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller takes a WETH flashloan with mode = 1 onBehalfOf user without allowance', async () => { - const { dai, pool, weth, users, helpersContract } = testEnv; + const {dai, pool, weth, users, helpersContract} = testEnv; const caller = users[5]; const onBehalfOf = users[4]; @@ -651,7 +683,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller takes a WETH flashloan with mode = 1 onBehalfOf user with allowance. A loan for onBehalfOf is creatd.', async () => { - const { pool, weth, users, helpersContract } = testEnv; + const {pool, weth, users, helpersContract} = testEnv; const caller = users[5]; const onBehalfOf = users[4]; @@ -679,9 +711,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { '0' ); - const { stableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( - weth.address - ); + const {stableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses(weth.address); const wethDebtToken = await getStableDebtToken(stableDebtTokenAddress); From a5ce86a350f428e4a89bd0867254c7a898c72ca3 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Mon, 29 Aug 2022 14:41:53 -0400 Subject: [PATCH 12/87] fix: remove unrelated change From 4c2cda0f63326d986a7a7e68da32f9570623a450 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Mon, 29 Aug 2022 14:52:09 -0400 Subject: [PATCH 13/87] fix: remove formatting conflicts --- test-suites/configurator.spec.ts | 169 +++++++++++++++-------------- test-suites/pool-flashloan.spec.ts | 69 ++++++------ 2 files changed, 122 insertions(+), 116 deletions(-) diff --git a/test-suites/configurator.spec.ts b/test-suites/configurator.spec.ts index df0b9d420..34a681997 100644 --- a/test-suites/configurator.spec.ts +++ b/test-suites/configurator.spec.ts @@ -1,9 +1,9 @@ -import {expect} from 'chai'; -import {utils, BigNumber, BigNumberish} from 'ethers'; -import {strategyWETH} from '@aave/deploy-v3/dist/markets/test/reservesConfigs'; -import {getFirstSigner} from '@aave/deploy-v3/dist/helpers/utilities/signer'; -import {MAX_UINT_AMOUNT, ONE_ADDRESS, RAY, ZERO_ADDRESS} from '../helpers/constants'; -import {ProtocolErrors} from '../helpers/types'; +import { expect } from 'chai'; +import { utils, BigNumber, BigNumberish } from 'ethers'; +import { strategyWETH } from '@aave/deploy-v3/dist/markets/test/reservesConfigs'; +import { getFirstSigner } from '@aave/deploy-v3/dist/helpers/utilities/signer'; +import { MAX_UINT_AMOUNT, ONE_ADDRESS, RAY, ZERO_ADDRESS } from '../helpers/constants'; +import { ProtocolErrors } from '../helpers/types'; import { AaveProtocolDataProvider, AToken__factory, @@ -12,8 +12,8 @@ import { StableDebtToken__factory, VariableDebtToken__factory, } from '../types'; -import {TestEnv, makeSuite} from './helpers/make-suite'; -import {advanceTimeAndBlock, evmRevert, evmSnapshot} from '@aave/deploy-v3'; +import { TestEnv, makeSuite } from './helpers/make-suite'; +import { advanceTimeAndBlock, evmRevert, evmSnapshot } from '@aave/deploy-v3'; type ReserveConfigurationValues = { reserveDecimals: string; @@ -85,7 +85,8 @@ const getReserveData = async (helpersContract: AaveProtocolDataProvider, asset: makeSuite('PoolConfigurator', (testEnv: TestEnv) => { let baseConfigValues: ReserveConfigurationValues; - const {RESERVE_LIQUIDITY_NOT_ZERO, INVALID_DEBT_CEILING, RESERVE_DEBT_NOT_ZERO} = ProtocolErrors; + const { RESERVE_LIQUIDITY_NOT_ZERO, INVALID_DEBT_CEILING, RESERVE_DEBT_NOT_ZERO } = + ProtocolErrors; before(() => { const { @@ -118,7 +119,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('InitReserves via AssetListing admin', async () => { - const {addressesProvider, configurator, poolAdmin, aclManager, users, pool} = testEnv; + const { addressesProvider, configurator, poolAdmin, aclManager, users, pool } = testEnv; // const snapId const assetListingAdmin = users[4]; @@ -187,21 +188,21 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Deactivates the ETH reserve', async () => { - const {configurator, weth, helpersContract} = testEnv; + const { configurator, weth, helpersContract } = testEnv; expect(await configurator.setReserveActive(weth.address, false)); - const {isActive} = await helpersContract.getReserveConfigurationData(weth.address); + const { isActive } = await helpersContract.getReserveConfigurationData(weth.address); expect(isActive).to.be.equal(false); }); it('Reactivates the ETH reserve', async () => { - const {configurator, weth, helpersContract} = testEnv; + const { configurator, weth, helpersContract } = testEnv; expect(await configurator.setReserveActive(weth.address, true)); - const {isActive} = await helpersContract.getReserveConfigurationData(weth.address); + const { isActive } = await helpersContract.getReserveConfigurationData(weth.address); expect(isActive).to.be.equal(true); }); it('Pauses the ETH reserve by pool admin', async () => { - const {configurator, weth, helpersContract} = testEnv; + const { configurator, weth, helpersContract } = testEnv; expect(await configurator.setReservePause(weth.address, true)) .to.emit(configurator, 'ReservePaused') .withArgs(weth.address, true); @@ -213,16 +214,16 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Unpauses the ETH reserve by pool admin', async () => { - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; expect(await configurator.setReservePause(weth.address, false)) .to.emit(configurator, 'ReservePaused') .withArgs(weth.address, false); - await expectReserveConfigurationData(helpersContract, weth.address, {...baseConfigValues}); + await expectReserveConfigurationData(helpersContract, weth.address, { ...baseConfigValues }); }); it('Pauses the ETH reserve by emergency admin', async () => { - const {configurator, weth, helpersContract, emergencyAdmin} = testEnv; + const { configurator, weth, helpersContract, emergencyAdmin } = testEnv; expect(await configurator.connect(emergencyAdmin.signer).setReservePause(weth.address, true)) .to.emit(configurator, 'ReservePaused') .withArgs(weth.address, true); @@ -234,16 +235,16 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Unpauses the ETH reserve by emergency admin', async () => { - const {configurator, helpersContract, weth, emergencyAdmin} = testEnv; + const { configurator, helpersContract, weth, emergencyAdmin } = testEnv; expect(await configurator.connect(emergencyAdmin.signer).setReservePause(weth.address, false)) .to.emit(configurator, 'ReservePaused') .withArgs(weth.address, false); - await expectReserveConfigurationData(helpersContract, weth.address, {...baseConfigValues}); + await expectReserveConfigurationData(helpersContract, weth.address, { ...baseConfigValues }); }); it('Freezes the ETH reserve by pool Admin', async () => { - const {configurator, weth, helpersContract} = testEnv; + const { configurator, weth, helpersContract } = testEnv; expect(await configurator.setReserveFreeze(weth.address, true)) .to.emit(configurator, 'ReserveFrozen') @@ -256,16 +257,16 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Unfreezes the ETH reserve by Pool admin', async () => { - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; expect(await configurator.setReserveFreeze(weth.address, false)) .to.emit(configurator, 'ReserveFrozen') .withArgs(weth.address, false); - await expectReserveConfigurationData(helpersContract, weth.address, {...baseConfigValues}); + await expectReserveConfigurationData(helpersContract, weth.address, { ...baseConfigValues }); }); it('Freezes the ETH reserve by Risk Admin', async () => { - const {configurator, weth, helpersContract, riskAdmin} = testEnv; + const { configurator, weth, helpersContract, riskAdmin } = testEnv; expect(await configurator.connect(riskAdmin.signer).setReserveFreeze(weth.address, true)) .to.emit(configurator, 'ReserveFrozen') .withArgs(weth.address, true); @@ -277,16 +278,16 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Unfreezes the ETH reserve by Risk admin', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; expect(await configurator.connect(riskAdmin.signer).setReserveFreeze(weth.address, false)) .to.emit(configurator, 'ReserveFrozen') .withArgs(weth.address, false); - await expectReserveConfigurationData(helpersContract, weth.address, {...baseConfigValues}); + await expectReserveConfigurationData(helpersContract, weth.address, { ...baseConfigValues }); }); it('Deactivates the ETH reserve for borrowing via pool admin while stable borrowing is active (revert expected)', async () => { - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; await expect(configurator.setReserveBorrowing(weth.address, false)).to.be.revertedWith( ProtocolErrors.STABLE_BORROWING_ENABLED ); @@ -296,7 +297,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Deactivates the ETH reserve for borrowing via risk admin while stable borrowing is active (revert expected)', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; await expect( configurator.connect(riskAdmin.signer).setReserveBorrowing(weth.address, false) @@ -309,7 +310,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { it('Disable stable borrow rate on the ETH reserve via pool admin', async () => { const snap = await evmSnapshot(); - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; expect(await configurator.setReserveStableRateBorrowing(weth.address, false)) .to.emit(configurator, 'ReserveStableRateBorrowing') .withArgs(weth.address, false); @@ -322,7 +323,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Disable stable borrow rate on the ETH reserve via risk admin', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; expect( await configurator .connect(riskAdmin.signer) @@ -339,7 +340,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { it('Deactivates the ETH reserve for borrowing via pool admin', async () => { const snap = await evmSnapshot(); - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; expect(await configurator.setReserveBorrowing(weth.address, false)) .to.emit(configurator, 'ReserveBorrowing') .withArgs(weth.address, false); @@ -353,7 +354,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Deactivates the ETH reserve for borrowing via risk admin', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; expect(await configurator.connect(riskAdmin.signer).setReserveBorrowing(weth.address, false)) .to.emit(configurator, 'ReserveBorrowing') .withArgs(weth.address, false); @@ -366,7 +367,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Enables stable borrow rate on the ETH reserve via pool admin while borrowing is disabled (revert expected)', async () => { - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; await expect(configurator.setReserveStableRateBorrowing(weth.address, true)).to.be.revertedWith( ProtocolErrors.BORROWING_NOT_ENABLED ); @@ -379,7 +380,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Enables stable borrow rate on the ETH reserve via risk admin while borrowing is disabled (revert expected)', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; await expect( configurator.connect(riskAdmin.signer).setReserveStableRateBorrowing(weth.address, true) ).to.be.revertedWith(ProtocolErrors.BORROWING_NOT_ENABLED); @@ -393,12 +394,12 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { it('Activates the ETH reserve for borrowing via pool admin', async () => { const snap = await evmSnapshot(); - const {configurator, weth, helpersContract} = testEnv; + const { configurator, weth, helpersContract } = testEnv; expect(await configurator.setReserveBorrowing(weth.address, true)) .to.emit(configurator, 'ReserveBorrowing') .withArgs(weth.address, true); - const {variableBorrowIndex} = await helpersContract.getReserveData(weth.address); + const { variableBorrowIndex } = await helpersContract.getReserveData(weth.address); await expectReserveConfigurationData(helpersContract, weth.address, { ...baseConfigValues, @@ -409,12 +410,12 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Activates the ETH reserve for borrowing via risk admin', async () => { - const {configurator, weth, helpersContract, riskAdmin} = testEnv; + const { configurator, weth, helpersContract, riskAdmin } = testEnv; expect(await configurator.connect(riskAdmin.signer).setReserveBorrowing(weth.address, true)) .to.emit(configurator, 'ReserveBorrowing') .withArgs(weth.address, true); - const {variableBorrowIndex} = await helpersContract.getReserveData(weth.address); + const { variableBorrowIndex } = await helpersContract.getReserveData(weth.address); await expectReserveConfigurationData(helpersContract, weth.address, { ...baseConfigValues, @@ -425,7 +426,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { it('Enables stable borrow rate on the ETH reserve via pool admin', async () => { const snap = await evmSnapshot(); - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; expect(await configurator.setReserveStableRateBorrowing(weth.address, true)) .to.emit(configurator, 'ReserveStableRateBorrowing') .withArgs(weth.address, true); @@ -437,7 +438,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Enables stable borrow rate on the ETH reserve via risk admin', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; expect( await configurator.connect(riskAdmin.signer).setReserveStableRateBorrowing(weth.address, true) ) @@ -450,7 +451,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Deactivates the ETH reserve as collateral via pool admin', async () => { - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; expect(await configurator.configureReserveAsCollateral(weth.address, 0, 0, 0)) .to.emit(configurator, 'CollateralConfigurationChanged') .withArgs(weth.address, 0, 0, 0); @@ -465,7 +466,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Activates the ETH reserve as collateral via pool admin', async () => { - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; expect(await configurator.configureReserveAsCollateral(weth.address, '8000', '8250', '10500')) .to.emit(configurator, 'CollateralConfigurationChanged') .withArgs(weth.address, '8000', '8250', '10500'); @@ -479,7 +480,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Deactivates the ETH reserve as collateral via risk admin', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; expect( await configurator .connect(riskAdmin.signer) @@ -498,7 +499,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Activates the ETH reserve as collateral via risk admin', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; expect( await configurator .connect(riskAdmin.signer) @@ -516,9 +517,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Changes the reserve factor of WETH via pool admin', async () => { - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; - const {reserveFactor: oldReserveFactor} = await helpersContract.getReserveConfigurationData( + const { reserveFactor: oldReserveFactor } = await helpersContract.getReserveConfigurationData( weth.address ); @@ -534,9 +535,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Changes the reserve factor of WETH via risk admin', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; - const {reserveFactor: oldReserveFactor} = await helpersContract.getReserveConfigurationData( + const { reserveFactor: oldReserveFactor } = await helpersContract.getReserveConfigurationData( weth.address ); @@ -555,9 +556,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { it('Updates the reserve factor of WETH equal to PERCENTAGE_FACTOR', async () => { const snapId = await evmSnapshot(); - const {configurator, helpersContract, weth, poolAdmin} = testEnv; + const { configurator, helpersContract, weth, poolAdmin } = testEnv; - const {reserveFactor: oldReserveFactor} = await helpersContract.getReserveConfigurationData( + const { reserveFactor: oldReserveFactor } = await helpersContract.getReserveConfigurationData( weth.address ); @@ -576,7 +577,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the unbackedMintCap of WETH via pool admin', async () => { - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; const oldWethUnbackedMintCap = await helpersContract.getUnbackedMintCap(weth.address); @@ -589,7 +590,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the unbackedMintCap of WETH via risk admin', async () => { - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; const oldWethUnbackedMintCap = await helpersContract.getUnbackedMintCap(weth.address); @@ -602,9 +603,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the borrowCap of WETH via pool admin', async () => { - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; - const {borrowCap: wethOldBorrowCap} = await helpersContract.getReserveCaps(weth.address); + const { borrowCap: wethOldBorrowCap } = await helpersContract.getReserveCaps(weth.address); const newBorrowCap = '3000000'; expect(await configurator.setBorrowCap(weth.address, newBorrowCap)) @@ -618,9 +619,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the borrowCap of WETH risk admin', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; - const {borrowCap: wethOldBorrowCap} = await helpersContract.getReserveCaps(weth.address); + const { borrowCap: wethOldBorrowCap } = await helpersContract.getReserveCaps(weth.address); const newBorrowCap = '3000000'; expect(await configurator.connect(riskAdmin.signer).setBorrowCap(weth.address, newBorrowCap)) @@ -634,9 +635,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the supplyCap of WETH via pool admin', async () => { - const {configurator, helpersContract, weth} = testEnv; + const { configurator, helpersContract, weth } = testEnv; - const {supplyCap: oldWethSupplyCap} = await helpersContract.getReserveCaps(weth.address); + const { supplyCap: oldWethSupplyCap } = await helpersContract.getReserveCaps(weth.address); const newBorrowCap = '3000000'; const newSupplyCap = '3000000'; @@ -652,9 +653,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the supplyCap of WETH via risk admin', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; - const {supplyCap: oldWethSupplyCap} = await helpersContract.getReserveCaps(weth.address); + const { supplyCap: oldWethSupplyCap } = await helpersContract.getReserveCaps(weth.address); const newBorrowCap = '3000000'; const newSupplyCap = '3000000'; @@ -670,9 +671,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the ReserveInterestRateStrategy address of WETH via pool admin', async () => { - const {poolAdmin, pool, configurator, weth} = testEnv; + const { poolAdmin, pool, configurator, weth } = testEnv; - const {interestRateStrategyAddress: interestRateStrategyAddressBefore} = + const { interestRateStrategyAddress: interestRateStrategyAddressBefore } = await pool.getReserveData(weth.address); expect( @@ -682,7 +683,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { ) .to.emit(configurator, 'ReserveInterestRateStrategyChanged') .withArgs(weth.address, interestRateStrategyAddressBefore, ZERO_ADDRESS); - const {interestRateStrategyAddress: interestRateStrategyAddressAfter} = + const { interestRateStrategyAddress: interestRateStrategyAddressAfter } = await pool.getReserveData(weth.address); expect(interestRateStrategyAddressBefore).to.not.be.eq(ZERO_ADDRESS); @@ -695,9 +696,9 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates the ReserveInterestRateStrategy address of WETH via risk admin', async () => { - const {riskAdmin, pool, configurator, weth} = testEnv; + const { riskAdmin, pool, configurator, weth } = testEnv; - const {interestRateStrategyAddress: interestRateStrategyAddressBefore} = + const { interestRateStrategyAddress: interestRateStrategyAddressBefore } = await pool.getReserveData(weth.address); expect( @@ -707,7 +708,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { ) .to.emit(configurator, 'ReserveInterestRateStrategyChanged') .withArgs(weth.address, interestRateStrategyAddressBefore, ONE_ADDRESS); - const {interestRateStrategyAddress: interestRateStrategyAddressAfter} = + const { interestRateStrategyAddress: interestRateStrategyAddressAfter } = await pool.getReserveData(weth.address); expect(interestRateStrategyAddressBefore).to.not.be.eq(ONE_ADDRESS); @@ -720,7 +721,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Register a new risk Admin', async () => { - const {aclManager, poolAdmin, users, riskAdmin} = testEnv; + const { aclManager, poolAdmin, users, riskAdmin } = testEnv; const riskAdminRole = await aclManager.RISK_ADMIN_ROLE(); @@ -734,7 +735,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Unregister the new risk admin', async () => { - const {aclManager, poolAdmin, users, riskAdmin} = testEnv; + const { aclManager, poolAdmin, users, riskAdmin } = testEnv; const riskAdminRole = await aclManager.RISK_ADMIN_ROLE(); @@ -748,7 +749,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Authorized a new flash borrower', async () => { - const {aclManager, poolAdmin, users} = testEnv; + const { aclManager, poolAdmin, users } = testEnv; const authorizedFlashBorrowerRole = await aclManager.FLASH_BORROWER_ROLE(); @@ -761,7 +762,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Unauthorized flash borrower', async () => { - const {aclManager, poolAdmin, users} = testEnv; + const { aclManager, poolAdmin, users } = testEnv; const authorizedFlashBorrowerRole = await aclManager.FLASH_BORROWER_ROLE(); @@ -774,7 +775,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates bridge protocol fee equal to PERCENTAGE_FACTOR', async () => { - const {pool, configurator} = testEnv; + const { pool, configurator } = testEnv; const newProtocolFee = 10000; const oldBridgeProtocolFee = await pool.BRIDGE_PROTOCOL_FEE(); @@ -787,7 +788,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates bridge protocol fee', async () => { - const {pool, configurator} = testEnv; + const { pool, configurator } = testEnv; const oldBridgeProtocolFee = await pool.BRIDGE_PROTOCOL_FEE(); @@ -803,7 +804,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { it('Updates flash loan premiums equal to PERCENTAGE_FACTOR: 10000 toProtocol, 10000 total', async () => { const snapId = await evmSnapshot(); - const {pool, configurator} = testEnv; + const { pool, configurator } = testEnv; const oldFlashloanPremiumTotal = await pool.FLASHLOAN_PREMIUM_TOTAL(); const oldFlashloanPremiumToProtocol = await pool.FLASHLOAN_PREMIUM_TO_PROTOCOL(); @@ -825,7 +826,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Updates flash loan premiums: 10 toProtocol, 40 total', async () => { - const {pool, configurator} = testEnv; + const { pool, configurator } = testEnv; const oldFlashloanPremiumTotal = await pool.FLASHLOAN_PREMIUM_TOTAL(); const oldFlashloanPremiumToProtocol = await pool.FLASHLOAN_PREMIUM_TO_PROTOCOL(); @@ -845,7 +846,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Adds a new eMode category for stablecoins', async () => { - const {configurator, pool, poolAdmin} = testEnv; + const { configurator, pool, poolAdmin } = testEnv; expect( await configurator @@ -869,7 +870,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Set a eMode category to an asset', async () => { - const {configurator, pool, helpersContract, poolAdmin, dai} = testEnv; + const { configurator, pool, helpersContract, poolAdmin, dai } = testEnv; const oldCategoryId = await helpersContract.getReserveEModeCategory(dai.address); @@ -893,7 +894,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Sets siloed borrowing through the pool admin', async () => { - const {configurator, helpersContract, weth, poolAdmin} = testEnv; + const { configurator, helpersContract, weth, poolAdmin } = testEnv; const oldSiloedBorrowing = await helpersContract.getSiloedBorrowing(weth.address); @@ -907,7 +908,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Sets siloed borrowing through the risk admin', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; const oldSiloedBorrowing = await helpersContract.getSiloedBorrowing(weth.address); @@ -960,7 +961,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Sets a debt ceiling through the pool admin', async () => { - const {configurator, helpersContract, weth, poolAdmin} = testEnv; + const { configurator, helpersContract, weth, poolAdmin } = testEnv; const oldDebtCeiling = await helpersContract.getDebtCeiling(weth.address); @@ -977,7 +978,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Sets a debt ceiling through the risk admin', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; const oldDebtCeiling = await helpersContract.getDebtCeiling(weth.address); @@ -994,7 +995,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Sets a debt ceiling larger than max (revert expected)', async () => { - const {configurator, helpersContract, weth, riskAdmin} = testEnv; + const { configurator, helpersContract, weth, riskAdmin } = testEnv; const MAX_VALID_DEBT_CEILING = BigNumber.from('1099511627775'); const debtCeiling = MAX_VALID_DEBT_CEILING.add(1); @@ -1071,12 +1072,12 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Read debt ceiling decimals', async () => { - const {helpersContract} = testEnv; + const { helpersContract } = testEnv; expect(await helpersContract.getDebtCeilingDecimals()).to.be.eq(2); }); it('Check that the reserves have flashloans enabled', async () => { - const {weth, aave, usdc, dai, helpersContract} = testEnv; + const { weth, aave, usdc, dai, helpersContract } = testEnv; const wethFlashLoanEnabled = await helpersContract.getFlashLoanEnabled(weth.address); expect(wethFlashLoanEnabled).to.be.equal(true); @@ -1092,7 +1093,7 @@ makeSuite('PoolConfigurator', (testEnv: TestEnv) => { }); it('Disable weth flashloans', async () => { - const {weth, configurator, helpersContract} = testEnv; + const { weth, configurator, helpersContract } = testEnv; expect(await configurator.setReserveFlashLoaning(weth.address, false)); diff --git a/test-suites/pool-flashloan.spec.ts b/test-suites/pool-flashloan.spec.ts index 4fb4b843e..1a0e4e709 100644 --- a/test-suites/pool-flashloan.spec.ts +++ b/test-suites/pool-flashloan.spec.ts @@ -1,17 +1,18 @@ -import {expect} from 'chai'; -import {BigNumber, ethers, Event, utils} from 'ethers'; -import {MAX_UINT_AMOUNT} from '../helpers/constants'; -import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; -import {MockFlashLoanReceiver} from '../types/MockFlashLoanReceiver'; -import {ProtocolErrors} from '../helpers/types'; +import { expect } from 'chai'; +import { BigNumber, ethers, Event, utils } from 'ethers'; +import { MAX_UINT_AMOUNT } from '../helpers/constants'; +import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; +import { MockFlashLoanReceiver } from '../types/MockFlashLoanReceiver'; +import { ProtocolErrors } from '../helpers/types'; + import { getMockFlashLoanReceiver, getStableDebtToken, getVariableDebtToken, } from '@aave/deploy-v3/dist/helpers/contract-getters'; -import {TestEnv, makeSuite} from './helpers/make-suite'; +import { TestEnv, makeSuite } from './helpers/make-suite'; import './helpers/utils/wadraymath'; -import {waitForTx} from '@aave/deploy-v3'; +import { waitForTx } from '@aave/deploy-v3'; makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { let _mockFlashLoanReceiver = {} as MockFlashLoanReceiver; @@ -30,7 +31,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Configurator sets total premium = 9 bps, premium to protocol = 30%', async () => { - const {configurator, pool} = testEnv; + const { configurator, pool } = testEnv; await configurator.updateFlashloanPremiumTotal(TOTAL_PREMIUM); await configurator.updateFlashloanPremiumToProtocol(PREMIUM_TO_PROTOCOL); @@ -38,7 +39,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { expect(await pool.FLASHLOAN_PREMIUM_TO_PROTOCOL()).to.be.equal(PREMIUM_TO_PROTOCOL); }); it('Deposits WETH into the reserve', async () => { - const {pool, weth, aave, dai} = testEnv; + const { pool, weth, aave, dai } = testEnv; const userAddress = await pool.signer.getAddress(); const amountToDeposit = ethers.utils.parseEther('1'); @@ -61,7 +62,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes WETH + Dai flash loan with mode = 0, returns the funds correctly', async () => { - const {pool, helpersContract, weth, aWETH, dai, aDai} = testEnv; + const { pool, helpersContract, weth, aWETH, dai, aDai } = testEnv; const wethFlashBorrowedAmount = ethers.utils.parseEther('0.8'); const daiFlashBorrowedAmount = ethers.utils.parseEther('0.3'); @@ -138,7 +139,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { // Check event values for `ReserveDataUpdated` const reserveDataUpdatedEvents = tx.events?.filter( - ({event}) => event === 'ReserveDataUpdated' + ({ event }) => event === 'ReserveDataUpdated' ) as Event[]; for (const reserveDataUpdatedEvent of reserveDataUpdatedEvents) { const reserveData = await helpersContract.getReserveData( @@ -196,7 +197,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes an ETH flashloan with mode = 0 as big as the available liquidity', async () => { - const {pool, helpersContract, weth, aWETH, deployer} = testEnv; + const { pool, helpersContract, weth, aWETH, deployer } = testEnv; let reserveData = await helpersContract.getReserveData(weth.address); @@ -256,7 +257,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Disable ETH flashloan and takes an ETH flashloan (revert expected)', async () => { - const {pool, configurator, helpersContract, weth, deployer} = testEnv; + const { pool, configurator, helpersContract, weth, deployer } = testEnv; expect(await configurator.setReserveFlashLoaning(weth.address, false)); @@ -288,7 +289,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes WETH flashloan, does not return the funds with mode = 0 (revert expected)', async () => { - const {pool, weth, users} = testEnv; + const { pool, weth, users } = testEnv; const caller = users[1]; await _mockFlashLoanReceiver.setFailExecutionTransfer(true); @@ -308,7 +309,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes WETH flashloan, simulating a receiver as EOA (revert expected)', async () => { - const {pool, weth, users} = testEnv; + const { pool, weth, users } = testEnv; const caller = users[1]; await _mockFlashLoanReceiver.setFailExecutionTransfer(true); await _mockFlashLoanReceiver.setSimulateEOA(true); @@ -329,7 +330,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes a WETH flashloan with an invalid mode (revert expected)', async () => { - const {pool, weth, users} = testEnv; + const { pool, weth, users } = testEnv; const caller = users[1]; await _mockFlashLoanReceiver.setSimulateEOA(false); await _mockFlashLoanReceiver.setFailExecutionTransfer(true); @@ -350,7 +351,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller deposits 1000 DAI as collateral, Takes WETH flashloan with mode = 2, does not return the funds. A variable loan for caller is created', async () => { - const {dai, pool, weth, users, helpersContract} = testEnv; + const { dai, pool, weth, users, helpersContract } = testEnv; const caller = users[1]; @@ -396,7 +397,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { 0 ); - const {variableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses( + const { variableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( weth.address ); reserveData = await helpersContract.getReserveData(weth.address); @@ -417,7 +418,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { await pool.connect(caller.signer).repay(weth.address, MAX_UINT_AMOUNT, 2, caller.address); }); it('Tries to take a flashloan that is bigger than the available liquidity (revert expected)', async () => { - const {pool, weth, users} = testEnv; + const { pool, weth, users } = testEnv; const caller = users[1]; await expect( @@ -435,7 +436,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Tries to take a flashloan using a non contract address as receiver (revert expected)', async () => { - const {pool, deployer, weth, users} = testEnv; + const { pool, deployer, weth, users } = testEnv; const caller = users[1]; await expect( @@ -452,7 +453,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Deposits USDC into the reserve', async () => { - const {usdc, pool} = testEnv; + const { usdc, pool } = testEnv; const userAddress = await pool.signer.getAddress(); await usdc['mint(uint256)'](await convertToCurrencyDecimals(usdc.address, '1000')); @@ -465,7 +466,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes out a 500 USDC flashloan, returns the funds correctly', async () => { - const {usdc, aUsdc, pool, helpersContract, deployer: depositor} = testEnv; + const { usdc, aUsdc, pool, helpersContract, deployer: depositor } = testEnv; await _mockFlashLoanReceiver.setFailExecutionTransfer(false); @@ -513,7 +514,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes out a 500 USDC flashloan with mode = 0, does not return the funds (revert expected)', async () => { - const {usdc, pool, users} = testEnv; + const { usdc, pool, users } = testEnv; const caller = users[2]; const flashloanAmount = await convertToCurrencyDecimals(usdc.address, '500'); @@ -536,7 +537,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller deposits 5 WETH as collateral, Takes a USDC flashloan with mode = 2, does not return the funds. A loan for caller is created', async () => { - const {usdc, pool, weth, users, helpersContract} = testEnv; + const { usdc, pool, weth, users, helpersContract } = testEnv; const caller = users[2]; @@ -565,7 +566,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { '0x10', '0' ); - const {variableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses( + const { variableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( usdc.address ); @@ -577,7 +578,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller deposits 1000 DAI as collateral, Takes a WETH flashloan with mode = 0, does not approve the transfer of the funds', async () => { - const {dai, pool, weth, users} = testEnv; + const { dai, pool, weth, users } = testEnv; const caller = users[3]; await dai @@ -611,7 +612,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller takes a WETH flashloan with mode = 1', async () => { - const {pool, weth, users, helpersContract} = testEnv; + const { pool, weth, users, helpersContract } = testEnv; const caller = users[3]; @@ -635,7 +636,9 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { .to.emit(pool, 'FlashLoan') .withArgs(_mockFlashLoanReceiver.address, caller.address, weth.address, flashAmount, 1, 0, 0); - const {stableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses(weth.address); + const { stableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( + weth.address + ); const wethDebtToken = await getStableDebtToken(stableDebtTokenAddress); @@ -645,7 +648,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller takes a WETH flashloan with mode = 1 onBehalfOf user without allowance', async () => { - const {dai, pool, weth, users, helpersContract} = testEnv; + const { dai, pool, weth, users, helpersContract } = testEnv; const caller = users[5]; const onBehalfOf = users[4]; @@ -683,7 +686,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller takes a WETH flashloan with mode = 1 onBehalfOf user with allowance. A loan for onBehalfOf is creatd.', async () => { - const {pool, weth, users, helpersContract} = testEnv; + const { pool, weth, users, helpersContract } = testEnv; const caller = users[5]; const onBehalfOf = users[4]; @@ -711,7 +714,9 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { '0' ); - const {stableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses(weth.address); + const { stableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( + weth.address + ); const wethDebtToken = await getStableDebtToken(stableDebtTokenAddress); From 2710b9cc4f14661faf9bdeaeccc72e076021ae5b Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 18 Oct 2022 13:33:26 -0400 Subject: [PATCH 14/87] Update contracts/protocol/pool/PoolConfigurator.sol Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> --- contracts/protocol/pool/PoolConfigurator.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/protocol/pool/PoolConfigurator.sol b/contracts/protocol/pool/PoolConfigurator.sol index cebbb0cfa..06d3e22f8 100644 --- a/contracts/protocol/pool/PoolConfigurator.sol +++ b/contracts/protocol/pool/PoolConfigurator.sol @@ -69,7 +69,7 @@ contract PoolConfigurator is VersionedInitializable, IPoolConfigurator { uint256 public constant CONFIGURATOR_REVISION = 0x1; /// @inheritdoc VersionedInitializable - function getRevision() internal virtual override pure returns (uint256) { + function getRevision() internal pure virtual override returns (uint256) { return CONFIGURATOR_REVISION; } From c3c6e75406663170ae87c3c4fa80312eac198f15 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 18 Oct 2022 13:33:35 -0400 Subject: [PATCH 15/87] Update contracts/protocol/libraries/configuration/ReserveConfiguration.sol Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> --- .../protocol/libraries/configuration/ReserveConfiguration.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol index 36ccf827d..ea0a76097 100644 --- a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol +++ b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol @@ -564,7 +564,7 @@ library ReserveConfiguration { } /** - * @dev Get the flashLoanEnabledSetting + * @notice Gets the flashloanable flag for the reserve * @param self The reserve configuration */ function getFlashLoanEnabled(DataTypes.ReserveConfigurationMap memory self) From 6f5d6921f3fef1c7e3a4ea1de263cda53ffb9ab7 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 18 Oct 2022 13:33:49 -0400 Subject: [PATCH 16/87] Update contracts/protocol/libraries/configuration/ReserveConfiguration.sol Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> --- .../protocol/libraries/configuration/ReserveConfiguration.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol index ea0a76097..efebce640 100644 --- a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol +++ b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol @@ -566,6 +566,7 @@ library ReserveConfiguration { /** * @notice Gets the flashloanable flag for the reserve * @param self The reserve configuration + * @return The flashloanable flag */ function getFlashLoanEnabled(DataTypes.ReserveConfigurationMap memory self) internal From 4fb58e87afa56ce75989ecfe022b6edf31fafeab Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 18 Oct 2022 13:34:08 -0400 Subject: [PATCH 17/87] Update contracts/protocol/libraries/configuration/ReserveConfiguration.sol Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> --- .../protocol/libraries/configuration/ReserveConfiguration.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol index efebce640..90f031c7f 100644 --- a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol +++ b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol @@ -552,7 +552,7 @@ library ReserveConfiguration { /** * @dev Set whether or not FlashLoaning this asset is enabled * @param self The reserve configuration - * @param flashLoanEnabled boolean to indicated if Flashloans should be enabled (1) or disabled (0) + * @param flashLoanEnabled True if the asset is flashloanable, false otherwise */ function setFlashLoanEnabled(DataTypes.ReserveConfigurationMap memory self, bool flashLoanEnabled) internal From a5d188cb098cb6cdcbf6a53c5322b6d789db126e Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 18 Oct 2022 13:34:22 -0400 Subject: [PATCH 18/87] Update contracts/protocol/libraries/configuration/ReserveConfiguration.sol Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> --- .../protocol/libraries/configuration/ReserveConfiguration.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol index 90f031c7f..bf59ac5eb 100644 --- a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol +++ b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol @@ -550,7 +550,7 @@ library ReserveConfiguration { } /** - * @dev Set whether or not FlashLoaning this asset is enabled + * @notice Sets the flashloanble flag for the reserve * @param self The reserve configuration * @param flashLoanEnabled True if the asset is flashloanable, false otherwise */ From c646e3555c4f3c33d60407256ebd456c2ee7f349 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 18 Oct 2022 13:35:41 -0400 Subject: [PATCH 19/87] Update contracts/misc/AaveProtocolDataProvider.sol Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> --- contracts/misc/AaveProtocolDataProvider.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/misc/AaveProtocolDataProvider.sol b/contracts/misc/AaveProtocolDataProvider.sol index f954755bc..c7284ab12 100644 --- a/contracts/misc/AaveProtocolDataProvider.sol +++ b/contracts/misc/AaveProtocolDataProvider.sol @@ -378,7 +378,7 @@ contract AaveProtocolDataProvider is IPoolDataProvider { /** * @notice Returns whether the reserve has FlashLoans enabled or disabled * @param asset The address of the underlying asset of the reserve - * @return enabled True if FlashLoans are enabled, False if disabled + * @return True if FlashLoans are enabled, false otherwise * */ function getFlashLoanEnabled(address asset) external view returns (bool) { DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool()) From 7d3beddbedc2000c28bafce7dc14fac5fcd8bc50 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 18 Oct 2022 13:35:53 -0400 Subject: [PATCH 20/87] Update contracts/interfaces/IPoolConfigurator.sol Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> --- contracts/interfaces/IPoolConfigurator.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/interfaces/IPoolConfigurator.sol b/contracts/interfaces/IPoolConfigurator.sol index 1ff0ec077..f4d4db471 100644 --- a/contracts/interfaces/IPoolConfigurator.sol +++ b/contracts/interfaces/IPoolConfigurator.sol @@ -318,7 +318,7 @@ interface IPoolConfigurator { function setReserveStableRateBorrowing(address asset, bool enabled) external; /** - * @notice Configures flashloans on a reserve + * @notice Enable or disable flashloans on a reserve * @dev Can only be enabled (set to true) if borrowing is enabled * @param asset The address of the underlying asset of the reserve * @param enabled True if flashloans need to be enabled, false to disable falshloans From c17c5a87a6d99ebe43ff4eccd6bb87d79b919fab Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 18 Oct 2022 13:36:34 -0400 Subject: [PATCH 21/87] Update contracts/interfaces/IPoolConfigurator.sol comments Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> --- contracts/interfaces/IPoolConfigurator.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/interfaces/IPoolConfigurator.sol b/contracts/interfaces/IPoolConfigurator.sol index f4d4db471..35b9e7678 100644 --- a/contracts/interfaces/IPoolConfigurator.sol +++ b/contracts/interfaces/IPoolConfigurator.sol @@ -321,7 +321,7 @@ interface IPoolConfigurator { * @notice Enable or disable flashloans on a reserve * @dev Can only be enabled (set to true) if borrowing is enabled * @param asset The address of the underlying asset of the reserve - * @param enabled True if flashloans need to be enabled, false to disable falshloans + * @param enabled True if flashloans need to be enabled, false otherwise */ function setReserveFlashLoaning(address asset, bool enabled) external; From 2f2e18e278036cd376016e13ccc38c9faebe7e97 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 18 Oct 2022 13:36:53 -0400 Subject: [PATCH 22/87] Update contracts/interfaces/IPoolConfigurator.sol comments Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> --- contracts/interfaces/IPoolConfigurator.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/interfaces/IPoolConfigurator.sol b/contracts/interfaces/IPoolConfigurator.sol index 35b9e7678..ea809117d 100644 --- a/contracts/interfaces/IPoolConfigurator.sol +++ b/contracts/interfaces/IPoolConfigurator.sol @@ -35,7 +35,7 @@ interface IPoolConfigurator { /** * @dev Emitted when flashloans are enabled or disabled on a reserve. * @param asset The address of the underlying asset of the reserve - * @param enabled True if flashloans are enabled, False if flashloans are disabled + * @param enabled True if flashloans are enabled, false otherwise */ event ReserveFlashLoaning(address indexed asset, bool enabled); From 9d84549a0a1e91246da0312068a59e37413f5aa8 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 18 Oct 2022 13:41:52 -0400 Subject: [PATCH 23/87] fix: update comment for setReserveFlashLoaning --- contracts/interfaces/IPoolConfigurator.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/contracts/interfaces/IPoolConfigurator.sol b/contracts/interfaces/IPoolConfigurator.sol index ea809117d..df7c06b9b 100644 --- a/contracts/interfaces/IPoolConfigurator.sol +++ b/contracts/interfaces/IPoolConfigurator.sol @@ -319,7 +319,6 @@ interface IPoolConfigurator { /** * @notice Enable or disable flashloans on a reserve - * @dev Can only be enabled (set to true) if borrowing is enabled * @param asset The address of the underlying asset of the reserve * @param enabled True if flashloans need to be enabled, false otherwise */ From 284b49221e1947f689fd63da7c845f6b9c641f8b Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 18 Oct 2022 14:07:36 -0400 Subject: [PATCH 24/87] fix: check revert msg and event emission --- helpers/types.ts | 3 +- test-suites/pool-flashloan.spec.ts | 75 +++++++++++++++--------------- 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/helpers/types.ts b/helpers/types.ts index 79cd5f3d6..8bff6d62e 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -1,4 +1,4 @@ -import { BigNumber } from 'ethers'; +import {BigNumber} from 'ethers'; export interface SymbolMap { [symbol: string]: T; @@ -161,6 +161,7 @@ export enum ProtocolErrors { STABLE_BORROWING_ENABLED = '88', // 'Stable borrowing is enabled' SILOED_BORROWING_VIOLATION = '89', // user is trying to violate the siloed borrowing rule RESERVE_DEBT_NOT_ZERO = '90', // the total debt of the reserve needs to be 0 + FLASHLOAN_DISABLED = '91', // FlashLoaning for this asset is disabled // SafeCast SAFECAST_UINT128_OVERFLOW = "SafeCast: value doesn't fit in 128 bits", diff --git a/test-suites/pool-flashloan.spec.ts b/test-suites/pool-flashloan.spec.ts index 1a0e4e709..0a2c1c479 100644 --- a/test-suites/pool-flashloan.spec.ts +++ b/test-suites/pool-flashloan.spec.ts @@ -1,18 +1,18 @@ -import { expect } from 'chai'; -import { BigNumber, ethers, Event, utils } from 'ethers'; -import { MAX_UINT_AMOUNT } from '../helpers/constants'; -import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; -import { MockFlashLoanReceiver } from '../types/MockFlashLoanReceiver'; -import { ProtocolErrors } from '../helpers/types'; +import {expect} from 'chai'; +import {BigNumber, ethers, Event, utils} from 'ethers'; +import {MAX_UINT_AMOUNT} from '../helpers/constants'; +import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; +import {MockFlashLoanReceiver} from '../types/MockFlashLoanReceiver'; +import {ProtocolErrors} from '../helpers/types'; import { getMockFlashLoanReceiver, getStableDebtToken, getVariableDebtToken, } from '@aave/deploy-v3/dist/helpers/contract-getters'; -import { TestEnv, makeSuite } from './helpers/make-suite'; +import {TestEnv, makeSuite} from './helpers/make-suite'; import './helpers/utils/wadraymath'; -import { waitForTx } from '@aave/deploy-v3'; +import {waitForTx} from '@aave/deploy-v3'; makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { let _mockFlashLoanReceiver = {} as MockFlashLoanReceiver; @@ -21,6 +21,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { COLLATERAL_BALANCE_IS_ZERO, ERC20_TRANSFER_AMOUNT_EXCEEDS_BALANCE, INVALID_FLASHLOAN_EXECUTOR_RETURN, + FLASHLOAN_DISABLED, } = ProtocolErrors; const TOTAL_PREMIUM = 9; @@ -31,7 +32,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Configurator sets total premium = 9 bps, premium to protocol = 30%', async () => { - const { configurator, pool } = testEnv; + const {configurator, pool} = testEnv; await configurator.updateFlashloanPremiumTotal(TOTAL_PREMIUM); await configurator.updateFlashloanPremiumToProtocol(PREMIUM_TO_PROTOCOL); @@ -39,7 +40,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { expect(await pool.FLASHLOAN_PREMIUM_TO_PROTOCOL()).to.be.equal(PREMIUM_TO_PROTOCOL); }); it('Deposits WETH into the reserve', async () => { - const { pool, weth, aave, dai } = testEnv; + const {pool, weth, aave, dai} = testEnv; const userAddress = await pool.signer.getAddress(); const amountToDeposit = ethers.utils.parseEther('1'); @@ -62,7 +63,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes WETH + Dai flash loan with mode = 0, returns the funds correctly', async () => { - const { pool, helpersContract, weth, aWETH, dai, aDai } = testEnv; + const {pool, helpersContract, weth, aWETH, dai, aDai} = testEnv; const wethFlashBorrowedAmount = ethers.utils.parseEther('0.8'); const daiFlashBorrowedAmount = ethers.utils.parseEther('0.3'); @@ -139,7 +140,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { // Check event values for `ReserveDataUpdated` const reserveDataUpdatedEvents = tx.events?.filter( - ({ event }) => event === 'ReserveDataUpdated' + ({event}) => event === 'ReserveDataUpdated' ) as Event[]; for (const reserveDataUpdatedEvent of reserveDataUpdatedEvents) { const reserveData = await helpersContract.getReserveData( @@ -197,7 +198,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes an ETH flashloan with mode = 0 as big as the available liquidity', async () => { - const { pool, helpersContract, weth, aWETH, deployer } = testEnv; + const {pool, helpersContract, weth, aWETH, deployer} = testEnv; let reserveData = await helpersContract.getReserveData(weth.address); @@ -257,7 +258,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Disable ETH flashloan and takes an ETH flashloan (revert expected)', async () => { - const { pool, configurator, helpersContract, weth, deployer } = testEnv; + const {pool, configurator, helpersContract, weth, deployer} = testEnv; expect(await configurator.setReserveFlashLoaning(weth.address, false)); @@ -280,16 +281,18 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { '0x10', '0' ) - ).to.be.reverted; + ).to.be.revertedWith(FLASHLOAN_DISABLED); - expect(await configurator.setReserveFlashLoaning(weth.address, true)); + await expect(await configurator.setReserveFlashLoaning(weth.address, true)) + .to.emit(configurator, 'ReserveFlashLoaning') + .withArgs(weth.address, true); wethFlashLoanEnabled = await helpersContract.getFlashLoanEnabled(weth.address); expect(wethFlashLoanEnabled).to.be.equal(true); }); it('Takes WETH flashloan, does not return the funds with mode = 0 (revert expected)', async () => { - const { pool, weth, users } = testEnv; + const {pool, weth, users} = testEnv; const caller = users[1]; await _mockFlashLoanReceiver.setFailExecutionTransfer(true); @@ -309,7 +312,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes WETH flashloan, simulating a receiver as EOA (revert expected)', async () => { - const { pool, weth, users } = testEnv; + const {pool, weth, users} = testEnv; const caller = users[1]; await _mockFlashLoanReceiver.setFailExecutionTransfer(true); await _mockFlashLoanReceiver.setSimulateEOA(true); @@ -330,7 +333,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes a WETH flashloan with an invalid mode (revert expected)', async () => { - const { pool, weth, users } = testEnv; + const {pool, weth, users} = testEnv; const caller = users[1]; await _mockFlashLoanReceiver.setSimulateEOA(false); await _mockFlashLoanReceiver.setFailExecutionTransfer(true); @@ -351,7 +354,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller deposits 1000 DAI as collateral, Takes WETH flashloan with mode = 2, does not return the funds. A variable loan for caller is created', async () => { - const { dai, pool, weth, users, helpersContract } = testEnv; + const {dai, pool, weth, users, helpersContract} = testEnv; const caller = users[1]; @@ -397,7 +400,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { 0 ); - const { variableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( + const {variableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses( weth.address ); reserveData = await helpersContract.getReserveData(weth.address); @@ -418,7 +421,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { await pool.connect(caller.signer).repay(weth.address, MAX_UINT_AMOUNT, 2, caller.address); }); it('Tries to take a flashloan that is bigger than the available liquidity (revert expected)', async () => { - const { pool, weth, users } = testEnv; + const {pool, weth, users} = testEnv; const caller = users[1]; await expect( @@ -436,7 +439,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Tries to take a flashloan using a non contract address as receiver (revert expected)', async () => { - const { pool, deployer, weth, users } = testEnv; + const {pool, deployer, weth, users} = testEnv; const caller = users[1]; await expect( @@ -453,7 +456,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Deposits USDC into the reserve', async () => { - const { usdc, pool } = testEnv; + const {usdc, pool} = testEnv; const userAddress = await pool.signer.getAddress(); await usdc['mint(uint256)'](await convertToCurrencyDecimals(usdc.address, '1000')); @@ -466,7 +469,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes out a 500 USDC flashloan, returns the funds correctly', async () => { - const { usdc, aUsdc, pool, helpersContract, deployer: depositor } = testEnv; + const {usdc, aUsdc, pool, helpersContract, deployer: depositor} = testEnv; await _mockFlashLoanReceiver.setFailExecutionTransfer(false); @@ -514,7 +517,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes out a 500 USDC flashloan with mode = 0, does not return the funds (revert expected)', async () => { - const { usdc, pool, users } = testEnv; + const {usdc, pool, users} = testEnv; const caller = users[2]; const flashloanAmount = await convertToCurrencyDecimals(usdc.address, '500'); @@ -537,7 +540,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller deposits 5 WETH as collateral, Takes a USDC flashloan with mode = 2, does not return the funds. A loan for caller is created', async () => { - const { usdc, pool, weth, users, helpersContract } = testEnv; + const {usdc, pool, weth, users, helpersContract} = testEnv; const caller = users[2]; @@ -566,7 +569,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { '0x10', '0' ); - const { variableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( + const {variableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses( usdc.address ); @@ -578,7 +581,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller deposits 1000 DAI as collateral, Takes a WETH flashloan with mode = 0, does not approve the transfer of the funds', async () => { - const { dai, pool, weth, users } = testEnv; + const {dai, pool, weth, users} = testEnv; const caller = users[3]; await dai @@ -612,7 +615,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller takes a WETH flashloan with mode = 1', async () => { - const { pool, weth, users, helpersContract } = testEnv; + const {pool, weth, users, helpersContract} = testEnv; const caller = users[3]; @@ -636,9 +639,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { .to.emit(pool, 'FlashLoan') .withArgs(_mockFlashLoanReceiver.address, caller.address, weth.address, flashAmount, 1, 0, 0); - const { stableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( - weth.address - ); + const {stableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses(weth.address); const wethDebtToken = await getStableDebtToken(stableDebtTokenAddress); @@ -648,7 +649,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller takes a WETH flashloan with mode = 1 onBehalfOf user without allowance', async () => { - const { dai, pool, weth, users, helpersContract } = testEnv; + const {dai, pool, weth, users, helpersContract} = testEnv; const caller = users[5]; const onBehalfOf = users[4]; @@ -686,7 +687,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller takes a WETH flashloan with mode = 1 onBehalfOf user with allowance. A loan for onBehalfOf is creatd.', async () => { - const { pool, weth, users, helpersContract } = testEnv; + const {pool, weth, users, helpersContract} = testEnv; const caller = users[5]; const onBehalfOf = users[4]; @@ -714,9 +715,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { '0' ); - const { stableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( - weth.address - ); + const {stableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses(weth.address); const wethDebtToken = await getStableDebtToken(stableDebtTokenAddress); From 88880936a353d3dd5c9556d0fabb3f15ecd01c0c Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 18 Oct 2022 14:49:51 -0400 Subject: [PATCH 25/87] feat: add additional flashloan scenario --- test-suites/pool-flashloan.spec.ts | 41 ++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/test-suites/pool-flashloan.spec.ts b/test-suites/pool-flashloan.spec.ts index 0a2c1c479..6c5f5671b 100644 --- a/test-suites/pool-flashloan.spec.ts +++ b/test-suites/pool-flashloan.spec.ts @@ -22,6 +22,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { ERC20_TRANSFER_AMOUNT_EXCEEDS_BALANCE, INVALID_FLASHLOAN_EXECUTOR_RETURN, FLASHLOAN_DISABLED, + BORROWING_NOT_ENABLED, } = ProtocolErrors; const TOTAL_PREMIUM = 9; @@ -580,6 +581,46 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { expect(callerDebt.toString()).to.be.equal('500000000', 'Invalid user debt'); }); + it('Disable USDC borrowing. Caller deposits 5 WETH as collateral, Takes a USDC flashloan with mode = 2, does not return the funds. Revert creating borrow position (revert expected)', async () => { + const {usdc, pool, weth, configurator, users, helpersContract} = testEnv; + + const caller = users[2]; + + expect(await configurator.setReserveStableRateBorrowing(usdc.address, false)); + expect(await configurator.setReserveBorrowing(usdc.address, false)); + + let usdcConfiguration = await helpersContract.getReserveConfigurationData(usdc.address); + expect(usdcConfiguration.borrowingEnabled).to.be.equal(false); + + await weth + .connect(caller.signer) + ['mint(uint256)'](await convertToCurrencyDecimals(weth.address, '5')); + + await weth.connect(caller.signer).approve(pool.address, MAX_UINT_AMOUNT); + + const amountToDeposit = await convertToCurrencyDecimals(weth.address, '5'); + + await pool.connect(caller.signer).deposit(weth.address, amountToDeposit, caller.address, '0'); + + await _mockFlashLoanReceiver.setFailExecutionTransfer(true); + + const flashloanAmount = await convertToCurrencyDecimals(usdc.address, '500'); + + await expect( + pool + .connect(caller.signer) + .flashLoan( + _mockFlashLoanReceiver.address, + [usdc.address], + [flashloanAmount], + [2], + caller.address, + '0x10', + '0' + ) + ).to.be.revertedWith(BORROWING_NOT_ENABLED); + }); + it('Caller deposits 1000 DAI as collateral, Takes a WETH flashloan with mode = 0, does not approve the transfer of the funds', async () => { const {dai, pool, weth, users} = testEnv; const caller = users[3]; From 748818f0ef78c94fc45192165cbb3a24c23d63d9 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 25 Oct 2022 09:04:12 -0400 Subject: [PATCH 26/87] feat: switch bit used for flashloan enabled --- .../libraries/configuration/ReserveConfiguration.sol | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol index bf59ac5eb..36498bcd9 100644 --- a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol +++ b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol @@ -21,6 +21,7 @@ library ReserveConfiguration { uint256 internal constant PAUSED_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFF; // prettier-ignore uint256 internal constant BORROWABLE_IN_ISOLATION_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFFFFFFFFF; // prettier-ignore uint256 internal constant SILOED_BORROWING_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFFFFFF; // prettier-ignore + uint256 internal constant FLASHLOAN_ENABLED_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF; // prettier-ignore uint256 internal constant RESERVE_FACTOR_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFF; // prettier-ignore uint256 internal constant BORROW_CAP_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFF; // prettier-ignore uint256 internal constant SUPPLY_CAP_MASK = 0xFFFFFFFFFFFFFFFFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore @@ -28,7 +29,6 @@ library ReserveConfiguration { uint256 internal constant EMODE_CATEGORY_MASK = 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore uint256 internal constant UNBACKED_MINT_CAP_MASK = 0xFFFFFFFFFFF000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore uint256 internal constant DEBT_CEILING_MASK = 0xF0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore - uint256 internal constant FLASHLOAN_ENABLED_MASK = 0xEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; // prettier-ignore /// @dev For the LTV, the start bit is 0 (up to 15), hence no bitshifting is needed uint256 internal constant LIQUIDATION_THRESHOLD_START_BIT_POSITION = 16; @@ -41,7 +41,7 @@ library ReserveConfiguration { uint256 internal constant IS_PAUSED_START_BIT_POSITION = 60; uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61; uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62; - /// @dev bit 63 reserved + uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63; uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64; uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80; @@ -50,7 +50,6 @@ library ReserveConfiguration { uint256 internal constant EMODE_CATEGORY_START_BIT_POSITION = 168; uint256 internal constant UNBACKED_MINT_CAP_START_BIT_POSITION = 176; uint256 internal constant DEBT_CEILING_START_BIT_POSITION = 212; - uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 252; uint256 internal constant MAX_VALID_LTV = 65535; uint256 internal constant MAX_VALID_LIQUIDATION_THRESHOLD = 65535; From 7bd04e712357f953af0535a5702d91cf5d780041 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 25 Oct 2022 09:28:18 -0400 Subject: [PATCH 27/87] Update test-suites/pool-flashloan.spec.ts - move await Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> --- test-suites/pool-flashloan.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-suites/pool-flashloan.spec.ts b/test-suites/pool-flashloan.spec.ts index 6c5f5671b..1b887a3a1 100644 --- a/test-suites/pool-flashloan.spec.ts +++ b/test-suites/pool-flashloan.spec.ts @@ -284,7 +284,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { ) ).to.be.revertedWith(FLASHLOAN_DISABLED); - await expect(await configurator.setReserveFlashLoaning(weth.address, true)) + expect(await configurator.setReserveFlashLoaning(weth.address, true)) .to.emit(configurator, 'ReserveFlashLoaning') .withArgs(weth.address, true); From 49d0f4e6baa5b78d31443617456331904db7dfdc Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 25 Oct 2022 09:41:46 -0400 Subject: [PATCH 28/87] feat: add unit test for reserve configuration --- .../helpers/MockReserveConfiguration.sol | 14 +++++++++- test-suites/reserve-configuration.spec.ts | 27 ++++++++++++------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/contracts/mocks/helpers/MockReserveConfiguration.sol b/contracts/mocks/helpers/MockReserveConfiguration.sol index 4774da4b0..947a88a21 100644 --- a/contracts/mocks/helpers/MockReserveConfiguration.sol +++ b/contracts/mocks/helpers/MockReserveConfiguration.sol @@ -1,7 +1,9 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.10; -import {ReserveConfiguration} from '../../protocol/libraries/configuration/ReserveConfiguration.sol'; +import { + ReserveConfiguration +} from '../../protocol/libraries/configuration/ReserveConfiguration.sol'; import {DataTypes} from '../../protocol/libraries/types/DataTypes.sol'; contract MockReserveConfiguration { @@ -109,6 +111,16 @@ contract MockReserveConfiguration { configuration = config; } + function setFlashLoanEnabled(bool enabled) external { + DataTypes.ReserveConfigurationMap memory config = configuration; + config.setFlashLoanEnabled(enabled); + configuration = config; + } + + function getFlashLoanEnabled() external view returns (bool) { + return configuration.getFlashLoanEnabled(); + } + function setSupplyCap(uint256 supplyCap) external { DataTypes.ReserveConfigurationMap memory config = configuration; config.setSupplyCap(supplyCap); diff --git a/test-suites/reserve-configuration.spec.ts b/test-suites/reserve-configuration.spec.ts index bdce2c4ca..a27003d4a 100644 --- a/test-suites/reserve-configuration.spec.ts +++ b/test-suites/reserve-configuration.spec.ts @@ -1,9 +1,9 @@ -import { expect } from 'chai'; -import { BigNumber } from 'ethers'; -import { deployMockReserveConfiguration } from '@aave/deploy-v3/dist/helpers/contract-deployments'; -import { ProtocolErrors } from '../helpers/types'; -import { evmSnapshot, evmRevert } from '@aave/deploy-v3'; -import { MockReserveConfiguration } from '../types'; +import {expect} from 'chai'; +import {BigNumber} from 'ethers'; +import {deployMockReserveConfiguration} from '@aave/deploy-v3/dist/helpers/contract-deployments'; +import {ProtocolErrors} from '../helpers/types'; +import {evmSnapshot, evmRevert} from '@aave/deploy-v3'; +import {MockReserveConfiguration} from '../types'; describe('ReserveConfiguration', async () => { let snap: string; @@ -232,6 +232,13 @@ describe('ReserveConfiguration', async () => { expect(await configMock.getUnbackedMintCap()).to.be.eq(ZERO); }); + it('getFlashLoanEnabled()', async () => { + expect(await configMock.getFlashLoanEnabled()).to.be.eq(false); + expect(await configMock.setFlashLoanEnabled(true)); + expect(await configMock.getFlashLoanEnabled()).to.be.eq(true); + expect(await configMock.setFlashLoanEnabled(false)); + }); + it('setLtv() with ltv = MAX_VALID_LTV', async () => { expect(bigNumbersToArrayString(await configMock.getParams())).to.be.eql( bigNumbersToArrayString([ZERO, ZERO, ZERO, ZERO, ZERO, ZERO]) @@ -253,7 +260,7 @@ describe('ReserveConfiguration', async () => { it('setLtv() with ltv > MAX_VALID_LTV (revert expected)', async () => { expect(await configMock.getLtv()).to.be.eq(ZERO); - const { INVALID_LTV } = ProtocolErrors; + const {INVALID_LTV} = ProtocolErrors; // setLTV to MAX_VALID_LTV + 1 await expect(configMock.setLtv(MAX_VALID_LTV.add(1))).to.be.revertedWith(INVALID_LTV); @@ -281,7 +288,7 @@ describe('ReserveConfiguration', async () => { it('setLiquidationThreshold() with threshold > MAX_VALID_LIQUIDATION_THRESHOLD (revert expected)', async () => { expect(await configMock.getLiquidationThreshold()).to.be.eq(ZERO); - const { INVALID_LIQ_THRESHOLD } = ProtocolErrors; + const {INVALID_LIQ_THRESHOLD} = ProtocolErrors; // setLiquidationThreshold to MAX_VALID_LIQUIDATION_THRESHOLD + 1 await expect( @@ -311,7 +318,7 @@ describe('ReserveConfiguration', async () => { it('setDecimals() with decimals > MAX_VALID_DECIMALS (revert expected)', async () => { expect(await configMock.getDecimals()).to.be.eq(ZERO); - const { INVALID_DECIMALS } = ProtocolErrors; + const {INVALID_DECIMALS} = ProtocolErrors; // setDecimals to MAX_VALID_DECIMALS + 1 await expect(configMock.setDecimals(MAX_VALID_DECIMALS.add(1))).to.be.revertedWith( @@ -331,7 +338,7 @@ describe('ReserveConfiguration', async () => { it('setEModeCategory() with categoryID > MAX_VALID_EMODE_CATEGORY (revert expected)', async () => { expect(await configMock.getEModeCategory()).to.be.eq(ZERO); - const { INVALID_EMODE_CATEGORY } = ProtocolErrors; + const {INVALID_EMODE_CATEGORY} = ProtocolErrors; await expect(configMock.setEModeCategory(MAX_VALID_EMODE_CATEGORY.add(1))).to.be.revertedWith( INVALID_EMODE_CATEGORY From 516e0e81263b2133c8640836ffa08afb112aacfa Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Tue, 25 Oct 2022 10:47:49 -0400 Subject: [PATCH 29/87] fix: streamline test --- test-suites/pool-flashloan.spec.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/test-suites/pool-flashloan.spec.ts b/test-suites/pool-flashloan.spec.ts index 6c5f5671b..9ee2cdf8f 100644 --- a/test-suites/pool-flashloan.spec.ts +++ b/test-suites/pool-flashloan.spec.ts @@ -602,8 +602,6 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { await pool.connect(caller.signer).deposit(weth.address, amountToDeposit, caller.address, '0'); - await _mockFlashLoanReceiver.setFailExecutionTransfer(true); - const flashloanAmount = await convertToCurrencyDecimals(usdc.address, '500'); await expect( From 9e954393ea6c50aa00318e7f96a5867d0f49a460 Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Fri, 28 Oct 2022 12:11:17 +0200 Subject: [PATCH 30/87] fix: modify interface versions to support all minor 0.8.x vers --- contracts/flashloan/interfaces/IFlashLoanReceiver.sol | 2 +- contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol | 2 +- contracts/interfaces/IACLManager.sol | 2 +- contracts/interfaces/IAToken.sol | 2 +- contracts/interfaces/IAaveIncentivesController.sol | 2 +- contracts/interfaces/IAaveOracle.sol | 2 +- contracts/interfaces/ICreditDelegationToken.sol | 2 +- contracts/interfaces/IDelegationToken.sol | 2 +- contracts/interfaces/IERC20WithPermit.sol | 2 +- contracts/interfaces/IInitializableAToken.sol | 2 +- contracts/interfaces/IInitializableDebtToken.sol | 2 +- contracts/interfaces/IL2Pool.sol | 2 +- contracts/interfaces/IPool.sol | 2 +- contracts/interfaces/IPoolAddressesProvider.sol | 2 +- contracts/interfaces/IPoolAddressesProviderRegistry.sol | 2 +- contracts/interfaces/IPoolConfigurator.sol | 2 +- contracts/interfaces/IPoolDataProvider.sol | 2 +- contracts/interfaces/IPriceOracle.sol | 2 +- contracts/interfaces/IPriceOracleGetter.sol | 2 +- contracts/interfaces/IPriceOracleSentinel.sol | 2 +- contracts/interfaces/IReserveInterestRateStrategy.sol | 2 +- contracts/interfaces/IScaledBalanceToken.sol | 2 +- contracts/interfaces/ISequencerOracle.sol | 2 +- contracts/interfaces/IStableDebtToken.sol | 2 +- contracts/interfaces/IVariableDebtToken.sol | 2 +- contracts/misc/interfaces/IWETH.sol | 2 +- 26 files changed, 26 insertions(+), 26 deletions(-) diff --git a/contracts/flashloan/interfaces/IFlashLoanReceiver.sol b/contracts/flashloan/interfaces/IFlashLoanReceiver.sol index 132c54779..144cc6eac 100644 --- a/contracts/flashloan/interfaces/IFlashLoanReceiver.sol +++ b/contracts/flashloan/interfaces/IFlashLoanReceiver.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol'; import {IPool} from '../../interfaces/IPool.sol'; diff --git a/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol b/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol index 46236f5e4..b13a299a9 100644 --- a/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol +++ b/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol'; import {IPool} from '../../interfaces/IPool.sol'; diff --git a/contracts/interfaces/IACLManager.sol b/contracts/interfaces/IACLManager.sol index 4bb6e645b..b71f76086 100644 --- a/contracts/interfaces/IACLManager.sol +++ b/contracts/interfaces/IACLManager.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol'; diff --git a/contracts/interfaces/IAToken.sol b/contracts/interfaces/IAToken.sol index 21726c8e3..dc3b48a0b 100644 --- a/contracts/interfaces/IAToken.sol +++ b/contracts/interfaces/IAToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol'; import {IScaledBalanceToken} from './IScaledBalanceToken.sol'; diff --git a/contracts/interfaces/IAaveIncentivesController.sol b/contracts/interfaces/IAaveIncentivesController.sol index d0663cd30..3ae73deef 100644 --- a/contracts/interfaces/IAaveIncentivesController.sol +++ b/contracts/interfaces/IAaveIncentivesController.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; /** * @title IAaveIncentivesController diff --git a/contracts/interfaces/IAaveOracle.sol b/contracts/interfaces/IAaveOracle.sol index 0ad9b47fc..0d4aa3130 100644 --- a/contracts/interfaces/IAaveOracle.sol +++ b/contracts/interfaces/IAaveOracle.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IPriceOracleGetter} from './IPriceOracleGetter.sol'; import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol'; diff --git a/contracts/interfaces/ICreditDelegationToken.sol b/contracts/interfaces/ICreditDelegationToken.sol index a06de1f86..34dfa52d3 100644 --- a/contracts/interfaces/ICreditDelegationToken.sol +++ b/contracts/interfaces/ICreditDelegationToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; /** * @title ICreditDelegationToken diff --git a/contracts/interfaces/IDelegationToken.sol b/contracts/interfaces/IDelegationToken.sol index 288f1e55d..e32599fb3 100644 --- a/contracts/interfaces/IDelegationToken.sol +++ b/contracts/interfaces/IDelegationToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; /** * @title IDelegationToken diff --git a/contracts/interfaces/IERC20WithPermit.sol b/contracts/interfaces/IERC20WithPermit.sol index 3c67e56e8..2f0a704ff 100644 --- a/contracts/interfaces/IERC20WithPermit.sol +++ b/contracts/interfaces/IERC20WithPermit.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol'; diff --git a/contracts/interfaces/IInitializableAToken.sol b/contracts/interfaces/IInitializableAToken.sol index ba0ca82ee..d34bdd8d8 100644 --- a/contracts/interfaces/IInitializableAToken.sol +++ b/contracts/interfaces/IInitializableAToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IAaveIncentivesController} from './IAaveIncentivesController.sol'; import {IPool} from './IPool.sol'; diff --git a/contracts/interfaces/IInitializableDebtToken.sol b/contracts/interfaces/IInitializableDebtToken.sol index 740cb8c7d..45c48b5b4 100644 --- a/contracts/interfaces/IInitializableDebtToken.sol +++ b/contracts/interfaces/IInitializableDebtToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IAaveIncentivesController} from './IAaveIncentivesController.sol'; import {IPool} from './IPool.sol'; diff --git a/contracts/interfaces/IL2Pool.sol b/contracts/interfaces/IL2Pool.sol index 27ac223e7..7823e864a 100644 --- a/contracts/interfaces/IL2Pool.sol +++ b/contracts/interfaces/IL2Pool.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; /** * @title IL2Pool diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index 7f64b4ab4..0bea9aad0 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol'; import {DataTypes} from '../protocol/libraries/types/DataTypes.sol'; diff --git a/contracts/interfaces/IPoolAddressesProvider.sol b/contracts/interfaces/IPoolAddressesProvider.sol index 01a126bd4..c3c8617f9 100644 --- a/contracts/interfaces/IPoolAddressesProvider.sol +++ b/contracts/interfaces/IPoolAddressesProvider.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; /** * @title IPoolAddressesProvider diff --git a/contracts/interfaces/IPoolAddressesProviderRegistry.sol b/contracts/interfaces/IPoolAddressesProviderRegistry.sol index a48ff2074..f3867d06b 100644 --- a/contracts/interfaces/IPoolAddressesProviderRegistry.sol +++ b/contracts/interfaces/IPoolAddressesProviderRegistry.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; /** * @title IPoolAddressesProviderRegistry diff --git a/contracts/interfaces/IPoolConfigurator.sol b/contracts/interfaces/IPoolConfigurator.sol index d84454a70..db7022b2d 100644 --- a/contracts/interfaces/IPoolConfigurator.sol +++ b/contracts/interfaces/IPoolConfigurator.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {ConfiguratorInputTypes} from '../protocol/libraries/types/ConfiguratorInputTypes.sol'; diff --git a/contracts/interfaces/IPoolDataProvider.sol b/contracts/interfaces/IPoolDataProvider.sol index 331653a2f..0c7b34c35 100644 --- a/contracts/interfaces/IPoolDataProvider.sol +++ b/contracts/interfaces/IPoolDataProvider.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; interface IPoolDataProvider { /** diff --git a/contracts/interfaces/IPriceOracle.sol b/contracts/interfaces/IPriceOracle.sol index 1f51f1843..b86cc1d17 100644 --- a/contracts/interfaces/IPriceOracle.sol +++ b/contracts/interfaces/IPriceOracle.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; /** * @title IPriceOracle diff --git a/contracts/interfaces/IPriceOracleGetter.sol b/contracts/interfaces/IPriceOracleGetter.sol index 92c1c4668..40e59954f 100644 --- a/contracts/interfaces/IPriceOracleGetter.sol +++ b/contracts/interfaces/IPriceOracleGetter.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; /** * @title IPriceOracleGetter diff --git a/contracts/interfaces/IPriceOracleSentinel.sol b/contracts/interfaces/IPriceOracleSentinel.sol index 6d05bf0f9..7a49b717c 100644 --- a/contracts/interfaces/IPriceOracleSentinel.sol +++ b/contracts/interfaces/IPriceOracleSentinel.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol'; diff --git a/contracts/interfaces/IReserveInterestRateStrategy.sol b/contracts/interfaces/IReserveInterestRateStrategy.sol index 5c9cbdce0..1aaf63343 100644 --- a/contracts/interfaces/IReserveInterestRateStrategy.sol +++ b/contracts/interfaces/IReserveInterestRateStrategy.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {DataTypes} from '../protocol/libraries/types/DataTypes.sol'; diff --git a/contracts/interfaces/IScaledBalanceToken.sol b/contracts/interfaces/IScaledBalanceToken.sol index 901e87516..89ccddfd8 100644 --- a/contracts/interfaces/IScaledBalanceToken.sol +++ b/contracts/interfaces/IScaledBalanceToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; /** * @title IScaledBalanceToken diff --git a/contracts/interfaces/ISequencerOracle.sol b/contracts/interfaces/ISequencerOracle.sol index af6122160..9a2a01460 100644 --- a/contracts/interfaces/ISequencerOracle.sol +++ b/contracts/interfaces/ISequencerOracle.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; /** * @title ISequencerOracle diff --git a/contracts/interfaces/IStableDebtToken.sol b/contracts/interfaces/IStableDebtToken.sol index ad5cdb45f..82352f091 100644 --- a/contracts/interfaces/IStableDebtToken.sol +++ b/contracts/interfaces/IStableDebtToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IInitializableDebtToken} from './IInitializableDebtToken.sol'; diff --git a/contracts/interfaces/IVariableDebtToken.sol b/contracts/interfaces/IVariableDebtToken.sol index 59facb7be..cc61f6c68 100644 --- a/contracts/interfaces/IVariableDebtToken.sol +++ b/contracts/interfaces/IVariableDebtToken.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IScaledBalanceToken} from './IScaledBalanceToken.sol'; import {IInitializableDebtToken} from './IInitializableDebtToken.sol'; diff --git a/contracts/misc/interfaces/IWETH.sol b/contracts/misc/interfaces/IWETH.sol index 2ab87dae3..32eac0e5e 100644 --- a/contracts/misc/interfaces/IWETH.sol +++ b/contracts/misc/interfaces/IWETH.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; interface IWETH { function deposit() external payable; From d06f8f22296f44673b15f2b71df8d17a70b1ea88 Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Fri, 28 Oct 2022 12:17:15 +0200 Subject: [PATCH 31/87] fix: make InterestRateStrategy contract inheritable --- .../protocol/pool/DefaultReserveInterestRateStrategy.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol b/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol index 7d082a960..9937ce237 100644 --- a/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol +++ b/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol'; import {WadRayMath} from '../libraries/math/WadRayMath.sol'; @@ -191,8 +191,8 @@ contract DefaultReserveInterestRateStrategy is IReserveInterestRateStrategy { } /// @inheritdoc IReserveInterestRateStrategy - function calculateInterestRates(DataTypes.CalculateInterestRatesParams calldata params) - external + function calculateInterestRates(DataTypes.CalculateInterestRatesParams memory params) + public view override returns ( From 0457e7176c89f91700e0aa63691dd0d9580b77db Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Fri, 28 Oct 2022 12:33:45 +0200 Subject: [PATCH 32/87] feat: updated price oracle sentinel interface --- contracts/interfaces/ISequencerOracle.sol | 19 ++++++++++++++++--- contracts/mocks/oracle/SequencerOracle.sol | 19 +++++++++++++++++-- .../configuration/PriceOracleSentinel.sol | 4 ++-- test-suites/price-oracle-sentinel.spec.ts | 12 ++++++------ 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/contracts/interfaces/ISequencerOracle.sol b/contracts/interfaces/ISequencerOracle.sol index af6122160..afb4896e9 100644 --- a/contracts/interfaces/ISequencerOracle.sol +++ b/contracts/interfaces/ISequencerOracle.sol @@ -9,8 +9,21 @@ pragma solidity 0.8.10; interface ISequencerOracle { /** * @notice Returns the health status of the sequencer. - * @return True if the sequencer is down, false otherwise - * @return The timestamp of last time the sequencer got up + * @return roundId The round ID from the aggregator for which the data was retrieved combined with a phase to ensure + * that round IDs get larger as time moves forward. + * @return answer The answer for the latest round: 0 if the sequencer is up, 1 if it is down. + * @return startedAt The timestamp when the round was started. + * @return updatedAt The timestamp of the block in which the answer was updated on L1. + * @return answeredInRound The round ID of the round in which the answer was computed. */ - function latestAnswer() external view returns (bool, uint256); + function latestRoundData() + external + view + returns ( + uint80 roundId, + int256 answer, + uint256 startedAt, + uint256 updatedAt, + uint80 answeredInRound + ); } diff --git a/contracts/mocks/oracle/SequencerOracle.sol b/contracts/mocks/oracle/SequencerOracle.sol index c608124a2..64608f085 100644 --- a/contracts/mocks/oracle/SequencerOracle.sol +++ b/contracts/mocks/oracle/SequencerOracle.sol @@ -27,7 +27,22 @@ contract SequencerOracle is ISequencerOracle, Ownable { } /// @inheritdoc ISequencerOracle - function latestAnswer() external view override returns (bool, uint256) { - return (_isDown, _timestampGotUp); + function latestRoundData() + external + view + override + returns ( + uint80 roundId, + int256 answer, + uint256 startedAt, + uint256 updatedAt, + uint80 answeredInRound + ) + { + int256 isDown; + if (_isDown) { + isDown = 1; + } + return (0, isDown, 0, _timestampGotUp, 0); } } diff --git a/contracts/protocol/configuration/PriceOracleSentinel.sol b/contracts/protocol/configuration/PriceOracleSentinel.sol index 493ff379a..81b22d8db 100644 --- a/contracts/protocol/configuration/PriceOracleSentinel.sol +++ b/contracts/protocol/configuration/PriceOracleSentinel.sol @@ -73,8 +73,8 @@ contract PriceOracleSentinel is IPriceOracleSentinel { * @return True if the SequencerOracle is up and the grace period passed, false otherwise */ function _isUpAndGracePeriodPassed() internal view returns (bool) { - (bool isDown, uint256 timestampGotUp) = _sequencerOracle.latestAnswer(); - return !isDown && block.timestamp - timestampGotUp > _gracePeriod; + (, int256 answer, , uint256 lastUpdateTimestamp, ) = _sequencerOracle.latestRoundData(); + return answer == 0 && block.timestamp - lastUpdateTimestamp > _gracePeriod; } /// @inheritdoc IPriceOracleSentinel diff --git a/test-suites/price-oracle-sentinel.spec.ts b/test-suites/price-oracle-sentinel.spec.ts index 6579878b9..93c3bf6e1 100644 --- a/test-suites/price-oracle-sentinel.spec.ts +++ b/test-suites/price-oracle-sentinel.spec.ts @@ -70,9 +70,9 @@ makeSuite('PriceOracleSentinel', (testEnv: TestEnv) => { expect(await addressesProvider.getPriceOracleSentinel()).to.be.eq(priceOracleSentinel.address); - const answer = await sequencerOracle.latestAnswer(); - expect(answer[0]).to.be.eq(false); + const answer = await sequencerOracle.latestRoundData(); expect(answer[1]).to.be.eq(0); + expect(answer[3]).to.be.eq(0); }); it('Pooladmin updates grace period for sentinel', async () => { @@ -212,8 +212,8 @@ makeSuite('PriceOracleSentinel', (testEnv: TestEnv) => { const userGlobalData = await pool.getUserAccountData(borrower.address); expect(userGlobalData.healthFactor).to.be.lt(utils.parseUnits('1', 18), INVALID_HF); - const currAnswer = await sequencerOracle.latestAnswer(); - waitForTx(await sequencerOracle.setAnswer(true, currAnswer[1])); + const currAnswer = await sequencerOracle.latestRoundData(); + waitForTx(await sequencerOracle.setAnswer(true, currAnswer[3])); }); it('Tries to liquidate borrower when sequencer is down (HF > 0.95) (revert expected)', async () => { @@ -431,8 +431,8 @@ makeSuite('PriceOracleSentinel', (testEnv: TestEnv) => { }); it('Turn off sequencer + increase time more than grace period', async () => { - const currAnswer = await sequencerOracle.latestAnswer(); - await waitForTx(await sequencerOracle.setAnswer(true, currAnswer[1])); + const currAnswer = await sequencerOracle.latestRoundData(); + await waitForTx(await sequencerOracle.setAnswer(true, currAnswer[3])); await increaseTime(GRACE_PERIOD.mul(2).toNumber()); }); From b1d94da8c4de795e94a7ff5c1429a98854cb2b65 Mon Sep 17 00:00:00 2001 From: The-3D <37953689+The-3D@users.noreply.github.com> Date: Fri, 28 Oct 2022 17:15:45 +0200 Subject: [PATCH 33/87] Borrow/repay check removal (#705) * feat: removed borrow/repay in the same block check * test: Add tests for borrow-repay in same block * fix: Fix error in tests Co-authored-by: miguelmtzinf --- .../protocol/libraries/helpers/Errors.sol | 1 - .../libraries/logic/ValidationLogic.sol | 14 - helpers/types.ts | 1 - test-suites/stable-debt-token.spec.ts | 173 ++++++++++--- test-suites/validation-logic.spec.ts | 199 +++------------ test-suites/variable-debt-token.spec.ts | 239 +++++++++++++++--- 6 files changed, 388 insertions(+), 239 deletions(-) diff --git a/contracts/protocol/libraries/helpers/Errors.sol b/contracts/protocol/libraries/helpers/Errors.sol index 640e46322..d022f65ee 100644 --- a/contracts/protocol/libraries/helpers/Errors.sol +++ b/contracts/protocol/libraries/helpers/Errors.sol @@ -54,7 +54,6 @@ library Errors { string public constant HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45'; // 'Health factor is not below the threshold' string public constant COLLATERAL_CANNOT_BE_LIQUIDATED = '46'; // 'The collateral chosen cannot be liquidated' string public constant SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47'; // 'User did not borrow the specified currency' - string public constant SAME_BLOCK_BORROW_REPAY = '48'; // 'Borrow and repay in same block is not allowed' string public constant INCONSISTENT_FLASHLOAN_PARAMS = '49'; // 'Inconsistent flashloan parameters' string public constant BORROW_CAP_EXCEEDED = '50'; // 'Borrow cap is exceeded' string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded' diff --git a/contracts/protocol/libraries/logic/ValidationLogic.sol b/contracts/protocol/libraries/logic/ValidationLogic.sol index fb2eda0c1..784fc728d 100644 --- a/contracts/protocol/libraries/logic/ValidationLogic.sol +++ b/contracts/protocol/libraries/logic/ValidationLogic.sol @@ -327,20 +327,6 @@ library ValidationLogic { require(isActive, Errors.RESERVE_INACTIVE); require(!isPaused, Errors.RESERVE_PAUSED); - uint256 variableDebtPreviousIndex = IScaledBalanceToken(reserveCache.variableDebtTokenAddress) - .getPreviousIndex(onBehalfOf); - - uint40 stableRatePreviousTimestamp = IStableDebtToken(reserveCache.stableDebtTokenAddress) - .getUserLastUpdated(onBehalfOf); - - require( - (stableRatePreviousTimestamp < uint40(block.timestamp) && - interestRateMode == DataTypes.InterestRateMode.STABLE) || - (variableDebtPreviousIndex < reserveCache.nextVariableBorrowIndex && - interestRateMode == DataTypes.InterestRateMode.VARIABLE), - Errors.SAME_BLOCK_BORROW_REPAY - ); - require( (stableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.STABLE) || (variableDebt != 0 && interestRateMode == DataTypes.InterestRateMode.VARIABLE), diff --git a/helpers/types.ts b/helpers/types.ts index 79cd5f3d6..5ad641560 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -118,7 +118,6 @@ export enum ProtocolErrors { HEALTH_FACTOR_NOT_BELOW_THRESHOLD = '45', // 'Health factor is not below the threshold' COLLATERAL_CANNOT_BE_LIQUIDATED = '46', // 'The collateral chosen cannot be liquidated' SPECIFIED_CURRENCY_NOT_BORROWED_BY_USER = '47', // 'User did not borrow the specified currency' - SAME_BLOCK_BORROW_REPAY = '48', // 'Borrow and repay in same block is not allowed' INCONSISTENT_FLASHLOAN_PARAMS = '49', // 'Inconsistent flashloan parameters' BORROW_CAP_EXCEEDED = '50', // 'Borrow cap is exceeded' SUPPLY_CAP_EXCEEDED = '51', // 'Supply cap is exceeded' diff --git a/test-suites/stable-debt-token.spec.ts b/test-suites/stable-debt-token.spec.ts index 584eed351..fa34952a5 100644 --- a/test-suites/stable-debt-token.spec.ts +++ b/test-suites/stable-debt-token.spec.ts @@ -1,26 +1,30 @@ -import { expect } from 'chai'; -import { BigNumber, utils } from 'ethers'; -import { ProtocolErrors, RateMode } from '../helpers/types'; -import { MAX_UINT_AMOUNT, RAY, ZERO_ADDRESS } from '../helpers/constants'; -import { impersonateAccountsHardhat, setAutomine } from '../helpers/misc-utils'; -import { makeSuite, TestEnv } from './helpers/make-suite'; -import { topUpNonPayableWithEther } from './helpers/utils/funds'; -import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { evmRevert, evmSnapshot, increaseTime, waitForTx } from '@aave/deploy-v3'; -import { StableDebtToken__factory } from '../types'; +import {expect} from 'chai'; +import {BigNumber, utils} from 'ethers'; +import {ProtocolErrors, RateMode} from '../helpers/types'; +import {MAX_UINT_AMOUNT, RAY, ZERO_ADDRESS} from '../helpers/constants'; +import {impersonateAccountsHardhat, setAutomine, setAutomineEvm} from '../helpers/misc-utils'; +import {makeSuite, TestEnv} from './helpers/make-suite'; +import {topUpNonPayableWithEther} from './helpers/utils/funds'; +import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import {evmRevert, evmSnapshot, getStableDebtToken, increaseTime, waitForTx} from '@aave/deploy-v3'; +import {StableDebtToken__factory} from '../types'; declare var hre: HardhatRuntimeEnvironment; makeSuite('StableDebtToken', (testEnv: TestEnv) => { - const { CALLER_MUST_BE_POOL, CALLER_NOT_POOL_ADMIN } = ProtocolErrors; + const {CALLER_MUST_BE_POOL, CALLER_NOT_POOL_ADMIN} = ProtocolErrors; + let snap: string; - before(async () => { + beforeEach(async () => { snap = await evmSnapshot(); }); + afterEach(async () => { + await evmRevert(snap); + }); it('Check initialization', async () => { - const { pool, weth, dai, helpersContract, users } = testEnv; + const {pool, weth, dai, helpersContract, users} = testEnv; const daiStableDebtTokenAddress = (await helpersContract.getReserveTokensAddresses(dai.address)) .stableDebtTokenAddress; const stableDebtContract = StableDebtToken__factory.connect( @@ -70,7 +74,7 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { }); it('Tries to mint not being the Pool (revert expected)', async () => { - const { deployer, dai, helpersContract } = testEnv; + const {deployer, dai, helpersContract} = testEnv; const daiStableDebtTokenAddress = (await helpersContract.getReserveTokensAddresses(dai.address)) .stableDebtTokenAddress; @@ -86,7 +90,7 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { }); it('Tries to burn not being the Pool (revert expected)', async () => { - const { deployer, dai, helpersContract } = testEnv; + const {deployer, dai, helpersContract} = testEnv; const daiStableDebtTokenAddress = (await helpersContract.getReserveTokensAddresses(dai.address)) .stableDebtTokenAddress; @@ -105,7 +109,7 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { }); it('Tries to transfer debt tokens (revert expected)', async () => { - const { users, dai, helpersContract } = testEnv; + const {users, dai, helpersContract} = testEnv; const daiStableDebtTokenAddress = (await helpersContract.getReserveTokensAddresses(dai.address)) .stableDebtTokenAddress; const stableDebtContract = StableDebtToken__factory.connect( @@ -119,7 +123,7 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { }); it('Check Mint and Transfer events when borrowing on behalf', async () => { - const snapId = await evmSnapshot(); + // const snapId = await evmSnapshot(); const { pool, weth, @@ -191,14 +195,14 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { ); const rawTransferEvents = tx.logs.filter( - ({ topics, address }) => topics[0] === transferEventSig && address == stableDebtToken.address + ({topics, address}) => topics[0] === transferEventSig && address == stableDebtToken.address ); const transferAmount = stableDebtToken.interface.parseLog(rawTransferEvents[0]).args.value; const rawMintEvents = tx.logs.filter( - ({ topics, address }) => topics[0] === mintEventSig && address == stableDebtToken.address + ({topics, address}) => topics[0] === mintEventSig && address == stableDebtToken.address ); - const { amount: mintAmount, balanceIncrease } = stableDebtToken.interface.parseLog( + const {amount: mintAmount, balanceIncrease} = stableDebtToken.interface.parseLog( rawMintEvents[0] ).args; @@ -207,11 +211,11 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { expect(expectedDebtIncreaseUser1).to.be.eq(balanceIncrease); expect(afterDebtBalanceUser2).to.be.eq(beforeDebtBalanceUser2); - await evmRevert(snapId); + // await evmRevert(snapId); }); it('Tries to approve debt tokens (revert expected)', async () => { - const { users, dai, helpersContract } = testEnv; + const {users, dai, helpersContract} = testEnv; const daiStableDebtTokenAddress = (await helpersContract.getReserveTokensAddresses(dai.address)) .stableDebtTokenAddress; const stableDebtContract = StableDebtToken__factory.connect( @@ -228,7 +232,7 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { }); it('Tries to increase allowance of debt tokens (revert expected)', async () => { - const { users, dai, helpersContract } = testEnv; + const {users, dai, helpersContract} = testEnv; const daiStableDebtTokenAddress = (await helpersContract.getReserveTokensAddresses(dai.address)) .stableDebtTokenAddress; const stableDebtContract = StableDebtToken__factory.connect( @@ -242,7 +246,7 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { }); it('Tries to decrease allowance of debt tokens (revert expected)', async () => { - const { users, dai, helpersContract } = testEnv; + const {users, dai, helpersContract} = testEnv; const daiStableDebtTokenAddress = (await helpersContract.getReserveTokensAddresses(dai.address)) .stableDebtTokenAddress; const stableDebtContract = StableDebtToken__factory.connect( @@ -256,7 +260,7 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { }); it('Tries to transferFrom (revert expected)', async () => { - const { users, dai, helpersContract } = testEnv; + const {users, dai, helpersContract} = testEnv; const daiStableDebtTokenAddress = (await helpersContract.getReserveTokensAddresses(dai.address)) .stableDebtTokenAddress; const stableDebtContract = StableDebtToken__factory.connect( @@ -280,13 +284,13 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { // progress time by a year, to accrue significant debt. // then let user 2 withdraw sufficient funds such that secondTerm (userStableRate * burnAmount) >= averageRate * supply // if we do not have user 1 deposit as well, we will have issues getting past previousSupply <= amount, as amount > supply for secondTerm to be > firstTerm. - await evmRevert(snap); + // await evmRevert(snap); const rateGuess1 = BigNumber.from(RAY); const rateGuess2 = BigNumber.from(10).pow(30); const amount1 = BigNumber.from(2); const amount2 = BigNumber.from(1); - const { deployer, pool, dai, helpersContract, users } = testEnv; + const {deployer, pool, dai, helpersContract, users} = testEnv; // Impersonate the Pool await topUpNonPayableWithEther(deployer.signer, [pool.address], utils.parseEther('1')); @@ -316,8 +320,8 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { }); it('setIncentivesController() ', async () => { - const snapshot = await evmSnapshot(); - const { dai, helpersContract, poolAdmin, aclManager, deployer } = testEnv; + // const snapshot = await evmSnapshot(); + const {dai, helpersContract, poolAdmin, aclManager, deployer} = testEnv; const config = await helpersContract.getReserveTokensAddresses(dai.address); const stableDebt = StableDebtToken__factory.connect( config.stableDebtTokenAddress, @@ -330,7 +334,7 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { expect(await stableDebt.connect(poolAdmin.signer).setIncentivesController(ZERO_ADDRESS)); expect(await stableDebt.getIncentivesController()).to.be.eq(ZERO_ADDRESS); - await evmRevert(snapshot); + // await evmRevert(snapshot); }); it('setIncentivesController() from not pool admin (revert expected)', async () => { @@ -348,4 +352,111 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { stableDebt.connect(user.signer).setIncentivesController(ZERO_ADDRESS) ).to.be.revertedWith(CALLER_NOT_POOL_ADMIN); }); + + it('User borrows and repays in same block with zero fees', async () => { + const {pool, users, dai, aDai, usdc, stableDebtDai} = testEnv; + const user = users[0]; + + // We need some debt. + await usdc.connect(user.signer)['mint(uint256)'](utils.parseEther('2000')); + await usdc.connect(user.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(user.signer) + .deposit(usdc.address, utils.parseEther('2000'), user.address, 0); + await dai.connect(user.signer)['mint(uint256)'](utils.parseEther('2000')); + await dai.connect(user.signer).transfer(aDai.address, utils.parseEther('2000')); + await dai.connect(user.signer).approve(pool.address, MAX_UINT_AMOUNT); + + const userDataBefore = await pool.getUserAccountData(user.address); + expect(await stableDebtDai.balanceOf(user.address)).to.be.eq(0); + + // Turn off automining - pretty sure that coverage is getting messed up here. + await setAutomine(false); + // Borrow 500 dai + await pool + .connect(user.signer) + .borrow(dai.address, utils.parseEther('500'), RateMode.Stable, 0, user.address); + + // Turn on automining, but not mine a new block until next tx + await setAutomineEvm(true); + expect( + await pool + .connect(user.signer) + .repay(dai.address, utils.parseEther('500'), RateMode.Stable, user.address) + ); + + expect(await stableDebtDai.balanceOf(user.address)).to.be.eq(0); + expect(await dai.balanceOf(user.address)).to.be.eq(0); + expect(await dai.balanceOf(aDai.address)).to.be.eq(utils.parseEther('2000')); + + const userDataAfter = await pool.getUserAccountData(user.address); + expect(userDataBefore.totalCollateralBase).to.be.lte(userDataAfter.totalCollateralBase); + expect(userDataBefore.healthFactor).to.be.lte(userDataAfter.healthFactor); + expect(userDataBefore.totalDebtBase).to.be.eq(userDataAfter.totalDebtBase); + }); + + it('User borrows and repays in same block using credit delegation with zero fees', async () => { + const { + pool, + dai, + aDai, + weth, + users: [user1, user2, user3], + } = testEnv; + + // Add liquidity + await dai.connect(user3.signer)['mint(uint256)'](utils.parseUnits('1000', 18)); + await dai.connect(user3.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(user3.signer) + .supply(dai.address, utils.parseUnits('1000', 18), user3.address, 0); + + // User1 supplies 10 WETH + await dai.connect(user1.signer)['mint(uint256)'](utils.parseUnits('100', 18)); + await dai.connect(user1.signer).approve(pool.address, MAX_UINT_AMOUNT); + await weth.connect(user1.signer)['mint(uint256)'](utils.parseUnits('10', 18)); + await weth.connect(user1.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(user1.signer) + .supply(weth.address, utils.parseUnits('10', 18), user1.address, 0); + + const daiData = await pool.getReserveData(dai.address); + const stableDebtToken = await getStableDebtToken(daiData.stableDebtTokenAddress); + + // User1 approves User2 to borrow 1000 DAI + expect( + await stableDebtToken + .connect(user1.signer) + .approveDelegation(user2.address, utils.parseUnits('1000', 18)) + ); + const userDataBefore = await pool.getUserAccountData(user1.address); + + // Turn off automining to simulate actions in same block + await setAutomine(false); + + // User2 borrows 2 DAI on behalf of User1 + expect( + await pool + .connect(user2.signer) + .borrow(dai.address, utils.parseEther('2'), RateMode.Stable, 0, user1.address) + ); + + // Turn on automining, but not mine a new block until next tx + await setAutomineEvm(true); + + expect( + await pool + .connect(user1.signer) + .repay(dai.address, utils.parseEther('2'), RateMode.Stable, user1.address) + ); + + expect(await stableDebtToken.balanceOf(user1.address)).to.be.eq(0); + expect(await dai.balanceOf(user2.address)).to.be.eq(utils.parseEther('2')); + expect(await dai.balanceOf(aDai.address)).to.be.eq(utils.parseEther('1000')); + + const userDataAfter = await pool.getUserAccountData(user1.address); + expect(userDataBefore.totalCollateralBase).to.be.lte(userDataAfter.totalCollateralBase); + expect(userDataBefore.healthFactor).to.be.lte(userDataAfter.healthFactor); + expect(userDataBefore.totalDebtBase).to.be.eq(userDataAfter.totalDebtBase); + }); }); diff --git a/test-suites/validation-logic.spec.ts b/test-suites/validation-logic.spec.ts index 3bcbffc12..017e0c5ce 100644 --- a/test-suites/validation-logic.spec.ts +++ b/test-suites/validation-logic.spec.ts @@ -1,14 +1,14 @@ -import { expect } from 'chai'; -import { utils, constants } from 'ethers'; -import { parseUnits } from '@ethersproject/units'; -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { MAX_UINT_AMOUNT } from '../helpers/constants'; -import { RateMode, ProtocolErrors } from '../helpers/types'; -import { impersonateAccountsHardhat, setAutomine, setAutomineEvm } from '../helpers/misc-utils'; -import { makeSuite, TestEnv } from './helpers/make-suite'; -import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; -import { waitForTx, evmSnapshot, evmRevert, getVariableDebtToken } from '@aave/deploy-v3'; -import { topUpNonPayableWithEther } from './helpers/utils/funds'; +import {expect} from 'chai'; +import {utils, constants} from 'ethers'; +import {parseUnits} from '@ethersproject/units'; +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import {MAX_UINT_AMOUNT} from '../helpers/constants'; +import {RateMode, ProtocolErrors} from '../helpers/types'; +import {impersonateAccountsHardhat} from '../helpers/misc-utils'; +import {makeSuite, TestEnv} from './helpers/make-suite'; +import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; +import {waitForTx, evmSnapshot, evmRevert} from '@aave/deploy-v3'; +import {topUpNonPayableWithEther} from './helpers/utils/funds'; declare var hre: HardhatRuntimeEnvironment; @@ -23,7 +23,6 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { COLLATERAL_SAME_AS_BORROWING_CURRENCY, AMOUNT_BIGGER_THAN_MAX_LOAN_SIZE_STABLE, NO_DEBT_OF_SELECTED_TYPE, - SAME_BLOCK_BORROW_REPAY, HEALTH_FACTOR_NOT_BELOW_THRESHOLD, INVALID_INTEREST_RATE_MODE_SELECTED, UNDERLYING_BALANCE_ZERO, @@ -35,13 +34,13 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { let snap: string; before(async () => { - const { addressesProvider, oracle } = testEnv; + const {addressesProvider, oracle} = testEnv; await waitForTx(await addressesProvider.setPriceOracle(oracle.address)); }); after(async () => { - const { aaveOracle, addressesProvider } = testEnv; + const {aaveOracle, addressesProvider} = testEnv; await waitForTx(await addressesProvider.setPriceOracle(aaveOracle.address)); }); @@ -53,7 +52,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { }); it('validateDeposit() when reserve is not active (revert expected)', async () => { - const { pool, poolAdmin, configurator, helpersContract, users, dai } = testEnv; + const {pool, poolAdmin, configurator, helpersContract, users, dai} = testEnv; const user = users[0]; const configBefore = await helpersContract.getReserveConfigurationData(dai.address); @@ -74,7 +73,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { }); it('validateDeposit() when reserve is frozen (revert expected)', async () => { - const { pool, poolAdmin, configurator, helpersContract, users, dai } = testEnv; + const {pool, poolAdmin, configurator, helpersContract, users, dai} = testEnv; const user = users[0]; const configBefore = await helpersContract.getReserveConfigurationData(dai.address); @@ -101,7 +100,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { * If deposited normally it is not possible for us deactivate. */ - const { pool, poolAdmin, configurator, helpersContract, users, dai, aDai, usdc } = testEnv; + const {pool, poolAdmin, configurator, helpersContract, users, dai, aDai, usdc} = testEnv; const user = users[0]; await usdc.connect(user.signer)['mint(uint256)'](utils.parseEther('10000')); @@ -132,7 +131,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { }); it('validateBorrow() when reserve is frozen (revert expected)', async () => { - const { pool, poolAdmin, configurator, helpersContract, users, dai, usdc } = testEnv; + const {pool, poolAdmin, configurator, helpersContract, users, dai, usdc} = testEnv; const user = users[0]; await dai.connect(user.signer)['mint(uint256)'](utils.parseEther('1000')); @@ -163,7 +162,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { }); it('validateBorrow() when amount == 0 (revert expected)', async () => { - const { pool, users, dai } = testEnv; + const {pool, users, dai} = testEnv; const user = users[0]; await expect( @@ -172,7 +171,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { }); it('validateBorrow() when borrowing is not enabled (revert expected)', async () => { - const { pool, poolAdmin, configurator, helpersContract, users, dai, usdc } = testEnv; + const {pool, poolAdmin, configurator, helpersContract, users, dai, usdc} = testEnv; const user = users[0]; await dai.connect(user.signer)['mint(uint256)'](utils.parseEther('1000')); @@ -203,7 +202,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { }); it('validateBorrow() when stableRateBorrowing is not enabled', async () => { - const { pool, poolAdmin, configurator, helpersContract, users, dai, aDai, usdc } = testEnv; + const {pool, poolAdmin, configurator, helpersContract, users, dai, aDai, usdc} = testEnv; const user = users[0]; await dai.connect(user.signer)['mint(uint256)'](utils.parseEther('1000')); @@ -227,7 +226,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { }); it('validateBorrow() borrowing when user has already a HF < threshold', async () => { - const { pool, users, dai, usdc, oracle } = testEnv; + const {pool, users, dai, usdc, oracle} = testEnv; const user = users[0]; const depositor = users[1]; @@ -290,7 +289,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { // ltv != 0 // amount < aToken Balance - const { pool, users, dai, aDai, usdc } = testEnv; + const {pool, users, dai, aDai, usdc} = testEnv; const user = users[0]; await dai.connect(user.signer)['mint(uint256)'](utils.parseEther('2000')); @@ -312,7 +311,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { }); it('validateBorrow() stable borrowing when amount > maxLoanSizeStable (revert expected)', async () => { - const { pool, users, dai, aDai, usdc } = testEnv; + const {pool, users, dai, aDai, usdc} = testEnv; const user = users[0]; await dai.connect(user.signer)['mint(uint256)'](utils.parseEther('2000')); @@ -335,7 +334,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { it('validateLiquidationCall() when healthFactor > threshold (revert expected)', async () => { // Liquidation something that is not liquidatable - const { pool, users, dai, usdc } = testEnv; + const {pool, users, dai, usdc} = testEnv; const depositor = users[0]; const borrower = users[1]; @@ -384,7 +383,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { it('validateRepay() when reserve is not active (revert expected)', async () => { // Unsure how we can end in this scenario. Would require that it could be deactivated after someone have borrowed - const { pool, users, dai, helpersContract, configurator, poolAdmin } = testEnv; + const {pool, users, dai, helpersContract, configurator, poolAdmin} = testEnv; const user = users[0]; const configBefore = await helpersContract.getReserveConfigurationData(dai.address); @@ -404,137 +403,11 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { ).to.be.revertedWith(RESERVE_INACTIVE); }); - it('validateRepay() when variable borrowing and repaying in same block (revert expected)', async () => { - // Same block repay - - const { pool, users, dai, aDai, usdc } = testEnv; - const user = users[0]; - - // We need some debt. - await usdc.connect(user.signer)['mint(uint256)'](utils.parseEther('2000')); - await usdc.connect(user.signer).approve(pool.address, MAX_UINT_AMOUNT); - await pool - .connect(user.signer) - .deposit(usdc.address, utils.parseEther('2000'), user.address, 0); - await dai.connect(user.signer)['mint(uint256)'](utils.parseEther('2000')); - await dai.connect(user.signer).transfer(aDai.address, utils.parseEther('2000')); - - // Turn off automining - pretty sure that coverage is getting messed up here. - await setAutomine(false); - - // Borrow 500 dai - await pool - .connect(user.signer) - .borrow(dai.address, utils.parseEther('500'), RateMode.Variable, 0, user.address); - - // Turn on automining, but not mine a new block until next tx - await setAutomineEvm(true); - - await expect( - pool - .connect(user.signer) - .repay(dai.address, utils.parseEther('500'), RateMode.Variable, user.address) - ).to.be.revertedWith(SAME_BLOCK_BORROW_REPAY); - }); - - it('validateRepay() when variable borrowing and repaying in same block using credit delegation (revert expected)', async () => { - const { - pool, - dai, - weth, - users: [user1, user2, user3], - } = testEnv; - - // Add liquidity - await dai.connect(user3.signer)['mint(uint256)'](utils.parseUnits('1000', 18)); - await dai.connect(user3.signer).approve(pool.address, MAX_UINT_AMOUNT); - await pool - .connect(user3.signer) - .supply(dai.address, utils.parseUnits('1000', 18), user3.address, 0); - - // User1 supplies 10 WETH - await dai.connect(user1.signer)['mint(uint256)'](utils.parseUnits('100', 18)); - await dai.connect(user1.signer).approve(pool.address, MAX_UINT_AMOUNT); - await weth.connect(user1.signer)['mint(uint256)'](utils.parseUnits('10', 18)); - await weth.connect(user1.signer).approve(pool.address, MAX_UINT_AMOUNT); - await pool - .connect(user1.signer) - .supply(weth.address, utils.parseUnits('10', 18), user1.address, 0); - - const daiData = await pool.getReserveData(dai.address); - const variableDebtToken = await getVariableDebtToken(daiData.variableDebtTokenAddress); - - // User1 approves User2 to borrow 1000 DAI - expect( - await variableDebtToken - .connect(user1.signer) - .approveDelegation(user2.address, utils.parseUnits('1000', 18)) - ); - - // User2 borrows on behalf of User1 - const borrowOnBehalfAmount = utils.parseUnits('100', 18); - expect( - await pool - .connect(user2.signer) - .borrow(dai.address, borrowOnBehalfAmount, RateMode.Variable, 0, user1.address) - ); - - // Turn off automining to simulate actions in same block - await setAutomine(false); - - // User2 borrows 2 DAI on behalf of User1 - await pool - .connect(user2.signer) - .borrow(dai.address, utils.parseEther('2'), RateMode.Variable, 0, user1.address); - - // Turn on automining, but not mine a new block until next tx - await setAutomineEvm(true); - - await expect( - pool - .connect(user1.signer) - .repay(dai.address, utils.parseEther('2'), RateMode.Variable, user1.address) - ).to.be.revertedWith(SAME_BLOCK_BORROW_REPAY); - }); - - it('validateRepay() when stable borrowing and repaying in same block (revert expected)', async () => { - // Same block repay - - const { pool, users, dai, aDai, usdc } = testEnv; - const user = users[0]; - - // We need some debt. - await usdc.connect(user.signer)['mint(uint256)'](utils.parseEther('2000')); - await usdc.connect(user.signer).approve(pool.address, MAX_UINT_AMOUNT); - await pool - .connect(user.signer) - .deposit(usdc.address, utils.parseEther('2000'), user.address, 0); - await dai.connect(user.signer)['mint(uint256)'](utils.parseEther('2000')); - await dai.connect(user.signer).transfer(aDai.address, utils.parseEther('2000')); - - // Turn off automining - pretty sure that coverage is getting messed up here. - await setAutomine(false); - - // Borrow 500 dai - await pool - .connect(user.signer) - .borrow(dai.address, utils.parseEther('500'), RateMode.Stable, 0, user.address); - - // Turn on automining, but not mine a new block until next tx - await setAutomineEvm(true); - - await expect( - pool - .connect(user.signer) - .repay(dai.address, utils.parseEther('500'), RateMode.Stable, user.address) - ).to.be.revertedWith(SAME_BLOCK_BORROW_REPAY); - }); - it('validateRepay() the variable debt when is 0 (stableDebt > 0) (revert expected)', async () => { // (stableDebt > 0 && DataTypes.InterestRateMode(rateMode) == DataTypes.InterestRateMode.STABLE) || // (variableDebt > 0 && DataTypes.InterestRateMode(rateMode) == DataTypes.InterestRateMode.VARIABLE), - const { pool, users, dai, aDai, usdc } = testEnv; + const {pool, users, dai, aDai, usdc} = testEnv; const user = users[0]; // We need some debt @@ -561,7 +434,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { // (stableDebt > 0 && DataTypes.InterestRateMode(rateMode) == DataTypes.InterestRateMode.STABLE) || // (variableDebt > 0 && DataTypes.InterestRateMode(rateMode) == DataTypes.InterestRateMode.VARIABLE), - const { pool, users, dai } = testEnv; + const {pool, users, dai} = testEnv; const user = users[0]; // We need some debt @@ -582,7 +455,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { it('validateSwapRateMode() when reserve is not active', async () => { // Not clear when this would be useful in practice, as you should not be able to have debt if it is deactivated - const { pool, poolAdmin, configurator, helpersContract, users, dai, aDai } = testEnv; + const {pool, poolAdmin, configurator, helpersContract, users, dai, aDai} = testEnv; const user = users[0]; const configBefore = await helpersContract.getReserveConfigurationData(dai.address); @@ -608,7 +481,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { it('validateSwapRateMode() when reserve is frozen', async () => { // Not clear when this would be useful in practice, as you should not be able to have debt if it is deactivated - const { pool, poolAdmin, configurator, helpersContract, users, dai } = testEnv; + const {pool, poolAdmin, configurator, helpersContract, users, dai} = testEnv; const user = users[0]; const configBefore = await helpersContract.getReserveConfigurationData(dai.address); @@ -633,7 +506,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { }); it('validateSwapRateMode() with currentRateMode not equal to stable or variable, (revert expected)', async () => { - const { pool, helpersContract, users, dai } = testEnv; + const {pool, helpersContract, users, dai} = testEnv; const user = users[0]; const configBefore = await helpersContract.getReserveConfigurationData(dai.address); @@ -646,7 +519,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { }); it('validateSwapRateMode() from variable to stable with stableBorrowing disabled (revert expected)', async () => { - const { pool, poolAdmin, configurator, helpersContract, users, dai } = testEnv; + const {pool, poolAdmin, configurator, helpersContract, users, dai} = testEnv; const user = users[0]; await dai.connect(user.signer)['mint(uint256)'](utils.parseEther('1000')); @@ -693,7 +566,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { // ltv != 0 // stableDebt + variableDebt < aToken - const { pool, users, dai, aDai, usdc } = testEnv; + const {pool, users, dai, aDai, usdc} = testEnv; const user = users[0]; await dai.connect(user.signer)['mint(uint256)'](utils.parseEther('2000')); @@ -717,7 +590,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { }); it('validateRebalanceStableBorrowRate() when reserve is not active (revert expected)', async () => { - const { pool, configurator, helpersContract, poolAdmin, users, dai } = testEnv; + const {pool, configurator, helpersContract, poolAdmin, users, dai} = testEnv; const user = users[0]; const configBefore = await helpersContract.getReserveConfigurationData(dai.address); @@ -741,7 +614,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { * aToken balance (aDAI) its not technically possible to end up in this situation. * However, we impersonate the Pool to get some aDAI and make the test possible */ - const { pool, configurator, helpersContract, poolAdmin, users, dai, aDai } = testEnv; + const {pool, configurator, helpersContract, poolAdmin, users, dai, aDai} = testEnv; const user = users[0]; const configBefore = await helpersContract.getReserveConfigurationData(dai.address); @@ -769,7 +642,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { }); it('validateSetUseReserveAsCollateral() with userBalance == 0 (revert expected)', async () => { - const { pool, users, dai } = testEnv; + const {pool, users, dai} = testEnv; const user = users[0]; await expect( @@ -782,7 +655,7 @@ makeSuite('ValidationLogic: Edge cases', (testEnv: TestEnv) => { }); it('validateFlashloan() with inconsistent params (revert expected)', async () => { - const { pool, users, dai, aDai, usdc } = testEnv; + const {pool, users, dai, aDai, usdc} = testEnv; const user = users[0]; await expect( diff --git a/test-suites/variable-debt-token.spec.ts b/test-suites/variable-debt-token.spec.ts index 444a0de92..9f9029a36 100644 --- a/test-suites/variable-debt-token.spec.ts +++ b/test-suites/variable-debt-token.spec.ts @@ -1,24 +1,39 @@ -import { expect } from 'chai'; -import { utils } from 'ethers'; -import { impersonateAccountsHardhat } from '../helpers/misc-utils'; -import { MAX_UINT_AMOUNT, ZERO_ADDRESS } from '../helpers/constants'; -import { ProtocolErrors, RateMode } from '../helpers/types'; -import { makeSuite, TestEnv } from './helpers/make-suite'; -import { topUpNonPayableWithEther } from './helpers/utils/funds'; -import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { evmRevert, evmSnapshot, increaseTime, waitForTx } from '@aave/deploy-v3'; -import { VariableDebtToken__factory } from '../types'; +import {expect} from 'chai'; +import {utils} from 'ethers'; +import {impersonateAccountsHardhat, setAutomine, setAutomineEvm} from '../helpers/misc-utils'; +import {MAX_UINT_AMOUNT, ZERO_ADDRESS} from '../helpers/constants'; +import {ProtocolErrors, RateMode} from '../helpers/types'; +import {makeSuite, TestEnv} from './helpers/make-suite'; +import {topUpNonPayableWithEther} from './helpers/utils/funds'; +import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import { + evmRevert, + evmSnapshot, + getVariableDebtToken, + increaseTime, + waitForTx, +} from '@aave/deploy-v3'; +import {VariableDebtToken__factory} from '../types'; import './helpers/utils/wadraymath'; declare var hre: HardhatRuntimeEnvironment; makeSuite('VariableDebtToken', (testEnv: TestEnv) => { - const { CALLER_MUST_BE_POOL, INVALID_MINT_AMOUNT, INVALID_BURN_AMOUNT, CALLER_NOT_POOL_ADMIN } = + const {CALLER_MUST_BE_POOL, INVALID_MINT_AMOUNT, INVALID_BURN_AMOUNT, CALLER_NOT_POOL_ADMIN} = ProtocolErrors; + let snap: string; + + beforeEach(async () => { + snap = await evmSnapshot(); + }); + afterEach(async () => { + await evmRevert(snap); + }); + it('Check initialization', async () => { - const { pool, weth, dai, helpersContract, users } = testEnv; + const {pool, weth, dai, helpersContract, users} = testEnv; const daiVariableDebtTokenAddress = ( await helpersContract.getReserveTokensAddresses(dai.address) ).variableDebtTokenAddress; @@ -81,7 +96,7 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { }); it('Tries to mint not being the Pool (revert expected)', async () => { - const { deployer, dai, helpersContract } = testEnv; + const {deployer, dai, helpersContract} = testEnv; const daiVariableDebtTokenAddress = ( await helpersContract.getReserveTokensAddresses(dai.address) @@ -98,7 +113,7 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { }); it('Tries to burn not being the Pool (revert expected)', async () => { - const { deployer, dai, helpersContract } = testEnv; + const {deployer, dai, helpersContract} = testEnv; const daiVariableDebtTokenAddress = ( await helpersContract.getReserveTokensAddresses(dai.address) @@ -115,7 +130,7 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { }); it('Tries to mint with amountScaled == 0 (revert expected)', async () => { - const { deployer, pool, dai, helpersContract, users } = testEnv; + const {deployer, pool, dai, helpersContract, users} = testEnv; // Impersonate the Pool await topUpNonPayableWithEther(deployer.signer, [pool.address], utils.parseEther('1')); @@ -139,7 +154,7 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { }); it('Tries to burn with amountScaled == 0 (revert expected)', async () => { - const { deployer, pool, dai, helpersContract, users } = testEnv; + const {deployer, pool, dai, helpersContract, users} = testEnv; // Impersonate the Pool await topUpNonPayableWithEther(deployer.signer, [pool.address], utils.parseEther('1')); @@ -161,7 +176,7 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { }); it('Tries to transfer debt tokens (revert expected)', async () => { - const { users, dai, helpersContract } = testEnv; + const {users, dai, helpersContract} = testEnv; const daiVariableDebtTokenAddress = ( await helpersContract.getReserveTokensAddresses(dai.address) ).variableDebtTokenAddress; @@ -176,7 +191,7 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { }); it('Tries to approve debt tokens (revert expected)', async () => { - const { users, dai, helpersContract } = testEnv; + const {users, dai, helpersContract} = testEnv; const daiVariableDebtTokenAddress = ( await helpersContract.getReserveTokensAddresses(dai.address) ).variableDebtTokenAddress; @@ -194,7 +209,7 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { }); it('Tries to increaseAllowance (revert expected)', async () => { - const { users, dai, helpersContract } = testEnv; + const {users, dai, helpersContract} = testEnv; const daiVariableDebtTokenAddress = ( await helpersContract.getReserveTokensAddresses(dai.address) ).variableDebtTokenAddress; @@ -209,7 +224,7 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { }); it('Tries to decreaseAllowance (revert expected)', async () => { - const { users, dai, helpersContract } = testEnv; + const {users, dai, helpersContract} = testEnv; const daiVariableDebtTokenAddress = ( await helpersContract.getReserveTokensAddresses(dai.address) ).variableDebtTokenAddress; @@ -224,7 +239,7 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { }); it('Tries to transferFrom debt tokens (revert expected)', async () => { - const { users, dai, helpersContract } = testEnv; + const {users, dai, helpersContract} = testEnv; const daiVariableDebtTokenAddress = ( await helpersContract.getReserveTokensAddresses(dai.address) ).variableDebtTokenAddress; @@ -241,8 +256,7 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { }); it('setIncentivesController() ', async () => { - const snapshot = await evmSnapshot(); - const { dai, helpersContract, poolAdmin, aclManager, deployer } = testEnv; + const {dai, helpersContract, poolAdmin, aclManager, deployer} = testEnv; const daiVariableDebtTokenAddress = ( await helpersContract.getReserveTokensAddresses(dai.address) ).variableDebtTokenAddress; @@ -258,8 +272,6 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { await variableDebtContract.connect(poolAdmin.signer).setIncentivesController(ZERO_ADDRESS) ); expect(await variableDebtContract.getIncentivesController()).to.be.eq(ZERO_ADDRESS); - - await evmRevert(snapshot); }); it('setIncentivesController() from not pool admin (revert expected)', async () => { @@ -357,8 +369,7 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { ); const rawTransferEvents = tx.logs.filter( - ({ topics, address }) => - topics[0] === transferEventSig && address == variableDebtToken.address + ({topics, address}) => topics[0] === transferEventSig && address == variableDebtToken.address ); const parsedTransferEvent = variableDebtToken.interface.parseLog(rawTransferEvents[0]); const transferAmount = parsedTransferEvent.args.value; @@ -369,7 +380,7 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { utils.toUtf8Bytes('Mint(address,address,uint256,uint256,uint256)') ); const rawMintEvents = tx.logs.filter( - ({ topics, address }) => topics[0] === mintEventSig && address == variableDebtToken.address + ({topics, address}) => topics[0] === mintEventSig && address == variableDebtToken.address ); const parsedMintEvent = variableDebtToken.interface.parseLog(rawMintEvents[0]); @@ -377,4 +388,174 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { expect(parsedMintEvent.args.value).to.be.closeTo(borrowOnBehalfAmount.add(interest), 2); expect(parsedMintEvent.args.balanceIncrease).to.be.closeTo(interest, 2); }); + + it('User borrows and repays in same block with zero fees', async () => { + const {pool, users, dai, aDai, usdc, variableDebtDai} = testEnv; + const user = users[0]; + + // We need some debt. + await usdc.connect(user.signer)['mint(uint256)'](utils.parseEther('2000')); + await usdc.connect(user.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(user.signer) + .deposit(usdc.address, utils.parseEther('2000'), user.address, 0); + await dai.connect(user.signer)['mint(uint256)'](utils.parseEther('2000')); + await dai.connect(user.signer).transfer(aDai.address, utils.parseEther('2000')); + await dai.connect(user.signer).approve(pool.address, MAX_UINT_AMOUNT); + + const userDataBefore = await pool.getUserAccountData(user.address); + expect(await variableDebtDai.balanceOf(user.address)).to.be.eq(0); + + // Turn off automining - pretty sure that coverage is getting messed up here. + await setAutomine(false); + // Borrow 500 dai + await pool + .connect(user.signer) + .borrow(dai.address, utils.parseEther('500'), RateMode.Variable, 0, user.address); + + // Turn on automining, but not mine a new block until next tx + await setAutomineEvm(true); + expect( + await pool + .connect(user.signer) + .repay(dai.address, utils.parseEther('500'), RateMode.Variable, user.address) + ); + + expect(await variableDebtDai.balanceOf(user.address)).to.be.eq(0); + expect(await dai.balanceOf(user.address)).to.be.eq(0); + expect(await dai.balanceOf(aDai.address)).to.be.eq(utils.parseEther('2000')); + + const userDataAfter = await pool.getUserAccountData(user.address); + expect(userDataBefore.totalCollateralBase).to.be.lte(userDataAfter.totalCollateralBase); + expect(userDataBefore.healthFactor).to.be.lte(userDataAfter.healthFactor); + expect(userDataBefore.totalDebtBase).to.be.eq(userDataAfter.totalDebtBase); + }); + + it('User borrows and repays in same block using credit delegation with zero fees', async () => { + const { + pool, + dai, + aDai, + weth, + users: [user1, user2, user3], + } = testEnv; + + // Add liquidity + await dai.connect(user3.signer)['mint(uint256)'](utils.parseUnits('1000', 18)); + await dai.connect(user3.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(user3.signer) + .supply(dai.address, utils.parseUnits('1000', 18), user3.address, 0); + + // User1 supplies 10 WETH + await dai.connect(user1.signer)['mint(uint256)'](utils.parseUnits('100', 18)); + await dai.connect(user1.signer).approve(pool.address, MAX_UINT_AMOUNT); + await weth.connect(user1.signer)['mint(uint256)'](utils.parseUnits('10', 18)); + await weth.connect(user1.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(user1.signer) + .supply(weth.address, utils.parseUnits('10', 18), user1.address, 0); + + const daiData = await pool.getReserveData(dai.address); + const variableDebtToken = await getVariableDebtToken(daiData.variableDebtTokenAddress); + + // User1 approves User2 to borrow 1000 DAI + expect( + await variableDebtToken + .connect(user1.signer) + .approveDelegation(user2.address, utils.parseUnits('1000', 18)) + ); + + const userDataBefore = await pool.getUserAccountData(user1.address); + + // Turn off automining to simulate actions in same block + await setAutomine(false); + + // User2 borrows 2 DAI on behalf of User1 + await pool + .connect(user2.signer) + .borrow(dai.address, utils.parseEther('2'), RateMode.Variable, 0, user1.address); + + // Turn on automining, but not mine a new block until next tx + await setAutomineEvm(true); + + expect( + await pool + .connect(user1.signer) + .repay(dai.address, utils.parseEther('2'), RateMode.Variable, user1.address) + ); + + expect(await variableDebtToken.balanceOf(user1.address)).to.be.eq(0); + expect(await dai.balanceOf(user2.address)).to.be.eq(utils.parseEther('2')); + expect(await dai.balanceOf(aDai.address)).to.be.eq(utils.parseEther('1000')); + + const userDataAfter = await pool.getUserAccountData(user1.address); + expect(userDataBefore.totalCollateralBase).to.be.lte(userDataAfter.totalCollateralBase); + expect(userDataBefore.healthFactor).to.be.lte(userDataAfter.healthFactor); + expect(userDataBefore.totalDebtBase).to.be.eq(userDataAfter.totalDebtBase); + }); + + it('User borrows and repays in same block using credit delegation with zero fees', async () => { + const { + pool, + dai, + aDai, + weth, + users: [user1, user2, user3], + } = testEnv; + + // Add liquidity + await dai.connect(user3.signer)['mint(uint256)'](utils.parseUnits('1000', 18)); + await dai.connect(user3.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(user3.signer) + .supply(dai.address, utils.parseUnits('1000', 18), user3.address, 0); + + // User1 supplies 10 WETH + await dai.connect(user1.signer)['mint(uint256)'](utils.parseUnits('100', 18)); + await dai.connect(user1.signer).approve(pool.address, MAX_UINT_AMOUNT); + await weth.connect(user1.signer)['mint(uint256)'](utils.parseUnits('10', 18)); + await weth.connect(user1.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(user1.signer) + .supply(weth.address, utils.parseUnits('10', 18), user1.address, 0); + + const daiData = await pool.getReserveData(dai.address); + const variableDebtToken = await getVariableDebtToken(daiData.variableDebtTokenAddress); + + // User1 approves User2 to borrow 1000 DAI + expect( + await variableDebtToken + .connect(user1.signer) + .approveDelegation(user2.address, utils.parseUnits('1000', 18)) + ); + + const userDataBefore = await pool.getUserAccountData(user1.address); + + // Turn off automining to simulate actions in same block + await setAutomine(false); + + // User2 borrows 2 DAI on behalf of User1 + await pool + .connect(user2.signer) + .borrow(dai.address, utils.parseEther('2'), RateMode.Variable, 0, user1.address); + + // Turn on automining, but not mine a new block until next tx + await setAutomineEvm(true); + + expect( + await pool + .connect(user1.signer) + .repay(dai.address, utils.parseEther('2'), RateMode.Variable, user1.address) + ); + + expect(await variableDebtToken.balanceOf(user1.address)).to.be.eq(0); + expect(await dai.balanceOf(user2.address)).to.be.eq(utils.parseEther('2')); + expect(await dai.balanceOf(aDai.address)).to.be.eq(utils.parseEther('1000')); + + const userDataAfter = await pool.getUserAccountData(user1.address); + expect(userDataBefore.totalCollateralBase).to.be.lte(userDataAfter.totalCollateralBase); + expect(userDataBefore.healthFactor).to.be.lte(userDataAfter.healthFactor); + expect(userDataBefore.totalDebtBase).to.be.eq(userDataAfter.totalDebtBase); + }); }); From ddbf22b42b02b7fe8885abe996ac53ed1e636ae1 Mon Sep 17 00:00:00 2001 From: eboado Date: Mon, 31 Oct 2022 18:14:29 +0100 Subject: [PATCH 34/87] WIP Fix of 100% RF for #718 - Test on pool-simple-flashloan failing --- .../protocol/libraries/logic/ReserveLogic.sol | 39 +-- test-suites/pool-edge.spec.ts | 222 +++++++++++++++--- 2 files changed, 215 insertions(+), 46 deletions(-) diff --git a/contracts/protocol/libraries/logic/ReserveLogic.sol b/contracts/protocol/libraries/logic/ReserveLogic.sol index a946c3813..6a683147f 100644 --- a/contracts/protocol/libraries/logic/ReserveLogic.sol +++ b/contracts/protocol/libraries/logic/ReserveLogic.sol @@ -98,6 +98,12 @@ library ReserveLogic { DataTypes.ReserveData storage reserve, DataTypes.ReserveCache memory reserveCache ) internal { + // If time didn't pass since last stored timestamp, skip state update + //solium-disable-next-line + if (reserveCache.reserveLastUpdateTimestamp == uint40(block.timestamp)) { + return; + } + _updateIndexes(reserve, reserveCache); _accrueToTreasury(reserve, reserveCache); } @@ -286,7 +292,9 @@ library ReserveLogic { reserveCache.nextLiquidityIndex = reserveCache.currLiquidityIndex; reserveCache.nextVariableBorrowIndex = reserveCache.currVariableBorrowIndex; - //only cumulating if there is any income being produced + // Only cumulating on the supply side if there is any income being produced + // The case of Reserve Factor 100% is not a problem (currentLiquidityRate == 0), + // as liquidity index should not be updated if (reserveCache.currLiquidityRate != 0) { uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest( reserveCache.currLiquidityRate, @@ -296,19 +304,18 @@ library ReserveLogic { reserveCache.currLiquidityIndex ); reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128(); + } - //as the liquidity rate might come only from stable rate loans, we need to ensure - //that there is actual variable debt before accumulating - if (reserveCache.currScaledVariableDebt != 0) { - uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest( - reserveCache.currVariableBorrowRate, - reserveCache.reserveLastUpdateTimestamp - ); - reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul( - reserveCache.currVariableBorrowIndex - ); - reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128(); - } + // Variable borrow side only gets updated if there is any accrual of variable debt + if (reserveCache.currScaledVariableDebt != 0) { + uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest( + reserveCache.currVariableBorrowRate, + reserveCache.reserveLastUpdateTimestamp + ); + reserveCache.nextVariableBorrowIndex = cumulatedVariableBorrowInterest.rayMul( + reserveCache.currVariableBorrowIndex + ); + reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128(); } //solium-disable-next-line @@ -342,8 +349,10 @@ library ReserveLogic { reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp; reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken( - reserveCache.variableDebtTokenAddress - ).scaledTotalSupply(); + reserveCache + .variableDebtTokenAddress + ) + .scaledTotalSupply(); ( reserveCache.currPrincipalStableDebt, diff --git a/test-suites/pool-edge.spec.ts b/test-suites/pool-edge.spec.ts index d2c18be5e..ddc05c8f8 100644 --- a/test-suites/pool-edge.spec.ts +++ b/test-suites/pool-edge.spec.ts @@ -1,14 +1,14 @@ -import { expect } from 'chai'; -import { BigNumber, BigNumberish, utils } from 'ethers'; -import { impersonateAccountsHardhat } from '../helpers/misc-utils'; -import { MAX_UINT_AMOUNT, ZERO_ADDRESS } from '../helpers/constants'; -import { deployMintableERC20 } from '@aave/deploy-v3/dist/helpers/contract-deployments'; -import { ProtocolErrors } from '../helpers/types'; -import { getFirstSigner } from '@aave/deploy-v3/dist/helpers/utilities/signer'; -import { topUpNonPayableWithEther } from './helpers/utils/funds'; -import { makeSuite, TestEnv } from './helpers/make-suite'; -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { evmSnapshot, evmRevert, getPoolLibraries } from '@aave/deploy-v3'; +import {expect} from 'chai'; +import {BigNumber, BigNumberish, utils} from 'ethers'; +import {impersonateAccountsHardhat} from '../helpers/misc-utils'; +import {MAX_UINT_AMOUNT, ZERO_ADDRESS} from '../helpers/constants'; +import {deployMintableERC20} from '@aave/deploy-v3/dist/helpers/contract-deployments'; +import {ProtocolErrors, RateMode} from '../helpers/types'; +import {getFirstSigner} from '@aave/deploy-v3/dist/helpers/utilities/signer'; +import {topUpNonPayableWithEther} from './helpers/utils/funds'; +import {makeSuite, TestEnv} from './helpers/make-suite'; +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import {evmSnapshot, evmRevert, getPoolLibraries, advanceTimeAndBlock} from '@aave/deploy-v3'; import { MockPoolInherited__factory, MockReserveInterestRateStrategy__factory, @@ -19,10 +19,64 @@ import { InitializableImmutableAdminUpgradeabilityProxy, ERC20__factory, } from '../types'; -import { getProxyImplementation } from '../helpers/contracts-helpers'; +import {convertToCurrencyDecimals, getProxyImplementation} from '../helpers/contracts-helpers'; declare var hre: HardhatRuntimeEnvironment; +// Setup function to have 1 user with DAI deposits, and another user with WETH collateral +// and DAI borrowings at an indicated borrowing mode +const setupPositions = async (testEnv: TestEnv, borrowingMode: RateMode) => { + const { + pool, + dai, + weth, + oracle, + users: [depositor, borrower], + } = testEnv; + + // mints DAI to depositor + await dai + .connect(depositor.signer) + ['mint(uint256)'](await convertToCurrencyDecimals(dai.address, '20000')); + + // approve protocol to access depositor wallet + await dai.connect(depositor.signer).approve(pool.address, MAX_UINT_AMOUNT); + + // user 1 deposits 1000 DAI + const amountDAItoDeposit = await convertToCurrencyDecimals(dai.address, '10000'); + + await pool + .connect(depositor.signer) + .deposit(dai.address, amountDAItoDeposit, depositor.address, '0'); + // user 2 deposits 1 ETH + const amountETHtoDeposit = await convertToCurrencyDecimals(weth.address, '1'); + + // mints WETH to borrower + await weth + .connect(borrower.signer) + ['mint(uint256)'](await convertToCurrencyDecimals(weth.address, '1000')); + + // approve protocol to access the borrower wallet + await weth.connect(borrower.signer).approve(pool.address, MAX_UINT_AMOUNT); + + await pool + .connect(borrower.signer) + .deposit(weth.address, amountETHtoDeposit, borrower.address, '0'); + + //user 2 borrows + + const userGlobalData = await pool.getUserAccountData(borrower.address); + const daiPrice = await oracle.getAssetPrice(dai.address); + + const amountDAIToBorrow = await convertToCurrencyDecimals( + dai.address, + userGlobalData.availableBorrowsBase.div(daiPrice).mul(5000).div(10000).toString() + ); + await pool + .connect(borrower.signer) + .borrow(dai.address, amountDAIToBorrow, borrowingMode, '0', borrower.address); +}; + makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { const { NO_MORE_RESERVES_ALLOWED, @@ -59,7 +113,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { dai, users: [user0], } = testEnv; - const { deployer: deployerName } = await hre.getNamedAccounts(); + const {deployer: deployerName} = await hre.getNamedAccounts(); // Deploy the mock Pool with a `dropReserve` skipping the checks const NEW_POOL_IMPL_ARTIFACT = await hre.deployments.deploy('MockPoolInheritedDropper', { @@ -129,7 +183,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { addressesProvider, users: [deployer], } = testEnv; - const { deployer: deployerName } = await hre.getNamedAccounts(); + const {deployer: deployerName} = await hre.getNamedAccounts(); const NEW_POOL_IMPL_ARTIFACT = await hre.deployments.deploy('Pool', { contract: 'Pool', @@ -155,7 +209,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Check initialization', async () => { - const { pool } = testEnv; + const {pool} = testEnv; expect(await pool.MAX_STABLE_RATE_BORROW_SIZE_PERCENT()).to.be.eq( MAX_STABLE_RATE_BORROW_SIZE_PERCENT @@ -164,7 +218,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Tries to initialize a reserve as non PoolConfigurator (revert expected)', async () => { - const { pool, users, dai, helpersContract } = testEnv; + const {pool, users, dai, helpersContract} = testEnv; const config = await helpersContract.getReserveTokensAddresses(dai.address); @@ -249,7 +303,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Call `mintToTreasury()` on a pool with an inactive reserve', async () => { - const { pool, poolAdmin, dai, users, configurator } = testEnv; + const {pool, poolAdmin, dai, users, configurator} = testEnv; // Deactivate reserve expect(await configurator.connect(poolAdmin.signer).setReserveActive(dai.address, false)); @@ -259,7 +313,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Tries to call `finalizeTransfer()` by a non-aToken address (revert expected)', async () => { - const { pool, dai, users } = testEnv; + const {pool, dai, users} = testEnv; await expect( pool @@ -269,7 +323,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Tries to call `initReserve()` with an EOA as reserve (revert expected)', async () => { - const { pool, deployer, users, configurator } = testEnv; + const {pool, deployer, users, configurator} = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -284,7 +338,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('PoolConfigurator updates the ReserveInterestRateStrategy address', async () => { - const { pool, deployer, dai, configurator } = testEnv; + const {pool, deployer, dai, configurator} = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -302,7 +356,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('PoolConfigurator updates the ReserveInterestRateStrategy address for asset 0', async () => { - const { pool, deployer, dai, configurator } = testEnv; + const {pool, deployer, dai, configurator} = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -315,7 +369,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('PoolConfigurator updates the ReserveInterestRateStrategy address for an unlisted asset (revert expected)', async () => { - const { pool, deployer, dai, configurator, users } = testEnv; + const {pool, deployer, dai, configurator, users} = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -330,14 +384,14 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Activates the zero address reserve for borrowing via pool admin (expect revert)', async () => { - const { configurator } = testEnv; + const {configurator} = testEnv; await expect(configurator.setReserveBorrowing(ZERO_ADDRESS, true)).to.be.revertedWith( ZERO_ADDRESS_NOT_VALID ); }); it('Initialize an already initialized reserve. ReserveLogic `init` where aTokenAddress != ZERO_ADDRESS (revert expected)', async () => { - const { pool, dai, deployer, configurator } = testEnv; + const {pool, dai, deployer, configurator} = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -363,7 +417,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { * `_addReserveToList()` is called from `initReserve`. However, in `initReserve` we run `init` before the `_addReserveToList()`, * and in `init` we are checking if `aTokenAddress == address(0)`, so to bypass that we need this odd init. */ - const { pool, dai, deployer, configurator } = testEnv; + const {pool, dai, deployer, configurator} = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -406,8 +460,8 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { it('Initialize reserves until max, then add one more (revert expected)', async () => { // Upgrade the Pool to update the maximum number of reserves - const { addressesProvider, poolAdmin, pool, dai, deployer, configurator } = testEnv; - const { deployer: deployerName } = await hre.getNamedAccounts(); + const {addressesProvider, poolAdmin, pool, dai, deployer, configurator} = testEnv; + const {deployer: deployerName} = await hre.getNamedAccounts(); // Impersonate the PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -475,7 +529,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { * 3. Init a new asset. * Intended behaviour new asset is inserted into one of the available spots in */ - const { configurator, pool, poolAdmin, addressesProvider } = testEnv; + const {configurator, pool, poolAdmin, addressesProvider} = testEnv; const reservesListBefore = await pool.connect(configurator.signer).getReservesList(); @@ -574,8 +628,8 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { */ // Upgrade the Pool to update the maximum number of reserves - const { addressesProvider, poolAdmin, pool, dai, deployer, configurator } = testEnv; - const { deployer: deployerName } = await hre.getNamedAccounts(); + const {addressesProvider, poolAdmin, pool, dai, deployer, configurator} = testEnv; + const {deployer: deployerName} = await hre.getNamedAccounts(); // Impersonate the PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -707,7 +761,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Tries to initialize a reserve with an AToken, StableDebtToken, and VariableDebt each deployed with the wrong pool address (revert expected)', async () => { - const { pool, deployer, configurator, addressesProvider } = testEnv; + const {pool, deployer, configurator, addressesProvider} = testEnv; const NEW_POOL_IMPL_ARTIFACT = await hre.deployments.deploy('DummyPool', { contract: 'Pool', @@ -793,4 +847,110 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { initInputParams[0].variableDebtTokenImpl = variableDebtTokenImp.address; expect(await configurator.initReserves(initInputParams)); }); + + it('LendingPool Reserve Factor 100%. Only variable borrowings. Validates that variable borrow index accrue, liquidity index not, and the Collector receives accruedToTreasury allocation after interest accrues', async () => { + const { + configurator, + pool, + aDai, + dai, + users: [depositor], + } = testEnv; + + await setupPositions(testEnv, RateMode.Variable); + + // Set the RF to 100% + await configurator.setReserveFactor(dai.address, '10000'); + + const reserveDataBefore = await pool.getReserveData(dai.address); + + await advanceTimeAndBlock(10000); + + // Deposit to "settle" the liquidity index accrual from pre-RF increase to 100% + await pool + .connect(depositor.signer) + .deposit( + dai.address, + await convertToCurrencyDecimals(dai.address, '1'), + depositor.address, + '0' + ); + + const reserveDataAfter1 = await pool.getReserveData(dai.address); + + expect(reserveDataAfter1.variableBorrowIndex).to.be.gt(reserveDataBefore.variableBorrowIndex); + expect(reserveDataAfter1.accruedToTreasury).to.be.gt(reserveDataBefore.accruedToTreasury); + expect(reserveDataAfter1.liquidityIndex).to.be.gt(reserveDataBefore.liquidityIndex); + + await advanceTimeAndBlock(10000); + + // "Clean" update, that should not increase the liquidity index, only variable borrow + await pool + .connect(depositor.signer) + .deposit( + dai.address, + await convertToCurrencyDecimals(dai.address, '1'), + depositor.address, + '0' + ); + + const reserveDataAfter2 = await pool.getReserveData(dai.address); + + expect(reserveDataAfter2.variableBorrowIndex).to.be.gt(reserveDataAfter1.variableBorrowIndex); + expect(reserveDataAfter2.accruedToTreasury).to.be.gt(reserveDataAfter1.accruedToTreasury); + expect(reserveDataAfter2.liquidityIndex).to.be.eq(reserveDataAfter1.liquidityIndex); + }); + + it('LendingPool Reserve Factor 100%. Only stable borrowings. Validates that neither variable borrow index nor liquidity index increase, but the Collector receives accruedToTreasury allocation after interest accrues', async () => { + const { + configurator, + pool, + aDai, + dai, + users: [depositor], + } = testEnv; + + await setupPositions(testEnv, RateMode.Stable); + + // Set the RF to 100% + await configurator.setReserveFactor(dai.address, '10000'); + + const reserveDataBefore = await pool.getReserveData(dai.address); + + await advanceTimeAndBlock(10000); + + // Deposit to "settle" the liquidity index accrual from pre-RF increase to 100% + await pool + .connect(depositor.signer) + .deposit( + dai.address, + await convertToCurrencyDecimals(dai.address, '1'), + depositor.address, + '0' + ); + + const reserveDataAfter1 = await pool.getReserveData(dai.address); + + expect(reserveDataAfter1.variableBorrowIndex).to.be.eq(reserveDataBefore.variableBorrowIndex); + expect(reserveDataAfter1.accruedToTreasury).to.be.gt(reserveDataBefore.accruedToTreasury); + expect(reserveDataAfter1.liquidityIndex).to.be.gt(reserveDataBefore.liquidityIndex); + + await advanceTimeAndBlock(10000); + + // "Clean" update, that should not increase the liquidity index, only variable borrow + await pool + .connect(depositor.signer) + .deposit( + dai.address, + await convertToCurrencyDecimals(dai.address, '1'), + depositor.address, + '0' + ); + + const reserveDataAfter2 = await pool.getReserveData(dai.address); + + expect(reserveDataAfter2.variableBorrowIndex).to.be.eq(reserveDataAfter1.variableBorrowIndex); + expect(reserveDataAfter2.accruedToTreasury).to.be.gt(reserveDataAfter1.accruedToTreasury); + expect(reserveDataAfter2.liquidityIndex).to.be.eq(reserveDataAfter1.liquidityIndex); + }); }); From 8c6b9ea427ac68cf0be33b31d4b687a9ab01aa03 Mon Sep 17 00:00:00 2001 From: eboado Date: Tue, 1 Nov 2022 13:09:56 +0100 Subject: [PATCH 35/87] Remove condition to skip based on timestamp, as it belong to another PR and causes potential problems on this one for RF 100% --- contracts/protocol/libraries/logic/ReserveLogic.sol | 6 ------ 1 file changed, 6 deletions(-) diff --git a/contracts/protocol/libraries/logic/ReserveLogic.sol b/contracts/protocol/libraries/logic/ReserveLogic.sol index 6a683147f..629b0ca5a 100644 --- a/contracts/protocol/libraries/logic/ReserveLogic.sol +++ b/contracts/protocol/libraries/logic/ReserveLogic.sol @@ -98,12 +98,6 @@ library ReserveLogic { DataTypes.ReserveData storage reserve, DataTypes.ReserveCache memory reserveCache ) internal { - // If time didn't pass since last stored timestamp, skip state update - //solium-disable-next-line - if (reserveCache.reserveLastUpdateTimestamp == uint40(block.timestamp)) { - return; - } - _updateIndexes(reserve, reserveCache); _accrueToTreasury(reserve, reserveCache); } From e835e1f0986a7006612cd0fa2641f25d2b466000 Mon Sep 17 00:00:00 2001 From: eboado Date: Tue, 1 Nov 2022 13:12:00 +0100 Subject: [PATCH 36/87] Change to reduce diff From 9a68e2a7b5249794b7797c56a633e7994d4a5f9d Mon Sep 17 00:00:00 2001 From: eboado Date: Tue, 1 Nov 2022 13:13:11 +0100 Subject: [PATCH 37/87] Fix of previous diff reduction From 885b03fef4ff5c17c329285cdb3b6013f864c5d1 Mon Sep 17 00:00:00 2001 From: eboado Date: Tue, 1 Nov 2022 14:56:04 +0100 Subject: [PATCH 38/87] - Added optimization to skip updateState() on same timestamp. - Improved caching flow on next_ indexes --- .../protocol/libraries/logic/ReserveLogic.sol | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/contracts/protocol/libraries/logic/ReserveLogic.sol b/contracts/protocol/libraries/logic/ReserveLogic.sol index a946c3813..4ca939199 100644 --- a/contracts/protocol/libraries/logic/ReserveLogic.sol +++ b/contracts/protocol/libraries/logic/ReserveLogic.sol @@ -98,8 +98,17 @@ library ReserveLogic { DataTypes.ReserveData storage reserve, DataTypes.ReserveCache memory reserveCache ) internal { + // If time didn't pass since last stored timestamp, skip state update + //solium-disable-next-line + if (reserve.lastUpdateTimestamp == uint40(block.timestamp)) { + return; + } + _updateIndexes(reserve, reserveCache); _accrueToTreasury(reserve, reserveCache); + + //solium-disable-next-line + reserve.lastUpdateTimestamp = uint40(block.timestamp); } /** @@ -283,9 +292,6 @@ library ReserveLogic { DataTypes.ReserveData storage reserve, DataTypes.ReserveCache memory reserveCache ) internal { - reserveCache.nextLiquidityIndex = reserveCache.currLiquidityIndex; - reserveCache.nextVariableBorrowIndex = reserveCache.currVariableBorrowIndex; - //only cumulating if there is any income being produced if (reserveCache.currLiquidityRate != 0) { uint256 cumulatedLiquidityInterest = MathUtils.calculateLinearInterest( @@ -310,9 +316,6 @@ library ReserveLogic { reserve.variableBorrowIndex = reserveCache.nextVariableBorrowIndex.toUint128(); } } - - //solium-disable-next-line - reserve.lastUpdateTimestamp = uint40(block.timestamp); } /** @@ -330,8 +333,9 @@ library ReserveLogic { reserveCache.reserveConfiguration = reserve.configuration; reserveCache.reserveFactor = reserveCache.reserveConfiguration.getReserveFactor(); - reserveCache.currLiquidityIndex = reserve.liquidityIndex; - reserveCache.currVariableBorrowIndex = reserve.variableBorrowIndex; + reserveCache.currLiquidityIndex = reserveCache.nextLiquidityIndex = reserve.liquidityIndex; + reserveCache.currVariableBorrowIndex = reserveCache.nextVariableBorrowIndex = reserve + .variableBorrowIndex; reserveCache.currLiquidityRate = reserve.currentLiquidityRate; reserveCache.currVariableBorrowRate = reserve.currentVariableBorrowRate; @@ -342,8 +346,10 @@ library ReserveLogic { reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp; reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken( - reserveCache.variableDebtTokenAddress - ).scaledTotalSupply(); + reserveCache + .variableDebtTokenAddress + ) + .scaledTotalSupply(); ( reserveCache.currPrincipalStableDebt, From bb8e2acd3af721994931d3512e5812b8e9055a8b Mon Sep 17 00:00:00 2001 From: eboado Date: Wed, 2 Nov 2022 08:43:16 +0100 Subject: [PATCH 39/87] Formatting fix From e513b7d7725018de9b529bc57a05d56769ad73cf Mon Sep 17 00:00:00 2001 From: David Laprade Date: Wed, 2 Nov 2022 11:06:44 -0400 Subject: [PATCH 40/87] Make mintToTreasury virtual so it can be overridden --- contracts/protocol/tokenization/AToken.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/protocol/tokenization/AToken.sol b/contracts/protocol/tokenization/AToken.sol index 2bd122e6a..fd9d74b20 100644 --- a/contracts/protocol/tokenization/AToken.sol +++ b/contracts/protocol/tokenization/AToken.sol @@ -107,7 +107,7 @@ contract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, I } /// @inheritdoc IAToken - function mintToTreasury(uint256 amount, uint256 index) external override onlyPool { + function mintToTreasury(uint256 amount, uint256 index) external virtual override onlyPool { if (amount == 0) { return; } From 6b504d4bced83e1ac64ab552d082387de042e5af Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Wed, 2 Nov 2022 16:46:28 +0100 Subject: [PATCH 41/87] fix: Fix docs param in burnScaled --- contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol b/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol index 1b0cc690a..119ee2a31 100644 --- a/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol +++ b/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol @@ -95,6 +95,7 @@ abstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBa * @dev In some instances, a burn transaction will emit a mint event * if the amount to burn is less than the interest that the user accrued * @param user The user which debt is burnt + * @param target The address that will receive the underlying, if any * @param amount The amount getting burned * @param index The variable debt index of the reserve **/ From 7fbdc6ea5f657072fbdf9494db07f1769c38c1d9 Mon Sep 17 00:00:00 2001 From: The-3D <37953689+The-3D@users.noreply.github.com> Date: Wed, 2 Nov 2022 16:53:01 +0100 Subject: [PATCH 42/87] Fix: CEI to fix reentrancy risk with reentrant tokens (eg ERC777) (#704) * fix: liquidationCall reentrancy * fix: reentrancy on withdraw * fix: Join conditionals in withdraw function Co-authored-by: miguelmtzinf --- .../libraries/logic/LiquidationLogic.sol | 16 +++---- .../protocol/libraries/logic/SupplyLogic.sol | 45 ++++++++++--------- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/contracts/protocol/libraries/logic/LiquidationLogic.sol b/contracts/protocol/libraries/logic/LiquidationLogic.sol index 7d91d3365..0742cedbc 100644 --- a/contracts/protocol/libraries/logic/LiquidationLogic.sol +++ b/contracts/protocol/libraries/logic/LiquidationLogic.sol @@ -166,6 +166,13 @@ library LiquidationLogic { userConfig.setBorrowing(debtReserve.id, false); } + // If the collateral being liquidated is equal to the user balance, + // we set the currency as not being used as collateral anymore + if (vars.actualCollateralToLiquidate == vars.userCollateralBalance) { + userConfig.setUsingAsCollateral(collateralReserve.id, false); + emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user); + } + _burnDebtTokens(params, vars); debtReserve.updateInterestRates( @@ -197,14 +204,7 @@ library LiquidationLogic { vars.liquidationProtocolFeeAmount ); } - - // If the collateral being liquidated is equal to the user balance, - // we set the currency as not being used as collateral anymore - if (vars.actualCollateralToLiquidate == vars.userCollateralBalance) { - userConfig.setUsingAsCollateral(collateralReserve.id, false); - emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user); - } - + // Transfers the debt asset being repaid to the aToken, where the liquidity is kept IERC20(params.debtAsset).safeTransferFrom( msg.sender, diff --git a/contracts/protocol/libraries/logic/SupplyLogic.sol b/contracts/protocol/libraries/logic/SupplyLogic.sol index 98ad8e8f9..1c7d2d259 100644 --- a/contracts/protocol/libraries/logic/SupplyLogic.sol +++ b/contracts/protocol/libraries/logic/SupplyLogic.sol @@ -128,6 +128,13 @@ library SupplyLogic { reserve.updateInterestRates(reserveCache, params.asset, 0, amountToWithdraw); + bool isCollateral = userConfig.isUsingAsCollateral(reserve.id); + + if (isCollateral && amountToWithdraw == userBalance) { + userConfig.setUsingAsCollateral(reserve.id, false); + emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender); + } + IAToken(reserveCache.aTokenAddress).burn( msg.sender, params.to, @@ -135,25 +142,18 @@ library SupplyLogic { reserveCache.nextLiquidityIndex ); - if (userConfig.isUsingAsCollateral(reserve.id)) { - if (userConfig.isBorrowingAny()) { - ValidationLogic.validateHFAndLtv( - reservesData, - reservesList, - eModeCategories, - userConfig, - params.asset, - msg.sender, - params.reservesCount, - params.oracle, - params.userEModeCategory - ); - } - - if (amountToWithdraw == userBalance) { - userConfig.setUsingAsCollateral(reserve.id, false); - emit ReserveUsedAsCollateralDisabled(params.asset, msg.sender); - } + if (isCollateral && userConfig.isBorrowingAny()) { + ValidationLogic.validateHFAndLtv( + reservesData, + reservesList, + eModeCategories, + userConfig, + params.asset, + msg.sender, + params.reservesCount, + params.oracle, + params.userEModeCategory + ); } emit Withdraw(params.asset, msg.sender, params.to, amountToWithdraw); @@ -264,7 +264,12 @@ library SupplyLogic { if (useAsCollateral) { require( - ValidationLogic.validateUseAsCollateral(reservesData, reservesList, userConfig, reserveCache.reserveConfiguration), + ValidationLogic.validateUseAsCollateral( + reservesData, + reservesList, + userConfig, + reserveCache.reserveConfiguration + ), Errors.USER_IN_ISOLATION_MODE ); From 9666e9912c956950e6a4682df5e381999411840b Mon Sep 17 00:00:00 2001 From: Bojidar00 <80902025+Bojidar00@users.noreply.github.com> Date: Thu, 3 Nov 2022 14:03:40 +0200 Subject: [PATCH 43/87] fix: typo (#717) --- contracts/interfaces/IPool.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index bff8638d6..d2e8d94bc 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -563,7 +563,7 @@ interface IPool { returns (DataTypes.UserConfigurationMap memory); /** - * @notice Returns the normalized income normalized income of the reserve + * @notice Returns the normalized income of the reserve * @param asset The address of the underlying asset of the reserve * @return The reserve's normalized income */ From c9654cd4ea822bf747eb2fdbf3d0d32098619dfb Mon Sep 17 00:00:00 2001 From: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Date: Thu, 3 Nov 2022 13:05:37 +0100 Subject: [PATCH 44/87] docs: Fix aToken docs related to eip712 (#719) --- contracts/protocol/tokenization/AToken.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/protocol/tokenization/AToken.sol b/contracts/protocol/tokenization/AToken.sol index 2bd122e6a..b3d429d0a 100644 --- a/contracts/protocol/tokenization/AToken.sol +++ b/contracts/protocol/tokenization/AToken.sol @@ -241,7 +241,7 @@ contract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, I /** * @dev Overrides the base function to fully implement IAToken - * @dev see `IncentivizedERC20.DOMAIN_SEPARATOR()` for more detailed documentation + * @dev see `EIP712Base.DOMAIN_SEPARATOR()` for more detailed documentation */ function DOMAIN_SEPARATOR() public view override(IAToken, EIP712Base) returns (bytes32) { return super.DOMAIN_SEPARATOR(); @@ -249,7 +249,7 @@ contract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, I /** * @dev Overrides the base function to fully implement IAToken - * @dev see `IncentivizedERC20.nonces()` for more detailed documentation + * @dev see `EIP712Base.nonces()` for more detailed documentation */ function nonces(address owner) public view override(IAToken, EIP712Base) returns (uint256) { return super.nonces(owner); From 7dd869f68bbdb07ac94cf671bdf93c392c65af60 Mon Sep 17 00:00:00 2001 From: omahs <73983677+omahs@users.noreply.github.com> Date: Thu, 3 Nov 2022 13:06:47 +0100 Subject: [PATCH 45/87] Fix: typos (#715) --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 711d335c2..386cb3d95 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ Formal Verification ## Connect with the community -You can join at the [Discord](http://aave.com/discord) channel or at the [Governance Forum](https://governance.aave.com/) for asking questions about the protocol or talk about Aave with other peers. +You can join the [Discord](http://aave.com/discord) channel or the [Governance Forum](https://governance.aave.com/) to ask questions about the protocol or talk about Aave with other peers. ## Getting Started @@ -67,7 +67,7 @@ contract Misc { } ``` -The JSON artifacts with the ABI and Bytecode are also included into the bundled NPM package at `artifacts/` directory. +The JSON artifacts with the ABI and Bytecode are also included in the bundled NPM package at `artifacts/` directory. Import JSON file via Node JS `require`: @@ -80,12 +80,12 @@ console.log(PoolV3Artifact.abi) ## Setup -The repository uses Docker Compose to manage sensitive keys and load the configuration. Prior any action like test or deploy, you must run `docker-compose up` to start the `contracts-env` container, and then connect to the container console via `docker-compose exec contracts-env bash`. +The repository uses Docker Compose to manage sensitive keys and load the configuration. Prior to any action like test or deploy, you must run `docker-compose up` to start the `contracts-env` container, and then connect to the container console via `docker-compose exec contracts-env bash`. Follow the next steps to setup the repository: - Install `docker` and `docker-compose` -- Create an enviroment file named `.env` and fill the next enviroment variables +- Create an environment file named `.env` and fill the next environment variables ``` # Add Alchemy or Infura provider keys, alchemy takes preference at the config level From 6968062ba1129b0e88ddb60408d235329a913fc9 Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Thu, 3 Nov 2022 13:41:27 +0100 Subject: [PATCH 46/87] fix: Make transferOnLiq() virtual --- contracts/protocol/tokenization/AToken.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/protocol/tokenization/AToken.sol b/contracts/protocol/tokenization/AToken.sol index fd9d74b20..1ee28e8d5 100644 --- a/contracts/protocol/tokenization/AToken.sol +++ b/contracts/protocol/tokenization/AToken.sol @@ -119,7 +119,7 @@ contract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, I address from, address to, uint256 value - ) external override onlyPool { + ) external virtual override onlyPool { // Being a normal transfer, the Transfer() and BalanceTransfer() are emitted // so no need to emit a specific event here _transfer(from, to, value, false); From efdaf634a7809e254ae27c2543f3c64ac875d83e Mon Sep 17 00:00:00 2001 From: eboado Date: Fri, 4 Nov 2022 14:17:14 +0100 Subject: [PATCH 47/87] Make more precise comment on _updateIndexes() --- contracts/protocol/libraries/logic/ReserveLogic.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contracts/protocol/libraries/logic/ReserveLogic.sol b/contracts/protocol/libraries/logic/ReserveLogic.sol index 629b0ca5a..8f9664428 100644 --- a/contracts/protocol/libraries/logic/ReserveLogic.sol +++ b/contracts/protocol/libraries/logic/ReserveLogic.sol @@ -300,7 +300,9 @@ library ReserveLogic { reserve.liquidityIndex = reserveCache.nextLiquidityIndex.toUint128(); } - // Variable borrow side only gets updated if there is any accrual of variable debt + // Variable borrow index only gets updated if there is any variable debt. + // We assume that in that case the variable borrow rate is positive, to avoid + // over-optimization if (reserveCache.currScaledVariableDebt != 0) { uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest( reserveCache.currVariableBorrowRate, From 94f08437061b5b8abed5e498b161962196d92153 Mon Sep 17 00:00:00 2001 From: eboado Date: Wed, 9 Nov 2022 12:07:09 +0100 Subject: [PATCH 48/87] Improved comment on _updateIndexes() --- contracts/protocol/libraries/logic/ReserveLogic.sol | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/contracts/protocol/libraries/logic/ReserveLogic.sol b/contracts/protocol/libraries/logic/ReserveLogic.sol index 8f9664428..3ba3c12f5 100644 --- a/contracts/protocol/libraries/logic/ReserveLogic.sol +++ b/contracts/protocol/libraries/logic/ReserveLogic.sol @@ -301,8 +301,9 @@ library ReserveLogic { } // Variable borrow index only gets updated if there is any variable debt. - // We assume that in that case the variable borrow rate is positive, to avoid - // over-optimization + // reserveCache.currVariableBorrowRate != 0 is not a correct validation, + // because a positive base variable rate can be stored on + // reserveCache.currVariableBorrowRate, but the index should not increase if (reserveCache.currScaledVariableDebt != 0) { uint256 cumulatedVariableBorrowInterest = MathUtils.calculateCompoundedInterest( reserveCache.currVariableBorrowRate, From e99112c990b121d7207c150746e0c4f7adcfbba4 Mon Sep 17 00:00:00 2001 From: zhoujia6139 Date: Fri, 11 Nov 2022 22:33:25 +0800 Subject: [PATCH 49/87] Update contracts/protocol/libraries/logic/LiquidationLogic.sol Co-authored-by: Ernesto Boado --- .../protocol/libraries/logic/LiquidationLogic.sol | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/contracts/protocol/libraries/logic/LiquidationLogic.sol b/contracts/protocol/libraries/logic/LiquidationLogic.sol index 090565baf..d06d9bff8 100644 --- a/contracts/protocol/libraries/logic/LiquidationLogic.sol +++ b/contracts/protocol/libraries/logic/LiquidationLogic.sol @@ -191,11 +191,12 @@ library LiquidationLogic { // Transfer fee to treasury if it is non-zero if (vars.liquidationProtocolFeeAmount != 0) { - uint256 index = collateralReserve.getNormalizedIncome(); - uint256 aTokenAmount = vars.liquidationProtocolFeeAmount.rayDiv(index); - uint256 aTokenBalance = vars.collateralAToken.scaledBalanceOf(params.user); - if (aTokenAmount > aTokenBalance) { - vars.liquidationProtocolFeeAmount = aTokenBalance.rayMul(index); + uint256 liquidityIndex = collateralReserve.getNormalizedIncome(); + uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(liquidityIndex); + uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user); + // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision + if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) { + vars.liquidationProtocolFeeAmount = scaledDownUserBalance.rayMul(liquidityIndex); } vars.collateralAToken.transferOnLiquidation( params.user, From bb0052522385f6cbdde5db577eb4193e77640108 Mon Sep 17 00:00:00 2001 From: eboado Date: Fri, 11 Nov 2022 15:47:43 +0100 Subject: [PATCH 50/87] Fixes #730. Not including yet all the required tests, only for the flash loan fee (same as bridging) imprecision --- .../protocol/libraries/logic/BridgeLogic.sol | 5 +- .../libraries/logic/FlashLoanLogic.sol | 3 +- .../protocol/libraries/logic/SupplyLogic.sol | 9 +- .../libraries/logic/ValidationLogic.sol | 18 ++- contracts/protocol/pool/PoolConfigurator.sol | 8 +- test-suites/helpers/utils/calculations.ts | 4 +- test-suites/liquidity-indexes.spec.ts | 123 ++++++++++++++++++ 7 files changed, 155 insertions(+), 15 deletions(-) create mode 100644 test-suites/liquidity-indexes.spec.ts diff --git a/contracts/protocol/libraries/logic/BridgeLogic.sol b/contracts/protocol/libraries/logic/BridgeLogic.sol index d5f1ce9e2..0d8c8e2ae 100644 --- a/contracts/protocol/libraries/logic/BridgeLogic.sol +++ b/contracts/protocol/libraries/logic/BridgeLogic.sol @@ -63,7 +63,7 @@ library BridgeLogic { reserve.updateState(reserveCache); - ValidationLogic.validateSupply(reserveCache, amount); + ValidationLogic.validateSupply(reserveCache, reserve, amount); uint256 unbackedMintCap = reserveCache.reserveConfiguration.getUnbackedMintCap(); uint256 reserveDecimals = reserveCache.reserveConfiguration.getDecimals(); @@ -125,7 +125,8 @@ library BridgeLogic { uint256 added = backingAmount + fee; reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex( - IERC20(reserveCache.aTokenAddress).totalSupply(), + IERC20(reserveCache.aTokenAddress).totalSupply() + + uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex), feeToLP ); diff --git a/contracts/protocol/libraries/logic/FlashLoanLogic.sol b/contracts/protocol/libraries/logic/FlashLoanLogic.sol index fa800e321..521ed212c 100644 --- a/contracts/protocol/libraries/logic/FlashLoanLogic.sol +++ b/contracts/protocol/libraries/logic/FlashLoanLogic.sol @@ -231,7 +231,8 @@ library FlashLoanLogic { DataTypes.ReserveCache memory reserveCache = reserve.cache(); reserve.updateState(reserveCache); reserveCache.nextLiquidityIndex = reserve.cumulateToLiquidityIndex( - IERC20(reserveCache.aTokenAddress).totalSupply(), + IERC20(reserveCache.aTokenAddress).totalSupply() + + uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex), premiumToLP ); diff --git a/contracts/protocol/libraries/logic/SupplyLogic.sol b/contracts/protocol/libraries/logic/SupplyLogic.sol index 98ad8e8f9..a9205864c 100644 --- a/contracts/protocol/libraries/logic/SupplyLogic.sol +++ b/contracts/protocol/libraries/logic/SupplyLogic.sol @@ -60,7 +60,7 @@ library SupplyLogic { reserve.updateState(reserveCache); - ValidationLogic.validateSupply(reserveCache, params.amount); + ValidationLogic.validateSupply(reserveCache, reserve, params.amount); reserve.updateInterestRates(reserveCache, params.asset, params.amount, 0); @@ -264,7 +264,12 @@ library SupplyLogic { if (useAsCollateral) { require( - ValidationLogic.validateUseAsCollateral(reservesData, reservesList, userConfig, reserveCache.reserveConfiguration), + ValidationLogic.validateUseAsCollateral( + reservesData, + reservesList, + userConfig, + reserveCache.reserveConfiguration + ), Errors.USER_IN_ISOLATION_MODE ); diff --git a/contracts/protocol/libraries/logic/ValidationLogic.sol b/contracts/protocol/libraries/logic/ValidationLogic.sol index fb2eda0c1..cf117ff4f 100644 --- a/contracts/protocol/libraries/logic/ValidationLogic.sol +++ b/contracts/protocol/libraries/logic/ValidationLogic.sol @@ -54,10 +54,11 @@ library ValidationLogic { * @param reserveCache The cached data of the reserve * @param amount The amount to be supplied */ - function validateSupply(DataTypes.ReserveCache memory reserveCache, uint256 amount) - internal - view - { + function validateSupply( + DataTypes.ReserveCache memory reserveCache, + DataTypes.ReserveData storage reserve, + uint256 amount + ) internal view { require(amount != 0, Errors.INVALID_AMOUNT); (bool isActive, bool isFrozen, , , bool isPaused) = reserveCache @@ -72,7 +73,9 @@ library ValidationLogic { supplyCap == 0 || (IAToken(reserveCache.aTokenAddress).scaledTotalSupply().rayMul( reserveCache.nextLiquidityIndex - ) + amount) <= + ) + + uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex) + + amount) <= supplyCap * (10**reserveCache.reserveConfiguration.getDecimals()), Errors.SUPPLY_CAP_EXCEEDED ); @@ -650,7 +653,10 @@ library ValidationLogic { IERC20(reserve.variableDebtTokenAddress).totalSupply() == 0, Errors.VARIABLE_DEBT_SUPPLY_NOT_ZERO ); - require(IERC20(reserve.aTokenAddress).totalSupply() == 0, Errors.ATOKEN_SUPPLY_NOT_ZERO); + require( + IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0, + Errors.ATOKEN_SUPPLY_NOT_ZERO + ); } /** diff --git a/contracts/protocol/pool/PoolConfigurator.sol b/contracts/protocol/pool/PoolConfigurator.sol index b99610c2e..43cfddd19 100644 --- a/contracts/protocol/pool/PoolConfigurator.sol +++ b/contracts/protocol/pool/PoolConfigurator.sol @@ -480,9 +480,11 @@ contract PoolConfigurator is VersionedInitializable, IPoolConfigurator { } function _checkNoSuppliers(address asset) internal view { - uint256 totalATokens = IPoolDataProvider(_addressesProvider.getPoolDataProvider()) - .getATokenTotalSupply(asset); - require(totalATokens == 0, Errors.RESERVE_LIQUIDITY_NOT_ZERO); + (, uint256 accruedToTreasury, uint256 totalATokens, , , , , , , , , ) = IPoolDataProvider( + _addressesProvider.getPoolDataProvider() + ).getReserveData(asset); + + require(totalATokens == 0 && accruedToTreasury == 0, Errors.RESERVE_LIQUIDITY_NOT_ZERO); } function _checkNoBorrowers(address asset) internal view { diff --git a/test-suites/helpers/utils/calculations.ts b/test-suites/helpers/utils/calculations.ts index 9484c54ad..f28db4f29 100644 --- a/test-suites/helpers/utils/calculations.ts +++ b/test-suites/helpers/utils/calculations.ts @@ -269,7 +269,9 @@ export const calcExpectedReserveDataAfterBackUnbacked = ( expectedReserveData.liquidityIndex = cumulateToLiquidityIndex( expectedReserveData.liquidityIndex, - totalSupply, + totalSupply.add( + expectedReserveData.accruedToTreasuryScaled.rayMul(expectedReserveData.liquidityIndex) + ), premiumToLP ); diff --git a/test-suites/liquidity-indexes.spec.ts b/test-suites/liquidity-indexes.spec.ts new file mode 100644 index 000000000..a481d0bbc --- /dev/null +++ b/test-suites/liquidity-indexes.spec.ts @@ -0,0 +1,123 @@ +import {expect} from 'chai'; +import {BigNumber, ethers} from 'ethers'; +import {MAX_UINT_AMOUNT} from '../helpers/constants'; +import {makeSuite, TestEnv} from './helpers/make-suite'; +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import { + evmSnapshot, + evmRevert, + MockFlashLoanReceiver, + getMockFlashLoanReceiver, +} from '@aave/deploy-v3'; +import './helpers/utils/wadraymath'; + +declare var hre: HardhatRuntimeEnvironment; + +makeSuite('Pool: liquidity indexes misc tests', (testEnv: TestEnv) => { + const TOTAL_PREMIUM = 9; + const PREMIUM_TO_PROTOCOL = 3000; + + let _mockFlashLoanReceiver = {} as MockFlashLoanReceiver; + + let snap: string; + + const setupForFlashloan = async (testEnv: TestEnv) => { + const { + configurator, + pool, + weth, + aave, + dai, + users: [user0], + } = testEnv; + + _mockFlashLoanReceiver = await getMockFlashLoanReceiver(); + + await configurator.updateFlashloanPremiumTotal(TOTAL_PREMIUM); + await configurator.updateFlashloanPremiumToProtocol(PREMIUM_TO_PROTOCOL); + + const userAddress = user0.address; + const amountToDeposit = ethers.utils.parseEther('1'); + + await weth['mint(uint256)'](amountToDeposit); + + await weth.approve(pool.address, MAX_UINT_AMOUNT); + + await pool.deposit(weth.address, amountToDeposit, userAddress, '0'); + + await aave['mint(uint256)'](amountToDeposit); + + await aave.approve(pool.address, MAX_UINT_AMOUNT); + + await pool.deposit(aave.address, amountToDeposit, userAddress, '0'); + await dai['mint(uint256)'](amountToDeposit); + + await dai.approve(pool.address, MAX_UINT_AMOUNT); + + await pool.deposit(dai.address, amountToDeposit, userAddress, '0'); + }; + + before(async () => { + await setupForFlashloan(testEnv); + }); + + beforeEach(async () => { + snap = await evmSnapshot(); + }); + + afterEach(async () => { + await evmRevert(snap); + }); + + it('Validates that the flash loan fee properly takes into account both aToken supply and accruedToTreasury', async () => { + const { + pool, + helpersContract, + weth, + aWETH, + users: [depositorWeth], + } = testEnv; + + /** + * 1. Flashes 0.8 WETH + * 2. Flashes again 0.8 ETH (to have accruedToTreasury) + * 3. Validates that liquidity index took into account both aToken supply and accruedToTreasury + */ + + const wethFlashBorrowedAmount = ethers.utils.parseEther('0.8'); + + await pool.flashLoan( + _mockFlashLoanReceiver.address, + [weth.address], + [wethFlashBorrowedAmount], + [0], + _mockFlashLoanReceiver.address, + '0x10', + '0' + ); + + await pool.flashLoan( + _mockFlashLoanReceiver.address, + [weth.address], + [wethFlashBorrowedAmount], + [0], + _mockFlashLoanReceiver.address, + '0x10', + '0' + ); + + const wethReserveDataAfterSecondFlash = await helpersContract.getReserveData(weth.address); + + const totalScaledWithTreasuryAfterSecondFlash = ( + await aWETH.scaledBalanceOf(depositorWeth.address) + ).add(wethReserveDataAfterSecondFlash.accruedToTreasuryScaled.toString()); + + expect(await weth.balanceOf(aWETH.address)).to.be.closeTo( + BigNumber.from(totalScaledWithTreasuryAfterSecondFlash.toString()).rayMul( + wethReserveDataAfterSecondFlash.liquidityIndex + ), + 1, + 'Scaled total supply not (+/- 1) equal to WETH balance of aWETH' + ); + }); +}); From 5d0a1aa76f8df0ffb7f4f3f2475cc8ab0da6e081 Mon Sep 17 00:00:00 2001 From: Ernesto Boado Date: Mon, 14 Nov 2022 13:53:03 +0100 Subject: [PATCH 51/87] Update test-suites/pool-edge.spec.ts Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> --- test-suites/pool-edge.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-suites/pool-edge.spec.ts b/test-suites/pool-edge.spec.ts index ddc05c8f8..a85f5ac3f 100644 --- a/test-suites/pool-edge.spec.ts +++ b/test-suites/pool-edge.spec.ts @@ -937,7 +937,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { await advanceTimeAndBlock(10000); - // "Clean" update, that should not increase the liquidity index, only variable borrow + // "Clean" update, that should not increase the liquidity index, only stable borrow await pool .connect(depositor.signer) .deposit( From 078fa28584484209a0a1fac44cbc6ae827b719f6 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Mon, 14 Nov 2022 22:55:43 -0500 Subject: [PATCH 52/87] fix: update deploy and periphery dependencies --- package-lock.json | 44 ++++++++++++++++++++++---------------------- package.json | 4 ++-- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index cb99f0671..4f2217342 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,8 +14,8 @@ "tmp-promise": "^3.0.2" }, "devDependencies": { - "@aave/deploy-v3": "1.24.0-beta.2", - "@aave/periphery-v3": "1.18.0", + "@aave/deploy-v3": "1.27.0-beta.7", + "@aave/periphery-v3": "^1.19.2-beta.0", "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.13", "@tenderly/hardhat-tenderly": "1.1.0-beta.5", "@typechain/ethers-v5": "7.2.0", @@ -57,9 +57,9 @@ } }, "node_modules/@aave/core-v3": { - "version": "1.16.0", - "resolved": "https://npm.pkg.github.com/download/@aave/core-v3/1.16.0/844d2930f81e9c2ade19cf28339a4d4e1d67ad11b3a9705d9ef1a7b1cbd6efc6", - "integrity": "sha512-TN5CFdOS2n4xnqWpvMdjtRj3x1o9rieDM4Jtx0xBrAplagTXPp0mxtOINFgLv8iCda1lNwa3GiiMFkmJwzn07g==", + "version": "1.16.2", + "resolved": "https://npm.pkg.github.com/download/@aave/core-v3/1.16.2/c828f6a1f3c43e4e9cf6031fff4ec844f2e6359e", + "integrity": "sha512-oZZ1TZCrN3mIc445etZUbsaTVysa9SMCD/inoNDosM0f0Ulyhz7dT4319VGwt4yGrZRLehdJtpGkzBffqEezMw==", "dev": true, "license": "BUSL-1.1", "dependencies": { @@ -69,9 +69,9 @@ } }, "node_modules/@aave/deploy-v3": { - "version": "1.24.0-beta.2", - "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.24.0-beta.2/1033edf05212730628eddb7896ea874d29516a44", - "integrity": "sha512-05d73D7UaK8vOOV2VYU8tJuE+WGbF+dX1MTknYpJ5KWddwJ9gSsSmIY6wCVONLNwyYoeYI6Romf7Anyob2KQew==", + "version": "1.27.0-beta.7", + "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.27.0-beta.7/cd30b47fbf4e1392255458b0140f1c343cd68c2e", + "integrity": "sha512-KNtHLnzKZi0tLZxHbxbBDdByx71cei9ByeF0a3b09UYSbNOIEh9m0RRiUSKAFSZpsc8A0YJMvl8RbmIIhw6Xjw==", "dev": true, "license": "AGPLv3", "dependencies": { @@ -110,13 +110,13 @@ } }, "node_modules/@aave/periphery-v3": { - "version": "1.18.0", - "resolved": "https://npm.pkg.github.com/download/@aave/periphery-v3/1.18.0/12a07df25c34110ce41a203c6c8afb5d08e1a186e04b6a66d4bfde6474df8222", - "integrity": "sha512-On0MllNcKp95dkEcqq7UeVlxGdeMcwdRqhc2YFJW8irOp6dlmvn7Ul0o7wdQQB2+3ZmVo8sXn9sDz9erZaDDcg==", + "version": "1.20.0", + "resolved": "https://npm.pkg.github.com/download/@aave/periphery-v3/1.20.0/d4459879abc4a3f1ab0d0951d4e8e0d9cfab2dd8", + "integrity": "sha512-yf7Voe2DWsT9HcCalFbYe6AtTUOt2Cd8iopv14JIkSfzhCdGW41PuhVjKQgFowkumZP+RtwQTZP27yiFO472JQ==", "dev": true, "license": "AGPLv3", "dependencies": { - "@aave/core-v3": "^1.14.3-beta.0" + "@aave/core-v3": "1.16.2" } }, "node_modules/@babel/code-frame": { @@ -23900,9 +23900,9 @@ }, "dependencies": { "@aave/core-v3": { - "version": "1.16.0", - "resolved": "https://npm.pkg.github.com/download/@aave/core-v3/1.16.0/844d2930f81e9c2ade19cf28339a4d4e1d67ad11b3a9705d9ef1a7b1cbd6efc6", - "integrity": "sha512-TN5CFdOS2n4xnqWpvMdjtRj3x1o9rieDM4Jtx0xBrAplagTXPp0mxtOINFgLv8iCda1lNwa3GiiMFkmJwzn07g==", + "version": "1.16.2", + "resolved": "https://npm.pkg.github.com/download/@aave/core-v3/1.16.2/c828f6a1f3c43e4e9cf6031fff4ec844f2e6359e", + "integrity": "sha512-oZZ1TZCrN3mIc445etZUbsaTVysa9SMCD/inoNDosM0f0Ulyhz7dT4319VGwt4yGrZRLehdJtpGkzBffqEezMw==", "dev": true, "requires": { "@nomiclabs/hardhat-etherscan": "^2.1.7", @@ -23911,9 +23911,9 @@ } }, "@aave/deploy-v3": { - "version": "1.24.0-beta.2", - "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.24.0-beta.2/1033edf05212730628eddb7896ea874d29516a44", - "integrity": "sha512-05d73D7UaK8vOOV2VYU8tJuE+WGbF+dX1MTknYpJ5KWddwJ9gSsSmIY6wCVONLNwyYoeYI6Romf7Anyob2KQew==", + "version": "1.27.0-beta.7", + "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.27.0-beta.7/cd30b47fbf4e1392255458b0140f1c343cd68c2e", + "integrity": "sha512-KNtHLnzKZi0tLZxHbxbBDdByx71cei9ByeF0a3b09UYSbNOIEh9m0RRiUSKAFSZpsc8A0YJMvl8RbmIIhw6Xjw==", "dev": true, "requires": { "bip39": "^3.0.4", @@ -23936,12 +23936,12 @@ } }, "@aave/periphery-v3": { - "version": "1.18.0", - "resolved": "https://npm.pkg.github.com/download/@aave/periphery-v3/1.18.0/12a07df25c34110ce41a203c6c8afb5d08e1a186e04b6a66d4bfde6474df8222", - "integrity": "sha512-On0MllNcKp95dkEcqq7UeVlxGdeMcwdRqhc2YFJW8irOp6dlmvn7Ul0o7wdQQB2+3ZmVo8sXn9sDz9erZaDDcg==", + "version": "1.20.0", + "resolved": "https://npm.pkg.github.com/download/@aave/periphery-v3/1.20.0/d4459879abc4a3f1ab0d0951d4e8e0d9cfab2dd8", + "integrity": "sha512-yf7Voe2DWsT9HcCalFbYe6AtTUOt2Cd8iopv14JIkSfzhCdGW41PuhVjKQgFowkumZP+RtwQTZP27yiFO472JQ==", "dev": true, "requires": { - "@aave/core-v3": "^1.14.3-beta.0" + "@aave/core-v3": "1.16.2" } }, "@babel/code-frame": { diff --git a/package.json b/package.json index 6eb441409..42cd7cd88 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,8 @@ "prepublish": "npm run compile" }, "devDependencies": { - "@aave/deploy-v3": "1.24.0-beta.2", - "@aave/periphery-v3": "1.18.0", + "@aave/deploy-v3": "1.27.0-beta.7", + "@aave/periphery-v3": "^1.19.2-beta.0", "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.13", "@tenderly/hardhat-tenderly": "1.1.0-beta.5", "@typechain/ethers-v5": "7.2.0", From bf652c2837d1403977e9cbc50e623dee21c5fcf4 Mon Sep 17 00:00:00 2001 From: Steven Valeri Date: Mon, 14 Nov 2022 23:40:20 -0500 Subject: [PATCH 53/87] fix: add validation to simpleFlashLoan --- .../libraries/logic/ValidationLogic.sol | 7 ++--- test-suites/pool-simple-flashloan.spec.ts | 31 +++++++++++++++++-- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/contracts/protocol/libraries/logic/ValidationLogic.sol b/contracts/protocol/libraries/logic/ValidationLogic.sol index 83a5da98c..aff2d843f 100644 --- a/contracts/protocol/libraries/logic/ValidationLogic.sol +++ b/contracts/protocol/libraries/logic/ValidationLogic.sol @@ -454,11 +454,7 @@ library ValidationLogic { ) internal view { require(assets.length == amounts.length, Errors.INCONSISTENT_FLASHLOAN_PARAMS); for (uint256 i = 0; i < assets.length; i++) { - DataTypes.ReserveConfigurationMap memory configuration = reservesData[assets[i]] - .configuration; - require(!configuration.getPaused(), Errors.RESERVE_PAUSED); - require(configuration.getActive(), Errors.RESERVE_INACTIVE); - require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED); + validateFlashloanSimple(reservesData[assets[i]]); } } @@ -470,6 +466,7 @@ library ValidationLogic { DataTypes.ReserveConfigurationMap memory configuration = reserve.configuration; require(!configuration.getPaused(), Errors.RESERVE_PAUSED); require(configuration.getActive(), Errors.RESERVE_INACTIVE); + require(configuration.getFlashLoanEnabled(), Errors.FLASHLOAN_DISABLED); } struct ValidateLiquidationCallLocalVars { diff --git a/test-suites/pool-simple-flashloan.spec.ts b/test-suites/pool-simple-flashloan.spec.ts index a198d8e29..e8a21597e 100644 --- a/test-suites/pool-simple-flashloan.spec.ts +++ b/test-suites/pool-simple-flashloan.spec.ts @@ -18,8 +18,11 @@ import { waitForTx } from '@aave/deploy-v3'; makeSuite('Pool: Simple FlashLoan', (testEnv: TestEnv) => { let _mockFlashLoanSimpleReceiver = {} as MockFlashLoanSimpleReceiver; - const { ERC20_TRANSFER_AMOUNT_EXCEEDS_BALANCE, INVALID_FLASHLOAN_EXECUTOR_RETURN } = - ProtocolErrors; + const { + ERC20_TRANSFER_AMOUNT_EXCEEDS_BALANCE, + INVALID_FLASHLOAN_EXECUTOR_RETURN, + FLASHLOAN_DISABLED, + } = ProtocolErrors; const TOTAL_PREMIUM = 9; const PREMIUM_TO_PROTOCOL = 3000; @@ -178,6 +181,30 @@ makeSuite('Pool: Simple FlashLoan', (testEnv: TestEnv) => { ).to.be.equal(reservesBefore); }); + it('Takes a simple ETH flashloan after flashloaning disabled', async () => { + const { pool, configurator, helpersContract, weth } = testEnv; + + expect(await configurator.setReserveFlashLoaning(weth.address, false)); + let wethFlashLoanEnabled = await helpersContract.getFlashLoanEnabled(weth.address); + expect(wethFlashLoanEnabled).to.be.equal(false); + + const wethFlashBorrowedAmount = ethers.utils.parseEther('0.8'); + + await expect( + pool.flashLoanSimple( + _mockFlashLoanSimpleReceiver.address, + weth.address, + wethFlashBorrowedAmount, + '0x10', + '0' + ) + ).to.be.revertedWith(FLASHLOAN_DISABLED); + + expect(await configurator.setReserveFlashLoaning(weth.address, true)); + wethFlashLoanEnabled = await helpersContract.getFlashLoanEnabled(weth.address); + expect(wethFlashLoanEnabled).to.be.equal(true); + }); + it('Takes WETH flashloan, does not return the funds (revert expected)', async () => { const { pool, weth, users } = testEnv; const caller = users[1]; From 7f6ec744f96c1a423aa21f09f80867f3135e14bd Mon Sep 17 00:00:00 2001 From: eboado Date: Tue, 15 Nov 2022 12:06:31 +0100 Subject: [PATCH 54/87] Solidity: - Optimised calculations on ValidationLogic - Renamed error id to be more precise Tests: - Added tests for changes on validations. --- .../protocol/libraries/helpers/Errors.sol | 2 +- .../libraries/logic/ValidationLogic.sol | 9 +- helpers/types.ts | 2 +- test-suites/pool-drop-reserve.spec.ts | 6 +- test-suites/pool-edge.spec.ts | 235 +++++++++++++++--- 5 files changed, 211 insertions(+), 43 deletions(-) diff --git a/contracts/protocol/libraries/helpers/Errors.sol b/contracts/protocol/libraries/helpers/Errors.sol index 640e46322..b96e193bc 100644 --- a/contracts/protocol/libraries/helpers/Errors.sol +++ b/contracts/protocol/libraries/helpers/Errors.sol @@ -60,7 +60,7 @@ library Errors { string public constant SUPPLY_CAP_EXCEEDED = '51'; // 'Supply cap is exceeded' string public constant UNBACKED_MINT_CAP_EXCEEDED = '52'; // 'Unbacked mint cap is exceeded' string public constant DEBT_CEILING_EXCEEDED = '53'; // 'Debt ceiling is exceeded' - string public constant ATOKEN_SUPPLY_NOT_ZERO = '54'; // 'AToken supply is not zero' + string public constant UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54'; // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)' string public constant STABLE_DEBT_NOT_ZERO = '55'; // 'Stable debt supply is not zero' string public constant VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56'; // 'Variable debt supply is not zero' string public constant LTV_VALIDATION_FAILED = '57'; // 'Ltv validation failed' diff --git a/contracts/protocol/libraries/logic/ValidationLogic.sol b/contracts/protocol/libraries/logic/ValidationLogic.sol index cf117ff4f..4d4ac94e5 100644 --- a/contracts/protocol/libraries/logic/ValidationLogic.sol +++ b/contracts/protocol/libraries/logic/ValidationLogic.sol @@ -71,11 +71,8 @@ library ValidationLogic { uint256 supplyCap = reserveCache.reserveConfiguration.getSupplyCap(); require( supplyCap == 0 || - (IAToken(reserveCache.aTokenAddress).scaledTotalSupply().rayMul( - reserveCache.nextLiquidityIndex - ) + - uint256(reserve.accruedToTreasury).rayMul(reserveCache.nextLiquidityIndex) + - amount) <= + ((IAToken(reserveCache.aTokenAddress).scaledTotalSupply() + + uint256(reserve.accruedToTreasury)).rayMul(reserveCache.nextLiquidityIndex) + amount) <= supplyCap * (10**reserveCache.reserveConfiguration.getDecimals()), Errors.SUPPLY_CAP_EXCEEDED ); @@ -655,7 +652,7 @@ library ValidationLogic { ); require( IERC20(reserve.aTokenAddress).totalSupply() == 0 && reserve.accruedToTreasury == 0, - Errors.ATOKEN_SUPPLY_NOT_ZERO + Errors.UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO ); } diff --git a/helpers/types.ts b/helpers/types.ts index 79cd5f3d6..c1175a348 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -124,7 +124,7 @@ export enum ProtocolErrors { SUPPLY_CAP_EXCEEDED = '51', // 'Supply cap is exceeded' UNBACKED_MINT_CAP_EXCEEDED = '52', // 'Unbacked mint cap is exceeded' DEBT_CEILING_EXCEEDED = '53', // 'Debt ceiling is exceeded' - ATOKEN_SUPPLY_NOT_ZERO = '54', // 'AToken supply is not zero' + UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54', // 'AToken supply is not zero' STABLE_DEBT_NOT_ZERO = '55', // 'Stable debt supply is not zero' VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56', // 'Variable debt supply is not zero' LTV_VALIDATION_FAILED = '57', // 'Ltv validation failed' diff --git a/test-suites/pool-drop-reserve.spec.ts b/test-suites/pool-drop-reserve.spec.ts index e14ffa92e..a0f484fef 100644 --- a/test-suites/pool-drop-reserve.spec.ts +++ b/test-suites/pool-drop-reserve.spec.ts @@ -10,7 +10,7 @@ makeSuite('Pool: Drop Reserve', (testEnv: TestEnv) => { let _mockFlashLoanReceiver = {} as MockFlashLoanReceiver; const { - ATOKEN_SUPPLY_NOT_ZERO, + UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO, STABLE_DEBT_NOT_ZERO, VARIABLE_DEBT_SUPPLY_NOT_ZERO, ASSET_NOT_LISTED, @@ -46,7 +46,7 @@ makeSuite('Pool: Drop Reserve', (testEnv: TestEnv) => { await pool.deposit(dai.address, depositedAmount, deployer.address, 0); - await expect(configurator.dropReserve(dai.address)).to.be.revertedWith(ATOKEN_SUPPLY_NOT_ZERO); + await expect(configurator.dropReserve(dai.address)).to.be.revertedWith(UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO); await pool.connect(user1.signer).deposit(weth.address, depositedAmount, user1.address, 0); @@ -71,7 +71,7 @@ makeSuite('Pool: Drop Reserve', (testEnv: TestEnv) => { ); expect(await pool.connect(user1.signer).repay(dai.address, MAX_UINT_AMOUNT, 2, user1.address)); - await expect(configurator.dropReserve(dai.address)).to.be.revertedWith(ATOKEN_SUPPLY_NOT_ZERO); + await expect(configurator.dropReserve(dai.address)).to.be.revertedWith(UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO); }); it('User 1 withdraw DAI, drop DAI reserve should succeed', async () => { diff --git a/test-suites/pool-edge.spec.ts b/test-suites/pool-edge.spec.ts index d2c18be5e..587c94280 100644 --- a/test-suites/pool-edge.spec.ts +++ b/test-suites/pool-edge.spec.ts @@ -1,14 +1,20 @@ -import { expect } from 'chai'; -import { BigNumber, BigNumberish, utils } from 'ethers'; -import { impersonateAccountsHardhat } from '../helpers/misc-utils'; -import { MAX_UINT_AMOUNT, ZERO_ADDRESS } from '../helpers/constants'; -import { deployMintableERC20 } from '@aave/deploy-v3/dist/helpers/contract-deployments'; -import { ProtocolErrors } from '../helpers/types'; -import { getFirstSigner } from '@aave/deploy-v3/dist/helpers/utilities/signer'; -import { topUpNonPayableWithEther } from './helpers/utils/funds'; -import { makeSuite, TestEnv } from './helpers/make-suite'; -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { evmSnapshot, evmRevert, getPoolLibraries } from '@aave/deploy-v3'; +import {expect} from 'chai'; +import {BigNumber, BigNumberish, utils} from 'ethers'; +import {impersonateAccountsHardhat} from '../helpers/misc-utils'; +import {MAX_UINT_AMOUNT, ZERO_ADDRESS} from '../helpers/constants'; +import {deployMintableERC20} from '@aave/deploy-v3/dist/helpers/contract-deployments'; +import {ProtocolErrors} from '../helpers/types'; +import {getFirstSigner} from '@aave/deploy-v3/dist/helpers/utilities/signer'; +import {topUpNonPayableWithEther} from './helpers/utils/funds'; +import {makeSuite, TestEnv} from './helpers/make-suite'; +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import { + evmSnapshot, + evmRevert, + getPoolLibraries, + MockFlashLoanReceiver, + getMockFlashLoanReceiver, +} from '@aave/deploy-v3'; import { MockPoolInherited__factory, MockReserveInterestRateStrategy__factory, @@ -16,10 +22,10 @@ import { VariableDebtToken__factory, AToken__factory, Pool__factory, - InitializableImmutableAdminUpgradeabilityProxy, ERC20__factory, } from '../types'; -import { getProxyImplementation } from '../helpers/contracts-helpers'; +import {getProxyImplementation} from '../helpers/contracts-helpers'; +import {ethers} from 'hardhat'; declare var hre: HardhatRuntimeEnvironment; @@ -35,15 +41,22 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { DEBT_CEILING_NOT_ZERO, ASSET_NOT_LISTED, ZERO_ADDRESS_NOT_VALID, + UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO, + SUPPLY_CAP_EXCEEDED, + RESERVE_LIQUIDITY_NOT_ZERO, } = ProtocolErrors; const MAX_STABLE_RATE_BORROW_SIZE_PERCENT = 2500; const MAX_NUMBER_RESERVES = 128; + const TOTAL_PREMIUM = 9; + const PREMIUM_TO_PROTOCOL = 3000; const POOL_ID = utils.formatBytes32String('POOL'); let snap: string; + let _mockFlashLoanReceiver = {} as MockFlashLoanReceiver; + beforeEach(async () => { snap = await evmSnapshot(); }); @@ -59,7 +72,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { dai, users: [user0], } = testEnv; - const { deployer: deployerName } = await hre.getNamedAccounts(); + const {deployer: deployerName} = await hre.getNamedAccounts(); // Deploy the mock Pool with a `dropReserve` skipping the checks const NEW_POOL_IMPL_ARTIFACT = await hre.deployments.deploy('MockPoolInheritedDropper', { @@ -129,7 +142,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { addressesProvider, users: [deployer], } = testEnv; - const { deployer: deployerName } = await hre.getNamedAccounts(); + const {deployer: deployerName} = await hre.getNamedAccounts(); const NEW_POOL_IMPL_ARTIFACT = await hre.deployments.deploy('Pool', { contract: 'Pool', @@ -155,7 +168,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Check initialization', async () => { - const { pool } = testEnv; + const {pool} = testEnv; expect(await pool.MAX_STABLE_RATE_BORROW_SIZE_PERCENT()).to.be.eq( MAX_STABLE_RATE_BORROW_SIZE_PERCENT @@ -164,7 +177,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Tries to initialize a reserve as non PoolConfigurator (revert expected)', async () => { - const { pool, users, dai, helpersContract } = testEnv; + const {pool, users, dai, helpersContract} = testEnv; const config = await helpersContract.getReserveTokensAddresses(dai.address); @@ -249,7 +262,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Call `mintToTreasury()` on a pool with an inactive reserve', async () => { - const { pool, poolAdmin, dai, users, configurator } = testEnv; + const {pool, poolAdmin, dai, users, configurator} = testEnv; // Deactivate reserve expect(await configurator.connect(poolAdmin.signer).setReserveActive(dai.address, false)); @@ -259,7 +272,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Tries to call `finalizeTransfer()` by a non-aToken address (revert expected)', async () => { - const { pool, dai, users } = testEnv; + const {pool, dai, users} = testEnv; await expect( pool @@ -269,7 +282,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Tries to call `initReserve()` with an EOA as reserve (revert expected)', async () => { - const { pool, deployer, users, configurator } = testEnv; + const {pool, deployer, users, configurator} = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -284,7 +297,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('PoolConfigurator updates the ReserveInterestRateStrategy address', async () => { - const { pool, deployer, dai, configurator } = testEnv; + const {pool, deployer, dai, configurator} = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -302,7 +315,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('PoolConfigurator updates the ReserveInterestRateStrategy address for asset 0', async () => { - const { pool, deployer, dai, configurator } = testEnv; + const {pool, deployer, dai, configurator} = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -315,7 +328,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('PoolConfigurator updates the ReserveInterestRateStrategy address for an unlisted asset (revert expected)', async () => { - const { pool, deployer, dai, configurator, users } = testEnv; + const {pool, deployer, dai, configurator, users} = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -330,14 +343,14 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Activates the zero address reserve for borrowing via pool admin (expect revert)', async () => { - const { configurator } = testEnv; + const {configurator} = testEnv; await expect(configurator.setReserveBorrowing(ZERO_ADDRESS, true)).to.be.revertedWith( ZERO_ADDRESS_NOT_VALID ); }); it('Initialize an already initialized reserve. ReserveLogic `init` where aTokenAddress != ZERO_ADDRESS (revert expected)', async () => { - const { pool, dai, deployer, configurator } = testEnv; + const {pool, dai, deployer, configurator} = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -363,7 +376,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { * `_addReserveToList()` is called from `initReserve`. However, in `initReserve` we run `init` before the `_addReserveToList()`, * and in `init` we are checking if `aTokenAddress == address(0)`, so to bypass that we need this odd init. */ - const { pool, dai, deployer, configurator } = testEnv; + const {pool, dai, deployer, configurator} = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -406,8 +419,8 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { it('Initialize reserves until max, then add one more (revert expected)', async () => { // Upgrade the Pool to update the maximum number of reserves - const { addressesProvider, poolAdmin, pool, dai, deployer, configurator } = testEnv; - const { deployer: deployerName } = await hre.getNamedAccounts(); + const {addressesProvider, poolAdmin, pool, dai, deployer, configurator} = testEnv; + const {deployer: deployerName} = await hre.getNamedAccounts(); // Impersonate the PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -475,7 +488,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { * 3. Init a new asset. * Intended behaviour new asset is inserted into one of the available spots in */ - const { configurator, pool, poolAdmin, addressesProvider } = testEnv; + const {configurator, pool, poolAdmin, addressesProvider} = testEnv; const reservesListBefore = await pool.connect(configurator.signer).getReservesList(); @@ -574,8 +587,8 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { */ // Upgrade the Pool to update the maximum number of reserves - const { addressesProvider, poolAdmin, pool, dai, deployer, configurator } = testEnv; - const { deployer: deployerName } = await hre.getNamedAccounts(); + const {addressesProvider, poolAdmin, pool, dai, deployer, configurator} = testEnv; + const {deployer: deployerName} = await hre.getNamedAccounts(); // Impersonate the PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -707,7 +720,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Tries to initialize a reserve with an AToken, StableDebtToken, and VariableDebt each deployed with the wrong pool address (revert expected)', async () => { - const { pool, deployer, configurator, addressesProvider } = testEnv; + const {pool, deployer, configurator, addressesProvider} = testEnv; const NEW_POOL_IMPL_ARTIFACT = await hre.deployments.deploy('DummyPool', { contract: 'Pool', @@ -793,4 +806,162 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { initInputParams[0].variableDebtTokenImpl = variableDebtTokenImp.address; expect(await configurator.initReserves(initInputParams)); }); + + it('dropReserve(). Only allows to drop a reserve if both the aToken supply and accruedToTreasury are 0', async () => { + const { + configurator, + pool, + weth, + aWETH, + dai, + users: [user0], + } = testEnv; + + _mockFlashLoanReceiver = await getMockFlashLoanReceiver(); + + await configurator.updateFlashloanPremiumTotal(TOTAL_PREMIUM); + await configurator.updateFlashloanPremiumToProtocol(PREMIUM_TO_PROTOCOL); + + const userAddress = user0.address; + const amountToDeposit = ethers.utils.parseEther('1'); + + await weth['mint(uint256)'](amountToDeposit); + + await weth.approve(pool.address, MAX_UINT_AMOUNT); + + await pool.deposit(weth.address, amountToDeposit, userAddress, '0'); + + const wethFlashBorrowedAmount = ethers.utils.parseEther('0.8'); + + await pool.flashLoan( + _mockFlashLoanReceiver.address, + [weth.address], + [wethFlashBorrowedAmount], + [0], + _mockFlashLoanReceiver.address, + '0x10', + '0' + ); + + await pool.connect(user0.signer).withdraw(weth.address, MAX_UINT_AMOUNT, userAddress); + + await expect( + configurator.dropReserve(weth.address), + 'dropReserve() should not be possible as there are funds' + ).to.be.revertedWith(UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO); + + await pool.mintToTreasury([weth.address]); + + // Impersonate Collector + const collectorAddress = await aWETH.RESERVE_TREASURY_ADDRESS(); + await topUpNonPayableWithEther(user0.signer, [collectorAddress], utils.parseEther('1')); + await impersonateAccountsHardhat([collectorAddress]); + const collectorSigner = await hre.ethers.getSigner(collectorAddress); + await pool.connect(collectorSigner).withdraw(weth.address, MAX_UINT_AMOUNT, collectorAddress); + + await configurator.dropReserve(weth.address); + }); + + it('validateSupply(). Only allows to supply if amount + (scaled aToken supply + accruedToTreasury) <= supplyCap', async () => { + const { + configurator, + pool, + weth, + aWETH, + users: [user0], + } = testEnv; + + _mockFlashLoanReceiver = await getMockFlashLoanReceiver(); + + await configurator.updateFlashloanPremiumTotal(TOTAL_PREMIUM); + await configurator.updateFlashloanPremiumToProtocol(PREMIUM_TO_PROTOCOL); + + const userAddress = user0.address; + const amountToDeposit = ethers.utils.parseEther('100000'); + + await weth['mint(uint256)'](amountToDeposit.add(ethers.utils.parseEther('30'))); + + await weth.approve(pool.address, MAX_UINT_AMOUNT); + + await pool.deposit(weth.address, amountToDeposit, userAddress, '0'); + + const wethFlashBorrowedAmount = ethers.utils.parseEther('100000'); + + await pool.flashLoan( + _mockFlashLoanReceiver.address, + [weth.address], + [wethFlashBorrowedAmount], + [0], + _mockFlashLoanReceiver.address, + '0x10', + '0' + ); + + // At this point the totalSupply + accruedToTreasury is ~100090 WETH, with 100063 from supply and ~27 from accruedToTreasury + // so to properly test the supply cap condition: + // - Set supply cap above that, at 110 WETH + // - Try to supply 30 WETH more . Should work if not taken into account accruedToTreasury, but will not + // - Try to supply 5 WETH more. Should work + + await configurator.setSupplyCap(weth.address, BigNumber.from('100000').add('110')); + + await expect( + pool.deposit(weth.address, ethers.utils.parseEther('30'), userAddress, '0') + ).to.be.revertedWith(SUPPLY_CAP_EXCEEDED); + + await pool.deposit(weth.address, ethers.utils.parseEther('5'), userAddress, '0'); + }); + + it('_checkNoSuppliers() (PoolConfigurator). Properly disables actions if aToken supply == 0, but accruedToTreasury != 0', async () => { + const { + configurator, + pool, + weth, + aWETH, + users: [user0], + } = testEnv; + + _mockFlashLoanReceiver = await getMockFlashLoanReceiver(); + + await configurator.updateFlashloanPremiumTotal(TOTAL_PREMIUM); + await configurator.updateFlashloanPremiumToProtocol(PREMIUM_TO_PROTOCOL); + + const userAddress = user0.address; + const amountToDeposit = ethers.utils.parseEther('100000'); + + await weth['mint(uint256)'](amountToDeposit.add(ethers.utils.parseEther('30'))); + + await weth.approve(pool.address, MAX_UINT_AMOUNT); + + await pool.deposit(weth.address, amountToDeposit, userAddress, '0'); + + const wethFlashBorrowedAmount = ethers.utils.parseEther('100000'); + + await pool.flashLoan( + _mockFlashLoanReceiver.address, + [weth.address], + [wethFlashBorrowedAmount], + [0], + _mockFlashLoanReceiver.address, + '0x10', + '0' + ); + + await pool.connect(user0.signer).withdraw(weth.address, MAX_UINT_AMOUNT, userAddress); + + await expect(configurator.setReserveActive(weth.address, false)).to.be.revertedWith( + RESERVE_LIQUIDITY_NOT_ZERO + ); + + await pool.mintToTreasury([weth.address]); + + // Impersonate Collector + const collectorAddress = await aWETH.RESERVE_TREASURY_ADDRESS(); + await topUpNonPayableWithEther(user0.signer, [collectorAddress], utils.parseEther('1')); + await impersonateAccountsHardhat([collectorAddress]); + const collectorSigner = await hre.ethers.getSigner(collectorAddress); + await pool.connect(collectorSigner).withdraw(weth.address, MAX_UINT_AMOUNT, collectorAddress); + + await configurator.setReserveActive(weth.address, false); + }); }); From fcc79013ed46d4e030dd0d77339521265798b04e Mon Sep 17 00:00:00 2001 From: Ernesto Boado Date: Tue, 15 Nov 2022 13:33:31 +0100 Subject: [PATCH 55/87] Update helpers/types.ts Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> --- helpers/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/types.ts b/helpers/types.ts index c1175a348..a798a9f21 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -124,7 +124,7 @@ export enum ProtocolErrors { SUPPLY_CAP_EXCEEDED = '51', // 'Supply cap is exceeded' UNBACKED_MINT_CAP_EXCEEDED = '52', // 'Unbacked mint cap is exceeded' DEBT_CEILING_EXCEEDED = '53', // 'Debt ceiling is exceeded' - UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54', // 'AToken supply is not zero' + UNDERLYING_CLAIMABLE_RIGHTS_NOT_ZERO = '54', // 'Claimable rights over underlying not zero (aToken supply or accruedToTreasury)' STABLE_DEBT_NOT_ZERO = '55', // 'Stable debt supply is not zero' VARIABLE_DEBT_SUPPLY_NOT_ZERO = '56', // 'Variable debt supply is not zero' LTV_VALIDATION_FAILED = '57', // 'Ltv validation failed' From 7d8b7bf5acf016e541beaa36e2e82783ff74b846 Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Tue, 15 Nov 2022 13:45:21 +0100 Subject: [PATCH 56/87] fix: Fix test of inaccuracy when liquidationProtocolFee is on --- test-suites/liquidation-with-fee.spec.ts | 96 +++++++++++++----------- 1 file changed, 54 insertions(+), 42 deletions(-) diff --git a/test-suites/liquidation-with-fee.spec.ts b/test-suites/liquidation-with-fee.spec.ts index 377275635..e3755f7da 100644 --- a/test-suites/liquidation-with-fee.spec.ts +++ b/test-suites/liquidation-with-fee.spec.ts @@ -1,42 +1,47 @@ -import { expect } from 'chai'; -import { BigNumber, utils } from 'ethers'; -import { MAX_UINT_AMOUNT, oneEther } from '../helpers/constants'; -import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; -import { ProtocolErrors, RateMode } from '../helpers/types'; -import { AToken__factory } from '../types'; -import { calcExpectedStableDebtTokenBalance } from './helpers/utils/calculations'; -import { getReserveData, getUserData } from './helpers/utils/helpers'; -import { makeSuite } from './helpers/make-suite'; -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { waitForTx, increaseTime, evmSnapshot, evmRevert } from '@aave/deploy-v3'; +import {expect} from 'chai'; +import {BigNumber} from 'ethers'; +import {MAX_UINT_AMOUNT, oneEther} from '../helpers/constants'; +import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; +import {ProtocolErrors, RateMode} from '../helpers/types'; +import {AToken__factory} from '../types'; +import {calcExpectedStableDebtTokenBalance} from './helpers/utils/calculations'; +import {getReserveData, getUserData} from './helpers/utils/helpers'; +import {makeSuite} from './helpers/make-suite'; +import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import {waitForTx, increaseTime, evmSnapshot, evmRevert} from '@aave/deploy-v3'; declare var hre: HardhatRuntimeEnvironment; makeSuite('Pool Liquidation: Add fee to liquidations', (testEnv) => { - const { INVALID_HF } = ProtocolErrors; + const {INVALID_HF} = ProtocolErrors; before(async () => { - const { addressesProvider, oracle } = testEnv; + const {addressesProvider, oracle} = testEnv; await waitForTx(await addressesProvider.setPriceOracle(oracle.address)); }); after(async () => { - const { aaveOracle, addressesProvider } = testEnv; + const {aaveOracle, addressesProvider} = testEnv; await waitForTx(await addressesProvider.setPriceOracle(aaveOracle.address)); }); it('position should be liquidated when turn on liquidation protocol fee.', async () => { - const { pool, users, usdc, weth, oracle, configurator, helpersContract } = testEnv; + const { + pool, + users: [depositor, borrower, liquidator], + usdc, + weth, + oracle, + configurator, + helpersContract, + } = testEnv; - const depositor = users[0]; - const borrower = users[1]; - const liquidator = users[2]; + const snapId = await evmSnapshot(); - //1, prepare asset price. - await oracle.setAssetPrice(usdc.address, '1000000000000000'); //weth = 1000 usdc + const daiPrice = await oracle.getAssetPrice(usdc.address); - //2, depositor deposit 100000 usdc and 10 eth + //1. Depositor supplies 10000 USDC and 10 ETH await usdc .connect(depositor.signer) ['mint(uint256)'](await convertToCurrencyDecimals(usdc.address, '10000')); @@ -52,32 +57,38 @@ makeSuite('Pool Liquidation: Add fee to liquidations', (testEnv) => { await weth .connect(depositor.signer) - ['mint(uint256)'](convertToCurrencyDecimals(weth.address, '10')); + ['mint(uint256)'](await convertToCurrencyDecimals(weth.address, '10')); await weth.connect(depositor.signer).approve(pool.address, MAX_UINT_AMOUNT); await pool .connect(depositor.signer) - .supply(weth.address, convertToCurrencyDecimals(weth.address, '10'), depositor.address, 0); + .supply( + weth.address, + await convertToCurrencyDecimals(weth.address, '10'), + depositor.address, + 0 + ); - //3, borrower deposit 10 eth, borrow 5000 usdc + //2. Borrower supplies 10 ETH, and borrows as much USDC as it can await weth .connect(borrower.signer) - ['mint(uint256)'](convertToCurrencyDecimals(weth.address, '10')); + ['mint(uint256)'](await convertToCurrencyDecimals(weth.address, '10')); await weth.connect(borrower.signer).approve(pool.address, MAX_UINT_AMOUNT); await pool .connect(borrower.signer) - .supply(weth.address, convertToCurrencyDecimals(weth.address, '10'), borrower.address, 0); + .supply( + weth.address, + await convertToCurrencyDecimals(weth.address, '10'), + borrower.address, + 0 + ); + const {availableBorrowsBase} = await pool.getUserAccountData(borrower.address); + let toBorrow = availableBorrowsBase.div(daiPrice); await pool .connect(borrower.signer) - .borrow( - usdc.address, - await convertToCurrencyDecimals(usdc.address, '5000'), - RateMode.Variable, - 0, - borrower.address - ); + .borrow(usdc.address, toBorrow, RateMode.Variable, 0, borrower.address); - //4, liquidator deposit 10000 usdc and borrow 5 eth. + //3. Liquidator supplies 10000 USDC and borrow 5 ETH await usdc .connect(liquidator.signer) ['mint(uint256)'](await convertToCurrencyDecimals(usdc.address, '20000')); @@ -95,19 +106,19 @@ makeSuite('Pool Liquidation: Add fee to liquidations', (testEnv) => { .connect(liquidator.signer) .borrow( weth.address, - convertToCurrencyDecimals(weth.address, '5'), + await convertToCurrencyDecimals(weth.address, '1'), RateMode.Variable, 0, liquidator.address ); - //5, advance block to make ETH income index > 1 + //4. Advance block to make ETH income index > 1 await increaseTime(86400); - //6, decrease weth price to allow liquidation - await oracle.setAssetPrice(usdc.address, '20000000000000000'); //weth = 500 usdc + //5. Decrease weth price to allow liquidation + await oracle.setAssetPrice(usdc.address, '8000000000000000'); //weth = 500 usdc - //7, turn on liquidation protocol fee + //7. Turn on liquidation protocol fee expect(await configurator.setLiquidationProtocolFee(weth.address, 500)); const wethLiquidationProtocolFee = await helpersContract.getLiquidationProtocolFee( weth.address @@ -128,14 +139,15 @@ makeSuite('Pool Liquidation: Add fee to liquidations', (testEnv) => { await evmRevert(tmpSnap); } } - expect(await weth.balanceOf(liquidator.address)).to.be.gt( - convertToCurrencyDecimals(weth.address, '5') + await convertToCurrencyDecimals(weth.address, '5') ); + + await evmRevert(snapId); }); it('Sets the WETH protocol liquidation fee to 1000 (10.00%)', async () => { - const { configurator, weth, aave, helpersContract } = testEnv; + const {configurator, weth, aave, helpersContract} = testEnv; const oldWethLiquidationProtocolFee = await helpersContract.getLiquidationProtocolFee( weth.address From f6817ff1a673fdbc5e7c686e38195a3d06e1681a Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Tue, 15 Nov 2022 15:44:39 +0100 Subject: [PATCH 57/87] ci: Fix coverage task of ci --- .solcover.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.solcover.js b/.solcover.js index 71bbe815f..dce1b061e 100644 --- a/.solcover.js +++ b/.solcover.js @@ -3,6 +3,7 @@ const cp = require('child_process'); module.exports = { client: require('ganache-cli'), + configureYulOptimizer: true, skipFiles: ['./mocks', './interfaces', './dependencies'], mocha: { enableTimeouts: false, @@ -12,6 +13,6 @@ module.exports = { }, onCompileComplete: function () { console.log('onCompileComplete hook'); - cp.execSync('. ./setup-test-env.sh', { stdio: 'inherit' }); + cp.execSync('. ./setup-test-env.sh', {stdio: 'inherit'}); }, }; From ab07a4ee2a15cebc4c4c91adbbb60763796373c4 Mon Sep 17 00:00:00 2001 From: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Date: Tue, 15 Nov 2022 17:35:59 +0100 Subject: [PATCH 58/87] Fix event emission of AToken and DebtToken events (#682) * fix: Initial fix for emitting whole balance in Transfer events * fix: Initial fix for emitting accumulating Mint events in transfers * fix: Fix the amount of BalanceTransfer event * test: Add tests for event emission in tokens * fix: Refactor old test cases for AToken events * fix: Fix errors on tests * test: Add failing tests of AToken events due to onBehalfOf mechanism * fix: Fix tests * fix: Fix order of emission of events in AToken ttransfer * fix: Enhance natspec docs of main events * fix: Rename `amount` field in IStableDebtToken to `value` * fix: Add some little refactor to tests * fix: Add emission of Transfer events for accruals in transfer function * fix: Fix caller of Mint event when transferFrom * docs: Fix missing docs in burnScaled function * fix: Add more docs to Burn event * fix: Resolve merge error in tests * fix: Revert changes on event param names of StableDebtToken --- contracts/interfaces/IAToken.sol | 2 +- contracts/interfaces/IScaledBalanceToken.sol | 11 +- contracts/interfaces/IStableDebtToken.sol | 8 +- contracts/protocol/tokenization/AToken.sol | 6 +- .../tokenization/base/IncentivizedERC20.sol | 1 - .../base/ScaledBalanceTokenBase.sol | 38 + test-suites/atoken-event-accounting.spec.ts | 178 ++--- test-suites/atoken-events.spec.ts | 558 +++++++++++++++ test-suites/helpers/utils/helpers.ts | 111 ++- .../helpers/utils/tokenization-events.ts | 676 ++++++++++++++++++ test-suites/stable-debt-token-events.spec.ts | 455 ++++++++++++ test-suites/stable-debt-token.spec.ts | 44 +- .../variable-debt-token-events.spec.ts | 457 ++++++++++++ test-suites/variable-debt-token.spec.ts | 47 +- 14 files changed, 2408 insertions(+), 184 deletions(-) create mode 100644 test-suites/atoken-events.spec.ts create mode 100644 test-suites/helpers/utils/tokenization-events.ts create mode 100644 test-suites/stable-debt-token-events.spec.ts create mode 100644 test-suites/variable-debt-token-events.spec.ts diff --git a/contracts/interfaces/IAToken.sol b/contracts/interfaces/IAToken.sol index dc3b48a0b..40fecd39f 100644 --- a/contracts/interfaces/IAToken.sol +++ b/contracts/interfaces/IAToken.sol @@ -15,7 +15,7 @@ interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken { * @dev Emitted during the transfer action * @param from The user whose tokens are being transferred * @param to The recipient - * @param value The amount being transferred + * @param value The scaled amount being transferred * @param index The next liquidity index of the reserve **/ event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index); diff --git a/contracts/interfaces/IScaledBalanceToken.sol b/contracts/interfaces/IScaledBalanceToken.sol index 89ccddfd8..911bca11d 100644 --- a/contracts/interfaces/IScaledBalanceToken.sol +++ b/contracts/interfaces/IScaledBalanceToken.sol @@ -4,15 +4,15 @@ pragma solidity ^0.8.0; /** * @title IScaledBalanceToken * @author Aave - * @notice Defines the basic interface for a scaledbalance token. + * @notice Defines the basic interface for a scaled-balance token. **/ interface IScaledBalanceToken { /** * @dev Emitted after the mint action * @param caller The address performing the mint * @param onBehalfOf The address of the user that will receive the minted scaled balance tokens - * @param value The amount being minted (user entered amount + balance increase from interest) - * @param balanceIncrease The increase in balance since the last action of the user + * @param value The scaled amount being minted (based on user entered amount and balance increase from interest) + * @param balanceIncrease The increase in scaled balance since the last action of 'onBehalfOf' * @param index The next liquidity index of the reserve **/ event Mint( @@ -25,10 +25,11 @@ interface IScaledBalanceToken { /** * @dev Emitted after scaled balance tokens are burned + * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address * @param from The address from which the scaled tokens will be burned * @param target The address that will receive the underlying, if any - * @param value The amount being burned (user entered amount - balance increase from interest) - * @param balanceIncrease The increase in balance since the last action of the user + * @param value The scaled amount being burned (user entered amount - balance increase from interest) + * @param balanceIncrease The increase in scaled balance since the last action of 'from' * @param index The next liquidity index of the reserve **/ event Burn( diff --git a/contracts/interfaces/IStableDebtToken.sol b/contracts/interfaces/IStableDebtToken.sol index 82352f091..c9d33a80d 100644 --- a/contracts/interfaces/IStableDebtToken.sol +++ b/contracts/interfaces/IStableDebtToken.sol @@ -15,8 +15,8 @@ interface IStableDebtToken is IInitializableDebtToken { * @param user The address of the user who triggered the minting * @param onBehalfOf The recipient of stable debt tokens * @param amount The amount minted (user entered amount + balance increase from interest) - * @param currentBalance The current balance of the user - * @param balanceIncrease The increase in balance since the last action of the user + * @param currentBalance The balance of the user based on the previous balance and balance increase from interest + * @param balanceIncrease The increase in balance since the last action of the user 'onBehalfOf' * @param newRate The rate of the debt after the minting * @param avgStableRate The next average stable rate after the minting * @param newTotalSupply The next total supply of the stable debt token after the action @@ -36,8 +36,8 @@ interface IStableDebtToken is IInitializableDebtToken { * @dev Emitted when new stable debt is burned * @param from The address from which the debt will be burned * @param amount The amount being burned (user entered amount - balance increase from interest) - * @param currentBalance The current balance of the user - * @param balanceIncrease The the increase in balance since the last action of the user + * @param currentBalance The balance of the user based on the previous balance and balance increase from interest + * @param balanceIncrease The increase in balance since the last action of 'from' * @param avgStableRate The next average stable rate after the burning * @param newTotalSupply The next total supply of the stable debt token after the action **/ diff --git a/contracts/protocol/tokenization/AToken.sol b/contracts/protocol/tokenization/AToken.sol index ca09fe189..81989720a 100644 --- a/contracts/protocol/tokenization/AToken.sol +++ b/contracts/protocol/tokenization/AToken.sol @@ -123,8 +123,6 @@ contract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, I // Being a normal transfer, the Transfer() and BalanceTransfer() are emitted // so no need to emit a specific event here _transfer(from, to, value, false); - - emit Transfer(from, to, value); } /// @inheritdoc IERC20 @@ -216,13 +214,13 @@ contract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, I uint256 fromBalanceBefore = super.balanceOf(from).rayMul(index); uint256 toBalanceBefore = super.balanceOf(to).rayMul(index); - super._transfer(from, to, amount.rayDiv(index).toUint128()); + super._transfer(from, to, amount, index); if (validate) { POOL.finalizeTransfer(underlyingAsset, from, to, amount, fromBalanceBefore, toBalanceBefore); } - emit BalanceTransfer(from, to, amount, index); + emit BalanceTransfer(from, to, amount.rayDiv(index), index); } /** diff --git a/contracts/protocol/tokenization/base/IncentivizedERC20.sol b/contracts/protocol/tokenization/base/IncentivizedERC20.sol index 4c0d83c1c..1c684eaf6 100644 --- a/contracts/protocol/tokenization/base/IncentivizedERC20.sol +++ b/contracts/protocol/tokenization/base/IncentivizedERC20.sol @@ -209,7 +209,6 @@ abstract contract IncentivizedERC20 is Context, IERC20Detailed { incentivesControllerLocal.handleAction(recipient, currentTotalSupply, oldRecipientBalance); } } - emit Transfer(sender, recipient, amount); } /** diff --git a/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol b/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol index 119ee2a31..4dcdf009d 100644 --- a/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol +++ b/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol @@ -126,4 +126,42 @@ abstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBa emit Burn(user, target, amountToBurn, balanceIncrease, index); } } + + /** + * @notice Implements the basic logic to transfer scaled balance tokens between two users + * @dev It emits a mint event with the interest accrued per user + * @param sender The source address + * @param recipient The destination address + * @param amount The amount getting transferred + * @param index The next liquidity index of the reserve + **/ + function _transfer( + address sender, + address recipient, + uint256 amount, + uint256 index + ) internal { + uint256 senderScaledBalance = super.balanceOf(sender); + uint256 senderBalanceIncrease = senderScaledBalance.rayMul(index) - + senderScaledBalance.rayMul(_userState[sender].additionalData); + + uint256 recipientScaledBalance = super.balanceOf(recipient); + uint256 recipientBalanceIncrease = recipientScaledBalance.rayMul(index) - + recipientScaledBalance.rayMul(_userState[recipient].additionalData); + + _userState[sender].additionalData = index.toUint128(); + _userState[recipient].additionalData = index.toUint128(); + + super._transfer(sender, recipient, amount.rayDiv(index).toUint128()); + + emit Transfer(address(0), sender, senderBalanceIncrease); + emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index); + + if (recipientBalanceIncrease > 0) { + emit Transfer(address(0), recipient, recipientBalanceIncrease); + emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index); + } + + emit Transfer(sender, recipient, amount); + } } diff --git a/test-suites/atoken-event-accounting.spec.ts b/test-suites/atoken-event-accounting.spec.ts index 67ded1adf..da8830cc2 100644 --- a/test-suites/atoken-event-accounting.spec.ts +++ b/test-suites/atoken-event-accounting.spec.ts @@ -5,8 +5,9 @@ import { MAX_UINT_AMOUNT } from '../helpers/constants'; import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; import { RateMode } from '../helpers/types'; import { makeSuite } from './helpers/make-suite'; +import { getATokenEvent, getVariableDebtTokenEvent } from './helpers/utils/tokenization-events'; -makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { +makeSuite('AToken: Mint and Burn Event Accounting', (testEnv) => { let firstDaiDeposit; let secondDaiDeposit; let thirdDaiDeposit; @@ -24,19 +25,6 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { utils.toUtf8Bytes('Transfer(address,address,uint256)') ); - const aTokenMintEventSignature = utils.keccak256( - utils.toUtf8Bytes('Mint(address,address,uint256,uint256,uint256)') - ); - const aTokenBurnEventSignature = utils.keccak256( - utils.toUtf8Bytes('Burn(address,address,uint256,uint256,uint256)') - ); - const vDebtTokenMintEventSignature = utils.keccak256( - utils.toUtf8Bytes('Mint(address,address,uint256,uint256,uint256)') - ); - const vDebtTokenBurnEventSignature = utils.keccak256( - utils.toUtf8Bytes('Burn(address,address,uint256,uint256,uint256)') - ); - before('User 0 deposits 100 DAI, user 1 deposits 1 WETH, borrows 50 DAI', async () => { const { dai } = testEnv; firstDaiDeposit = await convertToCurrencyDecimals(dai.address, '10000'); @@ -44,7 +32,7 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { thirdDaiDeposit = await convertToCurrencyDecimals(dai.address, '50000'); }); - it('User 1 Deposit dai', async () => { + it('User 1 supplies DAI', async () => { const { dai, aDai, @@ -83,7 +71,7 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { expect(aDaiBalance).to.be.equal(firstDaiDeposit); }); - it('User 1 - Deposit dai on behalf of user 2', async () => { + it('User 1 supplies DAI on behalf of user 2', async () => { const { dai, aDai, @@ -122,7 +110,7 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { expect(aDaiBalance).to.be.equal(firstDaiDeposit); }); - it('User 2 - deposit ETH, borrow Dai', async () => { + it('User 2 supplies ETH,and borrows DAI', async () => { const { dai, weth, @@ -131,17 +119,17 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { helpersContract, } = testEnv; - //user 2 deposits 100 ETH + // user 2 deposits 100 ETH const amountETHtoDeposit = await convertToCurrencyDecimals(weth.address, '20000'); - //mints WETH to borrower + // mints WETH to borrower await waitForTx( await weth .connect(borrower.signer) ['mint(uint256)'](await convertToCurrencyDecimals(weth.address, '20000')) ); - //approve protocol to access the borrower wallet + // approve protocol to access the borrower wallet await waitForTx(await weth.connect(borrower.signer).approve(pool.address, MAX_UINT_AMOUNT)); await waitForTx( @@ -150,7 +138,7 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { .deposit(weth.address, amountETHtoDeposit, borrower.address, '0') ); - // Borrow dai + // Borrow DAI firstDaiBorrow = await convertToCurrencyDecimals(dai.address, '5000'); await waitForTx( @@ -168,7 +156,7 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { expect(borrowerDaiData.currentVariableDebt).to.be.equal(firstDaiBorrow); }); - it('User 2 - borrow more Dai - confirm mint event includes accrued interest', async () => { + it('User 2 borrows more DAI - confirm mint event includes accrued interest', async () => { const { dai, variableDebtDai, @@ -197,11 +185,9 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { const parsedTransferEvent = variableDebtDai.interface.parseLog(rawTransferEvents[0]); // get mint event - const rawMintEvents = borrowReceipt.logs.filter( - (log) => log.topics[0] === vDebtTokenMintEventSignature - ); - expect(rawMintEvents.length).to.equal(1, 'Incorrect number of Mint Events'); - const parsedMintEvent = variableDebtDai.interface.parseLog(rawMintEvents[0]); + const parsedMintEvents = getVariableDebtTokenEvent(variableDebtDai, borrowReceipt, 'Mint'); + expect(parsedMintEvents.length).to.equal(1, 'Incorrect number of Mint Events'); + const parsedMintEvent = parsedMintEvents[0]; // check transfer event parameters expect(parsedTransferEvent.args.from).to.equal(ZERO_ADDRESS); @@ -209,32 +195,30 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { expect(parsedTransferEvent.args.value).to.be.closeTo(totalMinted, 2); // check mint event parameters - expect(parsedMintEvent.args.caller).to.equal(borrower.address); - expect(parsedMintEvent.args.onBehalfOf).to.equal(borrower.address); - expect(parsedMintEvent.args.value).to.be.closeTo(totalMinted, 2); - expect(parsedMintEvent.args.balanceIncrease).to.be.closeTo(accruedDebt1, 2); + expect(parsedMintEvent.caller).to.equal(borrower.address); + expect(parsedMintEvent.onBehalfOf).to.equal(borrower.address); + expect(parsedMintEvent.value).to.be.closeTo(totalMinted, 2); + expect(parsedMintEvent.balanceIncrease).to.be.closeTo(accruedDebt1, 2); }); - it('User 1 - deposit more Dai - confirm mint event includes accrued interest', async () => { + it('User 1 - supplies more DAI - confirm mint event includes accrued interest', async () => { const { dai, aDai, users: [depositor], pool, - helpersContract, } = testEnv; await increaseTime(86400); - //mints DAI to depositor + // mints DAI to depositor await waitForTx( await dai .connect(depositor.signer) ['mint(uint256)'](await convertToCurrencyDecimals(dai.address, '20000')) ); - //user 1 deposits 2000 DAI - + // user 1 deposits 2000 DAI const depositTx = await waitForTx( await pool .connect(depositor.signer) @@ -253,11 +237,9 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { const parsedTransferEvent = aDai.interface.parseLog(rawTransferEvents[1]); // get mint event - const rawMintEvents = depositTx.logs.filter( - (log) => log.topics[0] === aTokenMintEventSignature - ); - expect(rawMintEvents.length).to.equal(1, 'Incorrect number of Mint Events'); - const parsedMintEvent = aDai.interface.parseLog(rawMintEvents[0]); + const parsedMintEvents = getATokenEvent(aDai, depositTx, 'Mint'); + expect(parsedMintEvents.length).to.equal(1, 'Incorrect number of Mint Events'); + const parsedMintEvent = parsedMintEvents[0]; // check transfer event parameters expect(parsedTransferEvent.args.from).to.equal(ZERO_ADDRESS); @@ -265,13 +247,13 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { expect(parsedTransferEvent.args.value).to.be.closeTo(totalMinted, 2); // check mint event parameters - expect(parsedMintEvent.args.caller).to.equal(depositor.address); - expect(parsedMintEvent.args.onBehalfOf).to.equal(depositor.address); - expect(parsedMintEvent.args.value).to.be.closeTo(totalMinted, 2); - expect(parsedMintEvent.args.balanceIncrease).to.be.closeTo(accruedInterest1, 2); + expect(parsedMintEvent.caller).to.equal(depositor.address); + expect(parsedMintEvent.onBehalfOf).to.equal(depositor.address); + expect(parsedMintEvent.value).to.be.closeTo(totalMinted, 2); + expect(parsedMintEvent.balanceIncrease).to.be.closeTo(accruedInterest1, 2); }); - it('User 1 - deposit more Dai again - confirm mint event includes accrued interest', async () => { + it('User 1 supplies more DAI again - confirm mint event includes accrued interest', async () => { const { dai, aDai, @@ -282,14 +264,14 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { await increaseTime(86400); - //mints DAI to depositor + // mints DAI to depositor await waitForTx( await dai .connect(depositor.signer) ['mint(uint256)'](await convertToCurrencyDecimals(dai.address, '50000')) ); - //user 1 deposits 2000 DAI + // user 1 deposits 2000 DAI const depositTx = await pool .connect(depositor.signer) .deposit(dai.address, thirdDaiDeposit, depositor.address, '0'); @@ -312,11 +294,9 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { const parsedTransferEvent = aDai.interface.parseLog(rawTransferEvents[1]); // get mint event - const rawMintEvents = depositReceipt.logs.filter( - (log) => log.topics[0] === aTokenMintEventSignature - ); - expect(rawMintEvents.length).to.equal(1, 'Incorrect number of Mint Events'); - const parsedMintEvent = aDai.interface.parseLog(rawMintEvents[0]); + const parsedMintEvents = getATokenEvent(aDai, depositReceipt, 'Mint'); + expect(parsedMintEvents.length).to.equal(1, 'Incorrect number of Mint Events'); + const parsedMintEvent = parsedMintEvents[0]; // check transfer event expect(parsedTransferEvent.args.from).to.equal(ZERO_ADDRESS); @@ -324,14 +304,14 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { expect(parsedTransferEvent.args.value).to.be.closeTo(totalMinted, 2); // check mint event - expect(parsedMintEvent.args.caller).to.equal(depositor.address); - expect(parsedMintEvent.args.onBehalfOf).to.equal(depositor.address); - expect(parsedMintEvent.args.value).to.be.closeTo(totalMinted, 2); - expect(parsedMintEvent.args.balanceIncrease).to.be.closeTo(accruedInterest2, 2); - expect(parsedMintEvent.args.index).to.equal(daiReserveData.liquidityIndex); + expect(parsedMintEvent.caller).to.equal(depositor.address); + expect(parsedMintEvent.onBehalfOf).to.equal(depositor.address); + expect(parsedMintEvent.value).to.be.closeTo(totalMinted, 2); + expect(parsedMintEvent.balanceIncrease).to.be.closeTo(accruedInterest2, 2); + expect(parsedMintEvent.index).to.equal(daiReserveData.liquidityIndex); }); - it('User 2 - repay all remaining dai', async () => { + it('User 2 repays all remaining DAI', async () => { const { dai, variableDebtDai, @@ -378,11 +358,9 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { const parsedTransferEvent = variableDebtDai.interface.parseLog(rawTransferEvents[0]); // get burn event - const rawBurnEvents = repayReceipt.logs.filter( - (log) => log.topics[0] === vDebtTokenBurnEventSignature - ); - expect(rawBurnEvents.length).to.equal(1, 'Incorrect number of Burn Events'); - const parsedBurnEvent = variableDebtDai.interface.parseLog(rawBurnEvents[0]); + const parsedBurnEvents = getVariableDebtTokenEvent(variableDebtDai, repayReceipt, 'Burn'); + expect(parsedBurnEvents.length).to.equal(1, 'Incorrect number of Burn Events'); + const parsedBurnEvent = parsedBurnEvents[0]; // check burn parameters expect(parsedTransferEvent.args.from).to.equal(borrower.address); @@ -390,13 +368,13 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { expect(parsedTransferEvent.args.value).to.be.closeTo(totalBurned, 2); // check burn parameters - expect(parsedBurnEvent.args.from).to.equal(borrower.address); - expect(parsedBurnEvent.args.value).to.be.closeTo(totalBurned, 2); - expect(parsedBurnEvent.args.balanceIncrease).to.be.closeTo(accruedDebt3, 2); + expect(parsedBurnEvent.from).to.equal(borrower.address); + expect(parsedBurnEvent.value).to.be.closeTo(totalBurned, 2); + expect(parsedBurnEvent.balanceIncrease).to.be.closeTo(accruedDebt3, 2); expect(borrowerDaiData.currentVariableDebt).to.be.equal(0); }); - it('User 1 - withdraws all deposited funds and interest', async () => { + it('User 1 withdraws all deposited funds and interest', async () => { const { dai, aDai, @@ -433,11 +411,9 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { const parsedTransferEvent = aDai.interface.parseLog(rawTransferEvents[0]); // get burn event - const rawBurnEvents = withdrawReceipt.logs.filter( - (log) => log.topics[0] === aTokenBurnEventSignature - ); - expect(rawBurnEvents.length).to.equal(1, 'Incorrect number of Burn Events'); - const parsedBurnEvent = aDai.interface.parseLog(rawBurnEvents[0]); + const parsedBurnEvents = getATokenEvent(aDai, withdrawReceipt, 'Burn'); + expect(parsedBurnEvents.length).to.equal(1, 'Incorrect number of Burn Events'); + const parsedBurnEvent = parsedBurnEvents[0]; // check transfer parameters expect(parsedTransferEvent.args.from).to.equal(depositor.address); @@ -445,30 +421,30 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { expect(parsedTransferEvent.args.value).to.be.closeTo(totalBurned, 2); // check burn parameters - expect(parsedBurnEvent.args.from).to.equal(depositor.address); - expect(parsedBurnEvent.args.target).to.equal(depositor.address); - expect(parsedBurnEvent.args.value).to.be.closeTo(totalBurned, 2); - expect(parsedBurnEvent.args.balanceIncrease).to.be.closeTo(accruedInterest3, 2); - expect(parsedBurnEvent.args.index).to.equal(daiReserveData.liquidityIndex); + expect(parsedBurnEvent.from).to.equal(depositor.address); + expect(parsedBurnEvent.target).to.equal(depositor.address); + expect(parsedBurnEvent.value).to.be.closeTo(totalBurned, 2); + expect(parsedBurnEvent.balanceIncrease).to.be.closeTo(accruedInterest3, 2); + expect(parsedBurnEvent.index).to.equal(daiReserveData.liquidityIndex); }); - it('User 2 - borrow, pass time and repay dai less than accrued debt', async () => { + it('User 2 borrows, pass time and repay DAI less than accrued debt', async () => { const { dai, variableDebtDai, users: [depositor, borrower], pool, } = testEnv; - // User 1 - Deposit dai + + // User 1 - Deposit DAI await waitForTx( await pool .connect(depositor.signer) .deposit(dai.address, firstDaiDeposit, depositor.address, '0') ); - // User 2 - Borrow dai + // User 2 - Borrow DAI const borrowAmount = await convertToCurrencyDecimals(dai.address, '8000'); - await waitForTx( await pool .connect(borrower.signer) @@ -485,7 +461,7 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { // approve protocol to access depositor wallet await waitForTx(await dai.connect(borrower.signer).approve(pool.address, MAX_UINT_AMOUNT)); - // repay dai loan + // repay DAI loan const repayTx = await pool .connect(borrower.signer) .repay(dai.address, smallRepay, RateMode.Variable, borrower.address); @@ -502,11 +478,9 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { const parsedTransferEvent = variableDebtDai.interface.parseLog(rawTransferEvents[0]); // get mint event - const rawMintEvents = repayReceipt.logs.filter( - (log) => log.topics[0] === vDebtTokenMintEventSignature - ); - expect(rawMintEvents.length).to.equal(1, 'Incorrect number of Mint Events'); - const parsedMintEvent = variableDebtDai.interface.parseLog(rawMintEvents[0]); + const parsedMintEvents = getVariableDebtTokenEvent(variableDebtDai, repayReceipt, 'Mint'); + expect(parsedMintEvents.length).to.equal(1, 'Incorrect number of Mint Events'); + const parsedMintEvent = parsedMintEvents[0]; // check transfer event expect(parsedTransferEvent.args.from).to.equal(ZERO_ADDRESS); @@ -514,13 +488,13 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { expect(parsedTransferEvent.args.value).to.be.closeTo(totalMinted, 2); // check mint event - expect(parsedMintEvent.args.caller).to.equal(borrower.address); - expect(parsedMintEvent.args.onBehalfOf).to.equal(borrower.address); - expect(parsedMintEvent.args.value).to.be.closeTo(totalMinted, 2); - expect(parsedMintEvent.args.balanceIncrease).to.be.closeTo(totalMinted.add(smallRepay), 2); + expect(parsedMintEvent.caller).to.equal(borrower.address); + expect(parsedMintEvent.onBehalfOf).to.equal(borrower.address); + expect(parsedMintEvent.value).to.be.closeTo(totalMinted, 2); + expect(parsedMintEvent.balanceIncrease).to.be.closeTo(totalMinted.add(smallRepay), 2); }); - it('User 1 - withdraw amount less than accrued interest', async () => { + it('User 1 withdraws amount less than accrued interest', async () => { const { dai, aDai, @@ -549,11 +523,9 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { const parsedTransferEvent = aDai.interface.parseLog(rawTransferEvents[0]); // get mint event - const rawMintEvents = withdrawReceipt.logs.filter( - (log) => log.topics[0] === aTokenMintEventSignature - ); - expect(rawMintEvents.length).to.equal(1, 'Incorrect number of Mint Events'); - const parsedMintEvent = aDai.interface.parseLog(rawMintEvents[0]); + const parsedMintEvents = getATokenEvent(aDai, withdrawReceipt, 'Mint'); + expect(parsedMintEvents.length).to.equal(1, 'Incorrect number of Mint Events'); + const parsedMintEvent = parsedMintEvents[0]; // check transfer event expect(parsedTransferEvent.args.from).to.equal(ZERO_ADDRESS); @@ -561,10 +533,10 @@ makeSuite('AToken Mint and Burn Event Accounting', (testEnv) => { expect(parsedTransferEvent.args.value).to.be.closeTo(totalMinted, 2); // check mint event - expect(parsedMintEvent.args.caller).to.equal(depositor.address); - expect(parsedMintEvent.args.onBehalfOf).to.equal(depositor.address); - expect(parsedMintEvent.args.value).to.be.closeTo(totalMinted, 2); - expect(parsedMintEvent.args.balanceIncrease).to.be.closeTo(totalMinted.add(smallWithdrawal), 2); - expect(parsedMintEvent.args.index).to.equal(daiReserveData.liquidityIndex); + expect(parsedMintEvent.caller).to.equal(depositor.address); + expect(parsedMintEvent.onBehalfOf).to.equal(depositor.address); + expect(parsedMintEvent.value).to.be.closeTo(totalMinted, 2); + expect(parsedMintEvent.balanceIncrease).to.be.closeTo(totalMinted.add(smallWithdrawal), 2); + expect(parsedMintEvent.index).to.equal(daiReserveData.liquidityIndex); }); }); diff --git a/test-suites/atoken-events.spec.ts b/test-suites/atoken-events.spec.ts new file mode 100644 index 000000000..6de8cf0cb --- /dev/null +++ b/test-suites/atoken-events.spec.ts @@ -0,0 +1,558 @@ +import { + evmSnapshot, + evmRevert, + advanceTimeAndBlock, + ZERO_ADDRESS, + MintableERC20__factory, +} from '@aave/deploy-v3'; +import { expect } from 'chai'; +import { ethers } from 'hardhat'; +import { BigNumber } from 'ethers'; +import { TransactionReceipt } from '@ethersproject/providers'; +import { MAX_UINT_AMOUNT } from '../helpers/constants'; +import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; +import { RateMode } from '../helpers/types'; +import { Pool, AToken } from '../types'; +import { makeSuite, SignerWithAddress, TestEnv } from './helpers/make-suite'; +import { + supply, + transfer, + withdraw, + getATokenEvent, + transferFrom, +} from './helpers/utils/tokenization-events'; + +const DEBUG = false; + +let balances = { + balance: {}, +}; + +const log = (str: string) => { + if (DEBUG) console.log(str); +}; + +const printBalance = async (name: string, aToken: any, userAddress: string) => { + console.log( + name, + 'balanceOf', + await ethers.utils.formatEther(await aToken.balanceOf(userAddress)), + 'scaledBalance', + await ethers.utils.formatEther(await aToken.scaledBalanceOf(userAddress)) + ); +}; + +const increaseSupplyIndex = async ( + pool: Pool, + borrower: SignerWithAddress, + collateral: string, + assetToIncrease: string +) => { + const collateralToken = MintableERC20__factory.connect(collateral, borrower.signer); + const borrowingToken = MintableERC20__factory.connect(assetToIncrease, borrower.signer); + + await collateralToken + .connect(borrower.signer) + ['mint(uint256)'](await convertToCurrencyDecimals(collateralToken.address, '10000000')); + await collateralToken.connect(borrower.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(borrower.signer) + .supply( + collateral, + await convertToCurrencyDecimals(collateral, '100000'), + borrower.address, + '0' + ); + + const { aTokenAddress } = await pool.getReserveData(assetToIncrease); + const availableLiquidity = await borrowingToken.balanceOf(aTokenAddress); + await pool + .connect(borrower.signer) + .borrow( + assetToIncrease, + availableLiquidity.percentMul('20'), + RateMode.Variable, + 0, + borrower.address + ); + + await advanceTimeAndBlock(10000000000); +}; + +const updateBalances = (balances: any, aToken: AToken, receipt: TransactionReceipt) => { + let events = getATokenEvent(aToken, receipt, 'Transfer'); + for (const ev of events) { + if (ev.from == ZERO_ADDRESS || ev.to == ZERO_ADDRESS) continue; + balances.balance[ev.from] = balances.balance[ev.from]?.sub(ev.value); + balances.balance[ev.to] = balances.balance[ev.to]?.add(ev.value); + } + events = getATokenEvent(aToken, receipt, 'Mint'); + for (const ev of events) { + balances.balance[ev.onBehalfOf] = balances.balance[ev.onBehalfOf]?.add(ev.value); + } + events = getATokenEvent(aToken, receipt, 'Burn'); + for (const ev of events) { + balances.balance[ev.from] = balances.balance[ev.from]?.sub(ev.value.add(ev.balanceIncrease)); + balances.balance[ev.from] = balances.balance[ev.from]?.add(ev.balanceIncrease); + } +}; + +makeSuite('AToken: Events', (testEnv: TestEnv) => { + let alice, bob, eve, borrower, borrower2; + + let snapId; + + before(async () => { + const { users, pool, dai, weth } = testEnv; + [alice, bob, eve, borrower, borrower2] = users; + + const amountToMint = await convertToCurrencyDecimals(dai.address, '10000000'); + const usersToInit = [alice, bob, eve, borrower, borrower2]; + for (const user of usersToInit) { + await dai.connect(user.signer)['mint(uint256)'](amountToMint); + await weth.connect(user.signer)['mint(uint256)'](amountToMint); + await dai.connect(user.signer).approve(pool.address, MAX_UINT_AMOUNT); + await weth.connect(user.signer).approve(pool.address, MAX_UINT_AMOUNT); + } + }); + + beforeEach(async () => { + snapId = await evmSnapshot(); + + // Init balances + balances = { + balance: { + [alice.address]: BigNumber.from(0), + [bob.address]: BigNumber.from(0), + [eve.address]: BigNumber.from(0), + }, + }; + }); + + afterEach(async () => { + await evmRevert(snapId); + }); + + it('Alice and Bob supplies 1000, Alice transfer 500 to Bob, and withdraws 500 (without index change)', async () => { + await testMultipleSupplyAndTransferAndWithdraw(false); + }); + + it('Alice and Bob supplies 1000, Alice transfer 500 to Bob, and withdraws 500 (with index change)', async () => { + await testMultipleSupplyAndTransferAndWithdraw(true); + }); + + const testMultipleSupplyAndTransferAndWithdraw = async (indexChange: boolean) => { + const { pool, dai, aDai, weth } = testEnv; + + let rcpt; + let balanceTransferEv; + let aliceBalanceBefore = await aDai.balanceOf(alice.address); + let bobBalanceBefore = await aDai.balanceOf(bob.address); + + log('- Alice supplies 1000 DAI'); + rcpt = await supply(pool, alice, dai.address, '1000', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Bob supplies 1000 DAI'); + rcpt = await supply(pool, bob, dai.address, '1000', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Alice transfers 500 aDAI to Bob'); + const [fromScaledBefore, toScaledBefore] = await Promise.all([ + aDai.scaledBalanceOf(alice.address), + aDai.scaledBalanceOf(bob.address), + ]); + rcpt = await transfer(pool, alice, dai.address, '500', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + balanceTransferEv = getATokenEvent(aDai, rcpt, 'BalanceTransfer')[0]; + expect(await aDai.scaledBalanceOf(alice.address)).to.be.eq( + fromScaledBefore.sub(balanceTransferEv.value), + 'Scaled balance emitted in BalanceTransfer event does not match' + ); + expect(await aDai.scaledBalanceOf(bob.address)).to.be.eq( + toScaledBefore.add(balanceTransferEv.value), + 'Scaled balance emitted in BalanceTransfer event does not match' + ); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Alice withdraws 500 DAI to Bob'); + rcpt = await withdraw(pool, alice, dai.address, '500', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (DEBUG) { + await printBalance('alice', aDai, alice.address); + await printBalance('bob', aDai, bob.address); + } + + // Check final balances + rcpt = await supply(pool, alice, dai.address, '1', alice.address, false); + updateBalances(balances, aDai, rcpt); + const aliceBalanceAfter = await aDai.balanceOf(alice.address); + + rcpt = await supply(pool, bob, dai.address, '1', bob.address, false); + updateBalances(balances, aDai, rcpt); + const bobBalanceAfter = await aDai.balanceOf(bob.address); + + expect(aliceBalanceAfter).to.be.closeTo( + aliceBalanceBefore.add(balances.balance[alice.address]), + 2 + ); + expect(bobBalanceAfter).to.be.closeTo(bobBalanceBefore.add(balances.balance[bob.address]), 2); + }; + + it('Alice supplies 1000, supplies 200, transfers 100 out, withdraws 50 withdraws 100 to Bob, withdraws 200 (without index change)', async () => { + await testMultipleSupplyAndWithdrawalsOnBehalf(false); + }); + + it('Alice supplies 1000, supplies 200, transfers 100 out, withdraws 50 withdraws 100 to Bob, withdraws 200 (with index change)', async () => { + await testMultipleSupplyAndWithdrawalsOnBehalf(true); + }); + + const testMultipleSupplyAndWithdrawalsOnBehalf = async (indexChange: boolean) => { + const { pool, dai, aDai, weth } = testEnv; + + let rcpt; + let balanceTransferEv; + let aliceBalanceBefore = await aDai.balanceOf(alice.address); + let bobBalanceBefore = await aDai.balanceOf(bob.address); + + log('- Alice supplies 1000 DAI'); + rcpt = await supply(pool, alice, dai.address, '1000', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Alice supplies 200 DAI'); + rcpt = await supply(pool, alice, dai.address, '200', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Alice transfers 100 aDAI to Bob'); + const [fromScaledBefore, toScaledBefore] = await Promise.all([ + aDai.scaledBalanceOf(alice.address), + aDai.scaledBalanceOf(bob.address), + ]); + rcpt = await transfer(pool, alice, dai.address, '100', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + balanceTransferEv = getATokenEvent(aDai, rcpt, 'BalanceTransfer')[0]; + expect(await aDai.scaledBalanceOf(alice.address)).to.be.eq( + fromScaledBefore.sub(balanceTransferEv.value), + 'Scaled balance emitted in BalanceTransfer event does not match' + ); + expect(await aDai.scaledBalanceOf(bob.address)).to.be.eq( + toScaledBefore.add(balanceTransferEv.value), + 'Scaled balance emitted in BalanceTransfer event does not match' + ); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Alice withdraws 50 DAI'); + rcpt = await withdraw(pool, alice, dai.address, '50', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Alice withdraws 100 DAI to Bob'); + rcpt = await withdraw(pool, alice, dai.address, '100', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Alice withdraws 300 DAI'); + rcpt = await withdraw(pool, alice, dai.address, '300', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (DEBUG) { + await printBalance('alice', aDai, alice.address); + await printBalance('bob', aDai, bob.address); + } + + // Check final balances + rcpt = await supply(pool, alice, dai.address, '1', alice.address, false); + updateBalances(balances, aDai, rcpt); + const aliceBalanceAfter = await aDai.balanceOf(alice.address); + + rcpt = await supply(pool, bob, dai.address, '1', bob.address, false); + updateBalances(balances, aDai, rcpt); + const bobBalanceAfter = await aDai.balanceOf(bob.address); + + expect(aliceBalanceAfter).to.be.closeTo( + aliceBalanceBefore.add(balances.balance[alice.address]), + 2 + ); + expect(bobBalanceAfter).to.be.closeTo(bobBalanceBefore.add(balances.balance[bob.address]), 2); + }; + + it('Alice supplies 1000, supplies 200 to Bob, Bob supplies 100, Alice transfers 100 out, Alice withdraws 100, Alice withdraws 200 to Bob (without index change)', async () => { + await testMultipleSupplyOnBehalfOfAndWithdrawals(false); + }); + + it('Alice supplies 1000, supplies 200 to Bob, Bob supplies 100, Alice transfers 100 out, Alice withdraws 100, Alice withdraws 200 to Bob (with index change)', async () => { + await testMultipleSupplyOnBehalfOfAndWithdrawals(true); + }); + + const testMultipleSupplyOnBehalfOfAndWithdrawals = async (indexChange: boolean) => { + const { pool, dai, aDai, weth } = testEnv; + + let rcpt; + let balanceTransferEv; + let aliceBalanceBefore = await aDai.balanceOf(alice.address); + let bobBalanceBefore = await aDai.balanceOf(bob.address); + + log('- Alice supplies 1000 DAI'); + rcpt = await supply(pool, alice, dai.address, '1000', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Alice supplies 200 DAI to Bob'); + rcpt = await supply(pool, alice, dai.address, '200', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Bob supplies 100 DAI'); + rcpt = await supply(pool, bob, dai.address, '100', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Alice transfers 100 aDAI to Bob'); + const [fromScaledBefore, toScaledBefore] = await Promise.all([ + aDai.scaledBalanceOf(alice.address), + aDai.scaledBalanceOf(bob.address), + ]); + rcpt = await transfer(pool, alice, dai.address, '100', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + balanceTransferEv = getATokenEvent(aDai, rcpt, 'BalanceTransfer')[0]; + expect(await aDai.scaledBalanceOf(alice.address)).to.be.eq( + fromScaledBefore.sub(balanceTransferEv.value), + 'Scaled balance emitted in BalanceTransfer event does not match' + ); + expect(await aDai.scaledBalanceOf(bob.address)).to.be.eq( + toScaledBefore.add(balanceTransferEv.value), + 'Scaled balance emitted in BalanceTransfer event does not match' + ); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Alice withdraws 200 DAI to Bob'); + rcpt = await withdraw(pool, alice, dai.address, '200', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (DEBUG) { + await printBalance('alice', aDai, alice.address); + await printBalance('bob', aDai, bob.address); + } + + // Check final balances + rcpt = await supply(pool, alice, dai.address, '1', alice.address, false); + updateBalances(balances, aDai, rcpt); + const aliceBalanceAfter = await aDai.balanceOf(alice.address); + + rcpt = await supply(pool, bob, dai.address, '1', bob.address, false); + updateBalances(balances, aDai, rcpt); + const bobBalanceAfter = await aDai.balanceOf(bob.address); + + expect(aliceBalanceAfter).to.be.closeTo( + aliceBalanceBefore.add(balances.balance[alice.address]), + 2 + ); + expect(bobBalanceAfter).to.be.closeTo(bobBalanceBefore.add(balances.balance[bob.address]), 2); + }; + + it('Alice supplies 300000, withdraws 200000 to Bob, withdraws 5 to Bob', async () => { + const { pool, dai, aDai, weth } = testEnv; + + let rcpt; + let aliceBalanceBefore = await aDai.balanceOf(alice.address); + let bobBalanceBefore = await aDai.balanceOf(bob.address); + + log('- Alice supplies 300000 DAI'); + rcpt = await supply(pool, alice, dai.address, '300000', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + + log('- Alice withdraws 200000 DAI to Bob'); + rcpt = await withdraw(pool, alice, dai.address, '200000', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + + log('- Alice withdraws 5 DAI to Bob'); + rcpt = await withdraw(pool, alice, dai.address, '5', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (DEBUG) { + await printBalance('alice', aDai, alice.address); + await printBalance('bob', aDai, bob.address); + } + + // Check final balances + rcpt = await supply(pool, alice, dai.address, '1', alice.address, false); + updateBalances(balances, aDai, rcpt); + const aliceBalanceAfter = await aDai.balanceOf(alice.address); + + rcpt = await supply(pool, bob, dai.address, '1', bob.address, false); + updateBalances(balances, aDai, rcpt); + const bobBalanceAfter = await aDai.balanceOf(bob.address); + + expect(aliceBalanceAfter).to.be.closeTo( + aliceBalanceBefore.add(balances.balance[alice.address]), + 2 + ); + expect(bobBalanceAfter).to.be.closeTo(bobBalanceBefore.add(balances.balance[bob.address]), 2); + }); + + it('Bob supplies 1000, Alice supplies 200 on behalf of Bob, Bob withdraws 200 on behalf of Alice', async () => { + const { pool, dai, aDai, weth } = testEnv; + + let rcpt; + let aliceBalanceBefore = await aDai.balanceOf(alice.address); + let bobBalanceBefore = await aDai.balanceOf(bob.address); + + log('- Bob supplies 1000 DAI'); + rcpt = await supply(pool, bob, dai.address, '1000', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + + log('- Alice supplies 200 DAI to Bob'); + rcpt = await supply(pool, alice, dai.address, '200', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + + log('- Bob withdraws 200 DAI to Alice'); + rcpt = await withdraw(pool, bob, dai.address, '200', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (DEBUG) { + await printBalance('alice', aDai, alice.address); + await printBalance('bob', aDai, bob.address); + } + + // Check final balances + rcpt = await supply(pool, alice, dai.address, '1', alice.address, false); + updateBalances(balances, aDai, rcpt); + const aliceBalanceAfter = await aDai.balanceOf(alice.address); + + rcpt = await supply(pool, bob, dai.address, '1', bob.address, false); + updateBalances(balances, aDai, rcpt); + const bobBalanceAfter = await aDai.balanceOf(bob.address); + + expect(aliceBalanceAfter).to.be.closeTo( + aliceBalanceBefore.add(balances.balance[alice.address]), + 2 + ); + expect(bobBalanceAfter).to.be.closeTo(bobBalanceBefore.add(balances.balance[bob.address]), 2); + }); + + it('Alice supplies 1000 DAI and approves aDai to Bob, Bob transfers 500 to himself and 300 to Eve, index change, principal goes back to Alice', async () => { + const { pool, dai, aDai, weth } = testEnv; + + let rcpt; + let aliceBalanceBefore = await aDai.balanceOf(alice.address); + let bobBalanceBefore = await aDai.balanceOf(bob.address); + let eveBalanceBefore = await aDai.balanceOf(eve.address); + + log('- Alice supplies 1000 DAI'); + rcpt = await supply(pool, alice, dai.address, '1000', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + log('- Alice approves aDai to Bob'); + await aDai.connect(alice.signer).approve(bob.address, MAX_UINT_AMOUNT); + + log('- Bob transfers 500 aDai from Alice to himself'); + rcpt = await transferFrom(pool, bob, alice.address, dai.address, '500', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + log('- Bob transfers 300 aDai from Alice to Eve'); + rcpt = await transferFrom(pool, bob, alice.address, dai.address, '300', eve.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + + log('- Bob transfers 500 back to Alice'); + rcpt = await transfer(pool, bob, dai.address, '500', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + log('- Eve transfers 500 back to Alice'); + rcpt = await transfer(pool, eve, dai.address, '300', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (DEBUG) { + await printBalance('alice', aDai, alice.address); + await printBalance('bob', aDai, bob.address); + await printBalance('eve', aDai, eve.address); + } + + // Check final balances + rcpt = await supply(pool, alice, dai.address, '1', alice.address, false); + updateBalances(balances, aDai, rcpt); + const aliceBalanceAfter = await aDai.balanceOf(alice.address); + + rcpt = await supply(pool, bob, dai.address, '1', bob.address, false); + updateBalances(balances, aDai, rcpt); + const bobBalanceAfter = await aDai.balanceOf(bob.address); + + rcpt = await supply(pool, eve, dai.address, '1', eve.address, false); + updateBalances(balances, aDai, rcpt); + const eveBalanceAfter = await aDai.balanceOf(eve.address); + + expect(aliceBalanceAfter).to.be.closeTo( + aliceBalanceBefore.add(balances.balance[alice.address]), + 2 + ); + expect(bobBalanceAfter).to.be.closeTo(bobBalanceBefore.add(balances.balance[bob.address]), 2); + expect(eveBalanceAfter).to.be.closeTo(eveBalanceBefore.add(balances.balance[eve.address]), 2); + }); +}); diff --git a/test-suites/helpers/utils/helpers.ts b/test-suites/helpers/utils/helpers.ts index 3654ed319..b0848033d 100644 --- a/test-suites/helpers/utils/helpers.ts +++ b/test-suites/helpers/utils/helpers.ts @@ -1,5 +1,7 @@ -import { Pool } from '../../../types/Pool'; -import { ReserveData, UserReserveData } from './interfaces'; +import { expect } from 'chai'; +import { logger, utils, BigNumber, Contract } from 'ethers'; +import { TransactionReceipt } from '@ethersproject/providers'; +import { getContract } from '@aave/deploy-v3'; import { getMintableERC20, getAToken, @@ -8,11 +10,8 @@ import { getIRStrategy, } from '@aave/deploy-v3/dist/helpers/contract-getters'; import { tEthereumAddress } from '../../../helpers/types'; -import { AaveProtocolDataProvider } from '../../../types/AaveProtocolDataProvider'; -import { BigNumber } from 'ethers'; -import { AToken } from '../../../types'; -import { getContract } from '@aave/deploy-v3'; -import { expect } from 'chai'; +import { AToken, AaveProtocolDataProvider, Pool } from '../../../types'; +import { ReserveData, UserReserveData } from './interfaces'; export const getReserveData = async ( helper: AaveProtocolDataProvider, @@ -135,3 +134,101 @@ const getATokenUserData = async ( const scaledBalance = await aToken.scaledBalanceOf(user); return scaledBalance.toString(); }; + +export const matchEvent = ( + receipt: TransactionReceipt, + name: string, + eventContract: Contract, + emitterAddress?: string, + expectedArgs?: any[] +) => { + const events = receipt.logs; + + if (events != undefined) { + // match name from list of events in eventContract, when found, compute the sigHash + let sigHash: string | undefined; + for (let contractEvent of Object.keys(eventContract.interface.events)) { + if (contractEvent.startsWith(name) && contractEvent.charAt(name.length) == '(') { + sigHash = utils.keccak256(utils.toUtf8Bytes(contractEvent)); + break; + } + } + // Throw if the sigHash was not found + if (!sigHash) { + logger.throwError( + `Event "${name}" not found in provided contract. \nAre you sure you're using the right contract?` + ); + } + + // Find the given event in the emitted logs + let invalidParamsButExists = false; + for (let emittedEvent of events) { + // If we find one with the correct sigHash, check if it is the one we're looking for + if (emittedEvent.topics[0] == sigHash) { + // If an emitter address is passed, validate that this is indeed the correct emitter, if not, continue + if (emitterAddress) { + if (emittedEvent.address != emitterAddress) continue; + } + const event = eventContract.interface.parseLog(emittedEvent); + // If there are expected arguments, validate them, otherwise, return here + if (expectedArgs) { + if (expectedArgs.length != event.args.length) { + logger.throwError( + `Event "${name}" emitted with correct signature, but expected args are of invalid length` + ); + } + invalidParamsButExists = false; + // Iterate through arguments and check them, if there is a mismatch, continue with the loop + for (let i = 0; i < expectedArgs.length; i++) { + // Parse empty arrays as empty bytes + if (expectedArgs[i].constructor == Array && expectedArgs[i].length == 0) { + expectedArgs[i] = '0x'; + } + + // Break out of the expected args loop if there is a mismatch, this will continue the emitted event loop + if (BigNumber.isBigNumber(event.args[i])) { + if (!event.args[i].eq(BigNumber.from(expectedArgs[i]))) { + invalidParamsButExists = true; + break; + } + } else if (event.args[i].constructor == Array) { + let params = event.args[i]; + let expected = expectedArgs[i]; + for (let j = 0; j < params.length; j++) { + if (BigNumber.isBigNumber(params[j])) { + if (!params[j].eq(BigNumber.from(expected[j]))) { + invalidParamsButExists = true; + break; + } + } else if (params[j] != expected[j]) { + invalidParamsButExists = true; + break; + } + } + if (invalidParamsButExists) break; + } else if (event.args[i] != expectedArgs[i]) { + invalidParamsButExists = true; + break; + } + } + // Return if the for loop did not cause a break, so a match has been found, otherwise proceed with the event loop + if (!invalidParamsButExists) { + return; + } + } else { + return; + } + } + } + // Throw if the event args were not expected or the event was not found in the logs + if (invalidParamsButExists) { + logger.throwError(`Event "${name}" found in logs but with unexpected args`); + } else { + logger.throwError( + `Event "${name}" not found emitted by "${emitterAddress}" in given transaction log` + ); + } + } else { + logger.throwError('No events were emitted'); + } +}; diff --git a/test-suites/helpers/utils/tokenization-events.ts b/test-suites/helpers/utils/tokenization-events.ts new file mode 100644 index 000000000..cf88ad2bd --- /dev/null +++ b/test-suites/helpers/utils/tokenization-events.ts @@ -0,0 +1,676 @@ +import { ethers } from 'hardhat'; +import { utils, BigNumber } from 'ethers'; +import { TransactionReceipt } from '@ethersproject/providers'; +import { + AToken, + AToken__factory, + IERC20__factory, + Pool, + StableDebtToken, + StableDebtToken__factory, + VariableDebtToken, + VariableDebtToken__factory, +} from '../../../types'; +import { ZERO_ADDRESS } from '../../../helpers/constants'; +import { SignerWithAddress } from '../make-suite'; +import { calcExpectedStableDebtTokenBalance } from './calculations'; +import { getTxCostAndTimestamp } from '../actions'; +import { RateMode } from '../../../helpers/types'; +import { convertToCurrencyDecimals } from '../../../helpers/contracts-helpers'; +import { matchEvent } from './helpers'; + +const ATOKEN_EVENTS = [ + { sig: 'Transfer(address,address,uint256)', args: ['from', 'to', 'value'] }, + { + sig: 'Mint(address,address,uint256,uint256,uint256)', + args: ['caller', 'onBehalfOf', 'value', 'balanceIncrease', 'index'], + }, + { + sig: 'Burn(address,address,uint256,uint256,uint256)', + args: ['from', 'target', 'value', 'balanceIncrease', 'index'], + }, + { + sig: 'BalanceTransfer(address,address,uint256,uint256)', + args: ['from', 'to', 'value', 'index'], + }, +]; +const VARIABLE_DEBT_TOKEN_EVENTS = [ + { sig: 'Transfer(address,address,uint256)', args: ['from', 'to', 'value'] }, + { + sig: 'Mint(address,address,uint256,uint256,uint256)', + args: ['caller', 'onBehalfOf', 'value', 'balanceIncrease', 'index'], + }, + { + sig: 'Burn(address,address,uint256,uint256,uint256)', + args: ['from', 'target', 'value', 'balanceIncrease', 'index'], + }, +]; +const STABLE_DEBT_TOKEN_EVENTS = [ + { sig: 'Transfer(address,address,uint256)', args: ['from', 'to', 'value'] }, + { + sig: 'Mint(address,address,uint256,uint256,uint256,uint256,uint256,uint256)', + args: [ + 'user', + 'onBehalfOf', + 'amount', + 'currentBalance', + 'balanceIncrease', + 'newRate', + 'avgStableRate', + 'newTotalSupply', + ], + }, + { + sig: 'Burn(address,uint256,uint256,uint256,uint256,uint256)', + args: ['from', 'amount', 'currentBalance', 'balanceIncrease', 'avgStableRate', 'newTotalSupply'], + }, +]; + +const getBalanceIncrease = ( + scaledBalance: BigNumber, + indexBeforeAction: BigNumber, + indexAfterAction: BigNumber +) => { + return scaledBalance.rayMul(indexAfterAction).sub(scaledBalance.rayMul(indexBeforeAction)); +}; + +export const supply = async ( + pool: Pool, + user: SignerWithAddress, + underlying: string, + amountToConvert: string, + onBehalfOf: string, + debug: boolean = false +) => { + const amount = await convertToCurrencyDecimals(underlying, amountToConvert); + const { aTokenAddress } = await pool.getReserveData(underlying); + const underlyingToken = IERC20__factory.connect(underlying, user.signer); + const aToken = AToken__factory.connect(aTokenAddress, user.signer); + + const previousIndex = await aToken.getPreviousIndex(onBehalfOf); + + const tx = await pool.connect(user.signer).supply(underlying, amount, onBehalfOf, '0'); + const rcpt = await tx.wait(); + + const indexAfter = await pool.getReserveNormalizedIncome(underlying); + const addedScaledBalance = amount.rayDiv(indexAfter); + const scaledBalance = (await aToken.scaledBalanceOf(onBehalfOf)).sub(addedScaledBalance); + const balanceIncrease = getBalanceIncrease(scaledBalance, previousIndex, indexAfter); + + if (debug) printATokenEvents(aToken, rcpt); + matchEvent(rcpt, 'Transfer', underlyingToken, underlying, [user.address, aToken.address, amount]); + matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ + ZERO_ADDRESS, + onBehalfOf, + amount.add(balanceIncrease), + ]); + matchEvent(rcpt, 'Mint', aToken, aToken.address, [ + user.address, + onBehalfOf, + amount.add(balanceIncrease), + balanceIncrease, + indexAfter, + ]); + return rcpt; +}; + +export const withdraw = async ( + pool: Pool, + user: SignerWithAddress, + underlying: string, + amountToConvert: string, + to: string, + debug: boolean = false +) => { + const amount = await convertToCurrencyDecimals(underlying, amountToConvert); + const { aTokenAddress } = await pool.getReserveData(underlying); + const underlyingToken = IERC20__factory.connect(underlying, user.signer); + const aToken = AToken__factory.connect(aTokenAddress, user.signer); + + const previousIndex = await aToken.getPreviousIndex(user.address); + + const tx = await pool.connect(user.signer).withdraw(underlying, amount, to); + const rcpt = await tx.wait(); + + const indexAfter = await pool.getReserveNormalizedIncome(underlying); + const addedScaledBalance = amount.rayDiv(indexAfter); + const scaledBalance = (await aToken.scaledBalanceOf(user.address)).add(addedScaledBalance); + const balanceIncrease = getBalanceIncrease(scaledBalance, previousIndex, indexAfter); + + if (debug) printATokenEvents(aToken, rcpt); + matchEvent(rcpt, 'Transfer', underlyingToken, underlying, [aToken.address, to, amount]); + + if (balanceIncrease.gt(amount)) { + matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ + ZERO_ADDRESS, + user.address, + balanceIncrease.sub(amount), + ]); + matchEvent(rcpt, 'Mint', aToken, aToken.address, [ + user.address, + user.address, + balanceIncrease.sub(amount), + balanceIncrease, + indexAfter, + ]); + } else { + matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ + user.address, + ZERO_ADDRESS, + amount.sub(balanceIncrease), + ]); + matchEvent(rcpt, 'Burn', aToken, aToken.address, [ + user.address, + to, + amount.sub(balanceIncrease), + balanceIncrease, + indexAfter, + ]); + } + + return rcpt; +}; + +export const transfer = async ( + pool: Pool, + user: SignerWithAddress, + underlying: string, + amountToConvert: string, + to: string, + debug: boolean = false +) => { + const amount = await convertToCurrencyDecimals(underlying, amountToConvert); + const { aTokenAddress } = await pool.getReserveData(underlying); + const aToken = AToken__factory.connect(aTokenAddress, user.signer); + + const fromPreviousIndex = await aToken.getPreviousIndex(user.address); + const toPreviousIndex = await aToken.getPreviousIndex(to); + + const tx = await aToken.connect(user.signer).transfer(to, amount); + const rcpt = await tx.wait(); + + const indexAfter = await pool.getReserveNormalizedIncome(underlying); + const addedScaledBalance = amount.rayDiv(indexAfter); + const fromScaledBalance = (await aToken.scaledBalanceOf(user.address)).add(addedScaledBalance); + const toScaledBalance = (await aToken.scaledBalanceOf(to)).sub(addedScaledBalance); + const fromBalanceIncrease = getBalanceIncrease(fromScaledBalance, fromPreviousIndex, indexAfter); + const toBalanceIncrease = getBalanceIncrease(toScaledBalance, toPreviousIndex, indexAfter); + + if (debug) printATokenEvents(aToken, rcpt); + + matchEvent(rcpt, 'Transfer', aToken, aToken.address, [user.address, to, amount]); + matchEvent(rcpt, 'BalanceTransfer', aToken, aToken.address, [ + user.address, + to, + addedScaledBalance, + indexAfter, + ]); + matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ + ZERO_ADDRESS, + user.address, + fromBalanceIncrease, + ]); + matchEvent(rcpt, 'Mint', aToken, aToken.address, [ + user.address, + user.address, + fromBalanceIncrease, + fromBalanceIncrease, + indexAfter, + ]); + if (toBalanceIncrease.gt(0)) { + matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ZERO_ADDRESS, to, toBalanceIncrease]); + matchEvent(rcpt, 'Mint', aToken, aToken.address, [ + user.address, + to, + toBalanceIncrease, + toBalanceIncrease, + indexAfter, + ]); + } + + return rcpt; +}; + +export const transferFrom = async ( + pool: Pool, + user: SignerWithAddress, + origin: string, + underlying: string, + amountToConvert: string, + to: string, + debug: boolean = false +) => { + const amount = await convertToCurrencyDecimals(underlying, amountToConvert); + const { aTokenAddress } = await pool.getReserveData(underlying); + const aToken = AToken__factory.connect(aTokenAddress, user.signer); + + const fromPreviousIndex = await aToken.getPreviousIndex(origin); + const toPreviousIndex = await aToken.getPreviousIndex(to); + + const tx = await aToken.connect(user.signer).transferFrom(origin, to, amount); + const rcpt = await tx.wait(); + + const indexAfter = await pool.getReserveNormalizedIncome(underlying); + const addedScaledBalance = amount.rayDiv(indexAfter); + const fromScaledBalance = (await aToken.scaledBalanceOf(origin)).add(addedScaledBalance); + const toScaledBalance = (await aToken.scaledBalanceOf(to)).sub(addedScaledBalance); + const fromBalanceIncrease = getBalanceIncrease(fromScaledBalance, fromPreviousIndex, indexAfter); + const toBalanceIncrease = getBalanceIncrease(toScaledBalance, toPreviousIndex, indexAfter); + + if (debug) printATokenEvents(aToken, rcpt); + + matchEvent(rcpt, 'Transfer', aToken, aToken.address, [origin, to, amount]); + matchEvent(rcpt, 'BalanceTransfer', aToken, aToken.address, [ + origin, + to, + addedScaledBalance, + indexAfter, + ]); + matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ZERO_ADDRESS, origin, fromBalanceIncrease]); + matchEvent(rcpt, 'Mint', aToken, aToken.address, [ + user.address, + origin, + fromBalanceIncrease, + fromBalanceIncrease, + indexAfter, + ]); + if (toBalanceIncrease.gt(0)) { + matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ZERO_ADDRESS, to, toBalanceIncrease]); + matchEvent(rcpt, 'Mint', aToken, aToken.address, [ + user.address, + to, + toBalanceIncrease, + toBalanceIncrease, + indexAfter, + ]); + } + + return rcpt; +}; + +export const variableBorrow = async ( + pool: Pool, + user: SignerWithAddress, + underlying: string, + amountToConvert: string, + onBehalfOf: string, + debug: boolean = false +) => { + const amount = await convertToCurrencyDecimals(underlying, amountToConvert); + const { aTokenAddress, variableDebtTokenAddress } = await pool.getReserveData(underlying); + const underlyingToken = IERC20__factory.connect(underlying, user.signer); + const aToken = AToken__factory.connect(aTokenAddress, user.signer); + const variableDebtToken = VariableDebtToken__factory.connect( + variableDebtTokenAddress, + user.signer + ); + + let previousIndex = await variableDebtToken.getPreviousIndex(onBehalfOf); + + const tx = await pool + .connect(user.signer) + .borrow(underlying, amount, RateMode.Variable, 0, onBehalfOf); + const rcpt = await tx.wait(); + + const indexAfter = await pool.getReserveNormalizedVariableDebt(underlying); + const addedScaledBalance = amount.rayDiv(indexAfter); + const scaledBalance = (await variableDebtToken.scaledBalanceOf(onBehalfOf)).sub( + addedScaledBalance + ); + const balanceIncrease = getBalanceIncrease(scaledBalance, previousIndex, indexAfter); + + if (debug) printVariableDebtTokenEvents(variableDebtToken, rcpt); + + matchEvent(rcpt, 'Transfer', underlyingToken, underlying, [aToken.address, user.address, amount]); + matchEvent(rcpt, 'Transfer', variableDebtToken, variableDebtToken.address, [ + ZERO_ADDRESS, + onBehalfOf, + amount.add(balanceIncrease), + ]); + matchEvent(rcpt, 'Mint', variableDebtToken, variableDebtToken.address, [ + user.address, + onBehalfOf, + amount.add(balanceIncrease), + balanceIncrease, + indexAfter, + ]); + return rcpt; +}; + +export const repayVariableBorrow = async ( + pool: Pool, + user: SignerWithAddress, + underlying: string, + amountToConvert: string, + onBehalfOf: string, + debug: boolean = false +) => { + const amount = await convertToCurrencyDecimals(underlying, amountToConvert); + const { aTokenAddress, variableDebtTokenAddress } = await pool.getReserveData(underlying); + const underlyingToken = IERC20__factory.connect(underlying, user.signer); + const aToken = AToken__factory.connect(aTokenAddress, user.signer); + const variableDebtToken = VariableDebtToken__factory.connect( + variableDebtTokenAddress, + user.signer + ); + + const previousIndex = await variableDebtToken.getPreviousIndex(onBehalfOf); + + const tx = await pool + .connect(user.signer) + .repay(underlying, amount, RateMode.Variable, onBehalfOf); + const rcpt = await tx.wait(); + + const indexAfter = await pool.getReserveNormalizedVariableDebt(underlying); + const addedScaledBalance = amount.rayDiv(indexAfter); + const scaledBalance = (await variableDebtToken.scaledBalanceOf(onBehalfOf)).add( + addedScaledBalance + ); + const balanceIncrease = getBalanceIncrease(scaledBalance, previousIndex, indexAfter); + + if (debug) printVariableDebtTokenEvents(variableDebtToken, rcpt); + + matchEvent(rcpt, 'Transfer', underlyingToken, underlying, [user.address, aToken.address, amount]); + if (balanceIncrease.gt(amount)) { + matchEvent(rcpt, 'Transfer', variableDebtToken, variableDebtToken.address, [ + ZERO_ADDRESS, + onBehalfOf, + balanceIncrease.sub(amount), + ]); + matchEvent(rcpt, 'Mint', variableDebtToken, variableDebtToken.address, [ + onBehalfOf, + onBehalfOf, + balanceIncrease.sub(amount), + balanceIncrease, + indexAfter, + ]); + } else { + matchEvent(rcpt, 'Transfer', variableDebtToken, variableDebtToken.address, [ + onBehalfOf, + ZERO_ADDRESS, + amount.sub(balanceIncrease), + ]); + matchEvent(rcpt, 'Burn', variableDebtToken, variableDebtToken.address, [ + onBehalfOf, + ZERO_ADDRESS, + amount.sub(balanceIncrease), + balanceIncrease, + indexAfter, + ]); + } + + return rcpt; +}; + +export const stableBorrow = async ( + pool: Pool, + user: SignerWithAddress, + underlying: string, + amountToConvert: string, + onBehalfOf: string, + debug: boolean = false +) => { + const amount = await convertToCurrencyDecimals(underlying, amountToConvert); + const { aTokenAddress, stableDebtTokenAddress } = await pool.getReserveData(underlying); + const underlyingToken = IERC20__factory.connect(underlying, user.signer); + const aToken = AToken__factory.connect(aTokenAddress, user.signer); + const stableDebtToken = StableDebtToken__factory.connect(stableDebtTokenAddress, user.signer); + + const previousIndex = await stableDebtToken.getUserStableRate(onBehalfOf); + const principalBalance = await stableDebtToken.principalBalanceOf(onBehalfOf); + const lastTimestamp = await stableDebtToken.getUserLastUpdated(onBehalfOf); + + const tx = await pool + .connect(user.signer) + .borrow(underlying, amount, RateMode.Stable, 0, onBehalfOf); + const rcpt = await tx.wait(); + + const { txTimestamp } = await getTxCostAndTimestamp(rcpt); + + const newPrincipalBalance = calcExpectedStableDebtTokenBalance( + principalBalance, + previousIndex, + BigNumber.from(lastTimestamp), + txTimestamp + ); + const balanceIncrease = newPrincipalBalance.sub(principalBalance); + const currentAvgStableRate = await stableDebtToken.getAverageStableRate(); + const stableRateAfter = await stableDebtToken.getUserStableRate(onBehalfOf); + const [totalSupply] = await stableDebtToken.getSupplyData(); + + if (debug) printStableDebtTokenEvents(stableDebtToken, rcpt); + + matchEvent(rcpt, 'Transfer', underlyingToken, underlying, [aToken.address, user.address, amount]); + matchEvent(rcpt, 'Transfer', stableDebtToken, stableDebtToken.address, [ + ZERO_ADDRESS, + onBehalfOf, + amount.add(balanceIncrease), + ]); + matchEvent(rcpt, 'Mint', stableDebtToken, stableDebtToken.address, [ + user.address, + onBehalfOf, + amount.add(balanceIncrease), + newPrincipalBalance, + balanceIncrease, + stableRateAfter, + currentAvgStableRate, + totalSupply, + ]); + return rcpt; +}; + +export const repayStableBorrow = async ( + pool: Pool, + user: SignerWithAddress, + underlying: string, + amountToConvert: string, + onBehalfOf: string, + debug: boolean = false +) => { + const amount = await convertToCurrencyDecimals(underlying, amountToConvert); + const { aTokenAddress, stableDebtTokenAddress } = await pool.getReserveData(underlying); + const underlyingToken = IERC20__factory.connect(underlying, user.signer); + const aToken = AToken__factory.connect(aTokenAddress, user.signer); + const stableDebtToken = StableDebtToken__factory.connect(stableDebtTokenAddress, user.signer); + + const principalBalance = await stableDebtToken.principalBalanceOf(onBehalfOf); + const previousIndex = await stableDebtToken.getUserStableRate(onBehalfOf); + const lastTimestamp = await stableDebtToken.getUserLastUpdated(onBehalfOf); + + const tx = await pool.connect(user.signer).repay(underlying, amount, RateMode.Stable, onBehalfOf); + const rcpt = await tx.wait(); + + const { txTimestamp } = await getTxCostAndTimestamp(rcpt); + + const newPrincipalBalance = calcExpectedStableDebtTokenBalance( + principalBalance, + previousIndex, + BigNumber.from(lastTimestamp), + txTimestamp + ); + + const balanceIncrease = newPrincipalBalance.sub(principalBalance); + const currentAvgStableRate = await stableDebtToken.getAverageStableRate(); + const stableRateAfter = await stableDebtToken.getUserStableRate(onBehalfOf); + const [totalSupply] = await stableDebtToken.getSupplyData(); + + if (debug) printStableDebtTokenEvents(stableDebtToken, rcpt); + + matchEvent(rcpt, 'Transfer', underlyingToken, underlying, [user.address, aToken.address, amount]); + if (balanceIncrease.gt(amount)) { + matchEvent(rcpt, 'Transfer', stableDebtToken, stableDebtToken.address, [ + ZERO_ADDRESS, + onBehalfOf, + balanceIncrease.sub(amount), + ]); + matchEvent(rcpt, 'Mint', stableDebtToken, stableDebtToken.address, [ + onBehalfOf, + onBehalfOf, + balanceIncrease.sub(amount), + newPrincipalBalance, + balanceIncrease, + stableRateAfter, + currentAvgStableRate, + totalSupply, + ]); + } else { + matchEvent(rcpt, 'Transfer', stableDebtToken, stableDebtToken.address, [ + onBehalfOf, + ZERO_ADDRESS, + amount.sub(balanceIncrease), + ]); + matchEvent(rcpt, 'Burn', stableDebtToken, stableDebtToken.address, [ + onBehalfOf, + amount.sub(balanceIncrease), + newPrincipalBalance, + balanceIncrease, + currentAvgStableRate, + totalSupply, + ]); + } + + return rcpt; +}; + +export const printATokenEvents = (aToken: AToken, receipt: TransactionReceipt) => { + for (const eventSig of ATOKEN_EVENTS) { + const eventName = eventSig.sig.split('(')[0]; + const encodedSig = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(eventSig.sig)); + const rawEvents = receipt.logs.filter( + (log) => log.topics[0] === encodedSig && log.address == aToken.address + ); + for (const rawEvent of rawEvents) { + const rawParsed = aToken.interface.decodeEventLog(eventName, rawEvent.data, rawEvent.topics); + const parsed: any[] = []; + + let i = 0; + for (const arg of eventSig.args) { + parsed[i] = ['value', 'balanceIncrease'].includes(arg) + ? ethers.utils.formatEther(rawParsed[arg]) + : rawParsed[arg]; + i++; + } + + console.log(`event ${eventName} ${parsed[0]} -> ${parsed[1]}: ${parsed.slice(2).join(' ')}`); + } + } +}; + +export const getATokenEvent = (aToken: AToken, receipt: TransactionReceipt, eventName: string) => { + const eventSig = ATOKEN_EVENTS.find((item) => item.sig.split('(')[0] === eventName); + const results: utils.Result = []; + if (eventSig) { + const encodedSig = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(eventSig.sig)); + const rawEvents = receipt.logs.filter( + (log) => log.topics[0] === encodedSig && log.address == aToken.address + ); + for (const rawEvent of rawEvents) { + results.push(aToken.interface.decodeEventLog(eventName, rawEvent.data, rawEvent.topics)); + } + } + return results; +}; + +export const printVariableDebtTokenEvents = ( + variableDebtToken: VariableDebtToken, + receipt: TransactionReceipt +) => { + for (const eventSig of VARIABLE_DEBT_TOKEN_EVENTS) { + const eventName = eventSig.sig.split('(')[0]; + const encodedSig = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(eventSig.sig)); + const rawEvents = receipt.logs.filter( + (log) => log.topics[0] === encodedSig && log.address == variableDebtToken.address + ); + for (const rawEvent of rawEvents) { + const rawParsed = variableDebtToken.interface.decodeEventLog( + eventName, + rawEvent.data, + rawEvent.topics + ); + const parsed: any[] = []; + + let i = 0; + for (const arg of eventSig.args) { + parsed[i] = ['value', 'balanceIncrease'].includes(arg) + ? ethers.utils.formatEther(rawParsed[arg]) + : rawParsed[arg]; + i++; + } + + console.log(`event ${eventName} ${parsed[0]} -> ${parsed[1]}: ${parsed.slice(2).join(' ')}`); + } + } +}; + +export const getVariableDebtTokenEvent = ( + variableDebtToken: VariableDebtToken, + receipt: TransactionReceipt, + eventName: string +) => { + const eventSig = VARIABLE_DEBT_TOKEN_EVENTS.find((item) => item.sig.split('(')[0] === eventName); + const results: utils.Result = []; + if (eventSig) { + const encodedSig = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(eventSig.sig)); + const rawEvents = receipt.logs.filter( + (log) => log.topics[0] === encodedSig && log.address == variableDebtToken.address + ); + for (const rawEvent of rawEvents) { + results.push( + variableDebtToken.interface.decodeEventLog(eventName, rawEvent.data, rawEvent.topics) + ); + } + } + return results; +}; + +export const printStableDebtTokenEvents = ( + stableDebtToken: StableDebtToken, + receipt: TransactionReceipt +) => { + for (const eventSig of STABLE_DEBT_TOKEN_EVENTS) { + const eventName = eventSig.sig.split('(')[0]; + const encodedSig = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(eventSig.sig)); + const rawEvents = receipt.logs.filter( + (log) => log.topics[0] === encodedSig && log.address == stableDebtToken.address + ); + for (const rawEvent of rawEvents) { + const rawParsed = stableDebtToken.interface.decodeEventLog( + eventName, + rawEvent.data, + rawEvent.topics + ); + const parsed: any[] = []; + + let i = 0; + for (const arg of eventSig.args) { + parsed[i] = ['value', 'currentBalance', 'balanceIncrease'].includes(arg) + ? ethers.utils.formatEther(rawParsed[arg]) + : rawParsed[arg]; + i++; + } + + console.log(`event ${eventName} ${parsed[0]} -> ${parsed[1]}: ${parsed.slice(2).join(' ')}`); + } + } +}; + +export const getStableDebtTokenEvent = ( + stableDebtToken: StableDebtToken, + receipt: TransactionReceipt, + eventName: string +) => { + const eventSig = STABLE_DEBT_TOKEN_EVENTS.find((item) => item.sig.split('(')[0] === eventName); + const results: utils.Result = []; + if (eventSig) { + const encodedSig = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(eventSig.sig)); + const rawEvents = receipt.logs.filter( + (log) => log.topics[0] === encodedSig && log.address == stableDebtToken.address + ); + for (const rawEvent of rawEvents) { + results.push( + stableDebtToken.interface.decodeEventLog(eventName, rawEvent.data, rawEvent.topics) + ); + } + } + return results; +}; diff --git a/test-suites/stable-debt-token-events.spec.ts b/test-suites/stable-debt-token-events.spec.ts new file mode 100644 index 000000000..15534445c --- /dev/null +++ b/test-suites/stable-debt-token-events.spec.ts @@ -0,0 +1,455 @@ +import {evmSnapshot, evmRevert, advanceTimeAndBlock, MintableERC20__factory} from '@aave/deploy-v3'; +import {expect} from 'chai'; +import {ethers} from 'hardhat'; +import {BigNumber} from 'ethers'; +import {TransactionReceipt} from '@ethersproject/providers'; +import {MAX_UINT_AMOUNT} from '../helpers/constants'; +import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; +import {RateMode} from '../helpers/types'; +import {Pool, StableDebtToken} from '../types'; +import {makeSuite, SignerWithAddress, TestEnv} from './helpers/make-suite'; +import { + supply, + stableBorrow, + repayStableBorrow, + getStableDebtTokenEvent, +} from './helpers/utils/tokenization-events'; + +const DEBUG = false; + +let balances = { + balance: {}, +}; + +const log = (str: string) => { + if (DEBUG) console.log(str); +}; + +const printBalance = async (name: string, debtToken: StableDebtToken, userAddress: string) => { + console.log( + name, + 'balanceOf', + await ethers.utils.formatEther(await debtToken.balanceOf(userAddress)) + ); +}; + +const increaseSupplyIndex = async ( + pool: Pool, + depositor: SignerWithAddress, + collateral: string, + assetToIncrease: string +) => { + const collateralToken = MintableERC20__factory.connect(collateral, depositor.signer); + const borrowingToken = MintableERC20__factory.connect(assetToIncrease, depositor.signer); + + await collateralToken + .connect(depositor.signer) + ['mint(uint256)'](await convertToCurrencyDecimals(collateralToken.address, '10000000')); + await collateralToken.connect(depositor.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(depositor.signer) + .deposit( + collateral, + await convertToCurrencyDecimals(collateral, '100000'), + depositor.address, + '0' + ); + + const {aTokenAddress} = await pool.getReserveData(assetToIncrease); + const availableLiquidity = await borrowingToken.balanceOf(aTokenAddress); + await pool + .connect(depositor.signer) + .borrow( + assetToIncrease, + availableLiquidity.percentMul('20'), + RateMode.Variable, + 0, + depositor.address + ); + + await advanceTimeAndBlock(10000000); +}; + +const updateBalances = ( + balances: any, + stableDebtDai: StableDebtToken, + receipt: TransactionReceipt +) => { + let events = getStableDebtTokenEvent(stableDebtDai, receipt, 'Mint'); + for (const ev of events) { + balances.balance[ev.onBehalfOf] = balances.balance[ev.onBehalfOf]?.add(ev.amount); + } + events = getStableDebtTokenEvent(stableDebtDai, receipt, 'Burn'); + for (const ev of events) { + balances.balance[ev.from] = balances.balance[ev.from]?.sub(ev.amount.add(ev.balanceIncrease)); + balances.balance[ev.from] = balances.balance[ev.from]?.add(ev.balanceIncrease); + } +}; + +makeSuite('StableDebtToken: Events', (testEnv: TestEnv) => { + let alice, bob, depositor, depositor2; + + let snapId; + + before(async () => { + const {users, pool, dai, weth} = testEnv; + [alice, bob, depositor, depositor2] = users; + + const amountToMint = await convertToCurrencyDecimals(dai.address, '10000000'); + const usersToInit = [alice, bob, depositor, depositor2]; + for (const user of usersToInit) { + await dai.connect(user.signer)['mint(uint256)'](amountToMint); + await weth.connect(user.signer)['mint(uint256)'](amountToMint); + await dai.connect(user.signer).approve(pool.address, MAX_UINT_AMOUNT); + await weth.connect(user.signer).approve(pool.address, MAX_UINT_AMOUNT); + } + + // Depositors + await pool.connect(depositor.signer).supply(weth.address, amountToMint, depositor.address, '0'); + await pool.connect(depositor.signer).supply(dai.address, amountToMint, depositor.address, '0'); + await pool + .connect(depositor2.signer) + .supply(weth.address, amountToMint, depositor2.address, '0'); + await pool + .connect(depositor2.signer) + .supply(dai.address, amountToMint, depositor2.address, '0'); + }); + + beforeEach(async () => { + snapId = await evmSnapshot(); + + // Init balances + balances = { + balance: { + [alice.address]: BigNumber.from(0), + [bob.address]: BigNumber.from(0), + }, + }; + }); + + afterEach(async () => { + await evmRevert(snapId); + }); + + it('Alice borrows 100 DAI, borrows 50 DAI, repays 20 DAI, repays 10 DAI, borrows 100 DAI, repays 220 DAI (without index change)', async () => { + await testMultipleBorrowsAndRepays(false); + }); + + it('Alice borrows 100 DAI, borrows 50 DAI, repays 20 DAI, repays 10 DAI, borrows 100 DAI, repays 220 DAI (with index change)', async () => { + await testMultipleBorrowsAndRepays(true); + }); + + const testMultipleBorrowsAndRepays = async (indexChange: boolean) => { + const {pool, dai, stableDebtDai, weth} = testEnv; + + let rcpt; + let aliceBalanceBefore = await stableDebtDai.balanceOf(alice.address); + + log('- Alice supplies 1000 WETH'); + await supply(pool, alice, weth.address, '100000', alice.address, false); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 100 DAI'); + rcpt = await stableBorrow(pool, alice, dai.address, '100', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 50 DAI more'); + rcpt = await stableBorrow(pool, alice, dai.address, '50', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (DEBUG) { + await printBalance('alice', stableDebtDai, alice.address); + } + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 20 DAI'); + rcpt = await repayStableBorrow(pool, alice, dai.address, '20', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 10 DAI'); + rcpt = await repayStableBorrow(pool, alice, dai.address, '10', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor2, weth.address, dai.address); + } + + log('- Alice borrows 100 DAI more'); + rcpt = await stableBorrow(pool, alice, dai.address, '100', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor2, weth.address, dai.address); + } + + log('- Alice repays 220 DAI'); + rcpt = await repayStableBorrow(pool, alice, dai.address, '220', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + // Check final balances + rcpt = await stableBorrow(pool, alice, dai.address, '1', alice.address); + updateBalances(balances, stableDebtDai, rcpt); + const aliceBalanceAfter = await stableDebtDai.balanceOf(alice.address); + + expect(aliceBalanceAfter).to.be.closeTo( + aliceBalanceBefore.add(balances.balance[alice.address]), + 2 + ); + log( + 'check', + aliceBalanceAfter.toString(), + aliceBalanceBefore.add(balances.balance[alice.address]).toString() + ); + }; + + it('Alice borrows 100 DAI, Bob borrows 100 DAI, Alice borrows 50 DAI, repays 150 DAI and repays 100 DAI on behalf of Bob, borrows 10 DAI more (without index change)', async () => { + await testMultipleBorrowsAndRepaysOnBehalf(false); + }); + + it('Alice borrows 100 DAI, Bob borrows 100 DAI, Alice borrows 50 DAI, repays 150 DAI and repays 100 DAI on behalf of Bob, borrows 10 DAI more (with index change)', async () => { + await testMultipleBorrowsAndRepaysOnBehalf(true); + }); + + const testMultipleBorrowsAndRepaysOnBehalf = async (indexChange: boolean) => { + const {pool, dai, stableDebtDai, weth} = testEnv; + + let rcpt; + let aliceBalanceBefore = await stableDebtDai.balanceOf(alice.address); + let bobBalanceBefore = await stableDebtDai.balanceOf(bob.address); + + log('- Alice supplies 1000 WETH'); + await supply(pool, alice, weth.address, '1000', alice.address, false); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 100 DAI'); + rcpt = await stableBorrow(pool, alice, dai.address, '100', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Bob supplies 1000 WETH'); + await supply(pool, bob, weth.address, '1000', bob.address, false); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Bob borrows 100 DAI'); + rcpt = await stableBorrow(pool, bob, dai.address, '100', bob.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 50 DAI more'); + rcpt = await stableBorrow(pool, alice, dai.address, '50', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 150 DAI'); + rcpt = await repayStableBorrow(pool, alice, dai.address, '150', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 50 DAI on behalf of Bob'); + rcpt = await repayStableBorrow(pool, alice, dai.address, '50', bob.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 50 DAI on behalf of Bob'); + rcpt = await repayStableBorrow(pool, alice, dai.address, '50', bob.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 10 DAI more'); + rcpt = await stableBorrow(pool, alice, dai.address, '10', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + if (DEBUG) { + await printBalance('alice', stableDebtDai, alice.address); + await printBalance('bob', stableDebtDai, bob.address); + } + + // Check final balances + rcpt = await stableBorrow(pool, alice, dai.address, '1', alice.address); + updateBalances(balances, stableDebtDai, rcpt); + const aliceBalanceAfter = await stableDebtDai.balanceOf(alice.address); + + rcpt = await stableBorrow(pool, bob, dai.address, '1', bob.address); + updateBalances(balances, stableDebtDai, rcpt); + const bobBalanceAfter = await stableDebtDai.balanceOf(bob.address); + + expect(aliceBalanceAfter).to.be.closeTo( + aliceBalanceBefore.add(balances.balance[alice.address]), + 5 + ); + expect(bobBalanceAfter).to.be.closeTo(bobBalanceBefore.add(balances.balance[bob.address]), 5); + }; + + it('Alice borrows 100 DAI, Bob borrows 100 DAI on behalf of Alice, Bob borrows 50 DAI, Alice borrows 50 DAI, repays 250 DAI and repays 50 DAI on behalf of Bob, borrows 10 DAI more (without index change)', async () => { + await testMultipleBorrowsOnBehalfAndRepaysOnBehalf(false); + }); + + it('Alice borrows 100 DAI, Bob borrows 100 DAI on behalf of Alice, Bob borrows 50 DAI, Alice borrows 50 DAI, repays 250 DAI and repays 50 DAI on behalf of Bob, borrows 10 DAI more (with index change)', async () => { + await testMultipleBorrowsOnBehalfAndRepaysOnBehalf(true); + }); + + const testMultipleBorrowsOnBehalfAndRepaysOnBehalf = async (indexChange: boolean) => { + const {pool, dai, stableDebtDai, weth} = testEnv; + + let rcpt; + let aliceBalanceBefore = await stableDebtDai.balanceOf(alice.address); + let bobBalanceBefore = await stableDebtDai.balanceOf(bob.address); + + log('- Alice supplies 1000 WETH'); + await supply(pool, alice, weth.address, '1000', alice.address, false); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 100 DAI'); + rcpt = await stableBorrow(pool, alice, dai.address, '100', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Bob borrows 100 DAI on behalf of Alice'); + await stableDebtDai.connect(alice.signer).approveDelegation(bob.address, MAX_UINT_AMOUNT); + rcpt = await stableBorrow(pool, bob, dai.address, '100', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Bob supplies 1000 WETH'); + await supply(pool, bob, weth.address, '1000', bob.address, false); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Bob borrows 50 DAI'); + rcpt = await stableBorrow(pool, bob, dai.address, '50', bob.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 50 DAI'); + rcpt = await stableBorrow(pool, alice, dai.address, '50', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 250 DAI'); + rcpt = await repayStableBorrow(pool, alice, dai.address, '250', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 50 DAI on behalf of Bob'); + rcpt = await repayStableBorrow(pool, alice, dai.address, '50', bob.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 10 DAI more'); + rcpt = await stableBorrow(pool, alice, dai.address, '10', alice.address, DEBUG); + updateBalances(balances, stableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + if (DEBUG) { + await printBalance('alice', stableDebtDai, alice.address); + await printBalance('bob', stableDebtDai, bob.address); + } + + // Check final balances + rcpt = await stableBorrow(pool, alice, dai.address, '1', alice.address); + updateBalances(balances, stableDebtDai, rcpt); + const aliceBalanceAfter = await stableDebtDai.balanceOf(alice.address); + + rcpt = await stableBorrow(pool, bob, dai.address, '1', bob.address); + updateBalances(balances, stableDebtDai, rcpt); + const bobBalanceAfter = await stableDebtDai.balanceOf(bob.address); + + expect(aliceBalanceAfter).to.be.closeTo( + aliceBalanceBefore.add(balances.balance[alice.address]), + 5 + ); + expect(bobBalanceAfter).to.be.closeTo(bobBalanceBefore.add(balances.balance[bob.address]), 5); + }; +}); diff --git a/test-suites/stable-debt-token.spec.ts b/test-suites/stable-debt-token.spec.ts index fa34952a5..e52c6ac6e 100644 --- a/test-suites/stable-debt-token.spec.ts +++ b/test-suites/stable-debt-token.spec.ts @@ -1,14 +1,15 @@ -import {expect} from 'chai'; -import {BigNumber, utils} from 'ethers'; -import {ProtocolErrors, RateMode} from '../helpers/types'; -import {MAX_UINT_AMOUNT, RAY, ZERO_ADDRESS} from '../helpers/constants'; -import {impersonateAccountsHardhat, setAutomine, setAutomineEvm} from '../helpers/misc-utils'; -import {makeSuite, TestEnv} from './helpers/make-suite'; -import {topUpNonPayableWithEther} from './helpers/utils/funds'; -import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; -import {HardhatRuntimeEnvironment} from 'hardhat/types'; -import {evmRevert, evmSnapshot, getStableDebtToken, increaseTime, waitForTx} from '@aave/deploy-v3'; -import {StableDebtToken__factory} from '../types'; +import { expect } from 'chai'; +import { BigNumber, utils } from 'ethers'; +import { ProtocolErrors, RateMode } from '../helpers/types'; +import { MAX_UINT_AMOUNT, RAY, ZERO_ADDRESS } from '../helpers/constants'; +import { impersonateAccountsHardhat, setAutomine, setAutomineEvm } from '../helpers/misc-utils'; +import { makeSuite, TestEnv } from './helpers/make-suite'; +import { topUpNonPayableWithEther } from './helpers/utils/funds'; +import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; +import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { evmRevert, evmSnapshot, getStableDebtToken, increaseTime, waitForTx } from '@aave/deploy-v3'; +import { StableDebtToken__factory } from '../types'; +import { getStableDebtTokenEvent } from './helpers/utils/tokenization-events'; declare var hre: HardhatRuntimeEnvironment; makeSuite('StableDebtToken', (testEnv: TestEnv) => { @@ -187,24 +188,11 @@ makeSuite('StableDebtToken', (testEnv: TestEnv) => { borrowOnBehalfAmount.add(borrowAmount) ); - const transferEventSig = utils.keccak256( - utils.toUtf8Bytes('Transfer(address,address,uint256)') - ); - const mintEventSig = utils.keccak256( - utils.toUtf8Bytes('Mint(address,address,uint256,uint256,uint256,uint256,uint256,uint256)') - ); + const parsedTransferEvents = getStableDebtTokenEvent(stableDebtToken, tx, 'Transfer'); + const transferAmount = parsedTransferEvents[0].value; - const rawTransferEvents = tx.logs.filter( - ({topics, address}) => topics[0] === transferEventSig && address == stableDebtToken.address - ); - const transferAmount = stableDebtToken.interface.parseLog(rawTransferEvents[0]).args.value; - - const rawMintEvents = tx.logs.filter( - ({topics, address}) => topics[0] === mintEventSig && address == stableDebtToken.address - ); - const {amount: mintAmount, balanceIncrease} = stableDebtToken.interface.parseLog( - rawMintEvents[0] - ).args; + const parsedMintEvents = getStableDebtTokenEvent(stableDebtToken, tx, 'Mint'); + const { amount: mintAmount, balanceIncrease } = parsedMintEvents[0]; expect(expectedDebtIncreaseUser1.add(borrowOnBehalfAmount)).to.be.eq(transferAmount); expect(borrowOnBehalfAmount.add(balanceIncrease)).to.be.eq(mintAmount); diff --git a/test-suites/variable-debt-token-events.spec.ts b/test-suites/variable-debt-token-events.spec.ts new file mode 100644 index 000000000..f409a9b08 --- /dev/null +++ b/test-suites/variable-debt-token-events.spec.ts @@ -0,0 +1,457 @@ +import { + evmSnapshot, + evmRevert, + advanceTimeAndBlock, + MintableERC20__factory, +} from '@aave/deploy-v3'; +import { expect } from 'chai'; +import { ethers } from 'hardhat'; +import { BigNumber } from 'ethers'; +import { TransactionReceipt } from '@ethersproject/providers'; +import { MAX_UINT_AMOUNT } from '../helpers/constants'; +import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; +import { RateMode } from '../helpers/types'; +import { Pool, VariableDebtToken } from '../types'; +import { makeSuite, SignerWithAddress, TestEnv } from './helpers/make-suite'; +import { + supply, + variableBorrow, + getVariableDebtTokenEvent, + repayVariableBorrow, +} from './helpers/utils/tokenization-events'; + +const DEBUG = false; + +let balances = { + balance: {}, +}; + +const log = (str: string) => { + if (DEBUG) console.log(str); +}; + +const printBalance = async (name: string, debtToken: VariableDebtToken, userAddress: string) => { + console.log( + name, + 'balanceOf', + await ethers.utils.formatEther(await debtToken.balanceOf(userAddress)), + 'scaledBalance', + await ethers.utils.formatEther(await debtToken.scaledBalanceOf(userAddress)) + ); +}; + +const increaseSupplyIndex = async ( + pool: Pool, + depositor: SignerWithAddress, + collateral: string, + assetToIncrease: string +) => { + const collateralToken = MintableERC20__factory.connect(collateral, depositor.signer); + const borrowingToken = MintableERC20__factory.connect(assetToIncrease, depositor.signer); + + await collateralToken + .connect(depositor.signer) + ['mint(uint256)'](await convertToCurrencyDecimals(collateralToken.address, '10000000')); + await collateralToken.connect(depositor.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(depositor.signer) + .deposit( + collateral, + await convertToCurrencyDecimals(collateral, '100000'), + depositor.address, + '0' + ); + + const { aTokenAddress } = await pool.getReserveData(assetToIncrease); + const availableLiquidity = await borrowingToken.balanceOf(aTokenAddress); + await pool + .connect(depositor.signer) + .borrow( + assetToIncrease, + availableLiquidity.percentMul('20'), + RateMode.Variable, + 0, + depositor.address + ); + + await advanceTimeAndBlock(10000000000); +}; + +const updateBalances = ( + balances: any, + variableDebtToken: VariableDebtToken, + receipt: TransactionReceipt +) => { + let events = getVariableDebtTokenEvent(variableDebtToken, receipt, 'Mint'); + for (const ev of events) { + balances.balance[ev.onBehalfOf] = balances.balance[ev.onBehalfOf]?.add(ev.value); + } + events = getVariableDebtTokenEvent(variableDebtToken, receipt, 'Burn'); + for (const ev of events) { + balances.balance[ev.from] = balances.balance[ev.from]?.sub(ev.value.add(ev.balanceIncrease)); + balances.balance[ev.from] = balances.balance[ev.from]?.add(ev.balanceIncrease); + } +}; + +makeSuite('VariableDebtToken: Events', (testEnv: TestEnv) => { + let alice, bob, depositor, depositor2; + + let snapId; + + before(async () => { + const { users, pool, dai, weth } = testEnv; + [alice, bob, depositor, depositor2] = users; + + const amountToMint = await convertToCurrencyDecimals(dai.address, '10000000'); + const usersToInit = [alice, bob, depositor, depositor2]; + for (const user of usersToInit) { + await dai.connect(user.signer)['mint(uint256)'](amountToMint); + await weth.connect(user.signer)['mint(uint256)'](amountToMint); + await dai.connect(user.signer).approve(pool.address, MAX_UINT_AMOUNT); + await weth.connect(user.signer).approve(pool.address, MAX_UINT_AMOUNT); + } + + // Depositors + await pool.connect(depositor.signer).supply(weth.address, amountToMint, depositor.address, '0'); + await pool.connect(depositor.signer).supply(dai.address, amountToMint, depositor.address, '0'); + await pool + .connect(depositor2.signer) + .supply(weth.address, amountToMint, depositor2.address, '0'); + await pool + .connect(depositor2.signer) + .supply(dai.address, amountToMint, depositor2.address, '0'); + }); + + beforeEach(async () => { + snapId = await evmSnapshot(); + + // Init balances + balances = { + balance: { + [alice.address]: BigNumber.from(0), + [bob.address]: BigNumber.from(0), + }, + }; + }); + + afterEach(async () => { + await evmRevert(snapId); + }); + + it('Alice borrows 100 DAI, borrows 50 DAI, repays 20 DAI, repays 10 DAI, borrows 100 DAI, repays 220 DAI (without index change)', async () => { + await testMultipleBorrowsAndRepays(false); + }); + + it('Alice borrows 100 DAI, borrows 50 DAI, repays 20 DAI, repays 10 DAI, borrows 100 DAI, repays 220 DAI (with index change)', async () => { + await testMultipleBorrowsAndRepays(true); + }); + + const testMultipleBorrowsAndRepays = async (indexChange: boolean) => { + const { pool, dai, variableDebtDai, weth } = testEnv; + + let rcpt; + let aliceBalanceBefore = await variableDebtDai.balanceOf(alice.address); + + log('- Alice supplies 1000 WETH'); + await supply(pool, alice, weth.address, '1000', alice.address, false); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 100 DAI'); + rcpt = await variableBorrow(pool, alice, dai.address, '100', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 50 DAI more'); + rcpt = await variableBorrow(pool, alice, dai.address, '50', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 20 DAI'); + rcpt = await repayVariableBorrow(pool, alice, dai.address, '20', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 10 DAI'); + rcpt = await repayVariableBorrow(pool, alice, dai.address, '10', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 100 DAI more'); + rcpt = await variableBorrow(pool, alice, dai.address, '100', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 220 DAI'); + rcpt = await repayVariableBorrow(pool, alice, dai.address, '220', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (DEBUG) { + await printBalance('alice', variableDebtDai, alice.address); + } + + // Check final balances + rcpt = await variableBorrow(pool, alice, dai.address, '1', alice.address); + updateBalances(balances, variableDebtDai, rcpt); + const aliceBalanceAfter = await variableDebtDai.balanceOf(alice.address); + + expect(aliceBalanceAfter).to.be.closeTo( + aliceBalanceBefore.add(balances.balance[alice.address]), + 2 + ); + }; + + it('Alice borrows 100 DAI, Bob borrows 100 DAI, Alice borrows 50 DAI, repays 150 DAI and repays 100 DAI on behalf of Bob, borrows 10 DAI more (without index change)', async () => { + await testMultipleBorrowsAndRepaysOnBehalf(false); + }); + + it('Alice borrows 100 DAI, Bob borrows 100 DAI, Alice borrows 50 DAI, repays 150 DAI and repays 100 DAI on behalf of Bob, borrows 10 DAI more (with index change)', async () => { + await testMultipleBorrowsAndRepaysOnBehalf(true); + }); + + const testMultipleBorrowsAndRepaysOnBehalf = async (indexChange: boolean) => { + const { pool, dai, variableDebtDai, weth } = testEnv; + + let rcpt; + let aliceBalanceBefore = await variableDebtDai.balanceOf(alice.address); + let bobBalanceBefore = await variableDebtDai.balanceOf(bob.address); + + log('- Alice supplies 1000 WETH'); + await supply(pool, alice, weth.address, '1000', alice.address, false); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 100 DAI'); + rcpt = await variableBorrow(pool, alice, dai.address, '100', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Bob supplies 1000 WETH'); + await supply(pool, bob, weth.address, '1000', bob.address, false); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Bob borrows 100 DAI'); + rcpt = await variableBorrow(pool, bob, dai.address, '100', bob.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 50 DAI more'); + rcpt = await variableBorrow(pool, alice, dai.address, '50', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 150 DAI'); + rcpt = await repayVariableBorrow(pool, alice, dai.address, '150', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 50 DAI on behalf of Bob'); + rcpt = await repayVariableBorrow(pool, alice, dai.address, '50', bob.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 50 DAI on behalf of Bob'); + rcpt = await repayVariableBorrow(pool, alice, dai.address, '50', bob.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 10 DAI more'); + rcpt = await variableBorrow(pool, alice, dai.address, '10', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + if (DEBUG) { + await printBalance('alice', variableDebtDai, alice.address); + await printBalance('bob', variableDebtDai, bob.address); + } + + // Check final balances + rcpt = await variableBorrow(pool, alice, dai.address, '1', alice.address); + updateBalances(balances, variableDebtDai, rcpt); + const aliceBalanceAfter = await variableDebtDai.balanceOf(alice.address); + + rcpt = await variableBorrow(pool, bob, dai.address, '1', bob.address); + updateBalances(balances, variableDebtDai, rcpt); + const bobBalanceAfter = await variableDebtDai.balanceOf(bob.address); + + expect(aliceBalanceAfter).to.be.closeTo( + aliceBalanceBefore.add(balances.balance[alice.address]), + 5 + ); + expect(bobBalanceAfter).to.be.closeTo(bobBalanceBefore.add(balances.balance[bob.address]), 5); + }; + + it('Alice borrows 100 DAI, Bob borrows 100 DAI on behalf of Alice, Bob borrows 50 DAI, Alice borrows 50 DAI, repays 250 DAI and repays 50 DAI on behalf of Bob, borrows 10 DAI more (without index change)', async () => { + await testMultipleBorrowsOnBehalfAndRepaysOnBehalf(false); + }); + + it('Alice borrows 100 DAI, Bob borrows 100 DAI on behalf of Alice, Bob borrows 50 DAI, Alice borrows 50 DAI, repays 250 DAI and repays 50 DAI on behalf of Bob, borrows 10 DAI more (with index change)', async () => { + await testMultipleBorrowsOnBehalfAndRepaysOnBehalf(true); + }); + + const testMultipleBorrowsOnBehalfAndRepaysOnBehalf = async (indexChange: boolean) => { + const { pool, dai, variableDebtDai, weth } = testEnv; + + let rcpt; + let aliceBalanceBefore = await variableDebtDai.balanceOf(alice.address); + let bobBalanceBefore = await variableDebtDai.balanceOf(bob.address); + + log('- Alice supplies 1000 WETH'); + await supply(pool, alice, weth.address, '1000', alice.address, false); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 100 DAI'); + rcpt = await variableBorrow(pool, alice, dai.address, '100', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Bob borrows 100 DAI on behalf of Alice'); + await variableDebtDai.connect(alice.signer).approveDelegation(bob.address, MAX_UINT_AMOUNT); + rcpt = await variableBorrow(pool, bob, dai.address, '100', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Bob supplies 1000 WETH'); + await supply(pool, bob, weth.address, '1000', bob.address, false); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Bob borrows 50 DAI'); + rcpt = await variableBorrow(pool, bob, dai.address, '50', bob.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 50 DAI'); + rcpt = await variableBorrow(pool, alice, dai.address, '50', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 250 DAI'); + rcpt = await repayVariableBorrow(pool, alice, dai.address, '250', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice repays 50 DAI on behalf of Bob'); + rcpt = await repayVariableBorrow(pool, alice, dai.address, '50', bob.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + log('- Alice borrows 10 DAI more'); + rcpt = await variableBorrow(pool, alice, dai.address, '10', alice.address, DEBUG); + updateBalances(balances, variableDebtDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, depositor, weth.address, dai.address); + } + + if (DEBUG) { + await printBalance('alice', variableDebtDai, alice.address); + await printBalance('bob', variableDebtDai, bob.address); + } + + // Check final balances + rcpt = await variableBorrow(pool, alice, dai.address, '1', alice.address); + updateBalances(balances, variableDebtDai, rcpt); + const aliceBalanceAfter = await variableDebtDai.balanceOf(alice.address); + + rcpt = await variableBorrow(pool, bob, dai.address, '1', bob.address); + updateBalances(balances, variableDebtDai, rcpt); + const bobBalanceAfter = await variableDebtDai.balanceOf(bob.address); + + expect(aliceBalanceAfter).to.be.closeTo( + aliceBalanceBefore.add(balances.balance[alice.address]), + 5 + ); + expect(bobBalanceAfter).to.be.closeTo(bobBalanceBefore.add(balances.balance[bob.address]), 5); + }; +}); diff --git a/test-suites/variable-debt-token.spec.ts b/test-suites/variable-debt-token.spec.ts index 9f9029a36..f303643f4 100644 --- a/test-suites/variable-debt-token.spec.ts +++ b/test-suites/variable-debt-token.spec.ts @@ -1,12 +1,12 @@ -import {expect} from 'chai'; -import {utils} from 'ethers'; -import {impersonateAccountsHardhat, setAutomine, setAutomineEvm} from '../helpers/misc-utils'; -import {MAX_UINT_AMOUNT, ZERO_ADDRESS} from '../helpers/constants'; -import {ProtocolErrors, RateMode} from '../helpers/types'; -import {makeSuite, TestEnv} from './helpers/make-suite'; -import {topUpNonPayableWithEther} from './helpers/utils/funds'; -import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; -import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import { expect } from 'chai'; +import { utils } from 'ethers'; +import { impersonateAccountsHardhat, setAutomine, setAutomineEvm } from '../helpers/misc-utils'; +import { MAX_UINT_AMOUNT, ZERO_ADDRESS } from '../helpers/constants'; +import { ProtocolErrors, RateMode } from '../helpers/types'; +import { makeSuite, TestEnv } from './helpers/make-suite'; +import { topUpNonPayableWithEther } from './helpers/utils/funds'; +import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; +import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { evmRevert, evmSnapshot, @@ -14,8 +14,9 @@ import { increaseTime, waitForTx, } from '@aave/deploy-v3'; -import {VariableDebtToken__factory} from '../types'; +import { VariableDebtToken__factory } from '../types'; import './helpers/utils/wadraymath'; +import { getVariableDebtTokenEvent } from './helpers/utils/tokenization-events'; declare var hre: HardhatRuntimeEnvironment; @@ -364,29 +365,13 @@ makeSuite('VariableDebtToken', (testEnv: TestEnv) => { const interest = afterDebtBalanceUser1.sub(borrowAmount).sub(borrowOnBehalfAmount); - const transferEventSig = utils.keccak256( - utils.toUtf8Bytes('Transfer(address,address,uint256)') - ); - - const rawTransferEvents = tx.logs.filter( - ({topics, address}) => topics[0] === transferEventSig && address == variableDebtToken.address - ); - const parsedTransferEvent = variableDebtToken.interface.parseLog(rawTransferEvents[0]); - const transferAmount = parsedTransferEvent.args.value; - + const parsedTransferEvents = getVariableDebtTokenEvent(variableDebtToken, tx, 'Transfer'); + const transferAmount = parsedTransferEvents[0].value; expect(transferAmount).to.be.closeTo(borrowOnBehalfAmount.add(interest), 2); - const mintEventSig = utils.keccak256( - utils.toUtf8Bytes('Mint(address,address,uint256,uint256,uint256)') - ); - const rawMintEvents = tx.logs.filter( - ({topics, address}) => topics[0] === mintEventSig && address == variableDebtToken.address - ); - - const parsedMintEvent = variableDebtToken.interface.parseLog(rawMintEvents[0]); - - expect(parsedMintEvent.args.value).to.be.closeTo(borrowOnBehalfAmount.add(interest), 2); - expect(parsedMintEvent.args.balanceIncrease).to.be.closeTo(interest, 2); + const parsedMintEvents = getVariableDebtTokenEvent(variableDebtToken, tx, 'Mint'); + expect(parsedMintEvents[0].value).to.be.closeTo(borrowOnBehalfAmount.add(interest), 2); + expect(parsedMintEvents[0].balanceIncrease).to.be.closeTo(interest, 2); }); it('User borrows and repays in same block with zero fees', async () => { From 84b900ce583eb8b1174357c05882e4a9f1854c38 Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Tue, 15 Nov 2022 18:07:48 +0100 Subject: [PATCH 59/87] fix: Reformat code --- .../libraries/configuration/ReserveConfiguration.sol | 1 - contracts/protocol/libraries/logic/LiquidationLogic.sol | 6 ++++-- contracts/protocol/libraries/logic/ReserveLogic.sol | 6 ++---- test-suites/stable-debt-token-events.spec.ts | 5 ----- 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol index 36498bcd9..b29007156 100644 --- a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol +++ b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol @@ -42,7 +42,6 @@ library ReserveConfiguration { uint256 internal constant BORROWABLE_IN_ISOLATION_START_BIT_POSITION = 61; uint256 internal constant SILOED_BORROWING_START_BIT_POSITION = 62; uint256 internal constant FLASHLOAN_ENABLED_START_BIT_POSITION = 63; - uint256 internal constant RESERVE_FACTOR_START_BIT_POSITION = 64; uint256 internal constant BORROW_CAP_START_BIT_POSITION = 80; uint256 internal constant SUPPLY_CAP_START_BIT_POSITION = 116; diff --git a/contracts/protocol/libraries/logic/LiquidationLogic.sol b/contracts/protocol/libraries/logic/LiquidationLogic.sol index 42c896001..aea05b760 100644 --- a/contracts/protocol/libraries/logic/LiquidationLogic.sol +++ b/contracts/protocol/libraries/logic/LiquidationLogic.sol @@ -199,7 +199,9 @@ library LiquidationLogic { // Transfer fee to treasury if it is non-zero if (vars.liquidationProtocolFeeAmount != 0) { uint256 liquidityIndex = collateralReserve.getNormalizedIncome(); - uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv(liquidityIndex); + uint256 scaledDownLiquidationProtocolFee = vars.liquidationProtocolFeeAmount.rayDiv( + liquidityIndex + ); uint256 scaledDownUserBalance = vars.collateralAToken.scaledBalanceOf(params.user); // To avoid trying to send more aTokens than available on balance, due to 1 wei imprecision if (scaledDownLiquidationProtocolFee > scaledDownUserBalance) { @@ -211,7 +213,7 @@ library LiquidationLogic { vars.liquidationProtocolFeeAmount ); } - + // Transfers the debt asset being repaid to the aToken, where the liquidity is kept IERC20(params.debtAsset).safeTransferFrom( msg.sender, diff --git a/contracts/protocol/libraries/logic/ReserveLogic.sol b/contracts/protocol/libraries/logic/ReserveLogic.sol index a7b563c95..c73655f18 100644 --- a/contracts/protocol/libraries/logic/ReserveLogic.sol +++ b/contracts/protocol/libraries/logic/ReserveLogic.sol @@ -350,10 +350,8 @@ library ReserveLogic { reserveCache.reserveLastUpdateTimestamp = reserve.lastUpdateTimestamp; reserveCache.currScaledVariableDebt = reserveCache.nextScaledVariableDebt = IVariableDebtToken( - reserveCache - .variableDebtTokenAddress - ) - .scaledTotalSupply(); + reserveCache.variableDebtTokenAddress + ).scaledTotalSupply(); ( reserveCache.currPrincipalStableDebt, diff --git a/test-suites/stable-debt-token-events.spec.ts b/test-suites/stable-debt-token-events.spec.ts index 15534445c..6ab5dc492 100644 --- a/test-suites/stable-debt-token-events.spec.ts +++ b/test-suites/stable-debt-token-events.spec.ts @@ -215,11 +215,6 @@ makeSuite('StableDebtToken: Events', (testEnv: TestEnv) => { aliceBalanceBefore.add(balances.balance[alice.address]), 2 ); - log( - 'check', - aliceBalanceAfter.toString(), - aliceBalanceBefore.add(balances.balance[alice.address]).toString() - ); }; it('Alice borrows 100 DAI, Bob borrows 100 DAI, Alice borrows 50 DAI, repays 150 DAI and repays 100 DAI on behalf of Bob, borrows 10 DAI more (without index change)', async () => { From a54692a54eddf2c0d5531de86ae298c491a2b192 Mon Sep 17 00:00:00 2001 From: David K Date: Fri, 25 Nov 2022 12:24:13 +0100 Subject: [PATCH 60/87] fix: update hardhat dependencies and fix test-suite error codes (#739) * fix: update hardhat dependencies and fix test-suite error codes * fix: Update version of periphery package * chore: rollback version * chore: remove unused deps, add save-exact config to .npmrc --- .npmrc | 4 +- .prettierrc | 6 + docker-compose.yml | 1 - hardhat.config.ts | 9 +- helpers/types.ts | 2 +- package-lock.json | 47630 +++++----------- package.json | 32 +- test-suites/acl-manager.spec.ts | 6 +- test-suites/atoken-repay.spec.ts | 2 +- test-suites/helpers/actions.ts | 3 +- test-suites/helpers/make-suite.ts | 7 - test-suites/helpers/utils/calculations.ts | 4 +- test-suites/helpers/utils/helpers.ts | 3 +- test-suites/helpers/utils/interfaces/index.ts | 3 +- .../helpers/utils/tokenization-events.ts | 13 +- test-suites/liquidation-emode.spec.ts | 2 +- test-suites/liquidation-underlying.spec.ts | 4 +- test-suites/liquidation-with-fee.spec.ts | 32 +- test-suites/liquidity-indexes.spec.ts | 11 +- test-suites/rate-strategy.spec.ts | 3 +- test-suites/reserve-configuration.spec.ts | 20 +- test-suites/stable-debt-token-events.spec.ts | 35 +- test-suites/wadraymath.spec.ts | 2 +- tsconfig.json | 1 - 24 files changed, 13697 insertions(+), 34138 deletions(-) diff --git a/.npmrc b/.npmrc index 7a78c8a0e..284495c09 100644 --- a/.npmrc +++ b/.npmrc @@ -1,2 +1,2 @@ -@aave:registry=https://npm.pkg.github.com -engine-strict=true \ No newline at end of file +engine-strict=true +save-exact=true \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index 2caa9822e..c7608ccf5 100644 --- a/.prettierrc +++ b/.prettierrc @@ -5,6 +5,12 @@ "singleQuote": true, "tabWidth": 2, "overrides": [ + { + "files": "*.ts", + "options": { + "bracketSpacing": true + } + }, { "files": "*.sol", "options": { diff --git a/docker-compose.yml b/docker-compose.yml index c54b7924c..b2fa6abd2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,6 @@ services: command: npm run run-env volumes: - ./:/src - - $HOME/.tenderly/config.yaml:/root/.tenderly/config.yaml environment: MNEMONIC: ${MNEMONIC} ETHERSCAN_KEY: ${ETHERSCAN_KEY} diff --git a/hardhat.config.ts b/hardhat.config.ts index f5b675e28..c7064c1ad 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -7,14 +7,9 @@ import {buildForkConfig} from './helper-hardhat-config'; require('dotenv').config(); -import '@nomiclabs/hardhat-ethers'; -import '@nomiclabs/hardhat-etherscan'; -import 'hardhat-gas-reporter'; -import '@typechain/hardhat'; -import '@typechain/ethers-v5'; +import '@nomicfoundation/hardhat-toolbox'; import 'hardhat-deploy'; import '@tenderly/hardhat-tenderly'; -import 'solidity-coverage'; import 'hardhat-contract-sizer'; import 'hardhat-dependency-compiler'; import {DEFAULT_NAMED_ACCOUNTS} from '@aave/deploy-v3'; @@ -22,7 +17,7 @@ import {DEFAULT_NAMED_ACCOUNTS} from '@aave/deploy-v3'; const DEFAULT_BLOCK_GAS_LIMIT = 12450000; const HARDFORK = 'london'; -const hardhatConfig: HardhatUserConfig = { +const hardhatConfig = { gasReporter: { enabled: true, }, diff --git a/helpers/types.ts b/helpers/types.ts index 2d6cbc4e2..9c9a3daf9 100644 --- a/helpers/types.ts +++ b/helpers/types.ts @@ -1,4 +1,4 @@ -import {BigNumber} from 'ethers'; +import {BigNumber} from '@ethersproject/bignumber'; export interface SymbolMap { [symbol: string]: T; diff --git a/package-lock.json b/package-lock.json index 4f2217342..3d01212de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,49 +8,34 @@ "name": "@aave/core-v3", "version": "1.16.2-beta.1", "license": "BUSL-1.1", - "dependencies": { - "@nomiclabs/hardhat-etherscan": "^2.1.7", - "axios-curlirize": "^1.3.7", - "tmp-promise": "^3.0.2" - }, "devDependencies": { - "@aave/deploy-v3": "1.27.0-beta.7", - "@aave/periphery-v3": "^1.19.2-beta.0", - "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.13", + "@aave/deploy-v3": "^1.50.0", + "@aave/periphery-v3": "^1.21.0", + "@ethersproject/bignumber": "^5.6.2", + "@nomicfoundation/hardhat-toolbox": "^2.0.0", "@tenderly/hardhat-tenderly": "1.1.0-beta.5", - "@typechain/ethers-v5": "7.2.0", - "@typechain/hardhat": "2.3.1", "@types/chai": "4.2.11", "@types/lowdb": "1.0.9", - "@types/mocha": "7.0.2", "@types/node": "14.0.5", - "chai": "4.3.4", - "chai-bignumber": "3.0.0", - "defender-relay-client": "1.7.0", + "bluebird": "^3.7.2", "dotenv": "8.2.0", "eth-sig-util": "2.5.3", - "ethereum-waffle": "3.2.0", "ethereumjs-util": "7.0.2", "ethers": "5.6.9", - "globby": "11.0.1", - "hardhat": "2.10.0", + "hardhat": "2.12.2", "hardhat-contract-sizer": "2.0.3", "hardhat-dependency-compiler": "1.1.2", "hardhat-deploy": "0.11.12", "hardhat-gas-reporter": "1.0.8", "husky": "4.2.5", - "lowdb": "1.0.0", "prettier": "2.4.1", "prettier-plugin-solidity": "1.0.0-alpha.53", "pretty-quick": "3.1.1", - "solidity-coverage": "0.7.17", - "ts-generator": "0.1.1", "ts-node": "8.10.2", "tslint": "6.1.2", "tslint-config-prettier": "1.18.0", "tslint-plugin-prettier": "2.3.0", - "typechain": "5.2.0", - "typescript": "4.4.4" + "typescript": "^4.5.0" }, "engines": { "node": ">=16.0.0" @@ -58,44 +43,62 @@ }, "node_modules/@aave/core-v3": { "version": "1.16.2", - "resolved": "https://npm.pkg.github.com/download/@aave/core-v3/1.16.2/c828f6a1f3c43e4e9cf6031fff4ec844f2e6359e", - "integrity": "sha512-oZZ1TZCrN3mIc445etZUbsaTVysa9SMCD/inoNDosM0f0Ulyhz7dT4319VGwt4yGrZRLehdJtpGkzBffqEezMw==", + "resolved": "https://registry.npmjs.org/@aave/core-v3/-/core-v3-1.16.2.tgz", + "integrity": "sha512-COze5EN2kFVRSkwmpV5+5m5GaRvJWC587/0e6Z5NlTSXZ38CF+SeuKtMXhFgBXk2oDgYbuKwvjuBk+vJMgThYg==", "dev": true, - "license": "BUSL-1.1", "dependencies": { "@nomiclabs/hardhat-etherscan": "^2.1.7", "axios-curlirize": "^1.3.7", "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aave/core-v3/node_modules/@nomiclabs/hardhat-etherscan": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz", + "integrity": "sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^5.0.2", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "node-fetch": "^2.6.0", + "semver": "^6.3.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" } }, "node_modules/@aave/deploy-v3": { - "version": "1.27.0-beta.7", - "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.27.0-beta.7/cd30b47fbf4e1392255458b0140f1c343cd68c2e", - "integrity": "sha512-KNtHLnzKZi0tLZxHbxbBDdByx71cei9ByeF0a3b09UYSbNOIEh9m0RRiUSKAFSZpsc8A0YJMvl8RbmIIhw6Xjw==", + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/@aave/deploy-v3/-/deploy-v3-1.50.0.tgz", + "integrity": "sha512-NeAVwcV583oHH0IHLcZUR9nTV05qGOWgONgvuZSo67RNBjpoZUiMEtTt4S0j9Zl9HGtN6yhWg4B5EFVo96NPGQ==", "dev": true, - "license": "AGPLv3", "dependencies": { - "bip39": "^3.0.4", "defender-relay-client": "^1.11.1" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@aave/core-v3": "1.x", - "@aave/periphery-v3": "1.x", + "@aave/core-v3": "x || >=1.0.0-beta || >=3.0.0-beta", + "@aave/periphery-v3": "x || >=1.0.0-beta || >=3.0.0-beta", "hardhat": "^2.6.1" } }, "node_modules/@aave/deploy-v3/node_modules/defender-relay-client": { - "version": "1.26.1", - "resolved": "https://registry.npmjs.org/defender-relay-client/-/defender-relay-client-1.26.1.tgz", - "integrity": "sha512-EoVQqrPS5PlCjCfZPV2wG9TBBezImYD5tf4DV3dbbXaxdTlD6bTcd3AFj4GLZss8EjXnCrQc2JAT5BWMLuQ2UQ==", + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/defender-relay-client/-/defender-relay-client-1.37.0.tgz", + "integrity": "sha512-c2V1AxPmnRC8Gj62cI2WQFJR4GECPoktbiGf/+l37Wxrnh38f4My/o6nZ/tqGkGt4kt8kzfmqciI2lNiUtlPDA==", "dev": true, "dependencies": { "amazon-cognito-identity-js": "^4.3.3", "axios": "^0.21.2", - "defender-base-client": "^1.23.0", + "defender-base-client": "1.37.0", "lodash": "^4.17.19", "node-fetch": "^2.6.0" }, @@ -110,11 +113,10 @@ } }, "node_modules/@aave/periphery-v3": { - "version": "1.20.0", - "resolved": "https://npm.pkg.github.com/download/@aave/periphery-v3/1.20.0/d4459879abc4a3f1ab0d0951d4e8e0d9cfab2dd8", - "integrity": "sha512-yf7Voe2DWsT9HcCalFbYe6AtTUOt2Cd8iopv14JIkSfzhCdGW41PuhVjKQgFowkumZP+RtwQTZP27yiFO472JQ==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@aave/periphery-v3/-/periphery-v3-1.21.0.tgz", + "integrity": "sha512-imTSAoUX1+WjXD3Jo0jMErFe+KoH2GaH0Q13NrghsdksbZDWjGhM9kTQortZ6Em4jlxyuaS5+3fRWBCxvRp9LQ==", "dev": true, - "license": "AGPLv3", "dependencies": { "@aave/core-v3": "1.16.2" } @@ -132,9 +134,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "dev": true, "engines": { "node": ">=6.9.0" @@ -164,533 +166,292 @@ "node": ">=0.1.90" } }, - "node_modules/@ensdomains/ens": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", - "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", - "deprecated": "Please use @ensdomains/ens-contracts", + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "bluebird": "^3.5.2", - "eth-ens-namehash": "^2.0.8", - "solc": "^0.4.20", - "testrpc": "0.0.1", - "web3-utils": "^1.0.0-beta.31" - } - }, - "node_modules/@ensdomains/ens/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ensdomains/ens/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" } }, - "node_modules/@ensdomains/ens/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@ensdomains/ens/node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "node_modules/@ensdomains/ens/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@ensdomains/ens/node_modules/require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true - }, - "node_modules/@ensdomains/ens/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" } }, - "node_modules/@ensdomains/ens/node_modules/solc": { - "version": "0.4.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", - "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "fs-extra": "^0.30.0", - "memorystream": "^0.3.1", - "require-from-string": "^1.1.0", - "semver": "^5.3.0", - "yargs": "^4.7.1" - }, - "bin": { - "solcjs": "solcjs" + "@ethersproject/bytes": "^5.7.0" } }, - "node_modules/@ensdomains/ens/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/@ensdomains/ens/node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true - }, - "node_modules/@ensdomains/ens/node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" } }, - "node_modules/@ensdomains/ens/node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "node_modules/@ensdomains/ens/node_modules/yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.1", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ensdomains/ens/node_modules/yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" + "@ethersproject/bignumber": "^5.7.0" } }, - "node_modules/@ensdomains/resolver": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", - "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", - "deprecated": "Please use @ensdomains/ens-contracts", - "dev": true - }, - "node_modules/@ethereum-waffle/chai": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.4.4.tgz", - "integrity": "sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g==", + "node_modules/@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.5.2" - }, - "engines": { - "node": ">=10.0" + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" } }, - "node_modules/@ethereum-waffle/compiler": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz", - "integrity": "sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==", + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@resolver-engine/imports": "^0.3.3", - "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^2.0.0", - "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.5.5", - "ethers": "^5.0.1", - "mkdirp": "^0.5.1", - "node-fetch": "^2.6.1", - "solc": "^0.6.3", - "ts-generator": "^0.1.1", - "typechain": "^3.0.0" - }, - "engines": { - "node": ">=10.0" + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethereum-waffle/compiler/node_modules/@typechain/ethers-v5": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", - "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", + "node_modules/@ethersproject/hdnode": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", + "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "ethers": "^5.0.2" - }, - "peerDependencies": { - "ethers": "^5.0.0", - "typechain": "^3.0.0" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/ts-essentials": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", - "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", - "dev": true, - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/typechain": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", - "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", - "dev": true, - "dependencies": { - "command-line-args": "^4.0.7", - "debug": "^4.1.1", - "fs-extra": "^7.0.0", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "ts-essentials": "^6.0.3", - "ts-generator": "^0.1.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - } - }, - "node_modules/@ethereum-waffle/ens": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.4.4.tgz", - "integrity": "sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg==", - "dev": true, - "dependencies": { - "@ensdomains/ens": "^0.4.4", - "@ensdomains/resolver": "^0.2.4", - "ethers": "^5.5.2" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/@ethereum-waffle/mock-contract": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz", - "integrity": "sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.5.0", - "ethers": "^5.5.2" - }, - "engines": { - "node": ">=10.0" + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" } }, - "node_modules/@ethereum-waffle/provider": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.4.4.tgz", - "integrity": "sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g==", + "node_modules/@ethersproject/json-wallets": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", + "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", "dev": true, - "dependencies": { - "@ethereum-waffle/ens": "^3.4.4", - "ethers": "^5.5.2", - "ganache-core": "^2.13.2", - "patch-package": "^6.2.2", - "postinstall-postinstall": "^2.1.0" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "dependencies": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - } - }, - "node_modules/@ethereumjs/block/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ethereumjs/block/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dependencies": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - } - }, - "node_modules/@ethereumjs/blockchain/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ethereumjs/blockchain/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/common/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ethereumjs/common/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dependencies": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - } - }, - "node_modules/@ethereumjs/ethash/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ethereumjs/ethash/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/tx/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ethereumjs/tx/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/vm": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", - "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", - "dependencies": { - "@ethereumjs/block": "^3.6.3", - "@ethereumjs/blockchain": "^5.5.3", - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.4", - "rustbn.js": "~0.2.0" - } - }, - "node_modules/@ethereumjs/vm/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ethereumjs/vm/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", "funding": [ { "type": "individual", @@ -702,21 +463,26 @@ } ], "dependencies": { + "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", "@ethersproject/keccak256": "^5.6.1", "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" } }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "dev": true, "funding": [ { "type": "individual", @@ -728,19 +494,31 @@ } ], "dependencies": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" } }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "dev": true, "funding": [ { "type": "individual", @@ -752,17 +530,14 @@ } ], "dependencies": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/address": { + "node_modules/@ethersproject/pbkdf2": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", + "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", + "dev": true, "funding": [ { "type": "individual", @@ -774,17 +549,15 @@ } ], "dependencies": { - "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" + "@ethersproject/sha2": "^5.6.1" } }, - "node_modules/@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "dev": true, "funding": [ { "type": "individual", @@ -796,13 +569,13 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.6.1" + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/basex": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", - "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", "dev": true, "funding": [ { @@ -814,15 +587,35 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/properties": "^5.6.0" + "peer": true, + "dependencies": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" } }, - "node_modules/@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", + "node_modules/@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "dev": true, "funding": [ { "type": "individual", @@ -834,15 +627,15 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "dev": true, "funding": [ { "type": "individual", @@ -854,13 +647,15 @@ } ], "dependencies": { - "@ethersproject/logger": "^5.6.0" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "dev": true, "funding": [ { "type": "individual", @@ -872,13 +667,15 @@ } ], "dependencies": { - "@ethersproject/bignumber": "^5.6.2" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" } }, - "node_modules/@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", "dev": true, "funding": [ { @@ -891,22 +688,19 @@ } ], "dependencies": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" } }, - "node_modules/@ethersproject/hash": { + "node_modules/@ethersproject/solidity": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", + "dev": true, "funding": [ { "type": "individual", @@ -918,20 +712,18 @@ } ], "dependencies": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", "@ethersproject/keccak256": "^5.6.1", "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", "@ethersproject/strings": "^5.6.1" } }, - "node_modules/@ethersproject/hdnode": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", - "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", "dev": true, "funding": [ { @@ -944,24 +736,15 @@ } ], "dependencies": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", - "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", "dev": true, "funding": [ { @@ -974,77 +757,21 @@ } ], "dependencies": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] - }, - "node_modules/@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.6.0" + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" } }, - "node_modules/@ethersproject/pbkdf2": { + "node_modules/@ethersproject/units": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", - "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", + "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", "dev": true, "funding": [ { @@ -1057,32 +784,15 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/sha2": "^5.6.1" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/constants": "^5.6.1", "@ethersproject/logger": "^5.6.0" } }, - "node_modules/@ethersproject/providers": { - "version": "5.6.8", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", - "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", + "node_modules/@ethersproject/wallet": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", + "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", "dev": true, "funding": [ { @@ -1098,29 +808,24 @@ "@ethersproject/abstract-provider": "^5.6.1", "@ethersproject/abstract-signer": "^5.6.2", "@ethersproject/address": "^5.6.1", - "@ethersproject/base64": "^5.6.1", - "@ethersproject/basex": "^5.6.1", "@ethersproject/bignumber": "^5.6.2", "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", "@ethersproject/properties": "^5.6.0", "@ethersproject/random": "^5.6.1", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1", - "bech32": "1.1.4", - "ws": "7.4.6" + "@ethersproject/wordlists": "^5.6.1" } }, - "node_modules/@ethersproject/random": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", - "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", "dev": true, "funding": [ { @@ -1133,33 +838,17 @@ } ], "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/@ethersproject/sha2": { + "node_modules/@ethersproject/wordlists": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", - "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", + "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", "dev": true, "funding": [ { @@ -1173,206 +862,17 @@ ], "dependencies": { "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", "@ethersproject/logger": "^5.6.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/solidity": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", - "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "node_modules/@ethersproject/units": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", - "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", - "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/json-wallets": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", - "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, "node_modules/@metamask/eth-sig-util": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dev": true, "dependencies": { "ethereumjs-abi": "^0.6.8", "ethereumjs-util": "^6.2.1", @@ -1387,12 +887,37 @@ "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/@metamask/eth-sig-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } }, "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-abi": { "version": "0.6.8", "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dev": true, "dependencies": { "bn.js": "^4.11.8", "ethereumjs-util": "^6.0.0" @@ -1402,6 +927,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, "dependencies": { "@types/bn.js": "^4.11.3", "bn.js": "^4.11.0", @@ -1416,6 +942,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", + "dev": true, "funding": [ { "type": "individual", @@ -1427,6 +954,7 @@ "version": "1.6.3", "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", + "dev": true, "funding": [ { "type": "individual", @@ -1439,6 +967,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "peer": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1452,6 +981,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "peer": true, "engines": { "node": ">= 8" } @@ -1461,6 +991,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "peer": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1469,1124 +1000,1191 @@ "node": ">= 8" } }, - "node_modules/@nomiclabs/hardhat-ethers": { - "name": "hardhat-deploy-ethers", - "version": "0.3.0-beta.13", - "resolved": "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz", - "integrity": "sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw==", + "node_modules/@nomicfoundation/ethereumjs-block": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz", + "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==", "dev": true, - "peerDependencies": { - "ethers": "^5.0.0", - "hardhat": "^2.0.0" - } - }, - "node_modules/@nomiclabs/hardhat-etherscan": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz", - "integrity": "sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA==", "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^5.0.2", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "node-fetch": "^2.6.0", - "semver": "^6.3.0" + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-trie": "^5.0.0", + "@nomicfoundation/ethereumjs-tx": "^4.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "ethereum-cryptography": "0.1.3" }, - "peerDependencies": { - "hardhat": "^2.0.4" - } - }, - "node_modules/@nomiclabs/hardhat-etherscan/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@resolver-engine/core": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz", - "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "is-url": "^1.2.4", - "request": "^2.85.0" - } - }, - "node_modules/@resolver-engine/core/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=14" } }, - "node_modules/@resolver-engine/fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz", - "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==", + "node_modules/@nomicfoundation/ethereumjs-block/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, "dependencies": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/@resolver-engine/fs/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/@nomicfoundation/ethereumjs-blockchain": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz", + "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "@nomicfoundation/ethereumjs-block": "^4.0.0", + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-ethash": "^2.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-trie": "^5.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "abstract-level": "^1.0.3", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "level": "^8.0.0", + "lru-cache": "^5.1.1", + "memory-level": "^1.0.0" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@resolver-engine/imports": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz", - "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==", + "node_modules/@nomicfoundation/ethereumjs-blockchain/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, "dependencies": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0", - "hosted-git-info": "^2.6.0", - "path-browserify": "^1.0.0", - "url": "^0.11.0" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/@resolver-engine/imports-fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz", - "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==", + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz", + "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==", "dev": true, "dependencies": { - "@resolver-engine/fs": "^0.3.3", - "@resolver-engine/imports": "^0.3.3", - "debug": "^3.1.0" + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "crc-32": "^1.2.0" } }, - "node_modules/@resolver-engine/imports-fs/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/@nomicfoundation/ethereumjs-ethash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz", + "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "@nomicfoundation/ethereumjs-block": "^4.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "abstract-level": "^1.0.3", + "bigint-crypto-utils": "^3.0.23", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@resolver-engine/imports/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/@nomicfoundation/ethereumjs-ethash/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@scure/bip32": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", - "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@nomicfoundation/ethereumjs-evm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz", + "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==", + "dev": true, "dependencies": { - "@noble/hashes": "~1.1.1", - "@noble/secp256k1": "~1.6.0", - "@scure/base": "~1.1.0" + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@types/async-eventemitter": "^0.2.1", + "async-eventemitter": "^0.2.4", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@scure/bip39": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", - "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@nomicfoundation/ethereumjs-evm/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, "dependencies": { - "@noble/hashes": "~1.1.1", - "@scure/base": "~1.1.0" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz", + "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==", + "dev": true, + "bin": { + "rlp": "bin/rlp" }, "engines": { - "node": ">=6" + "node": ">=14" } }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "node_modules/@nomicfoundation/ethereumjs-statemanager": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz", + "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==", + "dev": true, "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-trie": "^5.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "functional-red-black-tree": "^1.0.1" } }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "node_modules/@nomicfoundation/ethereumjs-trie": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz", + "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==", + "dev": true, "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "ethereum-cryptography": "0.1.3", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">=6" + "node": ">=14" } }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "node_modules/@nomicfoundation/ethereumjs-trie/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "engines": { - "node": ">=6" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "node_modules/@nomicfoundation/ethereumjs-tx": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz", + "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==", + "dev": true, "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "ethereum-cryptography": "0.1.3" }, "engines": { - "node": ">=6" + "node": ">=14" } }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "node_modules/@nomicfoundation/ethereumjs-tx/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", - "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "node_modules/@nomicfoundation/ethereumjs-util": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz", + "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==", "dev": true, "dependencies": { - "defer-to-connect": "^1.0.1" + "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2", + "ethereum-cryptography": "0.1.3" }, "engines": { - "node": ">=6" + "node": ">=14" } }, - "node_modules/@tenderly/hardhat-tenderly": { - "version": "1.1.0-beta.5", - "resolved": "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.1.0-beta.5.tgz", - "integrity": "sha512-NecF6ewefpDyIF/mz0kTZGlPMa+ri/LOAPPqmyRA/oGEZ19BLM0sHdJFObTv8kJnxIJZBHpTkUaeDPp8KcpZsg==", + "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, "dependencies": { - "@nomiclabs/hardhat-ethers": "^2.0.1", - "axios": "^0.21.1", - "ethers": "^5.0.24", - "fs-extra": "^9.0.1", - "js-yaml": "^3.14.0" - }, - "peerDependencies": { - "hardhat": "^2.0.3" - } - }, - "node_modules/@tenderly/hardhat-tenderly/node_modules/@nomiclabs/hardhat-ethers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.0.tgz", - "integrity": "sha512-vlW90etB3675QWG7tMrHaDoTa7ymMB7irM4DAQ98g8zJoe9YqEggeDnbO6v5b+BLth/ty4vN6Ko/kaqRN1krHw==", - "dev": true, - "peerDependencies": { - "ethers": "^5.0.0", - "hardhat": "^2.0.0" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/@tenderly/hardhat-tenderly/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "node_modules/@nomicfoundation/ethereumjs-vm": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz", + "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==", + "dev": true, + "dependencies": { + "@nomicfoundation/ethereumjs-block": "^4.0.0", + "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-evm": "^1.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", + "@nomicfoundation/ethereumjs-trie": "^5.0.0", + "@nomicfoundation/ethereumjs-tx": "^4.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@types/async-eventemitter": "^0.2.1", + "async-eventemitter": "^0.2.4", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" }, "engines": { - "node": ">=10" + "node": ">=14" } }, - "node_modules/@tenderly/hardhat-tenderly/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/@nomicfoundation/ethereumjs-vm/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@tenderly/hardhat-tenderly/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/@truffle/error": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.1.0.tgz", - "integrity": "sha512-RbUfp5VreNhsa2Q4YbBjz18rOQI909pG32bghl1hulO7IpvcqTS+C3Ge5cNbiWQ1WGzy1wIeKLW0tmQtHFB7qg==", - "dev": true - }, - "node_modules/@truffle/interface-adapter": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.19.tgz", - "integrity": "sha512-x7IZvsyx36DAJCJVZ9gUe1Lh8AhODhJoW7I+lJXIlGxj3EmZbao4/sHo+cN4u9i94yVTyGwYd78NzbP0a/LAog==", + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.4.tgz", + "integrity": "sha512-n/5UMwGaUK2zM8ALuMChVwB1lEPeDTb5oBjQ1g7hVsUdS8x+XG9JIEp4Ze6Bwy98tghA7Y1+PCH4SNE2P3UQ2g==", "dev": true, + "peer": true, "dependencies": { - "bn.js": "^5.1.3", - "ethers": "^4.0.32", - "web3": "1.7.4" + "@ethersproject/abi": "^5.1.2", + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "chalk": "^2.4.2", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "peerDependencies": { + "@nomiclabs/hardhat-ethers": "^2.0.0", + "chai": "^4.2.0", + "ethers": "^5.0.0", + "hardhat": "^2.9.4" } }, - "node_modules/@truffle/interface-adapter/node_modules/ethers": { - "version": "4.0.49", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", - "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.6.tgz", + "integrity": "sha512-a35iVD4ycF6AoTfllAnKm96IPIzzHpgKX/ep4oKc2bsUKFfMlacWdyntgC/7d5blyCTXfFssgNAvXDZfzNWVGQ==", "dev": true, + "peer": true, "dependencies": { - "aes-js": "3.0.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" + "ethereumjs-util": "^7.1.4" + }, + "peerDependencies": { + "hardhat": "^2.9.5" } }, - "node_modules/@truffle/interface-adapter/node_modules/ethers/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/@truffle/interface-adapter/node_modules/hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "node_modules/@nomicfoundation/hardhat-network-helpers/node_modules/@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", "dev": true, + "peer": true, "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" + "@types/node": "*" } }, - "node_modules/@truffle/interface-adapter/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true - }, - "node_modules/@truffle/interface-adapter/node_modules/scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", - "dev": true - }, - "node_modules/@truffle/interface-adapter/node_modules/setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", - "dev": true - }, - "node_modules/@truffle/interface-adapter/node_modules/uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true - }, - "node_modules/@truffle/provider": { - "version": "0.2.57", - "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.57.tgz", - "integrity": "sha512-O8VxF2uQwa+KB4HDg9lG7uhQ/+AOvchX+1STpQBSSAGfov1+EROM0iRZUNoPm71Pu0C9ji2WmXbNW/COjUMaMA==", + "node_modules/@nomicfoundation/hardhat-network-helpers/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, + "peer": true, "dependencies": { - "@truffle/error": "^0.1.0", - "@truffle/interface-adapter": "^0.5.19", - "debug": "^4.3.1", - "web3": "1.7.4" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/@typechain/ethers-v5": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-7.2.0.tgz", - "integrity": "sha512-jfcmlTvaaJjng63QsT49MT6R1HFhtO/TBMWbyzPFSzMmVIqb2tL6prnKBs4ZJrSvmgIXWy+ttSjpaxCTq8D/Tw==", + "node_modules/@nomicfoundation/hardhat-network-helpers/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, + "peer": true, "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/bytes": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^5.0.0", - "typescript": ">=4.0.0" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/@typechain/hardhat": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-2.3.1.tgz", - "integrity": "sha512-BQV8OKQi0KAzLXCdsPO0pZBNQQ6ra8A2ucC26uFX/kquRBtJu1yEyWnVSmtr07b5hyRoJRpzUeINLnyqz4/MAw==", + "node_modules/@nomicfoundation/hardhat-toolbox": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.0.tgz", + "integrity": "sha512-BoOPbzLQ1GArnBZd4Jz4IU8FY3RY4nUwpXlfymXwxlXNimngkPRJj7ivVNurD7igohEjf90v/Axn2M5WwAdCJQ==", "dev": true, - "dependencies": { - "fs-extra": "^9.1.0" - }, "peerDependencies": { - "hardhat": "^2.0.10", - "lodash": "^4.17.15", - "typechain": "^5.1.2" - } - }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomiclabs/hardhat-ethers": "^2.0.0", + "@nomiclabs/hardhat-etherscan": "^3.0.0", + "@typechain/ethers-v5": "^10.1.0", + "@typechain/hardhat": "^6.1.2", + "@types/chai": "^4.2.0", + "@types/mocha": "^9.1.0", + "@types/node": ">=12.0.0", + "chai": "^4.2.0", + "ethers": "^5.4.7", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.1.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz", + "integrity": "sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg==", "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, "engines": { - "node": ">=10" - } - }, - "node_modules/@typechain/hardhat/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" + "node": ">= 12" }, "optionalDependencies": { - "graceful-fs": "^4.1.6" + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.0", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.0", + "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.0", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.0", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.0", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.0", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.0", + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.0", + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.0", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.0" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz", + "integrity": "sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@typechain/hardhat/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz", + "integrity": "sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 10.0.0" + "node": ">= 10" } }, - "node_modules/@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==" - }, - "node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dependencies": { - "@types/node": "*" + "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.0.tgz", + "integrity": "sha512-WFCZYMv86WowDA4GiJKnebMQRt3kCcFqHeIomW6NMyqiKqhK1kIZCxSLDYsxqlx396kKLPN1713Q1S8tu68GKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@types/chai": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz", - "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==", - "dev": true - }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.0.tgz", + "integrity": "sha512-DTw6MNQWWlCgc71Pq7CEhEqkb7fZnS7oly13pujs4cMH1sR0JzNk90Mp1zpSCsCs4oKan2ClhMlLKtNat/XRKQ==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/node": "*" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.0.tgz", + "integrity": "sha512-wUpUnR/3GV5Da88MhrxXh/lhb9kxh9V3Jya2NpBEhKDIRCDmtXMSqPMXHZmOR9DfCwCvG6vLFPr/+YrPCnUN0w==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/node": "*" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz", + "integrity": "sha512-lR0AxK1x/MeKQ/3Pt923kPvwigmGX3OxeU5qNtQ9pj9iucgk4PzhbS3ruUeSpYhUxG50jN4RkIGwUMoev5lguw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==" - }, - "node_modules/@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dependencies": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.0.tgz", + "integrity": "sha512-A1he/8gy/JeBD3FKvmI6WUJrGrI5uWJNr5Xb9WdV+DK0F8msuOqpEByLlnTdLkXMwW7nSl3awvLezOs9xBHJEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@types/lodash": { - "version": "4.14.182", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", - "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", - "dev": true - }, - "node_modules/@types/lowdb": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/lowdb/-/lowdb-1.0.9.tgz", - "integrity": "sha512-LBRG5EPXFOJDoJc9jACstMhtMP+u+UkPYllBeGQXXKiaHc+uzJs9+/Aynb/5KkX33DtrIiKyzNVTPQc/4RcD6A==", + "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.0.tgz", + "integrity": "sha512-7x5SXZ9R9H4SluJZZP8XPN+ju7Mx+XeUMWZw7ZAqkdhP5mK19I4vz3x0zIWygmfE8RT7uQ5xMap0/9NPsO+ykw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@types/lodash": "*" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/mkdirp": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", - "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", + "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.0.tgz", + "integrity": "sha512-m7w3xf+hnE774YRXu+2mGV7RiF3QJtUoiYU61FascCkQhX3QMQavh7saH/vzb2jN5D24nT/jwvaHYX/MAM9zUw==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@types/node": "*" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@types/mocha": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", - "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==", - "dev": true + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.0.tgz", + "integrity": "sha512-xCuybjY0sLJQnJhupiFAXaek2EqF0AP0eBjgzaalPXSNvCEN6ZYHvUzdA50ENDVeSYFXcUsYf3+FsD3XKaeptA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } }, - "node_modules/@types/node": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.5.tgz", - "integrity": "sha512-90hiq6/VqtQgX8Sp0EzeIsv3r+ellbGj4URKj5j30tLlZvRUpnAe9YbYnjl3pJM93GyXU0tghHhvXHq+5rnCKA==" + "node_modules/@nomiclabs/hardhat-ethers": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.1.tgz", + "integrity": "sha512-RHWYwnxryWR8hzRmU4Jm/q4gzvXpetUOJ4OPlwH2YARcDB+j79+yAYCwO0lN1SUOb4++oOTJEe6AWLEc42LIvg==", + "dev": true, + "peerDependencies": { + "ethers": "^5.0.0", + "hardhat": "^2.0.0" + } }, - "node_modules/@types/node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", + "node_modules/@nomiclabs/hardhat-etherscan": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.2.tgz", + "integrity": "sha512-IEikeOVq0C/7CY6aD74d8L4BpGoc/FNiN6ldiPVg0QIFIUSu4FSGA1dmtJZJKk1tjpwgrfTLQNWnigtEaN9REg==", "dev": true, + "peer": true, "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^5.0.2", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.4.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" } }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "node_modules/@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] }, - "node_modules/@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "node_modules/@scure/bip32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", + "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "@types/node": "*" + "@noble/hashes": "~1.1.1", + "@noble/secp256k1": "~1.6.0", + "@scure/base": "~1.1.0" } }, - "node_modules/@types/prettier": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz", - "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "node_modules/@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "@types/node": "*" + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" } }, - "node_modules/@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, "dependencies": { - "@types/node": "*" + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "dev": true - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, "dependencies": { - "event-target-shim": "^5.0.0" + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" }, "engines": { - "node": ">=6.5" + "node": ">=6" } }, - "node_modules/abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" }, "engines": { "node": ">=6" } }, - "node_modules/abstract-leveldown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", "dev": true, "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" }, "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/address": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", - "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==", + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, "engines": { - "node": ">= 10.0.0" + "node": ">=6" } }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, "engines": { - "node": ">=0.3.0" + "node": ">=6" } }, - "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, "dependencies": { - "debug": "4" + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" }, "engines": { - "node": ">= 6.0.0" + "node": ">=6" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "dev": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" + "antlr4ts": "^0.5.0-alpha.4" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@tenderly/hardhat-tenderly": { + "version": "1.1.0-beta.5", + "resolved": "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.1.0-beta.5.tgz", + "integrity": "sha512-NecF6ewefpDyIF/mz0kTZGlPMa+ri/LOAPPqmyRA/oGEZ19BLM0sHdJFObTv8kJnxIJZBHpTkUaeDPp8KcpZsg==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@nomiclabs/hardhat-ethers": "^2.0.1", + "axios": "^0.21.1", + "ethers": "^5.0.24", + "fs-extra": "^9.0.1", + "js-yaml": "^3.14.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "hardhat": "^2.0.3" } }, - "node_modules/amazon-cognito-identity-js": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-4.6.3.tgz", - "integrity": "sha512-MPVJfirbdmSGo7l4h7Kbn3ms1eJXT5Xq8ly+mCPPi8yAxaxdg7ouMUUNTqtDykoZxIdDLF/P6F3Zbg3dlGKOWg==", + "node_modules/@tenderly/hardhat-tenderly/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "dependencies": { - "buffer": "4.9.2", - "crypto-js": "^4.0.0", - "fast-base64-decode": "^1.0.0", - "isomorphic-unfetch": "^3.0.0", - "js-cookie": "^2.2.1" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@tenderly/hardhat-tenderly/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/@tenderly/hardhat-tenderly/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 10.0.0" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@typechain/ethers-v5": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.1.1.tgz", + "integrity": "sha512-o6nffJBxwmeX1ZiZpdnP/tqGd/7M7iYvQC88ZXaFFoyAGh7eYncynzVjOJV0XmaKzAc6puqyqZrnva+gJbk4sw==", + "dev": true, + "peer": true, "dependencies": { - "color-convert": "^1.9.0" + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "@ethersproject/abi": "^5.0.0", + "@ethersproject/bytes": "^5.0.0", + "@ethersproject/providers": "^5.0.0", + "ethers": "^5.1.3", + "typechain": "^8.1.1", + "typescript": ">=4.3.0" } }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/@typechain/hardhat": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.4.tgz", + "integrity": "sha512-S8k5d1Rjc+plwKpkorlifmh72M7Ki0XNUOVVLtdbcA/vLaEkuqZSJFdddpBgS5QxiJP+6CbRa/yO6EVTE2+fMQ==", + "dev": true, + "peer": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "fs-extra": "^9.1.0" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@ethersproject/abi": "^5.4.7", + "@ethersproject/providers": "^5.4.7", + "@typechain/ethers-v5": "^10.1.1", + "ethers": "^5.4.7", + "hardhat": "^2.9.9", + "typechain": "^8.1.1" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "peer": true, "dependencies": { - "sprintf-js": "~1.0.2" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "node_modules/@typechain/hardhat/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "peer": true, "dependencies": { - "typical": "^2.6.1" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=4" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "node_modules/@typechain/hardhat/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">= 10.0.0" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "node_modules/@types/async-eventemitter": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", + "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==", "dev": true }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@types/node": "*" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/@types/chai": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz", + "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==", + "dev": true }, - "node_modules/array.prototype.reduce": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", - "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", + "node_modules/@types/chai-as-promised": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", "dev": true, + "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/chai": "*" } }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@types/node": "*" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", "dev": true, "dependencies": { - "safer-buffer": "~2.1.0" + "@types/node": "*" } }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, + "peer": true, "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "@types/minimatch": "*", + "@types/node": "*" } }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "node_modules/@types/lodash": { + "version": "4.14.190", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.190.tgz", + "integrity": "sha512-5iJ3FBJBvQHQ8sFhEhJfjUP+G+LalhavTkYyrAYqz5MEJG+erSv0k9KJLb6q7++17Lafk1scaTIFXcMJlwK8Mw==", "dev": true }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "node_modules/@types/lowdb": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/lowdb/-/lowdb-1.0.9.tgz", + "integrity": "sha512-LBRG5EPXFOJDoJc9jACstMhtMP+u+UkPYllBeGQXXKiaHc+uzJs9+/Aynb/5KkX33DtrIiKyzNVTPQc/4RcD6A==", "dev": true, - "engines": { - "node": ">=0.8" + "dependencies": { + "@types/lodash": "*" } }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true }, - "node_modules/async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dependencies": { - "async": "^2.4.0" - } + "node_modules/@types/mocha": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "dev": true, + "peer": true }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "node_modules/@types/node": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.5.tgz", + "integrity": "sha512-90hiq6/VqtQgX8Sp0EzeIsv3r+ellbGj4URKj5j30tLlZvRUpnAe9YbYnjl3pJM93GyXU0tghHhvXHq+5rnCKA==", "dev": true }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", "dev": true, - "engines": { - "node": ">= 4.0.0" + "dependencies": { + "@types/node": "*" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "node_modules/@types/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "peer": true }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", "dev": true, - "engines": { - "node": "*" + "dependencies": { + "@types/node": "*" } }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true, + "peer": true }, - "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, "dependencies": { - "follow-redirects": "^1.14.0" + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" } }, - "node_modules/axios-curlirize": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/axios-curlirize/-/axios-curlirize-1.3.7.tgz", - "integrity": "sha512-csSsuMyZj1dv1fL0zRPnDAHWrmlISMvK+wx9WJI/igRVDT4VMgbf2AVenaHghFLfI1nQijXUevYEguYV6u5hjA==" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "node_modules/abortcontroller-polyfill": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", + "dev": true, + "peer": true }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "node_modules/abstract-level": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", + "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", + "dev": true, "dependencies": { - "safe-buffer": "^5.0.1" + "buffer": "^6.0.3", + "catering": "^2.1.0", + "is-buffer": "^2.0.5", + "level-supports": "^4.0.0", + "level-transcoder": "^1.0.1", + "module-error": "^1.0.1", + "queue-microtask": "^1.2.3" + }, + "engines": { + "node": ">=12" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/abstract-level/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, "funding": [ { "type": "github", @@ -2600,497 +2198,394 @@ "type": "consulting", "url": "https://feross.org/support" } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, + ], "dependencies": { - "tweetnacl": "^0.14.3" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true - }, - "node_modules/bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "node_modules/address": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", + "dev": true, + "peer": true, "engines": { - "node": "*" + "node": ">= 10.0.0" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, "engines": { - "node": ">=8" + "node": ">=0.3.0" } }, - "node_modules/bip39": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", - "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", - "dev": true, - "dependencies": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - } - }, - "node_modules/bip39/node_modules/@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", - "dev": true - }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", "dev": true }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "debug": "4" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" + "node": ">= 6.0.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "dependencies": { - "side-channel": "^1.0.4" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node": ">=8" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "node_modules/amazon-cognito-identity-js": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-4.6.3.tgz", + "integrity": "sha512-MPVJfirbdmSGo7l4h7Kbn3ms1eJXT5Xq8ly+mCPPi8yAxaxdg7ouMUUNTqtDykoZxIdDLF/P6F3Zbg3dlGKOWg==", + "dev": true, "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "buffer": "4.9.2", + "crypto-js": "^4.0.0", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" } }, - "node_modules/browserify-aes/node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - }, - "node_modules/browserify-cipher": { + "node_modules/amdefine": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "optional": true, + "peer": true, + "engines": { + "node": ">=0.4.2" } }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "engines": { + "node": ">=6" } }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" + "engines": { + "node": ">=8" } }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", "dev": true }, - "node_modules/buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dependencies": { - "safe-buffer": "^5.1.1" - } - }, - "node_modules/bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "devOptional": true, - "hasInstallScript": true, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, "dependencies": { - "node-gyp-build": "^4.3.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">=6.14.2" + "node": ">= 8" } }, - "node_modules/builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "peer": true, "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, "engines": { "node": ">=8" } }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.8" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } }, - "node_modules/cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", - "dependencies": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" - }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "peer": true, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" + "lodash": "^4.17.14" } }, - "node_modules/chai-bignumber": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chai-bignumber/-/chai-bignumber-3.0.0.tgz", - "integrity": "sha512-SubOtaSI2AILWTWe2j0c6i2yFT/f9J6UBjeVGDuwDiPLkF/U5+/eTWUE3sbCZ1KgcPF6UJsDVYbIxaYA097MQA==", - "dev": true + "node_modules/async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "dev": true, + "dependencies": { + "async": "^2.4.0" + } }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, "engines": { - "node": ">=4" + "node": ">= 4.0.0" } }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, + "peer": true, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, "engines": { "node": "*" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "follow-redirects": "^1.14.0" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "node_modules/axios-curlirize": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/axios-curlirize/-/axios-curlirize-1.3.7.tgz", + "integrity": "sha512-csSsuMyZj1dv1fL0zRPnDAHWrmlISMvK+wx9WJI/igRVDT4VMgbf2AVenaHghFLfI1nQijXUevYEguYV6u5hjA==", "dev": true }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, - "node_modules/cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "deprecated": "This module has been superseded by the multiformats module", + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", "dev": true, "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" + "safe-buffer": "^5.0.1" } }, - "node_modules/cids/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, "funding": [ { @@ -3105,831 +2600,921 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } + ] }, - "node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "deprecated": "This module has been superseded by the multiformats module", + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "tweetnacl": "^0.14.3" } }, - "node_modules/class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", + "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "dev": true }, - "node_modules/cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", + "node_modules/bigint-crypto-utils": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", + "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", "dev": true, "dependencies": { - "string-width": "^4.2.0" + "bigint-mod-arith": "^3.1.0" }, "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "node": ">=10.4.0" } }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "node_modules/bigint-mod-arith": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", + "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", "dev": true, - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "engines": { + "node": ">=10.4.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "node_modules/bignumber.js": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", + "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", "dev": true, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { - "ansi-regex": "^4.1.0" + "fill-range": "^7.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true }, - "node_modules/clone-response/node_modules/mimic-response": { + "node_modules/browser-level": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", + "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "abstract-level": "^1.0.2", + "catering": "^2.1.1", + "module-error": "^1.0.2", + "run-parallel-limit": "^1.1.0" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, "dependencies": { - "color-name": "1.1.3" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dev": true, - "engines": { - "node": ">=0.1.90" + "dependencies": { + "base-x": "^3.0.2" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "dev": true, "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" } }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - }, - "node_modules/command-line-args": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", - "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "dependencies": { - "array-back": "^2.0.0", - "find-replace": "^1.0.3", - "typical": "^2.6.1" - }, - "bin": { - "command-line-args": "bin/cli.js" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" - }, - "node_modules/compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/bufferutil": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", + "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", "dev": true, - "engines": [ - "node >= 0.8" - ], + "hasInstallScript": true, + "peer": true, "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" } }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.0" + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" } }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", - "dev": true - }, - "node_modules/core-js-pure": { - "version": "3.24.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.0.tgz", - "integrity": "sha512-uzMmW8cRh7uYw4JQtzqvGWRyC2T5+4zipQLQdi2FmiRqP83k3d6F3stv2iAlNhOs6cXN401FCD5TL0vvleuHgA==", - "hasInstallScript": true, + "node": ">=10" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "node_modules/catering": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, "engines": { - "node": ">= 0.10" + "node": ">=6" } }, - "node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "node_modules/cbor": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", + "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" + "bignumber.js": "^9.0.1", + "nofilter": "^1.0.4" }, "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "bin": { - "crc32": "bin/crc32.njs" + "node_modules/chai": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", + "dev": true, + "peer": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" }, "engines": { - "node": ">=0.8" + "node": ">=4" } }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "node_modules/chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, + "peer": true, "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 5" } }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=4.8" + "node": ">=4" } }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, - "bin": { - "semver": "bin/semver" + "engines": { + "node": "*" } }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true, + "peer": true, "engines": { "node": "*" } }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": "*" + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "node_modules/classic-level": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", + "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", "dev": true, + "hasInstallScript": true, "dependencies": { - "assert-plus": "^1.0.0" + "abstract-level": "^1.0.2", + "catering": "^2.1.0", + "module-error": "^1.0.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "^4.3.0" }, "engines": { - "node": ">=0.10" + "node": ">=12" } }, - "node_modules/death": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", - "dev": true + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, "dependencies": { - "ms": "2.1.2" + "string-width": "^4.2.0" }, "engines": { - "node": ">=6.0" + "node": "10.* || >= 12.*" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, "engines": { - "node": ">=0.10" + "node": ">=0.1.90" } }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "dependencies": { - "type-detect": "^4.0.0" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=0.12" + "node": ">= 0.8" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", "dev": true }, - "node_modules/defender-base-client": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/defender-base-client/-/defender-base-client-1.25.0.tgz", - "integrity": "sha512-42a9zEnif94mCkM1N19C+6k7R1QUqNq4FIaS/jVQ5kSJaSmv3FTmLT41/6qHXev76VYp87EyKqbDA9biGhgx/Q==", - "dev": true, - "dependencies": { - "amazon-cognito-identity-js": "^4.3.3", - "axios": "^0.21.2", - "lodash": "^4.17.19", - "node-fetch": "^2.6.0" - } - }, - "node_modules/defender-relay-client": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/defender-relay-client/-/defender-relay-client-1.7.0.tgz", - "integrity": "sha512-NYHP0sW/IusDPMMxSxo7DG6mfTs6/up4AFhW5ww7l9uwszzxc5rhvCCfqHCeB9FrqkoX5G1DdDkHWHdSVwANVA==", + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, + "peer": true, "dependencies": { - "amazon-cognito-identity-js": "^4.3.3", - "axios": "^0.19.2", - "defender-base-client": "^1.7.0", - "lodash": "^4.17.19", - "node-fetch": "^2.6.0" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" }, - "peerDependencies": { - "@ethersproject/abstract-provider": "^5.0.2", - "@ethersproject/abstract-signer": "^5.0.2", - "@ethersproject/providers": "^5.0.5", - "web3-core": "^1.3.4", - "web3-core-helpers": "^1.3.4" + "engines": { + "node": ">=4.0.0" } }, - "node_modules/defender-relay-client/node_modules/axios": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", - "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", - "deprecated": "Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410", + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", "dev": true, + "peer": true, "dependencies": { - "follow-redirects": "1.5.10" + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/defender-relay-client/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "peer": true, + "engines": { + "node": ">=8" } }, - "node_modules/defender-relay-client/node_modules/follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, - "dependencies": { - "debug": "=3.1.0" - }, + "peer": true, "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/defender-relay-client/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", "dev": true }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "node_modules/compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "dev": true }, - "node_modules/deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dependencies": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" - } + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, - "node_modules/deferred-leveldown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "node_modules/deferred-leveldown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "safe-buffer": "~5.1.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">= 0.6" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dev": true, "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=8" } }, - "node_modules/detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" + "crc32": "bin/crc32.njs" }, "engines": { - "node": ">= 4.2.1" + "node": ">=0.8" } }, - "node_modules/detect-port/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "dependencies": { - "ms": "2.0.0" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/detect-port/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "engines": { - "node": ">=0.3.1" + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "dev": true, + "peer": true, "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "node-fetch": "2.6.7" } }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/dir-to-object": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-to-object/-/dir-to-object-2.0.0.tgz", - "integrity": "sha512-sXs0JKIhymON7T1UZuO2Ud6VTNAx/VTBXIl4+3mjb2RgfOpt+hectX0x04YqPOPdkeOAKoJuKqwqnXXURNPNEA==", - "dev": true - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "node_modules/dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "dev": true + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "peer": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", + "dev": true, + "peer": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", + "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", + "dev": true, + "peer": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "peer": true + }, + "node_modules/defender-base-client": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/defender-base-client/-/defender-base-client-1.37.0.tgz", + "integrity": "sha512-V6tU0q8/n1/m/edT2FlTvUmZn6u5/A64FqYQfrMgg4PEy1TvYCz9tF+3dnGjk+sJrzICAv0GQWwLw/+8uRq2mg==", + "dev": true, + "dependencies": { + "amazon-cognito-identity-js": "^4.3.3", + "async-retry": "^1.3.3", + "axios": "^0.21.2", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "dev": true, + "peer": true, + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "dev": true, + "peer": true, + "dependencies": { + "heap": ">= 0.2.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "peer": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-to-object": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-to-object/-/dir-to-object-2.0.0.tgz", + "integrity": "sha512-sXs0JKIhymON7T1UZuO2Ud6VTNAx/VTBXIl4+3mjb2RgfOpt+hectX0x04YqPOPdkeOAKoJuKqwqnXXURNPNEA==", + "dev": true + }, + "node_modules/dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "dev": true, + "engines": { + "node": ">=8" + } }, "node_modules/ecc-jsbn": { "version": "0.1.2", @@ -3941,16 +3526,11 @@ "safer-buffer": "^2.1.0" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, "node_modules/elliptic": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -3964,7 +3544,8 @@ "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "node_modules/emoji-regex": { "version": "9.2.2", @@ -3978,29 +3559,6 @@ "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", "dev": true }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dependencies": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -4014,6 +3572,7 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, "dependencies": { "ansi-colors": "^4.1.1" }, @@ -4025,21 +3584,11 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, "engines": { "node": ">=6" } }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -4050,31 +3599,32 @@ } }, "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", + "get-intrinsic": "^1.1.3", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", + "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", "string.prototype.trimend": "^1.0.5", "string.prototype.trimstart": "^1.0.5", "unbox-primitive": "^1.0.2" @@ -4087,14 +3637,14 @@ } }, "node_modules/es-abstract/node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -4128,11 +3678,12 @@ } }, "node_modules/es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, "hasInstallScript": true, + "peer": true, "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -4147,17 +3698,26 @@ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, + "peer": true, "dependencies": { "d": "1", "es5-ext": "^0.10.35", "es6-symbol": "^3.1.1" } }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true, + "peer": true + }, "node_modules/es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, + "peer": true, "dependencies": { "d": "^1.0.1", "ext": "^1.1.2" @@ -4167,20 +3727,16 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, "engines": { "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, "engines": { "node": ">=0.8.0" } @@ -4190,6 +3746,7 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", "dev": true, + "peer": true, "dependencies": { "esprima": "^2.7.1", "estraverse": "^1.9.1", @@ -4212,6 +3769,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", "dev": true, + "peer": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -4266,6 +3824,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -4275,35 +3834,11 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", - "dev": true, - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "node_modules/eth-ens-namehash/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true - }, "node_modules/eth-gas-reporter": { "version": "0.2.25", "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz", @@ -4335,6 +3870,15 @@ } } }, + "node_modules/eth-gas-reporter/node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/eth-gas-reporter/node_modules/ansi-regex": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", @@ -4350,34 +3894,132 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/eth-gas-reporter/node_modules/cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "node_modules/eth-gas-reporter/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - }, "engines": { "node": ">=6" - }, + } + }, + "node_modules/eth-gas-reporter/node_modules/chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=6" + }, "optionalDependencies": { "colors": "^1.1.2" } }, - "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "node_modules/eth-gas-reporter/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "dependencies": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, + "node_modules/eth-gas-reporter/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, "node_modules/eth-gas-reporter/node_modules/ethers": { "version": "4.0.49", "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", @@ -4395,6 +4037,62 @@ "xmlhttprequest": "1.8.0" } }, + "node_modules/eth-gas-reporter/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/eth-gas-reporter/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/eth-gas-reporter/node_modules/hash.js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", @@ -4420,1205 +4118,1114 @@ "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", "dev": true }, - "node_modules/eth-gas-reporter/node_modules/scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", - "dev": true - }, - "node_modules/eth-gas-reporter/node_modules/setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", - "dev": true - }, - "node_modules/eth-gas-reporter/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/eth-gas-reporter/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eth-gas-reporter/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "node_modules/eth-gas-reporter/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "dependencies": { - "ansi-regex": "^3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/eth-gas-reporter/node_modules/uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true - }, - "node_modules/eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", + "node_modules/eth-gas-reporter/node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" } }, - "node_modules/eth-lib/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/eth-lib/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/eth-lib/node_modules/ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "node_modules/eth-gas-reporter/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/eth-sig-util": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-2.5.3.tgz", - "integrity": "sha512-KpXbCKmmBUNUTGh9MRKmNkIPietfhzBqqYqysDavLseIiMUGl95k6UcPEkALAZlj41e9E6yioYXc1PC333RKqw==", - "deprecated": "Deprecated in favor of '@metamask/eth-sig-util'", + "node_modules/eth-gas-reporter/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { - "buffer": "^5.2.1", - "elliptic": "^6.4.0", - "ethereumjs-abi": "0.6.5", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.0", - "tweetnacl-util": "^0.15.0" + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/eth-sig-util/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/eth-sig-util/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/eth-gas-reporter/node_modules/mocha": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", + "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, - "node_modules/eth-sig-util/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "node_modules/eth-gas-reporter/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "node_modules/eth-gas-reporter/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "dependencies": { - "js-sha3": "^0.8.0" + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "node_modules/eth-gas-reporter/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" } }, - "node_modules/ethereum-waffle": { + "node_modules/eth-gas-reporter/node_modules/readdirp": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.2.0.tgz", - "integrity": "sha512-XmLvbGE47u+6haOT/vBwx/2ifemlKv4Uop1ebnccnBXD0xmTK2Qnk/FonwHtkHX+cUxj+Ax+3c/1fYDogEvcZw==", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", "dev": true, "dependencies": { - "@ethereum-waffle/chai": "^3.2.0", - "@ethereum-waffle/compiler": "^3.2.0", - "@ethereum-waffle/mock-contract": "^3.2.0", - "@ethereum-waffle/provider": "^3.2.0", - "ethers": "^5.0.1" - }, - "bin": { - "waffle": "bin/waffle" + "picomatch": "^2.0.4" }, "engines": { - "node": ">=10.0" + "node": ">= 8" } }, - "node_modules/ethereumjs-abi": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz", - "integrity": "sha512-rCjJZ/AE96c/AAZc6O3kaog4FhOsAViaysBxqJNy2+LHP0ttH0zkZ7nXdVHOAyt6lFwLO0nlCwWszysG/ao1+g==", - "dev": true, - "dependencies": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^4.3.0" - } + "node_modules/eth-gas-reporter/node_modules/scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", + "dev": true }, - "node_modules/ethereumjs-abi/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "node_modules/eth-gas-reporter/node_modules/setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", "dev": true }, - "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.1.tgz", - "integrity": "sha512-WrckOZ7uBnei4+AKimpuF1B3Fv25OmoRgmYCpGsP7u8PFxXAmAgiJSYT2kRWnt6fVIlKaQlZvuwXp7PIrmn3/w==", + "node_modules/eth-gas-reporter/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "dependencies": { - "bn.js": "^4.8.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ethereumjs-util": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.0.2.tgz", - "integrity": "sha512-ATAP02eJLpAlWGfiKQddNrRfZpwXiTFhRN2EM/yLXMCdBW/xjKYblNKcx8GLzzrjXg0ymotck+lam1nuV90arQ==", + "node_modules/eth-gas-reporter/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethjs-util": "0.1.6", - "keccak": "^3.0.0", - "rlp": "^2.2.4", - "secp256k1": "^4.0.1" + "ansi-regex": "^3.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=4" } }, - "node_modules/ethers": { - "version": "5.6.9", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", - "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", + "node_modules/eth-gas-reporter/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.6.4", - "@ethersproject/abstract-provider": "5.6.1", - "@ethersproject/abstract-signer": "5.6.2", - "@ethersproject/address": "5.6.1", - "@ethersproject/base64": "5.6.1", - "@ethersproject/basex": "5.6.1", - "@ethersproject/bignumber": "5.6.2", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.1", - "@ethersproject/contracts": "5.6.2", - "@ethersproject/hash": "5.6.1", - "@ethersproject/hdnode": "5.6.2", - "@ethersproject/json-wallets": "5.6.1", - "@ethersproject/keccak256": "5.6.1", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.4", - "@ethersproject/pbkdf2": "5.6.1", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.8", - "@ethersproject/random": "5.6.1", - "@ethersproject/rlp": "5.6.1", - "@ethersproject/sha2": "5.6.1", - "@ethersproject/signing-key": "5.6.2", - "@ethersproject/solidity": "5.6.1", - "@ethersproject/strings": "5.6.1", - "@ethersproject/transactions": "5.6.2", - "@ethersproject/units": "5.6.1", - "@ethersproject/wallet": "5.6.2", - "@ethersproject/web": "5.6.1", - "@ethersproject/wordlists": "5.6.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "node_modules/eth-gas-reporter/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=6" } }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "node_modules/eth-gas-reporter/node_modules/uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/eth-gas-reporter/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "node_modules/eth-gas-reporter/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=6" } }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/eth-gas-reporter/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/execa/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/eth-gas-reporter/node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/execa/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/eth-gas-reporter/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/eth-gas-reporter/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.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": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, - "node_modules/execa/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/eth-gas-reporter/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, - "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "node_modules/eth-gas-reporter/node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", "dev": true, "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" }, "engines": { - "node": ">= 0.10.0" + "node": ">=6" } }, - "node_modules/express/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "node_modules/eth-gas-reporter/node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/eth-gas-reporter/node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "dependencies": { - "ms": "2.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "node_modules/eth-gas-reporter/node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { - "side-channel": "^1.0.4" + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "node_modules/eth-sig-util": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-2.5.3.tgz", + "integrity": "sha512-KpXbCKmmBUNUTGh9MRKmNkIPietfhzBqqYqysDavLseIiMUGl95k6UcPEkALAZlj41e9E6yioYXc1PC333RKqw==", + "deprecated": "Deprecated in favor of '@metamask/eth-sig-util'", "dev": true, "dependencies": { - "type": "^2.5.0" + "buffer": "^5.2.1", + "elliptic": "^6.4.0", + "ethereumjs-abi": "0.6.5", + "ethereumjs-util": "^5.1.1", + "tweetnacl": "^1.0.0", + "tweetnacl-util": "^0.15.0" } }, - "node_modules/ext/node_modules/type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "node_modules/eth-sig-util/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/extract-comments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/extract-comments/-/extract-comments-1.1.0.tgz", - "integrity": "sha512-dzbZV2AdSSVW/4E7Ti5hZdHWbA+Z80RJsJhr5uiL10oyjl/gy7/o+HI1HwK4/WSZhlq4SNKU3oUzXlM13Qx02Q==", + "node_modules/eth-sig-util/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "esprima-extract-comments": "^1.1.0", - "parse-code-context": "^1.0.0" - }, - "engines": { - "node": ">=6" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-base64-decode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", - "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", - "dev": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "node_modules/eth-sig-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "node_modules/eth-sig-util/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "dev": true, "dependencies": { - "reusify": "^1.0.4" + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dev": true, + "peer": true, "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" + "js-sha3": "^0.8.0" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", "dev": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/ethereumjs-abi": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz", + "integrity": "sha512-rCjJZ/AE96c/AAZc6O3kaog4FhOsAViaysBxqJNy2+LHP0ttH0zkZ7nXdVHOAyt6lFwLO0nlCwWszysG/ao1+g==", "dev": true, "dependencies": { - "ms": "2.0.0" + "bn.js": "^4.10.0", + "ethereumjs-util": "^4.3.0" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/find-replace": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", - "integrity": "sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==", + "node_modules/ethereumjs-abi/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, "dependencies": { - "array-back": "^1.0.4", - "test-value": "^2.1.0" - }, - "engines": { - "node": ">=4.0.0" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/find-replace/node_modules/array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.1.tgz", + "integrity": "sha512-WrckOZ7uBnei4+AKimpuF1B3Fv25OmoRgmYCpGsP7u8PFxXAmAgiJSYT2kRWnt6fVIlKaQlZvuwXp7PIrmn3/w==", "dev": true, "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" + "bn.js": "^4.8.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.0.0" } }, - "node_modules/find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "node_modules/ethereumjs-util": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.0.2.tgz", + "integrity": "sha512-ATAP02eJLpAlWGfiKQddNrRfZpwXiTFhRN2EM/yLXMCdBW/xjKYblNKcx8GLzzrjXg0ymotck+lam1nuV90arQ==", "dev": true, "dependencies": { - "semver-regex": "^2.0.0" + "@types/bn.js": "^4.11.3", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethjs-util": "0.1.6", + "keccak": "^3.0.0", + "rlp": "^2.2.4", + "secp256k1": "^4.0.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "dependencies": { - "micromatch": "^4.0.2" + "node": ">=10.0.0" } }, - "node_modules/flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "node_modules/ethers": { + "version": "5.6.9", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", + "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" + "@ethersproject/abi": "5.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" } }, - "node_modules/fmix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", - "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", + "node_modules/ethers/node_modules/@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", "dev": true, - "dependencies": { - "imul": "^1.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", "funding": [ { "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" } ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "node_modules/ethers/node_modules/@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" } }, - "node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/ethers/node_modules/@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" } }, - "node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "node_modules/ethers/node_modules/@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", "dev": true, - "dependencies": { - "minipass": "^2.6.0" - } - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "node_modules/ethers/node_modules/@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@ethersproject/bytes": "^5.6.1" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/ethers/node_modules/@ethersproject/basex": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", + "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-cli": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz", - "integrity": "sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw==", - "bundleDependencies": [ - "source-map-support", - "yargs", - "ethereumjs-util" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } ], - "deprecated": "ganache-cli is now ganache; visit https://trfl.io/g7 for details", - "dev": true, "dependencies": { - "ethereumjs-util": "6.2.1", - "source-map-support": "0.5.12", - "yargs": "13.2.4" - }, - "bin": { - "ganache-cli": "cli.js" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/properties": "^5.6.0" } }, - "node_modules/ganache-cli/node_modules/@types/bn.js": { - "version": "4.11.6", + "node_modules/ethers/node_modules/@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@types/node": "*" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" } }, - "node_modules/ganache-cli/node_modules/@types/node": { - "version": "14.11.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache-cli/node_modules/@types/pbkdf2": { - "version": "3.1.0", + "node_modules/ethers/node_modules/@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@types/node": "*" + "@ethersproject/logger": "^5.6.0" } }, - "node_modules/ganache-cli/node_modules/@types/secp256k1": { - "version": "4.0.1", + "node_modules/ethers/node_modules/@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@types/node": "*" + "@ethersproject/bignumber": "^5.6.2" } }, - "node_modules/ganache-cli/node_modules/ansi-regex": { - "version": "4.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-cli/node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/ethers/node_modules/@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "node_modules/ganache-cli/node_modules/base-x": { - "version": "3.0.8", + "node_modules/ethers/node_modules/@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "safe-buffer": "^5.0.1" + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" } }, - "node_modules/ganache-cli/node_modules/blakejs": { - "version": "1.1.0", - "dev": true, - "inBundle": true, - "license": "CC0-1.0" - }, - "node_modules/ganache-cli/node_modules/bn.js": { - "version": "4.11.9", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache-cli/node_modules/brorand": { - "version": "1.1.0", + "node_modules/ethers/node_modules/@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", "dev": true, - "inBundle": true, - "license": "MIT" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] }, - "node_modules/ganache-cli/node_modules/browserify-aes": { - "version": "1.2.0", + "node_modules/ethers/node_modules/@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "@ethersproject/logger": "^5.6.0" } }, - "node_modules/ganache-cli/node_modules/bs58": { - "version": "4.0.1", + "node_modules/ethers/node_modules/@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "base-x": "^3.0.2" + "@ethersproject/logger": "^5.6.0" } }, - "node_modules/ganache-cli/node_modules/bs58check": { - "version": "2.1.2", + "node_modules/ethers/node_modules/@ethersproject/providers": { + "version": "5.6.8", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", + "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/ganache-cli/node_modules/buffer-from": { - "version": "1.1.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache-cli/node_modules/buffer-xor": { - "version": "1.0.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache-cli/node_modules/camelcase": { - "version": "5.3.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" } }, - "node_modules/ganache-cli/node_modules/cipher-base": { - "version": "1.0.4", + "node_modules/ethers/node_modules/@ethersproject/random": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", + "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, - "node_modules/ganache-cli/node_modules/cliui": { - "version": "5.0.0", + "node_modules/ethers/node_modules/@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", "dev": true, - "inBundle": true, - "license": "ISC", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, - "node_modules/ganache-cli/node_modules/color-convert": { - "version": "1.9.3", + "node_modules/ethers/node_modules/@ethersproject/sha2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "color-name": "1.1.3" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" } }, - "node_modules/ganache-cli/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache-cli/node_modules/create-hash": { - "version": "1.2.0", + "node_modules/ethers/node_modules/@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" } }, - "node_modules/ganache-cli/node_modules/create-hmac": { - "version": "1.1.7", + "node_modules/ethers/node_modules/@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, - "node_modules/ganache-cli/node_modules/cross-spawn": { - "version": "6.0.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/ganache-cli/node_modules/decamelize": { - "version": "1.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-cli/node_modules/elliptic": { - "version": "6.5.3", + "node_modules/ethers/node_modules/@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" } }, - "node_modules/ganache-cli/node_modules/emoji-regex": { - "version": "7.0.3", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache-cli/node_modules/end-of-stream": { - "version": "1.4.4", + "node_modules/ethers/node_modules/@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", "dev": true, - "inBundle": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "once": "^1.4.0" + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "node_modules/ganache-cli/node_modules/ethereum-cryptography": { - "version": "0.1.3", + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", "dev": true, - "inBundle": true, - "license": "MIT", + "peer": true, "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/ganache-cli/node_modules/ethereumjs-util": { - "version": "6.2.1", + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", "dev": true, - "inBundle": true, - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } + "peer": true }, - "node_modules/ganache-cli/node_modules/ethjs-util": { + "node_modules/ethjs-util": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { "is-hex-prefixed": "1.0.0", "strip-hex-prefix": "1.0.0" @@ -5628,797 +5235,741 @@ "npm": ">=3" } }, - "node_modules/ganache-cli/node_modules/evp_bytestokey": { + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true, + "peer": true + }, + "node_modules/evp_bytestokey": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" } }, - "node_modules/ganache-cli/node_modules/execa": { - "version": "1.0.0", + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, - "inBundle": true, - "license": "MIT", "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" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/ganache-cli/node_modules/find-up": { - "version": "3.0.0", + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, - "inBundle": true, - "license": "MIT", + "peer": true, "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" + "type": "^2.7.2" } }, - "node_modules/ganache-cli/node_modules/get-caller-file": { - "version": "2.0.5", + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", "dev": true, - "inBundle": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } + "peer": true }, - "node_modules/ganache-cli/node_modules/get-stream": { - "version": "4.1.0", + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extract-comments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/extract-comments/-/extract-comments-1.1.0.tgz", + "integrity": "sha512-dzbZV2AdSSVW/4E7Ti5hZdHWbA+Z80RJsJhr5uiL10oyjl/gy7/o+HI1HwK4/WSZhlq4SNKU3oUzXlM13Qx02Q==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "pump": "^3.0.0" + "esprima-extract-comments": "^1.1.0", + "parse-code-context": "^1.0.0" }, "engines": { "node": ">=6" } }, - "node_modules/ganache-cli/node_modules/hash-base": { - "version": "3.1.0", + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, - "inBundle": true, - "license": "MIT", + "peer": true, "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=4" + "node": ">=8.6.0" } }, - "node_modules/ganache-cli/node_modules/hash.js": { - "version": "1.1.7", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "peer": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, - "inBundle": true, - "license": "MIT", + "peer": true, "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "reusify": "^1.0.4" } }, - "node_modules/ganache-cli/node_modules/hmac-drbg": { - "version": "1.0.1", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-cli/node_modules/inherits": { - "version": "2.0.4", + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, - "inBundle": true, - "license": "ISC" + "peer": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } }, - "node_modules/ganache-cli/node_modules/invert-kv": { - "version": "2.0.0", + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, - "inBundle": true, - "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, "engines": { "node": ">=4" } }, - "node_modules/ganache-cli/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", + "node_modules/find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", "dev": true, - "inBundle": true, - "license": "MIT", + "dependencies": { + "semver-regex": "^2.0.0" + }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/ganache-cli/node_modules/is-hex-prefixed": { - "version": "1.0.0", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "bin": { + "flat": "cli.js" } }, - "node_modules/ganache-cli/node_modules/is-stream": { - "version": "1.1.0", + "node_modules/fmix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", + "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "imul": "^1.0.0" } }, - "node_modules/ganache-cli/node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/ganache-cli/node_modules/keccak": { - "version": "3.0.1", + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { - "node": ">=10.0.0" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/ganache-cli/node_modules/lcid": { - "version": "2.0.0", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "inBundle": true, - "license": "MIT", + "peer": true, "dependencies": { - "invert-kv": "^2.0.0" - }, - "engines": { - "node": ">=6" + "is-callable": "^1.1.3" } }, - "node_modules/ganache-cli/node_modules/locate-path": { - "version": "3.0.0", + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/ganache-cli/node_modules/map-age-cleaner": { - "version": "0.1.3", + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "p-defer": "^1.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=6" + "node": ">= 6" } }, - "node_modules/ganache-cli/node_modules/md5.js": { - "version": "1.3.5", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true }, - "node_modules/ganache-cli/node_modules/mem": { - "version": "4.3.0", + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-cli/node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" + "node": ">=6 <7 || >=8" } }, - "node_modules/ganache-cli/node_modules/minimalistic-assert": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/ganache-cli/node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache-cli/node_modules/nice-try": { - "version": "1.0.5", - "dev": true, - "inBundle": true, - "license": "MIT" + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true }, - "node_modules/ganache-cli/node_modules/node-addon-api": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, - "node_modules/ganache-cli/node_modules/node-gyp-build": { - "version": "4.2.3", + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/ganache-cli/node_modules/npm-run-path": { - "version": "2.0.2", + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "path-key": "^2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-cli/node_modules/once": { - "version": "1.4.0", + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-cli/node_modules/os-locale": { - "version": "3.1.0", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - }, "engines": { - "node": ">=6" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/ganache-cli/node_modules/p-defer": { - "version": "1.0.0", + "node_modules/get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", "dev": true, - "inBundle": true, - "license": "MIT", + "peer": true, "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/ganache-cli/node_modules/p-finally": { - "version": "1.0.0", + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-cli/node_modules/p-is-promise": { - "version": "2.1.0", + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", "dev": true, - "inBundle": true, - "license": "MIT", "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/ganache-cli/node_modules/p-limit": { - "version": "2.3.0", + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "pump": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-cli/node_modules/p-locate": { - "version": "3.0.0", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "p-limit": "^2.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-cli/node_modules/p-try": { - "version": "2.2.0", + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "assert-plus": "^1.0.0" } }, - "node_modules/ganache-cli/node_modules/path-exists": { - "version": "3.0.0", + "node_modules/ghost-testrpc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", + "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" + "peer": true, + "dependencies": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, + "bin": { + "testrpc-sc": "index.js" } }, - "node_modules/ganache-cli/node_modules/path-key": { - "version": "2.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-cli/node_modules/pbkdf2": { - "version": "3.1.1", + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=0.12" - } - }, - "node_modules/ganache-cli/node_modules/pump": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/ganache-cli/node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ganache-cli/node_modules/readable-stream": { - "version": "3.6.0", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" } }, - "node_modules/ganache-cli/node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-cli/node_modules/require-main-filename": { + "node_modules/global-modules": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/ganache-cli/node_modules/ripemd160": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/ganache-cli/node_modules/rlp": { - "version": "2.2.6", - "dev": true, - "inBundle": true, - "license": "MPL-2.0", + "peer": true, "dependencies": { - "bn.js": "^4.11.1" + "global-prefix": "^3.0.0" }, - "bin": { - "rlp": "bin/rlp" + "engines": { + "node": ">=6" } }, - "node_modules/ganache-cli/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache-cli/node_modules/scrypt-js": { - "version": "3.0.1", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache-cli/node_modules/secp256k1": { - "version": "4.0.2", + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", + "peer": true, "dependencies": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" }, "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache-cli/node_modules/semver": { - "version": "5.7.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node": ">=6" } }, - "node_modules/ganache-cli/node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/ganache-cli/node_modules/setimmediate": { - "version": "1.0.5", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache-cli/node_modules/sha.js": { - "version": "2.4.11", + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "inBundle": true, - "license": "(MIT AND BSD-3-Clause)", + "peer": true, "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "isexe": "^2.0.0" }, "bin": { - "sha.js": "bin.js" + "which": "bin/which" } }, - "node_modules/ganache-cli/node_modules/shebang-command": { - "version": "1.2.0", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "inBundle": true, - "license": "MIT", + "peer": true, "dependencies": { - "shebang-regex": "^1.0.0" + "get-intrinsic": "^1.1.3" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-cli/node_modules/shebang-regex": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-cli/node_modules/signal-exit": { - "version": "3.0.3", - "dev": true, - "inBundle": true, - "license": "ISC" + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true }, - "node_modules/ganache-cli/node_modules/source-map": { - "version": "0.6.1", + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true, - "inBundle": true, - "license": "BSD-3-Clause", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-cli/node_modules/source-map-support": { - "version": "0.5.12", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/ganache-cli/node_modules/string_decoder": { - "version": "1.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" + "node": ">=4.x" } }, - "node_modules/ganache-cli/node_modules/string-width": { - "version": "3.1.0", + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, - "inBundle": true, - "license": "MIT", + "peer": true, "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-cli/node_modules/strip-ansi": { - "version": "5.2.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" + "bin": { + "handlebars": "bin/handlebars" }, "engines": { - "node": ">=6" + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/ganache-cli/node_modules/strip-eof": { - "version": "1.0.0", + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "inBundle": true, - "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-cli/node_modules/strip-hex-prefix": { - "version": "1.0.0", + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ganache-cli/node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache-cli/node_modules/which": { - "version": "1.3.1", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "node": ">=4" } }, - "node_modules/ganache-cli/node_modules/which-module": { - "version": "2.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/ganache-cli/node_modules/wrap-ansi": { - "version": "5.1.0", + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "dev": true, - "inBundle": true, - "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ajv": "^6.12.3", + "har-schema": "^2.0.0" }, "engines": { "node": ">=6" } }, - "node_modules/ganache-cli/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/ganache-cli/node_modules/y18n": { - "version": "4.0.0", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/ganache-cli/node_modules/yargs": { - "version": "13.2.4", - "dev": true, - "inBundle": true, - "license": "MIT", - "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" - } - }, - "node_modules/ganache-cli/node_modules/yargs-parser": { - "version": "13.1.2", + "node_modules/hardhat": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.12.2.tgz", + "integrity": "sha512-f3ZhzXy1uyQv0UXnAQ8GCBOWjzv++WJNb7bnm10SsyC3dB7vlPpsMWBNhq7aoRxKrNhX9tCev81KFV3i5BTeMQ==", "dev": true, - "inBundle": true, - "license": "ISC", "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/ethereumjs-block": "^4.0.0", + "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-evm": "^1.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", + "@nomicfoundation/ethereumjs-trie": "^5.0.0", + "@nomicfoundation/ethereumjs-tx": "^4.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-vm": "^6.0.0", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "abort-controller": "^3.0.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.0", + "qs": "^6.7.0", + "raw-body": "^2.4.1", + "resolve": "1.17.0", + "semver": "^6.3.0", + "solc": "0.7.3", + "source-map-support": "^0.5.13", + "stacktrace-parser": "^0.1.10", + "tsort": "0.0.1", + "undici": "^5.4.0", + "uuid": "^8.3.2", + "ws": "^7.4.6" + }, + "bin": { + "hardhat": "internal/cli/cli.js" + }, + "engines": { + "node": "^14.0.0 || ^16.0.0 || ^18.0.0" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/ganache-core": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", - "integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==", - "bundleDependencies": [ - "keccak" - ], - "deprecated": "ganache-core is now ganache; visit https://trfl.io/g7 for details", + "node_modules/hardhat-contract-sizer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.0.3.tgz", + "integrity": "sha512-iaixOzWxwOSIIE76cl2uk4m9VXI1hKU3bFt+gl7jDhyb2/JB2xOp5wECkfWqAoc4V5lD4JtjldZlpSTbzX+nPQ==", "dev": true, - "hasShrinkwrap": true, "dependencies": { - "abstract-leveldown": "3.0.0", - "async": "2.6.2", - "bip39": "2.5.0", - "cachedown": "1.0.0", - "clone": "2.1.2", - "debug": "3.2.6", - "encoding-down": "5.0.4", - "eth-sig-util": "3.0.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-account": "3.0.0", - "ethereumjs-block": "2.2.2", - "ethereumjs-common": "1.5.0", - "ethereumjs-tx": "2.1.2", - "ethereumjs-util": "6.2.1", - "ethereumjs-vm": "4.2.0", - "heap": "0.2.6", - "keccak": "3.0.1", - "level-sublevel": "6.6.4", - "levelup": "3.1.1", - "lodash": "4.17.20", - "lru-cache": "5.1.1", - "merkle-patricia-tree": "3.0.0", - "patch-package": "6.2.2", - "seedrandom": "3.0.1", - "source-map-support": "0.5.12", - "tmp": "0.1.0", - "web3-provider-engine": "14.2.1", - "websocket": "1.0.32" + "cli-table3": "^0.6.0", + "colors": "^1.4.0" }, + "peerDependencies": { + "hardhat": "^2.0.0" + } + }, + "node_modules/hardhat-dependency-compiler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/hardhat-dependency-compiler/-/hardhat-dependency-compiler-1.1.2.tgz", + "integrity": "sha512-LVnsPSZnGvzWVvlpewlkPKlPtFP/S9V41RC1fd/ygZc4jkG8ubNlfE82nwiGw5oPueHSmFi6TACgmyrEOokK8w==", + "dev": true, "engines": { - "node": ">=8.9.0" + "node": ">=14.14.0" }, - "optionalDependencies": { - "ethereumjs-wallet": "0.6.5", - "web3": "1.2.11" + "peerDependencies": { + "hardhat": "^2.0.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/abi": { - "version": "5.0.0-beta.153", + "node_modules/hardhat-deploy": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.12.tgz", + "integrity": "sha512-Wv0BqzwW4mz78raxkfQtBbkhZwZTRWXwRbEwgkTUimD3MX/0Z9+D4O+s1zHJlG0zwZvJMbwxPOrOHQm4NZ3JAQ==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/address": ">=5.0.0-beta.128", - "@ethersproject/bignumber": ">=5.0.0-beta.130", - "@ethersproject/bytes": ">=5.0.0-beta.129", - "@ethersproject/constants": ">=5.0.0-beta.128", - "@ethersproject/hash": ">=5.0.0-beta.128", - "@ethersproject/keccak256": ">=5.0.0-beta.127", - "@ethersproject/logger": ">=5.0.0-beta.129", - "@ethersproject/properties": ">=5.0.0-beta.131", - "@ethersproject/strings": ">=5.0.0-beta.130" + "@types/qs": "^6.9.7", + "axios": "^0.21.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "ethers": "^5.5.3", + "form-data": "^4.0.0", + "fs-extra": "^10.0.0", + "match-all": "^1.2.6", + "murmur-128": "^0.2.1", + "qs": "^6.9.4", + "zksync-web3": "^0.7.8" } }, - "node_modules/ganache-core/node_modules/@ethersproject/abstract-provider": { - "version": "5.0.8", + "node_modules/hardhat-deploy/node_modules/@ethersproject/abi": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz", + "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==", "dev": true, "funding": [ { @@ -6430,20 +5981,22 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/networks": "^5.0.7", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/transactions": "^5.0.9", - "@ethersproject/web": "^5.0.12" + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/abstract-signer": { - "version": "5.0.10", + "node_modules/hardhat-deploy/node_modules/@ethersproject/abstract-provider": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz", + "integrity": "sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg==", "dev": true, "funding": [ { @@ -6455,18 +6008,20 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/abstract-provider": "^5.0.8", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7" + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/networks": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/web": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/address": { - "version": "5.0.9", + "node_modules/hardhat-deploy/node_modules/@ethersproject/abstract-signer": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz", + "integrity": "sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA==", "dev": true, "funding": [ { @@ -6478,18 +6033,18 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/rlp": "^5.0.7" + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/base64": { - "version": "5.0.7", + "node_modules/hardhat-deploy/node_modules/@ethersproject/address": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.5.0.tgz", + "integrity": "sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw==", "dev": true, "funding": [ { @@ -6501,14 +6056,18 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/bytes": "^5.0.9" + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/rlp": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/bignumber": { - "version": "5.0.13", + "node_modules/hardhat-deploy/node_modules/@ethersproject/base64": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.5.0.tgz", + "integrity": "sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA==", "dev": true, "funding": [ { @@ -6520,16 +6079,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "bn.js": "^4.4.0" + "@ethersproject/bytes": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/bytes": { - "version": "5.0.9", + "node_modules/hardhat-deploy/node_modules/@ethersproject/basex": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.5.0.tgz", + "integrity": "sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==", "dev": true, "funding": [ { @@ -6541,14 +6098,15 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/logger": "^5.0.8" + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/properties": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/constants": { - "version": "5.0.8", + "node_modules/hardhat-deploy/node_modules/@ethersproject/bignumber": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.5.0.tgz", + "integrity": "sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg==", "dev": true, "funding": [ { @@ -6560,14 +6118,16 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/bignumber": "^5.0.13" + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "bn.js": "^4.11.9" } }, - "node_modules/ganache-core/node_modules/@ethersproject/hash": { - "version": "5.0.10", + "node_modules/hardhat-deploy/node_modules/@ethersproject/bytes": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.5.0.tgz", + "integrity": "sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==", "dev": true, "funding": [ { @@ -6579,21 +6139,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/abstract-signer": "^5.0.10", - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" + "@ethersproject/logger": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/keccak256": { - "version": "5.0.7", + "node_modules/hardhat-deploy/node_modules/@ethersproject/constants": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.5.0.tgz", + "integrity": "sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ==", "dev": true, "funding": [ { @@ -6605,15 +6158,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "js-sha3": "0.5.7" + "@ethersproject/bignumber": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/logger": { - "version": "5.0.8", + "node_modules/hardhat-deploy/node_modules/@ethersproject/contracts": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.5.0.tgz", + "integrity": "sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==", "dev": true, "funding": [ { @@ -6625,11 +6177,23 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true + "dependencies": { + "@ethersproject/abi": "^5.5.0", + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/transactions": "^5.5.0" + } }, - "node_modules/ganache-core/node_modules/@ethersproject/networks": { - "version": "5.0.7", + "node_modules/hardhat-deploy/node_modules/@ethersproject/hash": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.5.0.tgz", + "integrity": "sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg==", "dev": true, "funding": [ { @@ -6641,14 +6205,21 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/logger": "^5.0.8" + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/properties": { - "version": "5.0.7", + "node_modules/hardhat-deploy/node_modules/@ethersproject/hdnode": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.5.0.tgz", + "integrity": "sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==", "dev": true, "funding": [ { @@ -6660,14 +6231,25 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/logger": "^5.0.8" + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/basex": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/pbkdf2": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/sha2": "^5.5.0", + "@ethersproject/signing-key": "^5.5.0", + "@ethersproject/strings": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/wordlists": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/rlp": { - "version": "5.0.7", + "node_modules/hardhat-deploy/node_modules/@ethersproject/json-wallets": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz", + "integrity": "sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==", "dev": true, "funding": [ { @@ -6679,15 +6261,26 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8" + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/hdnode": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/pbkdf2": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/random": "^5.5.0", + "@ethersproject/strings": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" } }, - "node_modules/ganache-core/node_modules/@ethersproject/signing-key": { - "version": "5.0.8", + "node_modules/hardhat-deploy/node_modules/@ethersproject/keccak256": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.5.0.tgz", + "integrity": "sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg==", "dev": true, "funding": [ { @@ -6699,19 +6292,17 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "elliptic": "6.5.3" + "@ethersproject/bytes": "^5.5.0", + "js-sha3": "0.8.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/strings": { - "version": "5.0.8", - "dev": true, - "funding": [ + "node_modules/hardhat-deploy/node_modules/@ethersproject/logger": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.5.0.tgz", + "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==", + "dev": true, + "funding": [ { "type": "individual", "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" @@ -6720,17 +6311,12 @@ "type": "individual", "url": "https://www.buymeacoffee.com/ricmoo" } - ], - "license": "MIT", - "optional": true, - "dependencies": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/logger": "^5.0.8" - } + ] }, - "node_modules/ganache-core/node_modules/@ethersproject/transactions": { - "version": "5.0.9", + "node_modules/hardhat-deploy/node_modules/@ethersproject/networks": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.2.tgz", + "integrity": "sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ==", "dev": true, "funding": [ { @@ -6742,22 +6328,14 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/rlp": "^5.0.7", - "@ethersproject/signing-key": "^5.0.8" + "@ethersproject/logger": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@ethersproject/web": { - "version": "5.0.12", + "node_modules/hardhat-deploy/node_modules/@ethersproject/pbkdf2": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz", + "integrity": "sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==", "dev": true, "funding": [ { @@ -6769,1014 +6347,1092 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "license": "MIT", - "optional": true, "dependencies": { - "@ethersproject/base64": "^5.0.7", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/sha2": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@sindresorhus/is": { - "version": "0.14.0", + "node_modules/hardhat-deploy/node_modules/@ethersproject/properties": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.5.0.tgz", + "integrity": "sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@szmarczak/http-timer": { - "version": "1.1.2", + "node_modules/hardhat-deploy/node_modules/@ethersproject/providers": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.3.tgz", + "integrity": "sha512-ZHXxXXXWHuwCQKrgdpIkbzMNJMvs+9YWemanwp1fA7XZEv7QlilseysPvQe0D7Q7DlkJX/w/bGA1MdgK2TbGvA==", "dev": true, - "license": "MIT", - "optional": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/basex": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/networks": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/random": "^5.5.0", + "@ethersproject/rlp": "^5.5.0", + "@ethersproject/sha2": "^5.5.0", + "@ethersproject/strings": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/web": "^5.5.0", + "bech32": "1.1.4", + "ws": "7.4.6" } }, - "node_modules/ganache-core/node_modules/@types/bn.js": { - "version": "4.11.6", + "node_modules/hardhat-deploy/node_modules/@ethersproject/random": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.1.tgz", + "integrity": "sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@types/node": "*" + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@types/node": { - "version": "14.14.20", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/@types/pbkdf2": { - "version": "3.1.0", + "node_modules/hardhat-deploy/node_modules/@ethersproject/rlp": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.5.0.tgz", + "integrity": "sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@types/node": "*" + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/@types/secp256k1": { - "version": "4.0.1", + "node_modules/hardhat-deploy/node_modules/@ethersproject/sha2": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.5.0.tgz", + "integrity": "sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "@types/node": "*" + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "hash.js": "1.1.7" } }, - "node_modules/ganache-core/node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/ganache-core/node_modules/abstract-leveldown": { - "version": "3.0.0", + "node_modules/hardhat-deploy/node_modules/@ethersproject/signing-key": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.5.0.tgz", + "integrity": "sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=4" + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.7" } }, - "node_modules/ganache-core/node_modules/accepts": { - "version": "1.3.7", + "node_modules/hardhat-deploy/node_modules/@ethersproject/solidity": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.5.0.tgz", + "integrity": "sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==", "dev": true, - "license": "MIT", - "optional": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/sha2": "^5.5.0", + "@ethersproject/strings": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/aes-js": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/ajv": { - "version": "6.12.6", + "node_modules/hardhat-deploy/node_modules/@ethersproject/strings": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.5.0.tgz", + "integrity": "sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/logger": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/hardhat-deploy/node_modules/@ethersproject/transactions": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.5.0.tgz", + "integrity": "sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/rlp": "^5.5.0", + "@ethersproject/signing-key": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/arr-diff": { - "version": "4.0.0", + "node_modules/hardhat-deploy/node_modules/@ethersproject/units": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.5.0.tgz", + "integrity": "sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/arr-flatten": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/arr-union": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/constants": "^5.5.0", + "@ethersproject/logger": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/array-flatten": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/array-unique": { - "version": "0.3.2", + "node_modules/hardhat-deploy/node_modules/@ethersproject/wallet": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.5.0.tgz", + "integrity": "sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abstract-provider": "^5.5.0", + "@ethersproject/abstract-signer": "^5.5.0", + "@ethersproject/address": "^5.5.0", + "@ethersproject/bignumber": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/hdnode": "^5.5.0", + "@ethersproject/json-wallets": "^5.5.0", + "@ethersproject/keccak256": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/random": "^5.5.0", + "@ethersproject/signing-key": "^5.5.0", + "@ethersproject/transactions": "^5.5.0", + "@ethersproject/wordlists": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/asn1": { - "version": "0.2.4", + "node_modules/hardhat-deploy/node_modules/@ethersproject/web": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.1.tgz", + "integrity": "sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "safer-buffer": "~2.1.0" + "@ethersproject/base64": "^5.5.0", + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/asn1.js": { - "version": "5.4.1", + "node_modules/hardhat-deploy/node_modules/@ethersproject/wordlists": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.5.0.tgz", + "integrity": "sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==", "dev": true, - "license": "MIT", - "optional": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "@ethersproject/bytes": "^5.5.0", + "@ethersproject/hash": "^5.5.0", + "@ethersproject/logger": "^5.5.0", + "@ethersproject/properties": "^5.5.0", + "@ethersproject/strings": "^5.5.0" } }, - "node_modules/ganache-core/node_modules/assert-plus": { - "version": "1.0.0", + "node_modules/hardhat-deploy/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=0.8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ganache-core/node_modules/assign-symbols": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/hardhat-deploy/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, - "node_modules/ganache-core/node_modules/async": { - "version": "2.6.2", + "node_modules/hardhat-deploy/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { - "lodash": "^4.17.11" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ganache-core/node_modules/async-eventemitter": { - "version": "0.2.4", + "node_modules/hardhat-deploy/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { - "async": "^2.4.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/ganache-core/node_modules/async-limiter": { - "version": "1.0.1", - "dev": true, - "license": "MIT" + "node_modules/hardhat-deploy/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/ganache-core/node_modules/asynckit": { - "version": "0.4.0", + "node_modules/hardhat-deploy/node_modules/ethers": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.4.tgz", + "integrity": "sha512-N9IAXsF8iKhgHIC6pquzRgPBJEzc9auw3JoRkaKe+y4Wl/LFBtDDunNe7YmdomontECAcC5APaAgWZBiu1kirw==", "dev": true, - "license": "MIT" + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/abi": "5.5.0", + "@ethersproject/abstract-provider": "5.5.1", + "@ethersproject/abstract-signer": "5.5.0", + "@ethersproject/address": "5.5.0", + "@ethersproject/base64": "5.5.0", + "@ethersproject/basex": "5.5.0", + "@ethersproject/bignumber": "5.5.0", + "@ethersproject/bytes": "5.5.0", + "@ethersproject/constants": "5.5.0", + "@ethersproject/contracts": "5.5.0", + "@ethersproject/hash": "5.5.0", + "@ethersproject/hdnode": "5.5.0", + "@ethersproject/json-wallets": "5.5.0", + "@ethersproject/keccak256": "5.5.0", + "@ethersproject/logger": "5.5.0", + "@ethersproject/networks": "5.5.2", + "@ethersproject/pbkdf2": "5.5.0", + "@ethersproject/properties": "5.5.0", + "@ethersproject/providers": "5.5.3", + "@ethersproject/random": "5.5.1", + "@ethersproject/rlp": "5.5.0", + "@ethersproject/sha2": "5.5.0", + "@ethersproject/signing-key": "5.5.0", + "@ethersproject/solidity": "5.5.0", + "@ethersproject/strings": "5.5.0", + "@ethersproject/transactions": "5.5.0", + "@ethersproject/units": "5.5.0", + "@ethersproject/wallet": "5.5.0", + "@ethersproject/web": "5.5.1", + "@ethersproject/wordlists": "5.5.0" + } }, - "node_modules/ganache-core/node_modules/atob": { - "version": "2.1.2", + "node_modules/hardhat-deploy/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 4.5.0" + "node": ">=12" } }, - "node_modules/ganache-core/node_modules/aws-sign2": { - "version": "0.7.0", + "node_modules/hardhat-deploy/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "Apache-2.0", "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/aws4": { - "version": "1.11.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/babel-code-frame": { - "version": "6.26.0", + "node_modules/hardhat-deploy/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "license": "MIT", "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/ansi-regex": { - "version": "2.1.1", + "node_modules/hardhat-deploy/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", + "node_modules/hardhat-deploy/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 10.0.0" } }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", + "node_modules/hardhat-deploy/node_modules/zksync-web3": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.7.13.tgz", + "integrity": "sha512-Zz83eOWLqPs88kgczkJLhst192oqtj7uzI3PaGyR9lkfQLL5eMEMZ+pD1eYPppTE1GohmGxhqnEf5HxG7WF0QA==", "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "ethers": "~5.5.0" } }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/strip-ansi": { - "version": "3.0.1", + "node_modules/hardhat-gas-reporter": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.8.tgz", + "integrity": "sha512-1G5thPnnhcwLHsFnl759f2tgElvuwdkzxlI65fC9PwxYMEe9cmjkVAAWTf3/3y8uP6ZSPiUiOW8PgZnykmZe0g==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-regex": "^2.0.0" + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.24", + "sha1": "^1.1.1" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ganache-core/node_modules/babel-core": { - "version": "6.26.3", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" + "peerDependencies": { + "hardhat": "^2.0.2" } }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/debug": { - "version": "2.6.9", + "node_modules/hardhat/node_modules/@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/json5": { - "version": "0.5.1", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" + "@types/node": "*" } }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/babel-core/node_modules/slash": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "node_modules/hardhat/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, - "node_modules/ganache-core/node_modules/babel-generator": { - "version": "6.26.1", + "node_modules/hardhat/node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", "dev": true, - "license": "MIT", "dependencies": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "node_modules/ganache-core/node_modules/babel-generator/node_modules/jsesc": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" } }, - "node_modules/ganache-core/node_modules/babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", + "node_modules/hardhat/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", "dev": true, - "license": "MIT", "dependencies": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" } }, - "node_modules/ganache-core/node_modules/babel-helper-call-delegate": { - "version": "6.24.1", + "node_modules/hardhat/node_modules/ethereumjs-util/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "dev": true, - "license": "MIT", "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@types/node": "*" } }, - "node_modules/ganache-core/node_modules/babel-helper-define-map": { - "version": "6.26.0", + "node_modules/hardhat/node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, - "license": "MIT", "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "node_modules/ganache-core/node_modules/babel-helper-explode-assignable-expression": { - "version": "6.24.1", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "license": "MIT", "dependencies": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "node_modules/ganache-core/node_modules/babel-helper-function-name": { - "version": "6.24.1", + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-helper-get-function-arity": { - "version": "6.24.1", + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/babel-helper-hoist-variables": { - "version": "6.24.1", + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, - "license": "MIT", "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-helper-optimise-call-expression": { - "version": "6.24.1", + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-helper-regex": { - "version": "6.26.0", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, - "license": "MIT", "dependencies": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-helper-remap-async-to-generator": { - "version": "6.24.1", + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, - "license": "MIT", "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/babel-helper-replace-supers": { - "version": "6.24.1", + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, - "license": "MIT", "dependencies": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/ganache-core/node_modules/babel-helpers": { - "version": "6.24.1", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "bin": { + "he": "bin/he" } }, - "node_modules/ganache-core/node_modules/babel-messages": { - "version": "6.23.0", + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/babel-plugin-check-es2015-constants": { - "version": "6.22.0", + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, - "license": "MIT", "dependencies": { - "babel-runtime": "^6.22.0" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/ganache-core/node_modules/babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-async-to-generator": { - "version": "6.24.1", + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", "dev": true, - "license": "MIT", "dependencies": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, - "license": "MIT", "dependencies": { - "babel-runtime": "^6.22.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", + "node_modules/http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==", "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", "dev": true, - "license": "MIT", "dependencies": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "@types/node": "^10.0.3" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, - "license": "MIT", "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, - "license": "MIT", "dependencies": { - "babel-runtime": "^6.22.0" + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "engines": { + "node": ">=8.12.0" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", + "node_modules/husky": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.5.tgz", + "integrity": "sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==", "dev": true, - "license": "MIT", + "hasInstallScript": true, "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "compare-versions": "^3.6.0", + "cosmiconfig": "^6.0.0", + "find-versions": "^3.2.0", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^4.2.0", + "please-upgrade-node": "^3.2.0", + "slash": "^3.0.0", + "which-pm-runs": "^1.0.0" + }, + "bin": { + "husky-run": "bin/run.js", + "husky-upgrade": "lib/upgrader/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/husky" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-literals": { - "version": "6.22.0", + "node_modules/husky/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { - "babel-runtime": "^6.22.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", + "node_modules/husky/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", + "node_modules/husky/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } + "node_modules/husky/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", + "node_modules/husky/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", + "node_modules/husky/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "license": "MIT", "dependencies": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-spread": { - "version": "6.22.0", + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" + "engines": { + "node": ">= 4" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "dependencies": { - "babel-runtime": "^6.22.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", + "node_modules/imul": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", + "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "license": "MIT", "dependencies": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-regenerator": { - "version": "6.26.0", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-transform": "^0.10.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/babel-plugin-transform-strict-mode": { - "version": "6.24.1", + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", "dev": true, - "license": "MIT", "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/ganache-core/node_modules/babel-preset-env": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - } - }, - "node_modules/ganache-core/node_modules/babel-preset-env/node_modules/semver": { - "version": "5.7.1", + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "peer": true, + "engines": { + "node": ">= 0.10" } }, - "node_modules/ganache-core/node_modules/babel-register": { - "version": "6.26.0", + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", "dev": true, - "license": "MIT", "dependencies": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" + "fp-ts": "^1.0.0" } }, - "node_modules/ganache-core/node_modules/babel-register/node_modules/source-map-support": { - "version": "0.4.18", + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "source-map": "^0.5.6" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-runtime": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, - "node_modules/ganache-core/node_modules/babel-template": { - "version": "6.26.0", + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, - "license": "MIT", "dependencies": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-traverse": { - "version": "6.26.0", + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "license": "MIT", "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/babel-traverse/node_modules/debug": { - "version": "2.6.9", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/babel-traverse/node_modules/globals": { - "version": "9.18.0", - "dev": true, - "license": "MIT", + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/babel-traverse/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/babel-types": { - "version": "6.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "node_modules/ganache-core/node_modules/babel-types/node_modules/to-fast-properties": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/babelify": { - "version": "7.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-core": "^6.0.14", - "object-assign": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/babylon": { - "version": "6.18.0", - "dev": true, - "license": "MIT", - "bin": { - "babylon": "bin/babylon.js" - } - }, - "node_modules/ganache-core/node_modules/backoff": { - "version": "2.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "precond": "0.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/balanced-match": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/base": { - "version": "0.11.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/base-x": { - "version": "3.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ganache-core/node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/base64-js": { - "version": "1.5.1", + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true, "funding": [ { @@ -7792,28157 +7448,9247 @@ "url": "https://feross.org/support" } ], - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "dev": true, - "license": "Unlicense" - }, - "node_modules/ganache-core/node_modules/bignumber.js": { - "version": "9.0.1", + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, - "license": "MIT", - "optional": true, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/bip39": { - "version": "2.5.0", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "license": "ISC", "dependencies": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/blakejs": { - "version": "1.1.0", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/ganache-core/node_modules/bluebird": { - "version": "3.7.2", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", - "optional": true + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/ganache-core/node_modules/bn.js": { - "version": "4.11.9", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=8" + } }, - "node_modules/ganache-core/node_modules/body-parser": { - "version": "1.19.0", + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "ms": "2.0.0" + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/body-parser/node_modules/qs": { - "version": "6.7.0", + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", "dev": true, - "license": "BSD-3-Clause", - "optional": true, "engines": { - "node": ">=0.6" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/ganache-core/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/brorand": { - "version": "1.1.0", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=0.12.0" + } }, - "node_modules/ganache-core/node_modules/browserify-aes": { - "version": "1.2.0", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "license": "MIT", "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/browserify-cipher": { - "version": "1.0.1", + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/browserify-des": { - "version": "1.0.2", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/browserify-rsa": { - "version": "4.1.0", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/browserify-rsa/node_modules/bn.js": { - "version": "5.1.3", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "license": "MIT", - "optional": true + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/ganache-core/node_modules/browserify-sign": { - "version": "4.2.1", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "license": "ISC", - "optional": true, "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/browserify-sign/node_modules/bn.js": { - "version": "5.1.3", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/browserslist": { - "version": "3.2.8", + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" }, - "bin": { - "browserslist": "cli.js" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/bs58": { - "version": "4.0.1", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", - "dependencies": { - "base-x": "^3.0.2" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/bs58check": { - "version": "2.1.2", + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, - "license": "MIT", "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/buffer": { - "version": "5.7.1", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isomorphic-unfetch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", + "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "node-fetch": "^2.6.1", + "unfetch": "^4.2.0" } }, - "node_modules/ganache-core/node_modules/buffer-from": { - "version": "1.1.1", - "dev": true, - "license": "MIT" + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true }, - "node_modules/ganache-core/node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "dev": true, - "license": "MIT", - "optional": true + "node_modules/jest-docblock": { + "version": "21.2.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", + "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", + "dev": true }, - "node_modules/ganache-core/node_modules/buffer-xor": { - "version": "1.0.3", - "dev": true, - "license": "MIT" + "node_modules/js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/bufferutil": { - "version": "4.0.3", + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "hasInstallScript": true, - "license": "MIT", "dependencies": { - "node-gyp-build": "^4.2.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/ganache-core/node_modules/bytes": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.8" - } + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true }, - "node_modules/ganache-core/node_modules/bytewise": { - "version": "1.1.0", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "license": "MIT", - "dependencies": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/ganache-core/node_modules/bytewise-core": { - "version": "1.2.3", + "node_modules/jsonschema": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", "dev": true, - "license": "MIT", - "dependencies": { - "typewise-core": "^1.2" + "peer": true, + "engines": { + "node": "*" } }, - "node_modules/ganache-core/node_modules/cache-base": { - "version": "1.0.1", + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, - "license": "MIT", "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.6.0" } }, - "node_modules/ganache-core/node_modules/cacheable-request": { - "version": "6.1.0", + "node_modules/keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", "dev": true, - "license": "MIT", - "optional": true, + "hasInstallScript": true, "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">=8" + "node": ">=10.0.0" } }, - "node_modules/ganache-core/node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, "engines": { - "node": ">=8" - } - }, - "node_modules/ganache-core/node_modules/cachedown": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "^2.4.1", - "lru-cache": "^3.2.0" - } - }, - "node_modules/ganache-core/node_modules/cachedown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/cachedown/node_modules/lru-cache": { - "version": "3.2.0", + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", "dev": true, - "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.1" + "optionalDependencies": { + "graceful-fs": "^4.1.9" } }, - "node_modules/ganache-core/node_modules/call-bind": { - "version": "1.0.2", + "node_modules/level": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", + "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "browser-level": "^1.0.1", + "classic-level": "^1.2.0" + }, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/level" } }, - "node_modules/ganache-core/node_modules/caniuse-lite": { - "version": "1.0.30001174", - "dev": true, - "license": "CC-BY-4.0" - }, - "node_modules/ganache-core/node_modules/caseless": { - "version": "0.12.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/ganache-core/node_modules/chalk": { - "version": "2.4.2", + "node_modules/level-supports": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/ganache-core/node_modules/checkpoint-store": { - "version": "1.1.0", + "node_modules/level-transcoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", "dev": true, - "license": "ISC", "dependencies": { - "functional-red-black-tree": "^1.0.1" + "buffer": "^6.0.3", + "module-error": "^1.0.1" + }, + "engines": { + "node": ">=12" } }, - "node_modules/ganache-core/node_modules/chownr": { - "version": "1.1.4", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/ganache-core/node_modules/ci-info": { - "version": "2.0.0", + "node_modules/level-transcoder/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/cids": { - "version": "0.7.5", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" + "node": ">= 0.8.0" } }, - "node_modules/ganache-core/node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/cipher-base": { - "version": "1.0.4", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } + "peer": true }, - "node_modules/ganache-core/node_modules/class-is": { - "version": "1.1.0", + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true, - "license": "MIT", - "optional": true + "peer": true }, - "node_modules/ganache-core/node_modules/class-utils": { - "version": "0.3.6", + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { - "is-descriptor": "^0.1.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { - "kind-of": "^3.0.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { - "is-buffer": "^1.1.5" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=7.0.0" } }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT" + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { - "is-buffer": "^1.1.5" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", + "node_modules/loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" + "get-func-name": "^2.0.0" } }, - "node_modules/ganache-core/node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "yallist": "^3.0.2" } }, - "node_modules/ganache-core/node_modules/clone": { - "version": "2.1.2", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true + }, + "node_modules/match-all": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", + "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", + "dev": true + }, + "node_modules/mcl-wasm": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.8" + "node": ">=8.9.0" } }, - "node_modules/ganache-core/node_modules/clone-response": { - "version": "1.0.2", + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "mimic-response": "^1.0.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/ganache-core/node_modules/collection-visit": { + "node_modules/memory-level": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", + "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", "dev": true, - "license": "MIT", "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "abstract-level": "^1.0.0", + "functional-red-black-tree": "^1.0.1", + "module-error": "^1.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "node": ">=12" } }, - "node_modules/ganache-core/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/combined-stream": { - "version": "1.0.8", + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10.0" } }, - "node_modules/ganache-core/node_modules/component-emitter": { - "version": "1.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, - "node_modules/ganache-core/node_modules/concat-stream": { - "version": "1.6.2", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "engines": [ - "node >= 0.8" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "peer": true, + "engines": { + "node": ">= 8" } }, - "node_modules/ganache-core/node_modules/content-disposition": { - "version": "0.5.3", + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, "dependencies": { - "safe-buffer": "5.1.2" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ganache-core/node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/content-hash": { - "version": "2.5.2", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" + "node": ">=8.6" } }, - "node_modules/ganache-core/node_modules/content-type": { - "version": "1.0.4", + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "license": "MIT", - "optional": true, "engines": { "node": ">= 0.6" } }, - "node_modules/ganache-core/node_modules/convert-source-map": { - "version": "1.7.0", + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, - "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.1" + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/ganache-core/node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/cookie": { - "version": "0.4.0", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "MIT", - "optional": true, "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/cookie-signature": { - "version": "1.0.6", - "dev": true, - "license": "MIT", - "optional": true + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, - "node_modules/ganache-core/node_modules/cookiejar": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "optional": true + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true }, - "node_modules/ganache-core/node_modules/copy-descriptor": { - "version": "0.1.1", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/ganache-core/node_modules/core-js": { - "version": "2.6.12", - "dev": true, - "hasInstallScript": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/core-js-pure": { - "version": "3.8.2", + "node_modules/minimist": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true, - "hasInstallScript": true, - "license": "MIT", "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/core-util-is": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/cors": { - "version": "2.8.5", + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "object-assign": "^4", - "vary": "^1" + "minimist": "^1.2.6" }, - "engines": { - "node": ">= 0.10" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/ganache-core/node_modules/create-ecdh": { - "version": "4.0.4", + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" + "obliterator": "^2.0.0" } }, - "node_modules/ganache-core/node_modules/create-hash": { - "version": "1.2.0", + "node_modules/mocha": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", + "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "dev": true, - "license": "MIT", "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, - "node_modules/ganache-core/node_modules/create-hmac": { - "version": "1.1.7", + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/cross-fetch": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - } + "node_modules/mocha/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "node_modules/ganache-core/node_modules/crypto-browserify": { - "version": "3.12.0", + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" + "balanced-match": "^1.0.0" } }, - "node_modules/ganache-core/node_modules/d": { - "version": "1.0.1", + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/dashdash": { - "version": "1.14.1", + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=0.10" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/debug": { - "version": "3.2.6", + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/decode-uri-component": { - "version": "0.2.0", + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/ganache-core/node_modules/decompress-response": { - "version": "3.3.0", + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "mimic-response": "^1.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/deep-equal": { - "version": "1.1.1", + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, - "license": "MIT", "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "brace-expansion": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/defer-to-connect": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "optional": true + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "node_modules/ganache-core/node_modules/deferred-leveldown": { - "version": "4.0.2", + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { - "abstract-leveldown": "~5.0.0", - "inherits": "^2.0.3" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/deferred-leveldown/node_modules/abstract-leveldown": { + "node_modules/mocha/node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { - "xtend": "~4.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/define-properties": { - "version": "1.1.3", + "node_modules/mocha/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", - "dependencies": { - "object-keys": "^1.0.12" - }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/define-property": { - "version": "2.0.2", + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/ganache-core/node_modules/defined": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/delayed-stream": { - "version": "1.0.0", + "node_modules/module-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/depd": { - "version": "1.1.2", + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, - "license": "MIT", - "optional": true, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/des.js": { - "version": "1.0.1", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multimatch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/destroy": { - "version": "1.0.4", + "node_modules/murmur-128": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", + "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", "dev": true, - "license": "MIT", - "optional": true + "dependencies": { + "encode-utf8": "^1.0.2", + "fmix": "^0.1.0", + "imul": "^1.0.0" + } }, - "node_modules/ganache-core/node_modules/detect-indent": { - "version": "4.0.0", + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, - "license": "MIT", - "dependencies": { - "repeating": "^2.0.0" + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/ganache-core/node_modules/diffie-hellman": { - "version": "5.0.3", + "node_modules/napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "peer": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/dom-walk": { - "version": "0.1.2", + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", "dev": true }, - "node_modules/ganache-core/node_modules/dotignore": { - "version": "0.1.2", + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "minimatch": "^3.0.4" - }, - "bin": { - "ignored": "bin/ignored" + "lodash": "^4.17.21" } }, - "node_modules/ganache-core/node_modules/duplexer3": { - "version": "0.1.4", + "node_modules/node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", "dev": true, - "license": "BSD-3-Clause", - "optional": true + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } }, - "node_modules/ganache-core/node_modules/ecc-jsbn": { - "version": "0.1.2", + "node_modules/node-environment-flags/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, - "license": "MIT", "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/ganache-core/node_modules/ee-first": { - "version": "1.1.1", + "node_modules/node-gyp-build": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", "dev": true, - "license": "MIT", - "optional": true + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } }, - "node_modules/ganache-core/node_modules/electron-to-chromium": { - "version": "1.3.636", + "node_modules/nofilter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", + "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", "dev": true, - "license": "ISC" + "engines": { + "node": ">=8" + } }, - "node_modules/ganache-core/node_modules/elliptic": { - "version": "6.5.3", + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" } }, - "node_modules/ganache-core/node_modules/encodeurl": { - "version": "1.0.2", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "license": "MIT", - "optional": true, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/encoding": { - "version": "0.1.13", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "license": "MIT", "dependencies": { - "iconv-lite": "^0.6.2" + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/encoding-down": { - "version": "5.0.4", + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "abstract-leveldown": "^5.0.0", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "xtend": "^4.0.1" + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" }, "engines": { - "node": ">=6" + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/ganache-core/node_modules/encoding-down/node_modules/abstract-leveldown": { - "version": "5.0.0", + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true, + "peer": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/ganache-core/node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.2", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/end-of-stream": { - "version": "1.4.4", + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/errno": { - "version": "0.1.8", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" + "engines": { + "node": ">= 0.4" } }, - "node_modules/ganache-core/node_modules/es-abstract": { - "version": "1.18.0-next.1", + "node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, - "license": "MIT", "dependencies": { - "es-to-primitive": "^1.2.1", + "define-properties": "^1.1.2", "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/es-to-primitive": { - "version": "1.2.1", + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", + "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", "dev": true, - "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "array.prototype.reduce": "^1.0.5", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/es5-ext": { - "version": "0.10.53", - "dev": true, - "license": "ISC", - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/es6-iterator": { - "version": "2.0.3", + "node_modules/oboe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", + "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "http-https": "^1.0.0" } }, - "node_modules/ganache-core/node_modules/es6-symbol": { - "version": "3.1.3", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "ISC", "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "wrappy": "1" } }, - "node_modules/ganache-core/node_modules/escape-html": { - "version": "1.0.3", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, "engines": { - "node": ">=0.8.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/esutils": { + "node_modules/opencollective-postinstall": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" + "bin": { + "opencollective-postinstall": "index.js" } }, - "node_modules/ganache-core/node_modules/etag": { - "version": "1.8.1", + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8.0" } }, - "node_modules/ganache-core/node_modules/eth-block-tracker": { - "version": "3.0.1", + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", "dev": true, - "license": "MIT", - "dependencies": { - "eth-query": "^2.1.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.3", - "ethjs-util": "^0.1.3", - "json-rpc-engine": "^3.6.0", - "pify": "^2.3.0", - "tape": "^4.6.3" + "peer": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/ethereumjs-tx": { - "version": "1.3.7", + "node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/ethereumjs-util": { - "version": "5.2.1", + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/eth-block-tracker/node_modules/pify": { - "version": "2.3.0", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, - "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/eth-ens-namehash": { - "version": "2.0.8", + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-infura": { - "version": "3.2.1", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "ISC", "dependencies": { - "cross-fetch": "^2.1.1", - "eth-json-rpc-middleware": "^1.5.0", - "json-rpc-engine": "^3.4.0", - "json-rpc-error": "^2.0.0" + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware": { - "version": "1.6.0", + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true + }, + "node_modules/parse-code-context": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-code-context/-/parse-code-context-1.0.0.tgz", + "integrity": "sha512-OZQaqKaQnR21iqhlnPfVisFjBWjhnMl5J9MgbP8xC+EwoVqbXrq78lp+9Zb3ahmLzrIX5Us/qbvBnaS3hkH6OA==", "dev": true, - "license": "ISC", - "dependencies": { - "async": "^2.5.0", - "eth-query": "^2.1.2", - "eth-tx-summary": "^3.1.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.1.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^3.6.0", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "tape": "^4.6.3" + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/abstract-leveldown": { - "version": "2.6.3", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "license": "MIT", "dependencies": { - "xtend": "~4.0.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/deferred-leveldown": { - "version": "1.2.2", + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~2.6.0" + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-account": { - "version": "2.0.5", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block": { - "version": "1.7.1", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block/node_modules/ethereum-common": { - "version": "0.2.0", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=8" + } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-tx": { - "version": "1.3.7", + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "license": "MPL-2.0", - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" + "peer": true, + "engines": { + "node": "*" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-util": { - "version": "5.2.1", + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "bn.js": "^4.11.0", "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm": { - "version": "2.6.0", + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-errors": { - "version": "1.0.5", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { - "errno": "~0.1.1" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-iterator-stream": { - "version": "1.3.1", + "node_modules/pkg-dir/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws": { - "version": "0.0.0", + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, - "license": "MIT", "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "semver-compare": "^1.0.0" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "peer": true, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", + "node_modules/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", "dev": true, - "dependencies": { - "object-keys": "~0.4.0" + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=0.4" + "node": ">=10.13.0" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/levelup": { - "version": "1.3.9", + "node_modules/prettier-plugin-solidity": { + "version": "1.0.0-alpha.53", + "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-alpha.53.tgz", + "integrity": "sha512-DZSJ6U2ZwPeSvbtA/sYn+z+w4lEWNpdU47EmjlNtYEYS+SQWieRtaSPm3EH3DyYMQZvfcDePOOxP7vHwfpNIYQ==", "dev": true, - "license": "MIT", "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" + "@solidity-parser/parser": "^0.6.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" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT" + "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.6.2.tgz", + "integrity": "sha512-kUVUvrqttndeprLoXjI5arWHeiP3uh4XODAKbG+ZaWHCVQeelxCbnXBeWxZ2BPHdXgH0xR9dU1b916JhDhbgAA==", + "dev": true }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/memdown": { - "version": "1.4.1", + "node_modules/prettier-plugin-solidity/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", - "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" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", + "node_modules/prettier-plugin-solidity/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", "dependencies": { - "xtend": "~4.0.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/merkle-patricia-tree": { - "version": "2.3.2", + "node_modules/prettier-plugin-solidity/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", + "lru-cache": "^6.0.0" + }, "bin": { - "semver": "bin/semver" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/eth-json-rpc-middleware/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT" + "node_modules/prettier-plugin-solidity/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "node_modules/ganache-core/node_modules/eth-lib": { - "version": "0.1.29", + "node_modules/pretty-quick": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.1.tgz", + "integrity": "sha512-ZYLGiMoV2jcaas3vTJrLvKAYsxDoXQBUn8OSTxkl67Fyov9lyXivJTl0+2WVh+y6EovGcw7Lm5ThYpH+Sh3XxQ==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" + "chalk": "^3.0.0", + "execa": "^4.0.0", + "find-up": "^4.1.0", + "ignore": "^5.1.4", + "mri": "^1.1.5", + "multimatch": "^4.0.0" + }, + "bin": { + "pretty-quick": "bin/pretty-quick.js" + }, + "engines": { + "node": ">=10.13" + }, + "peerDependencies": { + "prettier": ">=2.0.0" } }, - "node_modules/ganache-core/node_modules/eth-query": { - "version": "2.1.2", + "node_modules/pretty-quick/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "ISC", "dependencies": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ganache-core/node_modules/eth-sig-util": { + "node_modules/pretty-quick/node_modules/chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "license": "ISC", "dependencies": { - "buffer": "^5.2.1", - "elliptic": "^6.4.0", - "ethereumjs-abi": "0.6.5", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.0", - "tweetnacl-util": "^0.15.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-abi": { - "version": "0.6.5", + "node_modules/pretty-quick/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^4.3.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "4.5.1", + "node_modules/pretty-quick/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/pretty-quick/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "bn.js": "^4.8.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-sig-util/node_modules/ethereumjs-util": { - "version": "5.2.1", + "node_modules/pretty-quick/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary": { - "version": "3.2.4", + "node_modules/pretty-quick/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "ISC", "dependencies": { - "async": "^2.1.2", - "clone": "^2.0.0", - "concat-stream": "^1.5.1", - "end-of-stream": "^1.1.0", - "eth-query": "^2.0.2", - "ethereumjs-block": "^1.4.1", - "ethereumjs-tx": "^1.1.1", - "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "^2.6.0", - "through2": "^2.0.3" + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/abstract-leveldown": { - "version": "2.6.3", + "node_modules/pretty-quick/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { - "xtend": "~4.0.0" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/deferred-leveldown": { - "version": "1.2.2", + "node_modules/pretty-quick/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { - "abstract-leveldown": "~2.6.0" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-account": { - "version": "2.0.5", + "node_modules/pretty-quick/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-block": { - "version": "1.7.1", + "node_modules/pretty-quick/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-block/node_modules/ethereum-common": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-tx": { - "version": "1.3.7", + "node_modules/pretty-quick/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm": { - "version": "2.6.0", + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" + "asap": "~2.0.6" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-errors": { - "version": "1.0.5", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, - "license": "MIT", - "dependencies": { - "errno": "~0.1.1" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-iterator-stream": { - "version": "1.3.1", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" + "safe-buffer": "^5.1.0" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, - "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws": { - "version": "0.0.0", + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, - "license": "MIT", "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, + "peer": true, "dependencies": { - "object-keys": "~0.4.0" + "resolve": "^1.1.6" }, "engines": { - "node": ">=0.4" + "node": ">= 0.10" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/levelup": { - "version": "1.3.9", + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/memdown": { - "version": "1.4.1", + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true, - "license": "MIT", - "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" + "peer": true, + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dev": true, - "license": "MIT", "dependencies": { - "xtend": "~4.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/merkle-patricia-tree": { - "version": "2.3.2", + "node_modules/req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "req-from": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/eth-tx-summary/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethashjs": { - "version": "0.0.8", + "node_modules/req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "async": "^2.1.2", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.0.2", - "miller-rabin": "^4.0.0" + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/ethashjs/node_modules/bn.js": { - "version": "5.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethashjs/node_modules/buffer-xor": { - "version": "2.0.2", + "node_modules/req-from/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.1" + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/ethashjs/node_modules/ethereumjs-util": { - "version": "7.0.7", + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, - "license": "MPL-2.0", "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.4" + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" }, "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereum-bloom-filters": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "js-sha3": "^0.8.0" + "node": ">= 6" } }, - "node_modules/ganache-core/node_modules/ethereum-bloom-filters/node_modules/js-sha3": { - "version": "0.8.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/ethereum-common": { - "version": "0.0.18", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereum-cryptography": { - "version": "0.1.3", + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", "dev": true, - "license": "MIT", "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" } }, - "node_modules/ganache-core/node_modules/ethereumjs-abi": { - "version": "0.6.8", + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", "dev": true, - "license": "MIT", "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" } }, - "node_modules/ganache-core/node_modules/ethereumjs-account": { - "version": "3.0.0", + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "ethereumjs-util": "^6.0.0", - "rlp": "^2.2.1", - "safe-buffer": "^5.1.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block": { - "version": "2.2.2", + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" + "engines": { + "node": ">=0.6" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/abstract-leveldown": { - "version": "2.6.3", + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" + "bin": { + "uuid": "bin/uuid" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/deferred-leveldown": { - "version": "1.2.2", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~2.6.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-errors": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "errno": "~0.1.1" - } + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-iterator-stream": { - "version": "1.3.1", + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, - "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws": { - "version": "0.0.0", + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "engines": { + "node": ">= 4" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "peer": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "dependencies": { - "object-keys": "~0.4.0" + "glob": "^7.1.3" }, - "engines": { - "node": ">=0.4" + "bin": { + "rimraf": "bin.js" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/levelup": { - "version": "1.3.9", + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, - "license": "MIT", "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/memdown": { - "version": "1.4.1", + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", "dev": true, - "license": "MIT", "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" + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, "dependencies": { - "xtend": "~4.0.0" + "queue-microtask": "^1.2.2" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/merkle-patricia-tree": { - "version": "2.3.2", + "node_modules/run-parallel-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", "dev": true, - "license": "MPL-2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" + "queue-microtask": "^1.2.2" } }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" + "node_modules/rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", + "dev": true }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/semver": { - "version": "5.4.1", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-block/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/ganache-core/node_modules/ethereumjs-blockchain": { - "version": "4.0.4", + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "async": "^2.6.1", - "ethashjs": "~0.0.7", - "ethereumjs-block": "~2.2.2", - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.1.0", - "flow-stoplight": "^1.0.0", - "level-mem": "^3.0.1", - "lru-cache": "^5.1.1", - "rlp": "^2.2.2", - "semaphore": "^1.1.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/ethereumjs-common": { - "version": "1.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-tx": { + "node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, - "node_modules/ganache-core/node_modules/ethereumjs-util": { - "version": "6.2.1", + "node_modules/sc-istanbul": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", + "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", "dev": true, - "license": "MPL-2.0", + "peer": true, "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm": { - "version": "4.2.0", + "node_modules/sc-istanbul/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "core-js-pure": "^3.0.1", - "ethereumjs-account": "^3.0.0", - "ethereumjs-block": "^2.2.2", - "ethereumjs-blockchain": "^4.0.3", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.2", - "ethereumjs-util": "^6.2.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1", - "util.promisify": "^1.0.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/abstract-leveldown": { - "version": "2.6.3", + "node_modules/sc-istanbul/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/deferred-leveldown": { - "version": "1.2.2", + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "abstract-leveldown": "~2.6.0" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/isarray": { - "version": "0.0.1", + "node_modules/sc-istanbul/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", "dev": true, - "license": "MIT" + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-codec": { - "version": "7.0.1", + "node_modules/sc-istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", "dev": true, - "license": "MIT" + "peer": true }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-errors": { - "version": "1.0.5", + "node_modules/sc-istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "errno": "~0.1.1" + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-iterator-stream": { + "node_modules/sc-istanbul/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws": { - "version": "0.0.0", + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", "dev": true, - "license": "MIT", + "hasInstallScript": true, "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, + "node_modules/semver-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", "dev": true, - "dependencies": { - "object-keys": "~0.4.0" - }, "engines": { - "node": ">=0.4" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/levelup": { - "version": "1.3.9", + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, - "license": "MIT", "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" + "randombytes": "^2.1.0" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT" + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/memdown": { - "version": "1.4.1", + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, - "license": "MIT", "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" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", + "node_modules/sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", "dev": true, - "license": "MIT", "dependencies": { - "xtend": "~4.0.0" + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" + }, + "engines": { + "node": "*" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree": { - "version": "2.3.2", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT" + "engines": { + "node": ">=8" + } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, - "license": "MPL-2.0", + "peer": true, "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/object-keys": { - "version": "0.4.0", + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT" + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/ethereumjs-wallet": { - "version": "0.6.5", + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "aes-js": "^3.1.1", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^6.0.0", - "randombytes": "^2.0.6", - "safe-buffer": "^5.1.2", - "scryptsy": "^1.2.1", - "utf8": "^3.0.0", - "uuid": "^3.3.2" + "engines": { + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/ethjs-unit": { - "version": "0.1.6", + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/ganache-core/node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", - "optional": true + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "node_modules/ganache-core/node_modules/ethjs-util": { - "version": "0.1.6", + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "node": ">=7.0.0" } }, - "node_modules/ganache-core/node_modules/eventemitter3": { - "version": "4.0.4", + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT", - "optional": true + "peer": true }, - "node_modules/ganache-core/node_modules/events": { - "version": "3.2.0", + "node_modules/solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", "dev": true, - "license": "MIT", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solcjs" + }, "engines": { - "node": ">=0.8.x" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/evp_bytestokey": { - "version": "1.0.3", + "node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", "dev": true, - "license": "MIT", "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" } }, - "node_modules/ganache-core/node_modules/expand-brackets": { - "version": "2.1.4", + "node_modules/solc/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", + "node_modules/solc/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "bin": { + "semver": "bin/semver" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", + "node_modules/solidity-coverage": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.2.tgz", + "integrity": "sha512-cv2bWb7lOXPE9/SSleDO6czkFiMHgP4NXPj+iW9W7iEKLBk7Cj0AGBiNmGX3V1totl9wjPrT0gHmABZKZt65rQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-descriptor": "^0.1.0" + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.14.1", + "chalk": "^2.4.2", + "death": "^1.1.0", + "detect-port": "^1.3.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.15", + "mocha": "7.1.2", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "solidity-coverage": "plugins/bin.js" + }, + "peerDependencies": { + "hardhat": "^2.11.0" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", + "node_modules/solidity-coverage/node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", + "node_modules/solidity-coverage/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", + "node_modules/solidity-coverage/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", + "node_modules/solidity-coverage/node_modules/chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "kind-of": "^3.0.2" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.1" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", + "node_modules/solidity-coverage/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", + "node_modules/solidity-coverage/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" + "ms": "^2.1.1" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", + "node_modules/solidity-coverage/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", + "node_modules/solidity-coverage/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true, - "license": "MIT", + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.3.1" } }, - "node_modules/ganache-core/node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", + "node_modules/solidity-coverage/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true, - "license": "MIT" + "peer": true }, - "node_modules/ganache-core/node_modules/express": { - "version": "4.17.1", + "node_modules/solidity-coverage/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "locate-path": "^3.0.0" }, "engines": { - "node": ">= 0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/express/node_modules/debug": { - "version": "2.6.9", + "node_modules/solidity-coverage/node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, "dependencies": { - "ms": "2.0.0" + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" } }, - "node_modules/ganache-core/node_modules/express/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/express/node_modules/qs": { - "version": "6.7.0", + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, - "license": "BSD-3-Clause", - "optional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, "engines": { - "node": ">=0.6" + "node": ">=6 <7 || >=8" } }, - "node_modules/ganache-core/node_modules/express/node_modules/safe-buffer": { - "version": "5.1.2", + "node_modules/solidity-coverage/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", "dev": true, - "license": "MIT", - "optional": true + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "node_modules/ganache-core/node_modules/ext": { - "version": "1.4.0", + "node_modules/solidity-coverage/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, - "license": "ISC", + "peer": true, "dependencies": { - "type": "^2.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, - "node_modules/ganache-core/node_modules/ext/node_modules/type": { - "version": "2.1.0", + "node_modules/solidity-coverage/node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", "dev": true, - "license": "ISC" + "peer": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/ganache-core/node_modules/extend": { - "version": "3.0.2", + "node_modules/solidity-coverage/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, - "license": "MIT" + "peer": true, + "engines": { + "node": ">=4" + } }, - "node_modules/ganache-core/node_modules/extend-shallow": { - "version": "3.0.2", + "node_modules/solidity-coverage/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/ganache-core/node_modules/extglob": { - "version": "2.0.4", + "node_modules/solidity-coverage/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", + "node_modules/solidity-coverage/node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-descriptor": "^1.0.0" + "chalk": "^2.4.2" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", + "node_modules/solidity-coverage/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-extendable": "^0.1.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", + "node_modules/solidity-coverage/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "license": "MIT", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/ganache-core/node_modules/extsprintf": { - "version": "1.3.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/fake-merkle-patricia-tree": { - "version": "1.0.1", + "node_modules/solidity-coverage/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, - "license": "ISC", + "peer": true, "dependencies": { - "checkpoint-store": "^1.1.0" + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/ganache-core/node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/fetch-ponyfill": { - "version": "4.1.0", + "node_modules/solidity-coverage/node_modules/mocha": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.2.tgz", + "integrity": "sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "node-fetch": "~1.7.1" - } - }, - "node_modules/ganache-core/node_modules/fetch-ponyfill/node_modules/is-stream": { - "version": "1.1.0", - "dev": true, - "license": "MIT", + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, - "node_modules/ganache-core/node_modules/fetch-ponyfill/node_modules/node-fetch": { - "version": "1.7.3", + "node_modules/solidity-coverage/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true, - "license": "MIT", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } + "peer": true }, - "node_modules/ganache-core/node_modules/finalhandler": { - "version": "1.1.2", + "node_modules/solidity-coverage/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", + "node_modules/solidity-coverage/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, "dependencies": { - "ms": "2.0.0" + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root": { - "version": "1.2.1", + "node_modules/solidity-coverage/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "fs-extra": "^4.0.3", - "micromatch": "^3.1.4" + "peer": true, + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/braces": { - "version": "2.3.2", + "node_modules/solidity-coverage/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", + "node_modules/solidity-coverage/node_modules/readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-extendable": "^0.1.0" + "picomatch": "^2.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fill-range": { - "version": "4.0.0", + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", + "node_modules/solidity-coverage/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-extendable": "^0.1.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fs-extra": { - "version": "4.0.3", + "node_modules/solidity-coverage/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-extendable": { - "version": "0.1.1", + "node_modules/solidity-coverage/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, - "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-number": { - "version": "3.0.0", + "node_modules/solidity-coverage/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "kind-of": "^3.0.2" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", + "node_modules/solidity-coverage/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-buffer": "^1.1.5" + "isexe": "^2.0.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "which": "bin/which" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/micromatch": { - "version": "3.1.10", + "node_modules/solidity-coverage/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/to-regex-range": { - "version": "2.1.1", + "node_modules/solidity-coverage/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/flow-stoplight": { - "version": "1.0.0", + "node_modules/solidity-coverage/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "ISC" + "peer": true }, - "node_modules/ganache-core/node_modules/for-each": { - "version": "0.3.3", + "node_modules/solidity-coverage/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/ganache-core/node_modules/for-in": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "cliui": "^5.0.0", + "find-up": "^3.0.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": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, - "node_modules/ganache-core/node_modules/forever-agent": { - "version": "0.6.1", + "node_modules/solidity-coverage/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" + "peer": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, - "node_modules/ganache-core/node_modules/form-data": { - "version": "2.3.3", + "node_modules/solidity-coverage/node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" }, "engines": { - "node": ">= 0.12" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/forwarded": { - "version": "0.1.2", + "node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", "dev": true, - "license": "MIT", "optional": true, + "peer": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, "engines": { - "node": ">= 0.6" + "node": ">=0.8.0" } }, - "node_modules/ganache-core/node_modules/fragment-cache": { - "version": "0.2.1", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "license": "MIT", "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/ganache-core/node_modules/fresh": { - "version": "0.5.2", + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "MIT", - "optional": true, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/fs-extra": { - "version": "7.0.1", + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "dev": true, - "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/function-bind": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/functional-red-black-tree": { - "version": "1.0.1", - "dev": true, - "license": "MIT" + "node_modules/sshpk/node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true }, - "node_modules/ganache-core/node_modules/get-intrinsic": { - "version": "1.0.2", + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "type-fest": "^0.7.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/get-stream": { - "version": "5.2.0", + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pump": "^3.0.0" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/get-value": { - "version": "2.0.6", + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/ganache-core/node_modules/getpass": { - "version": "0.1.7", + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/glob": { - "version": "7.1.3", + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, "engines": { - "node": "*" + "node": ">=10.0.0" } }, - "node_modules/ganache-core/node_modules/global": { - "version": "4.4.0", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "license": "MIT", "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" + "safe-buffer": "~5.2.0" } }, - "node_modules/ganache-core/node_modules/got": { - "version": "9.6.0", + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } + "peer": true }, - "node_modules/ganache-core/node_modules/got/node_modules/get-stream": { - "version": "4.1.0", + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "pump": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/graceful-fs": { - "version": "4.2.4", - "dev": true, - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/har-schema": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=4" - } + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "node_modules/ganache-core/node_modules/har-validator": { - "version": "5.1.5", + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, - "license": "MIT", "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/has": { - "version": "1.0.3", + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, - "license": "MIT", "dependencies": { - "function-bind": "^1.1.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, - "engines": { - "node": ">= 0.4.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/has-ansi": { - "version": "2.0.0", + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/has-flag": { - "version": "3.0.0", + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" } }, - "node_modules/ganache-core/node_modules/has-symbol-support-x": { - "version": "1.4.2", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", - "optional": true, "engines": { - "node": "*" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/has-symbols": { - "version": "1.0.1", + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "has-flag": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/has-to-string-tag-x": { - "version": "1.4.1", + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "has-symbol-support-x": "^1.4.1" + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" }, "engines": { - "node": "*" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/has-value": { - "version": "1.0.0", + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" } }, - "node_modules/ganache-core/node_modules/has-values": { - "version": "1.0.0", + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/has-values/node_modules/is-buffer": { - "version": "1.1.6", + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, - "license": "MIT" + "peer": true, + "engines": { + "node": ">=8" + } }, - "node_modules/ganache-core/node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", + "node_modules/table/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "is-buffer": "^1.1.5" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ganache-core/node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", "dev": true, - "license": "MIT", "dependencies": { - "is-buffer": "^1.1.5" + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/ganache-core/node_modules/hash-base": { - "version": "3.1.0", + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", "dev": true, - "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=4" + "node": ">= 0.12" } }, - "node_modules/ganache-core/node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, - "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": ">= 6" + "node": ">=0.6.0" } }, - "node_modules/ganache-core/node_modules/hash.js": { - "version": "1.1.7", + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", "dev": true, - "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "tmp": "^0.2.0" } }, - "node_modules/ganache-core/node_modules/heap": { - "version": "0.2.6", - "dev": true + "node_modules/tmp-promise/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/ganache-core/node_modules/hmac-drbg": { - "version": "1.0.1", + "node_modules/tmp-promise/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, - "license": "MIT", "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" } }, - "node_modules/ganache-core/node_modules/home-or-tmp": { - "version": "2.0.0", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" + "is-number": "^7.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0" } }, - "node_modules/ganache-core/node_modules/http-cache-semantics": { - "version": "4.1.0", + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, - "license": "BSD-2-Clause", - "optional": true + "engines": { + "node": ">=0.6" + } }, - "node_modules/ganache-core/node_modules/http-errors": { - "version": "1.7.2", + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "psl": "^1.1.28", + "punycode": "^2.1.1" }, "engines": { - "node": ">= 0.6" + "node": ">=0.8" } }, - "node_modules/ganache-core/node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "dev": true, - "license": "ISC", - "optional": true + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true }, - "node_modules/ganache-core/node_modules/http-https": { - "version": "1.0.0", + "node_modules/ts-command-line-args": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz", + "integrity": "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==", "dev": true, - "license": "ISC", - "optional": true + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } }, - "node_modules/ganache-core/node_modules/http-signature": { - "version": "1.2.0", + "node_modules/ts-command-line-args/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ganache-core/node_modules/iconv-lite": { - "version": "0.4.24", + "node_modules/ts-command-line-args/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ganache-core/node_modules/idna-uts46-hx": { - "version": "2.3.1", + "node_modules/ts-command-line-args/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, "dependencies": { - "punycode": "2.1.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4.0.0" + "node": ">=7.0.0" } }, - "node_modules/ganache-core/node_modules/idna-uts46-hx/node_modules/punycode": { - "version": "2.1.0", + "node_modules/ts-command-line-args/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true + }, + "node_modules/ts-command-line-args/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/ieee754": { - "version": "1.2.1", + "node_modules/ts-command-line-args/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ganache-core/node_modules/immediate": { - "version": "3.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/ganache-core/node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/invariant": { - "version": "2.2.4", - "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/ipaddr.js": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "optional": true, + "has-flag": "^4.0.0" + }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/is-accessor-descriptor": { - "version": "1.0.0", + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "peer": true, + "peerDependencies": { + "typescript": ">=3.7.0" } }, - "node_modules/ganache-core/node_modules/is-arguments": { - "version": "1.1.0", + "node_modules/ts-node": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", + "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.0" + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "typescript": ">=2.7" } }, - "node_modules/ganache-core/node_modules/is-callable": { - "version": "1.2.2", + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.3.1" } }, - "node_modules/ganache-core/node_modules/is-ci": { - "version": "2.0.0", + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tslint": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.2.tgz", + "integrity": "sha512-UyNrLdK3E0fQG/xWNqAFAC5ugtFyPO4JJR1KyyfQAyzR8W0fTRrC91A8Wej4BntFzcvETdCSDa/4PnNYJQLYiA==", + "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", "dev": true, - "license": "MIT", "dependencies": { - "ci-info": "^2.0.0" + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.10.0", + "tsutils": "^2.29.0" }, "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/ganache-core/node_modules/is-data-descriptor": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" + "tslint": "bin/tslint" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/is-date-object": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node": ">=4.8.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" } }, - "node_modules/ganache-core/node_modules/is-descriptor": { - "version": "1.0.2", + "node_modules/tslint-config-prettier": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", + "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "bin": { + "tslint-config-prettier-check": "bin/check.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=4.0.0" } }, - "node_modules/ganache-core/node_modules/is-extendable": { - "version": "1.0.1", + "node_modules/tslint-plugin-prettier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslint-plugin-prettier/-/tslint-plugin-prettier-2.3.0.tgz", + "integrity": "sha512-F9e4K03yc9xuvv+A0v1EmjcnDwpz8SpCD8HzqSDe0eyg34cBinwn9JjmnnRrNAs4HdleRQj7qijp+P/JTxt4vA==", "dev": true, - "license": "MIT", "dependencies": { - "is-plain-object": "^2.0.4" + "eslint-plugin-prettier": "^2.2.0", + "lines-and-columns": "^1.1.6", + "tslib": "^1.7.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 4" + }, + "peerDependencies": { + "prettier": "^1.9.0 || ^2.0.0", + "tslint": "^5.0.0 || ^6.0.0" } }, - "node_modules/ganache-core/node_modules/is-finite": { - "version": "1.1.0", + "node_modules/tslint/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/tslint/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.3.1" } }, - "node_modules/ganache-core/node_modules/is-fn": { - "version": "1.0.0", + "node_modules/tslint/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "bin": { + "semver": "bin/semver" } }, - "node_modules/ganache-core/node_modules/is-function": { - "version": "1.0.2", - "dev": true, - "license": "MIT" + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true }, - "node_modules/ganache-core/node_modules/is-hex-prefixed": { - "version": "1.0.0", + "node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" + "dependencies": { + "tslib": "^1.8.1" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" } }, - "node_modules/ganache-core/node_modules/is-negative-zero": { - "version": "2.0.1", + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "safe-buffer": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "*" } }, - "node_modules/ganache-core/node_modules/is-object": { - "version": "1.0.2", + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", "dev": true, - "license": "MIT", - "optional": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "peer": true }, - "node_modules/ganache-core/node_modules/is-plain-obj": { - "version": "1.1.0", + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/ganache-core/node_modules/is-plain-object": { - "version": "2.0.4", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, + "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/is-regex": { - "version": "1.1.1", + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ganache-core/node_modules/is-retry-allowed": { - "version": "1.2.0", + "node_modules/typechain": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz", + "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" + "peer": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" } }, - "node_modules/ganache-core/node_modules/is-symbol": { - "version": "1.0.3", + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "has-symbols": "^1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 0.4" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ganache-core/node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/is-windows": { - "version": "1.0.2", + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "license": "MIT", + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true }, - "node_modules/ganache-core/node_modules/isexe": { - "version": "2.0.0", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, - "license": "ISC" + "peer": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } }, - "node_modules/ganache-core/node_modules/isobject": { - "version": "3.0.1", + "node_modules/typescript": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", "dev": true, - "license": "MIT", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4.2.0" } }, - "node_modules/ganache-core/node_modules/isstream": { - "version": "0.1.2", + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, - "license": "MIT" + "peer": true, + "engines": { + "node": ">=8" + } }, - "node_modules/ganache-core/node_modules/isurl": { - "version": "1.0.0", + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, - "license": "MIT", "optional": true, - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "peer": true, + "bin": { + "uglifyjs": "bin/uglifyjs" }, "engines": { - "node": ">= 4" + "node": ">=0.8.0" } }, - "node_modules/ganache-core/node_modules/js-sha3": { - "version": "0.5.7", + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, - "license": "MIT", - "optional": true + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/ganache-core/node_modules/js-tokens": { - "version": "4.0.0", + "node_modules/undici": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.12.0.tgz", + "integrity": "sha512-zMLamCG62PGjd9HHMpo05bSLvvwWOZgGeiWlN/vlqu3+lRo3elxktVGEyLMX+IO7c2eflLjcW74AlkhEZm15mg==", "dev": true, - "license": "MIT" + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } }, - "node_modules/ganache-core/node_modules/jsbn": { - "version": "0.1.1", - "dev": true, - "license": "MIT" + "node_modules/unfetch": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", + "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", + "dev": true }, - "node_modules/ganache-core/node_modules/json-buffer": { - "version": "3.0.0", + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "license": "MIT", - "optional": true + "engines": { + "node": ">= 4.0.0" + } }, - "node_modules/ganache-core/node_modules/json-rpc-engine": { - "version": "3.8.0", + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, - "license": "ISC", - "dependencies": { - "async": "^2.0.1", - "babel-preset-env": "^1.7.0", - "babelify": "^7.3.0", - "json-rpc-error": "^2.0.0", - "promise-to-callback": "^1.0.0", - "safe-event-emitter": "^1.0.1" + "engines": { + "node": ">= 0.8" } }, - "node_modules/ganache-core/node_modules/json-rpc-error": { - "version": "2.0.0", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "MIT", "dependencies": { - "inherits": "^2.0.1" + "punycode": "^2.1.0" } }, - "node_modules/ganache-core/node_modules/json-rpc-random-id": { - "version": "1.0.1", + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", "dev": true, - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/json-schema": { - "version": "0.2.3", - "dev": true + "hasInstallScript": true, + "peer": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } }, - "node_modules/ganache-core/node_modules/json-schema-traverse": { - "version": "0.4.1", + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", "dev": true, - "license": "MIT" + "peer": true }, - "node_modules/ganache-core/node_modules/json-stable-stringify": { - "version": "1.0.1", + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "jsonify": "~0.0.0" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" } }, - "node_modules/ganache-core/node_modules/json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "license": "ISC" + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, - "node_modules/ganache-core/node_modules/jsonfile": { - "version": "4.0.0", + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/ganache-core/node_modules/jsonify": { - "version": "0.0.0", - "dev": true, - "license": "Public Domain" - }, - "node_modules/ganache-core/node_modules/jsprim": { - "version": "1.4.1", + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "engines": [ "node >=0.6.0" ], - "license": "MIT", "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "node_modules/ganache-core/node_modules/keccak": { - "version": "3.0.1", + "node_modules/web3-core": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.8.1.tgz", + "integrity": "sha512-LbRZlJH2N6nS3n3Eo9Y++25IvzMY7WvYnp4NM/Ajhh97dAdglYs6rToQ2DbL2RLvTYmTew4O/y9WmOk4nq9COw==", "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", + "peer": true, "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" + "@types/bn.js": "^5.1.0", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.8.1", + "web3-core-method": "1.8.1", + "web3-core-requestmanager": "1.8.1", + "web3-utils": "1.8.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/keyv": { - "version": "3.1.0", + "node_modules/web3-core-helpers": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.1.tgz", + "integrity": "sha512-ClzNO6T1S1gifC+BThw0+GTfcsjLEY8T1qUp6Ly2+w4PntAdNtKahxWKApWJ0l9idqot/fFIDXwO3Euu7I0Xqw==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/ganache-core/node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", + "web3-eth-iban": "1.8.1", + "web3-utils": "1.8.1" + }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/klaw-sync": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.11" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/level-codec": { - "version": "9.0.2", + "node_modules/web3-core-method": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.1.tgz", + "integrity": "sha512-oYGRodktfs86NrnFwaWTbv2S38JnpPslFwSSARwFv4W9cjbGUW3LDeA5MKD/dRY+ssZ5OaekeMsUCLoGhX68yA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "buffer": "^5.6.0" + "@ethersproject/transactions": "^5.6.2", + "web3-core-helpers": "1.8.1", + "web3-core-promievent": "1.8.1", + "web3-core-subscriptions": "1.8.1", + "web3-utils": "1.8.1" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/level-errors": { - "version": "2.0.1", + "node_modules/web3-core-promievent": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.1.tgz", + "integrity": "sha512-9mxqHlgB0MrZI4oUIRFkuoJMNj3E7btjrMv3sMer/Z9rYR1PfoSc1aAokw4rxKIcAh+ylVtd/acaB2HKB7aRPg==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "errno": "~0.1.1" + "eventemitter3": "4.0.4" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/level-iterator-stream": { - "version": "2.0.3", + "node_modules/web3-core-requestmanager": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.1.tgz", + "integrity": "sha512-x+VC2YPPwZ1khvqA6TA69LvfFCOZXsoUVOxmTx/vIN22PrY9KzKhxcE7pBSiGhmab1jtmRYXUbcQSVpAXqL8cw==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.5", - "xtend": "^4.0.0" + "util": "^0.12.0", + "web3-core-helpers": "1.8.1", + "web3-providers-http": "1.8.1", + "web3-providers-ipc": "1.8.1", + "web3-providers-ws": "1.8.1" }, "engines": { - "node": ">=4" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/level-mem": { - "version": "3.0.1", + "node_modules/web3-core-subscriptions": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.1.tgz", + "integrity": "sha512-bmCMq5OeA3E2vZUh8Js1HcJbhwtsE+yeMqGC4oIZB3XsL5SLqyKLB/pU+qUYqQ9o4GdcrFTDPhPg1bgvf7p1Pw==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "level-packager": "~4.0.0", - "memdown": "~3.0.0" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.8.1" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/abstract-leveldown": { - "version": "5.0.0", + "node_modules/web3-core/node_modules/@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" + "@types/node": "*" } }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/ltgt": { - "version": "2.2.1", + "node_modules/web3-core/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", "dev": true, - "license": "MIT" + "peer": true }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/memdown": { - "version": "3.0.0", + "node_modules/web3-eth-iban": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.1.tgz", + "integrity": "sha512-DomoQBfvIdtM08RyMGkMVBOH0vpOIxSSQ+jukWk/EkMLGMWJtXw/K2c2uHAeq3L/VPWNB7zXV2DUEGV/lNE2Dg==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "abstract-leveldown": "~5.0.0", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" + "bn.js": "^5.2.1", + "web3-utils": "1.8.1" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/level-mem/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/level-packager": { - "version": "4.0.1", + "node_modules/web3-providers-http": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.1.tgz", + "integrity": "sha512-1Zyts4O9W/UNEPkp+jyL19Jc3D15S4yp8xuLTjVhcUEAlHo24NDWEKxtZGUuHk4HrKL2gp8OlsDbJ7MM+ESDgg==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "encoding-down": "~5.0.0", - "levelup": "^3.0.0" + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.8.1" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/level-post": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ltgt": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/level-sublevel": { - "version": "6.6.4", - "dev": true, - "license": "MIT", - "dependencies": { - "bytewise": "~1.1.0", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "level-iterator-stream": "^2.0.3", - "ltgt": "~2.1.1", - "pull-defer": "^0.2.2", - "pull-level": "^2.0.3", - "pull-stream": "^3.6.8", - "typewiselite": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/level-ws": { - "version": "1.0.0", + "node_modules/web3-providers-ipc": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.1.tgz", + "integrity": "sha512-nw/W5nclvi+P2z2dYkLWReKLnocStflWqFl+qjtv0xn3MrUTyXMzSF0+61i77+16xFsTgzo4wS/NWIOVkR0EFA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.8", - "xtend": "^4.0.1" + "oboe": "2.1.5", + "web3-core-helpers": "1.8.1" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/levelup": { - "version": "3.1.1", + "node_modules/web3-providers-ws": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.1.tgz", + "integrity": "sha512-TNefIDAMpdx57+YdWpYZ/xdofS0P+FfKaDYXhn24ie/tH9G+AB+UBSOKnjN0KSadcRSCMBwGPRiEmNHPavZdsA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "deferred-leveldown": "~4.0.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~3.0.0", - "xtend": "~4.0.0" + "eventemitter3": "4.0.4", + "web3-core-helpers": "1.8.1", + "websocket": "^1.0.32" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/levelup/node_modules/level-iterator-stream": { - "version": "3.0.1", + "node_modules/web3-utils": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.1.tgz", + "integrity": "sha512-LgnM9p6V7rHHUGfpMZod+NST8cRfGzJ1BTXAyNo7A9cJX9LczBfSRxJp+U/GInYe9mby40t3v22AJdlELibnsQ==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "xtend": "^4.0.0" + "bn.js": "^5.2.1", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/lodash": { - "version": "4.17.20", + "node_modules/web3-utils/node_modules/@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", "dev": true, - "license": "MIT" + "peer": true, + "dependencies": { + "@types/node": "*" + } }, - "node_modules/ganache-core/node_modules/looper": { - "version": "2.0.0", + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, - "license": "MIT" + "peer": true, + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } }, - "node_modules/ganache-core/node_modules/loose-envify": { - "version": "1.4.0", + "node_modules/web3-utils/node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/ganache-core/node_modules/lowercase-keys": { - "version": "1.0.1", + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4.0.0" } }, - "node_modules/ganache-core/node_modules/lru-cache": { - "version": "5.1.1", + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "ISC", + "peer": true, "dependencies": { - "yallist": "^3.0.2" + "ms": "2.0.0" } }, - "node_modules/ganache-core/node_modules/ltgt": { - "version": "2.1.3", + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT" + "peer": true }, - "node_modules/ganache-core/node_modules/map-cache": { - "version": "0.2.2", + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/ganache-core/node_modules/map-visit": { - "version": "1.0.0", + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "MIT", "dependencies": { - "object-visit": "^1.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/ganache-core/node_modules/md5.js": { - "version": "1.3.5", + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, - "license": "MIT", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/media-typer": { - "version": "0.3.0", + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, + "node_modules/which-pm-runs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", "dev": true, - "license": "MIT", - "optional": true, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/merge-descriptors": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree": { - "version": "3.0.0", + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "dev": true, - "license": "MPL-2.0", + "peer": true, "dependencies": { - "async": "^2.6.1", - "ethereumjs-util": "^5.2.0", - "level-mem": "^3.0.1", - "level-ws": "^1.0.0", - "readable-stream": "^3.0.6", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, - "license": "MPL-2.0", "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" + "string-width": "^1.0.2 || 2" } }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/readable-stream": { - "version": "3.6.0", + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/methods": { - "version": "1.1.2", + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true, - "license": "MIT", - "optional": true, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/miller-rabin": { - "version": "4.0.1", + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, - "license": "MIT", "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, - "bin": { - "miller-rabin": "bin/miller-rabin" + "engines": { + "node": ">=4" } }, - "node_modules/ganache-core/node_modules/mime": { - "version": "1.6.0", + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" + "dependencies": { + "ansi-regex": "^3.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/ganache-core/node_modules/mime-db": { - "version": "1.45.0", + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, - "license": "MIT", + "peer": true, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/ganache-core/node_modules/mime-types": { - "version": "2.1.28", + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "peer": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "dev": true, - "license": "MIT", + "peer": true, "dependencies": { - "mime-db": "1.45.0" + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" }, "engines": { - "node": ">= 0.6" + "node": ">=8.0.0" } }, - "node_modules/ganache-core/node_modules/mimic-response": { - "version": "1.0.1", + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", "dev": true, - "license": "MIT", - "optional": true, + "peer": true, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/ganache-core/node_modules/min-document": { - "version": "2.19.0", - "dev": true, - "dependencies": { - "dom-walk": "^0.1.0" - } + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true }, - "node_modules/ganache-core/node_modules/minimalistic-assert": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/minimatch": { - "version": "3.0.4", + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "*" - } - }, - "node_modules/ganache-core/node_modules/minimist": { - "version": "1.2.5", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/minizlib": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/ganache-core/node_modules/minizlib/node_modules/minipass": { - "version": "2.9.0", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/ganache-core/node_modules/mixin-deep": { - "version": "1.3.2", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/mkdirp": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" + "node": ">=8" }, - "bin": { - "mkdirp": "bin/cmd.js" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ganache-core/node_modules/mkdirp-promise": { - "version": "5.0.1", + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "ISC", - "optional": true, "dependencies": { - "mkdirp": "*" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/mock-fs": { - "version": "4.13.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/multibase": { - "version": "0.6.1", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" + "node": ">=7.0.0" } }, - "node_modules/ganache-core/node_modules/multicodec": { - "version": "0.5.7", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "varint": "^5.0.0" - } + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "node_modules/ganache-core/node_modules/multihashes": { - "version": "0.4.21", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/multihashes/node_modules/multibase": { - "version": "0.7.0", + "node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/ganache-core/node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/nanomatch": { - "version": "1.2.13", + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" } }, - "node_modules/ganache-core/node_modules/negotiator": { - "version": "0.6.2", + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "MIT", - "optional": true, "engines": { - "node": ">= 0.6" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/next-tick": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/nice-try": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/node-addon-api": { - "version": "2.0.2", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/node-fetch": { - "version": "2.1.2", + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", "dev": true, - "license": "MIT", + "peer": true, "engines": { - "node": "4.x || >=6.0.0" + "node": ">=0.10.32" } }, - "node_modules/ganache-core/node_modules/node-gyp-build": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, - "node_modules/ganache-core/node_modules/normalize-url": { - "version": "4.5.0", + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, - "license": "MIT", - "optional": true, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/ganache-core/node_modules/number-to-bn": { - "version": "1.7.0", + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", - "optional": true, "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ganache-core/node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/oauth-sign": { - "version": "0.9.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/object-assign": { - "version": "4.1.1", + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, - "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/object-copy": { - "version": "0.1.0", + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "license": "MIT", "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", + } + }, + "dependencies": { + "@aave/core-v3": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@aave/core-v3/-/core-v3-1.16.2.tgz", + "integrity": "sha512-COze5EN2kFVRSkwmpV5+5m5GaRvJWC587/0e6Z5NlTSXZ38CF+SeuKtMXhFgBXk2oDgYbuKwvjuBk+vJMgThYg==", "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" + "requires": { + "@nomiclabs/hardhat-etherscan": "^2.1.7", + "axios-curlirize": "^1.3.7", + "tmp-promise": "^3.0.2" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@nomiclabs/hardhat-etherscan": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz", + "integrity": "sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA==", + "dev": true, + "requires": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^5.0.2", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "node-fetch": "^2.6.0", + "semver": "^6.3.0" + } + } } }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", + "@aave/deploy-v3": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/@aave/deploy-v3/-/deploy-v3-1.50.0.tgz", + "integrity": "sha512-NeAVwcV583oHH0IHLcZUR9nTV05qGOWgONgvuZSo67RNBjpoZUiMEtTt4S0j9Zl9HGtN6yhWg4B5EFVo96NPGQ==", "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "requires": { + "defender-relay-client": "^1.11.1" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "defender-relay-client": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/defender-relay-client/-/defender-relay-client-1.37.0.tgz", + "integrity": "sha512-c2V1AxPmnRC8Gj62cI2WQFJR4GECPoktbiGf/+l37Wxrnh38f4My/o6nZ/tqGkGt4kt8kzfmqciI2lNiUtlPDA==", + "dev": true, + "requires": { + "amazon-cognito-identity-js": "^4.3.3", + "axios": "^0.21.2", + "defender-base-client": "1.37.0", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" + } + } } }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", + "@aave/periphery-v3": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@aave/periphery-v3/-/periphery-v3-1.21.0.tgz", + "integrity": "sha512-imTSAoUX1+WjXD3Jo0jMErFe+KoH2GaH0Q13NrghsdksbZDWjGhM9kTQortZ6Em4jlxyuaS5+3fRWBCxvRp9LQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "requires": { + "@aave/core-v3": "1.16.2" } }, - "node_modules/ganache-core/node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/highlight": "^7.18.6" } }, - "node_modules/ganache-core/node_modules/object-inspect": { - "version": "1.9.0", + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, - "node_modules/ganache-core/node_modules/object-is": { - "version": "1.1.4", + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "optional": true }, - "node_modules/ganache-core/node_modules/object-keys": { - "version": "1.1.1", + "@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/object-visit": { - "version": "1.0.1", + "@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/object.assign": { - "version": "4.1.2", + "@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/object.getownpropertydescriptors": { - "version": "2.1.1", + "@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/object.pick": { - "version": "1.3.0", + "@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@ethersproject/bytes": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/oboe": { - "version": "2.1.4", + "@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", "dev": true, - "license": "BSD", - "optional": true, - "dependencies": { - "http-https": "^1.0.0" + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/on-finished": { - "version": "2.3.0", + "@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" } }, - "node_modules/ganache-core/node_modules/once": { - "version": "1.4.0", + "@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" + "requires": { + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/os-homedir": { - "version": "1.0.2", + "@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "requires": { + "@ethersproject/bignumber": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/os-tmpdir": { - "version": "1.0.2", + "@ethersproject/contracts": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", + "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "requires": { + "@ethersproject/abi": "^5.6.3", + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2" } }, - "node_modules/ganache-core/node_modules/p-cancelable": { - "version": "1.1.0", + "@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" + "requires": { + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/p-timeout": { - "version": "1.2.1", + "@ethersproject/hdnode": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", + "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" } }, - "node_modules/ganache-core/node_modules/p-timeout/node_modules/p-finally": { - "version": "1.0.0", + "@ethersproject/json-wallets": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", + "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4" + "requires": { + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.1", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" } }, - "node_modules/ganache-core/node_modules/parse-asn1": { - "version": "5.1.6", + "@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "requires": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" } }, - "node_modules/ganache-core/node_modules/parse-headers": { - "version": "2.0.3", - "dev": true, - "license": "MIT" + "@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "dev": true }, - "node_modules/ganache-core/node_modules/parseurl": { - "version": "1.3.3", + "@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.8" + "requires": { + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/pascalcase": { - "version": "0.1.1", + "@ethersproject/pbkdf2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", + "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/sha2": "^5.6.1" } }, - "node_modules/ganache-core/node_modules/patch-package": { - "version": "6.2.2", + "@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", "dev": true, - "license": "MIT", - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^1.2.1", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "npm": ">5" + "requires": { + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/cross-spawn": { - "version": "6.0.5", + "@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "dev": true, + "peer": true, + "requires": { + "@ethersproject/abstract-provider": "^5.7.0", + "@ethersproject/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/basex": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/random": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/sha2": "^5.7.0", + "@ethersproject/strings": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", "dev": true, - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/path-key": { - "version": "2.0.1", + "@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/semver": { - "version": "5.7.1", + "@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/shebang-command": { - "version": "1.2.0", + "@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/shebang-regex": { - "version": "1.0.0", + "@ethersproject/solidity": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", + "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", + "@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "requires": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/tmp": { - "version": "0.0.33", + "@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" + "requires": { + "@ethersproject/address": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/which": { - "version": "1.3.1", + "@ethersproject/units": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", + "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "requires": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, - "node_modules/ganache-core/node_modules/path-is-absolute": { - "version": "1.0.1", + "@ethersproject/wallet": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", + "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/hdnode": "^5.6.2", + "@ethersproject/json-wallets": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/wordlists": "^5.6.1" } }, - "node_modules/ganache-core/node_modules/path-parse": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/path-to-regexp": { - "version": "0.1.7", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/pbkdf2": { - "version": "3.1.1", + "@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", "dev": true, - "license": "MIT", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" + "requires": { + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" } }, - "node_modules/ganache-core/node_modules/performance-now": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/posix-character-classes": { - "version": "0.1.1", + "@ethersproject/wordlists": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", + "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "requires": { + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "node_modules/ganache-core/node_modules/precond": { - "version": "0.2.3", + "@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", "dev": true, - "engines": { - "node": ">= 0.6" + "requires": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dev": true, + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + } } }, - "node_modules/ganache-core/node_modules/prepend-http": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4" - } + "@noble/hashes": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", + "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==", + "dev": true }, - "node_modules/ganache-core/node_modules/private": { - "version": "0.1.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } + "@noble/secp256k1": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", + "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/process": { - "version": "0.11.10", + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" + "peer": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "node_modules/ganache-core/node_modules/process-nextick-args": { - "version": "2.0.1", + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT" + "peer": true }, - "node_modules/ganache-core/node_modules/promise-to-callback": { - "version": "1.0.0", + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", - "dependencies": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "peer": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "node_modules/ganache-core/node_modules/proxy-addr": { - "version": "2.0.6", + "@nomicfoundation/ethereumjs-block": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz", + "integrity": "sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" + "requires": { + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-trie": "^5.0.0", + "@nomicfoundation/ethereumjs-tx": "^4.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "ethereum-cryptography": "0.1.3" }, - "engines": { - "node": ">= 0.10" + "dependencies": { + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache-core/node_modules/prr": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/pseudomap": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/psl": { - "version": "1.8.0", + "@nomicfoundation/ethereumjs-blockchain": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz", + "integrity": "sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw==", "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/public-encrypt": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "optional": true, + "requires": { + "@nomicfoundation/ethereumjs-block": "^4.0.0", + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-ethash": "^2.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-trie": "^5.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "abstract-level": "^1.0.3", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "level": "^8.0.0", + "lru-cache": "^5.1.1", + "memory-level": "^1.0.0" + }, "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache-core/node_modules/pull-cat": { - "version": "1.1.11", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/pull-defer": { - "version": "0.2.3", + "@nomicfoundation/ethereumjs-common": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz", + "integrity": "sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA==", "dev": true, - "license": "MIT" + "requires": { + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "crc-32": "^1.2.0" + } }, - "node_modules/ganache-core/node_modules/pull-level": { - "version": "2.0.4", + "@nomicfoundation/ethereumjs-ethash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz", + "integrity": "sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew==", "dev": true, - "license": "MIT", + "requires": { + "@nomicfoundation/ethereumjs-block": "^4.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "abstract-level": "^1.0.3", + "bigint-crypto-utils": "^3.0.23", + "ethereum-cryptography": "0.1.3" + }, "dependencies": { - "level-post": "^1.0.7", - "pull-cat": "^1.1.9", - "pull-live": "^1.0.1", - "pull-pushable": "^2.0.0", - "pull-stream": "^3.4.0", - "pull-window": "^2.1.4", - "stream-to-pull-stream": "^1.7.1" + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache-core/node_modules/pull-live": { - "version": "1.0.1", + "@nomicfoundation/ethereumjs-evm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz", + "integrity": "sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q==", "dev": true, - "license": "MIT", + "requires": { + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@types/async-eventemitter": "^0.2.1", + "async-eventemitter": "^0.2.4", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" + }, "dependencies": { - "pull-cat": "^1.1.9", - "pull-stream": "^3.4.0" + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache-core/node_modules/pull-pushable": { - "version": "2.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/pull-stream": { - "version": "3.6.14", - "dev": true, - "license": "MIT" + "@nomicfoundation/ethereumjs-rlp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz", + "integrity": "sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw==", + "dev": true }, - "node_modules/ganache-core/node_modules/pull-window": { - "version": "2.1.4", + "@nomicfoundation/ethereumjs-statemanager": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz", + "integrity": "sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ==", "dev": true, - "license": "MIT", + "requires": { + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-trie": "^5.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "functional-red-black-tree": "^1.0.1" + }, "dependencies": { - "looper": "^2.0.0" + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache-core/node_modules/pump": { - "version": "3.0.0", + "@nomicfoundation/ethereumjs-trie": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz", + "integrity": "sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A==", "dev": true, - "license": "MIT", - "optional": true, + "requires": { + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "ethereum-cryptography": "0.1.3", + "readable-stream": "^3.6.0" + }, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/ganache-core/node_modules/punycode": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache-core/node_modules/qs": { - "version": "6.5.2", + "@nomicfoundation/ethereumjs-tx": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz", + "integrity": "sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" + "requires": { + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "ethereum-cryptography": "0.1.3" + }, + "dependencies": { + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache-core/node_modules/query-string": { - "version": "5.1.1", + "@nomicfoundation/ethereumjs-util": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz", + "integrity": "sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "requires": { + "@nomicfoundation/ethereumjs-rlp": "^4.0.0-beta.2", + "ethereum-cryptography": "0.1.3" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache-core/node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", + "@nomicfoundation/ethereumjs-vm": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz", + "integrity": "sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w==", + "dev": true, + "requires": { + "@nomicfoundation/ethereumjs-block": "^4.0.0", + "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-evm": "^1.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", + "@nomicfoundation/ethereumjs-trie": "^5.0.0", + "@nomicfoundation/ethereumjs-tx": "^4.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@types/async-eventemitter": "^0.2.1", + "async-eventemitter": "^0.2.4", + "debug": "^4.3.3", + "ethereum-cryptography": "0.1.3", + "functional-red-black-tree": "^1.0.1", + "mcl-wasm": "^0.7.1", + "rustbn.js": "~0.2.0" + }, "dependencies": { - "safe-buffer": "^5.1.0" + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + } } }, - "node_modules/ganache-core/node_modules/randomfill": { + "@nomicfoundation/hardhat-chai-matchers": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.4.tgz", + "integrity": "sha512-n/5UMwGaUK2zM8ALuMChVwB1lEPeDTb5oBjQ1g7hVsUdS8x+XG9JIEp4Ze6Bwy98tghA7Y1+PCH4SNE2P3UQ2g==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "peer": true, + "requires": { + "@ethersproject/abi": "^5.1.2", + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "chalk": "^2.4.2", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" } }, - "node_modules/ganache-core/node_modules/range-parser": { - "version": "1.2.1", + "@nomicfoundation/hardhat-network-helpers": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.6.tgz", + "integrity": "sha512-a35iVD4ycF6AoTfllAnKm96IPIzzHpgKX/ep4oKc2bsUKFfMlacWdyntgC/7d5blyCTXfFssgNAvXDZfzNWVGQ==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" + "peer": true, + "requires": { + "ethereumjs-util": "^7.1.4" + }, + "dependencies": { + "@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "peer": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "peer": true, + "requires": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + } + } } }, - "node_modules/ganache-core/node_modules/raw-body": { - "version": "2.4.0", + "@nomicfoundation/hardhat-toolbox": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.0.tgz", + "integrity": "sha512-BoOPbzLQ1GArnBZd4Jz4IU8FY3RY4nUwpXlfymXwxlXNimngkPRJj7ivVNurD7igohEjf90v/Axn2M5WwAdCJQ==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } + "requires": {} }, - "node_modules/ganache-core/node_modules/readable-stream": { - "version": "2.3.7", + "@nomicfoundation/solidity-analyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz", + "integrity": "sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg==", "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "requires": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.0", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.0", + "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.0", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.0", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.0", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.0", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.0", + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.0", + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.0", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.0" } }, - "node_modules/ganache-core/node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", + "@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz", + "integrity": "sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw==", "dev": true, - "license": "MIT" + "optional": true }, - "node_modules/ganache-core/node_modules/regenerate": { - "version": "1.4.2", + "@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz", + "integrity": "sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA==", "dev": true, - "license": "MIT" + "optional": true }, - "node_modules/ganache-core/node_modules/regenerator-runtime": { - "version": "0.11.1", + "@nomicfoundation/solidity-analyzer-freebsd-x64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.0.tgz", + "integrity": "sha512-WFCZYMv86WowDA4GiJKnebMQRt3kCcFqHeIomW6NMyqiKqhK1kIZCxSLDYsxqlx396kKLPN1713Q1S8tu68GKg==", "dev": true, - "license": "MIT" + "optional": true }, - "node_modules/ganache-core/node_modules/regenerator-transform": { - "version": "0.10.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.0.tgz", + "integrity": "sha512-DTw6MNQWWlCgc71Pq7CEhEqkb7fZnS7oly13pujs4cMH1sR0JzNk90Mp1zpSCsCs4oKan2ClhMlLKtNat/XRKQ==", "dev": true, - "license": "BSD", - "dependencies": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } + "optional": true }, - "node_modules/ganache-core/node_modules/regex-not": { - "version": "1.0.2", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.0.tgz", + "integrity": "sha512-wUpUnR/3GV5Da88MhrxXh/lhb9kxh9V3Jya2NpBEhKDIRCDmtXMSqPMXHZmOR9DfCwCvG6vLFPr/+YrPCnUN0w==", "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/ganache-core/node_modules/regexp.prototype.flags": { - "version": "1.3.0", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz", + "integrity": "sha512-lR0AxK1x/MeKQ/3Pt923kPvwigmGX3OxeU5qNtQ9pj9iucgk4PzhbS3ruUeSpYhUxG50jN4RkIGwUMoev5lguw==", "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "optional": true }, - "node_modules/ganache-core/node_modules/regexp.prototype.flags/node_modules/es-abstract": { - "version": "1.17.7", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.0.tgz", + "integrity": "sha512-A1he/8gy/JeBD3FKvmI6WUJrGrI5uWJNr5Xb9WdV+DK0F8msuOqpEByLlnTdLkXMwW7nSl3awvLezOs9xBHJEg==", "dev": true, - "license": "MIT", - "dependencies": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "optional": true }, - "node_modules/ganache-core/node_modules/regexpu-core": { - "version": "2.0.0", + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.0.tgz", + "integrity": "sha512-7x5SXZ9R9H4SluJZZP8XPN+ju7Mx+XeUMWZw7ZAqkdhP5mK19I4vz3x0zIWygmfE8RT7uQ5xMap0/9NPsO+ykw==", "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } + "optional": true }, - "node_modules/ganache-core/node_modules/regjsgen": { - "version": "0.2.0", + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.0.tgz", + "integrity": "sha512-m7w3xf+hnE774YRXu+2mGV7RiF3QJtUoiYU61FascCkQhX3QMQavh7saH/vzb2jN5D24nT/jwvaHYX/MAM9zUw==", "dev": true, - "license": "MIT" + "optional": true }, - "node_modules/ganache-core/node_modules/regjsparser": { - "version": "0.1.5", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.0.tgz", + "integrity": "sha512-xCuybjY0sLJQnJhupiFAXaek2EqF0AP0eBjgzaalPXSNvCEN6ZYHvUzdA50ENDVeSYFXcUsYf3+FsD3XKaeptA==", "dev": true, - "license": "BSD", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } + "optional": true }, - "node_modules/ganache-core/node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", + "@nomiclabs/hardhat-ethers": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.1.tgz", + "integrity": "sha512-RHWYwnxryWR8hzRmU4Jm/q4gzvXpetUOJ4OPlwH2YARcDB+j79+yAYCwO0lN1SUOb4++oOTJEe6AWLEc42LIvg==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } + "requires": {} }, - "node_modules/ganache-core/node_modules/repeat-element": { - "version": "1.1.3", + "@nomiclabs/hardhat-etherscan": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-3.1.2.tgz", + "integrity": "sha512-IEikeOVq0C/7CY6aD74d8L4BpGoc/FNiN6ldiPVg0QIFIUSu4FSGA1dmtJZJKk1tjpwgrfTLQNWnigtEaN9REg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "peer": true, + "requires": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^5.0.2", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.4.0" } }, - "node_modules/ganache-core/node_modules/repeat-string": { - "version": "1.6.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } + "@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "dev": true }, - "node_modules/ganache-core/node_modules/repeating": { - "version": "2.0.1", + "@scure/bip32": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", + "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", "dev": true, - "license": "MIT", - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@noble/hashes": "~1.1.1", + "@noble/secp256k1": "~1.6.0", + "@scure/base": "~1.1.0" } }, - "node_modules/ganache-core/node_modules/request": { - "version": "2.88.2", + "@scure/bip39": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", + "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" + "requires": { + "@noble/hashes": "~1.1.1", + "@scure/base": "~1.1.0" } }, - "node_modules/ganache-core/node_modules/resolve-url": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/responselike": { - "version": "1.0.2", + "@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "lowercase-keys": "^1.0.0" + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" } }, - "node_modules/ganache-core/node_modules/resumer": { - "version": "0.0.0", + "@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", "dev": true, - "license": "MIT", - "dependencies": { - "through": "~2.3.4" + "requires": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" } }, - "node_modules/ganache-core/node_modules/ret": { - "version": "0.1.15", + "@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12" + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" } }, - "node_modules/ganache-core/node_modules/rimraf": { - "version": "2.6.3", + "@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "requires": { + "@sentry/core": "5.30.0", + "@sentry/hub": "5.30.0", + "@sentry/tracing": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" } }, - "node_modules/ganache-core/node_modules/ripemd160": { - "version": "2.0.2", + "@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", "dev": true, - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "requires": { + "@sentry/hub": "5.30.0", + "@sentry/minimal": "5.30.0", + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" } }, - "node_modules/ganache-core/node_modules/rlp": { - "version": "2.2.6", + "@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true + }, + "@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", "dev": true, - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.1" - }, - "bin": { - "rlp": "bin/rlp" + "requires": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" } }, - "node_modules/ganache-core/node_modules/rustbn.js": { - "version": "0.2.0", + "@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", "dev": true, - "license": "(MIT OR Apache-2.0)" + "requires": { + "antlr4ts": "^0.5.0-alpha.4" + } }, - "node_modules/ganache-core/node_modules/safe-buffer": { - "version": "5.2.1", + "@tenderly/hardhat-tenderly": { + "version": "1.1.0-beta.5", + "resolved": "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.1.0-beta.5.tgz", + "integrity": "sha512-NecF6ewefpDyIF/mz0kTZGlPMa+ri/LOAPPqmyRA/oGEZ19BLM0sHdJFObTv8kJnxIJZBHpTkUaeDPp8KcpZsg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "requires": { + "@nomiclabs/hardhat-ethers": "^2.0.1", + "axios": "^0.21.1", + "ethers": "^5.0.24", + "fs-extra": "^9.0.1", + "js-yaml": "^3.14.0" + }, + "dependencies": { + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true } - ], - "license": "MIT" + } }, - "node_modules/ganache-core/node_modules/safe-event-emitter": { - "version": "1.0.1", + "@typechain/ethers-v5": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.1.1.tgz", + "integrity": "sha512-o6nffJBxwmeX1ZiZpdnP/tqGd/7M7iYvQC88ZXaFFoyAGh7eYncynzVjOJV0XmaKzAc6puqyqZrnva+gJbk4sw==", "dev": true, - "license": "ISC", - "dependencies": { - "events": "^3.0.0" + "peer": true, + "requires": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" } }, - "node_modules/ganache-core/node_modules/safe-regex": { - "version": "1.1.0", + "@typechain/hardhat": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.4.tgz", + "integrity": "sha512-S8k5d1Rjc+plwKpkorlifmh72M7Ki0XNUOVVLtdbcA/vLaEkuqZSJFdddpBgS5QxiJP+6CbRa/yO6EVTE2+fMQ==", "dev": true, - "license": "MIT", + "peer": true, + "requires": { + "fs-extra": "^9.1.0" + }, "dependencies": { - "ret": "~0.1.10" + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "peer": true + } } }, - "node_modules/ganache-core/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/scrypt-js": { - "version": "3.0.1", - "dev": true, - "license": "MIT" + "@types/async-eventemitter": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", + "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==", + "dev": true }, - "node_modules/ganache-core/node_modules/scryptsy": { - "version": "1.2.1", + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pbkdf2": "^3.0.3" + "requires": { + "@types/node": "*" } }, - "node_modules/ganache-core/node_modules/secp256k1": { - "version": "4.0.2", + "@types/chai": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz", + "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==", + "dev": true + }, + "@types/chai-as-promised": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" + "peer": true, + "requires": { + "@types/chai": "*" } }, - "node_modules/ganache-core/node_modules/seedrandom": { - "version": "3.0.1", + "@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", "dev": true, - "license": "MIT" + "requires": { + "@types/node": "*" + } }, - "node_modules/ganache-core/node_modules/semaphore": { - "version": "1.1.0", + "@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", "dev": true, - "engines": { - "node": ">=0.8.0" + "requires": { + "@types/node": "*" } }, - "node_modules/ganache-core/node_modules/send": { - "version": "0.17.1", + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" + "peer": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" } }, - "node_modules/ganache-core/node_modules/send/node_modules/debug": { - "version": "2.6.9", + "@types/lodash": { + "version": "4.14.190", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.190.tgz", + "integrity": "sha512-5iJ3FBJBvQHQ8sFhEhJfjUP+G+LalhavTkYyrAYqz5MEJG+erSv0k9KJLb6q7++17Lafk1scaTIFXcMJlwK8Mw==", + "dev": true + }, + "@types/lowdb": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/lowdb/-/lowdb-1.0.9.tgz", + "integrity": "sha512-LBRG5EPXFOJDoJc9jACstMhtMP+u+UkPYllBeGQXXKiaHc+uzJs9+/Aynb/5KkX33DtrIiKyzNVTPQc/4RcD6A==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "2.0.0" + "requires": { + "@types/lodash": "*" } }, - "node_modules/ganache-core/node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true + "@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true }, - "node_modules/ganache-core/node_modules/send/node_modules/ms": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "optional": true + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/serve-static": { - "version": "1.14.1", + "@types/mocha": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - }, - "engines": { - "node": ">= 0.8.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/servify": { - "version": "0.1.12", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" - } + "@types/node": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.5.tgz", + "integrity": "sha512-90hiq6/VqtQgX8Sp0EzeIsv3r+ellbGj4URKj5j30tLlZvRUpnAe9YbYnjl3pJM93GyXU0tghHhvXHq+5rnCKA==", + "dev": true }, - "node_modules/ganache-core/node_modules/set-immediate-shim": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true }, - "node_modules/ganache-core/node_modules/set-value": { - "version": "2.0.1", + "@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "@types/node": "*" } }, - "node_modules/ganache-core/node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/setimmediate": { - "version": "1.0.5", + "@types/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==", "dev": true, - "license": "MIT" + "peer": true }, - "node_modules/ganache-core/node_modules/setprototypeof": { - "version": "1.1.1", - "dev": true, - "license": "ISC", - "optional": true + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true }, - "node_modules/ganache-core/node_modules/sha.js": { - "version": "2.4.11", + "@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", "dev": true, - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" + "requires": { + "@types/node": "*" } }, - "node_modules/ganache-core/node_modules/simple-concat": { - "version": "1.0.1", + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "optional": true + "peer": true }, - "node_modules/ganache-core/node_modules/simple-get": { - "version": "2.8.1", + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "requires": { + "event-target-shim": "^5.0.0" } }, - "node_modules/ganache-core/node_modules/snapdragon": { - "version": "0.8.2", + "abortcontroller-polyfill": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", "dev": true, - "license": "MIT", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/snapdragon-node": { - "version": "2.1.1", + "abstract-level": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", + "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", "dev": true, - "license": "MIT", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "requires": { + "buffer": "^6.0.3", + "catering": "^2.1.0", + "is-buffer": "^2.0.5", + "level-supports": "^4.0.0", + "level-transcoder": "^1.0.1", + "module-error": "^1.0.1", + "queue-microtask": "^1.2.3" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "dev": true, - "license": "MIT", "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + } } }, - "node_modules/ganache-core/node_modules/snapdragon-util": { - "version": "3.0.1", + "address": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", + "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/snapdragon-util/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT" + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true }, - "node_modules/ganache-core/node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "requires": { + "debug": "4" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", + "amazon-cognito-identity-js": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-4.6.3.tgz", + "integrity": "sha512-MPVJfirbdmSGo7l4h7Kbn3ms1eJXT5Xq8ly+mCPPi8yAxaxdg7ouMUUNTqtDykoZxIdDLF/P6F3Zbg3dlGKOWg==", "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "buffer": "4.9.2", + "crypto-js": "^4.0.0", + "fast-base64-decode": "^1.0.0", + "isomorphic-unfetch": "^3.0.0", + "js-cookie": "^2.2.1" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } + "optional": true, + "peer": true }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT" + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "type-fest": "^0.21.3" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "color-convert": "^1.9.0" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "node_modules/ganache-core/node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, - "node_modules/ganache-core/node_modules/source-map": { - "version": "0.5.7", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "requires": { + "sprintf-js": "~1.0.2" } }, - "node_modules/ganache-core/node_modules/source-map-resolve": { - "version": "0.5.3", + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, - "license": "MIT", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/source-map-support": { - "version": "0.5.12", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } + "array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true }, - "node_modules/ganache-core/node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true }, - "node_modules/ganache-core/node_modules/source-map-url": { - "version": "0.4.0", - "dev": true, - "license": "MIT" + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true }, - "node_modules/ganache-core/node_modules/split-string": { - "version": "3.1.0", + "array.prototype.reduce": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", + "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" } }, - "node_modules/ganache-core/node_modules/sshpk": { - "version": "1.16.1", + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, - "license": "MIT", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "safer-buffer": "~2.1.0" } }, - "node_modules/ganache-core/node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "license": "Unlicense" + "peer": true }, - "node_modules/ganache-core/node_modules/static-extend": { - "version": "0.1.2", + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "license": "MIT", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "lodash": "^4.17.14" } }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", + "async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "async": "^2.4.0" } }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", + "async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "retry": "0.13.1" } }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT" + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true }, - "node_modules/ganache-core/node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true }, - "node_modules/ganache-core/node_modules/statuses": { - "version": "1.5.0", + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" + "requires": { + "follow-redirects": "^1.14.0" } }, - "node_modules/ganache-core/node_modules/stream-to-pull-stream": { - "version": "1.7.3", - "dev": true, - "license": "MIT", - "dependencies": { - "looper": "^3.0.0", - "pull-stream": "^3.2.3" - } + "axios-curlirize": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/axios-curlirize/-/axios-curlirize-1.3.7.tgz", + "integrity": "sha512-csSsuMyZj1dv1fL0zRPnDAHWrmlISMvK+wx9WJI/igRVDT4VMgbf2AVenaHghFLfI1nQijXUevYEguYV6u5hjA==", + "dev": true }, - "node_modules/ganache-core/node_modules/stream-to-pull-stream/node_modules/looper": { - "version": "3.0.0", - "dev": true, - "license": "MIT" + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, - "node_modules/ganache-core/node_modules/strict-uri-encode": { - "version": "1.1.0", + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "safe-buffer": "^5.0.1" } }, - "node_modules/ganache-core/node_modules/string_decoder": { - "version": "1.1.1", + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, - "license": "MIT", + "requires": { + "tweetnacl": "^0.14.3" + }, "dependencies": { - "safe-buffer": "~5.1.0" + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + } } }, - "node_modules/ganache-core/node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" + "bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/string.prototype.trim": { - "version": "1.2.3", + "bigint-crypto-utils": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.7.tgz", + "integrity": "sha512-zpCQpIE2Oy5WIQpjC9iYZf8Uh9QqoS51ZCooAcNvzv1AQ3VWdT52D0ksr1+/faeK8HVIej1bxXcP75YcqH3KPA==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "bigint-mod-arith": "^3.1.0" } }, - "node_modules/ganache-core/node_modules/string.prototype.trimend": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "bigint-mod-arith": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", + "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/string.prototype.trimstart": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "bignumber.js": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", + "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", + "dev": true }, - "node_modules/ganache-core/node_modules/strip-hex-prefix": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true }, - "node_modules/ganache-core/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/swarm-js": { - "version": "0.1.40", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - } + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/get-stream": { - "version": "3.0.0", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4" + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/got": { - "version": "7.1.0", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" + "requires": { + "fill-range": "^7.0.1" } }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/is-stream": { + "brorand": { "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/p-cancelable": { - "version": "0.3.0", + "browser-level": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", + "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4" + "requires": { + "abstract-level": "^1.0.2", + "catering": "^2.1.1", + "module-error": "^1.0.2", + "run-parallel-limit": "^1.1.0" } }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/prepend-http": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, - "node_modules/ganache-core/node_modules/swarm-js/node_modules/url-parse-lax": { - "version": "1.0.0", + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/ganache-core/node_modules/tape": { - "version": "4.13.3", + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", "dev": true, - "license": "MIT", - "dependencies": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.5", - "object-inspect": "~1.7.0", - "resolve": "~1.17.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" - }, - "bin": { - "tape": "bin/tape" + "requires": { + "base-x": "^3.0.2" } }, - "node_modules/ganache-core/node_modules/tape/node_modules/glob": { - "version": "7.1.6", + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" } }, - "node_modules/ganache-core/node_modules/tape/node_modules/is-regex": { - "version": "1.0.5", + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "node_modules/ganache-core/node_modules/tape/node_modules/object-inspect": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/tape/node_modules/resolve": { - "version": "1.17.0", - "dev": true, - "license": "MIT", - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/tar": { - "version": "4.4.13", + "bufferutil": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", + "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "engines": { - "node": ">=4.5" + "peer": true, + "requires": { + "node-gyp-build": "^4.3.0" } }, - "node_modules/ganache-core/node_modules/tar/node_modules/fs-minipass": { - "version": "1.2.7", + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "dev": true + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^2.6.0" + "requires": { + "streamsearch": "^1.1.0" } }, - "node_modules/ganache-core/node_modules/tar/node_modules/minipass": { - "version": "2.9.0", + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "node_modules/ganache-core/node_modules/through": { - "version": "2.3.8", - "dev": true, - "license": "MIT" + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/through2": { - "version": "2.0.5", + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "catering": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", + "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", + "dev": true + }, + "cbor": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", + "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "requires": { + "bignumber.js": "^9.0.1", + "nofilter": "^1.0.4" } }, - "node_modules/ganache-core/node_modules/timed-out": { - "version": "4.0.1", + "chai": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", + "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" + "peer": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^4.1.2", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" } }, - "node_modules/ganache-core/node_modules/tmp": { - "version": "0.1.0", + "chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, - "license": "MIT", - "dependencies": { - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" + "peer": true, + "requires": { + "check-error": "^1.0.2" } }, - "node_modules/ganache-core/node_modules/to-object-path": { - "version": "0.3.0", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "node_modules/ganache-core/node_modules/to-object-path/node_modules/is-buffer": { - "version": "1.1.6", - "dev": true, - "license": "MIT" + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true }, - "node_modules/ganache-core/node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/to-readable-stream": { - "version": "1.0.0", + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" } }, - "node_modules/ganache-core/node_modules/to-regex": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/toidentifier": { - "version": "1.0.0", + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.6" + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/ganache-core/node_modules/tough-cookie": { - "version": "2.5.0", + "classic-level": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", + "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" + "requires": { + "abstract-level": "^1.0.2", + "catering": "^2.1.0", + "module-error": "^1.0.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "^4.3.0" } }, - "node_modules/ganache-core/node_modules/trim-right": { - "version": "1.0.1", + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" } }, - "node_modules/ganache-core/node_modules/tunnel-agent": { - "version": "0.6.0", + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/ganache-core/node_modules/tweetnacl": { - "version": "1.0.3", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "Unlicense" + "requires": { + "color-name": "1.1.3" + } }, - "node_modules/ganache-core/node_modules/tweetnacl-util": { - "version": "0.15.1", - "dev": true, - "license": "Unlicense" + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, - "node_modules/ganache-core/node_modules/type": { - "version": "1.2.0", - "dev": true, - "license": "ISC" + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true }, - "node_modules/ganache-core/node_modules/type-is": { - "version": "1.6.18", + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" + "requires": { + "delayed-stream": "~1.0.0" } }, - "node_modules/ganache-core/node_modules/typedarray": { - "version": "0.0.6", - "dev": true, - "license": "MIT" + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true }, - "node_modules/ganache-core/node_modules/typedarray-to-buffer": { - "version": "3.1.5", + "command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" + "peer": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" } }, - "node_modules/ganache-core/node_modules/typewise": { - "version": "1.0.3", + "command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", "dev": true, - "license": "MIT", + "peer": true, + "requires": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, "dependencies": { - "typewise-core": "^1.2.0" + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "peer": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "peer": true + } } }, - "node_modules/ganache-core/node_modules/typewise-core": { - "version": "1.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/typewiselite": { - "version": "1.0.0", - "dev": true, - "license": "MIT" + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true }, - "node_modules/ganache-core/node_modules/ultron": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "optional": true + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "dev": true }, - "node_modules/ganache-core/node_modules/underscore": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "optional": true + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, - "node_modules/ganache-core/node_modules/union-value": { - "version": "1.0.1", + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, - "node_modules/ganache-core/node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true }, - "node_modules/ganache-core/node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/unorm": { - "version": "1.6.0", + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dev": true, - "license": "MIT or GPL-2.0", - "engines": { - "node": ">= 0.4.0" + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" } }, - "node_modules/ganache-core/node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.8" - } + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/unset-value": { - "version": "1.0.0", + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, - "license": "MIT", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/ganache-core/node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "license": "MIT", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/ganache-core/node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "peer": true, + "requires": { + "node-fetch": "2.6.7" } }, - "node_modules/ganache-core/node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "node_modules/ganache-core/node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true }, - "node_modules/ganache-core/node_modules/urix": { - "version": "0.1.0", - "dev": true, - "license": "MIT" + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", + "dev": true }, - "node_modules/ganache-core/node_modules/url-parse-lax": { - "version": "3.0.0", + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" + "peer": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "node_modules/ganache-core/node_modules/url-set-query": { - "version": "1.0.0", + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, - "license": "MIT", - "optional": true + "requires": { + "assert-plus": "^1.0.0" + } }, - "node_modules/ganache-core/node_modules/url-to-options": { - "version": "1.0.1", + "death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 4" - } + "peer": true }, - "node_modules/ganache-core/node_modules/use": { - "version": "3.1.1", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "requires": { + "ms": "2.1.2" } }, - "node_modules/ganache-core/node_modules/utf-8-validate": { - "version": "5.0.4", + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + }, + "deep-eql": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", + "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-gyp-build": "^4.2.0" + "peer": true, + "requires": { + "type-detect": "^4.0.0" } }, - "node_modules/ganache-core/node_modules/utf8": { - "version": "3.0.0", + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, - "license": "MIT", - "optional": true + "peer": true }, - "node_modules/ganache-core/node_modules/util-deprecate": { - "version": "1.0.2", + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, - "license": "MIT" + "peer": true }, - "node_modules/ganache-core/node_modules/util.promisify": { - "version": "1.1.1", + "defender-base-client": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/defender-base-client/-/defender-base-client-1.37.0.tgz", + "integrity": "sha512-V6tU0q8/n1/m/edT2FlTvUmZn6u5/A64FqYQfrMgg4PEy1TvYCz9tF+3dnGjk+sJrzICAv0GQWwLw/+8uRq2mg==", "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "requires": { + "amazon-cognito-identity-js": "^4.3.3", + "async-retry": "^1.3.3", + "axios": "^0.21.2", + "lodash": "^4.17.19", + "node-fetch": "^2.6.0" } }, - "node_modules/ganache-core/node_modules/utils-merge": { - "version": "1.0.1", + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.4.0" + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, - "node_modules/ganache-core/node_modules/uuid": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true }, - "node_modules/ganache-core/node_modules/varint": { - "version": "5.0.2", - "dev": true, - "license": "MIT", - "optional": true + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true }, - "node_modules/ganache-core/node_modules/vary": { - "version": "1.1.2", + "detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.8" + "peer": true, + "requires": { + "address": "^1.0.1", + "debug": "4" } }, - "node_modules/ganache-core/node_modules/verror": { - "version": "1.10.0", + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "peer": true, + "requires": { + "heap": ">= 0.2.0" } }, - "node_modules/ganache-core/node_modules/web3": { - "version": "1.2.11", + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "hasInstallScript": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "web3-bzz": "1.2.11", - "web3-core": "1.2.11", - "web3-eth": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-shh": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "peer": true, + "requires": { + "path-type": "^4.0.0" } }, - "node_modules/ganache-core/node_modules/web3-bzz": { - "version": "1.2.11", + "dir-to-object": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-to-object/-/dir-to-object-2.0.0.tgz", + "integrity": "sha512-sXs0JKIhymON7T1UZuO2Ud6VTNAx/VTBXIl4+3mjb2RgfOpt+hectX0x04YqPOPdkeOAKoJuKqwqnXXURNPNEA==", + "dev": true + }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - }, - "engines": { - "node": ">=8.0.0" + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/ganache-core/node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.19.12", + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ganache-core/node_modules/web3-core": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@types/bn.js": "^4.11.5", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-requestmanager": "1.2.11", - "web3-utils": "1.2.11" + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-core-helpers": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, "dependencies": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "node_modules/ganache-core/node_modules/web3-core-method": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, - "node_modules/ganache-core/node_modules/web3-core-promievent": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } + "encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", + "dev": true }, - "node_modules/ganache-core/node_modules/web3-core-requestmanager": { - "version": "1.2.11", + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-providers-http": "1.2.11", - "web3-providers-ipc": "1.2.11", - "web3-providers-ws": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "requires": { + "once": "^1.4.0" } }, - "node_modules/ganache-core/node_modules/web3-core-subscriptions": { - "version": "1.2.11", + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "requires": { + "ansi-colors": "^4.1.1" } }, - "node_modules/ganache-core/node_modules/web3-core/node_modules/@types/node": { - "version": "12.19.12", - "dev": true, - "license": "MIT", - "optional": true + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true }, - "node_modules/ganache-core/node_modules/web3-eth": { - "version": "1.2.11", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-accounts": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-eth-ens": "1.2.11", - "web3-eth-iban": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "requires": { + "is-arrayish": "^0.2.1" } }, - "node_modules/ganache-core/node_modules/web3-eth-abi": { - "version": "1.2.11", + "es-abstract": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", + "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@ethersproject/abi": "5.0.0-beta.153", - "underscore": "1.9.1", - "web3-utils": "1.2.11" + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-eth-accounts": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, "dependencies": { - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + } } }, - "node_modules/ganache-core/node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true }, - "node_modules/ganache-core/node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "3.3.2", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "uuid": "bin/uuid" + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "node_modules/ganache-core/node_modules/web3-eth-contract": { - "version": "1.2.11", + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@types/bn.js": "^4.11.5", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "peer": true, + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" } }, - "node_modules/ganache-core/node_modules/web3-eth-ens": { - "version": "1.2.11", + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "peer": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/ganache-core/node_modules/web3-eth-iban": { - "version": "1.2.11", + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/web3-eth-personal": { - "version": "1.2.11", + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" + "peer": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "node_modules/ganache-core/node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.19.12", - "dev": true, - "license": "MIT", - "optional": true + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, - "node_modules/ganache-core/node_modules/web3-net": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true }, - "node_modules/ganache-core/node_modules/web3-provider-engine": { - "version": "14.2.1", + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", "dev": true, - "license": "MIT", + "peer": true, + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + }, "dependencies": { - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^3.0.0", - "eth-json-rpc-infura": "^3.1.0", - "eth-sig-util": "3.0.0", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.2.0", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "peer": true + } } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/abstract-leveldown": { - "version": "2.6.3", + "eslint-plugin-prettier": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz", + "integrity": "sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA==", "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" + "requires": { + "fast-diff": "^1.1.1", + "jest-docblock": "^21.0.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/deferred-leveldown": { - "version": "1.2.2", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esprima-extract-comments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/esprima-extract-comments/-/esprima-extract-comments-1.1.0.tgz", + "integrity": "sha512-sBQUnvJwpeE9QnPrxh7dpI/dp67erYG4WXEAreAMoelPRpMR7NWb4YtwRPn9b+H1uLQKl/qS8WYmyaljTpjIsw==", "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~2.6.0" + "requires": { + "esprima": "^4.0.0" } }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/eth-sig-util": { - "version": "1.4.2", - "dev": true, - "license": "ISC", - "dependencies": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-block/node_modules/ethereum-common": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-block/node_modules/ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-codec": { - "version": "7.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-errors": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws": { - "version": "0.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "dev": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/levelup": { - "version": "1.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ltgt": { - "version": "2.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/memdown": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "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" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/object-keys": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/semver": { - "version": "5.4.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/string_decoder": { - "version": "0.10.31", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/web3-provider-engine/node_modules/ws": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-providers-http": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "web3-core-helpers": "1.2.11", - "xhr2-cookies": "1.1.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-providers-ipc": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-providers-ws": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "websocket": "^1.0.31" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-shh": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-net": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-utils": { - "version": "1.2.11", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "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" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/ganache-core/node_modules/web3-utils/node_modules/eth-lib": { - "version": "0.2.8", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/ganache-core/node_modules/websocket": { - "version": "1.0.32", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ganache-core/node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/ganache-core/node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/whatwg-fetch": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/ganache-core/node_modules/ws": { - "version": "3.3.3", + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } + "peer": true }, - "node_modules/ganache-core/node_modules/ws/node_modules/safe-buffer": { - "version": "5.1.2", + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "MIT", - "optional": true + "peer": true }, - "node_modules/ganache-core/node_modules/xhr": { - "version": "2.6.0", + "eth-gas-reporter": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz", + "integrity": "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==", "dev": true, - "license": "MIT", - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/xhr-request": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/ganache-core/node_modules/xhr-request-promise": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/ganache-core/node_modules/xhr2-cookies": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "cookiejar": "^2.1.1" - } - }, - "node_modules/ganache-core/node_modules/xtend": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/yaeti": { - "version": "0.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/ganache-core/node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/ghost-testrpc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", - "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "node-emoji": "^1.10.0" - }, - "bin": { - "testrpc-sc": "index.js" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/got/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hardhat": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.10.0.tgz", - "integrity": "sha512-9VUorKvWNyW96qFXkwkpDUSeWND3gOZpm0oJ8l63JQJvWhxyxTJ92BcOrNylOKy9hzNNGdMfM2QWNP80fGOjpA==", - "dependencies": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/blockchain": "^5.5.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/tx": "^3.5.1", - "@ethereumjs/vm": "^5.9.0", - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@sentry/node": "^5.18.1", - "@solidity-parser/parser": "^0.14.2", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^7.1.4", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "lodash": "^4.17.11", - "merkle-patricia-tree": "^4.2.4", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "slash": "^3.0.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "true-case-path": "^2.2.1", - "tsort": "0.0.1", - "undici": "^5.4.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "bin": { - "hardhat": "internal/cli/cli.js" - }, - "engines": { - "node": "^14.0.0 || ^16.0.0 || ^18.0.0" - }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/hardhat-contract-sizer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hardhat-contract-sizer/-/hardhat-contract-sizer-2.0.3.tgz", - "integrity": "sha512-iaixOzWxwOSIIE76cl2uk4m9VXI1hKU3bFt+gl7jDhyb2/JB2xOp5wECkfWqAoc4V5lD4JtjldZlpSTbzX+nPQ==", - "dev": true, - "dependencies": { - "cli-table3": "^0.6.0", - "colors": "^1.4.0" - }, - "peerDependencies": { - "hardhat": "^2.0.0" - } - }, - "node_modules/hardhat-dependency-compiler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/hardhat-dependency-compiler/-/hardhat-dependency-compiler-1.1.2.tgz", - "integrity": "sha512-LVnsPSZnGvzWVvlpewlkPKlPtFP/S9V41RC1fd/ygZc4jkG8ubNlfE82nwiGw5oPueHSmFi6TACgmyrEOokK8w==", - "dev": true, - "engines": { - "node": ">=14.14.0" - }, - "peerDependencies": { - "hardhat": "^2.0.0" - } - }, - "node_modules/hardhat-deploy": { - "version": "0.11.12", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.12.tgz", - "integrity": "sha512-Wv0BqzwW4mz78raxkfQtBbkhZwZTRWXwRbEwgkTUimD3MX/0Z9+D4O+s1zHJlG0zwZvJMbwxPOrOHQm4NZ3JAQ==", - "dev": true, - "dependencies": { - "@types/qs": "^6.9.7", - "axios": "^0.21.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "debug": "^4.3.2", - "enquirer": "^2.3.6", - "ethers": "^5.5.3", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "match-all": "^1.2.6", - "murmur-128": "^0.2.1", - "qs": "^6.9.4", - "zksync-web3": "^0.7.8" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/abi": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz", - "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/hash": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/abstract-provider": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz", - "integrity": "sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/networks": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "@ethersproject/web": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/abstract-signer": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz", - "integrity": "sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/address": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.5.0.tgz", - "integrity": "sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/rlp": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/base64": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.5.0.tgz", - "integrity": "sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/basex": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.5.0.tgz", - "integrity": "sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/properties": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/bignumber": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.5.0.tgz", - "integrity": "sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "bn.js": "^4.11.9" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/bytes": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.5.0.tgz", - "integrity": "sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/constants": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.5.0.tgz", - "integrity": "sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/contracts": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.5.0.tgz", - "integrity": "sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "^5.5.0", - "@ethersproject/abstract-provider": "^5.5.0", - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/transactions": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/hash": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.5.0.tgz", - "integrity": "sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/hdnode": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.5.0.tgz", - "integrity": "sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/basex": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/pbkdf2": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/sha2": "^5.5.0", - "@ethersproject/signing-key": "^5.5.0", - "@ethersproject/strings": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "@ethersproject/wordlists": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/json-wallets": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz", - "integrity": "sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/hdnode": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/pbkdf2": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/random": "^5.5.0", - "@ethersproject/strings": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/keccak256": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.5.0.tgz", - "integrity": "sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/logger": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.5.0.tgz", - "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/networks": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.2.tgz", - "integrity": "sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/pbkdf2": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz", - "integrity": "sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/sha2": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/properties": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.5.0.tgz", - "integrity": "sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/providers": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.3.tgz", - "integrity": "sha512-ZHXxXXXWHuwCQKrgdpIkbzMNJMvs+9YWemanwp1fA7XZEv7QlilseysPvQe0D7Q7DlkJX/w/bGA1MdgK2TbGvA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.5.0", - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/basex": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/hash": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/networks": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/random": "^5.5.0", - "@ethersproject/rlp": "^5.5.0", - "@ethersproject/sha2": "^5.5.0", - "@ethersproject/strings": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "@ethersproject/web": "^5.5.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/random": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.1.tgz", - "integrity": "sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/rlp": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.5.0.tgz", - "integrity": "sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/sha2": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.5.0.tgz", - "integrity": "sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "hash.js": "1.1.7" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/signing-key": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.5.0.tgz", - "integrity": "sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/solidity": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.5.0.tgz", - "integrity": "sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/sha2": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/strings": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.5.0.tgz", - "integrity": "sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/transactions": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.5.0.tgz", - "integrity": "sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/rlp": "^5.5.0", - "@ethersproject/signing-key": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/units": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.5.0.tgz", - "integrity": "sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/constants": "^5.5.0", - "@ethersproject/logger": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/wallet": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.5.0.tgz", - "integrity": "sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.5.0", - "@ethersproject/abstract-signer": "^5.5.0", - "@ethersproject/address": "^5.5.0", - "@ethersproject/bignumber": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/hash": "^5.5.0", - "@ethersproject/hdnode": "^5.5.0", - "@ethersproject/json-wallets": "^5.5.0", - "@ethersproject/keccak256": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/random": "^5.5.0", - "@ethersproject/signing-key": "^5.5.0", - "@ethersproject/transactions": "^5.5.0", - "@ethersproject/wordlists": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/web": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.1.tgz", - "integrity": "sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/base64": "^5.5.0", - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/@ethersproject/wordlists": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.5.0.tgz", - "integrity": "sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.5.0", - "@ethersproject/hash": "^5.5.0", - "@ethersproject/logger": "^5.5.0", - "@ethersproject/properties": "^5.5.0", - "@ethersproject/strings": "^5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/hardhat-deploy/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/hardhat-deploy/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/hardhat-deploy/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/hardhat-deploy/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/hardhat-deploy/node_modules/ethers": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.4.tgz", - "integrity": "sha512-N9IAXsF8iKhgHIC6pquzRgPBJEzc9auw3JoRkaKe+y4Wl/LFBtDDunNe7YmdomontECAcC5APaAgWZBiu1kirw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.5.0", - "@ethersproject/abstract-provider": "5.5.1", - "@ethersproject/abstract-signer": "5.5.0", - "@ethersproject/address": "5.5.0", - "@ethersproject/base64": "5.5.0", - "@ethersproject/basex": "5.5.0", - "@ethersproject/bignumber": "5.5.0", - "@ethersproject/bytes": "5.5.0", - "@ethersproject/constants": "5.5.0", - "@ethersproject/contracts": "5.5.0", - "@ethersproject/hash": "5.5.0", - "@ethersproject/hdnode": "5.5.0", - "@ethersproject/json-wallets": "5.5.0", - "@ethersproject/keccak256": "5.5.0", - "@ethersproject/logger": "5.5.0", - "@ethersproject/networks": "5.5.2", - "@ethersproject/pbkdf2": "5.5.0", - "@ethersproject/properties": "5.5.0", - "@ethersproject/providers": "5.5.3", - "@ethersproject/random": "5.5.1", - "@ethersproject/rlp": "5.5.0", - "@ethersproject/sha2": "5.5.0", - "@ethersproject/signing-key": "5.5.0", - "@ethersproject/solidity": "5.5.0", - "@ethersproject/strings": "5.5.0", - "@ethersproject/transactions": "5.5.0", - "@ethersproject/units": "5.5.0", - "@ethersproject/wallet": "5.5.0", - "@ethersproject/web": "5.5.1", - "@ethersproject/wordlists": "5.5.0" - } - }, - "node_modules/hardhat-deploy/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hardhat-deploy/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/hardhat-deploy/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat-deploy/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/hardhat-deploy/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat-deploy/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/hardhat-deploy/node_modules/zksync-web3": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.7.9.tgz", - "integrity": "sha512-B0pitKvEQGJuWkY2UWjXrL1YgHghXEoDaq6acVZnB62TRF099GV58Fzi7Fnqt+Nw14A7Wc9iJ2AHD4GBTLFgkg==", - "dev": true, - "peerDependencies": { - "ethers": "~5.5.0" - } - }, - "node_modules/hardhat-gas-reporter": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.8.tgz", - "integrity": "sha512-1G5thPnnhcwLHsFnl759f2tgElvuwdkzxlI65fC9PwxYMEe9cmjkVAAWTf3/3y8uP6ZSPiUiOW8PgZnykmZe0g==", - "dev": true, - "dependencies": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.24", - "sha1": "^1.1.1" - }, - "peerDependencies": { - "hardhat": "^2.0.2" - } - }, - "node_modules/hardhat/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/hardhat/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/hardhat/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/hardhat/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/hardhat/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/hardhat/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hardhat/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/hardhat/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/hardhat/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/hardhat/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hardhat/node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/hardhat/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hardhat/node_modules/ethereum-cryptography": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", - "dependencies": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" - } - }, - "node_modules/hardhat/node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/hardhat/node_modules/ethereumjs-abi/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/hardhat/node_modules/ethereumjs-abi/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/hardhat/node_modules/ethereumjs-abi/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/hardhat/node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/hardhat/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/hardhat/node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/hardhat/node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/hardhat/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/hardhat/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/hardhat/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/hardhat/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hardhat/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hardhat/node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/hardhat/node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat/node_modules/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/hardhat/node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hardhat/node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hardhat/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/hardhat/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hardhat/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hardhat/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/hardhat/node_modules/solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dependencies": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solcjs" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/hardhat/node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/hardhat/node_modules/solc/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/hardhat/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat/node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hardhat/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/hardhat/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/hardhat/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/hardhat/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/hardhat/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hardhat/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/hardhat/node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dev": true, - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==", - "dev": true - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dev": true, - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/husky": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.5.tgz", - "integrity": "sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^6.0.0", - "find-versions": "^3.2.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^4.2.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - }, - "bin": { - "husky-run": "bin/run.js", - "husky-upgrade": "lib/upgrader/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/husky" - } - }, - "node_modules/husky/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/husky/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/husky/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/husky/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/husky/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/husky/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "dev": true, - "dependencies": { - "punycode": "2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, - "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imul": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", - "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dependencies": { - "fp-ts": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isomorphic-unfetch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz", - "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==", - "dev": true, - "dependencies": { - "node-fetch": "^2.6.1", - "unfetch": "^4.2.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/jest-docblock": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", - "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", - "dev": true - }, - "node_modules/js-cookie": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", - "dev": true - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonschema": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", - "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-codec/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dependencies": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dependencies": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "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" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lowdb": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz", - "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.3", - "is-promise": "^2.1.0", - "lodash": "4", - "pify": "^3.0.0", - "steno": "^0.4.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true - }, - "node_modules/markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", - "dev": true - }, - "node_modules/match-all": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", - "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", - "dev": true - }, - "node_modules/mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dependencies": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/memdown/node_modules/immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==" - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dependencies": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "node_modules/merkle-patricia-tree/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dev": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", - "deprecated": "This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that.", - "dev": true, - "dependencies": { - "mkdirp": "*" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dependencies": { - "obliterator": "^2.0.0" - } - }, - "node_modules/mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", - "dev": true, - "dependencies": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.1.1" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "deprecated": "\"Please update to latest v2.3 or v2.2\"", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "dependencies": { - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", - "dev": true - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/multibase/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "dependencies": { - "varint": "^5.0.0" - } - }, - "node_modules/multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } - }, - "node_modules/multihashes/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/multihashes/node_modules/multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "deprecated": "This module has been superseded by the multiformats module", - "dev": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/multimatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", - "dev": true, - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/murmur-128": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", - "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", - "dev": true, - "dependencies": { - "encode-utf8": "^1.0.2", - "fmix": "^0.1.0", - "imul": "^1.0.0" - } - }, - "node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dev": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-environment-flags/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/nofilter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dev": true, - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", - "dev": true, - "dependencies": { - "array.prototype.reduce": "^1.0.4", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" - }, - "node_modules/oboe": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", - "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", - "dev": true, - "dependencies": { - "http-https": "^1.0.0" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true, - "bin": { - "opencollective-postinstall": "index.js" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "engines": { - "node": ">=4" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", - "dev": true - }, - "node_modules/parse-code-context": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-code-context/-/parse-code-context-1.0.0.tgz", - "integrity": "sha512-OZQaqKaQnR21iqhlnPfVisFjBWjhnMl5J9MgbP8xC+EwoVqbXrq78lp+9Zb3ahmLzrIX5Us/qbvBnaS3hkH6OA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", - "dev": true - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/patch-package": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", - "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", - "dev": true, - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "npm": ">5" - } - }, - "node_modules/patch-package/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "dependencies": { - "semver-compare": "^1.0.0" - } - }, - "node_modules/postinstall-postinstall": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", - "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", - "dev": true, - "hasInstallScript": true - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", - "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/prettier-plugin-solidity": { - "version": "1.0.0-alpha.53", - "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-alpha.53.tgz", - "integrity": "sha512-DZSJ6U2ZwPeSvbtA/sYn+z+w4lEWNpdU47EmjlNtYEYS+SQWieRtaSPm3EH3DyYMQZvfcDePOOxP7vHwfpNIYQ==", - "dev": true, - "dependencies": { - "@solidity-parser/parser": "^0.6.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" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.6.2.tgz", - "integrity": "sha512-kUVUvrqttndeprLoXjI5arWHeiP3uh4XODAKbG+ZaWHCVQeelxCbnXBeWxZ2BPHdXgH0xR9dU1b916JhDhbgAA==", - "dev": true - }, - "node_modules/prettier-plugin-solidity/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-quick": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.1.tgz", - "integrity": "sha512-ZYLGiMoV2jcaas3vTJrLvKAYsxDoXQBUn8OSTxkl67Fyov9lyXivJTl0+2WVh+y6EovGcw7Lm5ThYpH+Sh3XxQ==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "execa": "^4.0.0", - "find-up": "^4.1.0", - "ignore": "^5.1.4", - "mri": "^1.1.5", - "multimatch": "^4.0.0" - }, - "bin": { - "pretty-quick": "bin/pretty-quick.js" - }, - "engines": { - "node": ">=10.13" - }, - "peerDependencies": { - "prettier": ">=2.0.0" - } - }, - "node_modules/pretty-quick/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-quick/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/pretty-quick/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/pretty-quick/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-quick/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pretty-quick/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", - "dev": true, - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "dev": true, - "dependencies": { - "minimatch": "3.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/req-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", - "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", - "dev": true, - "dependencies": { - "req-from": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/req-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", - "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", - "dev": true, - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/req-from/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sc-istanbul": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", - "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", - "dev": true, - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "istanbul": "lib/cli.js" - } - }, - "node_modules/sc-istanbul/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true - }, - "node_modules/sc-istanbul/node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sc-istanbul/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dev": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sc-istanbul/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sc-istanbul/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - }, - "node_modules/sc-istanbul/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "dev": true, - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", - "engines": { - "node": ">=4.1" - } - }, - "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true - }, - "node_modules/semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dev": true, - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", - "dev": true, - "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/solc": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz", - "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==", - "dev": true, - "dependencies": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solcjs" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/solc/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/solidity-coverage": { - "version": "0.7.17", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.7.17.tgz", - "integrity": "sha512-Erw2hd2xdACAvDX8jUdYkmgJlIIazGznwDJA5dhRaw4def2SisXN9jUjneeyOZnl/E7j6D3XJYug4Zg9iwodsg==", - "dev": true, - "dependencies": { - "@solidity-parser/parser": "^0.13.2", - "@truffle/provider": "^0.2.24", - "chalk": "^2.4.2", - "death": "^1.1.0", - "detect-port": "^1.3.0", - "fs-extra": "^8.1.0", - "ganache-cli": "^6.12.2", - "ghost-testrpc": "^0.0.2", - "global-modules": "^2.0.0", - "globby": "^10.0.1", - "jsonschema": "^1.2.4", - "lodash": "^4.17.15", - "node-emoji": "^1.10.0", - "pify": "^4.0.1", - "recursive-readdir": "^2.2.2", - "sc-istanbul": "^0.4.5", - "semver": "^7.3.4", - "shelljs": "^0.8.3", - "web3-utils": "^1.3.0" - }, - "bin": { - "solidity-coverage": "plugins/bin.js" - } - }, - "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.13.2.tgz", - "integrity": "sha512-RwHnpRnfrnD2MSPveYoPh8nhofEvX7fgjHk1Oq+NNvCcLx4r1js91CO9o+F/F3fBzOCyvm8kKRTriFICX/odWw==", - "dev": true, - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "node_modules/solidity-coverage/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/solidity-coverage/node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/solidity-coverage/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", - "dev": true, - "optional": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/steno": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz", - "integrity": "sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.3" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js": { - "version": "0.1.40", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", - "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - } - }, - "node_modules/swarm-js/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/swarm-js/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/swarm-js/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/swarm-js/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/swarm-js/node_modules/url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "dev": true, - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dev": true, - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dev": true, - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "dev": true, - "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/test-value": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", - "integrity": "sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==", - "dev": true, - "dependencies": { - "array-back": "^1.0.3", - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/test-value/node_modules/array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", - "dev": true, - "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/testrpc": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", - "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", - "deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on.", - "dev": true - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dev": true, - "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", - "dev": true - }, - "node_modules/then-request/node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmp-promise": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", - "dependencies": { - "tmp": "^0.2.0" - } - }, - "node_modules/tmp-promise/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tmp-promise/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" - }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/ts-generator": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", - "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", - "dev": true, - "dependencies": { - "@types/mkdirp": "^0.5.2", - "@types/prettier": "^2.1.1", - "@types/resolve": "^0.0.8", - "chalk": "^2.4.1", - "glob": "^7.1.2", - "mkdirp": "^0.5.1", - "prettier": "^2.1.2", - "resolve": "^1.8.1", - "ts-essentials": "^1.0.0" - }, - "bin": { - "ts-generator": "dist/cli/run.js" - } - }, - "node_modules/ts-generator/node_modules/ts-essentials": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", - "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", - "dev": true - }, - "node_modules/ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", - "devOptional": true, - "dependencies": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "devOptional": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tslint": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.2.tgz", - "integrity": "sha512-UyNrLdK3E0fQG/xWNqAFAC5ugtFyPO4JJR1KyyfQAyzR8W0fTRrC91A8Wej4BntFzcvETdCSDa/4PnNYJQLYiA==", - "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.3", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.10.0", - "tsutils": "^2.29.0" - }, - "bin": { - "tslint": "bin/tslint" - }, - "engines": { - "node": ">=4.8.0" - }, - "peerDependencies": { - "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev" - } - }, - "node_modules/tslint-config-prettier": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", - "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", - "dev": true, - "bin": { - "tslint-config-prettier-check": "bin/check.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/tslint-plugin-prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslint-plugin-prettier/-/tslint-plugin-prettier-2.3.0.tgz", - "integrity": "sha512-F9e4K03yc9xuvv+A0v1EmjcnDwpz8SpCD8HzqSDe0eyg34cBinwn9JjmnnRrNAs4HdleRQj7qijp+P/JTxt4vA==", - "dev": true, - "dependencies": { - "eslint-plugin-prettier": "^2.2.0", - "lines-and-columns": "^1.1.6", - "tslib": "^1.7.1" - }, - "engines": { - "node": ">= 4" - }, - "peerDependencies": { - "prettier": "^1.9.0 || ^2.0.0", - "tslint": "^5.0.0 || ^6.0.0" - } - }, - "node_modules/tslint/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/tslint/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslint/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" - }, - "node_modules/tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "peerDependencies": { - "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typechain": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-5.2.0.tgz", - "integrity": "sha512-0INirvQ+P+MwJOeMct+WLkUE4zov06QxC96D+i3uGFEHoiSkZN70MKDQsaj8zkL86wQwByJReI2e7fOUwECFuw==", - "dev": true, - "dependencies": { - "@types/prettier": "^2.1.1", - "command-line-args": "^4.0.7", - "debug": "^4.1.1", - "fs-extra": "^7.0.0", - "glob": "^7.1.6", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.1.2", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.1.0" - } - }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "devOptional": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/typical": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", - "dev": true - }, - "node_modules/uglify-js": { - "version": "3.16.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", - "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.8.0.tgz", - "integrity": "sha512-1F7Vtcez5w/LwH2G2tGnFIihuWUlc58YidwLiCv+jR2Z50x0tNXpRRw7eOIJ+GvqCqIkg9SB7NWAJ/T9TLfv8Q==", - "engines": { - "node": ">=12.18" - } - }, - "node_modules/unfetch": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz", - "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==", - "dev": true - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", - "dev": true - }, - "node_modules/url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - }, - "node_modules/utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "devOptional": true, - "hasInstallScript": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true - }, - "node_modules/util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/web3": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.7.4.tgz", - "integrity": "sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "web3-bzz": "1.7.4", - "web3-core": "1.7.4", - "web3-eth": "1.7.4", - "web3-eth-personal": "1.7.4", - "web3-net": "1.7.4", - "web3-shh": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.4.tgz", - "integrity": "sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - }, - "node_modules/web3-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", - "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-helpers": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", - "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", - "dev": true, - "dependencies": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", - "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", - "dev": true, - "dependencies": { - "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", - "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", - "dev": true, - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-requestmanager": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", - "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", - "dev": true, - "dependencies": { - "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", - "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", - "dev": true, - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - }, - "node_modules/web3-eth": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.4.tgz", - "integrity": "sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug==", - "dev": true, - "dependencies": { - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-eth-accounts": "1.7.4", - "web3-eth-contract": "1.7.4", - "web3-eth-ens": "1.7.4", - "web3-eth-iban": "1.7.4", - "web3-eth-personal": "1.7.4", - "web3-net": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-abi": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz", - "integrity": "sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz", - "integrity": "sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw==", - "dev": true, - "dependencies": { - "@ethereumjs/common": "^2.5.0", - "@ethereumjs/tx": "^3.3.2", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.0.10", - "scrypt-js": "^3.0.1", - "uuid": "3.3.2", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/web3-eth-accounts/node_modules/eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/web3-eth-accounts/node_modules/eth-lib/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/web3-eth-accounts/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/web3-eth-contract": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz", - "integrity": "sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-contract/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/web3-eth-ens": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz", - "integrity": "sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA==", - "dev": true, - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-eth-contract": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-iban": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", - "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz", - "integrity": "sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g==", - "dev": true, - "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-net": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - }, - "node_modules/web3-net": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.7.4.tgz", - "integrity": "sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg==", - "dev": true, - "dependencies": { - "web3-core": "1.7.4", - "web3-core-method": "1.7.4", - "web3-utils": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-http": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", - "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", - "dev": true, - "dependencies": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ipc": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", - "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", - "dev": true, - "dependencies": { - "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", - "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", - "dev": true, - "dependencies": { - "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", - "websocket": "^1.0.32" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-shh": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.4.tgz", - "integrity": "sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "web3-core": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-net": "1.7.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", - "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/web3-utils/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dev": true, - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", - "dev": true - }, - "node_modules/which-pm-runs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", - "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", - "for-each": "^0.3.3", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", - "dev": true, - "bin": { - "window-size": "cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" - }, - "node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dev": true, - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dev": true, - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "dev": true, - "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/xhr-request/node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/xhr-request/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/xhr-request/node_modules/simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dev": true, - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", - "dev": true, - "dependencies": { - "cookiejar": "^2.1.1" - } - }, - "node_modules/xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "dev": true, - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.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": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/yargs/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "devOptional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@aave/core-v3": { - "version": "1.16.2", - "resolved": "https://npm.pkg.github.com/download/@aave/core-v3/1.16.2/c828f6a1f3c43e4e9cf6031fff4ec844f2e6359e", - "integrity": "sha512-oZZ1TZCrN3mIc445etZUbsaTVysa9SMCD/inoNDosM0f0Ulyhz7dT4319VGwt4yGrZRLehdJtpGkzBffqEezMw==", - "dev": true, - "requires": { - "@nomiclabs/hardhat-etherscan": "^2.1.7", - "axios-curlirize": "^1.3.7", - "tmp-promise": "^3.0.2" - } - }, - "@aave/deploy-v3": { - "version": "1.27.0-beta.7", - "resolved": "https://npm.pkg.github.com/download/@aave/deploy-v3/1.27.0-beta.7/cd30b47fbf4e1392255458b0140f1c343cd68c2e", - "integrity": "sha512-KNtHLnzKZi0tLZxHbxbBDdByx71cei9ByeF0a3b09UYSbNOIEh9m0RRiUSKAFSZpsc8A0YJMvl8RbmIIhw6Xjw==", - "dev": true, - "requires": { - "bip39": "^3.0.4", - "defender-relay-client": "^1.11.1" - }, - "dependencies": { - "defender-relay-client": { - "version": "1.26.1", - "resolved": "https://registry.npmjs.org/defender-relay-client/-/defender-relay-client-1.26.1.tgz", - "integrity": "sha512-EoVQqrPS5PlCjCfZPV2wG9TBBezImYD5tf4DV3dbbXaxdTlD6bTcd3AFj4GLZss8EjXnCrQc2JAT5BWMLuQ2UQ==", - "dev": true, - "requires": { - "amazon-cognito-identity-js": "^4.3.3", - "axios": "^0.21.2", - "defender-base-client": "^1.23.0", - "lodash": "^4.17.19", - "node-fetch": "^2.6.0" - } - } - } - }, - "@aave/periphery-v3": { - "version": "1.20.0", - "resolved": "https://npm.pkg.github.com/download/@aave/periphery-v3/1.20.0/d4459879abc4a3f1ab0d0951d4e8e0d9cfab2dd8", - "integrity": "sha512-yf7Voe2DWsT9HcCalFbYe6AtTUOt2Cd8iopv14JIkSfzhCdGW41PuhVjKQgFowkumZP+RtwQTZP27yiFO472JQ==", - "dev": true, - "requires": { - "@aave/core-v3": "1.16.2" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true - }, - "@ensdomains/ens": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", - "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", - "dev": true, - "requires": { - "bluebird": "^3.5.2", - "eth-ens-namehash": "^2.0.8", - "solc": "^0.4.20", - "testrpc": "0.0.1", - "web3-utils": "^1.0.0-beta.31" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "solc": { - "version": "0.4.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", - "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", - "dev": true, - "requires": { - "fs-extra": "^0.30.0", - "memorystream": "^0.3.1", - "require-from-string": "^1.1.0", - "semver": "^5.3.0", - "yargs": "^4.7.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", - "dev": true, - "requires": { - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.1", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" - } - }, - "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } - } - } - }, - "@ensdomains/resolver": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", - "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", - "dev": true - }, - "@ethereum-waffle/chai": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.4.4.tgz", - "integrity": "sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g==", - "dev": true, - "requires": { - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.5.2" - } - }, - "@ethereum-waffle/compiler": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz", - "integrity": "sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==", - "dev": true, - "requires": { - "@resolver-engine/imports": "^0.3.3", - "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^2.0.0", - "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.5.5", - "ethers": "^5.0.1", - "mkdirp": "^0.5.1", - "node-fetch": "^2.6.1", - "solc": "^0.6.3", - "ts-generator": "^0.1.1", - "typechain": "^3.0.0" - }, - "dependencies": { - "@typechain/ethers-v5": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", - "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", - "dev": true, - "requires": { - "ethers": "^5.0.2" - } - }, - "ts-essentials": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", - "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", - "dev": true, - "requires": {} - }, - "typechain": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", - "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", - "dev": true, - "requires": { - "command-line-args": "^4.0.7", - "debug": "^4.1.1", - "fs-extra": "^7.0.0", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "ts-essentials": "^6.0.3", - "ts-generator": "^0.1.1" - } - } - } - }, - "@ethereum-waffle/ens": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.4.4.tgz", - "integrity": "sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg==", - "dev": true, - "requires": { - "@ensdomains/ens": "^0.4.4", - "@ensdomains/resolver": "^0.2.4", - "ethers": "^5.5.2" - } - }, - "@ethereum-waffle/mock-contract": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz", - "integrity": "sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.5.0", - "ethers": "^5.5.2" - } - }, - "@ethereum-waffle/provider": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.4.4.tgz", - "integrity": "sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g==", - "dev": true, - "requires": { - "@ethereum-waffle/ens": "^3.4.4", - "ethers": "^5.5.2", - "ganache-core": "^2.13.2", - "patch-package": "^6.2.2", - "postinstall-postinstall": "^2.1.0" - } - }, - "@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "requires": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - }, - "dependencies": { - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - }, - "dependencies": { - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "requires": { - "@ethereumjs/block": "^3.5.0", - "@types/levelup": "^4.3.0", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.1.1", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - }, - "dependencies": { - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/vm": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.9.3.tgz", - "integrity": "sha512-Ha04TeF8goEglr8eL7hkkYyjhzdZS0PsoRURzYlTF6I0VVId5KjKb0N7MrA8GMgheN+UeTncfTgYx52D/WhEmg==", - "requires": { - "@ethereumjs/block": "^3.6.3", - "@ethereumjs/blockchain": "^5.5.3", - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "async-eventemitter": "^0.2.4", - "core-js-pure": "^3.0.1", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.4", - "rustbn.js": "~0.2.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethersproject/abi": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", - "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", - "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", - "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "@ethersproject/base64": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", - "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", - "requires": { - "@ethersproject/bytes": "^5.6.1" - } - }, - "@ethersproject/basex": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", - "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/properties": "^5.6.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", - "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/constants": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", - "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", - "requires": { - "@ethersproject/bignumber": "^5.6.2" - } - }, - "@ethersproject/contracts": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.2.tgz", - "integrity": "sha512-hguUA57BIKi6WY0kHvZp6PwPlWF87MCeB4B7Z7AbUpTxfFXFdn/3b0GmjZPagIHS+3yhcBJDnuEfU4Xz+Ks/8g==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.6.3", - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.2" - } - }, - "@ethersproject/hash": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", - "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/hdnode": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.2.tgz", - "integrity": "sha512-tERxW8Ccf9CxW2db3WsN01Qao3wFeRsfYY9TCuhmG0xNpl2IO8wgXU3HtWIZ49gUWPggRy4Yg5axU0ACaEKf1Q==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/json-wallets": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.1.tgz", - "integrity": "sha512-KfyJ6Zwz3kGeX25nLihPwZYlDqamO6pfGKNnVMWWfEVVp42lTfCZVXXy5Ie8IZTN0HKwAngpIPi7gk4IJzgmqQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.1", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", - "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" - }, - "@ethersproject/networks": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", - "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.1.tgz", - "integrity": "sha512-k4gRQ+D93zDRPNUfmduNKq065uadC2YjMP/CqwwX5qG6R05f47boq6pLZtV/RnC4NZAYOPH1Cyo54q0c9sshRQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/sha2": "^5.6.1" - } - }, - "@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "requires": { - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/providers": { - "version": "5.6.8", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", - "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/base64": "^5.6.1", - "@ethersproject/basex": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.3", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/web": "^5.6.1", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "@ethersproject/random": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", - "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/rlp": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", - "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/sha2": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", - "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", - "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.1.tgz", - "integrity": "sha512-KWqVLkUUoLBfL1iwdzUVlkNqAUIFMpbbeH0rgCfKmJp0vFtY4AsaN91gHKo9ZZLkC4UOm3cI3BmMV4N53BOq4g==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/sha2": "^5.6.1", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/strings": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", - "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/transactions": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", - "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", - "requires": { - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2" - } - }, - "@ethersproject/units": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.1.tgz", - "integrity": "sha512-rEfSEvMQ7obcx3KWD5EWWx77gqv54K6BKiZzKxkQJqtpriVsICrktIQmKl8ReNToPeIYPnFHpXvKpi068YFZXw==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/constants": "^5.6.1", - "@ethersproject/logger": "^5.6.0" - } - }, - "@ethersproject/wallet": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.2.tgz", - "integrity": "sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.6.1", - "@ethersproject/abstract-signer": "^5.6.2", - "@ethersproject/address": "^5.6.1", - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/hdnode": "^5.6.2", - "@ethersproject/json-wallets": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.1", - "@ethersproject/signing-key": "^5.6.2", - "@ethersproject/transactions": "^5.6.2", - "@ethersproject/wordlists": "^5.6.1" - } - }, - "@ethersproject/web": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", - "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", - "requires": { - "@ethersproject/base64": "^5.6.1", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@ethersproject/wordlists": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.1.tgz", - "integrity": "sha512-wiPRgBpNbNwCQFoCr8bcWO8o5I810cqO6mkdtKfLKFlLxeCWcnzDi4Alu8iyNzlhYuS9npCwivMbRWF19dyblw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/hash": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.1" - } - }, - "@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "@noble/hashes": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz", - "integrity": "sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==" - }, - "@noble/secp256k1": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.6.3.tgz", - "integrity": "sha512-T04e4iTurVy7I8Sw4+c5OSN9/RkPlo1uKxAomtxQNLq8j1uPAqnsqG1bqvY3Jv7c13gyr6dui0zmh/I3+f/JaQ==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@nomiclabs/hardhat-ethers": { - "version": "npm:hardhat-deploy-ethers@0.3.0-beta.13", - "resolved": "https://registry.npmjs.org/hardhat-deploy-ethers/-/hardhat-deploy-ethers-0.3.0-beta.13.tgz", - "integrity": "sha512-PdWVcKB9coqWV1L7JTpfXRCI91Cgwsm7KLmBcwZ8f0COSm1xtABHZTyz3fvF6p42cTnz1VM0QnfDvMFlIRkSNw==", - "dev": true, - "requires": {} - }, - "@nomiclabs/hardhat-etherscan": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz", - "integrity": "sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA==", - "requires": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^5.0.2", - "debug": "^4.1.1", - "fs-extra": "^7.0.1", - "node-fetch": "^2.6.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "@resolver-engine/core": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz", - "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "is-url": "^1.2.4", - "request": "^2.85.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz", - "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==", - "dev": true, - "requires": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/imports": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz", - "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==", - "dev": true, - "requires": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0", - "hosted-git-info": "^2.6.0", - "path-browserify": "^1.0.0", - "url": "^0.11.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/imports-fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz", - "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==", - "dev": true, - "requires": { - "@resolver-engine/fs": "^0.3.3", - "@resolver-engine/imports": "^0.3.3", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==" - }, - "@scure/bip32": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.0.tgz", - "integrity": "sha512-ftTW3kKX54YXLCxH6BB7oEEoJfoE2pIgw7MINKAs5PsS6nqKPuKk1haTF/EuHmYqG330t5GSrdmtRuHaY1a62Q==", - "requires": { - "@noble/hashes": "~1.1.1", - "@noble/secp256k1": "~1.6.0", - "@scure/base": "~1.1.0" - } - }, - "@scure/bip39": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.0.tgz", - "integrity": "sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==", - "requires": { - "@noble/hashes": "~1.1.1", - "@scure/base": "~1.1.0" - } - }, - "@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "requires": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - } - }, - "@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==" - }, - "@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "@solidity-parser/parser": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.3.tgz", - "integrity": "sha512-29g2SZ29HtsqA58pLCtopI1P/cPy5/UAzlcAXO6T/CNJimG6yA8kx4NaseMyJULiC+TEs02Y9/yeHzClqoA0hw==", - "requires": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@tenderly/hardhat-tenderly": { - "version": "1.1.0-beta.5", - "resolved": "https://registry.npmjs.org/@tenderly/hardhat-tenderly/-/hardhat-tenderly-1.1.0-beta.5.tgz", - "integrity": "sha512-NecF6ewefpDyIF/mz0kTZGlPMa+ri/LOAPPqmyRA/oGEZ19BLM0sHdJFObTv8kJnxIJZBHpTkUaeDPp8KcpZsg==", - "dev": true, - "requires": { - "@nomiclabs/hardhat-ethers": "^2.0.1", - "axios": "^0.21.1", - "ethers": "^5.0.24", - "fs-extra": "^9.0.1", - "js-yaml": "^3.14.0" - }, - "dependencies": { - "@nomiclabs/hardhat-ethers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.1.0.tgz", - "integrity": "sha512-vlW90etB3675QWG7tMrHaDoTa7ymMB7irM4DAQ98g8zJoe9YqEggeDnbO6v5b+BLth/ty4vN6Ko/kaqRN1krHw==", - "dev": true, - "requires": {} - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@truffle/error": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@truffle/error/-/error-0.1.0.tgz", - "integrity": "sha512-RbUfp5VreNhsa2Q4YbBjz18rOQI909pG32bghl1hulO7IpvcqTS+C3Ge5cNbiWQ1WGzy1wIeKLW0tmQtHFB7qg==", - "dev": true - }, - "@truffle/interface-adapter": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/@truffle/interface-adapter/-/interface-adapter-0.5.19.tgz", - "integrity": "sha512-x7IZvsyx36DAJCJVZ9gUe1Lh8AhODhJoW7I+lJXIlGxj3EmZbao4/sHo+cN4u9i94yVTyGwYd78NzbP0a/LAog==", - "dev": true, - "requires": { - "bn.js": "^5.1.3", - "ethers": "^4.0.32", - "web3": "1.7.4" - }, - "dependencies": { - "ethers": { - "version": "4.0.49", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", - "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", - "dev": true, - "requires": { - "aes-js": "3.0.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true - }, - "scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", - "dev": true - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", - "dev": true - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "dev": true - } - } - }, - "@truffle/provider": { - "version": "0.2.57", - "resolved": "https://registry.npmjs.org/@truffle/provider/-/provider-0.2.57.tgz", - "integrity": "sha512-O8VxF2uQwa+KB4HDg9lG7uhQ/+AOvchX+1STpQBSSAGfov1+EROM0iRZUNoPm71Pu0C9ji2WmXbNW/COjUMaMA==", - "dev": true, - "requires": { - "@truffle/error": "^0.1.0", - "@truffle/interface-adapter": "^0.5.19", - "debug": "^4.3.1", - "web3": "1.7.4" - } - }, - "@typechain/ethers-v5": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-7.2.0.tgz", - "integrity": "sha512-jfcmlTvaaJjng63QsT49MT6R1HFhtO/TBMWbyzPFSzMmVIqb2tL6prnKBs4ZJrSvmgIXWy+ttSjpaxCTq8D/Tw==", - "dev": true, - "requires": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - } - }, - "@typechain/hardhat": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-2.3.1.tgz", - "integrity": "sha512-BQV8OKQi0KAzLXCdsPO0pZBNQQ6ra8A2ucC26uFX/kquRBtJu1yEyWnVSmtr07b5hyRoJRpzUeINLnyqz4/MAw==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@types/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-q5veSX6zjUy/DlDhR4Y4cU0k2Ar+DT2LUraP00T19WLmTO6Se1djepCCaqU6nQrwcJ5Hyo/CWqxTzrrFg8eqbQ==" - }, - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "@types/chai": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz", - "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==", - "dev": true - }, - "@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==" - }, - "@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "@types/lodash": { - "version": "4.14.182", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.182.tgz", - "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", - "dev": true - }, - "@types/lowdb": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@types/lowdb/-/lowdb-1.0.9.tgz", - "integrity": "sha512-LBRG5EPXFOJDoJc9jACstMhtMP+u+UkPYllBeGQXXKiaHc+uzJs9+/Aynb/5KkX33DtrIiKyzNVTPQc/4RcD6A==", - "dev": true, - "requires": { - "@types/lodash": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "@types/mkdirp": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", - "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/mocha": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-7.0.2.tgz", - "integrity": "sha512-ZvO2tAcjmMi8V/5Z3JsyofMe3hasRcaw88cto5etSVMwVQfeivGAlEYmaQgceUSVYFofVjT+ioHsATjdWcFt1w==", - "dev": true - }, - "@types/node": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.5.tgz", - "integrity": "sha512-90hiq6/VqtQgX8Sp0EzeIsv3r+ellbGj4URKj5j30tLlZvRUpnAe9YbYnjl3pJM93GyXU0tghHhvXHq+5rnCKA==" - }, - "@types/node-fetch": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz", - "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/prettier": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz", - "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "requires": { - "@types/node": "*" - } - }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==" - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "address": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", - "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==", - "dev": true - }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==" - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "amazon-cognito-identity-js": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/amazon-cognito-identity-js/-/amazon-cognito-identity-js-4.6.3.tgz", - "integrity": "sha512-MPVJfirbdmSGo7l4h7Kbn3ms1eJXT5Xq8ly+mCPPi8yAxaxdg7ouMUUNTqtDykoZxIdDLF/P6F3Zbg3dlGKOWg==", - "dev": true, - "requires": { - "buffer": "4.9.2", - "crypto-js": "^4.0.0", - "fast-base64-decode": "^1.0.0", - "isomorphic-unfetch": "^3.0.0", - "js-cookie": "^2.2.1" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "optional": true - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==" - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, - "requires": { - "typical": "^2.6.1" - } - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true - }, - "array.prototype.reduce": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", - "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "requires": { - "async": "^2.4.0" - } - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, - "requires": { - "follow-redirects": "^1.14.0" - } - }, - "axios-curlirize": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/axios-curlirize/-/axios-curlirize-1.3.7.tgz", - "integrity": "sha512-csSsuMyZj1dv1fL0zRPnDAHWrmlISMvK+wx9WJI/igRVDT4VMgbf2AVenaHghFLfI1nQijXUevYEguYV6u5hjA==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - } - } - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true - }, - "bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bip39": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", - "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", - "dev": true, - "requires": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - }, - "dependencies": { - "@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", - "dev": true - } - } - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" - }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "dependencies": { - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" - } - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==", - "dev": true - }, - "buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "devOptional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", - "dev": true - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "cbor": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-5.2.0.tgz", - "integrity": "sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==", - "requires": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" - } - }, - "chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chai-bignumber": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chai-bignumber/-/chai-bignumber-3.0.0.tgz", - "integrity": "sha512-SubOtaSI2AILWTWe2j0c6i2yFT/f9J6UBjeVGDuwDiPLkF/U5+/eTWUE3sbCZ1KgcPF6UJsDVYbIxaYA097MQA==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "dev": true, - "requires": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" - }, - "command-line-args": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", - "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "find-replace": "^1.0.3", - "typical": "^2.6.1" - } - }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" - }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", - "dev": true, - "requires": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", - "dev": true - }, - "core-js-pure": { - "version": "3.24.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.24.0.tgz", - "integrity": "sha512-uzMmW8cRh7uYw4JQtzqvGWRyC2T5+4zipQLQdi2FmiRqP83k3d6F3stv2iAlNhOs6cXN401FCD5TL0vvleuHgA==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "crypto-js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", - "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==", - "dev": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "death": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "defender-base-client": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/defender-base-client/-/defender-base-client-1.25.0.tgz", - "integrity": "sha512-42a9zEnif94mCkM1N19C+6k7R1QUqNq4FIaS/jVQ5kSJaSmv3FTmLT41/6qHXev76VYp87EyKqbDA9biGhgx/Q==", - "dev": true, - "requires": { - "amazon-cognito-identity-js": "^4.3.3", - "axios": "^0.21.2", - "lodash": "^4.17.19", - "node-fetch": "^2.6.0" - } - }, - "defender-relay-client": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/defender-relay-client/-/defender-relay-client-1.7.0.tgz", - "integrity": "sha512-NYHP0sW/IusDPMMxSxo7DG6mfTs6/up4AFhW5ww7l9uwszzxc5rhvCCfqHCeB9FrqkoX5G1DdDkHWHdSVwANVA==", - "dev": true, - "requires": { - "amazon-cognito-identity-js": "^4.3.3", - "axios": "^0.19.2", - "defender-base-client": "^1.7.0", - "lodash": "^4.17.19", - "node-fetch": "^2.6.0" - }, - "dependencies": { - "axios": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", - "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", - "dev": true, - "requires": { - "follow-redirects": "1.5.10" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "dev": true, - "requires": { - "debug": "=3.1.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", - "dev": true, - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dir-to-object": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-to-object/-/dir-to-object-2.0.0.tgz", - "integrity": "sha512-sXs0JKIhymON7T1UZuO2Ud6VTNAx/VTBXIl4+3mjb2RgfOpt+hectX0x04YqPOPdkeOAKoJuKqwqnXXURNPNEA==", - "dev": true - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", - "dev": true - }, - "duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "encode-utf8": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", - "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "dependencies": { - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", - "dev": true, - "requires": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", - "dev": true, - "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" - }, - "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true - } - } - }, - "eslint-plugin-prettier": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz", - "integrity": "sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA==", - "dev": true, - "requires": { - "fast-diff": "^1.1.1", - "jest-docblock": "^21.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esprima-extract-comments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/esprima-extract-comments/-/esprima-extract-comments-1.1.0.tgz", - "integrity": "sha512-sBQUnvJwpeE9QnPrxh7dpI/dp67erYG4WXEAreAMoelPRpMR7NWb4YtwRPn9b+H1uLQKl/qS8WYmyaljTpjIsw==", - "dev": true, - "requires": { - "esprima": "^4.0.0" - } - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", - "dev": true, - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true - } - } - }, - "eth-gas-reporter": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz", - "integrity": "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.0.0-beta.146", - "@solidity-parser/parser": "^0.14.0", - "cli-table3": "^0.5.0", - "colors": "1.4.0", - "ethereum-cryptography": "^1.0.3", - "ethers": "^4.0.40", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^7.1.1", - "req-cwd": "^2.0.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "sha1": "^1.1.1", - "sync-request": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - } - }, - "ethereum-cryptography": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", - "dev": true, - "requires": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" - } - }, - "ethers": { - "version": "4.0.49", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", - "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", - "dev": true, - "requires": { - "aes-js": "3.0.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true - }, - "scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", - "dev": true - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", - "dev": true - } - } - }, - "eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - } - } - }, - "eth-sig-util": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-2.5.3.tgz", - "integrity": "sha512-KpXbCKmmBUNUTGh9MRKmNkIPietfhzBqqYqysDavLseIiMUGl95k6UcPEkALAZlj41e9E6yioYXc1PC333RKqw==", - "dev": true, - "requires": { - "buffer": "^5.2.1", - "elliptic": "^6.4.0", - "ethereumjs-abi": "0.6.5", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.0", - "tweetnacl-util": "^0.15.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "dev": true, - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereum-waffle": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.2.0.tgz", - "integrity": "sha512-XmLvbGE47u+6haOT/vBwx/2ifemlKv4Uop1ebnccnBXD0xmTK2Qnk/FonwHtkHX+cUxj+Ax+3c/1fYDogEvcZw==", - "dev": true, - "requires": { - "@ethereum-waffle/chai": "^3.2.0", - "@ethereum-waffle/compiler": "^3.2.0", - "@ethereum-waffle/mock-contract": "^3.2.0", - "@ethereum-waffle/provider": "^3.2.0", - "ethers": "^5.0.1" - } - }, - "ethereumjs-abi": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz", - "integrity": "sha512-rCjJZ/AE96c/AAZc6O3kaog4FhOsAViaysBxqJNy2+LHP0ttH0zkZ7nXdVHOAyt6lFwLO0nlCwWszysG/ao1+g==", - "dev": true, - "requires": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^4.3.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereumjs-util": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.1.tgz", - "integrity": "sha512-WrckOZ7uBnei4+AKimpuF1B3Fv25OmoRgmYCpGsP7u8PFxXAmAgiJSYT2kRWnt6fVIlKaQlZvuwXp7PIrmn3/w==", - "dev": true, - "requires": { - "bn.js": "^4.8.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.0.0" - } - } - } - }, - "ethereumjs-util": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.0.2.tgz", - "integrity": "sha512-ATAP02eJLpAlWGfiKQddNrRfZpwXiTFhRN2EM/yLXMCdBW/xjKYblNKcx8GLzzrjXg0ymotck+lam1nuV90arQ==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethjs-util": "0.1.6", - "keccak": "^3.0.0", - "rlp": "^2.2.4", - "secp256k1": "^4.0.1" - } - }, - "ethers": { - "version": "5.6.9", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", - "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", - "dev": true, - "requires": { - "@ethersproject/abi": "5.6.4", - "@ethersproject/abstract-provider": "5.6.1", - "@ethersproject/abstract-signer": "5.6.2", - "@ethersproject/address": "5.6.1", - "@ethersproject/base64": "5.6.1", - "@ethersproject/basex": "5.6.1", - "@ethersproject/bignumber": "5.6.2", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.1", - "@ethersproject/contracts": "5.6.2", - "@ethersproject/hash": "5.6.1", - "@ethersproject/hdnode": "5.6.2", - "@ethersproject/json-wallets": "5.6.1", - "@ethersproject/keccak256": "5.6.1", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.4", - "@ethersproject/pbkdf2": "5.6.1", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.8", - "@ethersproject/random": "5.6.1", - "@ethersproject/rlp": "5.6.1", - "@ethersproject/sha2": "5.6.1", - "@ethersproject/signing-key": "5.6.2", - "@ethersproject/solidity": "5.6.1", - "@ethersproject/strings": "5.6.1", - "@ethersproject/transactions": "5.6.2", - "@ethersproject/units": "5.6.1", - "@ethersproject/wallet": "5.6.2", - "@ethersproject/web": "5.6.1", - "@ethersproject/wordlists": "5.6.1" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dev": true, - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - } - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dev": true, - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extract-comments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/extract-comments/-/extract-comments-1.1.0.tgz", - "integrity": "sha512-dzbZV2AdSSVW/4E7Ti5hZdHWbA+Z80RJsJhr5uiL10oyjl/gy7/o+HI1HwK4/WSZhlq4SNKU3oUzXlM13Qx02Q==", - "dev": true, - "requires": { - "esprima-extract-comments": "^1.1.0", - "parse-code-context": "^1.0.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true - }, - "fast-base64-decode": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", - "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "find-replace": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", - "integrity": "sha512-KrUnjzDCD9426YnCP56zGYy/eieTnhtK6Vn++j+JJzmlsWWwEkDnsyVF575spT6HJ6Ow9tlbT3TQTDsa+O4UWA==", - "dev": true, - "requires": { - "array-back": "^1.0.4", - "test-value": "^2.1.0" - }, - "dependencies": { - "array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", - "dev": true, - "requires": { - "typical": "^2.6.0" - } - } - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "requires": { - "locate-path": "^2.0.0" - } - }, - "find-versions": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", - "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", - "dev": true, - "requires": { - "semver-regex": "^2.0.0" - } - }, - "find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "requires": { - "micromatch": "^4.0.2" - } - }, - "flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - } - }, - "fmix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", - "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", - "dev": true, - "requires": { - "imul": "^1.0.0" - } - }, - "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "ganache-cli": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.12.2.tgz", - "integrity": "sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw==", - "dev": true, - "requires": { - "ethereumjs-util": "6.2.1", - "source-map-support": "0.5.12", - "yargs": "13.2.4" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "bundled": true, - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "14.11.2", - "bundled": true, - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "ansi-regex": { - "version": "4.1.0", - "bundled": true, - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "bundled": true, - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "base-x": { - "version": "3.0.8", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "blakejs": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "bn.js": { - "version": "4.11.9", - "bundled": true, - "dev": true - }, - "brorand": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer-from": { - "version": "1.1.1", - "bundled": true, - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "bundled": true, - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "bundled": true, - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cliui": { - "version": "5.0.0", - "bundled": true, - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "color-convert": { - "version": "1.9.3", - "bundled": true, - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "bundled": true, - "dev": true - }, - "create-hash": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "bundled": true, - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "decamelize": { - "version": "1.2.0", - "bundled": true, - "dev": true - }, - "elliptic": { - "version": "6.5.3", - "bundled": true, - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "bundled": true, - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "bundled": true, - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "bundled": true, - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "ethjs-util": { - "version": "0.1.6", - "bundled": true, - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "evp_bytestokey": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "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" - } - }, - "find-up": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "bundled": true, - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "bundled": true, - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "hash-base": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "is-hex-prefixed": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "isexe": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "keccak": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "lcid": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "bundled": true, - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mem": { - "version": "4.3.0", - "bundled": true, - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "bundled": true, - "dev": true - }, - "node-gyp-build": { - "version": "4.2.3", - "bundled": true, - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-locale": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "bundled": true, - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "bundled": true, - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "bundled": true, - "dev": true - }, - "path-key": { - "version": "2.0.1", - "bundled": true, - "dev": true - }, - "pbkdf2": { - "version": "3.1.1", - "bundled": true, - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "pump": { - "version": "3.0.0", - "bundled": true, - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "randombytes": { - "version": "2.1.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "ripemd160": { - "version": "2.0.2", - "bundled": true, - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.6", - "bundled": true, - "dev": true, - "requires": { - "bn.js": "^4.11.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "bundled": true, - "dev": true - }, - "scrypt-js": { - "version": "3.0.1", - "bundled": true, - "dev": true - }, - "secp256k1": { - "version": "4.0.2", - "bundled": true, - "dev": true, - "requires": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semver": { - "version": "5.7.1", - "bundled": true, - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "bundled": true, - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "bundled": true, - "dev": true - }, - "source-map": { - "version": "0.6.1", - "bundled": true, - "dev": true - }, - "source-map-support": { - "version": "0.5.12", - "bundled": true, - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "3.1.0", - "bundled": true, - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-eof": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "strip-hex-prefix": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "which": { - "version": "1.3.1", - "bundled": true, - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "bundled": true, - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "bundled": true, - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "y18n": { - "version": "4.0.0", - "bundled": true, - "dev": true - }, - "yargs": { - "version": "13.2.4", - "bundled": true, - "dev": true, - "requires": { - "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-parser": { - "version": "13.1.2", - "bundled": true, - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "ganache-core": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", - "integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==", - "dev": true, - "requires": { - "abstract-leveldown": "3.0.0", - "async": "2.6.2", - "bip39": "2.5.0", - "cachedown": "1.0.0", - "clone": "2.1.2", - "debug": "3.2.6", - "encoding-down": "5.0.4", - "eth-sig-util": "3.0.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-account": "3.0.0", - "ethereumjs-block": "2.2.2", - "ethereumjs-common": "1.5.0", - "ethereumjs-tx": "2.1.2", - "ethereumjs-util": "6.2.1", - "ethereumjs-vm": "4.2.0", - "ethereumjs-wallet": "0.6.5", - "heap": "0.2.6", - "keccak": "3.0.1", - "level-sublevel": "6.6.4", - "levelup": "3.1.1", - "lodash": "4.17.20", - "lru-cache": "5.1.1", - "merkle-patricia-tree": "3.0.0", - "patch-package": "6.2.2", - "seedrandom": "3.0.1", - "source-map-support": "0.5.12", - "tmp": "0.1.0", - "web3": "1.2.11", - "web3-provider-engine": "14.2.1", - "websocket": "1.0.32" - }, - "dependencies": { - "@ethersproject/abi": { - "version": "5.0.0-beta.153", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/address": ">=5.0.0-beta.128", - "@ethersproject/bignumber": ">=5.0.0-beta.130", - "@ethersproject/bytes": ">=5.0.0-beta.129", - "@ethersproject/constants": ">=5.0.0-beta.128", - "@ethersproject/hash": ">=5.0.0-beta.128", - "@ethersproject/keccak256": ">=5.0.0-beta.127", - "@ethersproject/logger": ">=5.0.0-beta.129", - "@ethersproject/properties": ">=5.0.0-beta.131", - "@ethersproject/strings": ">=5.0.0-beta.130" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.0.8", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/networks": "^5.0.7", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/transactions": "^5.0.9", - "@ethersproject/web": "^5.0.12" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.0.10", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/abstract-provider": "^5.0.8", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7" - } - }, - "@ethersproject/address": { - "version": "5.0.9", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/rlp": "^5.0.7" - } - }, - "@ethersproject/base64": { - "version": "5.0.7", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/bytes": "^5.0.9" - } - }, - "@ethersproject/bignumber": { - "version": "5.0.13", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "bn.js": "^4.4.0" - } - }, - "@ethersproject/bytes": { - "version": "5.0.9", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/constants": { - "version": "5.0.8", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/bignumber": "^5.0.13" - } - }, - "@ethersproject/hash": { - "version": "5.0.10", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/abstract-signer": "^5.0.10", - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, - "@ethersproject/keccak256": { - "version": "5.0.7", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "js-sha3": "0.5.7" - } - }, - "@ethersproject/logger": { - "version": "5.0.8", - "dev": true, - "optional": true - }, - "@ethersproject/networks": { - "version": "5.0.7", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/properties": { - "version": "5.0.7", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/rlp": { - "version": "5.0.7", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/signing-key": { - "version": "5.0.8", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "elliptic": "6.5.3" - } - }, - "@ethersproject/strings": { - "version": "5.0.8", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/logger": "^5.0.8" - } - }, - "@ethersproject/transactions": { - "version": "5.0.9", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/address": "^5.0.9", - "@ethersproject/bignumber": "^5.0.13", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/constants": "^5.0.8", - "@ethersproject/keccak256": "^5.0.7", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/rlp": "^5.0.7", - "@ethersproject/signing-key": "^5.0.8" - } - }, - "@ethersproject/web": { - "version": "5.0.12", - "dev": true, - "optional": true, - "requires": { - "@ethersproject/base64": "^5.0.7", - "@ethersproject/bytes": "^5.0.9", - "@ethersproject/logger": "^5.0.8", - "@ethersproject/properties": "^5.0.7", - "@ethersproject/strings": "^5.0.8" - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "dev": true, - "optional": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "dev": true, - "optional": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@types/bn.js": { - "version": "4.11.6", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "14.14.20", - "dev": true - }, - "@types/pbkdf2": { - "version": "3.1.0", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/secp256k1": { - "version": "4.0.1", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true - }, - "abstract-leveldown": { - "version": "3.0.0", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "accepts": { - "version": "1.3.7", - "dev": true, - "optional": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "aes-js": { - "version": "3.1.2", - "dev": true, - "optional": true - }, - "ajv": { - "version": "6.12.6", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-styles": { - "version": "3.2.1", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "arr-diff": { - "version": "4.0.0", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "dev": true - }, - "array-flatten": { - "version": "1.1.1", - "dev": true, - "optional": true - }, - "array-unique": { - "version": "0.3.2", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "asn1.js": { - "version": "5.4.1", - "dev": true, - "optional": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "dev": true - }, - "async": { - "version": "2.6.2", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "dev": true, - "requires": { - "async": "^2.4.0" - } - }, - "async-limiter": { - "version": "1.0.1", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "dev": true - }, - "atob": { - "version": "2.1.2", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "dev": true - }, - "aws4": { - "version": "1.11.0", - "dev": true - }, - "babel-code-frame": { - "version": "6.26.0", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "dev": true, - "requires": { - "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" - } - }, - "js-tokens": { - "version": "3.0.2", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "dev": true - } - } - }, - "babel-core": { - "version": "6.26.3", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "json5": { - "version": "0.5.1", - "dev": true - }, - "ms": { - "version": "2.0.0", - "dev": true - }, - "slash": { - "version": "1.0.0", - "dev": true - } - } - }, - "babel-generator": { - "version": "6.26.1", - "dev": true, - "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "dev": true - } - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helpers": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-messages": { - "version": "6.23.0", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "dev": true - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "dev": true, - "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "dev": true, - "requires": { - "regenerator-transform": "^0.10.0" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "babel-preset-env": { - "version": "1.7.0", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "dev": true - } - } - }, - "babel-register": { - "version": "6.26.0", - "dev": true, - "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - }, - "dependencies": { - "source-map-support": { - "version": "0.4.18", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - } - } - }, - "babel-runtime": { - "version": "6.26.0", - "dev": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "babel-template": { - "version": "6.26.0", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "babel-traverse": { - "version": "6.26.0", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "globals": { - "version": "9.18.0", - "dev": true - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "babel-types": { - "version": "6.26.0", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, - "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "dev": true - } - } - }, - "babelify": { - "version": "7.3.0", - "dev": true, - "requires": { - "babel-core": "^6.0.14", - "object-assign": "^4.0.0" - } - }, - "babylon": { - "version": "6.18.0", - "dev": true - }, - "backoff": { - "version": "2.5.0", - "dev": true, - "requires": { - "precond": "0.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "dev": true - }, - "base": { - "version": "0.11.2", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "base-x": { - "version": "3.0.8", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "dev": true - } - } - }, - "bignumber.js": { - "version": "9.0.1", - "dev": true, - "optional": true - }, - "bip39": { - "version": "2.5.0", - "dev": true, - "requires": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" - } - }, - "blakejs": { - "version": "1.1.0", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "dev": true, - "optional": true - }, - "bn.js": { - "version": "4.11.9", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "dev": true, - "optional": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.7.0", - "dev": true, - "optional": true - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "dev": true, - "optional": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "dev": true, - "optional": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "dev": true, - "optional": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3", - "dev": true, - "optional": true - } - } - }, - "browserify-sign": { - "version": "4.2.1", - "dev": true, - "optional": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "3.6.0", - "dev": true, - "optional": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "browserslist": { - "version": "3.2.8", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - } - }, - "bs58": { - "version": "4.0.1", - "dev": true, - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "dev": true, - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "5.7.1", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-from": { - "version": "1.1.1", - "dev": true - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "dev": true, - "optional": true - }, - "buffer-xor": { - "version": "1.0.3", - "dev": true - }, - "bufferutil": { - "version": "4.0.3", - "dev": true, - "requires": { - "node-gyp-build": "^4.2.0" - } - }, - "bytes": { - "version": "3.1.0", - "dev": true, - "optional": true - }, - "bytewise": { - "version": "1.1.0", - "dev": true, - "requires": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" - } - }, - "bytewise-core": { - "version": "1.2.3", - "dev": true, - "requires": { - "typewise-core": "^1.2" - } - }, - "cache-base": { - "version": "1.0.1", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "cacheable-request": { - "version": "6.1.0", - "dev": true, - "optional": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "dev": true, - "optional": true - } - } - }, - "cachedown": { - "version": "1.0.0", - "dev": true, - "requires": { - "abstract-leveldown": "^2.4.1", - "lru-cache": "^3.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "lru-cache": { - "version": "3.2.0", - "dev": true, - "requires": { - "pseudomap": "^1.0.1" - } - } - } - }, - "call-bind": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caniuse-lite": { - "version": "1.0.30001174", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "checkpoint-store": { - "version": "1.1.0", - "dev": true, - "requires": { - "functional-red-black-tree": "^1.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "dev": true, - "optional": true - }, - "ci-info": { - "version": "2.0.0", - "dev": true - }, - "cids": { - "version": "0.7.5", - "dev": true, - "optional": true, - "requires": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "dependencies": { - "multicodec": { - "version": "1.0.4", - "dev": true, - "optional": true, - "requires": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - } - } - }, - "cipher-base": { - "version": "1.0.4", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-is": { - "version": "1.1.0", - "dev": true, - "optional": true - }, - "class-utils": { - "version": "0.3.6", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "dev": true - } - } - }, - "clone": { - "version": "2.1.2", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "dev": true, - "optional": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "content-disposition": { - "version": "0.5.3", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "optional": true - } - } - }, - "content-hash": { - "version": "2.5.2", - "dev": true, - "optional": true, - "requires": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "content-type": { - "version": "1.0.4", - "dev": true, - "optional": true - }, - "convert-source-map": { - "version": "1.7.0", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true - } - } - }, - "cookie": { - "version": "0.4.0", - "dev": true, - "optional": true - }, - "cookie-signature": { - "version": "1.0.6", - "dev": true, - "optional": true - }, - "cookiejar": { - "version": "2.1.2", - "dev": true, - "optional": true - }, - "copy-descriptor": { - "version": "0.1.1", - "dev": true - }, - "core-js": { - "version": "2.6.12", - "dev": true - }, - "core-js-pure": { - "version": "3.8.2", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "dev": true - }, - "cors": { - "version": "2.8.5", - "dev": true, - "optional": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "create-ecdh": { - "version": "4.0.4", - "dev": true, - "optional": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "create-hash": { - "version": "1.2.0", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-fetch": { - "version": "2.2.3", - "dev": true, - "requires": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - } - }, - "crypto-browserify": { - "version": "3.12.0", - "dev": true, - "optional": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "d": { - "version": "1.0.1", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "3.2.6", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "dev": true - }, - "decompress-response": { - "version": "3.3.0", - "dev": true, - "optional": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-equal": { - "version": "1.1.1", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "dev": true, - "optional": true - }, - "deferred-leveldown": { - "version": "4.0.2", - "dev": true, - "requires": { - "abstract-leveldown": "~5.0.0", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "define-properties": { - "version": "1.1.3", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "defined": { - "version": "1.0.0", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "dev": true - }, - "depd": { - "version": "1.1.2", - "dev": true, - "optional": true - }, - "des.js": { - "version": "1.0.1", - "dev": true, - "optional": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "dev": true, - "optional": true - }, - "detect-indent": { - "version": "4.0.0", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "dev": true, - "optional": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "dom-walk": { - "version": "0.1.2", - "dev": true - }, - "dotignore": { - "version": "0.1.2", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "duplexer3": { - "version": "0.1.4", - "dev": true, - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "dev": true, - "optional": true - }, - "electron-to-chromium": { - "version": "1.3.636", - "dev": true - }, - "elliptic": { - "version": "6.5.3", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "encodeurl": { - "version": "1.0.2", - "dev": true, - "optional": true - }, - "encoding": { - "version": "0.1.13", - "dev": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "encoding-down": { - "version": "5.0.4", - "dev": true, - "requires": { - "abstract-leveldown": "^5.0.0", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "errno": { - "version": "0.1.8", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-abstract": { - "version": "1.18.0-next.1", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escape-html": { - "version": "1.0.3", - "dev": true, - "optional": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "dev": true - }, - "etag": { - "version": "1.8.1", - "dev": true, - "optional": true - }, - "eth-block-tracker": { - "version": "3.0.1", - "dev": true, - "requires": { - "eth-query": "^2.1.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.3", - "ethjs-util": "^0.1.3", - "json-rpc-engine": "^3.6.0", - "pify": "^2.3.0", - "tape": "^4.6.3" - }, - "dependencies": { - "ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "pify": { - "version": "2.3.0", - "dev": true - } - } - }, - "eth-ens-namehash": { - "version": "2.0.8", - "dev": true, - "optional": true, - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "eth-json-rpc-infura": { - "version": "3.2.1", - "dev": true, - "requires": { - "cross-fetch": "^2.1.1", - "eth-json-rpc-middleware": "^1.5.0", - "json-rpc-engine": "^3.4.0", - "json-rpc-error": "^2.0.0" - } - }, - "eth-json-rpc-middleware": { - "version": "1.6.0", - "dev": true, - "requires": { - "async": "^2.5.0", - "eth-query": "^2.1.2", - "eth-tx-summary": "^3.1.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.1.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^3.6.0", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "tape": "^4.6.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereum-common": { - "version": "0.2.0", - "dev": true - } - } - }, - "ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "isarray": { - "version": "0.0.1", - "dev": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true - }, - "semver": { - "version": "5.4.1", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true - } - } - }, - "eth-lib": { - "version": "0.1.29", - "dev": true, - "optional": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "eth-query": { - "version": "2.1.2", - "dev": true, - "requires": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "eth-sig-util": { - "version": "3.0.0", - "dev": true, - "requires": { - "buffer": "^5.2.1", - "elliptic": "^6.4.0", - "ethereumjs-abi": "0.6.5", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.0", - "tweetnacl-util": "^0.15.0" - }, - "dependencies": { - "ethereumjs-abi": { - "version": "0.6.5", - "dev": true, - "requires": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^4.3.0" - }, - "dependencies": { - "ethereumjs-util": { - "version": "4.5.1", - "dev": true, - "requires": { - "bn.js": "^4.8.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.0.0" - } - } - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "eth-tx-summary": { - "version": "3.2.4", - "dev": true, - "requires": { - "async": "^2.1.2", - "clone": "^2.0.0", - "concat-stream": "^1.5.1", - "end-of-stream": "^1.1.0", - "eth-query": "^2.0.2", - "ethereumjs-block": "^1.4.1", - "ethereumjs-tx": "^1.1.1", - "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "^2.6.0", - "through2": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereum-common": { - "version": "0.2.0", - "dev": true - } - } - }, - "ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "isarray": { - "version": "0.0.1", - "dev": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true - }, - "semver": { - "version": "5.4.1", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true - } - } - }, - "ethashjs": { - "version": "0.0.8", - "dev": true, - "requires": { - "async": "^2.1.2", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.0.2", - "miller-rabin": "^4.0.0" - }, - "dependencies": { - "bn.js": { - "version": "5.1.3", - "dev": true - }, - "buffer-xor": { - "version": "2.0.2", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-util": { - "version": "7.0.7", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.4" - } - } - } - }, - "ethereum-bloom-filters": { - "version": "1.0.7", - "dev": true, - "optional": true, - "requires": { - "js-sha3": "^0.8.0" - }, - "dependencies": { - "js-sha3": { - "version": "0.8.0", - "dev": true, - "optional": true - } - } - }, - "ethereum-common": { - "version": "0.0.18", - "dev": true - }, - "ethereum-cryptography": { - "version": "0.1.3", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "dev": true, - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-account": { - "version": "3.0.0", - "dev": true, - "requires": { - "ethereumjs-util": "^6.0.0", - "rlp": "^2.2.1", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "isarray": { - "version": "0.0.1", - "dev": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true - }, - "semver": { - "version": "5.4.1", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true - } - } - }, - "ethereumjs-blockchain": { - "version": "4.0.4", - "dev": true, - "requires": { - "async": "^2.6.1", - "ethashjs": "~0.0.7", - "ethereumjs-block": "~2.2.2", - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.1.0", - "flow-stoplight": "^1.0.0", - "level-mem": "^3.0.1", - "lru-cache": "^5.1.1", - "rlp": "^2.2.2", - "semaphore": "^1.1.0" - } - }, - "ethereumjs-common": { - "version": "1.5.0", - "dev": true - }, - "ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "ethereumjs-vm": { - "version": "4.2.0", - "dev": true, - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "core-js-pure": "^3.0.1", - "ethereumjs-account": "^3.0.0", - "ethereumjs-block": "^2.2.2", - "ethereumjs-blockchain": "^4.0.3", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.2", - "ethereumjs-util": "^6.2.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1", - "util.promisify": "^1.0.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "isarray": { - "version": "0.0.1", - "dev": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true - }, - "semver": { - "version": "5.4.1", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true - } - } - }, - "ethereumjs-wallet": { - "version": "0.6.5", - "dev": true, - "optional": true, - "requires": { - "aes-js": "^3.1.1", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^6.0.0", - "randombytes": "^2.0.6", - "safe-buffer": "^5.1.2", - "scryptsy": "^1.2.1", - "utf8": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "dev": true, - "optional": true, - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "dev": true, - "optional": true - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "eventemitter3": { - "version": "4.0.4", - "dev": true, - "optional": true - }, - "events": { - "version": "3.2.0", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "expand-brackets": { - "version": "2.1.4", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "dev": true - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "express": { - "version": "4.17.1", - "dev": true, - "optional": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.7.0", - "dev": true, - "optional": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "optional": true - } - } - }, - "ext": { - "version": "1.4.0", - "dev": true, - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.1.0", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "extglob": { - "version": "2.0.4", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "dev": true - } - } - }, - "extsprintf": { - "version": "1.3.0", - "dev": true - }, - "fake-merkle-patricia-tree": { - "version": "1.0.1", - "dev": true, - "requires": { - "checkpoint-store": "^1.1.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true - }, - "fetch-ponyfill": { - "version": "4.1.0", - "dev": true, - "requires": { - "node-fetch": "~1.7.1" - }, - "dependencies": { - "is-stream": { - "version": "1.1.0", - "dev": true - }, - "node-fetch": { - "version": "1.7.3", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true - } - } - }, - "find-yarn-workspace-root": { - "version": "1.2.1", - "dev": true, - "requires": { - "fs-extra": "^4.0.3", - "micromatch": "^3.1.4" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fs-extra": { - "version": "4.0.3", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "flow-stoplight": { - "version": "1.0.0", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "dev": true - }, - "form-data": { - "version": "2.3.3", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "dev": true, - "optional": true - }, - "fragment-cache": { - "version": "0.2.1", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "dev": true, - "optional": true - }, - "fs-extra": { - "version": "7.0.1", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "dev": true - }, - "get-intrinsic": { - "version": "1.0.2", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "5.2.0", - "dev": true, - "optional": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "global": { - "version": "4.4.0", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "got": { - "version": "9.6.0", - "dev": true, - "optional": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "dev": true, - "optional": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, - "graceful-fs": { - "version": "4.2.4", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "dev": true - } - } - }, - "has-flag": { - "version": "3.0.0", - "dev": true - }, - "has-symbol-support-x": { - "version": "1.4.2", - "dev": true, - "optional": true - }, - "has-symbols": { - "version": "1.0.1", - "dev": true - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "dev": true, - "optional": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } - }, - "has-value": { - "version": "1.0.0", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "hash.js": { - "version": "1.1.7", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "heap": { - "version": "0.2.6", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "home-or-tmp": { - "version": "2.0.0", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "dev": true, - "optional": true - }, - "http-errors": { - "version": "1.7.2", - "dev": true, - "optional": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "dev": true, - "optional": true - } - } - }, - "http-https": { - "version": "1.0.0", - "dev": true, - "optional": true - }, - "http-signature": { - "version": "1.2.0", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "dev": true, - "optional": true, - "requires": { - "punycode": "2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.0", - "dev": true, - "optional": true - } - } - }, - "ieee754": { - "version": "1.2.1", - "dev": true - }, - "immediate": { - "version": "3.2.3", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "1.9.1", - "dev": true, - "optional": true - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-arguments": { - "version": "1.1.0", - "dev": true, - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.2", - "dev": true - }, - "is-ci": { - "version": "2.0.0", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-date-object": { - "version": "1.0.2", - "dev": true - }, - "is-descriptor": { - "version": "1.0.2", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-finite": { - "version": "1.1.0", - "dev": true - }, - "is-fn": { - "version": "1.0.0", - "dev": true - }, - "is-function": { - "version": "1.0.2", - "dev": true - }, - "is-hex-prefixed": { - "version": "1.0.0", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "dev": true - }, - "is-object": { - "version": "1.0.2", - "dev": true, - "optional": true - }, - "is-plain-obj": { - "version": "1.1.0", - "dev": true, - "optional": true - }, - "is-plain-object": { - "version": "2.0.4", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.1", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-retry-allowed": { - "version": "1.2.0", - "dev": true, - "optional": true - }, - "is-symbol": { - "version": "1.0.3", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "dev": true - }, - "isurl": { - "version": "1.0.0", - "dev": true, - "optional": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, - "js-sha3": { - "version": "0.5.7", - "dev": true, - "optional": true - }, - "js-tokens": { - "version": "4.0.0", - "dev": true - }, - "jsbn": { - "version": "0.1.1", - "dev": true - }, - "json-buffer": { - "version": "3.0.0", - "dev": true, - "optional": true - }, - "json-rpc-engine": { - "version": "3.8.0", - "dev": true, - "requires": { - "async": "^2.0.1", - "babel-preset-env": "^1.7.0", - "babelify": "^7.3.0", - "json-rpc-error": "^2.0.0", - "promise-to-callback": "^1.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "json-rpc-error": { - "version": "2.0.0", - "dev": true, - "requires": { - "inherits": "^2.0.1" - } - }, - "json-rpc-random-id": { - "version": "1.0.1", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonify": { - "version": "0.0.0", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "keccak": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "keyv": { - "version": "3.1.0", - "dev": true, - "optional": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "kind-of": { - "version": "6.0.3", - "dev": true - }, - "klaw-sync": { - "version": "6.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11" - } - }, - "level-codec": { - "version": "9.0.2", - "dev": true, - "requires": { - "buffer": "^5.6.0" - } - }, - "level-errors": { - "version": "2.0.1", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "2.0.3", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.5", - "xtend": "^4.0.0" - } - }, - "level-mem": { - "version": "3.0.1", - "dev": true, - "requires": { - "level-packager": "~4.0.0", - "memdown": "~3.0.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "5.0.0", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true - }, - "memdown": { - "version": "3.0.0", - "dev": true, - "requires": { - "abstract-leveldown": "~5.0.0", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true - } - } - }, - "level-packager": { - "version": "4.0.1", - "dev": true, - "requires": { - "encoding-down": "~5.0.0", - "levelup": "^3.0.0" - } - }, - "level-post": { - "version": "1.0.7", - "dev": true, - "requires": { - "ltgt": "^2.1.2" - } - }, - "level-sublevel": { - "version": "6.6.4", - "dev": true, - "requires": { - "bytewise": "~1.1.0", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "level-iterator-stream": "^2.0.3", - "ltgt": "~2.1.1", - "pull-defer": "^0.2.2", - "pull-level": "^2.0.3", - "pull-stream": "^3.6.8", - "typewiselite": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "level-ws": { - "version": "1.0.0", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.8", - "xtend": "^4.0.1" - } - }, - "levelup": { - "version": "3.1.1", - "dev": true, - "requires": { - "deferred-leveldown": "~4.0.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~3.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "level-iterator-stream": { - "version": "3.0.1", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "xtend": "^4.0.0" - } - } - } - }, - "lodash": { - "version": "4.17.20", - "dev": true - }, - "looper": { - "version": "2.0.0", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "dev": true, - "optional": true - }, - "lru-cache": { - "version": "5.1.1", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "ltgt": { - "version": "2.1.3", - "dev": true - }, - "map-cache": { - "version": "0.2.2", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "dev": true, - "optional": true - }, - "merge-descriptors": { - "version": "1.0.1", - "dev": true, - "optional": true - }, - "merkle-patricia-tree": { - "version": "3.0.0", - "dev": true, - "requires": { - "async": "^2.6.1", - "ethereumjs-util": "^5.2.0", - "level-mem": "^3.0.1", - "level-ws": "^1.0.0", - "readable-stream": "^3.0.6", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "methods": { - "version": "1.1.2", - "dev": true, - "optional": true - }, - "miller-rabin": { - "version": "4.0.1", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - } - }, - "mime": { - "version": "1.6.0", - "dev": true, - "optional": true - }, - "mime-db": { - "version": "1.45.0", - "dev": true - }, - "mime-types": { - "version": "2.1.28", - "dev": true, - "requires": { - "mime-db": "1.45.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "dev": true, - "optional": true - }, - "min-document": { - "version": "2.19.0", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "dev": true - }, - "minizlib": { - "version": "1.3.3", - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - }, - "dependencies": { - "minipass": { - "version": "2.9.0", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } - } - }, - "mixin-deep": { - "version": "1.3.2", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "mkdirp": { - "version": "0.5.5", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mkdirp-promise": { - "version": "5.0.1", - "dev": true, - "optional": true, - "requires": { - "mkdirp": "*" - } - }, - "mock-fs": { - "version": "4.13.0", - "dev": true, - "optional": true - }, - "ms": { - "version": "2.1.3", - "dev": true - }, - "multibase": { - "version": "0.6.1", - "dev": true, - "optional": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "multicodec": { - "version": "0.5.7", - "dev": true, - "optional": true, - "requires": { - "varint": "^5.0.0" - } - }, - "multihashes": { - "version": "0.4.21", - "dev": true, - "optional": true, - "requires": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - }, - "dependencies": { - "multibase": { - "version": "0.7.0", - "dev": true, - "optional": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - } - } - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "negotiator": { - "version": "0.6.2", - "dev": true, - "optional": true - }, - "next-tick": { - "version": "1.0.0", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "bundled": true, - "dev": true - }, - "node-fetch": { - "version": "2.1.2", - "dev": true - }, - "node-gyp-build": { - "version": "4.2.3", - "bundled": true, - "dev": true - }, - "normalize-url": { - "version": "4.5.0", - "dev": true, - "optional": true - }, - "number-to-bn": { - "version": "1.7.0", - "dev": true, - "optional": true, - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "dev": true, - "optional": true - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "dev": true - } - } - }, - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.9.0", - "dev": true - }, - "object-is": { - "version": "1.1.4", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.1", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "object.pick": { - "version": "1.3.0", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "oboe": { - "version": "2.1.4", - "dev": true, - "optional": true, - "requires": { - "http-https": "^1.0.0" - } - }, - "on-finished": { - "version": "2.3.0", - "dev": true, - "optional": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "dev": true - }, - "p-cancelable": { - "version": "1.1.0", - "dev": true, - "optional": true - }, - "p-timeout": { - "version": "1.2.1", - "dev": true, - "optional": true, - "requires": { - "p-finally": "^1.0.0" - }, - "dependencies": { - "p-finally": { - "version": "1.0.0", - "dev": true, - "optional": true - } - } - }, - "parse-asn1": { - "version": "5.1.6", - "dev": true, - "optional": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-headers": { - "version": "2.0.3", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "dev": true, - "optional": true - }, - "pascalcase": { - "version": "0.1.1", - "dev": true - }, - "patch-package": { - "version": "6.2.2", - "dev": true, - "requires": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^1.2.1", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "path-key": { - "version": "2.0.1", - "dev": true - }, - "semver": { - "version": "5.7.1", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "dev": true - }, - "slash": { - "version": "2.0.0", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "which": { - "version": "1.3.1", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "path-is-absolute": { - "version": "1.0.1", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "dev": true, - "optional": true - }, - "pbkdf2": { - "version": "3.1.1", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "dev": true - }, - "posix-character-classes": { - "version": "0.1.1", - "dev": true - }, - "precond": { - "version": "0.2.3", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "dev": true, - "optional": true - }, - "private": { - "version": "0.1.8", - "dev": true - }, - "process": { - "version": "0.11.10", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "dev": true - }, - "promise-to-callback": { - "version": "1.0.0", - "dev": true, - "requires": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - } - }, - "proxy-addr": { - "version": "2.0.6", - "dev": true, - "optional": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "dev": true - }, - "psl": { - "version": "1.8.0", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "dev": true, - "optional": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "pull-cat": { - "version": "1.1.11", - "dev": true - }, - "pull-defer": { - "version": "0.2.3", - "dev": true - }, - "pull-level": { - "version": "2.0.4", - "dev": true, - "requires": { - "level-post": "^1.0.7", - "pull-cat": "^1.1.9", - "pull-live": "^1.0.1", - "pull-pushable": "^2.0.0", - "pull-stream": "^3.4.0", - "pull-window": "^2.1.4", - "stream-to-pull-stream": "^1.7.1" - } - }, - "pull-live": { - "version": "1.0.1", - "dev": true, - "requires": { - "pull-cat": "^1.1.9", - "pull-stream": "^3.4.0" - } - }, - "pull-pushable": { - "version": "2.2.0", - "dev": true - }, - "pull-stream": { - "version": "3.6.14", - "dev": true - }, - "pull-window": { - "version": "2.1.4", - "dev": true, - "requires": { - "looper": "^2.0.0" - } - }, - "pump": { - "version": "3.0.0", - "dev": true, - "optional": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "2.1.1", - "dev": true - }, - "qs": { - "version": "6.5.2", - "dev": true - }, - "query-string": { - "version": "5.1.1", - "dev": true, - "optional": true, - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "randombytes": { - "version": "2.1.0", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "dev": true, - "optional": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "dev": true, - "optional": true - }, - "raw-body": { - "version": "2.4.0", - "dev": true, - "optional": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true - } - } - }, - "regenerate": { - "version": "1.4.2", - "dev": true - }, - "regenerator-runtime": { - "version": "0.11.1", - "dev": true - }, - "regenerator-transform": { - "version": "0.10.1", - "dev": true, - "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - }, - "dependencies": { - "es-abstract": { - "version": "1.17.7", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - } - } - }, - "regexpu-core": { - "version": "2.0.0", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "regjsgen": { - "version": "0.2.0", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "dev": true - } - } - }, - "repeat-element": { - "version": "1.1.3", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.2", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "resolve-url": { - "version": "0.2.1", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "dev": true, - "optional": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "resumer": { - "version": "0.0.0", - "dev": true, - "requires": { - "through": "~2.3.4" - } - }, - "ret": { - "version": "0.1.15", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.6", - "dev": true, - "requires": { - "bn.js": "^4.11.1" - } - }, - "rustbn.js": { - "version": "0.2.0", - "dev": true - }, - "safe-buffer": { - "version": "5.2.1", - "dev": true - }, - "safe-event-emitter": { - "version": "1.0.1", - "dev": true, - "requires": { - "events": "^3.0.0" - } - }, - "safe-regex": { - "version": "1.1.0", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "dev": true - }, - "scrypt-js": { - "version": "3.0.1", - "dev": true - }, - "scryptsy": { - "version": "1.2.1", - "dev": true, - "optional": true, - "requires": { - "pbkdf2": "^3.0.3" - } - }, - "secp256k1": { - "version": "4.0.2", - "dev": true, - "requires": { - "elliptic": "^6.5.2", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "seedrandom": { - "version": "3.0.1", - "dev": true - }, - "semaphore": { - "version": "1.1.0", - "dev": true - }, - "send": { - "version": "0.17.1", - "dev": true, - "optional": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "dev": true, - "optional": true - } - } - }, - "ms": { - "version": "2.1.1", - "dev": true, - "optional": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "dev": true, - "optional": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "servify": { - "version": "0.1.12", - "dev": true, - "optional": true, - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, - "set-immediate-shim": { - "version": "1.0.1", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "dev": true - } - } - }, - "setimmediate": { - "version": "1.0.5", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "dev": true, - "optional": true - }, - "sha.js": { - "version": "2.4.11", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "simple-concat": { - "version": "1.0.1", - "dev": true, - "optional": true - }, - "simple-get": { - "version": "2.8.1", - "dev": true, - "optional": true, - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "dev": true - }, - "kind-of": { - "version": "5.1.0", - "dev": true - }, - "ms": { - "version": "2.0.0", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", + "requires": { + "@ethersproject/abi": "^5.0.0-beta.146", + "@solidity-parser/parser": "^0.14.0", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^4.0.40", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^7.1.1", + "req-cwd": "^2.0.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "sha1": "^1.1.1", + "sync-request": "^6.0.0" + }, + "dependencies": { + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, - "source-map-resolve": { - "version": "0.5.3", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.12", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.0", + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, - "split-string": { - "version": "3.1.0", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, - "sshpk": { - "version": "1.16.1", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "dev": true - } - } + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, - "static-extend": { - "version": "0.1.2", + "chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", "dev": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-buffer": { - "version": "1.1.6", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "kind-of": { - "version": "5.1.0", - "dev": true - } + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" } }, - "statuses": { - "version": "1.5.0", - "dev": true, - "optional": true - }, - "stream-to-pull-stream": { - "version": "1.7.3", + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", "dev": true, "requires": { - "looper": "^3.0.0", - "pull-stream": "^3.2.3" - }, - "dependencies": { - "looper": { - "version": "3.0.0", - "dev": true - } + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" } }, - "strict-uri-encode": { - "version": "1.1.0", - "dev": true, - "optional": true - }, - "string_decoder": { - "version": "1.1.1", + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" }, "dependencies": { - "safe-buffer": { - "version": "5.1.2", + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true - } - } - }, - "string.prototype.trim": { - "version": "1.2.3", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.3", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.3", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "swarm-js": { - "version": "0.1.40", - "dev": true, - "optional": true, - "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - }, - "dependencies": { - "fs-extra": { - "version": "4.0.3", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "get-stream": { - "version": "3.0.0", - "dev": true, - "optional": true - }, - "got": { - "version": "7.1.0", - "dev": true, - "optional": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "dev": true, - "optional": true - }, - "p-cancelable": { - "version": "0.3.0", - "dev": true, - "optional": true - }, - "prepend-http": { - "version": "1.0.4", - "dev": true, - "optional": true - }, - "url-parse-lax": { - "version": "1.0.0", - "dev": true, - "optional": true, - "requires": { - "prepend-http": "^1.0.1" - } - } - } - }, - "tape": { - "version": "4.13.3", - "dev": true, - "requires": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.5", - "object-inspect": "~1.7.0", - "resolve": "~1.17.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } }, - "is-regex": { - "version": "1.0.5", + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "has": "^1.0.3" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "object-inspect": { - "version": "1.7.0", - "dev": true - }, - "resolve": { - "version": "1.17.0", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "path-parse": "^1.0.6" + "ansi-regex": "^4.1.0" } } } }, - "tar": { - "version": "4.4.13", + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, - "optional": true, "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "dependencies": { - "fs-minipass": { - "version": "1.2.7", - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "minipass": { - "version": "2.9.0", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - } + "ms": "^2.1.1" } }, - "through": { - "version": "2.3.8", + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true }, - "through2": { - "version": "2.0.5", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true }, - "timed-out": { - "version": "4.0.1", - "dev": true, - "optional": true + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, - "tmp": { - "version": "0.1.0", + "ethers": { + "version": "4.0.49", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", + "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", "dev": true, "requires": { - "rimraf": "^2.6.3" + "aes-js": "3.0.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" } }, - "to-object-path": { - "version": "0.3.0", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "dev": true - }, - "kind-of": { - "version": "3.2.2", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "locate-path": "^3.0.0" } }, - "to-readable-stream": { - "version": "1.0.0", - "dev": true, - "optional": true - }, - "to-regex": { - "version": "3.0.2", + "flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", "dev": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "is-buffer": "~2.0.3" } }, - "toidentifier": { - "version": "1.0.0", + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "dev": true, "optional": true }, - "tough-cookie": { - "version": "2.5.0", + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "trim-right": { - "version": "1.0.1", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, - "tweetnacl": { - "version": "1.0.3", - "dev": true - }, - "tweetnacl-util": { - "version": "0.15.1", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", "dev": true }, - "type": { - "version": "1.2.0", + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", "dev": true }, - "type-is": { - "version": "1.6.18", + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, - "optional": true, "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, - "typedarray": { - "version": "0.0.6", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "is-typedarray": "^1.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "typewise": { - "version": "1.0.3", + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", "dev": true, "requires": { - "typewise-core": "^1.2.0" + "chalk": "^2.4.2" } }, - "typewise-core": { - "version": "1.2.0", - "dev": true - }, - "typewiselite": { - "version": "1.0.0", - "dev": true - }, - "ultron": { - "version": "1.1.1", + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, - "optional": true + "requires": { + "brace-expansion": "^1.1.7" + } }, - "underscore": { - "version": "1.9.1", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, - "optional": true + "requires": { + "minimist": "^1.2.5" + } }, - "union-value": { - "version": "1.0.1", + "mocha": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", + "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "dev": true - } + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" } }, - "universalify": { - "version": "0.1.2", - "dev": true - }, - "unorm": { - "version": "1.6.0", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "unpipe": { - "version": "1.0.0", - "dev": true, - "optional": true - }, - "unset-value": { - "version": "1.0.0", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "dev": true - } + "p-try": "^2.0.0" } }, - "uri-js": { - "version": "4.4.1", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "punycode": "^2.1.0" + "p-limit": "^2.0.0" } }, - "urix": { - "version": "0.1.0", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "url-parse-lax": { - "version": "3.0.0", + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", "dev": true, - "optional": true, "requires": { - "prepend-http": "^2.0.0" + "picomatch": "^2.0.4" } }, - "url-set-query": { - "version": "1.0.0", - "dev": true, - "optional": true - }, - "url-to-options": { - "version": "1.0.1", - "dev": true, - "optional": true + "scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", + "dev": true }, - "use": { - "version": "3.1.1", + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==", "dev": true }, - "utf-8-validate": { - "version": "5.0.4", + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "node-gyp-build": "^4.2.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, - "utf8": { - "version": "3.0.0", + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, - "optional": true + "requires": { + "ansi-regex": "^3.0.0" + } }, - "util-deprecate": { - "version": "1.0.2", + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true }, - "util.promisify": { - "version": "1.1.1", + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" + "has-flag": "^3.0.0" } }, - "utils-merge": { - "version": "1.0.1", - "dev": true, - "optional": true - }, "uuid": { - "version": "3.4.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==", "dev": true }, - "varint": { - "version": "5.0.2", - "dev": true, - "optional": true - }, - "vary": { - "version": "1.1.2", - "dev": true, - "optional": true - }, - "verror": { - "version": "1.10.0", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "web3": { - "version": "1.2.11", + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "optional": true, "requires": { - "web3-bzz": "1.2.11", - "web3-core": "1.2.11", - "web3-eth": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-shh": "1.2.11", - "web3-utils": "1.2.11" + "isexe": "^2.0.0" } }, - "web3-bzz": { - "version": "1.2.11", + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, - "optional": true, "requires": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" }, "dependencies": { - "@types/node": { - "version": "12.19.12", + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, - "optional": true + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } } } }, - "web3-core": { - "version": "1.2.11", + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, - "optional": true, "requires": { - "@types/bn.js": "^4.11.5", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-requestmanager": "1.2.11", - "web3-utils": "1.2.11" + "cliui": "^5.0.0", + "find-up": "^3.0.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": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" }, "dependencies": { - "@types/node": { - "version": "12.19.12", + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, - "optional": true + "requires": { + "ansi-regex": "^4.1.0" + } } } }, - "web3-core-helpers": { - "version": "1.2.11", + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, - "optional": true, "requires": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.11", - "web3-utils": "1.2.11" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, - "web3-core-method": { - "version": "1.2.11", + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + } + } + } + }, + "eth-sig-util": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-2.5.3.tgz", + "integrity": "sha512-KpXbCKmmBUNUTGh9MRKmNkIPietfhzBqqYqysDavLseIiMUGl95k6UcPEkALAZlj41e9E6yioYXc1PC333RKqw==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "elliptic": "^6.4.0", + "ethereumjs-abi": "0.6.5", + "ethereumjs-util": "^5.1.1", + "tweetnacl": "^1.0.0", + "tweetnacl-util": "^0.15.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, - "optional": true, "requires": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-utils": "1.2.11" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "web3-core-promievent": { - "version": "1.2.11", + "ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", "dev": true, - "optional": true, "requires": { - "eventemitter3": "4.0.4" + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" } + } + } + }, + "ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dev": true, + "peer": true, + "requires": { + "js-sha3": "^0.8.0" + } + }, + "ethereum-cryptography": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", + "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", + "dev": true, + "requires": { + "@noble/hashes": "1.1.2", + "@noble/secp256k1": "1.6.3", + "@scure/bip32": "1.1.0", + "@scure/bip39": "1.1.0" + } + }, + "ethereumjs-abi": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz", + "integrity": "sha512-rCjJZ/AE96c/AAZc6O3kaog4FhOsAViaysBxqJNy2+LHP0ttH0zkZ7nXdVHOAyt6lFwLO0nlCwWszysG/ao1+g==", + "dev": true, + "requires": { + "bn.js": "^4.10.0", + "ethereumjs-util": "^4.3.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, - "web3-core-requestmanager": { - "version": "1.2.11", + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", "dev": true, - "optional": true, "requires": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-providers-http": "1.2.11", - "web3-providers-ipc": "1.2.11", - "web3-providers-ws": "1.2.11" + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" } }, - "web3-core-subscriptions": { - "version": "1.2.11", + "ethereumjs-util": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.1.tgz", + "integrity": "sha512-WrckOZ7uBnei4+AKimpuF1B3Fv25OmoRgmYCpGsP7u8PFxXAmAgiJSYT2kRWnt6fVIlKaQlZvuwXp7PIrmn3/w==", "dev": true, - "optional": true, "requires": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" + "bn.js": "^4.8.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.0.0" } - }, - "web3-eth": { - "version": "1.2.11", + } + } + }, + "ethereumjs-util": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.0.2.tgz", + "integrity": "sha512-ATAP02eJLpAlWGfiKQddNrRfZpwXiTFhRN2EM/yLXMCdBW/xjKYblNKcx8GLzzrjXg0ymotck+lam1nuV90arQ==", + "dev": true, + "requires": { + "@types/bn.js": "^4.11.3", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethjs-util": "0.1.6", + "keccak": "^3.0.0", + "rlp": "^2.2.4", + "secp256k1": "^4.0.1" + } + }, + "ethers": { + "version": "5.6.9", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.9.tgz", + "integrity": "sha512-lMGC2zv9HC5EC+8r429WaWu3uWJUCgUCt8xxKCFqkrFuBDZXDYIdzDUECxzjf2BMF8IVBByY1EBoGSL3RTm8RA==", + "dev": true, + "requires": { + "@ethersproject/abi": "5.6.4", + "@ethersproject/abstract-provider": "5.6.1", + "@ethersproject/abstract-signer": "5.6.2", + "@ethersproject/address": "5.6.1", + "@ethersproject/base64": "5.6.1", + "@ethersproject/basex": "5.6.1", + "@ethersproject/bignumber": "5.6.2", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.1", + "@ethersproject/contracts": "5.6.2", + "@ethersproject/hash": "5.6.1", + "@ethersproject/hdnode": "5.6.2", + "@ethersproject/json-wallets": "5.6.1", + "@ethersproject/keccak256": "5.6.1", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.4", + "@ethersproject/pbkdf2": "5.6.1", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.8", + "@ethersproject/random": "5.6.1", + "@ethersproject/rlp": "5.6.1", + "@ethersproject/sha2": "5.6.1", + "@ethersproject/signing-key": "5.6.2", + "@ethersproject/solidity": "5.6.1", + "@ethersproject/strings": "5.6.1", + "@ethersproject/transactions": "5.6.2", + "@ethersproject/units": "5.6.1", + "@ethersproject/wallet": "5.6.2", + "@ethersproject/web": "5.6.1", + "@ethersproject/wordlists": "5.6.1" + }, + "dependencies": { + "@ethersproject/abi": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.4.tgz", + "integrity": "sha512-TTeZUlCeIHG6527/2goZA6gW5F8Emoc7MrZDC7hhP84aRGvW3TEdTnZR08Ls88YXM1m2SuK42Osw/jSi3uO8gg==", "dev": true, - "optional": true, "requires": { - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-accounts": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-eth-ens": "1.2.11", - "web3-eth-iban": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "web3-eth-abi": { - "version": "1.2.11", + "@ethersproject/abstract-provider": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.1.tgz", + "integrity": "sha512-BxlIgogYJtp1FS8Muvj8YfdClk3unZH0vRMVX791Z9INBNT/kuACZ9GzaY1Y4yFq+YSy6/w4gzj3HCRKrK9hsQ==", "dev": true, - "optional": true, "requires": { - "@ethersproject/abi": "5.0.0-beta.153", - "underscore": "1.9.1", - "web3-utils": "1.2.11" + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1" } }, - "web3-eth-accounts": { - "version": "1.2.11", + "@ethersproject/abstract-signer": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.2.tgz", + "integrity": "sha512-n1r6lttFBG0t2vNiI3HoWaS/KdOt8xyDjzlP2cuevlWLG6EX0OwcKLyG/Kp/cuwNxdy/ous+R/DEMdTUwWQIjQ==", "dev": true, - "optional": true, "requires": { - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "dev": true, - "optional": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "uuid": { - "version": "3.3.2", - "dev": true, - "optional": true - } + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" } }, - "web3-eth-contract": { - "version": "1.2.11", + "@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", "dev": true, - "optional": true, "requires": { - "@types/bn.js": "^4.11.5", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-utils": "1.2.11" + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" } }, - "web3-eth-ens": { - "version": "1.2.11", + "@ethersproject/base64": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.1.tgz", + "integrity": "sha512-qB76rjop6a0RIYYMiB4Eh/8n+Hxu2NIZm8S/Q7kNo5pmZfXhHGHmS4MinUainiBC54SCyRnwzL+KZjj8zbsSsw==", "dev": true, - "optional": true, "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-utils": "1.2.11" + "@ethersproject/bytes": "^5.6.1" } }, - "web3-eth-iban": { - "version": "1.2.11", + "@ethersproject/basex": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.1.tgz", + "integrity": "sha512-a52MkVz4vuBXR06nvflPMotld1FJWSj2QT0985v7P/emPZO00PucFAkbcmq2vpVU7Ts7umKiSI6SppiLykVWsA==", "dev": true, - "optional": true, "requires": { - "bn.js": "^4.11.9", - "web3-utils": "1.2.11" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/properties": "^5.6.0" } }, - "web3-eth-personal": { - "version": "1.2.11", + "@ethersproject/bignumber": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.2.tgz", + "integrity": "sha512-v7+EEUbhGqT3XJ9LMPsKvXYHFc8eHxTowFCG/HgJErmq4XHJ2WR7aeyICg3uTOAQ7Icn0GFHAohXEhxQHq4Ubw==", "dev": true, - "optional": true, "requires": { - "@types/node": "^12.12.6", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "dependencies": { - "@types/node": { - "version": "12.19.12", - "dev": true, - "optional": true - } + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^5.2.1" } }, - "web3-net": { - "version": "1.2.11", + "@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", "dev": true, - "optional": true, "requires": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" + "@ethersproject/logger": "^5.6.0" } }, - "web3-provider-engine": { - "version": "14.2.1", + "@ethersproject/constants": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.1.tgz", + "integrity": "sha512-QSq9WVnZbxXYFftrjSjZDUshp6/eKp6qrtdBtUCm0QxCV5z1fG/w3kdlcsjMCQuQHUnAclKoK7XpXMezhRDOLg==", "dev": true, "requires": { - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^3.0.0", - "eth-json-rpc-infura": "^3.1.0", - "eth-sig-util": "3.0.0", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.2.0", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "dev": true, - "requires": { - "abstract-leveldown": "~2.6.0" - } - }, - "eth-sig-util": { - "version": "1.4.2", - "dev": true, - "requires": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" - } - }, - "ethereumjs-account": { - "version": "2.0.5", - "dev": true, - "requires": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "dev": true, - "requires": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereum-common": { - "version": "0.2.0", - "dev": true - } - } - }, - "ethereumjs-tx": { - "version": "1.3.7", - "dev": true, - "requires": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "ethereumjs-vm": { - "version": "2.6.0", - "dev": true, - "requires": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "ethereumjs-block": { - "version": "2.2.2", - "dev": true, - "requires": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.1", - "dev": true, - "requires": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - } - } - }, - "ethereumjs-tx": { - "version": "2.1.2", - "dev": true, - "requires": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } - } - }, - "isarray": { - "version": "0.0.1", - "dev": true - }, - "level-codec": { - "version": "7.0.1", - "dev": true - }, - "level-errors": { - "version": "1.0.5", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "level-ws": { - "version": "0.0.0", - "dev": true, - "requires": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "xtend": { - "version": "2.1.2", - "dev": true, - "requires": { - "object-keys": "~0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "dev": true, - "requires": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "ltgt": { - "version": "2.2.1", - "dev": true - }, - "memdown": { - "version": "1.4.1", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "dev": true, - "requires": { - "xtend": "~4.0.0" - } - } - } - }, - "merkle-patricia-tree": { - "version": "2.3.2", - "dev": true, - "requires": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "dev": true - } - } - }, - "object-keys": { - "version": "0.4.0", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "dev": true - }, - "semver": { - "version": "5.4.1", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "dev": true - }, - "ws": { - "version": "5.2.2", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } + "@ethersproject/bignumber": "^5.6.2" } }, - "web3-providers-http": { - "version": "1.2.11", + "@ethersproject/hash": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.1.tgz", + "integrity": "sha512-L1xAHurbaxG8VVul4ankNX5HgQ8PNCTrnVXEiFnE9xoRnaUcgfD12tZINtDinSllxPLCtGwguQxJ5E6keE84pA==", "dev": true, - "optional": true, "requires": { - "web3-core-helpers": "1.2.11", - "xhr2-cookies": "1.1.0" + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } }, - "web3-providers-ipc": { - "version": "1.2.11", + "@ethersproject/keccak256": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.1.tgz", + "integrity": "sha512-bB7DQHCTRDooZZdL3lk9wpL0+XuG3XLGHLh3cePnybsO3V0rdCAOQGpn/0R3aODmnTOOkCATJiD2hnL+5bwthA==", "dev": true, - "optional": true, "requires": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" + "@ethersproject/bytes": "^5.6.1", + "js-sha3": "0.8.0" } }, - "web3-providers-ws": { - "version": "1.2.11", + "@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", + "dev": true + }, + "@ethersproject/networks": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.4.tgz", + "integrity": "sha512-KShHeHPahHI2UlWdtDMn2lJETcbtaJge4k7XSjDR9h79QTd6yQJmv6Cp2ZA4JdqWnhszAOLSuJEd9C0PRw7hSQ==", "dev": true, - "optional": true, "requires": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "websocket": "^1.0.31" + "@ethersproject/logger": "^5.6.0" } }, - "web3-shh": { - "version": "1.2.11", + "@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", "dev": true, - "optional": true, "requires": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-net": "1.2.11" + "@ethersproject/logger": "^5.6.0" + } + }, + "@ethersproject/providers": { + "version": "5.6.8", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.8.tgz", + "integrity": "sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w==", + "dev": true, + "requires": { + "@ethersproject/abstract-provider": "^5.6.1", + "@ethersproject/abstract-signer": "^5.6.2", + "@ethersproject/address": "^5.6.1", + "@ethersproject/base64": "^5.6.1", + "@ethersproject/basex": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/hash": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.3", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.1", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/sha2": "^5.6.1", + "@ethersproject/strings": "^5.6.1", + "@ethersproject/transactions": "^5.6.2", + "@ethersproject/web": "^5.6.1", + "bech32": "1.1.4", + "ws": "7.4.6" } }, - "web3-utils": { - "version": "1.2.11", + "@ethersproject/random": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.1.tgz", + "integrity": "sha512-/wtPNHwbmng+5yi3fkipA8YBT59DdkGRoC2vWk09Dci/q5DlgnMkhIycjHlavrvrjJBkFjO/ueLyT+aUDfc4lA==", "dev": true, - "optional": true, "requires": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "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" - }, - "dependencies": { - "eth-lib": { - "version": "0.2.8", - "dev": true, - "optional": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - } + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, - "websocket": { - "version": "1.0.32", + "@ethersproject/rlp": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.1.tgz", + "integrity": "sha512-uYjmcZx+DKlFUk7a5/W9aQVaoEC7+1MOBgNtvNg13+RnuUwT4F0zTovC0tmay5SmRslb29V1B7Y5KCri46WhuQ==", "dev": true, "requires": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "dev": true - } + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, - "whatwg-fetch": { - "version": "2.0.4", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "dev": true - }, - "ws": { - "version": "3.3.3", + "@ethersproject/sha2": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.1.tgz", + "integrity": "sha512-5K2GyqcW7G4Yo3uenHegbXRPDgARpWUiXc6RiF7b6i/HXUoWlb7uCARh7BAHg7/qT/Q5ydofNwiZcim9qpjB6g==", "dev": true, - "optional": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "dev": true, - "optional": true - } + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" } }, - "xhr": { - "version": "2.6.0", + "@ethersproject/signing-key": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.2.tgz", + "integrity": "sha512-jVbu0RuP7EFpw82vHcL+GP35+KaNruVAZM90GxgQnGqB6crhBqW/ozBfFvdeImtmb4qPko0uxXjn8l9jpn0cwQ==", "dev": true, "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" } }, - "xhr-request": { - "version": "1.1.0", + "@ethersproject/strings": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.1.tgz", + "integrity": "sha512-2X1Lgk6Jyfg26MUnsHiT456U9ijxKUybz8IM1Vih+NJxYtXhmvKBcHOmvGqpFSVJ0nQ4ZCoIViR8XlRw1v/+Cw==", "dev": true, - "optional": true, "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/logger": "^5.6.0" } }, - "xhr-request-promise": { - "version": "0.1.3", + "@ethersproject/transactions": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.2.tgz", + "integrity": "sha512-BuV63IRPHmJvthNkkt9G70Ullx6AcM+SDc+a8Aw/8Yew6YwT51TcBKEp1P4oOQ/bP25I18JJr7rcFRgFtU9B2Q==", "dev": true, - "optional": true, "requires": { - "xhr-request": "^1.1.0" + "@ethersproject/address": "^5.6.1", + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/constants": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.1", + "@ethersproject/signing-key": "^5.6.2" } }, - "xhr2-cookies": { - "version": "1.1.0", + "@ethersproject/web": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.1.tgz", + "integrity": "sha512-/vSyzaQlNXkO1WV+RneYKqCJwualcUdx/Z3gseVovZP0wIlOFcCE1hkRhKBH8ImKbGQbMl9EAAyJFrJu7V0aqA==", "dev": true, - "optional": true, "requires": { - "cookiejar": "^2.1.1" + "@ethersproject/base64": "^5.6.1", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.1" } - }, - "xtend": { - "version": "4.0.2", - "dev": true - }, - "yaeti": { - "version": "0.0.6", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "dev": true } } }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dev": true, + "peer": true, + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true, + "peer": true + } + } + }, + "ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true, + "peer": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "peer": true, + "requires": { + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true, + "peer": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extract-comments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/extract-comments/-/extract-comments-1.1.0.tgz", + "integrity": "sha512-dzbZV2AdSSVW/4E7Ti5hZdHWbA+Z80RJsJhr5uiL10oyjl/gy7/o+HI1HwK4/WSZhlq4SNKU3oUzXlM13Qx02Q==", + "dev": true, + "requires": { + "esprima-extract-comments": "^1.1.0", + "parse-code-context": "^1.0.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, + "fast-base64-decode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-base64-decode/-/fast-base64-decode-1.0.0.tgz", + "integrity": "sha512-qwaScUgUGBYeDNRnbc/KyllVU88Jk1pRHPStuF/lO7B0/RTRLj7U0lkdTAutlBblY08rwZDff6tNU9cjv6j//Q==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "peer": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "peer": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "peer": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "peer": true, + "requires": { + "array-back": "^3.0.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "find-versions": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-3.2.0.tgz", + "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", + "dev": true, + "requires": { + "semver-regex": "^2.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "fmix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", + "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", + "dev": true, + "requires": { + "imul": "^1.0.0" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "peer": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true + "dev": true, + "peer": true }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -35988,20 +16734,22 @@ "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", "dev": true, + "peer": true, "requires": { "chalk": "^2.4.2", "node-emoji": "^1.10.0" } }, "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -36010,18 +16758,9 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "dev": true, "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" + "is-glob": "^4.0.1" } }, "global-modules": { @@ -36029,6 +16768,7 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, + "peer": true, "requires": { "global-prefix": "^3.0.0" } @@ -36038,75 +16778,40 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, + "peer": true, "requires": { "ini": "^1.3.5", "kind-of": "^6.0.2", "which": "^1.3.1" - } - }, - "globby": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", - "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", - "dev": true, - "requires": { - "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" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" }, "dependencies": { - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "peer": true, "requires": { - "pump": "^3.0.0" + "isexe": "^2.0.0" } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true } } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "peer": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true }, "growl": { "version": "1.10.5", @@ -36119,6 +16824,7 @@ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, + "peer": true, "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -36131,7 +16837,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "peer": true } } }, @@ -36152,19 +16859,25 @@ } }, "hardhat": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.10.0.tgz", - "integrity": "sha512-9VUorKvWNyW96qFXkwkpDUSeWND3gOZpm0oJ8l63JQJvWhxyxTJ92BcOrNylOKy9hzNNGdMfM2QWNP80fGOjpA==", - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/blockchain": "^5.5.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/tx": "^3.5.1", - "@ethereumjs/vm": "^5.9.0", + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.12.2.tgz", + "integrity": "sha512-f3ZhzXy1uyQv0UXnAQ8GCBOWjzv++WJNb7bnm10SsyC3dB7vlPpsMWBNhq7aoRxKrNhX9tCev81KFV3i5BTeMQ==", + "dev": true, + "requires": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/ethereumjs-block": "^4.0.0", + "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", + "@nomicfoundation/ethereumjs-common": "^3.0.0", + "@nomicfoundation/ethereumjs-evm": "^1.0.0", + "@nomicfoundation/ethereumjs-rlp": "^4.0.0", + "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", + "@nomicfoundation/ethereumjs-trie": "^5.0.0", + "@nomicfoundation/ethereumjs-tx": "^4.0.0", + "@nomicfoundation/ethereumjs-util": "^8.0.0", + "@nomicfoundation/ethereumjs-vm": "^6.0.0", + "@nomicfoundation/solidity-analyzer": "^0.1.0", "@sentry/node": "^5.18.1", - "@solidity-parser/parser": "^0.14.2", "@types/bn.js": "^5.1.0", "@types/lru-cache": "^5.1.0", "abort-controller": "^3.0.0", @@ -36179,15 +16892,14 @@ "env-paths": "^2.2.0", "ethereum-cryptography": "^1.0.3", "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^7.1.4", "find-up": "^2.1.0", "fp-ts": "1.19.3", "fs-extra": "^7.0.1", "glob": "7.2.0", "immutable": "^4.0.0-rc.12", "io-ts": "1.10.4", + "keccak": "^3.0.2", "lodash": "^4.17.11", - "merkle-patricia-tree": "^4.2.4", "mnemonist": "^0.38.0", "mocha": "^10.0.0", "p-map": "^4.0.0", @@ -36195,11 +16907,9 @@ "raw-body": "^2.4.1", "resolve": "1.17.0", "semver": "^6.3.0", - "slash": "^3.0.0", "solc": "0.7.3", "source-map-support": "^0.5.13", "stacktrace-parser": "^0.1.10", - "true-case-path": "^2.2.1", "tsort": "0.0.1", "undici": "^5.4.0", "uuid": "^8.3.2", @@ -36207,174 +16917,59 @@ }, "dependencies": { "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", + "dev": true, "requires": { "@types/node": "*" } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==" - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "ethereum-cryptography": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.1.2.tgz", - "integrity": "sha512-XDSJlg4BD+hq9N2FjvotwUET9Tfxpxc3kWGE2AqUG5vcbeunnbImVk3cj6e/xT3phdW21mE8R5IugU4fspQDcQ==", - "requires": { - "@noble/hashes": "1.1.2", - "@noble/secp256k1": "1.6.3", - "@scure/bip32": "1.1.0", - "@scure/bip39": "1.1.0" - } + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true }, "ethereumjs-abi": { "version": "0.6.8", "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - } + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dev": true, + "requires": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" } }, "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", "create-hash": "^1.1.2", + "elliptic": "^6.5.2", "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" }, "dependencies": { + "@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "ethereum-cryptography": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, "requires": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -36394,271 +16989,6 @@ } } } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } } } }, @@ -37177,17 +17507,6 @@ "@ethersproject/wordlists": "5.5.0" } }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -37231,9 +17550,9 @@ "dev": true }, "zksync-web3": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.7.9.tgz", - "integrity": "sha512-B0pitKvEQGJuWkY2UWjXrL1YgHghXEoDaq6acVZnB62TRF099GV58Fzi7Fnqt+Nw14A7Wc9iJ2AHD4GBTLFgkg==", + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.7.13.tgz", + "integrity": "sha512-Zz83eOWLqPs88kgczkJLhst192oqtj7uzI3PaGyR9lkfQLL5eMEMZ+pD1eYPppTE1GohmGxhqnEf5HxG7WF0QA==", "dev": true, "requires": {} } @@ -37254,6 +17573,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -37267,7 +17587,8 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true }, "has-property-descriptors": { "version": "1.0.0", @@ -37278,25 +17599,11 @@ "get-intrinsic": "^1.1.1" } }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true - }, "has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "requires": { - "has-symbol-support-x": "^1.4.1" - } + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true }, "has-tostringtag": { "version": "1.0.0", @@ -37311,6 +17618,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, "requires": { "inherits": "^2.0.4", "readable-stream": "^3.6.0", @@ -37321,6 +17629,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -37329,24 +17638,27 @@ "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true, + "peer": true }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, "requires": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "http-basic": { "version": "8.1.3", "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", @@ -37359,16 +17671,11 @@ "parse-cache-control": "^1.0.1" } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, "http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, "requires": { "depd": "2.0.0", "inherits": "2.0.4", @@ -37381,7 +17688,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==", - "dev": true + "dev": true, + "peer": true }, "http-response-object": { "version": "3.0.2", @@ -37415,6 +17723,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, "requires": { "agent-base": "6", "debug": "4" @@ -37499,23 +17808,16 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", "dev": true, "requires": { - "punycode": "2.1.0" + "safer-buffer": ">= 2.1.2 < 3" } }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true }, "ignore": { "version": "5.2.0", @@ -37523,15 +17825,11 @@ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==" - }, "immutable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==" + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true }, "import-fresh": { "version": "3.3.0", @@ -37552,12 +17850,14 @@ "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -37566,13 +17866,15 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "peer": true }, "internal-slot": { "version": "1.0.3", @@ -37589,33 +17891,24 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true + "dev": true, + "peer": true }, "io-ts": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, "requires": { "fp-ts": "^1.0.0" } }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, "is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, + "peer": true, "requires": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -37640,6 +17933,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -37661,20 +17955,11 @@ "dev": true }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, "is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -37684,26 +17969,16 @@ "has-tostringtag": "^1.0.0" } }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-generator-function": { @@ -37711,6 +17986,7 @@ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, + "peer": true, "requires": { "has-tostringtag": "^1.0.0" } @@ -37719,6 +17995,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -37726,7 +18003,8 @@ "is-hex-prefixed": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==" + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "dev": true }, "is-negative-zero": { "version": "2.0.2", @@ -37737,7 +18015,8 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-number-object": { "version": "1.0.7", @@ -37748,22 +18027,10 @@ "has-tostringtag": "^1.0.0" } }, - "is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true - }, "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, "is-regex": { @@ -37776,12 +18043,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true - }, "is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", @@ -37816,15 +18077,16 @@ } }, "is-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.9.tgz", - "integrity": "sha512-kfrlnTTn8pZkfpJMUgYD7YZ3qzeJgWUn8XfVYBARc4wnmNOmLbmuuaAs3q5fvB0UJOn6yHAKaGTPM7d6ezoD/A==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "dev": true, + "peer": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", "for-each": "^0.3.3", + "gopd": "^1.0.1", "has-tostringtag": "^1.0.0" } }, @@ -37837,18 +18099,7 @@ "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, "is-weakref": { @@ -37860,15 +18111,6 @@ "call-bind": "^1.0.2" } }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -37897,16 +18139,6 @@ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - } - }, "jest-docblock": { "version": "21.2.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", @@ -37922,7 +18154,8 @@ "js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true }, "js-tokens": { "version": "4.0.0", @@ -37946,12 +18179,6 @@ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "dev": true - }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -37980,6 +18207,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -37988,7 +18216,8 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", - "dev": true + "dev": true, + "peer": true }, "jsprim": { "version": "1.4.2", @@ -38006,148 +18235,73 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "dev": true, "requires": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", "readable-stream": "^3.6.0" } }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "dev": true, + "peer": true }, "klaw": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "dev": true, "requires": { "graceful-fs": "^4.1.9" } }, - "klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "level": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", + "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.11" + "browser-level": "^1.0.1", + "classic-level": "^1.2.0" } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } + "level-supports": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", + "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", + "dev": true }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "level-transcoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", + "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", + "dev": true, "requires": { - "buffer": "^5.6.0" + "buffer": "^6.0.3", + "module-error": "^1.0.1" }, "dependencies": { "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, "requires": { "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "ieee754": "^1.2.1" } } } }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==" - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - } - }, - "level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "requires": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - } - }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "requires": { - "xtend": "^4.0.2" - } - }, - "level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "requires": { - "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" - } - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, + "peer": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -38159,40 +18313,11 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } - } - }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -38201,65 +18326,114 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "peer": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "peer": true + }, "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "chalk": "^2.4.2" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "lowdb": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz", - "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==", + "loupe": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", + "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", "dev": true, + "peer": true, "requires": { - "graceful-fs": "^4.1.3", - "is-promise": "^2.1.0", - "lodash": "4", - "pify": "^3.0.0", - "steno": "^0.4.1" + "get-func-name": "^2.0.0" } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, "lru_map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "requires": { "yallist": "^3.0.2" } }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" - }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true + "dev": true }, "markdown-table": { "version": "1.1.3", @@ -38276,161 +18450,61 @@ "mcl-wasm": { "version": "0.7.9", "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==" + "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", + "dev": true }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true - }, - "memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "requires": { - "abstract-leveldown": "~6.2.1", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==" - } - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "requires": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "requires": { - "@types/node": "*" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "memory-level": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", + "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", + "dev": true, + "requires": { + "abstract-level": "^1.0.0", + "functional-red-black-tree": "^1.0.1", + "module-error": "^1.0.1" + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "peer": true + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, + "peer": true, "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -38452,58 +18526,33 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", "dev": true }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "requires": { - "minipass": "^2.9.0" - } - }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -38513,208 +18562,159 @@ "minimist": "^1.2.6" } }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==", - "dev": true, - "requires": { - "mkdirp": "*" - } - }, "mnemonist": { "version": "0.38.5", "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, "requires": { "obliterator": "^2.0.0" } }, "mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", + "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==", "dev": true, "requires": { - "ansi-colors": "3.2.3", + "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, - "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - } + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { - "ms": "^2.1.1" + "balanced-match": "^1.0.0" } }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "^2.0.1" } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^5.0.0" } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "requires": { - "minimist": "^1.2.5" + "brace-expansion": "^2.0.1" } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^3.0.2" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.4" - } - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } } } }, - "mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", + "module-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", + "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", "dev": true }, "mri": { @@ -38726,71 +18726,8 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "dev": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "dev": true, - "requires": { - "varint": "^5.0.0" - } - }, - "multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "dev": true, - "requires": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - } - } + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "multimatch": { "version": "4.0.0", @@ -38816,51 +18753,44 @@ "imul": "^1.0.0" } }, - "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==", - "dev": true - }, "nanoid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==" + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", "dev": true }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "peer": true }, "next-tick": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "dev": true, + "peer": true }, "node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true }, "node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dev": true, + "peer": true, "requires": { "lodash": "^4.17.21" } @@ -38887,6 +18817,7 @@ "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, "requires": { "whatwg-url": "^5.0.0" } @@ -38894,51 +18825,29 @@ "node-gyp-build": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", - "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==" + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", + "dev": true }, "nofilter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-1.0.4.tgz", - "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==" + "integrity": "sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==", + "dev": true }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", "dev": true, + "peer": true, "requires": { "abbrev": "1" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "npm-run-path": { @@ -38948,27 +18857,14 @@ "dev": true, "requires": { "path-key": "^3.0.0" - }, - "dependencies": { - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - } } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true - }, "number-to-bn": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", "dev": true, + "peer": true, "requires": { "bn.js": "4.11.6", "strip-hex-prefix": "1.0.0" @@ -38978,7 +18874,8 @@ "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true + "dev": true, + "peer": true } } }, @@ -38997,7 +18894,8 @@ "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true }, "object-keys": { "version": "1.1.1", @@ -39018,44 +18916,38 @@ } }, "object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", + "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", "dev": true, "requires": { - "array.prototype.reduce": "^1.0.4", + "array.prototype.reduce": "^1.0.5", "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" + "es-abstract": "^1.20.4" } }, "obliterator": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true }, "oboe": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", "integrity": "sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==", "dev": true, + "peer": true, "requires": { "http-https": "^1.0.0" } }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "requires": { "wrappy": "1" } @@ -39069,16 +18961,6 @@ "mimic-fn": "^2.1.0" } }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, "opencollective-postinstall": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", @@ -39090,6 +18972,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, + "peer": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -39099,36 +18982,24 @@ "word-wrap": "~1.2.3" } }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", + "ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", "dev": true, - "requires": { - "lcid": "^1.0.0" - } + "peer": true }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, "requires": { "p-try": "^1.0.0" } @@ -39137,6 +19008,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, "requires": { "p-limit": "^1.1.0" } @@ -39145,23 +19017,16 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==", "dev": true, "requires": { - "p-finally": "^1.0.0" + "aggregate-error": "^3.0.0" } }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==" + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true }, "parent-module": { "version": "1.0.1", @@ -39172,19 +19037,6 @@ "callsites": "^3.0.0" } }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "parse-cache-control": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", @@ -39197,12 +19049,6 @@ "integrity": "sha512-OZQaqKaQnR21iqhlnPfVisFjBWjhnMl5J9MgbP8xC+EwoVqbXrq78lp+9Zb3ahmLzrIX5Us/qbvBnaS3hkH6OA==", "dev": true }, - "parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", - "dev": true - }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -39215,78 +19061,28 @@ "lines-and-columns": "^1.1.6" } }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "patch-package": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", - "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", - "dev": true, - "requires": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - } - } - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-type": { @@ -39299,12 +19095,14 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true + "dev": true, + "peer": true }, "pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, "requires": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -39322,29 +19120,9 @@ "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -39414,23 +19192,12 @@ "semver-compare": "^1.0.0" } }, - "postinstall-postinstall": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", - "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", - "dev": true - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "dev": true + "dev": true, + "peer": true }, "prettier": { "version": "2.4.1", @@ -39465,6 +19232,30 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, @@ -39582,12 +19373,6 @@ } } }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -39595,57 +19380,20 @@ "dev": true }, "promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dev": true, "requires": { "asap": "~2.0.6" } }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" - }, "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -39657,36 +19405,20 @@ } }, "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dev": true, "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "side-channel": "^1.0.4" } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -39696,31 +19428,17 @@ "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { - "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" } }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, "raw-body": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -39728,71 +19446,11 @@ "unpipe": "1.0.0" } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "dependencies": { - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -39803,6 +19461,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -39812,30 +19471,28 @@ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, + "peer": true, "requires": { "resolve": "^1.1.6" } }, "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dev": true, + "peer": true, "requires": { - "minimatch": "3.0.4" - }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "minimatch": "^3.0.5" } }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "peer": true + }, "regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", @@ -39917,6 +19574,12 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true } } }, @@ -39940,509 +19603,896 @@ "tough-cookie": "^2.3.3" } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "peer": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dev": true, + "requires": { + "bn.js": "^5.2.0" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "peer": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "run-parallel-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", + "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sc-istanbul": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", + "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "dev": true, + "peer": true, + "requires": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true, + "peer": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "peer": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "dev": true, + "peer": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "peer": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^1.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true + }, + "secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "dev": true, + "requires": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true }, - "require-main-filename": { + "semver-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", + "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", "dev": true }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, "requires": { - "path-parse": "^1.0.6" + "randombytes": "^2.1.0" } }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "lowercase-keys": "^1.0.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", + "dev": true, "requires": { - "glob": "^7.1.3" + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "shebang-regex": "^3.0.0" } }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "peer": true, "requires": { - "bn.js": "^5.2.0" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "queue-microtask": "^1.2.2" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + } + } }, - "sc-istanbul": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", - "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", "dev": true, "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" + "command-exists": "^1.2.8", + "commander": "3.0.2", + "follow-redirects": "^1.12.1", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true + } + } + }, + "solidity-coverage": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.2.tgz", + "integrity": "sha512-cv2bWb7lOXPE9/SSleDO6czkFiMHgP4NXPj+iW9W7iEKLBk7Cj0AGBiNmGX3V1totl9wjPrT0gHmABZKZt65rQ==", + "dev": true, + "peer": true, + "requires": { + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.14.1", + "chalk": "^2.4.2", + "death": "^1.1.0", + "detect-port": "^1.3.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.15", + "mocha": "7.1.2", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" + }, + "dependencies": { + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "peer": true }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "peer": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "peer": true + }, + "chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "peer": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "peer": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "peer": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "peer": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true, + "peer": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "peer": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "peer": true, + "requires": { + "is-buffer": "~2.0.3" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true, + "peer": true }, "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, + "peer": true, "requires": { + "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "2 || 3", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "dev": true + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "peer": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + } }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "peer": true }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "peer": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "peer": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "peer": true, + "requires": { + "chalk": "^2.4.2" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "peer": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.2.tgz", + "integrity": "sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==", + "dev": true, + "peer": true, + "requires": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true, + "peer": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "peer": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "peer": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "peer": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "peer": true + }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "peer": true, + "requires": { + "picomatch": "^2.0.4" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, + "peer": true, "requires": { - "has-flag": "^1.0.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } - } - } - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==" - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, + "peer": true, "requires": { - "yallist": "^4.0.0" + "ansi-regex": "^4.1.0" } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true - }, - "semver-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", - "integrity": "sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw==", - "dev": true - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, + "peer": true, "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } + "has-flag": "^3.0.0" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dev": true, - "requires": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", - "dev": true, - "requires": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "solc": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz", - "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "peer": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "isexe": "^2.0.0" } }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, + "peer": true, "requires": { - "graceful-fs": "^4.1.6" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "solidity-coverage": { - "version": "0.7.17", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.7.17.tgz", - "integrity": "sha512-Erw2hd2xdACAvDX8jUdYkmgJlIIazGznwDJA5dhRaw4def2SisXN9jUjneeyOZnl/E7j6D3XJYug4Zg9iwodsg==", - "dev": true, - "requires": { - "@solidity-parser/parser": "^0.13.2", - "@truffle/provider": "^0.2.24", - "chalk": "^2.4.2", - "death": "^1.1.0", - "detect-port": "^1.3.0", - "fs-extra": "^8.1.0", - "ganache-cli": "^6.12.2", - "ghost-testrpc": "^0.0.2", - "global-modules": "^2.0.0", - "globby": "^10.0.1", - "jsonschema": "^1.2.4", - "lodash": "^4.17.15", - "node-emoji": "^1.10.0", - "pify": "^4.0.1", - "recursive-readdir": "^2.2.2", - "sc-istanbul": "^0.4.5", - "semver": "^7.3.4", - "shelljs": "^0.8.3", - "web3-utils": "^1.3.0" - }, - "dependencies": { - "@solidity-parser/parser": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.13.2.tgz", - "integrity": "sha512-RwHnpRnfrnD2MSPveYoPh8nhofEvX7fgjHk1Oq+NNvCcLx4r1js91CO9o+F/F3fBzOCyvm8kKRTriFICX/odWw==", + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "peer": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "peer": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, + "peer": true, "requires": { - "antlr4ts": "^0.5.0-alpha.4" + "cliui": "^5.0.0", + "find-up": "^3.0.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": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, + "peer": true, "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", "dev": true, + "peer": true, "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true } } }, @@ -40452,6 +20502,7 @@ "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", "dev": true, "optional": true, + "peer": true, "requires": { "amdefine": ">=0.0.4" } @@ -40460,6 +20511,7 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -40468,42 +20520,11 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -40539,6 +20560,7 @@ "version": "0.1.10", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, "requires": { "type-fest": "^0.7.1" }, @@ -40546,14 +20568,16 @@ "type-fest": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==" + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true } } }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true }, "stealthy-require": { "version": "1.1.1", @@ -40561,97 +20585,76 @@ "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", "dev": true }, - "steno": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz", - "integrity": "sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.3" - } - }, - "strict-uri-encode": { + "streamsearch": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "dev": true }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, "requires": { "safe-buffer": "~5.2.0" } }, + "string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true, + "peer": true + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true } } }, "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" } }, "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "es-abstract": "^1.20.4" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "is-utf8": "^0.2.0" + "ansi-regex": "^5.0.1" } }, "strip-final-newline": { @@ -40664,134 +20667,24 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dev": true, "requires": { "is-hex-prefixed": "1.0.0" } }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "swarm-js": { - "version": "0.1.40", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", - "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", "dev": true, "requires": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "requires": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - } + "has-flag": "^3.0.0" } }, "sync-request": { @@ -40814,48 +20707,71 @@ "get-port": "^3.1.0" } }, - "tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", "dev": true, + "peer": true, "requires": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + } } }, - "test-value": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", - "integrity": "sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==", + "table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", "dev": true, + "peer": true, "requires": { - "array-back": "^1.0.3", - "typical": "^2.6.0" + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" }, "dependencies": { "array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true, - "requires": { - "typical": "^2.6.0" - } + "peer": true + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "peer": true } } }, - "testrpc": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", - "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", - "dev": true - }, "then-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", @@ -40894,16 +20810,11 @@ } } }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "dev": true - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -40912,6 +20823,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, "requires": { "tmp": "^0.2.0" }, @@ -40920,6 +20832,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -40928,22 +20841,18 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, "requires": { "rimraf": "^3.0.0" } } } }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "requires": { "is-number": "^7.0.0" } @@ -40951,7 +20860,8 @@ "toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true }, "tough-cookie": { "version": "2.5.0", @@ -40961,63 +20871,97 @@ "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - } } }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true }, - "true-case-path": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", - "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" + "ts-command-line-args": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.3.1.tgz", + "integrity": "sha512-FR3y7pLl/fuUNSmnPhfLArGqRrpojQgIEEOVzYx9DhTmfIN7C9RWSfpkJEF4J+Gk7aVx5pak8I7vWZsaN4N84g==", + "dev": true, + "peer": true, + "requires": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } }, "ts-essentials": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", "dev": true, + "peer": true, "requires": {} }, - "ts-generator": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", - "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", - "dev": true, - "requires": { - "@types/mkdirp": "^0.5.2", - "@types/prettier": "^2.1.1", - "@types/resolve": "^0.0.8", - "chalk": "^2.4.1", - "glob": "^7.1.2", - "mkdirp": "^0.5.1", - "prettier": "^2.1.2", - "resolve": "^1.8.1", - "ts-essentials": "^1.0.0" - }, - "dependencies": { - "ts-essentials": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", - "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", - "dev": true - } - } - }, "ts-node": { "version": "8.10.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", - "devOptional": true, + "dev": true, "requires": { "arg": "^4.1.0", "diff": "^4.0.1", @@ -41030,14 +20974,15 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "devOptional": true + "dev": true } } }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "tslint": { "version": "6.1.2", @@ -41100,7 +21045,8 @@ "tsort": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==" + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true }, "tsutils": { "version": "2.29.0", @@ -41123,24 +21069,28 @@ "tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true }, "tweetnacl-util": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==" + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true }, "type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true + "dev": true, + "peer": true }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, + "peer": true, "requires": { "prelude-ls": "~1.1.2" } @@ -41149,46 +21099,55 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "dev": true, + "peer": true }, "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true }, "typechain": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-5.2.0.tgz", - "integrity": "sha512-0INirvQ+P+MwJOeMct+WLkUE4zov06QxC96D+i3uGFEHoiSkZN70MKDQsaj8zkL86wQwByJReI2e7fOUwECFuw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz", + "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==", "dev": true, + "peer": true, "requires": { "@types/prettier": "^2.1.1", - "command-line-args": "^4.0.7", - "debug": "^4.1.1", + "debug": "^4.3.1", "fs-extra": "^7.0.0", - "glob": "^7.1.6", + "glob": "7.1.7", "js-sha3": "^0.8.0", "lodash": "^4.17.15", "mkdirp": "^1.0.4", - "prettier": "^2.1.2", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", "ts-essentials": "^7.0.1" }, "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true + "dev": true, + "peer": true } } }, @@ -41203,34 +21162,31 @@ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, + "peer": true, "requires": { "is-typedarray": "^1.0.0" } }, "typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", - "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", - "devOptional": true + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", + "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "dev": true }, "typical": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "peer": true }, "uglify-js": { - "version": "3.16.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.3.tgz", - "integrity": "sha512-uVbFqx9vvLhQg0iBaau9Z75AxWJ8tqM9AV890dIZCLApF4rTcyHwmAvLeEdYRs+BzYWu8Iw81F79ah0EfTXbaw==", + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, - "optional": true - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true + "optional": true, + "peer": true }, "unbox-primitive": { "version": "1.0.2", @@ -41245,9 +21201,13 @@ } }, "undici": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.8.0.tgz", - "integrity": "sha512-1F7Vtcez5w/LwH2G2tGnFIihuWUlc58YidwLiCv+jR2Z50x0tNXpRRw7eOIJ+GvqCqIkg9SB7NWAJ/T9TLfv8Q==" + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.12.0.tgz", + "integrity": "sha512-zMLamCG62PGjd9HHMpo05bSLvvwWOZgGeiWlN/vlqu3+lRo3elxktVGEyLMX+IO7c2eflLjcW74AlkhEZm15mg==", + "dev": true, + "requires": { + "busboy": "^1.6.0" + } }, "unfetch": { "version": "4.2.0", @@ -41258,12 +21218,14 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true }, "uri-js": { "version": "4.4.1", @@ -41274,50 +21236,12 @@ "punycode": "^2.1.0" } }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - } - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==", - "dev": true - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", - "dev": true - }, "utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "devOptional": true, + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "dev": true, + "peer": true, "requires": { "node-gyp-build": "^4.3.0" } @@ -41326,59 +21250,33 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true + "dev": true, + "peer": true }, "util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, + "peer": true, "requires": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", "is-generator-function": "^1.0.7", "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", "which-typed-array": "^1.1.2" } }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, "verror": { @@ -41392,60 +21290,28 @@ "extsprintf": "^1.2.0" } }, - "web3": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.7.4.tgz", - "integrity": "sha512-iFGK5jO32vnXM/ASaJBaI0+gVR6uHozvYdxkdhaeOCD6HIQ4iIXadbO2atVpE9oc/H8l2MovJ4LtPhG7lIBN8A==", - "dev": true, - "requires": { - "web3-bzz": "1.7.4", - "web3-core": "1.7.4", - "web3-eth": "1.7.4", - "web3-eth-personal": "1.7.4", - "web3-net": "1.7.4", - "web3-shh": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-bzz": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.7.4.tgz", - "integrity": "sha512-w9zRhyEqTK/yi0LGRHjZMcPCfP24LBjYXI/9YxFw9VqsIZ9/G0CRCnUt12lUx0A56LRAMpF7iQ8eA73aBcO29Q==", - "dev": true, - "requires": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - } - } - }, "web3-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.7.4.tgz", - "integrity": "sha512-L0DCPlIh9bgIED37tYbe7bsWrddoXYc897ANGvTJ6MFkSNGiMwDkTLWSgYd9Mf8qu8b4iuPqXZHMwIo4atoh7Q==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.8.1.tgz", + "integrity": "sha512-LbRZlJH2N6nS3n3Eo9Y++25IvzMY7WvYnp4NM/Ajhh97dAdglYs6rToQ2DbL2RLvTYmTew4O/y9WmOk4nq9COw==", "dev": true, + "peer": true, "requires": { "@types/bn.js": "^5.1.0", "@types/node": "^12.12.6", "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-requestmanager": "1.7.4", - "web3-utils": "1.7.4" + "web3-core-helpers": "1.8.1", + "web3-core-method": "1.8.1", + "web3-core-requestmanager": "1.8.1", + "web3-utils": "1.8.1" }, "dependencies": { "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", "dev": true, + "peer": true, "requires": { "@types/node": "*" } @@ -41454,297 +21320,124 @@ "version": "12.20.55", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true + "dev": true, + "peer": true } } }, "web3-core-helpers": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.7.4.tgz", - "integrity": "sha512-F8PH11qIkE/LpK4/h1fF/lGYgt4B6doeMi8rukeV/s4ivseZHHslv1L6aaijLX/g/j4PsFmR42byynBI/MIzFg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.8.1.tgz", + "integrity": "sha512-ClzNO6T1S1gifC+BThw0+GTfcsjLEY8T1qUp6Ly2+w4PntAdNtKahxWKApWJ0l9idqot/fFIDXwO3Euu7I0Xqw==", "dev": true, + "peer": true, "requires": { - "web3-eth-iban": "1.7.4", - "web3-utils": "1.7.4" + "web3-eth-iban": "1.8.1", + "web3-utils": "1.8.1" } }, "web3-core-method": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.7.4.tgz", - "integrity": "sha512-56K7pq+8lZRkxJyzf5MHQPI9/VL3IJLoy4L/+q8HRdZJ3CkB1DkXYaXGU2PeylG1GosGiSzgIfu1ljqS7CP9xQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.8.1.tgz", + "integrity": "sha512-oYGRodktfs86NrnFwaWTbv2S38JnpPslFwSSARwFv4W9cjbGUW3LDeA5MKD/dRY+ssZ5OaekeMsUCLoGhX68yA==", "dev": true, + "peer": true, "requires": { "@ethersproject/transactions": "^5.6.2", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-utils": "1.7.4" + "web3-core-helpers": "1.8.1", + "web3-core-promievent": "1.8.1", + "web3-core-subscriptions": "1.8.1", + "web3-utils": "1.8.1" } }, "web3-core-promievent": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.7.4.tgz", - "integrity": "sha512-o4uxwXKDldN7ER7VUvDfWsqTx9nQSP1aDssi1XYXeYC2xJbVo0n+z6ryKtmcoWoRdRj7uSpVzal3nEmlr480mA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.8.1.tgz", + "integrity": "sha512-9mxqHlgB0MrZI4oUIRFkuoJMNj3E7btjrMv3sMer/Z9rYR1PfoSc1aAokw4rxKIcAh+ylVtd/acaB2HKB7aRPg==", "dev": true, + "peer": true, "requires": { "eventemitter3": "4.0.4" } }, "web3-core-requestmanager": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.7.4.tgz", - "integrity": "sha512-IuXdAm65BQtPL4aI6LZJJOrKAs0SM5IK2Cqo2/lMNvVMT9Kssq6qOk68Uf7EBDH0rPuINi+ReLP+uH+0g3AnPA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.8.1.tgz", + "integrity": "sha512-x+VC2YPPwZ1khvqA6TA69LvfFCOZXsoUVOxmTx/vIN22PrY9KzKhxcE7pBSiGhmab1jtmRYXUbcQSVpAXqL8cw==", "dev": true, + "peer": true, "requires": { "util": "^0.12.0", - "web3-core-helpers": "1.7.4", - "web3-providers-http": "1.7.4", - "web3-providers-ipc": "1.7.4", - "web3-providers-ws": "1.7.4" + "web3-core-helpers": "1.8.1", + "web3-providers-http": "1.8.1", + "web3-providers-ipc": "1.8.1", + "web3-providers-ws": "1.8.1" } }, "web3-core-subscriptions": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.7.4.tgz", - "integrity": "sha512-VJvKWaXRyxk2nFWumOR94ut9xvjzMrRtS38c4qj8WBIRSsugrZr5lqUwgndtj0qx4F+50JhnU++QEqUEAtKm3g==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.8.1.tgz", + "integrity": "sha512-bmCMq5OeA3E2vZUh8Js1HcJbhwtsE+yeMqGC4oIZB3XsL5SLqyKLB/pU+qUYqQ9o4GdcrFTDPhPg1bgvf7p1Pw==", "dev": true, + "peer": true, "requires": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4" - } - }, - "web3-eth": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.7.4.tgz", - "integrity": "sha512-JG0tTMv0Ijj039emXNHi07jLb0OiWSA9O24MRSk5vToTQyDNXihdF2oyq85LfHuF690lXZaAXrjhtLNlYqb7Ug==", - "dev": true, - "requires": { - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-eth-accounts": "1.7.4", - "web3-eth-contract": "1.7.4", - "web3-eth-ens": "1.7.4", - "web3-eth-iban": "1.7.4", - "web3-eth-personal": "1.7.4", - "web3-net": "1.7.4", - "web3-utils": "1.7.4" - } - }, - "web3-eth-abi": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.7.4.tgz", - "integrity": "sha512-eMZr8zgTbqyL9MCTCAvb67RbVyN5ZX7DvA0jbLOqRWCiw+KlJKTGnymKO6jPE8n5yjk4w01e165Qb11hTDwHgg==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.6.3", - "web3-utils": "1.7.4" - } - }, - "web3-eth-accounts": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.7.4.tgz", - "integrity": "sha512-Y9vYLRKP7VU7Cgq6wG1jFaG2k3/eIuiTKAG8RAuQnb6Cd9k5BRqTm5uPIiSo0AP/u11jDomZ8j7+WEgkU9+Btw==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.5.0", - "@ethereumjs/tx": "^3.3.2", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-util": "^7.0.10", - "scrypt-js": "^3.0.1", - "uuid": "3.3.2", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "requires": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } - } - }, - "web3-eth-contract": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.7.4.tgz", - "integrity": "sha512-ZgSZMDVI1pE9uMQpK0T0HDT2oewHcfTCv0osEqf5qyn5KrcQDg1GT96/+S0dfqZ4HKj4lzS5O0rFyQiLPQ8LzQ==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "requires": { - "@types/node": "*" - } - } - } - }, - "web3-eth-ens": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.7.4.tgz", - "integrity": "sha512-Gw5CVU1+bFXP5RVXTCqJOmHn71X2ghNk9VcEH+9PchLr0PrKbHTA3hySpsPco1WJAyK4t8SNQVlNr3+bJ6/WZA==", - "dev": true, - "requires": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-promievent": "1.7.4", - "web3-eth-abi": "1.7.4", - "web3-eth-contract": "1.7.4", - "web3-utils": "1.7.4" + "web3-core-helpers": "1.8.1" } }, "web3-eth-iban": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.7.4.tgz", - "integrity": "sha512-XyrsgWlZQMv5gRcjXMsNvAoCRvV5wN7YCfFV5+tHUCqN8g9T/o4XUS20vDWD0k4HNiAcWGFqT1nrls02MGZ08w==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.8.1.tgz", + "integrity": "sha512-DomoQBfvIdtM08RyMGkMVBOH0vpOIxSSQ+jukWk/EkMLGMWJtXw/K2c2uHAeq3L/VPWNB7zXV2DUEGV/lNE2Dg==", "dev": true, + "peer": true, "requires": { "bn.js": "^5.2.1", - "web3-utils": "1.7.4" - } - }, - "web3-eth-personal": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.7.4.tgz", - "integrity": "sha512-O10C1Hln5wvLQsDhlhmV58RhXo+GPZ5+W76frSsyIrkJWLtYQTCr5WxHtRC9sMD1idXLqODKKgI2DL+7xeZ0/g==", - "dev": true, - "requires": { - "@types/node": "^12.12.6", - "web3-core": "1.7.4", - "web3-core-helpers": "1.7.4", - "web3-core-method": "1.7.4", - "web3-net": "1.7.4", - "web3-utils": "1.7.4" - }, - "dependencies": { - "@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - } - } - }, - "web3-net": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.7.4.tgz", - "integrity": "sha512-d2Gj+DIARHvwIdmxFQ4PwAAXZVxYCR2lET0cxz4KXbE5Og3DNjJi+MoPkX+WqoUXqimu/EOd4Cd+7gefqVAFDg==", - "dev": true, - "requires": { - "web3-core": "1.7.4", - "web3-core-method": "1.7.4", - "web3-utils": "1.7.4" + "web3-utils": "1.8.1" } }, "web3-providers-http": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.7.4.tgz", - "integrity": "sha512-AU+/S+49rcogUER99TlhW+UBMk0N2DxvN54CJ2pK7alc2TQ7+cprNPLHJu4KREe8ndV0fT6JtWUfOMyTvl+FRA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.8.1.tgz", + "integrity": "sha512-1Zyts4O9W/UNEPkp+jyL19Jc3D15S4yp8xuLTjVhcUEAlHo24NDWEKxtZGUuHk4HrKL2gp8OlsDbJ7MM+ESDgg==", "dev": true, + "peer": true, "requires": { - "web3-core-helpers": "1.7.4", - "xhr2-cookies": "1.1.0" + "abortcontroller-polyfill": "^1.7.3", + "cross-fetch": "^3.1.4", + "es6-promise": "^4.2.8", + "web3-core-helpers": "1.8.1" } }, "web3-providers-ipc": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.7.4.tgz", - "integrity": "sha512-jhArOZ235dZy8fS8090t60nTxbd1ap92ibQw5xIrAQ9m7LcZKNfmLAQUVsD+3dTFvadRMi6z1vCO7zRi84gWHw==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.8.1.tgz", + "integrity": "sha512-nw/W5nclvi+P2z2dYkLWReKLnocStflWqFl+qjtv0xn3MrUTyXMzSF0+61i77+16xFsTgzo4wS/NWIOVkR0EFA==", "dev": true, + "peer": true, "requires": { "oboe": "2.1.5", - "web3-core-helpers": "1.7.4" + "web3-core-helpers": "1.8.1" } }, "web3-providers-ws": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.7.4.tgz", - "integrity": "sha512-g72X77nrcHMFU8hRzQJzfgi/072n8dHwRCoTw+WQrGp+XCQ71fsk2qIu3Tp+nlp5BPn8bRudQbPblVm2uT4myQ==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.8.1.tgz", + "integrity": "sha512-TNefIDAMpdx57+YdWpYZ/xdofS0P+FfKaDYXhn24ie/tH9G+AB+UBSOKnjN0KSadcRSCMBwGPRiEmNHPavZdsA==", "dev": true, + "peer": true, "requires": { "eventemitter3": "4.0.4", - "web3-core-helpers": "1.7.4", + "web3-core-helpers": "1.8.1", "websocket": "^1.0.32" } }, - "web3-shh": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.7.4.tgz", - "integrity": "sha512-mlSZxSYcMkuMCxqhTYnZkUdahZ11h+bBv/8TlkXp/IHpEe4/Gg+KAbmfudakq3EzG/04z70XQmPgWcUPrsEJ+A==", - "dev": true, - "requires": { - "web3-core": "1.7.4", - "web3-core-method": "1.7.4", - "web3-core-subscriptions": "1.7.4", - "web3-net": "1.7.4" - } - }, "web3-utils": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.4.tgz", - "integrity": "sha512-acBdm6Evd0TEZRnChM/MCvGsMwYKmSh7OaUfNf5OKG0CIeGWD/6gqLOWIwmwSnre/2WrA1nKGId5uW2e5EfluA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.8.1.tgz", + "integrity": "sha512-LgnM9p6V7rHHUGfpMZod+NST8cRfGzJ1BTXAyNo7A9cJX9LczBfSRxJp+U/GInYe9mby40t3v22AJdlELibnsQ==", "dev": true, + "peer": true, "requires": { "bn.js": "^5.2.1", "ethereum-bloom-filters": "^1.0.6", @@ -41756,19 +21449,45 @@ }, "dependencies": { "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", "dev": true, + "peer": true, "requires": { "@types/node": "*" } }, + "ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "peer": true, + "requires": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, "ethereumjs-util": { "version": "7.1.5", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, + "peer": true, "requires": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -41782,13 +21501,15 @@ "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true }, "websocket": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", "dev": true, + "peer": true, "requires": { "bufferutil": "^4.0.1", "debug": "^2.2.0", @@ -41803,6 +21524,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "peer": true, "requires": { "ms": "2.0.0" } @@ -41811,7 +21533,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "peer": true } } }, @@ -41819,15 +21542,16 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, "requires": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -41859,17 +21583,18 @@ "dev": true }, "which-typed-array": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.8.tgz", - "integrity": "sha512-Jn4e5PItbcAHyLoRDwvPj1ypu27DJbtdYXUa5zsinrUx77Uvfb0cXwwnGMTn7cjUfhhqgVQnVJCwF+7cgU7tpw==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", "dev": true, + "peer": true, "requires": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", - "es-abstract": "^1.20.0", "for-each": "^0.3.3", + "gopd": "^1.0.1", "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.9" + "is-typed-array": "^1.1.10" } }, "wide-align": { @@ -41914,163 +21639,95 @@ } } }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", - "dev": true - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "dev": true, + "peer": true }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "dev": true, + "peer": true + }, + "wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "peer": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "peer": true + } + } }, "workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==" + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "color-convert": "^2.0.1" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "color-name": "~1.1.4" } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "requires": {} - }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dev": true, - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dev": true, - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - }, - "dependencies": { - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dev": true, - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - } - } - }, - "xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "dev": true, - "requires": { - "xhr-request": "^1.1.0" - } - }, - "xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==", "dev": true, - "requires": { - "cookiejar": "^2.1.1" - } + "requires": {} }, "xmlhttprequest": { "version": "1.8.0", @@ -42078,27 +21735,24 @@ "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", "dev": true }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yaeti": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", - "dev": true + "dev": true, + "peer": true }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "yaml": { "version": "1.10.2", @@ -42107,137 +21761,49 @@ "dev": true }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "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.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true }, "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" } }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "devOptional": true + "dev": true }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 42cd7cd88..75c289a02 100644 --- a/package.json +++ b/package.json @@ -30,43 +30,33 @@ "prepublish": "npm run compile" }, "devDependencies": { - "@aave/deploy-v3": "1.27.0-beta.7", - "@aave/periphery-v3": "^1.19.2-beta.0", - "@nomiclabs/hardhat-ethers": "npm:hardhat-deploy-ethers@^0.3.0-beta.13", + "@aave/deploy-v3": "^1.50.0", + "@aave/periphery-v3": "^1.21.0", + "@ethersproject/bignumber": "^5.6.2", + "@nomicfoundation/hardhat-toolbox": "^2.0.0", "@tenderly/hardhat-tenderly": "1.1.0-beta.5", - "@typechain/ethers-v5": "7.2.0", - "@typechain/hardhat": "2.3.1", "@types/chai": "4.2.11", "@types/lowdb": "1.0.9", - "@types/mocha": "7.0.2", "@types/node": "14.0.5", - "chai": "4.3.4", - "chai-bignumber": "3.0.0", - "defender-relay-client": "1.7.0", + "bluebird": "^3.7.2", "dotenv": "8.2.0", "eth-sig-util": "2.5.3", - "ethereum-waffle": "3.2.0", "ethereumjs-util": "7.0.2", "ethers": "5.6.9", - "globby": "11.0.1", - "hardhat": "2.10.0", + "hardhat": "2.12.2", "hardhat-contract-sizer": "2.0.3", "hardhat-dependency-compiler": "1.1.2", "hardhat-deploy": "0.11.12", "hardhat-gas-reporter": "1.0.8", "husky": "4.2.5", - "lowdb": "1.0.0", "prettier": "2.4.1", "prettier-plugin-solidity": "1.0.0-alpha.53", "pretty-quick": "3.1.1", - "solidity-coverage": "0.7.17", - "ts-generator": "0.1.1", "ts-node": "8.10.2", "tslint": "6.1.2", "tslint-config-prettier": "1.18.0", "tslint-plugin-prettier": "2.3.0", - "typechain": "5.2.0", - "typescript": "4.4.4" + "typescript": "^4.5.0" }, "husky": { "hooks": { @@ -85,11 +75,6 @@ "Pol Sendra " ], "license": "BUSL-1.1", - "dependencies": { - "@nomiclabs/hardhat-etherscan": "^2.1.7", - "axios-curlirize": "^1.3.7", - "tmp-promise": "^3.0.2" - }, "keywords": [ "aave", "protocol", @@ -98,9 +83,6 @@ "ethereum", "solidity" ], - "publishConfig": { - "registry": "https://npm.pkg.github.com" - }, "repository": { "type": "git", "url": "git://github.com/aave/aave-v3-core" diff --git a/test-suites/acl-manager.spec.ts b/test-suites/acl-manager.spec.ts index b8d1d944e..d7a3c6221 100644 --- a/test-suites/acl-manager.spec.ts +++ b/test-suites/acl-manager.spec.ts @@ -55,9 +55,9 @@ makeSuite('Access Control List Manager', (testEnv: TestEnv) => { await expect( aclManager.connect(flashBorrowAdmin.signer).addFlashBorrower(flashBorrower.address) ).to.be.revertedWith( - `'AccessControl: account ${flashBorrowAdmin.address.toLowerCase()} is missing role ${ + `AccessControl: account ${flashBorrowAdmin.address.toLowerCase()} is missing role ${ constants.HashZero - }'` + }` ); expect(await aclManager.isFlashBorrower(flashBorrower.address)).to.be.eq(false); @@ -108,7 +108,7 @@ makeSuite('Access Control List Manager', (testEnv: TestEnv) => { await expect( aclManager.connect(deployer.signer).removeFlashBorrower(flashBorrower.address) ).to.be.revertedWith( - `'AccessControl: account ${deployer.address.toLowerCase()} is missing role ${FLASH_BORROW_ADMIN_ROLE}'` + `AccessControl: account ${deployer.address.toLowerCase()} is missing role ${FLASH_BORROW_ADMIN_ROLE}` ); expect(await aclManager.isFlashBorrower(flashBorrower.address)).to.be.eq(true); diff --git a/test-suites/atoken-repay.spec.ts b/test-suites/atoken-repay.spec.ts index a09e51aae..597bfe6d6 100644 --- a/test-suites/atoken-repay.spec.ts +++ b/test-suites/atoken-repay.spec.ts @@ -58,7 +58,7 @@ makeSuite('AToken: Repay', (testEnv: TestEnv) => { } = testEnv; const repayAmount = utils.parseEther('25'); - await expect(pool.connect(user1.address).repayWithATokens(dai.address, repayAmount, 2)).to.be + await expect(pool.connect(user1.signer).repayWithATokens(dai.address, repayAmount, 2)).to.be .reverted; }); diff --git a/test-suites/helpers/actions.ts b/test-suites/helpers/actions.ts index 0f7427cab..a755aff0e 100644 --- a/test-suites/helpers/actions.ts +++ b/test-suites/helpers/actions.ts @@ -28,7 +28,7 @@ import { MAX_UINT_AMOUNT, ONE_YEAR } from '../../helpers/constants'; import { SignerWithAddress, TestEnv } from './make-suite'; import chai from 'chai'; import { ReserveData, UserReserveData } from './utils/interfaces'; -import { BigNumber, ContractReceipt, Wallet } from 'ethers'; +import { ContractReceipt, Wallet } from 'ethers'; import { AToken } from '../../types/AToken'; import { RateMode, tEthereumAddress } from '../../helpers/types'; import { MintableERC20__factory } from '../../types'; @@ -36,6 +36,7 @@ import { waitForTx, advanceTimeAndBlock } from '@aave/deploy-v3'; import { getChainId } from 'hardhat'; import { timeLatest } from '../../helpers/misc-utils'; import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { BigNumber } from '@ethersproject/bignumber'; declare var hre: HardhatRuntimeEnvironment; diff --git a/test-suites/helpers/make-suite.ts b/test-suites/helpers/make-suite.ts index e69588d23..371388944 100644 --- a/test-suites/helpers/make-suite.ts +++ b/test-suites/helpers/make-suite.ts @@ -21,14 +21,10 @@ import { MintableERC20 } from '../../types/MintableERC20'; import { AToken } from '../../types/AToken'; import { PoolConfigurator } from '../../types/PoolConfigurator'; -import chai from 'chai'; -// @ts-ignore -import bignumberChai from 'chai-bignumber'; import { PriceOracle } from '../../types/PriceOracle'; import { PoolAddressesProvider } from '../../types/PoolAddressesProvider'; import { PoolAddressesProviderRegistry } from '../../types/PoolAddressesProviderRegistry'; import { WETH9Mocked } from '../../types/WETH9Mocked'; -import { solidity } from 'ethereum-waffle'; import { AaveOracle, ACLManager, StableDebtToken, VariableDebtToken } from '../../types'; import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { usingTenderly } from '../../helpers/tenderly-utils'; @@ -36,9 +32,6 @@ import { waitForTx, evmSnapshot, evmRevert, getEthersSigners } from '@aave/deplo declare var hre: HardhatRuntimeEnvironment; -chai.use(bignumberChai()); -chai.use(solidity); - export interface SignerWithAddress { signer: Signer; address: tEthereumAddress; diff --git a/test-suites/helpers/utils/calculations.ts b/test-suites/helpers/utils/calculations.ts index f28db4f29..1bdb7eab3 100644 --- a/test-suites/helpers/utils/calculations.ts +++ b/test-suites/helpers/utils/calculations.ts @@ -1,8 +1,8 @@ import { ONE_YEAR, RAY, MAX_UINT_AMOUNT, PERCENTAGE_FACTOR } from '../../../helpers/constants'; import { IReserveParams, iMultiPoolsAssets, RateMode } from '../../../helpers/types'; -import './wadraymath'; import { ReserveData, UserReserveData } from './interfaces'; -import { BigNumber } from 'ethers'; +import { BigNumber } from '@ethersproject/bignumber'; +import './wadraymath'; import { expect } from 'chai'; interface Configuration { diff --git a/test-suites/helpers/utils/helpers.ts b/test-suites/helpers/utils/helpers.ts index b0848033d..7a10c0184 100644 --- a/test-suites/helpers/utils/helpers.ts +++ b/test-suites/helpers/utils/helpers.ts @@ -1,5 +1,6 @@ import { expect } from 'chai'; -import { logger, utils, BigNumber, Contract } from 'ethers'; +import { logger, utils, Contract } from 'ethers'; +import { BigNumber } from '@ethersproject/bignumber'; import { TransactionReceipt } from '@ethersproject/providers'; import { getContract } from '@aave/deploy-v3'; import { diff --git a/test-suites/helpers/utils/interfaces/index.ts b/test-suites/helpers/utils/interfaces/index.ts index fcf32650d..50136fe0c 100644 --- a/test-suites/helpers/utils/interfaces/index.ts +++ b/test-suites/helpers/utils/interfaces/index.ts @@ -1,4 +1,5 @@ -import { BigNumber } from 'ethers'; +import { BigNumber } from '@ethersproject/bignumber'; +import '../wadraymath'; export interface UserReserveData { scaledATokenBalance: BigNumber; diff --git a/test-suites/helpers/utils/tokenization-events.ts b/test-suites/helpers/utils/tokenization-events.ts index cf88ad2bd..6e516a0f8 100644 --- a/test-suites/helpers/utils/tokenization-events.ts +++ b/test-suites/helpers/utils/tokenization-events.ts @@ -1,5 +1,6 @@ import { ethers } from 'hardhat'; -import { utils, BigNumber } from 'ethers'; +import { utils } from 'ethers'; +import { BigNumber } from '@ethersproject/bignumber'; import { TransactionReceipt } from '@ethersproject/providers'; import { AToken, @@ -18,6 +19,7 @@ import { getTxCostAndTimestamp } from '../actions'; import { RateMode } from '../../../helpers/types'; import { convertToCurrencyDecimals } from '../../../helpers/contracts-helpers'; import { matchEvent } from './helpers'; +import './wadraymath'; const ATOKEN_EVENTS = [ { sig: 'Transfer(address,address,uint256)', args: ['from', 'to', 'value'] }, @@ -62,7 +64,14 @@ const STABLE_DEBT_TOKEN_EVENTS = [ }, { sig: 'Burn(address,uint256,uint256,uint256,uint256,uint256)', - args: ['from', 'amount', 'currentBalance', 'balanceIncrease', 'avgStableRate', 'newTotalSupply'], + args: [ + 'from', + 'amount', + 'currentBalance', + 'balanceIncrease', + 'avgStableRate', + 'newTotalSupply', + ], }, ]; diff --git a/test-suites/liquidation-emode.spec.ts b/test-suites/liquidation-emode.spec.ts index a398b98db..163213d72 100644 --- a/test-suites/liquidation-emode.spec.ts +++ b/test-suites/liquidation-emode.spec.ts @@ -215,7 +215,7 @@ makeSuite('Pool Liquidation: Liquidates borrows in eMode with price change', (te expect(userReserveDataAfter.currentVariableDebt).to.be.closeTo( userReserveDataBefore.currentVariableDebt.sub(amountToLiquidate), - 2, + 3, 'Invalid user borrow balance after liquidation' ); diff --git a/test-suites/liquidation-underlying.spec.ts b/test-suites/liquidation-underlying.spec.ts index de87a82e1..dd2b1acbf 100644 --- a/test-suites/liquidation-underlying.spec.ts +++ b/test-suites/liquidation-underlying.spec.ts @@ -38,7 +38,7 @@ makeSuite('Pool Liquidation: Liquidator receiving the underlying asset', (testEn await expect( pool.liquidationCall(weth.address, dai.address, user.address, utils.parseEther('1000'), false) - ).to.be.revertedWith('2'); + ).to.be.revertedWith('27'); await configurator.setReserveActive(weth.address, true); @@ -46,7 +46,7 @@ makeSuite('Pool Liquidation: Liquidator receiving the underlying asset', (testEn await expect( pool.liquidationCall(weth.address, dai.address, user.address, utils.parseEther('1000'), false) - ).to.be.revertedWith('2'); + ).to.be.revertedWith('27'); await configurator.setReserveActive(dai.address, true); }); diff --git a/test-suites/liquidation-with-fee.spec.ts b/test-suites/liquidation-with-fee.spec.ts index e3755f7da..728d462a5 100644 --- a/test-suites/liquidation-with-fee.spec.ts +++ b/test-suites/liquidation-with-fee.spec.ts @@ -1,28 +1,28 @@ -import {expect} from 'chai'; -import {BigNumber} from 'ethers'; -import {MAX_UINT_AMOUNT, oneEther} from '../helpers/constants'; -import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; -import {ProtocolErrors, RateMode} from '../helpers/types'; -import {AToken__factory} from '../types'; -import {calcExpectedStableDebtTokenBalance} from './helpers/utils/calculations'; -import {getReserveData, getUserData} from './helpers/utils/helpers'; -import {makeSuite} from './helpers/make-suite'; -import {HardhatRuntimeEnvironment} from 'hardhat/types'; -import {waitForTx, increaseTime, evmSnapshot, evmRevert} from '@aave/deploy-v3'; +import { expect } from 'chai'; +import { BigNumber } from '@ethersproject/bignumber'; +import { MAX_UINT_AMOUNT, oneEther } from '../helpers/constants'; +import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; +import { ProtocolErrors, RateMode } from '../helpers/types'; +import { AToken__factory } from '../types'; +import { calcExpectedStableDebtTokenBalance } from './helpers/utils/calculations'; +import { getReserveData, getUserData } from './helpers/utils/helpers'; +import { makeSuite } from './helpers/make-suite'; +import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { waitForTx, increaseTime, evmSnapshot, evmRevert } from '@aave/deploy-v3'; declare var hre: HardhatRuntimeEnvironment; makeSuite('Pool Liquidation: Add fee to liquidations', (testEnv) => { - const {INVALID_HF} = ProtocolErrors; + const { INVALID_HF } = ProtocolErrors; before(async () => { - const {addressesProvider, oracle} = testEnv; + const { addressesProvider, oracle } = testEnv; await waitForTx(await addressesProvider.setPriceOracle(oracle.address)); }); after(async () => { - const {aaveOracle, addressesProvider} = testEnv; + const { aaveOracle, addressesProvider } = testEnv; await waitForTx(await addressesProvider.setPriceOracle(aaveOracle.address)); }); @@ -82,7 +82,7 @@ makeSuite('Pool Liquidation: Add fee to liquidations', (testEnv) => { 0 ); - const {availableBorrowsBase} = await pool.getUserAccountData(borrower.address); + const { availableBorrowsBase } = await pool.getUserAccountData(borrower.address); let toBorrow = availableBorrowsBase.div(daiPrice); await pool .connect(borrower.signer) @@ -147,7 +147,7 @@ makeSuite('Pool Liquidation: Add fee to liquidations', (testEnv) => { }); it('Sets the WETH protocol liquidation fee to 1000 (10.00%)', async () => { - const {configurator, weth, aave, helpersContract} = testEnv; + const { configurator, weth, aave, helpersContract } = testEnv; const oldWethLiquidationProtocolFee = await helpersContract.getLiquidationProtocolFee( weth.address diff --git a/test-suites/liquidity-indexes.spec.ts b/test-suites/liquidity-indexes.spec.ts index a481d0bbc..8efc6b6dc 100644 --- a/test-suites/liquidity-indexes.spec.ts +++ b/test-suites/liquidity-indexes.spec.ts @@ -1,8 +1,9 @@ -import {expect} from 'chai'; -import {BigNumber, ethers} from 'ethers'; -import {MAX_UINT_AMOUNT} from '../helpers/constants'; -import {makeSuite, TestEnv} from './helpers/make-suite'; -import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import { expect } from 'chai'; +import { BigNumber } from '@ethersproject/bignumber'; +import { ethers } from 'ethers'; +import { MAX_UINT_AMOUNT } from '../helpers/constants'; +import { makeSuite, TestEnv } from './helpers/make-suite'; +import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { evmSnapshot, evmRevert, diff --git a/test-suites/rate-strategy.spec.ts b/test-suites/rate-strategy.spec.ts index 0fea55728..688d1c436 100644 --- a/test-suites/rate-strategy.spec.ts +++ b/test-suites/rate-strategy.spec.ts @@ -1,5 +1,6 @@ import { expect } from 'chai'; -import { BigNumber, BigNumberish, utils } from 'ethers'; +import { BigNumberish, utils } from 'ethers'; +import { BigNumber } from '@ethersproject/bignumber'; import { deployDefaultReserveInterestRateStrategy } from '@aave/deploy-v3/dist/helpers/contract-deployments'; import { PERCENTAGE_FACTOR } from '../helpers/constants'; import { AToken, DefaultReserveInterestRateStrategy, MintableERC20 } from '../types'; diff --git a/test-suites/reserve-configuration.spec.ts b/test-suites/reserve-configuration.spec.ts index a27003d4a..1f4f8369b 100644 --- a/test-suites/reserve-configuration.spec.ts +++ b/test-suites/reserve-configuration.spec.ts @@ -1,9 +1,9 @@ -import {expect} from 'chai'; -import {BigNumber} from 'ethers'; -import {deployMockReserveConfiguration} from '@aave/deploy-v3/dist/helpers/contract-deployments'; -import {ProtocolErrors} from '../helpers/types'; -import {evmSnapshot, evmRevert} from '@aave/deploy-v3'; -import {MockReserveConfiguration} from '../types'; +import { expect } from 'chai'; +import { BigNumber } from '@ethersproject/bignumber'; +import { deployMockReserveConfiguration } from '@aave/deploy-v3/dist/helpers/contract-deployments'; +import { ProtocolErrors } from '../helpers/types'; +import { evmSnapshot, evmRevert } from '@aave/deploy-v3'; +import { MockReserveConfiguration } from '../types'; describe('ReserveConfiguration', async () => { let snap: string; @@ -260,7 +260,7 @@ describe('ReserveConfiguration', async () => { it('setLtv() with ltv > MAX_VALID_LTV (revert expected)', async () => { expect(await configMock.getLtv()).to.be.eq(ZERO); - const {INVALID_LTV} = ProtocolErrors; + const { INVALID_LTV } = ProtocolErrors; // setLTV to MAX_VALID_LTV + 1 await expect(configMock.setLtv(MAX_VALID_LTV.add(1))).to.be.revertedWith(INVALID_LTV); @@ -288,7 +288,7 @@ describe('ReserveConfiguration', async () => { it('setLiquidationThreshold() with threshold > MAX_VALID_LIQUIDATION_THRESHOLD (revert expected)', async () => { expect(await configMock.getLiquidationThreshold()).to.be.eq(ZERO); - const {INVALID_LIQ_THRESHOLD} = ProtocolErrors; + const { INVALID_LIQ_THRESHOLD } = ProtocolErrors; // setLiquidationThreshold to MAX_VALID_LIQUIDATION_THRESHOLD + 1 await expect( @@ -318,7 +318,7 @@ describe('ReserveConfiguration', async () => { it('setDecimals() with decimals > MAX_VALID_DECIMALS (revert expected)', async () => { expect(await configMock.getDecimals()).to.be.eq(ZERO); - const {INVALID_DECIMALS} = ProtocolErrors; + const { INVALID_DECIMALS } = ProtocolErrors; // setDecimals to MAX_VALID_DECIMALS + 1 await expect(configMock.setDecimals(MAX_VALID_DECIMALS.add(1))).to.be.revertedWith( @@ -338,7 +338,7 @@ describe('ReserveConfiguration', async () => { it('setEModeCategory() with categoryID > MAX_VALID_EMODE_CATEGORY (revert expected)', async () => { expect(await configMock.getEModeCategory()).to.be.eq(ZERO); - const {INVALID_EMODE_CATEGORY} = ProtocolErrors; + const { INVALID_EMODE_CATEGORY } = ProtocolErrors; await expect(configMock.setEModeCategory(MAX_VALID_EMODE_CATEGORY.add(1))).to.be.revertedWith( INVALID_EMODE_CATEGORY diff --git a/test-suites/stable-debt-token-events.spec.ts b/test-suites/stable-debt-token-events.spec.ts index 6ab5dc492..7d99c6ff0 100644 --- a/test-suites/stable-debt-token-events.spec.ts +++ b/test-suites/stable-debt-token-events.spec.ts @@ -1,13 +1,18 @@ -import {evmSnapshot, evmRevert, advanceTimeAndBlock, MintableERC20__factory} from '@aave/deploy-v3'; -import {expect} from 'chai'; -import {ethers} from 'hardhat'; -import {BigNumber} from 'ethers'; -import {TransactionReceipt} from '@ethersproject/providers'; -import {MAX_UINT_AMOUNT} from '../helpers/constants'; -import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; -import {RateMode} from '../helpers/types'; -import {Pool, StableDebtToken} from '../types'; -import {makeSuite, SignerWithAddress, TestEnv} from './helpers/make-suite'; +import { + evmSnapshot, + evmRevert, + advanceTimeAndBlock, + MintableERC20__factory, +} from '@aave/deploy-v3'; +import { expect } from 'chai'; +import { ethers } from 'hardhat'; +import { BigNumber } from '@ethersproject/bignumber'; +import { TransactionReceipt } from '@ethersproject/providers'; +import { MAX_UINT_AMOUNT } from '../helpers/constants'; +import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; +import { RateMode } from '../helpers/types'; +import { Pool, StableDebtToken } from '../types'; +import { makeSuite, SignerWithAddress, TestEnv } from './helpers/make-suite'; import { supply, stableBorrow, @@ -55,7 +60,7 @@ const increaseSupplyIndex = async ( '0' ); - const {aTokenAddress} = await pool.getReserveData(assetToIncrease); + const { aTokenAddress } = await pool.getReserveData(assetToIncrease); const availableLiquidity = await borrowingToken.balanceOf(aTokenAddress); await pool .connect(depositor.signer) @@ -92,7 +97,7 @@ makeSuite('StableDebtToken: Events', (testEnv: TestEnv) => { let snapId; before(async () => { - const {users, pool, dai, weth} = testEnv; + const { users, pool, dai, weth } = testEnv; [alice, bob, depositor, depositor2] = users; const amountToMint = await convertToCurrencyDecimals(dai.address, '10000000'); @@ -140,7 +145,7 @@ makeSuite('StableDebtToken: Events', (testEnv: TestEnv) => { }); const testMultipleBorrowsAndRepays = async (indexChange: boolean) => { - const {pool, dai, stableDebtDai, weth} = testEnv; + const { pool, dai, stableDebtDai, weth } = testEnv; let rcpt; let aliceBalanceBefore = await stableDebtDai.balanceOf(alice.address); @@ -226,7 +231,7 @@ makeSuite('StableDebtToken: Events', (testEnv: TestEnv) => { }); const testMultipleBorrowsAndRepaysOnBehalf = async (indexChange: boolean) => { - const {pool, dai, stableDebtDai, weth} = testEnv; + const { pool, dai, stableDebtDai, weth } = testEnv; let rcpt; let aliceBalanceBefore = await stableDebtDai.balanceOf(alice.address); @@ -341,7 +346,7 @@ makeSuite('StableDebtToken: Events', (testEnv: TestEnv) => { }); const testMultipleBorrowsOnBehalfAndRepaysOnBehalf = async (indexChange: boolean) => { - const {pool, dai, stableDebtDai, weth} = testEnv; + const { pool, dai, stableDebtDai, weth } = testEnv; let rcpt; let aliceBalanceBefore = await stableDebtDai.balanceOf(alice.address); diff --git a/test-suites/wadraymath.spec.ts b/test-suites/wadraymath.spec.ts index 640a00579..934bae911 100644 --- a/test-suites/wadraymath.spec.ts +++ b/test-suites/wadraymath.spec.ts @@ -1,5 +1,5 @@ import { expect } from 'chai'; -import { BigNumber } from 'ethers'; +import { BigNumber } from '@ethersproject/bignumber'; import { MAX_UINT_AMOUNT, RAY, WAD, HALF_RAY, HALF_WAD } from '../helpers/constants'; import { WadRayMathWrapper, WadRayMathWrapper__factory } from '../types'; import { getFirstSigner } from '@aave/deploy-v3/dist/helpers/utilities/signer'; diff --git a/tsconfig.json b/tsconfig.json index 294757e2a..b7c0dfde3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,6 @@ "files": [ "./hardhat.config.ts", "node_modules/hardhat-typechain/src/type-extensions.ts", - "node_modules/@nomiclabs/hardhat-waffle/src/type-extensions.ts", "node_modules/@nomiclabs/hardhat-etherscan/src/type-extensions.ts", "node_modules/hardhat-gas-reporter/src/type-extensions.ts" ] From 23b3aa3aa5f862c4d35c5d0af3c68b3df2b7930b Mon Sep 17 00:00:00 2001 From: kartojal Date: Fri, 25 Nov 2022 14:24:24 +0100 Subject: [PATCH 61/87] chore: use fixed @aave/deploy-v3 package --- package-lock.json | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3d01212de..0fae014f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.16.2-beta.1", "license": "BUSL-1.1", "devDependencies": { - "@aave/deploy-v3": "^1.50.0", + "@aave/deploy-v3": "1.50.0-beta.2", "@aave/periphery-v3": "^1.21.0", "@ethersproject/bignumber": "^5.6.2", "@nomicfoundation/hardhat-toolbox": "^2.0.0", @@ -74,9 +74,9 @@ } }, "node_modules/@aave/deploy-v3": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/@aave/deploy-v3/-/deploy-v3-1.50.0.tgz", - "integrity": "sha512-NeAVwcV583oHH0IHLcZUR9nTV05qGOWgONgvuZSo67RNBjpoZUiMEtTt4S0j9Zl9HGtN6yhWg4B5EFVo96NPGQ==", + "version": "1.50.0-beta.2", + "resolved": "https://registry.npmjs.org/@aave/deploy-v3/-/deploy-v3-1.50.0-beta.2.tgz", + "integrity": "sha512-khBgMd05qLq1ZChhApcEOsED7AVVorRSMsS8bwp8lV0a8LnBZ8A/Vu7Z8UcMwKQXxXI83MxCxQ7r82TKR1n3Tg==", "dev": true, "dependencies": { "defender-relay-client": "^1.11.1" @@ -12512,9 +12512,9 @@ } }, "@aave/deploy-v3": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/@aave/deploy-v3/-/deploy-v3-1.50.0.tgz", - "integrity": "sha512-NeAVwcV583oHH0IHLcZUR9nTV05qGOWgONgvuZSo67RNBjpoZUiMEtTt4S0j9Zl9HGtN6yhWg4B5EFVo96NPGQ==", + "version": "1.50.0-beta.2", + "resolved": "https://registry.npmjs.org/@aave/deploy-v3/-/deploy-v3-1.50.0-beta.2.tgz", + "integrity": "sha512-khBgMd05qLq1ZChhApcEOsED7AVVorRSMsS8bwp8lV0a8LnBZ8A/Vu7Z8UcMwKQXxXI83MxCxQ7r82TKR1n3Tg==", "dev": true, "requires": { "defender-relay-client": "^1.11.1" diff --git a/package.json b/package.json index 75c289a02..79b5989a2 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "prepublish": "npm run compile" }, "devDependencies": { - "@aave/deploy-v3": "^1.50.0", + "@aave/deploy-v3": "1.50.0-beta.2", "@aave/periphery-v3": "^1.21.0", "@ethersproject/bignumber": "^5.6.2", "@nomicfoundation/hardhat-toolbox": "^2.0.0", From 678151d57fb36e37cdf07e297cd1d776f4557c4c Mon Sep 17 00:00:00 2001 From: David K Date: Fri, 25 Nov 2022 16:38:51 +0100 Subject: [PATCH 62/87] chore: remove ganache dependency from solcover --- .solcover.js | 1 - 1 file changed, 1 deletion(-) diff --git a/.solcover.js b/.solcover.js index dce1b061e..dc2d2b990 100644 --- a/.solcover.js +++ b/.solcover.js @@ -2,7 +2,6 @@ const accounts = require(`./test-wallets.js`).accounts; const cp = require('child_process'); module.exports = { - client: require('ganache-cli'), configureYulOptimizer: true, skipFiles: ['./mocks', './interfaces', './dependencies'], mocha: { From ee931c4091a001aee798c1f7532384cdab9c1ec7 Mon Sep 17 00:00:00 2001 From: David K Date: Mon, 5 Dec 2022 14:26:43 +0100 Subject: [PATCH 63/87] Add onBehalfOf parameter to AToken handleRepayment function (#743) * feat: add onBehalfOf parameter to handleRepayment at AToken.sol * Update contracts/interfaces/IAToken.sol Co-authored-by: Ernesto Boado --- Certora/certora/specs/pool.spec | 2 +- contracts/interfaces/IAToken.sol | 7 +- .../mocks/tokens/MockATokenRepayment.sol | 23 ++++ .../protocol/libraries/logic/BorrowLogic.sol | 6 +- .../libraries/logic/FlashLoanLogic.sol | 6 +- .../libraries/logic/LiquidationLogic.sol | 1 + contracts/protocol/tokenization/AToken.sol | 6 +- hardhat.config.ts | 14 +-- package-lock.json | 35 ++---- package.json | 1 + test-suites/atoken-event-accounting.spec.ts | 24 ++++- test-suites/atoken-repay.spec.ts | 48 +++++++-- .../helpers/utils/tokenization-events.ts | 7 ++ test-suites/liquidation-atoken.spec.ts | 24 ++++- test-suites/pool-flashloan.spec.ts | 102 ++++++++++++------ .../variable-debt-token-events.spec.ts | 18 +++- tsconfig.json | 1 - 17 files changed, 243 insertions(+), 82 deletions(-) create mode 100644 contracts/mocks/tokens/MockATokenRepayment.sol diff --git a/Certora/certora/specs/pool.spec b/Certora/certora/specs/pool.spec index 6d9fab988..dda75b960 100644 --- a/Certora/certora/specs/pool.spec +++ b/Certora/certora/specs/pool.spec @@ -72,7 +72,7 @@ methods { mintToTreasury(uint256 amount, uint256 index) => DISPATCHER(true) transferOnLiquidation(address from, address to, uint256 value) => DISPATCHER(true) transferUnderlyingTo(address user, uint256 amount) => DISPATCHER(true) - handleRepayment(address user, uint256 amount) => DISPATCHER(true) + handleRepayment(address user, address onBehalfOf, uint256 amount) => DISPATCHER(true) permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) => DISPATCHER(true) //Debt Tokens diff --git a/contracts/interfaces/IAToken.sol b/contracts/interfaces/IAToken.sol index 40fecd39f..43b9c949b 100644 --- a/contracts/interfaces/IAToken.sol +++ b/contracts/interfaces/IAToken.sol @@ -84,9 +84,14 @@ interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken { * transfer is concluded. However in the future there may be aTokens that allow for example to stake the underlying * to receive LM rewards. In that case, `handleRepayment()` would perform the staking of the underlying asset. * @param user The user executing the repayment + * @param onBehalfOf The address of the user who will get his debt reduced/removed * @param amount The amount getting repaid **/ - function handleRepayment(address user, uint256 amount) external; + function handleRepayment( + address user, + address onBehalfOf, + uint256 amount + ) external; /** * @notice Allow passing a signed message to approve spending diff --git a/contracts/mocks/tokens/MockATokenRepayment.sol b/contracts/mocks/tokens/MockATokenRepayment.sol new file mode 100644 index 000000000..3d5c64a70 --- /dev/null +++ b/contracts/mocks/tokens/MockATokenRepayment.sol @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity 0.8.10; + +import {AToken} from '../../protocol/tokenization/AToken.sol'; +import {IPool} from '../../interfaces/IPool.sol'; + +contract MockATokenRepayment is AToken { + event MockRepayment(address user, address onBehalfOf, uint256 amount); + + constructor(IPool pool) AToken(pool) {} + + function getRevision() internal pure override returns (uint256) { + return 0x2; + } + + function handleRepayment( + address user, + address onBehalfOf, + uint256 amount + ) external override onlyPool { + emit MockRepayment(user, onBehalfOf, amount); + } +} diff --git a/contracts/protocol/libraries/logic/BorrowLogic.sol b/contracts/protocol/libraries/logic/BorrowLogic.sol index 0559305f0..1c1a24d5c 100644 --- a/contracts/protocol/libraries/logic/BorrowLogic.sol +++ b/contracts/protocol/libraries/logic/BorrowLogic.sol @@ -252,7 +252,11 @@ library BorrowLogic { ); } else { IERC20(params.asset).safeTransferFrom(msg.sender, reserveCache.aTokenAddress, paybackAmount); - IAToken(reserveCache.aTokenAddress).handleRepayment(msg.sender, paybackAmount); + IAToken(reserveCache.aTokenAddress).handleRepayment( + msg.sender, + params.onBehalfOf, + paybackAmount + ); } emit Repay(params.asset, params.onBehalfOf, msg.sender, paybackAmount, params.useATokens); diff --git a/contracts/protocol/libraries/logic/FlashLoanLogic.sol b/contracts/protocol/libraries/logic/FlashLoanLogic.sol index 521ed212c..0cb8e2d7b 100644 --- a/contracts/protocol/libraries/logic/FlashLoanLogic.sol +++ b/contracts/protocol/libraries/logic/FlashLoanLogic.sol @@ -248,7 +248,11 @@ library FlashLoanLogic { amountPlusPremium ); - IAToken(reserveCache.aTokenAddress).handleRepayment(params.receiverAddress, amountPlusPremium); + IAToken(reserveCache.aTokenAddress).handleRepayment( + params.receiverAddress, + params.receiverAddress, + amountPlusPremium + ); emit FlashLoan( params.receiverAddress, diff --git a/contracts/protocol/libraries/logic/LiquidationLogic.sol b/contracts/protocol/libraries/logic/LiquidationLogic.sol index aea05b760..9a8f6b746 100644 --- a/contracts/protocol/libraries/logic/LiquidationLogic.sol +++ b/contracts/protocol/libraries/logic/LiquidationLogic.sol @@ -223,6 +223,7 @@ library LiquidationLogic { IAToken(vars.debtReserveCache.aTokenAddress).handleRepayment( msg.sender, + params.user, vars.actualDebtToLiquidate ); diff --git a/contracts/protocol/tokenization/AToken.sol b/contracts/protocol/tokenization/AToken.sol index 81989720a..d011e19c2 100644 --- a/contracts/protocol/tokenization/AToken.sol +++ b/contracts/protocol/tokenization/AToken.sol @@ -163,7 +163,11 @@ contract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, I } /// @inheritdoc IAToken - function handleRepayment(address user, uint256 amount) external virtual override onlyPool { + function handleRepayment( + address user, + address onBehalfOf, + uint256 amount + ) external virtual override onlyPool { // Intentionally left blank } diff --git a/hardhat.config.ts b/hardhat.config.ts index c7064c1ad..7d3ab5e3d 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,9 +1,9 @@ import path from 'path'; -import {HardhatUserConfig} from 'hardhat/types'; +import { HardhatUserConfig } from 'hardhat/types'; // @ts-ignore -import {accounts} from './test-wallets.js'; -import {COVERAGE_CHAINID, HARDHAT_CHAINID} from './helpers/constants'; -import {buildForkConfig} from './helper-hardhat-config'; +import { accounts } from './test-wallets.js'; +import { COVERAGE_CHAINID, HARDHAT_CHAINID } from './helpers/constants'; +import { buildForkConfig } from './helper-hardhat-config'; require('dotenv').config(); @@ -12,7 +12,9 @@ import 'hardhat-deploy'; import '@tenderly/hardhat-tenderly'; import 'hardhat-contract-sizer'; import 'hardhat-dependency-compiler'; -import {DEFAULT_NAMED_ACCOUNTS} from '@aave/deploy-v3'; +import '@nomicfoundation/hardhat-chai-matchers'; + +import { DEFAULT_NAMED_ACCOUNTS } from '@aave/deploy-v3'; const DEFAULT_BLOCK_GAS_LIMIT = 12450000; const HARDFORK = 'london'; @@ -67,7 +69,7 @@ const hardhatConfig = { throwOnCallFailures: true, forking: buildForkConfig(), allowUnlimitedContractSize: true, - accounts: accounts.map(({secretKey, balance}: {secretKey: string; balance: string}) => ({ + accounts: accounts.map(({ secretKey, balance }: { secretKey: string; balance: string }) => ({ privateKey: secretKey, balance, })), diff --git a/package-lock.json b/package-lock.json index 0fae014f4..7836faa21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@aave/deploy-v3": "1.50.0-beta.2", "@aave/periphery-v3": "^1.21.0", "@ethersproject/bignumber": "^5.6.2", + "@nomicfoundation/hardhat-chai-matchers": "1.0.5", "@nomicfoundation/hardhat-toolbox": "^2.0.0", "@tenderly/hardhat-tenderly": "1.1.0-beta.5", "@types/chai": "4.2.11", @@ -1391,11 +1392,10 @@ } }, "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.4.tgz", - "integrity": "sha512-n/5UMwGaUK2zM8ALuMChVwB1lEPeDTb5oBjQ1g7hVsUdS8x+XG9JIEp4Ze6Bwy98tghA7Y1+PCH4SNE2P3UQ2g==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.5.tgz", + "integrity": "sha512-+W5C/+5FHI2xBajUN9THSNc1UP6FUsA7LeLmfnaC9VMi/50/DEjjxd8OmizEXgV1Bjck7my4NVQLL1Ti39FkpA==", "dev": true, - "peer": true, "dependencies": { "@ethersproject/abi": "^5.1.2", "@types/chai-as-promised": "^7.1.3", @@ -2025,7 +2025,6 @@ "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", "dev": true, - "peer": true, "dependencies": { "@types/chai": "*" } @@ -2913,7 +2912,6 @@ "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, - "peer": true, "dependencies": { "check-error": "^1.0.2" }, @@ -2949,7 +2947,6 @@ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", "dev": true, - "peer": true, "engines": { "node": "*" } @@ -3379,7 +3376,6 @@ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", "dev": true, - "peer": true, "dependencies": { "type-detect": "^4.0.0" }, @@ -8819,8 +8815,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true, - "peer": true + "dev": true }, "node_modules/os-tmpdir": { "version": "1.0.2", @@ -11588,7 +11583,6 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "peer": true, "engines": { "node": ">=4" } @@ -13468,11 +13462,10 @@ } }, "@nomicfoundation/hardhat-chai-matchers": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.4.tgz", - "integrity": "sha512-n/5UMwGaUK2zM8ALuMChVwB1lEPeDTb5oBjQ1g7hVsUdS8x+XG9JIEp4Ze6Bwy98tghA7Y1+PCH4SNE2P3UQ2g==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.5.tgz", + "integrity": "sha512-+W5C/+5FHI2xBajUN9THSNc1UP6FUsA7LeLmfnaC9VMi/50/DEjjxd8OmizEXgV1Bjck7my4NVQLL1Ti39FkpA==", "dev": true, - "peer": true, "requires": { "@ethersproject/abi": "^5.1.2", "@types/chai-as-promised": "^7.1.3", @@ -13903,7 +13896,6 @@ "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", "dev": true, - "peer": true, "requires": { "@types/chai": "*" } @@ -14633,7 +14625,6 @@ "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, - "peer": true, "requires": { "check-error": "^1.0.2" } @@ -14659,8 +14650,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true, - "peer": true + "dev": true }, "chokidar": { "version": "3.5.3", @@ -15012,7 +15002,6 @@ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.2.tgz", "integrity": "sha512-gT18+YW4CcW/DBNTwAmqTtkJh7f9qqScu2qFVlx7kCoeY9tlBu9cUcr7+I+Z/noG8INehS3xQgLpTtd/QUTn4w==", "dev": true, - "peer": true, "requires": { "type-detect": "^4.0.0" } @@ -18986,8 +18975,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true, - "peer": true + "dev": true }, "os-tmpdir": { "version": "1.0.2", @@ -21099,8 +21087,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "peer": true + "dev": true }, "type-fest": { "version": "0.21.3", diff --git a/package.json b/package.json index 79b5989a2..42f72d0b3 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "@aave/deploy-v3": "1.50.0-beta.2", "@aave/periphery-v3": "^1.21.0", "@ethersproject/bignumber": "^5.6.2", + "@nomicfoundation/hardhat-chai-matchers": "1.0.5", "@nomicfoundation/hardhat-toolbox": "^2.0.0", "@tenderly/hardhat-tenderly": "1.1.0-beta.5", "@types/chai": "4.2.11", diff --git a/test-suites/atoken-event-accounting.spec.ts b/test-suites/atoken-event-accounting.spec.ts index da8830cc2..97ef6b840 100644 --- a/test-suites/atoken-event-accounting.spec.ts +++ b/test-suites/atoken-event-accounting.spec.ts @@ -1,3 +1,4 @@ +import { MockATokenRepayment } from './../types/mocks/tokens/MockATokenRepayment'; import { waitForTx, increaseTime, ZERO_ADDRESS } from '@aave/deploy-v3'; import { expect } from 'chai'; import { BigNumber, utils } from 'ethers'; @@ -6,6 +7,7 @@ import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; import { RateMode } from '../helpers/types'; import { makeSuite } from './helpers/make-suite'; import { getATokenEvent, getVariableDebtTokenEvent } from './helpers/utils/tokenization-events'; +import { MockATokenRepayment__factory } from '../types'; makeSuite('AToken: Mint and Burn Event Accounting', (testEnv) => { let firstDaiDeposit; @@ -20,16 +22,29 @@ makeSuite('AToken: Mint and Burn Event Accounting', (testEnv) => { let accruedDebt1: BigNumber = BigNumber.from(0); let accruedDebt2: BigNumber = BigNumber.from(0); let accruedDebt3: BigNumber = BigNumber.from(0); + let aTokenRepayImpl: MockATokenRepayment; const transferEventSignature = utils.keccak256( utils.toUtf8Bytes('Transfer(address,address,uint256)') ); before('User 0 deposits 100 DAI, user 1 deposits 1 WETH, borrows 50 DAI', async () => { - const { dai } = testEnv; + const { dai, configurator, aDai, deployer, pool } = testEnv; firstDaiDeposit = await convertToCurrencyDecimals(dai.address, '10000'); secondDaiDeposit = await convertToCurrencyDecimals(dai.address, '20000'); thirdDaiDeposit = await convertToCurrencyDecimals(dai.address, '50000'); + + aTokenRepayImpl = await new MockATokenRepayment__factory(deployer.signer).deploy(pool.address); + + await configurator.updateAToken({ + asset: dai.address, + treasury: await aDai.RESERVE_TREASURY_ADDRESS(), + incentivesController: await aDai.getIncentivesController(), + name: await aDai.name(), + symbol: await aDai.symbol(), + implementation: aTokenRepayImpl.address, + params: '0x', + }); }); it('User 1 supplies DAI', async () => { @@ -314,6 +329,7 @@ makeSuite('AToken: Mint and Burn Event Accounting', (testEnv) => { it('User 2 repays all remaining DAI', async () => { const { dai, + aDai, variableDebtDai, users: [, borrower], pool, @@ -338,6 +354,7 @@ makeSuite('AToken: Mint and Burn Event Accounting', (testEnv) => { const repayTx = await pool .connect(borrower.signer) .repay(dai.address, MAX_UINT_AMOUNT, RateMode.Variable, borrower.address); + const repayReceipt = await repayTx.wait(); const daiBalanceAfter = await dai.balanceOf(borrower.address); @@ -372,6 +389,11 @@ makeSuite('AToken: Mint and Burn Event Accounting', (testEnv) => { expect(parsedBurnEvent.value).to.be.closeTo(totalBurned, 2); expect(parsedBurnEvent.balanceIncrease).to.be.closeTo(accruedDebt3, 2); expect(borrowerDaiData.currentVariableDebt).to.be.equal(0); + + // check handleRepayment function is correctly called + await expect(repayTx) + .to.emit(aTokenRepayImpl.attach(aDai.address), 'MockRepayment') + .withArgs(borrower.address, borrower.address, daiRepaid); }); it('User 1 withdraws all deposited funds and interest', async () => { diff --git a/test-suites/atoken-repay.spec.ts b/test-suites/atoken-repay.spec.ts index 597bfe6d6..d544a5b62 100644 --- a/test-suites/atoken-repay.spec.ts +++ b/test-suites/atoken-repay.spec.ts @@ -1,3 +1,5 @@ +import { MockATokenRepayment } from './../types/mocks/tokens/MockATokenRepayment'; +import { MockATokenRepayment__factory } from './../types/factories/mocks/tokens/MockATokenRepayment__factory'; import { waitForTx, evmSnapshot, @@ -14,16 +16,21 @@ import { setBlocktime, timeLatest } from '../helpers/misc-utils'; import { RateMode } from '../helpers/types'; import { TestEnv, makeSuite } from './helpers/make-suite'; import './helpers/utils/wadraymath'; +import { AaveDistributionManager__factory } from '@aave/deploy-v3/dist/types/typechain/factories/@aave/safety-module/contracts/stake'; makeSuite('AToken: Repay', (testEnv: TestEnv) => { let snapShot: string; + let aTokenRepayImpl: MockATokenRepayment; before('User 0 deposits 100 DAI, user 1 deposits 1 WETH, borrows 50 DAI', async () => { const { weth, pool, dai, + aDai, users: [user0, user1], + deployer, + configurator, } = testEnv; const daiAmount = utils.parseEther('100'); @@ -34,6 +41,18 @@ makeSuite('AToken: Repay', (testEnv: TestEnv) => { await waitForTx(await dai.connect(user0.signer).approve(pool.address, MAX_UINT_AMOUNT)); await waitForTx(await weth.connect(user1.signer).approve(pool.address, MAX_UINT_AMOUNT)); + aTokenRepayImpl = await new MockATokenRepayment__factory(deployer.signer).deploy(pool.address); + + await configurator.updateAToken({ + asset: dai.address, + treasury: await aDai.RESERVE_TREASURY_ADDRESS(), + incentivesController: await aDai.getIncentivesController(), + name: await aDai.name(), + symbol: await aDai.symbol(), + implementation: aTokenRepayImpl.address, + params: '0x', + }); + expect(await pool.connect(user0.signer).deposit(dai.address, daiAmount, user0.address, 0)); expect(await pool.connect(user1.signer).deposit(weth.address, wethAmount, user1.address, 0)); @@ -84,7 +103,8 @@ makeSuite('AToken: Repay', (testEnv: TestEnv) => { await expect(pool.connect(user1.signer).repayWithATokens(dai.address, repayAmount, 2)) .to.emit(pool, 'Repay') - .withArgs(dai.address, user1.address, user1.address, repayAmount, true); + .withArgs(dai.address, user1.address, user1.address, repayAmount, true) + .and.not.to.emit(aTokenRepayImpl.attach(aDai.address), 'MockRepayment'); const balanceAfter = await aDai.balanceOf(user1.address); const debtAfter = await variableDebtDai.balanceOf(user1.address); @@ -112,14 +132,18 @@ makeSuite('AToken: Repay', (testEnv: TestEnv) => { const debtBefore = await variableDebtDai.balanceOf(user1.address, { blockTag: 'pending' }); - const tx = await waitForTx( - await pool.connect(user1.signer).repayWithATokens(dai.address, MAX_UINT_AMOUNT, 2) - ); + const action = await pool + .connect(user1.signer) + .repayWithATokens(dai.address, MAX_UINT_AMOUNT, 2); + + const tx = await waitForTx(action); const repayEventSignature = utils.keccak256( utils.toUtf8Bytes('Repay(address,address,address,uint256,bool)') ); + await expect(action).to.not.emit(aTokenRepayImpl.attach(aDai.address), 'MockRepayment'); + const rawRepayEvents = tx.logs.filter((log) => log.topics[0] === repayEventSignature); const parsedRepayEvent = pool.interface.parseLog(rawRepayEvents[0]); @@ -155,9 +179,13 @@ makeSuite('AToken: Repay', (testEnv: TestEnv) => { const debtBefore = await variableDebtDai.balanceOf(user1.address, { blockTag: 'pending' }); expect(debtBefore).to.be.gt(parseUnits('50', 18)); - const tx = await waitForTx( - await pool.connect(user1.signer).repayWithATokens(dai.address, MAX_UINT_AMOUNT, 2) - ); + const action = await pool + .connect(user1.signer) + .repayWithATokens(dai.address, MAX_UINT_AMOUNT, 2); + + const tx = await waitForTx(action); + + await expect(action).to.not.emit(aTokenRepayImpl.attach(aDai.address), 'MockRepayment'); const repayEventSignature = utils.keccak256( utils.toUtf8Bytes('Repay(address,address,address,uint256,bool)') @@ -206,7 +234,11 @@ makeSuite('AToken: Repay', (testEnv: TestEnv) => { // Now we repay 250 with aTokens const repayAmount = parseUnits('250', 18); - await pool.connect(user.signer).repayWithATokens(dai.address, repayAmount, RateMode.Variable); + const action = await pool + .connect(user.signer) + .repayWithATokens(dai.address, repayAmount, RateMode.Variable); + + await expect(action).to.not.emit(aTokenRepayImpl.attach(aDai.address), 'MockRepayment'); const reserveData = await pool.getReserveData(dai.address); const strategy = DefaultReserveInterestRateStrategy__factory.connect( diff --git a/test-suites/helpers/utils/tokenization-events.ts b/test-suites/helpers/utils/tokenization-events.ts index 6e516a0f8..a068b346e 100644 --- a/test-suites/helpers/utils/tokenization-events.ts +++ b/test-suites/helpers/utils/tokenization-events.ts @@ -1,3 +1,4 @@ +import { MockATokenRepayment__factory } from './../../../types/factories/mocks/tokens/MockATokenRepayment__factory'; import { ethers } from 'hardhat'; import { utils } from 'ethers'; import { BigNumber } from '@ethersproject/bignumber'; @@ -20,6 +21,7 @@ import { RateMode } from '../../../helpers/types'; import { convertToCurrencyDecimals } from '../../../helpers/contracts-helpers'; import { matchEvent } from './helpers'; import './wadraymath'; +import { expect } from 'chai'; const ATOKEN_EVENTS = [ { sig: 'Transfer(address,address,uint256)', args: ['from', 'to', 'value'] }, @@ -370,6 +372,11 @@ export const repayVariableBorrow = async ( .repay(underlying, amount, RateMode.Variable, onBehalfOf); const rcpt = await tx.wait(); + // check handleRepayment function is correctly called + await expect(tx) + .to.emit(MockATokenRepayment__factory.connect(aTokenAddress, user.signer), 'MockRepayment') + .withArgs(user.address, onBehalfOf, amount); + const indexAfter = await pool.getReserveNormalizedVariableDebt(underlying); const addedScaledBalance = amount.rayDiv(indexAfter); const scaledBalance = (await variableDebtToken.scaledBalanceOf(onBehalfOf)).add( diff --git a/test-suites/liquidation-atoken.spec.ts b/test-suites/liquidation-atoken.spec.ts index baa272f48..0eb59c2ed 100644 --- a/test-suites/liquidation-atoken.spec.ts +++ b/test-suites/liquidation-atoken.spec.ts @@ -1,3 +1,4 @@ +import { MockATokenRepayment__factory } from './../types/factories/mocks/tokens/MockATokenRepayment__factory'; import { expect } from 'chai'; import { BigNumber } from 'ethers'; import { MAX_UINT_AMOUNT, oneEther } from '../helpers/constants'; @@ -22,10 +23,25 @@ makeSuite('Pool Liquidation: Liquidator receiving aToken', (testEnv) => { let oracleBaseDecimals: number; before(async () => { - const { aaveOracle, addressesProvider, oracle } = testEnv; + const { aaveOracle, addressesProvider, oracle, deployer, pool, configurator, aDai, dai } = + testEnv; oracleBaseDecimals = (await (await aaveOracle.BASE_CURRENCY_UNIT()).toString().length) - 1; await waitForTx(await addressesProvider.setPriceOracle(oracle.address)); + + const aTokenRepayImpl = await new MockATokenRepayment__factory(deployer.signer).deploy( + pool.address + ); + + await configurator.updateAToken({ + asset: dai.address, + treasury: await aDai.RESERVE_TREASURY_ADDRESS(), + incentivesController: await aDai.getIncentivesController(), + name: await aDai.name(), + symbol: await aDai.symbol(), + implementation: aTokenRepayImpl.address, + params: '0x', + }); }); after(async () => { @@ -139,6 +155,7 @@ makeSuite('Pool Liquidation: Liquidator receiving aToken', (testEnv) => { const { pool, dai, + aDai, weth, users: [, borrower], oracle, @@ -282,6 +299,11 @@ makeSuite('Pool Liquidation: Liquidator receiving aToken', (testEnv) => { (await helpersContract.getUserReserveData(weth.address, deployer.address)) .usageAsCollateralEnabled ).to.be.true; + + // check handleRepayment function is correctly called + await expect(tx) + .to.emit(MockATokenRepayment__factory.connect(aDai.address, borrower.signer), 'MockRepayment') + .withArgs(deployer.address, borrower.address, amountToLiquidate); }); it('User 3 deposits 2000 USDC, user 4 0.12 WETH, user 4 borrows - drops HF, liquidates the borrow', async () => { diff --git a/test-suites/pool-flashloan.spec.ts b/test-suites/pool-flashloan.spec.ts index d4d9c2b26..4bf042ced 100644 --- a/test-suites/pool-flashloan.spec.ts +++ b/test-suites/pool-flashloan.spec.ts @@ -1,18 +1,20 @@ -import {expect} from 'chai'; -import {BigNumber, ethers, Event, utils} from 'ethers'; -import {MAX_UINT_AMOUNT} from '../helpers/constants'; -import {convertToCurrencyDecimals} from '../helpers/contracts-helpers'; -import {MockFlashLoanReceiver} from '../types/MockFlashLoanReceiver'; -import {ProtocolErrors} from '../helpers/types'; +import { deployDefaultReserveInterestRateStrategy } from '@aave/deploy-v3/dist/helpers/contract-deployments'; +import { expect } from 'chai'; +import { BigNumber, ethers, Event, utils } from 'ethers'; +import { MAX_UINT_AMOUNT } from '../helpers/constants'; +import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; +import { MockFlashLoanReceiver } from '../types/MockFlashLoanReceiver'; +import { ProtocolErrors } from '../helpers/types'; import { getMockFlashLoanReceiver, getStableDebtToken, getVariableDebtToken, } from '@aave/deploy-v3/dist/helpers/contract-getters'; -import {TestEnv, makeSuite} from './helpers/make-suite'; +import { TestEnv, makeSuite } from './helpers/make-suite'; import './helpers/utils/wadraymath'; -import {waitForTx} from '@aave/deploy-v3'; +import { waitForTx } from '@aave/deploy-v3'; +import { MockATokenRepayment__factory } from '../types'; makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { let _mockFlashLoanReceiver = {} as MockFlashLoanReceiver; @@ -29,11 +31,26 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { const PREMIUM_TO_PROTOCOL = 3000; before(async () => { + const { usdc, aUsdc, pool, configurator, deployer } = testEnv; _mockFlashLoanReceiver = await getMockFlashLoanReceiver(); + + const aTokenRepayImpl = await new MockATokenRepayment__factory(deployer.signer).deploy( + pool.address + ); + + await configurator.updateAToken({ + asset: usdc.address, + treasury: await aUsdc.RESERVE_TREASURY_ADDRESS(), + incentivesController: await aUsdc.getIncentivesController(), + name: await aUsdc.name(), + symbol: await aUsdc.symbol(), + implementation: aTokenRepayImpl.address, + params: '0x', + }); }); it('Configurator sets total premium = 9 bps, premium to protocol = 30%', async () => { - const {configurator, pool} = testEnv; + const { configurator, pool } = testEnv; await configurator.updateFlashloanPremiumTotal(TOTAL_PREMIUM); await configurator.updateFlashloanPremiumToProtocol(PREMIUM_TO_PROTOCOL); @@ -41,7 +58,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { expect(await pool.FLASHLOAN_PREMIUM_TO_PROTOCOL()).to.be.equal(PREMIUM_TO_PROTOCOL); }); it('Deposits WETH into the reserve', async () => { - const {pool, weth, aave, dai} = testEnv; + const { pool, weth, aave, dai } = testEnv; const userAddress = await pool.signer.getAddress(); const amountToDeposit = ethers.utils.parseEther('1'); @@ -64,7 +81,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes WETH + Dai flash loan with mode = 0, returns the funds correctly', async () => { - const {pool, helpersContract, weth, aWETH, dai, aDai} = testEnv; + const { pool, helpersContract, weth, aWETH, dai, aDai } = testEnv; const wethFlashBorrowedAmount = ethers.utils.parseEther('0.8'); const daiFlashBorrowedAmount = ethers.utils.parseEther('0.3'); @@ -141,7 +158,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { // Check event values for `ReserveDataUpdated` const reserveDataUpdatedEvents = tx.events?.filter( - ({event}) => event === 'ReserveDataUpdated' + ({ event }) => event === 'ReserveDataUpdated' ) as Event[]; for (const reserveDataUpdatedEvent of reserveDataUpdatedEvents) { const reserveData = await helpersContract.getReserveData( @@ -199,7 +216,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes an ETH flashloan with mode = 0 as big as the available liquidity', async () => { - const {pool, helpersContract, weth, aWETH, deployer} = testEnv; + const { pool, helpersContract, weth, aWETH, deployer } = testEnv; let reserveData = await helpersContract.getReserveData(weth.address); @@ -259,7 +276,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Disable ETH flashloan and takes an ETH flashloan (revert expected)', async () => { - const {pool, configurator, helpersContract, weth, deployer} = testEnv; + const { pool, configurator, helpersContract, weth, deployer } = testEnv; expect(await configurator.setReserveFlashLoaning(weth.address, false)); @@ -293,7 +310,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes WETH flashloan, does not return the funds with mode = 0 (revert expected)', async () => { - const {pool, weth, users} = testEnv; + const { pool, weth, users } = testEnv; const caller = users[1]; await _mockFlashLoanReceiver.setFailExecutionTransfer(true); @@ -313,7 +330,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes WETH flashloan, simulating a receiver as EOA (revert expected)', async () => { - const {pool, weth, users} = testEnv; + const { pool, weth, users } = testEnv; const caller = users[1]; await _mockFlashLoanReceiver.setFailExecutionTransfer(true); await _mockFlashLoanReceiver.setSimulateEOA(true); @@ -334,7 +351,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes a WETH flashloan with an invalid mode (revert expected)', async () => { - const {pool, weth, users} = testEnv; + const { pool, weth, users } = testEnv; const caller = users[1]; await _mockFlashLoanReceiver.setSimulateEOA(false); await _mockFlashLoanReceiver.setFailExecutionTransfer(true); @@ -355,7 +372,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller deposits 1000 DAI as collateral, Takes WETH flashloan with mode = 2, does not return the funds. A variable loan for caller is created', async () => { - const {dai, pool, weth, users, helpersContract} = testEnv; + const { dai, pool, weth, users, helpersContract } = testEnv; const caller = users[1]; @@ -401,7 +418,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { 0 ); - const {variableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses( + const { variableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( weth.address ); reserveData = await helpersContract.getReserveData(weth.address); @@ -422,7 +439,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { await pool.connect(caller.signer).repay(weth.address, MAX_UINT_AMOUNT, 2, caller.address); }); it('Tries to take a flashloan that is bigger than the available liquidity (revert expected)', async () => { - const {pool, weth, users} = testEnv; + const { pool, weth, users } = testEnv; const caller = users[1]; await expect( @@ -440,7 +457,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Tries to take a flashloan using a non contract address as receiver (revert expected)', async () => { - const {pool, deployer, weth, users} = testEnv; + const { pool, deployer, weth, users } = testEnv; const caller = users[1]; await expect( @@ -457,7 +474,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Deposits USDC into the reserve', async () => { - const {usdc, pool} = testEnv; + const { usdc, pool } = testEnv; const userAddress = await pool.signer.getAddress(); await usdc['mint(uint256)'](await convertToCurrencyDecimals(usdc.address, '1000')); @@ -470,7 +487,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Takes out a 500 USDC flashloan, returns the funds correctly', async () => { - const {usdc, aUsdc, pool, helpersContract, deployer: depositor} = testEnv; + const { usdc, aUsdc, pool, helpersContract, deployer: depositor } = testEnv; await _mockFlashLoanReceiver.setFailExecutionTransfer(false); @@ -490,7 +507,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { const reservesBefore = await aUsdc.balanceOf(await aUsdc.RESERVE_TREASURY_ADDRESS()); - await pool.flashLoan( + const tx = await pool.flashLoan( _mockFlashLoanReceiver.address, [usdc.address], [flashBorrowedAmount], @@ -499,6 +516,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { '0x10', '0' ); + await waitForTx(tx); await pool.mintToTreasury([usdc.address]); @@ -515,10 +533,22 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { expect(currentLiquidityRate).to.be.equal(0); expect(currentLiquidityIndex).to.be.equal(liquidityIndexBefore.add(liquidityIndexAdded)); expect(reservesAfter).to.be.equal(reservesBefore.add(feesToProtocol)); + + // Check handleRepayment is correctly called at flash loans + await expect(tx) + .to.emit( + MockATokenRepayment__factory.connect(aUsdc.address, depositor.signer), + 'MockRepayment' + ) + .withArgs( + _mockFlashLoanReceiver.address, + _mockFlashLoanReceiver.address, + flashBorrowedAmount.add(totalFees) + ); }); it('Takes out a 500 USDC flashloan with mode = 0, does not return the funds (revert expected)', async () => { - const {usdc, pool, users} = testEnv; + const { usdc, pool, users } = testEnv; const caller = users[2]; const flashloanAmount = await convertToCurrencyDecimals(usdc.address, '500'); @@ -541,7 +571,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller deposits 5 WETH as collateral, Takes a USDC flashloan with mode = 2, does not return the funds. A loan for caller is created', async () => { - const {usdc, pool, weth, users, helpersContract} = testEnv; + const { usdc, pool, weth, users, helpersContract } = testEnv; const caller = users[2]; @@ -570,7 +600,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { '0x10', '0' ); - const {variableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses( + const { variableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( usdc.address ); @@ -582,7 +612,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Disable USDC borrowing. Caller deposits 5 WETH as collateral, Takes a USDC flashloan with mode = 2, does not return the funds. Revert creating borrow position (revert expected)', async () => { - const {usdc, pool, weth, configurator, users, helpersContract} = testEnv; + const { usdc, pool, weth, configurator, users, helpersContract } = testEnv; const caller = users[2]; @@ -620,7 +650,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller deposits 1000 DAI as collateral, Takes a WETH flashloan with mode = 0, does not approve the transfer of the funds', async () => { - const {dai, pool, weth, users} = testEnv; + const { dai, pool, weth, users } = testEnv; const caller = users[3]; await dai @@ -654,7 +684,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller takes a WETH flashloan with mode = 1', async () => { - const {pool, weth, users, helpersContract} = testEnv; + const { pool, weth, users, helpersContract } = testEnv; const caller = users[3]; @@ -678,7 +708,9 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { .to.emit(pool, 'FlashLoan') .withArgs(_mockFlashLoanReceiver.address, caller.address, weth.address, flashAmount, 1, 0, 0); - const {stableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses(weth.address); + const { stableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( + weth.address + ); const wethDebtToken = await getStableDebtToken(stableDebtTokenAddress); @@ -688,7 +720,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller takes a WETH flashloan with mode = 1 onBehalfOf user without allowance', async () => { - const {dai, pool, weth, users, helpersContract} = testEnv; + const { dai, pool, weth, users, helpersContract } = testEnv; const caller = users[5]; const onBehalfOf = users[4]; @@ -726,7 +758,7 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { }); it('Caller takes a WETH flashloan with mode = 1 onBehalfOf user with allowance. A loan for onBehalfOf is creatd.', async () => { - const {pool, weth, users, helpersContract} = testEnv; + const { pool, weth, users, helpersContract } = testEnv; const caller = users[5]; const onBehalfOf = users[4]; @@ -754,7 +786,9 @@ makeSuite('Pool: FlashLoan', (testEnv: TestEnv) => { '0' ); - const {stableDebtTokenAddress} = await helpersContract.getReserveTokensAddresses(weth.address); + const { stableDebtTokenAddress } = await helpersContract.getReserveTokensAddresses( + weth.address + ); const wethDebtToken = await getStableDebtToken(stableDebtTokenAddress); diff --git a/test-suites/variable-debt-token-events.spec.ts b/test-suites/variable-debt-token-events.spec.ts index f409a9b08..393ef383f 100644 --- a/test-suites/variable-debt-token-events.spec.ts +++ b/test-suites/variable-debt-token-events.spec.ts @@ -11,7 +11,7 @@ import { TransactionReceipt } from '@ethersproject/providers'; import { MAX_UINT_AMOUNT } from '../helpers/constants'; import { convertToCurrencyDecimals } from '../helpers/contracts-helpers'; import { RateMode } from '../helpers/types'; -import { Pool, VariableDebtToken } from '../types'; +import { MockATokenRepayment__factory, Pool, VariableDebtToken } from '../types'; import { makeSuite, SignerWithAddress, TestEnv } from './helpers/make-suite'; import { supply, @@ -99,7 +99,7 @@ makeSuite('VariableDebtToken: Events', (testEnv: TestEnv) => { let snapId; before(async () => { - const { users, pool, dai, weth } = testEnv; + const { users, pool, dai, weth, configurator, aDai, deployer } = testEnv; [alice, bob, depositor, depositor2] = users; const amountToMint = await convertToCurrencyDecimals(dai.address, '10000000'); @@ -120,6 +120,20 @@ makeSuite('VariableDebtToken: Events', (testEnv: TestEnv) => { await pool .connect(depositor2.signer) .supply(dai.address, amountToMint, depositor2.address, '0'); + + const aTokenRepayImpl = await new MockATokenRepayment__factory(deployer.signer).deploy( + pool.address + ); + + await configurator.updateAToken({ + asset: dai.address, + treasury: await aDai.RESERVE_TREASURY_ADDRESS(), + incentivesController: await aDai.getIncentivesController(), + name: await aDai.name(), + symbol: await aDai.symbol(), + implementation: aTokenRepayImpl.address, + params: '0x', + }); }); beforeEach(async () => { diff --git a/tsconfig.json b/tsconfig.json index b7c0dfde3..bc8e137b8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,7 +13,6 @@ "include": ["./scripts", "./test-suites", "./tasks", "./helpers"], "files": [ "./hardhat.config.ts", - "node_modules/hardhat-typechain/src/type-extensions.ts", "node_modules/@nomiclabs/hardhat-etherscan/src/type-extensions.ts", "node_modules/hardhat-gas-reporter/src/type-extensions.ts" ] From f8825f81bc10b52cd6e16f1e68351d68cce2279a Mon Sep 17 00:00:00 2001 From: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Date: Mon, 5 Dec 2022 21:00:00 +0100 Subject: [PATCH 64/87] Fix condition of unsetting asset as collateral if its fully liquidated (with non-zero liquidationProtocolFee) (#747) * fix: collateral should be flagged false when got liquidated totally (#740) * fix: collateral should be flagged false when got liquidated totally * fix: typo Signed-off-by: GopherJ * test: Fix test case for unsetting asset as collateral after liquidation Signed-off-by: GopherJ Co-authored-by: Cheng JIANG --- .../libraries/logic/LiquidationLogic.sol | 7 + test-suites/liquidation-edge.spec.ts | 121 ++++++++++++++++++ 2 files changed, 128 insertions(+) diff --git a/contracts/protocol/libraries/logic/LiquidationLogic.sol b/contracts/protocol/libraries/logic/LiquidationLogic.sol index 9a8f6b746..f03edbbce 100644 --- a/contracts/protocol/libraries/logic/LiquidationLogic.sol +++ b/contracts/protocol/libraries/logic/LiquidationLogic.sol @@ -214,6 +214,13 @@ library LiquidationLogic { ); } + // If the collateral being liquidated is equal to the user balance, + // we set the currency as not being used as collateral anymore + if (vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount == vars.userCollateralBalance) { + userConfig.setUsingAsCollateral(collateralReserve.id, false); + emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user); + } + // Transfers the debt asset being repaid to the aToken, where the liquidity is kept IERC20(params.debtAsset).safeTransferFrom( msg.sender, diff --git a/test-suites/liquidation-edge.spec.ts b/test-suites/liquidation-edge.spec.ts index ab5189d2c..d785af832 100644 --- a/test-suites/liquidation-edge.spec.ts +++ b/test-suites/liquidation-edge.spec.ts @@ -10,6 +10,7 @@ import { evmSnapshot, evmRevert, waitForTx, + AToken__factory, StableDebtToken__factory, VariableDebtToken__factory, } from '@aave/deploy-v3'; @@ -214,4 +215,124 @@ makeSuite('Pool Liquidation: Edge cases', (testEnv: TestEnv) => { expect(isBorrowing(userConfigBefore, daiData.id)).to.be.true; expect(isBorrowing(userConfigAfter, daiData.id)).to.be.false; }); + + it('Liquidate the whole WETH collateral with 10% liquidation fee, asset should not be set as collateralized anymore', async () => { + const { pool, users, dai, usdc, weth, aWETH, oracle, configurator } = testEnv; + + await configurator.setLiquidationProtocolFee(weth.address, '1000'); // 10% + + const depositor = users[0]; + const borrower = users[1]; + + // Deposit dai + await dai + .connect(depositor.signer) + ['mint(uint256)'](await convertToCurrencyDecimals(dai.address, '1000000')); + await dai.connect(depositor.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(depositor.signer) + .deposit( + dai.address, + await convertToCurrencyDecimals(dai.address, '10000'), + depositor.address, + 0 + ); + + // Deposit usdc + await usdc + .connect(depositor.signer) + ['mint(uint256)'](await convertToCurrencyDecimals(usdc.address, '1000000')); + await usdc.connect(depositor.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(depositor.signer) + .deposit( + usdc.address, + await convertToCurrencyDecimals(usdc.address, '1000'), + depositor.address, + 0 + ); + + // Deposit eth, borrow dai + await weth.connect(borrower.signer)['mint(uint256)'](utils.parseEther('0.9')); + await weth.connect(borrower.signer).approve(pool.address, MAX_UINT_AMOUNT); + await pool + .connect(borrower.signer) + .deposit(weth.address, utils.parseEther('0.9'), borrower.address, 0); + + // Borrow usdc + await pool + .connect(borrower.signer) + .borrow( + usdc.address, + await convertToCurrencyDecimals(usdc.address, '1000'), + RateMode.Variable, + 0, + borrower.address + ); + + // Borrow dai stable + await pool + .connect(borrower.signer) + .borrow( + dai.address, + await convertToCurrencyDecimals(dai.address, '100'), + RateMode.Stable, + 0, + borrower.address + ); + + // Borrow dai variable + await pool + .connect(borrower.signer) + .borrow( + dai.address, + await convertToCurrencyDecimals(dai.address, '100'), + RateMode.Variable, + 0, + borrower.address + ); + + // HF = (0.9 * 0.85) / (1000 * 0.0005 + 100 * 0.0005 + 100 * 0.0005) = 1.275 + + // Increase usdc price to allow liquidation + const usdcPrice = await oracle.getAssetPrice(usdc.address); + await oracle.setAssetPrice(usdc.address, usdcPrice.mul(10)); + + // HF = (0.9 * 0.85) / (1000 * 0.005 + 100 * 0.0005 + 100 * 0.0005) = 0.15 + // + // close factor = 1 + // $WETH_collateral = 0.9 + // $USDC_debt = 1000 * 0.005 = 5 + + const wethData = await pool.getReserveData(weth.address); + const aWETHToken = AToken__factory.connect(wethData.aTokenAddress, depositor.signer); + + expect(await aWETHToken.balanceOf(borrower.address)).to.be.gt(0); + + const userConfigBefore = BigNumber.from( + (await pool.getUserConfiguration(borrower.address)).data + ); + + expect(await usdc.connect(depositor.signer).approve(pool.address, MAX_UINT_AMOUNT)); + expect( + await pool + .connect(depositor.signer) + .liquidationCall(weth.address, usdc.address, borrower.address, MAX_UINT_AMOUNT, false) + ); + + const userConfigAfter = BigNumber.from( + (await pool.getUserConfiguration(borrower.address)).data + ); + + const isUsingAsCollateral = (conf, id) => + conf + .div(BigNumber.from(2).pow(BigNumber.from(id).mul(2).add(1))) + .and(1) + .gt(0); + + expect(await aWETHToken.balanceOf(borrower.address)).to.be.eq(0); + + expect(isUsingAsCollateral(userConfigBefore, wethData.id)).to.be.true; + expect(isUsingAsCollateral(userConfigAfter, wethData.id)).to.be.false; + }); }); From 43f34c90400d02f3959beeec21038464d924242a Mon Sep 17 00:00:00 2001 From: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Date: Tue, 6 Dec 2022 12:23:11 +0100 Subject: [PATCH 65/87] fix: Avoid emitting events when balanceIncrease is zero (#745) --- .../base/ScaledBalanceTokenBase.sol | 6 ++- .../helpers/utils/tokenization-events.ts | 48 +++++++++++-------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol b/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol index 4dcdf009d..711fc9de8 100644 --- a/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol +++ b/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol @@ -154,8 +154,10 @@ abstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBa super._transfer(sender, recipient, amount.rayDiv(index).toUint128()); - emit Transfer(address(0), sender, senderBalanceIncrease); - emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index); + if (senderBalanceIncrease > 0) { + emit Transfer(address(0), sender, senderBalanceIncrease); + emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index); + } if (recipientBalanceIncrease > 0) { emit Transfer(address(0), recipient, recipientBalanceIncrease); diff --git a/test-suites/helpers/utils/tokenization-events.ts b/test-suites/helpers/utils/tokenization-events.ts index a068b346e..d2be4cf3d 100644 --- a/test-suites/helpers/utils/tokenization-events.ts +++ b/test-suites/helpers/utils/tokenization-events.ts @@ -216,18 +216,20 @@ export const transfer = async ( addedScaledBalance, indexAfter, ]); - matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ - ZERO_ADDRESS, - user.address, - fromBalanceIncrease, - ]); - matchEvent(rcpt, 'Mint', aToken, aToken.address, [ - user.address, - user.address, - fromBalanceIncrease, - fromBalanceIncrease, - indexAfter, - ]); + if (fromBalanceIncrease.gt(0)) { + matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ + ZERO_ADDRESS, + user.address, + fromBalanceIncrease, + ]); + matchEvent(rcpt, 'Mint', aToken, aToken.address, [ + user.address, + user.address, + fromBalanceIncrease, + fromBalanceIncrease, + indexAfter, + ]); + } if (toBalanceIncrease.gt(0)) { matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ZERO_ADDRESS, to, toBalanceIncrease]); matchEvent(rcpt, 'Mint', aToken, aToken.address, [ @@ -277,14 +279,20 @@ export const transferFrom = async ( addedScaledBalance, indexAfter, ]); - matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ZERO_ADDRESS, origin, fromBalanceIncrease]); - matchEvent(rcpt, 'Mint', aToken, aToken.address, [ - user.address, - origin, - fromBalanceIncrease, - fromBalanceIncrease, - indexAfter, - ]); + if (fromBalanceIncrease.gt(0)) { + matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ + ZERO_ADDRESS, + origin, + fromBalanceIncrease, + ]); + matchEvent(rcpt, 'Mint', aToken, aToken.address, [ + user.address, + origin, + fromBalanceIncrease, + fromBalanceIncrease, + indexAfter, + ]); + } if (toBalanceIncrease.gt(0)) { matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ZERO_ADDRESS, to, toBalanceIncrease]); matchEvent(rcpt, 'Mint', aToken, aToken.address, [ From 6c3154eedb5e543bd564953058c40b7f19b42d41 Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Wed, 7 Dec 2022 12:31:18 +0100 Subject: [PATCH 66/87] fix: Optimize logic for atoken self-transfers --- .../base/ScaledBalanceTokenBase.sol | 2 +- test-suites/atoken-events.spec.ts | 106 ++++++++++++++++++ .../helpers/utils/tokenization-events.ts | 18 ++- 3 files changed, 119 insertions(+), 7 deletions(-) diff --git a/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol b/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol index 711fc9de8..033728e43 100644 --- a/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol +++ b/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol @@ -159,7 +159,7 @@ abstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBa emit Mint(_msgSender(), sender, senderBalanceIncrease, senderBalanceIncrease, index); } - if (recipientBalanceIncrease > 0) { + if (sender != recipient && recipientBalanceIncrease > 0) { emit Transfer(address(0), recipient, recipientBalanceIncrease); emit Mint(_msgSender(), recipient, recipientBalanceIncrease, recipientBalanceIncrease, index); } diff --git a/test-suites/atoken-events.spec.ts b/test-suites/atoken-events.spec.ts index 6de8cf0cb..68939197f 100644 --- a/test-suites/atoken-events.spec.ts +++ b/test-suites/atoken-events.spec.ts @@ -20,6 +20,7 @@ import { withdraw, getATokenEvent, transferFrom, + printATokenEvents, } from './helpers/utils/tokenization-events'; const DEBUG = false; @@ -403,6 +404,111 @@ makeSuite('AToken: Events', (testEnv: TestEnv) => { expect(bobBalanceAfter).to.be.closeTo(bobBalanceBefore.add(balances.balance[bob.address]), 2); }; + it('Alice supplies 1000, transfers 100 to Bob, transfers 500 to itself, Bob transfers 500 from Alice to itself, withdraws 400 to Bob (without index change)', async () => { + await testMultipleTransfersAndWithdrawals(false); + }); + + it('Alice supplies 1000, transfers 100 to Bob, transfers 500 to itself, Bob transfers 500 from Alice to itself, withdraws 400 to Bob (with index change)', async () => { + await testMultipleTransfersAndWithdrawals(true); + }); + + const testMultipleTransfersAndWithdrawals = async (indexChange: boolean) => { + const { pool, dai, aDai, weth } = testEnv; + + let rcpt; + let balanceTransferEv; + let aliceBalanceBefore = await aDai.balanceOf(alice.address); + let bobBalanceBefore = await aDai.balanceOf(bob.address); + + log('- Alice supplies 1000 DAI'); + rcpt = await supply(pool, alice, dai.address, '1000', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Alice transfers 100 DAI to Bob'); + let [fromScaledBefore, toScaledBefore] = await Promise.all([ + aDai.scaledBalanceOf(alice.address), + aDai.scaledBalanceOf(bob.address), + ]); + rcpt = await transfer(pool, alice, dai.address, '100', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + balanceTransferEv = getATokenEvent(aDai, rcpt, 'BalanceTransfer')[0]; + expect(await aDai.scaledBalanceOf(alice.address)).to.be.eq( + fromScaledBefore.sub(balanceTransferEv.value), + 'Scaled balance emitted in BalanceTransfer event does not match' + ); + expect(await aDai.scaledBalanceOf(bob.address)).to.be.eq( + toScaledBefore.add(balanceTransferEv.value), + 'Scaled balance emitted in BalanceTransfer event does not match' + ); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Alice transfers 500 DAI to itself'); + fromScaledBefore = await aDai.scaledBalanceOf(alice.address); + rcpt = await transfer(pool, alice, dai.address, '500', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + expect(await aDai.scaledBalanceOf(alice.address)).to.be.eq( + fromScaledBefore, + 'Scaled balance should remain the same' + ); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Bob transfersFrom Alice 500 DAI to Alice'); + fromScaledBefore = await aDai.scaledBalanceOf(alice.address); + expect( + await aDai + .connect(alice.signer) + .approve(bob.address, await convertToCurrencyDecimals(dai.address, '500')) + ); + rcpt = await transferFrom(pool, bob, alice.address, dai.address, '500', alice.address, DEBUG); + updateBalances(balances, aDai, rcpt); + expect(await aDai.scaledBalanceOf(alice.address)).to.be.eq( + fromScaledBefore, + 'Scaled balance should remain the same' + ); + + if (indexChange) { + log('- Increase index due to great borrow of DAI'); + await increaseSupplyIndex(pool, borrower, weth.address, dai.address); + } + + log('- Alice withdraws 400 DAI to Bob'); + rcpt = await withdraw(pool, alice, dai.address, '200', bob.address, DEBUG); + updateBalances(balances, aDai, rcpt); + + if (DEBUG) { + await printBalance('alice', aDai, alice.address); + await printBalance('bob', aDai, bob.address); + } + + // Check final balances + rcpt = await supply(pool, alice, dai.address, '1', alice.address, false); + updateBalances(balances, aDai, rcpt); + const aliceBalanceAfter = await aDai.balanceOf(alice.address); + + rcpt = await supply(pool, bob, dai.address, '1', bob.address, false); + updateBalances(balances, aDai, rcpt); + const bobBalanceAfter = await aDai.balanceOf(bob.address); + + expect(aliceBalanceAfter).to.be.closeTo( + aliceBalanceBefore.add(balances.balance[alice.address]), + 2 + ); + expect(bobBalanceAfter).to.be.closeTo(bobBalanceBefore.add(balances.balance[bob.address]), 2); + }; + it('Alice supplies 300000, withdraws 200000 to Bob, withdraws 5 to Bob', async () => { const { pool, dai, aDai, weth } = testEnv; diff --git a/test-suites/helpers/utils/tokenization-events.ts b/test-suites/helpers/utils/tokenization-events.ts index d2be4cf3d..b1a72b295 100644 --- a/test-suites/helpers/utils/tokenization-events.ts +++ b/test-suites/helpers/utils/tokenization-events.ts @@ -202,8 +202,11 @@ export const transfer = async ( const indexAfter = await pool.getReserveNormalizedIncome(underlying); const addedScaledBalance = amount.rayDiv(indexAfter); - const fromScaledBalance = (await aToken.scaledBalanceOf(user.address)).add(addedScaledBalance); - const toScaledBalance = (await aToken.scaledBalanceOf(to)).sub(addedScaledBalance); + + // The amount of scaled balance transferred is 0 if self-transfer + const deltaScaledBalance = user.address == to ? BigNumber.from(0) : addedScaledBalance; + const fromScaledBalance = (await aToken.scaledBalanceOf(user.address)).add(deltaScaledBalance); + const toScaledBalance = (await aToken.scaledBalanceOf(to)).sub(deltaScaledBalance); const fromBalanceIncrease = getBalanceIncrease(fromScaledBalance, fromPreviousIndex, indexAfter); const toBalanceIncrease = getBalanceIncrease(toScaledBalance, toPreviousIndex, indexAfter); @@ -230,7 +233,7 @@ export const transfer = async ( indexAfter, ]); } - if (toBalanceIncrease.gt(0)) { + if (user.address != to && toBalanceIncrease.gt(0)) { matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ZERO_ADDRESS, to, toBalanceIncrease]); matchEvent(rcpt, 'Mint', aToken, aToken.address, [ user.address, @@ -265,8 +268,11 @@ export const transferFrom = async ( const indexAfter = await pool.getReserveNormalizedIncome(underlying); const addedScaledBalance = amount.rayDiv(indexAfter); - const fromScaledBalance = (await aToken.scaledBalanceOf(origin)).add(addedScaledBalance); - const toScaledBalance = (await aToken.scaledBalanceOf(to)).sub(addedScaledBalance); + + // The amount of scaled balance transferred is 0 if self-transfer + const deltaScaledBalance = origin == to ? BigNumber.from(0) : addedScaledBalance; + const fromScaledBalance = (await aToken.scaledBalanceOf(origin)).add(deltaScaledBalance); + const toScaledBalance = (await aToken.scaledBalanceOf(to)).sub(deltaScaledBalance); const fromBalanceIncrease = getBalanceIncrease(fromScaledBalance, fromPreviousIndex, indexAfter); const toBalanceIncrease = getBalanceIncrease(toScaledBalance, toPreviousIndex, indexAfter); @@ -293,7 +299,7 @@ export const transferFrom = async ( indexAfter, ]); } - if (toBalanceIncrease.gt(0)) { + if (origin != to && toBalanceIncrease.gt(0)) { matchEvent(rcpt, 'Transfer', aToken, aToken.address, [ZERO_ADDRESS, to, toBalanceIncrease]); matchEvent(rcpt, 'Mint', aToken, aToken.address, [ user.address, From 56bcf5d1ef378e9e5e7d09bcdb0bc42b4a1b645d Mon Sep 17 00:00:00 2001 From: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Date: Wed, 7 Dec 2022 12:52:42 +0100 Subject: [PATCH 67/87] fix: Fix condition of full liquidation of collateral (#753) --- .../protocol/libraries/logic/LiquidationLogic.sol | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/contracts/protocol/libraries/logic/LiquidationLogic.sol b/contracts/protocol/libraries/logic/LiquidationLogic.sol index f03edbbce..aea7040b0 100644 --- a/contracts/protocol/libraries/logic/LiquidationLogic.sol +++ b/contracts/protocol/libraries/logic/LiquidationLogic.sol @@ -168,7 +168,10 @@ library LiquidationLogic { // If the collateral being liquidated is equal to the user balance, // we set the currency as not being used as collateral anymore - if (vars.actualCollateralToLiquidate == vars.userCollateralBalance) { + if ( + vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount == + vars.userCollateralBalance + ) { userConfig.setUsingAsCollateral(collateralReserve.id, false); emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user); } @@ -214,13 +217,6 @@ library LiquidationLogic { ); } - // If the collateral being liquidated is equal to the user balance, - // we set the currency as not being used as collateral anymore - if (vars.actualCollateralToLiquidate + vars.liquidationProtocolFeeAmount == vars.userCollateralBalance) { - userConfig.setUsingAsCollateral(collateralReserve.id, false); - emit ReserveUsedAsCollateralDisabled(params.collateralAsset, params.user); - } - // Transfers the debt asset being repaid to the aToken, where the liquidity is kept IERC20(params.debtAsset).safeTransferFrom( msg.sender, From d7d9e30ccad0c1765c4d32d8fdd83e55531b008c Mon Sep 17 00:00:00 2001 From: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Date: Wed, 7 Dec 2022 12:52:55 +0100 Subject: [PATCH 68/87] docs: Fix docs of Mint and Burn events (#751) --- contracts/interfaces/IScaledBalanceToken.sol | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/contracts/interfaces/IScaledBalanceToken.sol b/contracts/interfaces/IScaledBalanceToken.sol index 911bca11d..8f215c692 100644 --- a/contracts/interfaces/IScaledBalanceToken.sol +++ b/contracts/interfaces/IScaledBalanceToken.sol @@ -10,9 +10,9 @@ interface IScaledBalanceToken { /** * @dev Emitted after the mint action * @param caller The address performing the mint - * @param onBehalfOf The address of the user that will receive the minted scaled balance tokens - * @param value The scaled amount being minted (based on user entered amount and balance increase from interest) - * @param balanceIncrease The increase in scaled balance since the last action of 'onBehalfOf' + * @param onBehalfOf The address of the user that will receive the minted tokens + * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest) + * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf' * @param index The next liquidity index of the reserve **/ event Mint( @@ -24,12 +24,12 @@ interface IScaledBalanceToken { ); /** - * @dev Emitted after scaled balance tokens are burned + * @dev Emitted after the burn action * @dev If the burn function does not involve a transfer of the underlying asset, the target defaults to zero address - * @param from The address from which the scaled tokens will be burned + * @param from The address from which the tokens will be burned * @param target The address that will receive the underlying, if any - * @param value The scaled amount being burned (user entered amount - balance increase from interest) - * @param balanceIncrease The increase in scaled balance since the last action of 'from' + * @param value The scaled-up amount being burned (user entered amount - balance increase from interest) + * @param balanceIncrease The increase in scaled-up balance since the last action of 'from' * @param index The next liquidity index of the reserve **/ event Burn( From a33f93119f53d01c69b9c65a20d552e19a175e76 Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Wed, 7 Dec 2022 18:20:32 +0100 Subject: [PATCH 69/87] fix: Minimize the IAaveIncentivesController with only the handleAction --- .../interfaces/IAaveIncentivesController.sol | 171 +----------------- .../helpers/MockIncentivesController.sol | 75 -------- contracts/mocks/upgradeability/MockAToken.sol | 1 - .../libraries/logic/ConfiguratorLogic.sol | 1 - 4 files changed, 9 insertions(+), 239 deletions(-) diff --git a/contracts/interfaces/IAaveIncentivesController.sol b/contracts/interfaces/IAaveIncentivesController.sol index 3ae73deef..d855d079c 100644 --- a/contracts/interfaces/IAaveIncentivesController.sol +++ b/contracts/interfaces/IAaveIncentivesController.sol @@ -5,172 +5,19 @@ pragma solidity ^0.8.0; * @title IAaveIncentivesController * @author Aave * @notice Defines the basic interface for an Aave Incentives Controller. + * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers. **/ interface IAaveIncentivesController { /** - * @dev Emitted during `handleAction`, `claimRewards` and `claimRewardsOnBehalf` - * @param user The user that accrued rewards - * @param amount The amount of accrued rewards - */ - event RewardsAccrued(address indexed user, uint256 amount); - - event RewardsClaimed(address indexed user, address indexed to, uint256 amount); - - /** - * @dev Emitted during `claimRewards` and `claimRewardsOnBehalf` - * @param user The address that accrued rewards - * @param to The address that will be receiving the rewards - * @param claimer The address that performed the claim - * @param amount The amount of rewards - */ - event RewardsClaimed( - address indexed user, - address indexed to, - address indexed claimer, - uint256 amount - ); - - /** - * @dev Emitted during `setClaimer` - * @param user The address of the user - * @param claimer The address of the claimer - */ - event ClaimerSet(address indexed user, address indexed claimer); - - /** - * @notice Returns the configuration of the distribution for a certain asset - * @param asset The address of the reference asset of the distribution - * @return The asset index - * @return The emission per second - * @return The last updated timestamp - **/ - function getAssetData(address asset) - external - view - returns ( - uint256, - uint256, - uint256 - ); - - /** - * LEGACY ************************** - * @dev Returns the configuration of the distribution for a certain asset - * @param asset The address of the reference asset of the distribution - * @return The asset index, the emission per second and the last updated timestamp - **/ - function assets(address asset) - external - view - returns ( - uint128, - uint128, - uint256 - ); - - /** - * @notice Whitelists an address to claim the rewards on behalf of another address - * @param user The address of the user - * @param claimer The address of the claimer - */ - function setClaimer(address user, address claimer) external; - - /** - * @notice Returns the whitelisted claimer for a certain address (0x0 if not set) - * @param user The address of the user - * @return The claimer address - */ - function getClaimer(address user) external view returns (address); - - /** - * @notice Configure assets for a certain rewards emission - * @param assets The assets to incentivize - * @param emissionsPerSecond The emission for each asset - */ - function configureAssets(address[] calldata assets, uint256[] calldata emissionsPerSecond) - external; - - /** - * @notice Called by the corresponding asset on any update that affects the rewards distribution - * @param asset The address of the user - * @param userBalance The balance of the user of the asset in the pool - * @param totalSupply The total supply of the asset in the pool + * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution. + * @dev The units of `totalSupply` and `userBalance` should be the same. + * @param user The address of the user whose asset balance has changed + * @param totalSupply The total supply of the asset prior to user balance change + * @param userBalance The previous user balance prior to balance change **/ function handleAction( - address asset, - uint256 userBalance, - uint256 totalSupply - ) external; - - /** - * @notice Returns the total of rewards of a user, already accrued + not yet accrued - * @param assets The assets to accumulate rewards for - * @param user The address of the user - * @return The rewards - **/ - function getRewardsBalance(address[] calldata assets, address user) - external - view - returns (uint256); - - /** - * @notice Claims reward for a user, on the assets of the pool, accumulating the pending rewards - * @param assets The assets to accumulate rewards for - * @param amount Amount of rewards to claim - * @param to Address that will be receiving the rewards - * @return Rewards claimed - **/ - function claimRewards( - address[] calldata assets, - uint256 amount, - address to - ) external returns (uint256); - - /** - * @notice Claims reward for a user on its behalf, on the assets of the pool, accumulating the pending rewards. - * @dev The caller must be whitelisted via "allowClaimOnBehalf" function by the RewardsAdmin role manager - * @param assets The assets to accumulate rewards for - * @param amount The amount of rewards to claim - * @param user The address to check and claim rewards - * @param to The address that will be receiving the rewards - * @return The amount of rewards claimed - **/ - function claimRewardsOnBehalf( - address[] calldata assets, - uint256 amount, address user, - address to - ) external returns (uint256); - - /** - * @notice Returns the unclaimed rewards of the user - * @param user The address of the user - * @return The unclaimed user rewards - */ - function getUserUnclaimedRewards(address user) external view returns (uint256); - - /** - * @notice Returns the user index for a specific asset - * @param user The address of the user - * @param asset The asset to incentivize - * @return The user index for the asset - */ - function getUserAssetData(address user, address asset) external view returns (uint256); - - /** - * @notice for backward compatibility with previous implementation of the Incentives controller - * @return The address of the reward token - */ - function REWARD_TOKEN() external view returns (address); - - /** - * @notice for backward compatibility with previous implementation of the Incentives controller - * @return The precision used in the incentives controller - */ - function PRECISION() external view returns (uint8); - - /** - * @dev Gets the distribution end timestamp of the emissions - */ - function DISTRIBUTION_END() external view returns (uint256); + uint256 totalSupply, + uint256 userBalance + ) external; } diff --git a/contracts/mocks/helpers/MockIncentivesController.sol b/contracts/mocks/helpers/MockIncentivesController.sol index a20feae40..db761e0c3 100644 --- a/contracts/mocks/helpers/MockIncentivesController.sol +++ b/contracts/mocks/helpers/MockIncentivesController.sol @@ -4,84 +4,9 @@ pragma solidity 0.8.10; import {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol'; contract MockIncentivesController is IAaveIncentivesController { - function getAssetData(address) - external - pure - override - returns ( - uint256, - uint256, - uint256 - ) - { - return (0, 0, 0); - } - - function assets(address) - external - pure - override - returns ( - uint128, - uint128, - uint256 - ) - { - return (0, 0, 0); - } - - function setClaimer(address, address) external override {} - - function getClaimer(address) external pure override returns (address) { - return address(1); - } - - function configureAssets(address[] calldata, uint256[] calldata) external override {} - function handleAction( address, uint256, uint256 ) external override {} - - function getRewardsBalance(address[] calldata, address) external pure override returns (uint256) { - return 0; - } - - function claimRewards( - address[] calldata, - uint256, - address - ) external pure override returns (uint256) { - return 0; - } - - function claimRewardsOnBehalf( - address[] calldata, - uint256, - address, - address - ) external pure override returns (uint256) { - return 0; - } - - function getUserUnclaimedRewards(address) external pure override returns (uint256) { - return 0; - } - - function getUserAssetData(address, address) external pure override returns (uint256) { - return 0; - } - - function REWARD_TOKEN() external pure override returns (address) { - return address(0); - } - - function PRECISION() external pure override returns (uint8) { - return 0; - } - - function DISTRIBUTION_END() external pure override returns (uint256) { - return 0; - } } diff --git a/contracts/mocks/upgradeability/MockAToken.sol b/contracts/mocks/upgradeability/MockAToken.sol index 7a105fbca..42b4f3916 100644 --- a/contracts/mocks/upgradeability/MockAToken.sol +++ b/contracts/mocks/upgradeability/MockAToken.sol @@ -3,7 +3,6 @@ pragma solidity 0.8.10; import {AToken} from '../../protocol/tokenization/AToken.sol'; import {IPool} from '../../interfaces/IPool.sol'; -import {IAaveIncentivesController} from '../../interfaces/IAaveIncentivesController.sol'; contract MockAToken is AToken { constructor(IPool pool) AToken(pool) {} diff --git a/contracts/protocol/libraries/logic/ConfiguratorLogic.sol b/contracts/protocol/libraries/logic/ConfiguratorLogic.sol index c29afa073..5cfba9524 100644 --- a/contracts/protocol/libraries/logic/ConfiguratorLogic.sol +++ b/contracts/protocol/libraries/logic/ConfiguratorLogic.sol @@ -4,7 +4,6 @@ pragma solidity 0.8.10; import {IPool} from '../../../interfaces/IPool.sol'; import {IInitializableAToken} from '../../../interfaces/IInitializableAToken.sol'; import {IInitializableDebtToken} from '../../../interfaces/IInitializableDebtToken.sol'; -import {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol'; import {InitializableImmutableAdminUpgradeabilityProxy} from '../aave-upgradeability/InitializableImmutableAdminUpgradeabilityProxy.sol'; import {ReserveConfiguration} from '../configuration/ReserveConfiguration.sol'; import {DataTypes} from '../types/DataTypes.sol'; From 066259a79444b097da911021d120e1fe4a000ad6 Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Wed, 7 Dec 2022 18:20:58 +0100 Subject: [PATCH 70/87] fix: Install the last package of periphery for the rewards contract update --- package-lock.json | 28 ++++++++++++++-------------- package.json | 4 ++-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7836faa21..ca11ac4fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "1.16.2-beta.1", "license": "BUSL-1.1", "devDependencies": { - "@aave/deploy-v3": "1.50.0-beta.2", - "@aave/periphery-v3": "^1.21.0", + "@aave/deploy-v3": "1.51.0", + "@aave/periphery-v3": "1.21.4", "@ethersproject/bignumber": "^5.6.2", "@nomicfoundation/hardhat-chai-matchers": "1.0.5", "@nomicfoundation/hardhat-toolbox": "^2.0.0", @@ -75,9 +75,9 @@ } }, "node_modules/@aave/deploy-v3": { - "version": "1.50.0-beta.2", - "resolved": "https://registry.npmjs.org/@aave/deploy-v3/-/deploy-v3-1.50.0-beta.2.tgz", - "integrity": "sha512-khBgMd05qLq1ZChhApcEOsED7AVVorRSMsS8bwp8lV0a8LnBZ8A/Vu7Z8UcMwKQXxXI83MxCxQ7r82TKR1n3Tg==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@aave/deploy-v3/-/deploy-v3-1.51.0.tgz", + "integrity": "sha512-LK5UfM3ZGWscBIfpY7BNPDksUkKjLXo/W9xFqsS3R5L5MIylb3A1rAiaOu1SeUJKmqvMRWcrAoRVMkD0pNqE4Q==", "dev": true, "dependencies": { "defender-relay-client": "^1.11.1" @@ -114,9 +114,9 @@ } }, "node_modules/@aave/periphery-v3": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@aave/periphery-v3/-/periphery-v3-1.21.0.tgz", - "integrity": "sha512-imTSAoUX1+WjXD3Jo0jMErFe+KoH2GaH0Q13NrghsdksbZDWjGhM9kTQortZ6Em4jlxyuaS5+3fRWBCxvRp9LQ==", + "version": "1.21.4", + "resolved": "https://registry.npmjs.org/@aave/periphery-v3/-/periphery-v3-1.21.4.tgz", + "integrity": "sha512-o7psIofZt5hsrgnwX9Rp5vqBVijhcsaZoq8KUCTRDy49fsgPfF2SowN2o23Vlj+xA2ybkPBdrFr8KAqzwxNDUA==", "dev": true, "dependencies": { "@aave/core-v3": "1.16.2" @@ -12506,9 +12506,9 @@ } }, "@aave/deploy-v3": { - "version": "1.50.0-beta.2", - "resolved": "https://registry.npmjs.org/@aave/deploy-v3/-/deploy-v3-1.50.0-beta.2.tgz", - "integrity": "sha512-khBgMd05qLq1ZChhApcEOsED7AVVorRSMsS8bwp8lV0a8LnBZ8A/Vu7Z8UcMwKQXxXI83MxCxQ7r82TKR1n3Tg==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/@aave/deploy-v3/-/deploy-v3-1.51.0.tgz", + "integrity": "sha512-LK5UfM3ZGWscBIfpY7BNPDksUkKjLXo/W9xFqsS3R5L5MIylb3A1rAiaOu1SeUJKmqvMRWcrAoRVMkD0pNqE4Q==", "dev": true, "requires": { "defender-relay-client": "^1.11.1" @@ -12530,9 +12530,9 @@ } }, "@aave/periphery-v3": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/@aave/periphery-v3/-/periphery-v3-1.21.0.tgz", - "integrity": "sha512-imTSAoUX1+WjXD3Jo0jMErFe+KoH2GaH0Q13NrghsdksbZDWjGhM9kTQortZ6Em4jlxyuaS5+3fRWBCxvRp9LQ==", + "version": "1.21.4", + "resolved": "https://registry.npmjs.org/@aave/periphery-v3/-/periphery-v3-1.21.4.tgz", + "integrity": "sha512-o7psIofZt5hsrgnwX9Rp5vqBVijhcsaZoq8KUCTRDy49fsgPfF2SowN2o23Vlj+xA2ybkPBdrFr8KAqzwxNDUA==", "dev": true, "requires": { "@aave/core-v3": "1.16.2" diff --git a/package.json b/package.json index 42f72d0b3..ba03f3503 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,8 @@ "prepublish": "npm run compile" }, "devDependencies": { - "@aave/deploy-v3": "1.50.0-beta.2", - "@aave/periphery-v3": "^1.21.0", + "@aave/deploy-v3": "1.51.0", + "@aave/periphery-v3": "1.21.4", "@ethersproject/bignumber": "^5.6.2", "@nomicfoundation/hardhat-chai-matchers": "1.0.5", "@nomicfoundation/hardhat-toolbox": "^2.0.0", From 518d1f0cd6fb42f591aa7d8957e05fd498304679 Mon Sep 17 00:00:00 2001 From: kartojal Date: Fri, 9 Dec 2022 11:47:04 +0100 Subject: [PATCH 71/87] chore: bump beta package --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index ca11ac4fb..c7299e5cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@aave/core-v3", - "version": "1.16.2-beta.1", + "version": "1.16.2-beta.2", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/package.json b/package.json index ba03f3503..0220e2b02 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@aave/core-v3", - "version": "1.16.2-beta.1", + "version": "1.16.2-beta.2", "description": "Aave Protocol V3 core smart contracts", "files": [ "contracts", From 2b1354b446f7de4b813fe2c2bb6d56c4be5b3505 Mon Sep 17 00:00:00 2001 From: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Date: Mon, 12 Dec 2022 13:49:56 +0100 Subject: [PATCH 72/87] Soften solidity version of Datatypes libraries (#762) * fix: Soften solidity version of DataTypes libraries * "Soft" Solidity to ^0.8.0 on libraries/math, libraries/configuration and libraries/helpers Co-authored-by: eboado --- .../protocol/libraries/configuration/ReserveConfiguration.sol | 2 +- .../protocol/libraries/configuration/UserConfiguration.sol | 2 +- contracts/protocol/libraries/helpers/Errors.sol | 2 +- contracts/protocol/libraries/helpers/Helpers.sol | 2 +- contracts/protocol/libraries/math/MathUtils.sol | 2 +- contracts/protocol/libraries/math/PercentageMath.sol | 2 +- contracts/protocol/libraries/math/WadRayMath.sol | 2 +- contracts/protocol/libraries/types/ConfiguratorInputTypes.sol | 2 +- contracts/protocol/libraries/types/DataTypes.sol | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol index b29007156..b9cbc4570 100644 --- a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol +++ b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {Errors} from '../helpers/Errors.sol'; import {DataTypes} from '../types/DataTypes.sol'; diff --git a/contracts/protocol/libraries/configuration/UserConfiguration.sol b/contracts/protocol/libraries/configuration/UserConfiguration.sol index cc9df4787..34ef2b506 100644 --- a/contracts/protocol/libraries/configuration/UserConfiguration.sol +++ b/contracts/protocol/libraries/configuration/UserConfiguration.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {Errors} from '../helpers/Errors.sol'; import {DataTypes} from '../types/DataTypes.sol'; diff --git a/contracts/protocol/libraries/helpers/Errors.sol b/contracts/protocol/libraries/helpers/Errors.sol index 89a576cd5..1dacaf392 100644 --- a/contracts/protocol/libraries/helpers/Errors.sol +++ b/contracts/protocol/libraries/helpers/Errors.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; /** * @title Errors library diff --git a/contracts/protocol/libraries/helpers/Helpers.sol b/contracts/protocol/libraries/helpers/Helpers.sol index 180d72a4d..06a37f611 100644 --- a/contracts/protocol/libraries/helpers/Helpers.sol +++ b/contracts/protocol/libraries/helpers/Helpers.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {IERC20} from '../../../dependencies/openzeppelin/contracts/IERC20.sol'; import {DataTypes} from '../types/DataTypes.sol'; diff --git a/contracts/protocol/libraries/math/MathUtils.sol b/contracts/protocol/libraries/math/MathUtils.sol index bd6e08382..825061d77 100644 --- a/contracts/protocol/libraries/math/MathUtils.sol +++ b/contracts/protocol/libraries/math/MathUtils.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; import {WadRayMath} from './WadRayMath.sol'; diff --git a/contracts/protocol/libraries/math/PercentageMath.sol b/contracts/protocol/libraries/math/PercentageMath.sol index 5306105b0..597521342 100644 --- a/contracts/protocol/libraries/math/PercentageMath.sol +++ b/contracts/protocol/libraries/math/PercentageMath.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; /** * @title PercentageMath library diff --git a/contracts/protocol/libraries/math/WadRayMath.sol b/contracts/protocol/libraries/math/WadRayMath.sol index dbe1a40d0..dbc8f21f1 100644 --- a/contracts/protocol/libraries/math/WadRayMath.sol +++ b/contracts/protocol/libraries/math/WadRayMath.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; /** * @title WadRayMath library diff --git a/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol b/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol index 61de06a31..229473563 100644 --- a/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol +++ b/contracts/protocol/libraries/types/ConfiguratorInputTypes.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; library ConfiguratorInputTypes { struct InitReserveInput { diff --git a/contracts/protocol/libraries/types/DataTypes.sol b/contracts/protocol/libraries/types/DataTypes.sol index 7113a0a51..c40d732f4 100644 --- a/contracts/protocol/libraries/types/DataTypes.sol +++ b/contracts/protocol/libraries/types/DataTypes.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.10; +pragma solidity ^0.8.0; library DataTypes { struct ReserveData { From 9ccb1ab3c175d1e71404e875e623f1d161fd17e7 Mon Sep 17 00:00:00 2001 From: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Date: Mon, 12 Dec 2022 13:50:38 +0100 Subject: [PATCH 73/87] fix: Fix typo in docs (#752) --- .../protocol/libraries/configuration/ReserveConfiguration.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol index b9cbc4570..a2aeba1ff 100644 --- a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol +++ b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol @@ -548,7 +548,7 @@ library ReserveConfiguration { } /** - * @notice Sets the flashloanble flag for the reserve + * @notice Sets the flashloanable flag for the reserve * @param self The reserve configuration * @param flashLoanEnabled True if the asset is flashloanable, false otherwise */ From a00dda8faf464f6b0d338cf7e902e5931e0edbea Mon Sep 17 00:00:00 2001 From: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Date: Wed, 14 Dec 2022 10:57:07 +0100 Subject: [PATCH 74/87] fix: Complete interfaces of IReserveInterestRateStrategy and IPoolDataProvider (#766) * fix: Complete interfaces of IReserveInterestRateStrategy and IPoolDataProvider (#763) * feat: complete interface & use inheritdoc * Added missing functions on IReserveInterestRateStrategy and inheritdoc on DefaultInterestRateStrategy * fix: added missing overrides, docs for constructor and added ADDRESSES_PROVIDER to interface * fix: sepparated interest rate strategy interface into default and rate interfaces * fix: added visibility to false rule * fix: minor fixes * fix: fixed natspec. Fixed import order * Update contracts/interfaces/IDefaultInterestRateStrategy.sol * Apply suggestions from code review * Apply suggestions from code review * fix: fixed correct import order Co-authored-by: eboado Co-authored-by: sendra Co-authored-by: sendra Co-authored-by: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> * fix: Fix format of multiple contracts Co-authored-by: Lukas Co-authored-by: eboado Co-authored-by: sendra Co-authored-by: sendra --- .../IDefaultInterestRateStrategy.sol | 97 +++++++++ contracts/interfaces/IPoolDataProvider.sol | 190 +++++++++++++++++- .../IReserveInterestRateStrategy.sol | 14 +- contracts/misc/AaveProtocolDataProvider.sol | 177 ++++------------ .../helpers/MockReserveConfiguration.sol | 4 +- .../tests/MockReserveInterestRateStrategy.sol | 19 +- .../DefaultReserveInterestRateStrategy.sol | 66 ++---- 7 files changed, 357 insertions(+), 210 deletions(-) create mode 100644 contracts/interfaces/IDefaultInterestRateStrategy.sol diff --git a/contracts/interfaces/IDefaultInterestRateStrategy.sol b/contracts/interfaces/IDefaultInterestRateStrategy.sol new file mode 100644 index 000000000..22770226a --- /dev/null +++ b/contracts/interfaces/IDefaultInterestRateStrategy.sol @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: AGPL-3.0 +pragma solidity ^0.8.0; + +import {IReserveInterestRateStrategy} from './IReserveInterestRateStrategy.sol'; +import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol'; + +/** + * @title IDefaultInterestRateStrategy + * @author Aave + * @notice Defines the basic interface of the DefaultReserveInterestRateStrategy + */ +interface IDefaultInterestRateStrategy is IReserveInterestRateStrategy { + /** + * @notice Returns the usage ratio at which the pool aims to obtain most competitive borrow rates. + * @return The optimal usage ratio, expressed in ray. + */ + function OPTIMAL_USAGE_RATIO() external view returns (uint256); + + /** + * @notice Returns the optimal stable to total debt ratio of the reserve. + * @return The optimal stable to total debt ratio, expressed in ray. + */ + function OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256); + + /** + * @notice Returns the excess usage ratio above the optimal. + * @dev It's always equal to 1-optimal usage ratio (added as constant for gas optimizations) + * @return The max excess usage ratio, expressed in ray. + */ + function MAX_EXCESS_USAGE_RATIO() external view returns (uint256); + + /** + * @notice Returns the excess stable debt ratio above the optimal. + * @dev It's always equal to 1-optimal stable to total debt ratio (added as constant for gas optimizations) + * @return The max excess stable to total debt ratio, expressed in ray. + */ + function MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO() external view returns (uint256); + + /** + * @notice Returns the address of the PoolAddressesProvider + * @return The address of the PoolAddressesProvider contract + */ + function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider); + + /** + * @notice Returns the variable rate slope below optimal usage ratio + * @dev It's the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO + * @return The variable rate slope, expressed in ray + */ + function getVariableRateSlope1() external view returns (uint256); + + /** + * @notice Returns the variable rate slope above optimal usage ratio + * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO + * @return The variable rate slope, expressed in ray + */ + function getVariableRateSlope2() external view returns (uint256); + + /** + * @notice Returns the stable rate slope below optimal usage ratio + * @dev It's the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO + * @return The stable rate slope, expressed in ray + */ + function getStableRateSlope1() external view returns (uint256); + + /** + * @notice Returns the stable rate slope above optimal usage ratio + * @dev It's the variable rate when usage ratio > OPTIMAL_USAGE_RATIO + * @return The stable rate slope, expressed in ray + */ + function getStableRateSlope2() external view returns (uint256); + + /** + * @notice Returns the stable rate excess offset + * @dev It's an additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO + * @return The stable rate excess offset, expressed in ray + */ + function getStableRateExcessOffset() external view returns (uint256); + + /** + * @notice Returns the base stable borrow rate + * @return The base stable borrow rate, expressed in ray + */ + function getBaseStableBorrowRate() external view returns (uint256); + + /** + * @notice Returns the base variable borrow rate + * @return The base variable borrow rate, expressed in ray + */ + function getBaseVariableBorrowRate() external view returns (uint256); + + /** + * @notice Returns the maximum variable borrow rate + * @return The maximum variable borrow rate, expressed in ray + */ + function getMaxVariableBorrowRate() external view returns (uint256); +} diff --git a/contracts/interfaces/IPoolDataProvider.sol b/contracts/interfaces/IPoolDataProvider.sol index 0c7b34c35..f0683fda9 100644 --- a/contracts/interfaces/IPoolDataProvider.sol +++ b/contracts/interfaces/IPoolDataProvider.sol @@ -1,7 +1,128 @@ // SPDX-License-Identifier: AGPL-3.0 pragma solidity ^0.8.0; +import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol'; + +/** + * @title IPoolDataProvider + * @author Aave + * @notice Defines the basic interface of a PoolDataProvider + */ interface IPoolDataProvider { + struct TokenData { + string symbol; + address tokenAddress; + } + + /** + * @notice Returns the address for the PoolAddressesProvider contract. + * @return The address for the PoolAddressesProvider contract + */ + function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider); + + /** + * @notice Returns the list of the existing reserves in the pool. + * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions. + * @return The list of reserves, pairs of symbols and addresses + */ + function getAllReservesTokens() external view returns (TokenData[] memory); + + /** + * @notice Returns the list of the existing ATokens in the pool. + * @return The list of ATokens, pairs of symbols and addresses + */ + function getAllATokens() external view returns (TokenData[] memory); + + /** + * @notice Returns the configuration data of the reserve + * @dev Not returning borrow and supply caps for compatibility, nor pause flag + * @param asset The address of the underlying asset of the reserve + * @return decimals The number of decimals of the reserve + * @return ltv The ltv of the reserve + * @return liquidationThreshold The liquidationThreshold of the reserve + * @return liquidationBonus The liquidationBonus of the reserve + * @return reserveFactor The reserveFactor of the reserve + * @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise + * @return borrowingEnabled True if borrowing is enabled, false otherwise + * @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise + * @return isActive True if it is active, false otherwise + * @return isFrozen True if it is frozen, false otherwise + */ + function getReserveConfigurationData(address asset) + external + view + returns ( + uint256 decimals, + uint256 ltv, + uint256 liquidationThreshold, + uint256 liquidationBonus, + uint256 reserveFactor, + bool usageAsCollateralEnabled, + bool borrowingEnabled, + bool stableBorrowRateEnabled, + bool isActive, + bool isFrozen + ); + + /** + * @notice Returns the efficiency mode category of the reserve + * @param asset The address of the underlying asset of the reserve + * @return The eMode id of the reserve + */ + function getReserveEModeCategory(address asset) external view returns (uint256); + + /** + * @notice Returns the caps parameters of the reserve + * @param asset The address of the underlying asset of the reserve + * @return borrowCap The borrow cap of the reserve + * @return supplyCap The supply cap of the reserve + **/ + function getReserveCaps(address asset) + external + view + returns (uint256 borrowCap, uint256 supplyCap); + + /** + * @notice Returns if the pool is paused + * @param asset The address of the underlying asset of the reserve + * @return isPaused True if the pool is paused, false otherwise + */ + function getPaused(address asset) external view returns (bool isPaused); + + /** + * @notice Returns the siloed borrowing flag + * @param asset The address of the underlying asset of the reserve + * @return True if the asset is siloed for borrowing + */ + function getSiloedBorrowing(address asset) external view returns (bool); + + /** + * @notice Returns the protocol fee on the liquidation bonus + * @param asset The address of the underlying asset of the reserve + * @return The protocol fee on liquidation + */ + function getLiquidationProtocolFee(address asset) external view returns (uint256); + + /** + * @notice Returns the unbacked mint cap of the reserve + * @param asset The address of the underlying asset of the reserve + * @return The unbacked mint cap of the reserve + */ + function getUnbackedMintCap(address asset) external view returns (uint256); + + /** + * @notice Returns the debt ceiling of the reserve + * @param asset The address of the underlying asset of the reserve + * @return The debt ceiling of the reserve + */ + function getDebtCeiling(address asset) external view returns (uint256); + + /** + * @notice Returns the debt ceiling decimals + * @return The debt ceiling decimals + */ + function getDebtCeilingDecimals() external pure returns (uint256); + /** * @notice Returns the reserve data * @param asset The address of the underlying asset of the reserve @@ -17,7 +138,7 @@ interface IPoolDataProvider { * @return liquidityIndex The liquidity index of the reserve * @return variableBorrowIndex The variable borrow index of the reserve * @return lastUpdateTimestamp The timestamp of the last update of the reserve - **/ + */ function getReserveData(address asset) external view @@ -40,13 +161,76 @@ interface IPoolDataProvider { * @notice Returns the total supply of aTokens for a given asset * @param asset The address of the underlying asset of the reserve * @return The total supply of the aToken - **/ + */ function getATokenTotalSupply(address asset) external view returns (uint256); /** * @notice Returns the total debt for a given asset * @param asset The address of the underlying asset of the reserve * @return The total debt for asset - **/ + */ function getTotalDebt(address asset) external view returns (uint256); + + /** + * @notice Returns the user data in a reserve + * @param asset The address of the underlying asset of the reserve + * @param user The address of the user + * @return currentATokenBalance The current AToken balance of the user + * @return currentStableDebt The current stable debt of the user + * @return currentVariableDebt The current variable debt of the user + * @return principalStableDebt The principal stable debt of the user + * @return scaledVariableDebt The scaled variable debt of the user + * @return stableBorrowRate The stable borrow rate of the user + * @return liquidityRate The liquidity rate of the reserve + * @return stableRateLastUpdated The timestamp of the last update of the user stable rate + * @return usageAsCollateralEnabled True if the user is using the asset as collateral, false + * otherwise + */ + function getUserReserveData(address asset, address user) + external + view + returns ( + uint256 currentATokenBalance, + uint256 currentStableDebt, + uint256 currentVariableDebt, + uint256 principalStableDebt, + uint256 scaledVariableDebt, + uint256 stableBorrowRate, + uint256 liquidityRate, + uint40 stableRateLastUpdated, + bool usageAsCollateralEnabled + ); + + /** + * @notice Returns the token addresses of the reserve + * @param asset The address of the underlying asset of the reserve + * @return aTokenAddress The AToken address of the reserve + * @return stableDebtTokenAddress The StableDebtToken address of the reserve + * @return variableDebtTokenAddress The VariableDebtToken address of the reserve + */ + function getReserveTokensAddresses(address asset) + external + view + returns ( + address aTokenAddress, + address stableDebtTokenAddress, + address variableDebtTokenAddress + ); + + /** + * @notice Returns the address of the Interest Rate strategy + * @param asset The address of the underlying asset of the reserve + * @return irStrategyAddress The address of the Interest Rate strategy + */ + function getInterestRateStrategyAddress(address asset) + external + view + returns (address irStrategyAddress); + + /** + * @notice Returns whether the reserve has FlashLoans enabled or disabled + * @param asset The address of the underlying asset of the reserve + * @return True if FlashLoans are enabled, false otherwise + */ + function getFlashLoanEnabled(address asset) external view returns (bool); } diff --git a/contracts/interfaces/IReserveInterestRateStrategy.sol b/contracts/interfaces/IReserveInterestRateStrategy.sol index 1aaf63343..65eefa50a 100644 --- a/contracts/interfaces/IReserveInterestRateStrategy.sol +++ b/contracts/interfaces/IReserveInterestRateStrategy.sol @@ -9,25 +9,13 @@ import {DataTypes} from '../protocol/libraries/types/DataTypes.sol'; * @notice Interface for the calculation of the interest rates */ interface IReserveInterestRateStrategy { - /** - * @notice Returns the base variable borrow rate - * @return The base variable borrow rate, expressed in ray - **/ - function getBaseVariableBorrowRate() external view returns (uint256); - - /** - * @notice Returns the maximum variable borrow rate - * @return The maximum variable borrow rate, expressed in ray - **/ - function getMaxVariableBorrowRate() external view returns (uint256); - /** * @notice Calculates the interest rates depending on the reserve's state and configurations * @param params The parameters needed to calculate interest rates * @return liquidityRate The liquidity rate expressed in rays * @return stableBorrowRate The stable borrow rate expressed in rays * @return variableBorrowRate The variable borrow rate expressed in rays - **/ + */ function calculateInterestRates(DataTypes.CalculateInterestRatesParams memory params) external view diff --git a/contracts/misc/AaveProtocolDataProvider.sol b/contracts/misc/AaveProtocolDataProvider.sol index c7284ab12..5dc0902dc 100644 --- a/contracts/misc/AaveProtocolDataProvider.sol +++ b/contracts/misc/AaveProtocolDataProvider.sol @@ -25,23 +25,19 @@ contract AaveProtocolDataProvider is IPoolDataProvider { address constant MKR = 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2; address constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; - struct TokenData { - string symbol; - address tokenAddress; - } - + /// @inheritdoc IPoolDataProvider IPoolAddressesProvider public immutable ADDRESSES_PROVIDER; + /** + * @notice Constructor + * @param addressesProvider The address of the PoolAddressesProvider contract + */ constructor(IPoolAddressesProvider addressesProvider) { ADDRESSES_PROVIDER = addressesProvider; } - /** - * @notice Returns the list of the existing reserves in the pool. - * @dev Handling MKR and ETH in a different way since they do not have standard `symbol` functions. - * @return The list of reserves, pairs of symbols and addresses - */ - function getAllReservesTokens() external view returns (TokenData[] memory) { + /// @inheritdoc IPoolDataProvider + function getAllReservesTokens() external view override returns (TokenData[] memory) { IPool pool = IPool(ADDRESSES_PROVIDER.getPool()); address[] memory reserves = pool.getReservesList(); TokenData[] memory reservesTokens = new TokenData[](reserves.length); @@ -62,11 +58,8 @@ contract AaveProtocolDataProvider is IPoolDataProvider { return reservesTokens; } - /** - * @notice Returns the list of the existing ATokens in the pool. - * @return The list of ATokens, pairs of symbols and addresses - */ - function getAllATokens() external view returns (TokenData[] memory) { + /// @inheritdoc IPoolDataProvider + function getAllATokens() external view override returns (TokenData[] memory) { IPool pool = IPool(ADDRESSES_PROVIDER.getPool()); address[] memory reserves = pool.getReservesList(); TokenData[] memory aTokens = new TokenData[](reserves.length); @@ -80,24 +73,11 @@ contract AaveProtocolDataProvider is IPoolDataProvider { return aTokens; } - /** - * @notice Returns the configuration data of the reserve - * @dev Not returning borrow and supply caps for compatibility, nor pause flag - * @param asset The address of the underlying asset of the reserve - * @return decimals The number of decimals of the reserve - * @return ltv The ltv of the reserve - * @return liquidationThreshold The liquidationThreshold of the reserve - * @return liquidationBonus The liquidationBonus of the reserve - * @return reserveFactor The reserveFactor of the reserve - * @return usageAsCollateralEnabled True if the usage as collateral is enabled, false otherwise - * @return borrowingEnabled True if borrowing is enabled, false otherwise - * @return stableBorrowRateEnabled True if stable rate borrowing is enabled, false otherwise - * @return isActive True if it is active, false otherwise - * @return isFrozen True if it is frozen, false otherwise - **/ + /// @inheritdoc IPoolDataProvider function getReserveConfigurationData(address asset) external view + override returns ( uint256 decimals, uint256 ltv, @@ -122,100 +102,54 @@ contract AaveProtocolDataProvider is IPoolDataProvider { usageAsCollateralEnabled = liquidationThreshold != 0; } - /** - * Returns the efficiency mode category of the reserve - * @param asset The address of the underlying asset of the reserve - * @return The eMode id of the reserve - */ - function getReserveEModeCategory(address asset) external view returns (uint256) { + /// @inheritdoc IPoolDataProvider + function getReserveEModeCategory(address asset) external view override returns (uint256) { DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool()) .getConfiguration(asset); return configuration.getEModeCategory(); } - /** - * @notice Returns the caps parameters of the reserve - * @param asset The address of the underlying asset of the reserve - * @return borrowCap The borrow cap of the reserve - * @return supplyCap The supply cap of the reserve - **/ + /// @inheritdoc IPoolDataProvider function getReserveCaps(address asset) external view + override returns (uint256 borrowCap, uint256 supplyCap) { (borrowCap, supplyCap) = IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getCaps(); } - /** - * @notice Returns if the pool is paused - * @param asset The address of the underlying asset of the reserve - * @return isPaused True if the pool is paused, false otherwise - **/ - function getPaused(address asset) external view returns (bool isPaused) { + /// @inheritdoc IPoolDataProvider + function getPaused(address asset) external view override returns (bool isPaused) { (, , , , isPaused) = IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getFlags(); } - /** - * @notice Returns the siloed borrowing flag - * @param asset The address of the underlying asset of the reserve - * @return True if the asset is siloed for borrowing - **/ - function getSiloedBorrowing(address asset) external view returns (bool) { + /// @inheritdoc IPoolDataProvider + function getSiloedBorrowing(address asset) external view override returns (bool) { return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getSiloedBorrowing(); } - /** - * @notice Returns the protocol fee on the liquidation bonus - * @param asset The address of the underlying asset of the reserve - * @return The protocol fee on liquidation - **/ - function getLiquidationProtocolFee(address asset) external view returns (uint256) { + /// @inheritdoc IPoolDataProvider + function getLiquidationProtocolFee(address asset) external view override returns (uint256) { return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getLiquidationProtocolFee(); } - /** - * @notice Returns the unbacked mint cap of the reserve - * @param asset The address of the underlying asset of the reserve - * @return The unbacked mint cap of the reserve - **/ - function getUnbackedMintCap(address asset) external view returns (uint256) { + /// @inheritdoc IPoolDataProvider + function getUnbackedMintCap(address asset) external view override returns (uint256) { return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getUnbackedMintCap(); } - /** - * @notice Returns the debt ceiling of the reserve - * @param asset The address of the underlying asset of the reserve - * @return The debt ceiling of the reserve - **/ - function getDebtCeiling(address asset) external view returns (uint256) { + /// @inheritdoc IPoolDataProvider + function getDebtCeiling(address asset) external view override returns (uint256) { return IPool(ADDRESSES_PROVIDER.getPool()).getConfiguration(asset).getDebtCeiling(); } - /** - * @notice Returns the debt ceiling decimals - * @return The debt ceiling decimals - **/ - function getDebtCeilingDecimals() external pure returns (uint256) { + /// @inheritdoc IPoolDataProvider + function getDebtCeilingDecimals() external pure override returns (uint256) { return ReserveConfiguration.DEBT_CEILING_DECIMALS; } - /** - * @notice Returns the reserve data - * @param asset The address of the underlying asset of the reserve - * @return unbacked The amount of unbacked tokens - * @return accruedToTreasuryScaled The scaled amount of tokens accrued to treasury that is to be minted - * @return totalAToken The total supply of the aToken - * @return totalStableDebt The total stable debt of the reserve - * @return totalVariableDebt The total variable debt of the reserve - * @return liquidityRate The liquidity rate of the reserve - * @return variableBorrowRate The variable borrow rate of the reserve - * @return stableBorrowRate The stable borrow rate of the reserve - * @return averageStableBorrowRate The average stable borrow rate of the reserve - * @return liquidityIndex The liquidity index of the reserve - * @return variableBorrowIndex The variable borrow index of the reserve - * @return lastUpdateTimestamp The timestamp of the last update of the reserve - **/ + /// @inheritdoc IPoolDataProvider function getReserveData(address asset) external view @@ -255,11 +189,7 @@ contract AaveProtocolDataProvider is IPoolDataProvider { ); } - /** - * @notice Returns the total supply of aTokens for a given asset - * @param asset The address of the underlying asset of the reserve - * @return The total supply of the aToken - **/ + /// @inheritdoc IPoolDataProvider function getATokenTotalSupply(address asset) external view override returns (uint256) { DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData( asset @@ -267,11 +197,7 @@ contract AaveProtocolDataProvider is IPoolDataProvider { return IERC20Detailed(reserve.aTokenAddress).totalSupply(); } - /** - * @notice Returns the total debt for a given asset - * @param asset The address of the underlying asset of the reserve - * @return The total debt for asset - **/ + /// @inheritdoc IPoolDataProvider function getTotalDebt(address asset) external view override returns (uint256) { DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData( asset @@ -281,24 +207,11 @@ contract AaveProtocolDataProvider is IPoolDataProvider { IERC20Detailed(reserve.variableDebtTokenAddress).totalSupply(); } - /** - * @notice Returns the user data in a reserve - * @param asset The address of the underlying asset of the reserve - * @param user The address of the user - * @return currentATokenBalance The current AToken balance of the user - * @return currentStableDebt The current stable debt of the user - * @return currentVariableDebt The current variable debt of the user - * @return principalStableDebt The principal stable debt of the user - * @return scaledVariableDebt The scaled variable debt of the user - * @return stableBorrowRate The stable borrow rate of the user - * @return liquidityRate The liquidity rate of the reserve - * @return stableRateLastUpdated The timestamp of the last update of the user stable rate - * @return usageAsCollateralEnabled True if the user is using the asset as collateral, false - * otherwise - **/ + /// @inheritdoc IPoolDataProvider function getUserReserveData(address asset, address user) external view + override returns ( uint256 currentATokenBalance, uint256 currentStableDebt, @@ -331,16 +244,11 @@ contract AaveProtocolDataProvider is IPoolDataProvider { usageAsCollateralEnabled = userConfig.isUsingAsCollateral(reserve.id); } - /** - * @notice Returns the token addresses of the reserve - * @param asset The address of the underlying asset of the reserve - * @return aTokenAddress The AToken address of the reserve - * @return stableDebtTokenAddress The StableDebtToken address of the reserve - * @return variableDebtTokenAddress The VariableDebtToken address of the reserve - */ + /// @inheritdoc IPoolDataProvider function getReserveTokensAddresses(address asset) external view + override returns ( address aTokenAddress, address stableDebtTokenAddress, @@ -358,14 +266,11 @@ contract AaveProtocolDataProvider is IPoolDataProvider { ); } - /** - * @notice Returns the address of the Interest Rate strategy - * @param asset The address of the underlying asset of the reserve - * @return irStrategyAddress The address of the Interest Rate strategy - */ + /// @inheritdoc IPoolDataProvider function getInterestRateStrategyAddress(address asset) external view + override returns (address irStrategyAddress) { DataTypes.ReserveData memory reserve = IPool(ADDRESSES_PROVIDER.getPool()).getReserveData( @@ -375,15 +280,11 @@ contract AaveProtocolDataProvider is IPoolDataProvider { return (reserve.interestRateStrategyAddress); } - /** - * @notice Returns whether the reserve has FlashLoans enabled or disabled - * @param asset The address of the underlying asset of the reserve - * @return True if FlashLoans are enabled, false otherwise - * */ - function getFlashLoanEnabled(address asset) external view returns (bool) { + /// @inheritdoc IPoolDataProvider + function getFlashLoanEnabled(address asset) external view override returns (bool) { DataTypes.ReserveConfigurationMap memory configuration = IPool(ADDRESSES_PROVIDER.getPool()) .getConfiguration(asset); return configuration.getFlashLoanEnabled(); - } + } } diff --git a/contracts/mocks/helpers/MockReserveConfiguration.sol b/contracts/mocks/helpers/MockReserveConfiguration.sol index 947a88a21..d6338441f 100644 --- a/contracts/mocks/helpers/MockReserveConfiguration.sol +++ b/contracts/mocks/helpers/MockReserveConfiguration.sol @@ -1,9 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.10; -import { - ReserveConfiguration -} from '../../protocol/libraries/configuration/ReserveConfiguration.sol'; +import {ReserveConfiguration} from '../../protocol/libraries/configuration/ReserveConfiguration.sol'; import {DataTypes} from '../../protocol/libraries/types/DataTypes.sol'; contract MockReserveConfiguration { diff --git a/contracts/mocks/tests/MockReserveInterestRateStrategy.sol b/contracts/mocks/tests/MockReserveInterestRateStrategy.sol index 973ed7976..eaa0830d5 100644 --- a/contracts/mocks/tests/MockReserveInterestRateStrategy.sol +++ b/contracts/mocks/tests/MockReserveInterestRateStrategy.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.10; -import {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRateStrategy.sol'; import {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol'; import {WadRayMath} from '../../protocol/libraries/math/WadRayMath.sol'; import {DataTypes} from '../../protocol/libraries/types/DataTypes.sol'; +import {IDefaultInterestRateStrategy} from '../../interfaces/IDefaultInterestRateStrategy.sol'; -contract MockReserveInterestRateStrategy is IReserveInterestRateStrategy { +contract MockReserveInterestRateStrategy is IDefaultInterestRateStrategy { uint256 public immutable OPTIMAL_USAGE_RATIO; IPoolAddressesProvider public immutable ADDRESSES_PROVIDER; uint256 internal immutable _baseVariableBorrowRate; @@ -15,6 +15,11 @@ contract MockReserveInterestRateStrategy is IReserveInterestRateStrategy { uint256 internal immutable _stableRateSlope1; uint256 internal immutable _stableRateSlope2; + // Not used, only defined for interface compatibility + uint256 public constant MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO = 0; + uint256 public constant MAX_EXCESS_USAGE_RATIO = 0; + uint256 public constant OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO = 0; + uint256 internal _liquidityRate; uint256 internal _stableBorrowRate; uint256 internal _variableBorrowRate; @@ -85,4 +90,14 @@ contract MockReserveInterestRateStrategy is IReserveInterestRateStrategy { function getMaxVariableBorrowRate() external view override returns (uint256) { return _baseVariableBorrowRate + _variableRateSlope1 + _variableRateSlope2; } + + // Not used, only defined for interface compatibility + function getBaseStableBorrowRate() external pure override returns (uint256) { + return 0; + } + + // Not used, only defined for interface compatibility + function getStableRateExcessOffset() external pure override returns (uint256) { + return 0; + } } diff --git a/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol b/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol index 9937ce237..9ad96e862 100644 --- a/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol +++ b/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol @@ -5,9 +5,10 @@ import {IERC20} from '../../dependencies/openzeppelin/contracts/IERC20.sol'; import {WadRayMath} from '../libraries/math/WadRayMath.sol'; import {PercentageMath} from '../libraries/math/PercentageMath.sol'; import {DataTypes} from '../libraries/types/DataTypes.sol'; +import {Errors} from '../libraries/helpers/Errors.sol'; +import {IDefaultInterestRateStrategy} from '../../interfaces/IDefaultInterestRateStrategy.sol'; import {IReserveInterestRateStrategy} from '../../interfaces/IReserveInterestRateStrategy.sol'; import {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol'; -import {Errors} from '../libraries/helpers/Errors.sol'; /** * @title DefaultReserveInterestRateStrategy contract @@ -18,34 +19,20 @@ import {Errors} from '../libraries/helpers/Errors.sol'; * - An instance of this same contract, can't be used across different Aave markets, due to the caching * of the PoolAddressesProvider **/ -contract DefaultReserveInterestRateStrategy is IReserveInterestRateStrategy { +contract DefaultReserveInterestRateStrategy is IDefaultInterestRateStrategy { using WadRayMath for uint256; using PercentageMath for uint256; - /** - * @dev This constant represents the usage ratio at which the pool aims to obtain most competitive borrow rates. - * Expressed in ray - **/ + /// @inheritdoc IDefaultInterestRateStrategy uint256 public immutable OPTIMAL_USAGE_RATIO; - /** - * @dev This constant represents the optimal stable debt to total debt ratio of the reserve. - * Expressed in ray - */ + /// @inheritdoc IDefaultInterestRateStrategy uint256 public immutable OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO; - /** - * @dev This constant represents the excess usage ratio above the optimal. It's always equal to - * 1-optimal usage ratio. Added as a constant here for gas optimizations. - * Expressed in ray - **/ + /// @inheritdoc IDefaultInterestRateStrategy uint256 public immutable MAX_EXCESS_USAGE_RATIO; - /** - * @dev This constant represents the excess stable debt ratio above the optimal. It's always equal to - * 1-optimal stable to total debt ratio. Added as a constant here for gas optimizations. - * Expressed in ray - **/ + /// @inheritdoc IDefaultInterestRateStrategy uint256 public immutable MAX_EXCESS_STABLE_TO_TOTAL_DEBT_RATIO; IPoolAddressesProvider public immutable ADDRESSES_PROVIDER; @@ -115,65 +102,42 @@ contract DefaultReserveInterestRateStrategy is IReserveInterestRateStrategy { _stableRateExcessOffset = stableRateExcessOffset; } - /** - * @notice Returns the variable rate slope below optimal usage ratio - * @dev Its the variable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO - * @return The variable rate slope - **/ + /// @inheritdoc IDefaultInterestRateStrategy function getVariableRateSlope1() external view returns (uint256) { return _variableRateSlope1; } - /** - * @notice Returns the variable rate slope above optimal usage ratio - * @dev Its the variable rate when usage ratio > OPTIMAL_USAGE_RATIO - * @return The variable rate slope - **/ + /// @inheritdoc IDefaultInterestRateStrategy function getVariableRateSlope2() external view returns (uint256) { return _variableRateSlope2; } - /** - * @notice Returns the stable rate slope below optimal usage ratio - * @dev Its the stable rate when usage ratio > 0 and <= OPTIMAL_USAGE_RATIO - * @return The stable rate slope - **/ + /// @inheritdoc IDefaultInterestRateStrategy function getStableRateSlope1() external view returns (uint256) { return _stableRateSlope1; } - /** - * @notice Returns the stable rate slope above optimal usage ratio - * @dev Its the variable rate when usage ratio > OPTIMAL_USAGE_RATIO - * @return The stable rate slope - **/ + /// @inheritdoc IDefaultInterestRateStrategy function getStableRateSlope2() external view returns (uint256) { return _stableRateSlope2; } - /** - * @notice Returns the stable rate excess offset - * @dev An additional premium applied to the stable when stable debt > OPTIMAL_STABLE_TO_TOTAL_DEBT_RATIO - * @return The stable rate excess offset - */ + /// @inheritdoc IDefaultInterestRateStrategy function getStableRateExcessOffset() external view returns (uint256) { return _stableRateExcessOffset; } - /** - * @notice Returns the base stable borrow rate - * @return The base stable borrow rate - **/ + /// @inheritdoc IDefaultInterestRateStrategy function getBaseStableBorrowRate() public view returns (uint256) { return _variableRateSlope1 + _baseStableRateOffset; } - /// @inheritdoc IReserveInterestRateStrategy + /// @inheritdoc IDefaultInterestRateStrategy function getBaseVariableBorrowRate() external view override returns (uint256) { return _baseVariableBorrowRate; } - /// @inheritdoc IReserveInterestRateStrategy + /// @inheritdoc IDefaultInterestRateStrategy function getMaxVariableBorrowRate() external view override returns (uint256) { return _baseVariableBorrowRate + _variableRateSlope1 + _variableRateSlope2; } From 56fd7ba792e084518c2852cc6158f214cfd3eb2e Mon Sep 17 00:00:00 2001 From: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Date: Wed, 14 Dec 2022 17:21:39 +0100 Subject: [PATCH 75/87] fix: Add license to L2Pool contract (#765) --- contracts/protocol/pool/L2Pool.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/contracts/protocol/pool/L2Pool.sol b/contracts/protocol/pool/L2Pool.sol index 0e2b5a1ce..43dba919c 100644 --- a/contracts/protocol/pool/L2Pool.sol +++ b/contracts/protocol/pool/L2Pool.sol @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.10; import {Pool} from './Pool.sol'; From 32f0e72bafdb5a29e5da5fdbd3539167964083a6 Mon Sep 17 00:00:00 2001 From: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Date: Wed, 14 Dec 2022 18:25:48 +0100 Subject: [PATCH 76/87] docs: Fix typo in the closing part of multiline natspec docs (#764) * docs: Fix typo in the closing part of multiline natspec docs --- Certora/certora/harness/ATokenHarness.sol | 4 +- .../certora/harness/GenericLogicHarness.sol | 4 +- .../harness/PoolConfiguratorHarness.sol | 2 +- .../harness/PoolHarnessForConfigurator.sol | 4 +- .../harness/StableDebtTokenHarness.sol | 2 +- .../interfaces/IFlashLoanReceiver.sol | 2 +- .../interfaces/IFlashLoanSimpleReceiver.sol | 2 +- contracts/interfaces/IACLManager.sol | 2 +- contracts/interfaces/IAToken.sol | 18 ++-- .../interfaces/IAaveIncentivesController.sol | 4 +- .../interfaces/ICreditDelegationToken.sol | 6 +- contracts/interfaces/IDelegationToken.sol | 2 +- contracts/interfaces/IERC20WithPermit.sol | 2 +- contracts/interfaces/IInitializableAToken.sol | 4 +- .../interfaces/IInitializableDebtToken.sol | 4 +- contracts/interfaces/IL2Pool.sol | 2 +- contracts/interfaces/IPool.sol | 88 +++++++++--------- .../interfaces/IPoolAddressesProvider.sol | 18 ++-- .../IPoolAddressesProviderRegistry.sol | 8 +- contracts/interfaces/IPoolConfigurator.sol | 90 +++++++++---------- contracts/interfaces/IPoolDataProvider.sol | 2 +- contracts/interfaces/IPriceOracle.sol | 6 +- contracts/interfaces/IPriceOracleGetter.sol | 8 +- contracts/interfaces/IScaledBalanceToken.sol | 14 +-- contracts/interfaces/IStableDebtToken.sol | 26 +++--- contracts/interfaces/IVariableDebtToken.sol | 8 +- contracts/misc/AaveOracle.sol | 2 +- .../tests/MockReserveInterestRateStrategy.sol | 2 +- .../MockInitializableImplementation.sol | 8 +- .../configuration/PoolAddressesProvider.sol | 6 +- .../PoolAddressesProviderRegistry.sol | 2 +- .../configuration/PriceOracleSentinel.sol | 4 +- .../VersionedInitializable.sol | 4 +- .../configuration/ReserveConfiguration.sol | 78 ++++++++-------- .../configuration/UserConfiguration.sol | 20 ++--- .../protocol/libraries/helpers/Helpers.sol | 2 +- .../protocol/libraries/logic/BridgeLogic.sol | 4 +- .../protocol/libraries/logic/EModeLogic.sol | 4 +- .../protocol/libraries/logic/GenericLogic.sol | 8 +- .../libraries/logic/LiquidationLogic.sol | 6 +- .../protocol/libraries/logic/PoolLogic.sol | 8 +- .../protocol/libraries/logic/ReserveLogic.sol | 16 ++-- .../libraries/logic/ValidationLogic.sol | 10 +-- .../protocol/libraries/math/MathUtils.sol | 6 +- .../libraries/math/PercentageMath.sol | 6 +- .../protocol/libraries/math/WadRayMath.sol | 14 +-- .../DefaultReserveInterestRateStrategy.sol | 4 +- contracts/protocol/pool/Pool.sol | 10 +-- contracts/protocol/pool/PoolConfigurator.sol | 12 +-- contracts/protocol/tokenization/AToken.sol | 4 +- .../tokenization/DelegationAwareAToken.sol | 2 +- .../protocol/tokenization/StableDebtToken.sol | 12 +-- .../tokenization/VariableDebtToken.sol | 4 +- .../tokenization/base/DebtTokenBase.sol | 4 +- .../tokenization/base/IncentivizedERC20.sol | 14 +-- .../base/MintableIncentivizedERC20.sol | 2 +- .../base/ScaledBalanceTokenBase.sol | 8 +- 57 files changed, 309 insertions(+), 309 deletions(-) diff --git a/Certora/certora/harness/ATokenHarness.sol b/Certora/certora/harness/ATokenHarness.sol index e5129c475..a5492b9dd 100644 --- a/Certora/certora/harness/ATokenHarness.sol +++ b/Certora/certora/harness/ATokenHarness.sol @@ -18,7 +18,7 @@ contract ATokenHarness is AToken { /** * @dev Calls burn with index == 1 RAY * @param amount the amount being burned - **/ + */ function burn( address user, address receiverOfUnderlying, @@ -37,7 +37,7 @@ contract ATokenHarness is AToken { /** * @dev Calls mint with index == 1 RAY * @param amount the amount of tokens to mint - **/ + */ function mint( address user, address onBehalfOf, diff --git a/Certora/certora/harness/GenericLogicHarness.sol b/Certora/certora/harness/GenericLogicHarness.sol index ae18b7390..316896308 100644 --- a/Certora/certora/harness/GenericLogicHarness.sol +++ b/Certora/certora/harness/GenericLogicHarness.sol @@ -71,7 +71,7 @@ contract GenericLogic { * @return The average liquidation threshold of the user * @return The health factor of the user * @return True if the ltv is zero, false otherwise - **/ + */ function calculateUserAccountData() public returns ( @@ -226,7 +226,7 @@ contract GenericLogic { * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed * @param ltv The average loan to value * @return The amount available to borrow in the base currency of the used by the price feed - **/ + */ function calculateAvailableBorrows( uint256 totalCollateralInBaseCurrency, uint256 totalDebtInBaseCurrency, diff --git a/Certora/certora/harness/PoolConfiguratorHarness.sol b/Certora/certora/harness/PoolConfiguratorHarness.sol index 0180964b0..f10e28688 100644 --- a/Certora/certora/harness/PoolConfiguratorHarness.sol +++ b/Certora/certora/harness/PoolConfiguratorHarness.sol @@ -24,7 +24,7 @@ import {IPoolDataProvider} from '../../contracts/interfaces/IPoolDataProvider.so * @title PoolConfigurator * @author Aave * @dev Implements the configuration methods for the Aave protocol - **/ + */ contract PoolConfiguratorHarness is VersionedInitializable, IPoolConfigurator { using PercentageMath for uint256; using ReserveConfiguration for DataTypes.ReserveConfigurationMap; diff --git a/Certora/certora/harness/PoolHarnessForConfigurator.sol b/Certora/certora/harness/PoolHarnessForConfigurator.sol index a27cd77e1..529942cfc 100644 --- a/Certora/certora/harness/PoolHarnessForConfigurator.sol +++ b/Certora/certora/harness/PoolHarnessForConfigurator.sol @@ -41,7 +41,7 @@ import {Helpers} from '../../contracts/protocol/libraries/helpers/Helpers.sol'; * @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market * @dev All admin functions are callable by the PoolConfigurator contract defined also in the * PoolAddressesProvider - **/ + */ contract PoolHarnessForConfigurator is VersionedInitializable, IPool, PoolStorage { using WadRayMath for uint256; using ReserveLogic for DataTypes.ReserveData; @@ -88,7 +88,7 @@ contract PoolHarnessForConfigurator is VersionedInitializable, IPool, PoolStorag * PoolAddressesProvider of the market. * @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations * @param provider The address of the PoolAddressesProvider - **/ + */ function initialize(IPoolAddressesProvider provider) external initializer { require(provider == _addressesProvider, Errors.PC_INVALID_CONFIGURATION); _maxStableRateBorrowSizePercent = 2500; diff --git a/Certora/certora/harness/StableDebtTokenHarness.sol b/Certora/certora/harness/StableDebtTokenHarness.sol index 471096e30..3a5d55d95 100644 --- a/Certora/certora/harness/StableDebtTokenHarness.sol +++ b/Certora/certora/harness/StableDebtTokenHarness.sol @@ -16,7 +16,7 @@ contract StableDebtTokenHarness is StableDebtToken { /** Simplification: The user accumulates no interest (the balance increase is always 0). - **/ + */ function balanceOf(address account) public view override returns (uint256) { return IncentivizedERC20.balanceOf(account); } diff --git a/contracts/flashloan/interfaces/IFlashLoanReceiver.sol b/contracts/flashloan/interfaces/IFlashLoanReceiver.sol index 144cc6eac..f006202d8 100644 --- a/contracts/flashloan/interfaces/IFlashLoanReceiver.sol +++ b/contracts/flashloan/interfaces/IFlashLoanReceiver.sol @@ -9,7 +9,7 @@ import {IPool} from '../../interfaces/IPool.sol'; * @author Aave * @notice Defines the basic interface of a flashloan-receiver contract. * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract - **/ + */ interface IFlashLoanReceiver { /** * @notice Executes an operation after receiving the flash-borrowed assets diff --git a/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol b/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol index b13a299a9..492b627a2 100644 --- a/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol +++ b/contracts/flashloan/interfaces/IFlashLoanSimpleReceiver.sol @@ -9,7 +9,7 @@ import {IPool} from '../../interfaces/IPool.sol'; * @author Aave * @notice Defines the basic interface of a flashloan-receiver contract. * @dev Implement this interface to develop a flashloan-compatible flashLoanReceiver contract - **/ + */ interface IFlashLoanSimpleReceiver { /** * @notice Executes an operation after receiving the flash-borrowed asset diff --git a/contracts/interfaces/IACLManager.sol b/contracts/interfaces/IACLManager.sol index c481ce94d..d5d97ceb0 100644 --- a/contracts/interfaces/IACLManager.sol +++ b/contracts/interfaces/IACLManager.sol @@ -7,7 +7,7 @@ import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol'; * @title IACLManager * @author Aave * @notice Defines the basic interface for the ACL Manager - **/ + */ interface IACLManager { /** * @notice Returns the contract address of the PoolAddressesProvider diff --git a/contracts/interfaces/IAToken.sol b/contracts/interfaces/IAToken.sol index 43b9c949b..a50e11d5c 100644 --- a/contracts/interfaces/IAToken.sol +++ b/contracts/interfaces/IAToken.sol @@ -9,7 +9,7 @@ import {IInitializableAToken} from './IInitializableAToken.sol'; * @title IAToken * @author Aave * @notice Defines the basic interface for an AToken. - **/ + */ interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken { /** * @dev Emitted during the transfer action @@ -17,7 +17,7 @@ interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken { * @param to The recipient * @param value The scaled amount being transferred * @param index The next liquidity index of the reserve - **/ + */ event BalanceTransfer(address indexed from, address indexed to, uint256 value, uint256 index); /** @@ -43,7 +43,7 @@ interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken { * @param receiverOfUnderlying The address that will receive the underlying * @param amount The amount being burned * @param index The next liquidity index of the reserve - **/ + */ function burn( address from, address receiverOfUnderlying, @@ -63,7 +63,7 @@ interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken { * @param from The address getting liquidated, current owner of the aTokens * @param to The recipient * @param value The amount of tokens getting transferred - **/ + */ function transferOnLiquidation( address from, address to, @@ -75,7 +75,7 @@ interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken { * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan() * @param user The recipient of the underlying * @param amount The amount getting transferred - **/ + */ function transferUnderlyingTo(address user, uint256 amount) external; /** @@ -86,7 +86,7 @@ interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken { * @param user The user executing the repayment * @param onBehalfOf The address of the user who will get his debt reduced/removed * @param amount The amount getting repaid - **/ + */ function handleRepayment( address user, address onBehalfOf, @@ -118,13 +118,13 @@ interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken { /** * @notice Returns the address of the underlying asset of this aToken (E.g. WETH for aWETH) * @return The address of the underlying asset - **/ + */ function UNDERLYING_ASSET_ADDRESS() external view returns (address); /** * @notice Returns the address of the Aave treasury, receiving the fees on this aToken. * @return Address of the Aave treasury - **/ + */ function RESERVE_TREASURY_ADDRESS() external view returns (address); /** @@ -138,7 +138,7 @@ interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken { * @notice Returns the nonce for owner. * @param owner The address of the owner * @return The nonce of the owner - **/ + */ function nonces(address owner) external view returns (uint256); /** diff --git a/contracts/interfaces/IAaveIncentivesController.sol b/contracts/interfaces/IAaveIncentivesController.sol index d855d079c..0cfc5596a 100644 --- a/contracts/interfaces/IAaveIncentivesController.sol +++ b/contracts/interfaces/IAaveIncentivesController.sol @@ -6,7 +6,7 @@ pragma solidity ^0.8.0; * @author Aave * @notice Defines the basic interface for an Aave Incentives Controller. * @dev It only contains one single function, needed as a hook on aToken and debtToken transfers. - **/ + */ interface IAaveIncentivesController { /** * @dev Called by the corresponding asset on transfer hook in order to update the rewards distribution. @@ -14,7 +14,7 @@ interface IAaveIncentivesController { * @param user The address of the user whose asset balance has changed * @param totalSupply The total supply of the asset prior to user balance change * @param userBalance The previous user balance prior to balance change - **/ + */ function handleAction( address user, uint256 totalSupply, diff --git a/contracts/interfaces/ICreditDelegationToken.sol b/contracts/interfaces/ICreditDelegationToken.sol index 34dfa52d3..323118f12 100644 --- a/contracts/interfaces/ICreditDelegationToken.sol +++ b/contracts/interfaces/ICreditDelegationToken.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.0; * @title ICreditDelegationToken * @author Aave * @notice Defines the basic interface for a token supporting credit delegation. - **/ + */ interface ICreditDelegationToken { /** * @dev Emitted on `approveDelegation` and `borrowAllowance @@ -27,7 +27,7 @@ interface ICreditDelegationToken { * delegatee cannot force a delegator HF to go below 1) * @param delegatee The address receiving the delegated borrowing power * @param amount The maximum amount being delegated. - **/ + */ function approveDelegation(address delegatee, uint256 amount) external; /** @@ -35,7 +35,7 @@ interface ICreditDelegationToken { * @param fromUser The user to giving allowance * @param toUser The user to give allowance to * @return The current allowance of `toUser` - **/ + */ function borrowAllowance(address fromUser, address toUser) external view returns (uint256); /** diff --git a/contracts/interfaces/IDelegationToken.sol b/contracts/interfaces/IDelegationToken.sol index e32599fb3..171b95e2f 100644 --- a/contracts/interfaces/IDelegationToken.sol +++ b/contracts/interfaces/IDelegationToken.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.0; * @title IDelegationToken * @author Aave * @notice Implements an interface for tokens with delegation COMP/UNI compatible - **/ + */ interface IDelegationToken { /** * @notice Delegate voting power to a delegatee diff --git a/contracts/interfaces/IERC20WithPermit.sol b/contracts/interfaces/IERC20WithPermit.sol index 2f0a704ff..d1053aab1 100644 --- a/contracts/interfaces/IERC20WithPermit.sol +++ b/contracts/interfaces/IERC20WithPermit.sol @@ -7,7 +7,7 @@ import {IERC20} from '../dependencies/openzeppelin/contracts/IERC20.sol'; * @title IERC20WithPermit * @author Aave * @notice Interface for the permit function (EIP-2612) - **/ + */ interface IERC20WithPermit is IERC20 { /** * @notice Allow passing a signed message to approve spending diff --git a/contracts/interfaces/IInitializableAToken.sol b/contracts/interfaces/IInitializableAToken.sol index d34bdd8d8..0b16baa82 100644 --- a/contracts/interfaces/IInitializableAToken.sol +++ b/contracts/interfaces/IInitializableAToken.sol @@ -8,7 +8,7 @@ import {IPool} from './IPool.sol'; * @title IInitializableAToken * @author Aave * @notice Interface for the initialize function on AToken - **/ + */ interface IInitializableAToken { /** * @dev Emitted when an aToken is initialized @@ -20,7 +20,7 @@ interface IInitializableAToken { * @param aTokenName The name of the aToken * @param aTokenSymbol The symbol of the aToken * @param params A set of encoded parameters for additional initialization - **/ + */ event Initialized( address indexed underlyingAsset, address indexed pool, diff --git a/contracts/interfaces/IInitializableDebtToken.sol b/contracts/interfaces/IInitializableDebtToken.sol index 45c48b5b4..ad8cd7c6c 100644 --- a/contracts/interfaces/IInitializableDebtToken.sol +++ b/contracts/interfaces/IInitializableDebtToken.sol @@ -8,7 +8,7 @@ import {IPool} from './IPool.sol'; * @title IInitializableDebtToken * @author Aave * @notice Interface for the initialize function common between debt tokens - **/ + */ interface IInitializableDebtToken { /** * @dev Emitted when a debt token is initialized @@ -19,7 +19,7 @@ interface IInitializableDebtToken { * @param debtTokenName The name of the debt token * @param debtTokenSymbol The symbol of the debt token * @param params A set of encoded parameters for additional initialization - **/ + */ event Initialized( address indexed underlyingAsset, address indexed pool, diff --git a/contracts/interfaces/IL2Pool.sol b/contracts/interfaces/IL2Pool.sol index 7823e864a..7f8c380c9 100644 --- a/contracts/interfaces/IL2Pool.sol +++ b/contracts/interfaces/IL2Pool.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.0; * @title IL2Pool * @author Aave * @notice Defines the basic extension interface for an L2 Aave Pool. - **/ + */ interface IL2Pool { /** * @notice Calldata efficient wrapper of the supply function on behalf of the caller diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index d2e8d94bc..68d0f11a1 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -8,7 +8,7 @@ import {DataTypes} from '../protocol/libraries/types/DataTypes.sol'; * @title IPool * @author Aave * @notice Defines the basic interface for an Aave Pool. - **/ + */ interface IPool { /** * @dev Emitted on mintUnbacked() @@ -17,7 +17,7 @@ interface IPool { * @param onBehalfOf The beneficiary of the supplied assets, receiving the aTokens * @param amount The amount of supplied assets * @param referralCode The referral code used - **/ + */ event MintUnbacked( address indexed reserve, address user, @@ -32,7 +32,7 @@ interface IPool { * @param backer The address paying for the backing * @param amount The amount added as backing * @param fee The amount paid in fees - **/ + */ event BackUnbacked(address indexed reserve, address indexed backer, uint256 amount, uint256 fee); /** @@ -42,7 +42,7 @@ interface IPool { * @param onBehalfOf The beneficiary of the supply, receiving the aTokens * @param amount The amount supplied * @param referralCode The referral code used - **/ + */ event Supply( address indexed reserve, address user, @@ -57,7 +57,7 @@ interface IPool { * @param user The address initiating the withdrawal, owner of aTokens * @param to The address that will receive the underlying * @param amount The amount to be withdrawn - **/ + */ event Withdraw(address indexed reserve, address indexed user, address indexed to, uint256 amount); /** @@ -70,7 +70,7 @@ interface IPool { * @param interestRateMode The rate mode: 1 for Stable, 2 for Variable * @param borrowRate The numeric rate at which the user has borrowed, expressed in ray * @param referralCode The referral code used - **/ + */ event Borrow( address indexed reserve, address user, @@ -88,7 +88,7 @@ interface IPool { * @param repayer The address of the user initiating the repay(), providing the funds * @param amount The amount repaid * @param useATokens True if the repayment is done using aTokens, `false` if done with underlying asset directly - **/ + */ event Repay( address indexed reserve, address indexed user, @@ -102,7 +102,7 @@ interface IPool { * @param reserve The address of the underlying asset of the reserve * @param user The address of the user swapping his rate mode * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable - **/ + */ event SwapBorrowRateMode( address indexed reserve, address indexed user, @@ -120,28 +120,28 @@ interface IPool { * @dev Emitted when the user selects a certain asset category for eMode * @param user The address of the user * @param categoryId The category id - **/ + */ event UserEModeSet(address indexed user, uint8 categoryId); /** * @dev Emitted on setUserUseReserveAsCollateral() * @param reserve The address of the underlying asset of the reserve * @param user The address of the user enabling the usage as collateral - **/ + */ event ReserveUsedAsCollateralEnabled(address indexed reserve, address indexed user); /** * @dev Emitted on setUserUseReserveAsCollateral() * @param reserve The address of the underlying asset of the reserve * @param user The address of the user enabling the usage as collateral - **/ + */ event ReserveUsedAsCollateralDisabled(address indexed reserve, address indexed user); /** * @dev Emitted on rebalanceStableBorrowRate() * @param reserve The address of the underlying asset of the reserve * @param user The address of the user for which the rebalance has been executed - **/ + */ event RebalanceStableBorrowRate(address indexed reserve, address indexed user); /** @@ -153,7 +153,7 @@ interface IPool { * @param interestRateMode The flashloan mode: 0 for regular flashloan, 1 for Stable debt, 2 for Variable debt * @param premium The fee flash borrowed * @param referralCode The referral code used - **/ + */ event FlashLoan( address indexed target, address initiator, @@ -174,7 +174,7 @@ interface IPool { * @param liquidator The address of the liquidator * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants * to receive the underlying collateral asset directly - **/ + */ event LiquidationCall( address indexed collateralAsset, address indexed debtAsset, @@ -193,7 +193,7 @@ interface IPool { * @param variableBorrowRate The next variable borrow rate * @param liquidityIndex The next liquidity index * @param variableBorrowIndex The next variable borrow index - **/ + */ event ReserveDataUpdated( address indexed reserve, uint256 liquidityRate, @@ -207,7 +207,7 @@ interface IPool { * @dev Emitted when the protocol treasury receives minted aTokens from the accrued interest. * @param reserve The address of the reserve * @param amountMinted The amount minted to the treasury - **/ + */ event MintedToTreasury(address indexed reserve, uint256 amountMinted); /** @@ -217,7 +217,7 @@ interface IPool { * @param onBehalfOf The address that will receive the aTokens * @param referralCode Code used to register the integrator originating the operation, for potential rewards. * 0 if the action is executed directly by the user, without any middle-man - **/ + */ function mintUnbacked( address asset, uint256 amount, @@ -231,7 +231,7 @@ interface IPool { * @param amount The amount to back * @param fee The amount paid in fees * @return The backed amount - **/ + */ function backUnbacked( address asset, uint256 amount, @@ -248,7 +248,7 @@ interface IPool { * is a different wallet * @param referralCode Code used to register the integrator originating the operation, for potential rewards. * 0 if the action is executed directly by the user, without any middle-man - **/ + */ function supply( address asset, uint256 amount, @@ -270,7 +270,7 @@ interface IPool { * @param permitV The V parameter of ERC712 permit sig * @param permitR The R parameter of ERC712 permit sig * @param permitS The S parameter of ERC712 permit sig - **/ + */ function supplyWithPermit( address asset, uint256 amount, @@ -292,7 +292,7 @@ interface IPool { * wants to receive it on his own wallet, or a different address if the beneficiary is a * different wallet * @return The final amount withdrawn - **/ + */ function withdraw( address asset, uint256 amount, @@ -313,7 +313,7 @@ interface IPool { * @param onBehalfOf The address of the user who will receive the debt. Should be the address of the borrower itself * calling the function if he wants to borrow against his own collateral, or the address of the credit delegator * if he has been given credit delegation allowance - **/ + */ function borrow( address asset, uint256 amount, @@ -333,7 +333,7 @@ interface IPool { * user calling the function if he wants to reduce/remove his own debt, or the address of any other * other borrower whose debt should be removed * @return The final amount repaid - **/ + */ function repay( address asset, uint256 amount, @@ -356,7 +356,7 @@ interface IPool { * @param permitR The R parameter of ERC712 permit sig * @param permitS The S parameter of ERC712 permit sig * @return The final amount repaid - **/ + */ function repayWithPermit( address asset, uint256 amount, @@ -379,7 +379,7 @@ interface IPool { * - Send the value type(uint256).max in order to repay the whole debt for `asset` on the specific `debtMode` * @param interestRateMode The interest rate mode at of the debt the user wants to repay: 1 for Stable, 2 for Variable * @return The final amount repaid - **/ + */ function repayWithATokens( address asset, uint256 amount, @@ -390,7 +390,7 @@ interface IPool { * @notice Allows a borrower to swap his debt between stable and variable mode, or vice versa * @param asset The address of the underlying asset borrowed * @param interestRateMode The current interest rate mode of the position being swapped: 1 for Stable, 2 for Variable - **/ + */ function swapBorrowRateMode(address asset, uint256 interestRateMode) external; /** @@ -401,14 +401,14 @@ interface IPool { * much has been borrowed at a stable rate and suppliers are not earning enough * @param asset The address of the underlying asset borrowed * @param user The address of the user to be rebalanced - **/ + */ function rebalanceStableBorrowRate(address asset, address user) external; /** * @notice Allows suppliers to enable/disable a specific supplied asset as collateral * @param asset The address of the underlying asset supplied * @param useAsCollateral True if the user wants to use the supply as collateral, false otherwise - **/ + */ function setUserUseReserveAsCollateral(address asset, bool useAsCollateral) external; /** @@ -421,7 +421,7 @@ interface IPool { * @param debtToCover The debt amount of borrowed `asset` the liquidator wants to cover * @param receiveAToken True if the liquidators wants to receive the collateral aTokens, `false` if he wants * to receive the underlying collateral asset directly - **/ + */ function liquidationCall( address collateralAsset, address debtAsset, @@ -446,7 +446,7 @@ interface IPool { * @param params Variadic packed params to pass to the receiver as extra information * @param referralCode The code used to register the integrator originating the operation, for potential rewards. * 0 if the action is executed directly by the user, without any middle-man - **/ + */ function flashLoan( address receiverAddress, address[] calldata assets, @@ -468,7 +468,7 @@ interface IPool { * @param params Variadic packed params to pass to the receiver as extra information * @param referralCode The code used to register the integrator originating the operation, for potential rewards. * 0 if the action is executed directly by the user, without any middle-man - **/ + */ function flashLoanSimple( address receiverAddress, address asset, @@ -486,7 +486,7 @@ interface IPool { * @return currentLiquidationThreshold The liquidation threshold of the user * @return ltv The loan to value of The user * @return healthFactor The current health factor of the user - **/ + */ function getUserAccountData(address user) external view @@ -508,7 +508,7 @@ interface IPool { * @param stableDebtAddress The address of the StableDebtToken that will be assigned to the reserve * @param variableDebtAddress The address of the VariableDebtToken that will be assigned to the reserve * @param interestRateStrategyAddress The address of the interest rate strategy contract - **/ + */ function initReserve( address asset, address aTokenAddress, @@ -521,7 +521,7 @@ interface IPool { * @notice Drop a reserve * @dev Only callable by the PoolConfigurator contract * @param asset The address of the underlying asset of the reserve - **/ + */ function dropReserve(address asset) external; /** @@ -529,7 +529,7 @@ interface IPool { * @dev Only callable by the PoolConfigurator contract * @param asset The address of the underlying asset of the reserve * @param rateStrategyAddress The address of the interest rate strategy contract - **/ + */ function setReserveInterestRateStrategyAddress(address asset, address rateStrategyAddress) external; @@ -538,7 +538,7 @@ interface IPool { * @dev Only callable by the PoolConfigurator contract * @param asset The address of the underlying asset of the reserve * @param configuration The new configuration bitmap - **/ + */ function setConfiguration(address asset, DataTypes.ReserveConfigurationMap calldata configuration) external; @@ -546,7 +546,7 @@ interface IPool { * @notice Returns the configuration of the reserve * @param asset The address of the underlying asset of the reserve * @return The configuration of the reserve - **/ + */ function getConfiguration(address asset) external view @@ -556,7 +556,7 @@ interface IPool { * @notice Returns the configuration of the user across all the reserves * @param user The user address * @return The configuration of the user - **/ + */ function getUserConfiguration(address user) external view @@ -580,7 +580,7 @@ interface IPool { * @notice Returns the state and configuration of the reserve * @param asset The address of the underlying asset of the reserve * @return The state and configuration data of the reserve - **/ + */ function getReserveData(address asset) external view returns (DataTypes.ReserveData memory); /** @@ -606,20 +606,20 @@ interface IPool { * @notice Returns the list of the underlying assets of all the initialized reserves * @dev It does not include dropped reserves * @return The addresses of the underlying assets of the initialized reserves - **/ + */ function getReservesList() external view returns (address[] memory); /** * @notice Returns the address of the underlying asset of a reserve by the reserve id as stored in the DataTypes.ReserveData struct * @param id The id of the reserve as stored in the DataTypes.ReserveData struct * @return The address of the reserve associated with id - **/ + */ function getReserveAddressById(uint16 id) external view returns (address); /** * @notice Returns the PoolAddressesProvider connected to this contract * @return The address of the PoolAddressesProvider - **/ + */ function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider); /** @@ -712,7 +712,7 @@ interface IPool { /** * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens * @param assets The list of reserves for which the minting needs to be executed - **/ + */ function mintToTreasury(address[] calldata assets) external; /** @@ -738,7 +738,7 @@ interface IPool { * is a different wallet * @param referralCode Code used to register the integrator originating the operation, for potential rewards. * 0 if the action is executed directly by the user, without any middle-man - **/ + */ function deposit( address asset, uint256 amount, diff --git a/contracts/interfaces/IPoolAddressesProvider.sol b/contracts/interfaces/IPoolAddressesProvider.sol index c3c8617f9..587a0d0bc 100644 --- a/contracts/interfaces/IPoolAddressesProvider.sol +++ b/contracts/interfaces/IPoolAddressesProvider.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.0; * @title IPoolAddressesProvider * @author Aave * @notice Defines the basic interface for a Pool Addresses Provider. - **/ + */ interface IPoolAddressesProvider { /** * @dev Emitted when the market identifier is updated. @@ -100,7 +100,7 @@ interface IPoolAddressesProvider { /** * @notice Returns the id of the Aave market to which this contract points to. * @return The market id - **/ + */ function getMarketId() external view returns (string memory); /** @@ -142,27 +142,27 @@ interface IPoolAddressesProvider { /** * @notice Returns the address of the Pool proxy. * @return The Pool proxy address - **/ + */ function getPool() external view returns (address); /** * @notice Updates the implementation of the Pool, or creates a proxy * setting the new `pool` implementation when the function is called for the first time. * @param newPoolImpl The new Pool implementation - **/ + */ function setPoolImpl(address newPoolImpl) external; /** * @notice Returns the address of the PoolConfigurator proxy. * @return The PoolConfigurator proxy address - **/ + */ function getPoolConfigurator() external view returns (address); /** * @notice Updates the implementation of the PoolConfigurator, or creates a proxy * setting the new `PoolConfigurator` implementation when the function is called for the first time. * @param newPoolConfiguratorImpl The new PoolConfigurator implementation - **/ + */ function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external; /** @@ -186,7 +186,7 @@ interface IPoolAddressesProvider { /** * @notice Updates the address of the ACL manager. * @param newAclManager The address of the new ACLManager - **/ + */ function setACLManager(address newAclManager) external; /** @@ -210,7 +210,7 @@ interface IPoolAddressesProvider { /** * @notice Updates the address of the price oracle sentinel. * @param newPriceOracleSentinel The address of the new PriceOracleSentinel - **/ + */ function setPriceOracleSentinel(address newPriceOracleSentinel) external; /** @@ -222,6 +222,6 @@ interface IPoolAddressesProvider { /** * @notice Updates the address of the data provider. * @param newDataProvider The address of the new DataProvider - **/ + */ function setPoolDataProvider(address newDataProvider) external; } diff --git a/contracts/interfaces/IPoolAddressesProviderRegistry.sol b/contracts/interfaces/IPoolAddressesProviderRegistry.sol index f3867d06b..e81df6791 100644 --- a/contracts/interfaces/IPoolAddressesProviderRegistry.sol +++ b/contracts/interfaces/IPoolAddressesProviderRegistry.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.0; * @title IPoolAddressesProviderRegistry * @author Aave * @notice Defines the basic interface for an Aave Pool Addresses Provider Registry. - **/ + */ interface IPoolAddressesProviderRegistry { /** * @dev Emitted when a new AddressesProvider is registered. @@ -24,7 +24,7 @@ interface IPoolAddressesProviderRegistry { /** * @notice Returns the list of registered addresses providers * @return The list of addresses providers - **/ + */ function getAddressesProvidersList() external view returns (address[] memory); /** @@ -50,12 +50,12 @@ interface IPoolAddressesProviderRegistry { * @dev The id must not be used by an already registered PoolAddressesProvider * @param provider The address of the new PoolAddressesProvider * @param id The id for the new PoolAddressesProvider, referring to the market it belongs to - **/ + */ function registerAddressesProvider(address provider, uint256 id) external; /** * @notice Removes an addresses provider from the list of registered addresses providers * @param provider The PoolAddressesProvider address - **/ + */ function unregisterAddressesProvider(address provider) external; } diff --git a/contracts/interfaces/IPoolConfigurator.sol b/contracts/interfaces/IPoolConfigurator.sol index b0a583e47..457ce66a9 100644 --- a/contracts/interfaces/IPoolConfigurator.sol +++ b/contracts/interfaces/IPoolConfigurator.sol @@ -7,7 +7,7 @@ import {ConfiguratorInputTypes} from '../protocol/libraries/types/ConfiguratorIn * @title IPoolConfigurator * @author Aave * @notice Defines the basic interface for a Pool configurator. - **/ + */ interface IPoolConfigurator { /** * @dev Emitted when a reserve is initialized. @@ -16,7 +16,7 @@ interface IPoolConfigurator { * @param stableDebtToken The address of the associated stable rate debt token * @param variableDebtToken The address of the associated variable rate debt token * @param interestRateStrategyAddress The address of the interest rate strategy for the reserve - **/ + */ event ReserveInitialized( address indexed asset, address indexed aToken, @@ -29,7 +29,7 @@ interface IPoolConfigurator { * @dev Emitted when borrowing is enabled or disabled on a reserve. * @param asset The address of the underlying asset of the reserve * @param enabled True if borrowing is enabled, false otherwise - **/ + */ event ReserveBorrowing(address indexed asset, bool enabled); /** @@ -45,7 +45,7 @@ interface IPoolConfigurator { * @param ltv The loan to value of the asset when used as collateral * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized * @param liquidationBonus The bonus liquidators receive to liquidate this asset - **/ + */ event CollateralConfigurationChanged( address indexed asset, uint256 ltv, @@ -57,34 +57,34 @@ interface IPoolConfigurator { * @dev Emitted when stable rate borrowing is enabled or disabled on a reserve * @param asset The address of the underlying asset of the reserve * @param enabled True if stable rate borrowing is enabled, false otherwise - **/ + */ event ReserveStableRateBorrowing(address indexed asset, bool enabled); /** * @dev Emitted when a reserve is activated or deactivated * @param asset The address of the underlying asset of the reserve * @param active True if reserve is active, false otherwise - **/ + */ event ReserveActive(address indexed asset, bool active); /** * @dev Emitted when a reserve is frozen or unfrozen * @param asset The address of the underlying asset of the reserve * @param frozen True if reserve is frozen, false otherwise - **/ + */ event ReserveFrozen(address indexed asset, bool frozen); /** * @dev Emitted when a reserve is paused or unpaused * @param asset The address of the underlying asset of the reserve * @param paused True if reserve is paused, false otherwise - **/ + */ event ReservePaused(address indexed asset, bool paused); /** * @dev Emitted when a reserve is dropped. * @param asset The address of the underlying asset of the reserve - **/ + */ event ReserveDropped(address indexed asset); /** @@ -92,7 +92,7 @@ interface IPoolConfigurator { * @param asset The address of the underlying asset of the reserve * @param oldReserveFactor The old reserve factor, expressed in bps * @param newReserveFactor The new reserve factor, expressed in bps - **/ + */ event ReserveFactorChanged( address indexed asset, uint256 oldReserveFactor, @@ -104,7 +104,7 @@ interface IPoolConfigurator { * @param asset The address of the underlying asset of the reserve * @param oldBorrowCap The old borrow cap * @param newBorrowCap The new borrow cap - **/ + */ event BorrowCapChanged(address indexed asset, uint256 oldBorrowCap, uint256 newBorrowCap); /** @@ -112,7 +112,7 @@ interface IPoolConfigurator { * @param asset The address of the underlying asset of the reserve * @param oldSupplyCap The old supply cap * @param newSupplyCap The new supply cap - **/ + */ event SupplyCapChanged(address indexed asset, uint256 oldSupplyCap, uint256 newSupplyCap); /** @@ -120,7 +120,7 @@ interface IPoolConfigurator { * @param asset The address of the underlying asset of the reserve * @param oldFee The old liquidation protocol fee, expressed in bps * @param newFee The new liquidation protocol fee, expressed in bps - **/ + */ event LiquidationProtocolFeeChanged(address indexed asset, uint256 oldFee, uint256 newFee); /** @@ -140,7 +140,7 @@ interface IPoolConfigurator { * @param asset The address of the underlying asset of the reserve * @param oldCategoryId The old eMode asset category * @param newCategoryId The new eMode asset category - **/ + */ event EModeAssetCategoryChanged(address indexed asset, uint8 oldCategoryId, uint8 newCategoryId); /** @@ -151,7 +151,7 @@ interface IPoolConfigurator { * @param liquidationBonus The liquidationBonus for the asset category in eMode * @param oracle The optional address of the price oracle specific for this category * @param label A human readable identifier for the category - **/ + */ event EModeCategoryAdded( uint8 indexed categoryId, uint256 ltv, @@ -166,7 +166,7 @@ interface IPoolConfigurator { * @param asset The address of the underlying asset of the reserve * @param oldStrategy The address of the old interest strategy contract * @param newStrategy The address of the new interest strategy contract - **/ + */ event ReserveInterestRateStrategyChanged( address indexed asset, address oldStrategy, @@ -178,7 +178,7 @@ interface IPoolConfigurator { * @param asset The address of the underlying asset of the reserve * @param proxy The aToken proxy address * @param implementation The new aToken implementation - **/ + */ event ATokenUpgraded( address indexed asset, address indexed proxy, @@ -190,7 +190,7 @@ interface IPoolConfigurator { * @param asset The address of the underlying asset of the reserve * @param proxy The stable debt token proxy address * @param implementation The new aToken implementation - **/ + */ event StableDebtTokenUpgraded( address indexed asset, address indexed proxy, @@ -202,7 +202,7 @@ interface IPoolConfigurator { * @param asset The address of the underlying asset of the reserve * @param proxy The variable debt token proxy address * @param implementation The new aToken implementation - **/ + */ event VariableDebtTokenUpgraded( address indexed asset, address indexed proxy, @@ -214,7 +214,7 @@ interface IPoolConfigurator { * @param asset The address of the underlying asset of the reserve * @param oldDebtCeiling The old debt ceiling * @param newDebtCeiling The new debt ceiling - **/ + */ event DebtCeilingChanged(address indexed asset, uint256 oldDebtCeiling, uint256 newDebtCeiling); /** @@ -222,7 +222,7 @@ interface IPoolConfigurator { * @param asset The address of the underlying asset of the reserve * @param oldState The old siloed borrowing state * @param newState The new siloed borrowing state - **/ + */ event SiloedBorrowingChanged(address indexed asset, bool oldState, bool newState); /** @@ -236,7 +236,7 @@ interface IPoolConfigurator { * @dev Emitted when the total premium on flashloans is updated. * @param oldFlashloanPremiumTotal The old premium, expressed in bps * @param newFlashloanPremiumTotal The new premium, expressed in bps - **/ + */ event FlashloanPremiumTotalUpdated( uint128 oldFlashloanPremiumTotal, uint128 newFlashloanPremiumTotal @@ -246,7 +246,7 @@ interface IPoolConfigurator { * @dev Emitted when the part of the premium that goes to protocol is updated. * @param oldFlashloanPremiumToProtocol The old premium, expressed in bps * @param newFlashloanPremiumToProtocol The new premium, expressed in bps - **/ + */ event FlashloanPremiumToProtocolUpdated( uint128 oldFlashloanPremiumToProtocol, uint128 newFlashloanPremiumToProtocol @@ -256,32 +256,32 @@ interface IPoolConfigurator { * @dev Emitted when the reserve is set as borrowable/non borrowable in isolation mode. * @param asset The address of the underlying asset of the reserve * @param borrowable True if the reserve is borrowable in isolation, false otherwise - **/ + */ event BorrowableInIsolationChanged(address asset, bool borrowable); /** * @notice Initializes multiple reserves. * @param input The array of initialization parameters - **/ + */ function initReserves(ConfiguratorInputTypes.InitReserveInput[] calldata input) external; /** * @dev Updates the aToken implementation for the reserve. * @param input The aToken update parameters - **/ + */ function updateAToken(ConfiguratorInputTypes.UpdateATokenInput calldata input) external; /** * @notice Updates the stable debt token implementation for the reserve. * @param input The stableDebtToken update parameters - **/ + */ function updateStableDebtToken(ConfiguratorInputTypes.UpdateDebtTokenInput calldata input) external; /** * @notice Updates the variable debt token implementation for the asset. * @param input The variableDebtToken update parameters - **/ + */ function updateVariableDebtToken(ConfiguratorInputTypes.UpdateDebtTokenInput calldata input) external; @@ -290,7 +290,7 @@ interface IPoolConfigurator { * @dev Can only be disabled (set to false) if stable borrowing is disabled * @param asset The address of the underlying asset of the reserve * @param enabled True if borrowing needs to be enabled, false otherwise - **/ + */ function setReserveBorrowing(address asset, bool enabled) external; /** @@ -301,7 +301,7 @@ interface IPoolConfigurator { * @param ltv The loan to value of the asset when used as collateral * @param liquidationThreshold The threshold at which loans using this asset as collateral will be considered undercollateralized * @param liquidationBonus The bonus liquidators receive to liquidate this asset - **/ + */ function configureReserveAsCollateral( address asset, uint256 ltv, @@ -314,7 +314,7 @@ interface IPoolConfigurator { * @dev Can only be enabled (set to true) if borrowing is enabled * @param asset The address of the underlying asset of the reserve * @param enabled True if stable rate borrowing needs to be enabled, false otherwise - **/ + */ function setReserveStableRateBorrowing(address asset, bool enabled) external; /** @@ -328,7 +328,7 @@ interface IPoolConfigurator { * @notice Activate or deactivate a reserve * @param asset The address of the underlying asset of the reserve * @param active True if the reserve needs to be active, false otherwise - **/ + */ function setReserveActive(address asset, bool active) external; /** @@ -336,7 +336,7 @@ interface IPoolConfigurator { * or rate swap but allows repayments, liquidations, rate rebalances and withdrawals. * @param asset The address of the underlying asset of the reserve * @param freeze True if the reserve needs to be frozen, false otherwise - **/ + */ function setReserveFreeze(address asset, bool freeze) external; /** @@ -347,7 +347,7 @@ interface IPoolConfigurator { * consistency in the debt ceiling calculations * @param asset The address of the underlying asset of the reserve * @param borrowable True if the asset should be borrowable in isolation, false otherwise - **/ + */ function setBorrowableInIsolation(address asset, bool borrowable) external; /** @@ -355,21 +355,21 @@ interface IPoolConfigurator { * swap interest rate, liquidate, atoken transfers). * @param asset The address of the underlying asset of the reserve * @param paused True if pausing the reserve, false if unpausing - **/ + */ function setReservePause(address asset, bool paused) external; /** * @notice Updates the reserve factor of a reserve. * @param asset The address of the underlying asset of the reserve * @param newReserveFactor The new reserve factor of the reserve - **/ + */ function setReserveFactor(address asset, uint256 newReserveFactor) external; /** * @notice Sets the interest rate strategy of a reserve. * @param asset The address of the underlying asset of the reserve * @param newRateStrategyAddress The address of the new interest strategy contract - **/ + */ function setReserveInterestRateStrategyAddress(address asset, address newRateStrategyAddress) external; @@ -377,42 +377,42 @@ interface IPoolConfigurator { * @notice Pauses or unpauses all the protocol reserves. In the paused state all the protocol interactions * are suspended. * @param paused True if protocol needs to be paused, false otherwise - **/ + */ function setPoolPause(bool paused) external; /** * @notice Updates the borrow cap of a reserve. * @param asset The address of the underlying asset of the reserve * @param newBorrowCap The new borrow cap of the reserve - **/ + */ function setBorrowCap(address asset, uint256 newBorrowCap) external; /** * @notice Updates the supply cap of a reserve. * @param asset The address of the underlying asset of the reserve * @param newSupplyCap The new supply cap of the reserve - **/ + */ function setSupplyCap(address asset, uint256 newSupplyCap) external; /** * @notice Updates the liquidation protocol fee of reserve. * @param asset The address of the underlying asset of the reserve * @param newFee The new liquidation protocol fee of the reserve, expressed in bps - **/ + */ function setLiquidationProtocolFee(address asset, uint256 newFee) external; /** * @notice Updates the unbacked mint cap of reserve. * @param asset The address of the underlying asset of the reserve * @param newUnbackedMintCap The new unbacked mint cap of the reserve - **/ + */ function setUnbackedMintCap(address asset, uint256 newUnbackedMintCap) external; /** * @notice Assign an efficiency mode (eMode) category to asset. * @param asset The address of the underlying asset of the reserve * @param newCategoryId The new category id of the asset - **/ + */ function setAssetEModeCategory(address asset, uint8 newCategoryId) external; /** @@ -427,7 +427,7 @@ interface IPoolConfigurator { * @param liquidationBonus The liquidation bonus associated with the category * @param oracle The oracle associated with the category * @param label A label identifying the category - **/ + */ function setEModeCategory( uint8 categoryId, uint16 ltv, @@ -440,7 +440,7 @@ interface IPoolConfigurator { /** * @notice Drops a reserve entirely. * @param asset The address of the reserve to drop - **/ + */ function dropReserve(address asset) external; /** diff --git a/contracts/interfaces/IPoolDataProvider.sol b/contracts/interfaces/IPoolDataProvider.sol index f0683fda9..e299d3f8b 100644 --- a/contracts/interfaces/IPoolDataProvider.sol +++ b/contracts/interfaces/IPoolDataProvider.sol @@ -76,7 +76,7 @@ interface IPoolDataProvider { * @param asset The address of the underlying asset of the reserve * @return borrowCap The borrow cap of the reserve * @return supplyCap The supply cap of the reserve - **/ + */ function getReserveCaps(address asset) external view diff --git a/contracts/interfaces/IPriceOracle.sol b/contracts/interfaces/IPriceOracle.sol index b86cc1d17..3a6db80ac 100644 --- a/contracts/interfaces/IPriceOracle.sol +++ b/contracts/interfaces/IPriceOracle.sol @@ -5,19 +5,19 @@ pragma solidity ^0.8.0; * @title IPriceOracle * @author Aave * @notice Defines the basic interface for a Price oracle. - **/ + */ interface IPriceOracle { /** * @notice Returns the asset price in the base currency * @param asset The address of the asset * @return The price of the asset - **/ + */ function getAssetPrice(address asset) external view returns (uint256); /** * @notice Set the price of the asset * @param asset The address of the asset * @param price The price of the asset - **/ + */ function setAssetPrice(address asset, uint256 price) external; } diff --git a/contracts/interfaces/IPriceOracleGetter.sol b/contracts/interfaces/IPriceOracleGetter.sol index 40e59954f..0e0df3e73 100644 --- a/contracts/interfaces/IPriceOracleGetter.sol +++ b/contracts/interfaces/IPriceOracleGetter.sol @@ -5,26 +5,26 @@ pragma solidity ^0.8.0; * @title IPriceOracleGetter * @author Aave * @notice Interface for the Aave price oracle. - **/ + */ interface IPriceOracleGetter { /** * @notice Returns the base currency address * @dev Address 0x0 is reserved for USD as base currency. * @return Returns the base currency address. - **/ + */ function BASE_CURRENCY() external view returns (address); /** * @notice Returns the base currency unit * @dev 1 ether for ETH, 1e8 for USD. * @return Returns the base currency unit. - **/ + */ function BASE_CURRENCY_UNIT() external view returns (uint256); /** * @notice Returns the asset price in the base currency * @param asset The address of the asset * @return The price of the asset - **/ + */ function getAssetPrice(address asset) external view returns (uint256); } diff --git a/contracts/interfaces/IScaledBalanceToken.sol b/contracts/interfaces/IScaledBalanceToken.sol index 8f215c692..fe311fbb1 100644 --- a/contracts/interfaces/IScaledBalanceToken.sol +++ b/contracts/interfaces/IScaledBalanceToken.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.0; * @title IScaledBalanceToken * @author Aave * @notice Defines the basic interface for a scaled-balance token. - **/ + */ interface IScaledBalanceToken { /** * @dev Emitted after the mint action @@ -14,7 +14,7 @@ interface IScaledBalanceToken { * @param value The scaled-up amount being minted (based on user entered amount and balance increase from interest) * @param balanceIncrease The increase in scaled-up balance since the last action of 'onBehalfOf' * @param index The next liquidity index of the reserve - **/ + */ event Mint( address indexed caller, address indexed onBehalfOf, @@ -31,7 +31,7 @@ interface IScaledBalanceToken { * @param value The scaled-up amount being burned (user entered amount - balance increase from interest) * @param balanceIncrease The increase in scaled-up balance since the last action of 'from' * @param index The next liquidity index of the reserve - **/ + */ event Burn( address indexed from, address indexed target, @@ -46,7 +46,7 @@ interface IScaledBalanceToken { * at the moment of the update * @param user The user whose balance is calculated * @return The scaled balance of the user - **/ + */ function scaledBalanceOf(address user) external view returns (uint256); /** @@ -54,19 +54,19 @@ interface IScaledBalanceToken { * @param user The address of the user * @return The scaled balance of the user * @return The scaled total supply - **/ + */ function getScaledUserBalanceAndSupply(address user) external view returns (uint256, uint256); /** * @notice Returns the scaled total supply of the scaled balance token. Represents sum(debt/index) * @return The scaled total supply - **/ + */ function scaledTotalSupply() external view returns (uint256); /** * @notice Returns last index interest was accrued to the user's balance * @param user The address of the user * @return The last index interest was accrued to the user's balance, expressed in ray - **/ + */ function getPreviousIndex(address user) external view returns (uint256); } diff --git a/contracts/interfaces/IStableDebtToken.sol b/contracts/interfaces/IStableDebtToken.sol index c9d33a80d..77b986f2a 100644 --- a/contracts/interfaces/IStableDebtToken.sol +++ b/contracts/interfaces/IStableDebtToken.sol @@ -8,7 +8,7 @@ import {IInitializableDebtToken} from './IInitializableDebtToken.sol'; * @author Aave * @notice Defines the interface for the stable debt token * @dev It does not inherit from IERC20 to save in code size - **/ + */ interface IStableDebtToken is IInitializableDebtToken { /** * @dev Emitted when new stable debt is minted @@ -20,7 +20,7 @@ interface IStableDebtToken is IInitializableDebtToken { * @param newRate The rate of the debt after the minting * @param avgStableRate The next average stable rate after the minting * @param newTotalSupply The next total supply of the stable debt token after the action - **/ + */ event Mint( address indexed user, address indexed onBehalfOf, @@ -40,7 +40,7 @@ interface IStableDebtToken is IInitializableDebtToken { * @param balanceIncrease The increase in balance since the last action of 'from' * @param avgStableRate The next average stable rate after the burning * @param newTotalSupply The next total supply of the stable debt token after the action - **/ + */ event Burn( address indexed from, uint256 amount, @@ -62,7 +62,7 @@ interface IStableDebtToken is IInitializableDebtToken { * @return True if it is the first borrow, false otherwise * @return The total stable debt * @return The average stable borrow rate - **/ + */ function mint( address user, address onBehalfOf, @@ -86,27 +86,27 @@ interface IStableDebtToken is IInitializableDebtToken { * @param amount The amount of debt tokens getting burned * @return The total stable debt * @return The average stable borrow rate - **/ + */ function burn(address from, uint256 amount) external returns (uint256, uint256); /** * @notice Returns the average rate of all the stable rate loans. * @return The average stable rate - **/ + */ function getAverageStableRate() external view returns (uint256); /** * @notice Returns the stable rate of the user debt * @param user The address of the user * @return The stable rate of the user - **/ + */ function getUserStableRate(address user) external view returns (uint256); /** * @notice Returns the timestamp of the last update of the user * @param user The address of the user * @return The timestamp - **/ + */ function getUserLastUpdated(address user) external view returns (uint40); /** @@ -115,7 +115,7 @@ interface IStableDebtToken is IInitializableDebtToken { * @return The total supply * @return The average stable rate * @return The timestamp of the last update - **/ + */ function getSupplyData() external view @@ -129,25 +129,25 @@ interface IStableDebtToken is IInitializableDebtToken { /** * @notice Returns the timestamp of the last update of the total supply * @return The timestamp - **/ + */ function getTotalSupplyLastUpdated() external view returns (uint40); /** * @notice Returns the total supply and the average stable rate * @return The total supply * @return The average rate - **/ + */ function getTotalSupplyAndAvgRate() external view returns (uint256, uint256); /** * @notice Returns the principal debt balance of the user * @return The debt balance of the user since the last burn/mint action - **/ + */ function principalBalanceOf(address user) external view returns (uint256); /** * @notice Returns the address of the underlying asset of this stableDebtToken (E.g. WETH for stableDebtWETH) * @return The address of the underlying asset - **/ + */ function UNDERLYING_ASSET_ADDRESS() external view returns (address); } diff --git a/contracts/interfaces/IVariableDebtToken.sol b/contracts/interfaces/IVariableDebtToken.sol index cc61f6c68..5c4fc69ec 100644 --- a/contracts/interfaces/IVariableDebtToken.sol +++ b/contracts/interfaces/IVariableDebtToken.sol @@ -8,7 +8,7 @@ import {IInitializableDebtToken} from './IInitializableDebtToken.sol'; * @title IVariableDebtToken * @author Aave * @notice Defines the basic interface for a variable debt token. - **/ + */ interface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken { /** * @notice Mints debt token to the `onBehalfOf` address @@ -19,7 +19,7 @@ interface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken { * @param index The variable debt index of the reserve * @return True if the previous balance of the user is 0, false otherwise * @return The scaled total debt of the reserve - **/ + */ function mint( address user, address onBehalfOf, @@ -35,7 +35,7 @@ interface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken { * @param amount The amount getting burned * @param index The variable debt index of the reserve * @return The scaled total debt of the reserve - **/ + */ function burn( address from, uint256 amount, @@ -45,6 +45,6 @@ interface IVariableDebtToken is IScaledBalanceToken, IInitializableDebtToken { /** * @notice Returns the address of the underlying asset of this debtToken (E.g. WETH for variableDebtWETH) * @return The address of the underlying asset - **/ + */ function UNDERLYING_ASSET_ADDRESS() external view returns (address); } diff --git a/contracts/misc/AaveOracle.sol b/contracts/misc/AaveOracle.sol index 99afe286b..4d728c9cd 100644 --- a/contracts/misc/AaveOracle.sol +++ b/contracts/misc/AaveOracle.sol @@ -28,7 +28,7 @@ contract AaveOracle is IAaveOracle { /** * @dev Only asset listing or pool admin can call functions marked by this modifier. - **/ + */ modifier onlyAssetListingOrPoolAdmins() { _onlyAssetListingOrPoolAdmins(); _; diff --git a/contracts/mocks/tests/MockReserveInterestRateStrategy.sol b/contracts/mocks/tests/MockReserveInterestRateStrategy.sol index eaa0830d5..66dd40cca 100644 --- a/contracts/mocks/tests/MockReserveInterestRateStrategy.sol +++ b/contracts/mocks/tests/MockReserveInterestRateStrategy.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity 0.8.10; +import {IDefaultInterestRateStrategy} from '../../interfaces/IDefaultInterestRateStrategy.sol'; import {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.sol'; import {WadRayMath} from '../../protocol/libraries/math/WadRayMath.sol'; import {DataTypes} from '../../protocol/libraries/types/DataTypes.sol'; -import {IDefaultInterestRateStrategy} from '../../interfaces/IDefaultInterestRateStrategy.sol'; contract MockReserveInterestRateStrategy is IDefaultInterestRateStrategy { uint256 public immutable OPTIMAL_USAGE_RATIO; diff --git a/contracts/mocks/upgradeability/MockInitializableImplementation.sol b/contracts/mocks/upgradeability/MockInitializableImplementation.sol index e70eab116..e165d1242 100644 --- a/contracts/mocks/upgradeability/MockInitializableImplementation.sol +++ b/contracts/mocks/upgradeability/MockInitializableImplementation.sol @@ -13,7 +13,7 @@ contract MockInitializableImple is VersionedInitializable { /** * @dev returns the revision number of the contract * Needs to be defined in the inherited class as a constant. - **/ + */ function getRevision() internal pure override returns (uint256) { return REVISION; } @@ -47,7 +47,7 @@ contract MockInitializableImpleV2 is VersionedInitializable { /** * @dev returns the revision number of the contract * Needs to be defined in the inherited class as a constant. - **/ + */ function getRevision() internal pure override returns (uint256) { return REVISION; } @@ -79,7 +79,7 @@ contract MockInitializableFromConstructorImple is VersionedInitializable { /** * @dev returns the revision number of the contract * Needs to be defined in the inherited class as a constant. - **/ + */ function getRevision() internal pure override returns (uint256) { return REVISION; } @@ -101,7 +101,7 @@ contract MockReentrantInitializableImple is VersionedInitializable { /** * @dev returns the revision number of the contract * Needs to be defined in the inherited class as a constant. - **/ + */ function getRevision() internal pure override returns (uint256) { return REVISION; } diff --git a/contracts/protocol/configuration/PoolAddressesProvider.sol b/contracts/protocol/configuration/PoolAddressesProvider.sol index 073e92f35..b4255fac5 100644 --- a/contracts/protocol/configuration/PoolAddressesProvider.sol +++ b/contracts/protocol/configuration/PoolAddressesProvider.sol @@ -11,7 +11,7 @@ import {InitializableImmutableAdminUpgradeabilityProxy} from '../libraries/aave- * @notice Main registry of addresses part of or connected to the protocol, including permissioned roles * @dev Acts as factory of proxies and admin of those, so with right to change its implementations * @dev Owned by the Aave Governance - **/ + */ contract PoolAddressesProvider is Ownable, IPoolAddressesProvider { // Identifier of the Aave Market string private _marketId; @@ -164,7 +164,7 @@ contract PoolAddressesProvider is Ownable, IPoolAddressesProvider { * calls the initialize() function via upgradeToAndCall() in the proxy * @param id The id of the proxy to be updated * @param newAddress The address of the new implementation - **/ + */ function _updateImpl(bytes32 id, address newAddress) internal { address proxyAddress = _addresses[id]; InitializableImmutableAdminUpgradeabilityProxy proxy; @@ -184,7 +184,7 @@ contract PoolAddressesProvider is Ownable, IPoolAddressesProvider { /** * @notice Updates the identifier of the Aave market. * @param newMarketId The new id of the market - **/ + */ function _setMarketId(string memory newMarketId) internal { string memory oldMarketId = _marketId; _marketId = newMarketId; diff --git a/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol b/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol index f5cb3d373..5f724eb8e 100644 --- a/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol +++ b/contracts/protocol/configuration/PoolAddressesProviderRegistry.sol @@ -11,7 +11,7 @@ import {IPoolAddressesProviderRegistry} from '../../interfaces/IPoolAddressesPro * @notice Main registry of PoolAddressesProvider of Aave markets. * @dev Used for indexing purposes of Aave protocol's markets. The id assigned to a PoolAddressesProvider refers to the * market it is connected with, for example with `1` for the Aave main market and `2` for the next created. - **/ + */ contract PoolAddressesProviderRegistry is Ownable, IPoolAddressesProviderRegistry { // Map of address provider ids (addressesProvider => id) mapping(address => uint256) private _addressesProviderToId; diff --git a/contracts/protocol/configuration/PriceOracleSentinel.sol b/contracts/protocol/configuration/PriceOracleSentinel.sol index 81b22d8db..280c76e66 100644 --- a/contracts/protocol/configuration/PriceOracleSentinel.sol +++ b/contracts/protocol/configuration/PriceOracleSentinel.sol @@ -17,7 +17,7 @@ import {IACLManager} from '../../interfaces/IACLManager.sol'; contract PriceOracleSentinel is IPriceOracleSentinel { /** * @dev Only pool admin can call functions marked by this modifier. - **/ + */ modifier onlyPoolAdmin() { IACLManager aclManager = IACLManager(ADDRESSES_PROVIDER.getACLManager()); require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN); @@ -26,7 +26,7 @@ contract PriceOracleSentinel is IPriceOracleSentinel { /** * @dev Only risk or pool admin can call functions marked by this modifier. - **/ + */ modifier onlyRiskOrPoolAdmins() { IACLManager aclManager = IACLManager(ADDRESSES_PROVIDER.getACLManager()); require( diff --git a/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol b/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol index 570c319e8..d24312bf1 100644 --- a/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol +++ b/contracts/protocol/libraries/aave-upgradeability/VersionedInitializable.sol @@ -51,13 +51,13 @@ abstract contract VersionedInitializable { * @notice Returns the revision number of the contract * @dev Needs to be defined in the inherited class as a constant. * @return The revision number - **/ + */ function getRevision() internal pure virtual returns (uint256); /** * @notice Returns true if and only if the function is running in the constructor * @return True if the function is running in the constructor - **/ + */ function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not diff --git a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol index a2aeba1ff..6ef2d4d45 100644 --- a/contracts/protocol/libraries/configuration/ReserveConfiguration.sol +++ b/contracts/protocol/libraries/configuration/ReserveConfiguration.sol @@ -69,7 +69,7 @@ library ReserveConfiguration { * @notice Sets the Loan to Value of the reserve * @param self The reserve configuration * @param ltv The new ltv - **/ + */ function setLtv(DataTypes.ReserveConfigurationMap memory self, uint256 ltv) internal pure { require(ltv <= MAX_VALID_LTV, Errors.INVALID_LTV); @@ -80,7 +80,7 @@ library ReserveConfiguration { * @notice Gets the Loan to Value of the reserve * @param self The reserve configuration * @return The loan to value - **/ + */ function getLtv(DataTypes.ReserveConfigurationMap memory self) internal pure returns (uint256) { return self.data & ~LTV_MASK; } @@ -89,7 +89,7 @@ library ReserveConfiguration { * @notice Sets the liquidation threshold of the reserve * @param self The reserve configuration * @param threshold The new liquidation threshold - **/ + */ function setLiquidationThreshold(DataTypes.ReserveConfigurationMap memory self, uint256 threshold) internal pure @@ -105,7 +105,7 @@ library ReserveConfiguration { * @notice Gets the liquidation threshold of the reserve * @param self The reserve configuration * @return The liquidation threshold - **/ + */ function getLiquidationThreshold(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -118,7 +118,7 @@ library ReserveConfiguration { * @notice Sets the liquidation bonus of the reserve * @param self The reserve configuration * @param bonus The new liquidation bonus - **/ + */ function setLiquidationBonus(DataTypes.ReserveConfigurationMap memory self, uint256 bonus) internal pure @@ -134,7 +134,7 @@ library ReserveConfiguration { * @notice Gets the liquidation bonus of the reserve * @param self The reserve configuration * @return The liquidation bonus - **/ + */ function getLiquidationBonus(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -147,7 +147,7 @@ library ReserveConfiguration { * @notice Sets the decimals of the underlying asset of the reserve * @param self The reserve configuration * @param decimals The decimals - **/ + */ function setDecimals(DataTypes.ReserveConfigurationMap memory self, uint256 decimals) internal pure @@ -161,7 +161,7 @@ library ReserveConfiguration { * @notice Gets the decimals of the underlying asset of the reserve * @param self The reserve configuration * @return The decimals of the asset - **/ + */ function getDecimals(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -174,7 +174,7 @@ library ReserveConfiguration { * @notice Sets the active state of the reserve * @param self The reserve configuration * @param active The active state - **/ + */ function setActive(DataTypes.ReserveConfigurationMap memory self, bool active) internal pure { self.data = (self.data & ACTIVE_MASK) | @@ -185,7 +185,7 @@ library ReserveConfiguration { * @notice Gets the active state of the reserve * @param self The reserve configuration * @return The active state - **/ + */ function getActive(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) { return (self.data & ~ACTIVE_MASK) != 0; } @@ -194,7 +194,7 @@ library ReserveConfiguration { * @notice Sets the frozen state of the reserve * @param self The reserve configuration * @param frozen The frozen state - **/ + */ function setFrozen(DataTypes.ReserveConfigurationMap memory self, bool frozen) internal pure { self.data = (self.data & FROZEN_MASK) | @@ -205,7 +205,7 @@ library ReserveConfiguration { * @notice Gets the frozen state of the reserve * @param self The reserve configuration * @return The frozen state - **/ + */ function getFrozen(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) { return (self.data & ~FROZEN_MASK) != 0; } @@ -214,7 +214,7 @@ library ReserveConfiguration { * @notice Sets the paused state of the reserve * @param self The reserve configuration * @param paused The paused state - **/ + */ function setPaused(DataTypes.ReserveConfigurationMap memory self, bool paused) internal pure { self.data = (self.data & PAUSED_MASK) | @@ -225,7 +225,7 @@ library ReserveConfiguration { * @notice Gets the paused state of the reserve * @param self The reserve configuration * @return The paused state - **/ + */ function getPaused(DataTypes.ReserveConfigurationMap memory self) internal pure returns (bool) { return (self.data & ~PAUSED_MASK) != 0; } @@ -238,7 +238,7 @@ library ReserveConfiguration { * consistency in the debt ceiling calculations. * @param self The reserve configuration * @param borrowable True if the asset is borrowable - **/ + */ function setBorrowableInIsolation(DataTypes.ReserveConfigurationMap memory self, bool borrowable) internal pure @@ -256,7 +256,7 @@ library ReserveConfiguration { * consistency in the debt ceiling calculations. * @param self The reserve configuration * @return The borrowable in isolation flag - **/ + */ function getBorrowableInIsolation(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -270,7 +270,7 @@ library ReserveConfiguration { * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset. * @param self The reserve configuration * @param siloed True if the asset is siloed - **/ + */ function setSiloedBorrowing(DataTypes.ReserveConfigurationMap memory self, bool siloed) internal pure @@ -285,7 +285,7 @@ library ReserveConfiguration { * @dev When this flag is set to true, users borrowing this asset will not be allowed to borrow any other asset. * @param self The reserve configuration * @return The siloed borrowing flag - **/ + */ function getSiloedBorrowing(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -298,7 +298,7 @@ library ReserveConfiguration { * @notice Enables or disables borrowing on the reserve * @param self The reserve configuration * @param enabled True if the borrowing needs to be enabled, false otherwise - **/ + */ function setBorrowingEnabled(DataTypes.ReserveConfigurationMap memory self, bool enabled) internal pure @@ -312,7 +312,7 @@ library ReserveConfiguration { * @notice Gets the borrowing state of the reserve * @param self The reserve configuration * @return The borrowing state - **/ + */ function getBorrowingEnabled(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -325,7 +325,7 @@ library ReserveConfiguration { * @notice Enables or disables stable rate borrowing on the reserve * @param self The reserve configuration * @param enabled True if the stable rate borrowing needs to be enabled, false otherwise - **/ + */ function setStableRateBorrowingEnabled( DataTypes.ReserveConfigurationMap memory self, bool enabled @@ -339,7 +339,7 @@ library ReserveConfiguration { * @notice Gets the stable rate borrowing state of the reserve * @param self The reserve configuration * @return The stable rate borrowing state - **/ + */ function getStableRateBorrowingEnabled(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -352,7 +352,7 @@ library ReserveConfiguration { * @notice Sets the reserve factor of the reserve * @param self The reserve configuration * @param reserveFactor The reserve factor - **/ + */ function setReserveFactor(DataTypes.ReserveConfigurationMap memory self, uint256 reserveFactor) internal pure @@ -368,7 +368,7 @@ library ReserveConfiguration { * @notice Gets the reserve factor of the reserve * @param self The reserve configuration * @return The reserve factor - **/ + */ function getReserveFactor(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -381,7 +381,7 @@ library ReserveConfiguration { * @notice Sets the borrow cap of the reserve * @param self The reserve configuration * @param borrowCap The borrow cap - **/ + */ function setBorrowCap(DataTypes.ReserveConfigurationMap memory self, uint256 borrowCap) internal pure @@ -395,7 +395,7 @@ library ReserveConfiguration { * @notice Gets the borrow cap of the reserve * @param self The reserve configuration * @return The borrow cap - **/ + */ function getBorrowCap(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -408,7 +408,7 @@ library ReserveConfiguration { * @notice Sets the supply cap of the reserve * @param self The reserve configuration * @param supplyCap The supply cap - **/ + */ function setSupplyCap(DataTypes.ReserveConfigurationMap memory self, uint256 supplyCap) internal pure @@ -422,7 +422,7 @@ library ReserveConfiguration { * @notice Gets the supply cap of the reserve * @param self The reserve configuration * @return The supply cap - **/ + */ function getSupplyCap(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -435,7 +435,7 @@ library ReserveConfiguration { * @notice Sets the debt ceiling in isolation mode for the asset * @param self The reserve configuration * @param ceiling The maximum debt ceiling for the asset - **/ + */ function setDebtCeiling(DataTypes.ReserveConfigurationMap memory self, uint256 ceiling) internal pure @@ -449,7 +449,7 @@ library ReserveConfiguration { * @notice Gets the debt ceiling for the asset if the asset is in isolation mode * @param self The reserve configuration * @return The debt ceiling (0 = isolation mode disabled) - **/ + */ function getDebtCeiling(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -462,7 +462,7 @@ library ReserveConfiguration { * @notice Sets the liquidation protocol fee of the reserve * @param self The reserve configuration * @param liquidationProtocolFee The liquidation protocol fee - **/ + */ function setLiquidationProtocolFee( DataTypes.ReserveConfigurationMap memory self, uint256 liquidationProtocolFee @@ -481,7 +481,7 @@ library ReserveConfiguration { * @dev Gets the liquidation protocol fee * @param self The reserve configuration * @return The liquidation protocol fee - **/ + */ function getLiquidationProtocolFee(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -495,7 +495,7 @@ library ReserveConfiguration { * @notice Sets the unbacked mint cap of the reserve * @param self The reserve configuration * @param unbackedMintCap The unbacked mint cap - **/ + */ function setUnbackedMintCap( DataTypes.ReserveConfigurationMap memory self, uint256 unbackedMintCap @@ -511,7 +511,7 @@ library ReserveConfiguration { * @dev Gets the unbacked mint cap of the reserve * @param self The reserve configuration * @return The unbacked mint cap - **/ + */ function getUnbackedMintCap(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -524,7 +524,7 @@ library ReserveConfiguration { * @notice Sets the eMode asset category * @param self The reserve configuration * @param category The asset category when the user selects the eMode - **/ + */ function setEModeCategory(DataTypes.ReserveConfigurationMap memory self, uint256 category) internal pure @@ -538,7 +538,7 @@ library ReserveConfiguration { * @dev Gets the eMode asset category * @param self The reserve configuration * @return The eMode category for the asset - **/ + */ function getEModeCategory(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -582,7 +582,7 @@ library ReserveConfiguration { * @return The state flag representing borrowing enabled * @return The state flag representing stableRateBorrowing enabled * @return The state flag representing paused - **/ + */ function getFlags(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -614,7 +614,7 @@ library ReserveConfiguration { * @return The state param representing reserve decimals * @return The state param representing reserve factor * @return The state param representing eMode category - **/ + */ function getParams(DataTypes.ReserveConfigurationMap memory self) internal pure @@ -644,7 +644,7 @@ library ReserveConfiguration { * @param self The reserve configuration * @return The state param representing borrow cap * @return The state param representing supply cap. - **/ + */ function getCaps(DataTypes.ReserveConfigurationMap memory self) internal pure diff --git a/contracts/protocol/libraries/configuration/UserConfiguration.sol b/contracts/protocol/libraries/configuration/UserConfiguration.sol index 34ef2b506..60d7dd3e1 100644 --- a/contracts/protocol/libraries/configuration/UserConfiguration.sol +++ b/contracts/protocol/libraries/configuration/UserConfiguration.sol @@ -23,7 +23,7 @@ library UserConfiguration { * @param self The configuration object * @param reserveIndex The index of the reserve in the bitmap * @param borrowing True if the user is borrowing the reserve, false otherwise - **/ + */ function setBorrowing( DataTypes.UserConfigurationMap storage self, uint256 reserveIndex, @@ -45,7 +45,7 @@ library UserConfiguration { * @param self The configuration object * @param reserveIndex The index of the reserve in the bitmap * @param usingAsCollateral True if the user is using the reserve as collateral, false otherwise - **/ + */ function setUsingAsCollateral( DataTypes.UserConfigurationMap storage self, uint256 reserveIndex, @@ -67,7 +67,7 @@ library UserConfiguration { * @param self The configuration object * @param reserveIndex The index of the reserve in the bitmap * @return True if the user has been using a reserve for borrowing or as collateral, false otherwise - **/ + */ function isUsingAsCollateralOrBorrowing( DataTypes.UserConfigurationMap memory self, uint256 reserveIndex @@ -83,7 +83,7 @@ library UserConfiguration { * @param self The configuration object * @param reserveIndex The index of the reserve in the bitmap * @return True if the user has been using a reserve for borrowing, false otherwise - **/ + */ function isBorrowing(DataTypes.UserConfigurationMap memory self, uint256 reserveIndex) internal pure @@ -100,7 +100,7 @@ library UserConfiguration { * @param self The configuration object * @param reserveIndex The index of the reserve in the bitmap * @return True if the user has been using a reserve as collateral, false otherwise - **/ + */ function isUsingAsCollateral(DataTypes.UserConfigurationMap memory self, uint256 reserveIndex) internal pure @@ -117,7 +117,7 @@ library UserConfiguration { * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0 * @param self The configuration object * @return True if the user has been supplying as collateral one reserve, false otherwise - **/ + */ function isUsingAsCollateralOne(DataTypes.UserConfigurationMap memory self) internal pure @@ -131,7 +131,7 @@ library UserConfiguration { * @notice Checks if a user has been supplying any reserve as collateral * @param self The configuration object * @return True if the user has been supplying as collateral any reserve, false otherwise - **/ + */ function isUsingAsCollateralAny(DataTypes.UserConfigurationMap memory self) internal pure @@ -145,7 +145,7 @@ library UserConfiguration { * @dev this uses a simple trick - if a number is a power of two (only one bit set) then n & (n - 1) == 0 * @param self The configuration object * @return True if the user has been supplying as collateral one reserve, false otherwise - **/ + */ function isBorrowingOne(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) { uint256 borrowingData = self.data & BORROWING_MASK; return borrowingData != 0 && (borrowingData & (borrowingData - 1) == 0); @@ -155,7 +155,7 @@ library UserConfiguration { * @notice Checks if a user has been borrowing from any reserve * @param self The configuration object * @return True if the user has been borrowing any reserve, false otherwise - **/ + */ function isBorrowingAny(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) { return self.data & BORROWING_MASK != 0; } @@ -164,7 +164,7 @@ library UserConfiguration { * @notice Checks if a user has not been using any reserve for borrowing or supply * @param self The configuration object * @return True if the user has not been borrowing or supplying any reserve, false otherwise - **/ + */ function isEmpty(DataTypes.UserConfigurationMap memory self) internal pure returns (bool) { return self.data == 0; } diff --git a/contracts/protocol/libraries/helpers/Helpers.sol b/contracts/protocol/libraries/helpers/Helpers.sol index 06a37f611..66cbd9968 100644 --- a/contracts/protocol/libraries/helpers/Helpers.sol +++ b/contracts/protocol/libraries/helpers/Helpers.sol @@ -15,7 +15,7 @@ library Helpers { * @param reserveCache The reserve cache data object * @return The stable debt balance * @return The variable debt balance - **/ + */ function getUserCurrentDebt(address user, DataTypes.ReserveCache memory reserveCache) internal view diff --git a/contracts/protocol/libraries/logic/BridgeLogic.sol b/contracts/protocol/libraries/logic/BridgeLogic.sol index a6ec0da2a..6aa63badb 100644 --- a/contracts/protocol/libraries/logic/BridgeLogic.sol +++ b/contracts/protocol/libraries/logic/BridgeLogic.sol @@ -48,7 +48,7 @@ library BridgeLogic { * @param onBehalfOf The address that will receive the aTokens * @param referralCode Code used to register the integrator originating the operation, for potential rewards. * 0 if the action is executed directly by the user, without any middle-man - **/ + */ function executeMintUnbacked( mapping(address => DataTypes.ReserveData) storage reservesData, mapping(uint256 => address) storage reservesList, @@ -108,7 +108,7 @@ library BridgeLogic { * @param fee The amount paid in fees * @param protocolFeeBps The fraction of fees in basis points paid to the protocol * @return The backed amount - **/ + */ function executeBackUnbacked( DataTypes.ReserveData storage reserve, address asset, diff --git a/contracts/protocol/libraries/logic/EModeLogic.sol b/contracts/protocol/libraries/logic/EModeLogic.sol index e329828b4..38505aa90 100644 --- a/contracts/protocol/libraries/logic/EModeLogic.sol +++ b/contracts/protocol/libraries/logic/EModeLogic.sol @@ -82,7 +82,7 @@ library EModeLogic { * @return The eMode ltv * @return The eMode liquidation threshold * @return The eMode asset price - **/ + */ function getEModeConfiguration( DataTypes.EModeCategory storage category, IPriceOracleGetter oracle @@ -110,7 +110,7 @@ library EModeLogic { * @param eModeUserCategory The user eMode category * @param eModeAssetCategory The asset eMode category * @return True if eMode is active and the asset belongs to the eMode category chosen by the user, false otherwise - **/ + */ function isInEModeCategory(uint256 eModeUserCategory, uint256 eModeAssetCategory) internal pure diff --git a/contracts/protocol/libraries/logic/GenericLogic.sol b/contracts/protocol/libraries/logic/GenericLogic.sol index a03fc3ca2..088b03666 100644 --- a/contracts/protocol/libraries/logic/GenericLogic.sol +++ b/contracts/protocol/libraries/logic/GenericLogic.sol @@ -60,7 +60,7 @@ library GenericLogic { * @return The average liquidation threshold of the user * @return The health factor of the user * @return True if the ltv is zero, false otherwise - **/ + */ function calculateUserAccountData( mapping(address => DataTypes.ReserveData) storage reservesData, mapping(uint256 => address) storage reservesList, @@ -202,7 +202,7 @@ library GenericLogic { * @param totalDebtInBaseCurrency The total borrow balance in the base currency used by the price feed * @param ltv The average loan to value * @return The amount available to borrow in the base currency of the used by the price feed - **/ + */ function calculateAvailableBorrows( uint256 totalCollateralInBaseCurrency, uint256 totalDebtInBaseCurrency, @@ -228,7 +228,7 @@ library GenericLogic { * @param assetPrice The price of the asset for which the total debt of the user is being calculated * @param assetUnit The value representing one full unit of the asset (10^decimals) * @return The total debt of the user normalized to the base currency - **/ + */ function _getUserDebtInBaseCurrency( address user, DataTypes.ReserveData storage reserve, @@ -261,7 +261,7 @@ library GenericLogic { * @param assetPrice The price of the asset for which the total aToken balance of the user is being calculated * @param assetUnit The value representing one full unit of the asset (10^decimals) * @return The total aToken balance of the user normalized to the base currency of the price oracle - **/ + */ function _getUserBalanceInBaseCurrency( address user, DataTypes.ReserveData storage reserve, diff --git a/contracts/protocol/libraries/logic/LiquidationLogic.sol b/contracts/protocol/libraries/logic/LiquidationLogic.sol index aea7040b0..48ad62885 100644 --- a/contracts/protocol/libraries/logic/LiquidationLogic.sol +++ b/contracts/protocol/libraries/logic/LiquidationLogic.sol @@ -23,7 +23,7 @@ import {IPriceOracleGetter} from '../../../interfaces/IPriceOracleGetter.sol'; * @title LiquidationLogic library * @author Aave * @notice Implements actions involving management of collateral in the protocol, the main one being the liquidations - **/ + */ library LiquidationLogic { using WadRayMath for uint256; using PercentageMath for uint256; @@ -92,7 +92,7 @@ library LiquidationLogic { * @param usersConfig The users configuration mapping that track the supplied/borrowed assets * @param eModeCategories The configuration of all the efficiency mode categories * @param params The additional parameters needed to execute the liquidation function - **/ + */ function executeLiquidationCall( mapping(address => DataTypes.ReserveData) storage reservesData, mapping(uint256 => address) storage reservesList, @@ -478,7 +478,7 @@ library LiquidationLogic { * @return The maximum amount that is possible to liquidate given all the liquidation constraints (user balance, close factor) * @return The amount to repay with the liquidation * @return The fee taken from the liquidation bonus amount to be paid to the protocol - **/ + */ function _calculateAvailableCollateralToLiquidate( DataTypes.ReserveData storage collateralReserve, DataTypes.ReserveCache memory debtReserveCache, diff --git a/contracts/protocol/libraries/logic/PoolLogic.sol b/contracts/protocol/libraries/logic/PoolLogic.sol index 954066fd3..5757200cf 100644 --- a/contracts/protocol/libraries/logic/PoolLogic.sol +++ b/contracts/protocol/libraries/logic/PoolLogic.sol @@ -34,7 +34,7 @@ library PoolLogic { * @param reservesList The addresses of all the active reserves * @param params Additional parameters needed for initiation * @return true if appended, false if inserted at existing empty spot - **/ + */ function executeInitReserve( mapping(address => DataTypes.ReserveData) storage reservesData, mapping(uint256 => address) storage reservesList, @@ -84,7 +84,7 @@ library PoolLogic { * @notice Mints the assets accrued through the reserve factor to the treasury in the form of aTokens * @param reservesData The state of all the reserves * @param assets The list of reserves for which the minting needs to be executed - **/ + */ function executeMintToTreasury( mapping(address => DataTypes.ReserveData) storage reservesData, address[] calldata assets @@ -132,7 +132,7 @@ library PoolLogic { * @param reservesData The state of all the reserves * @param reservesList The addresses of all the active reserves * @param asset The address of the underlying asset of the reserve - **/ + */ function executeDropReserve( mapping(address => DataTypes.ReserveData) storage reservesData, mapping(uint256 => address) storage reservesList, @@ -156,7 +156,7 @@ library PoolLogic { * @return currentLiquidationThreshold The liquidation threshold of the user * @return ltv The loan to value of The user * @return healthFactor The current health factor of the user - **/ + */ function executeGetUserAccountData( mapping(address => DataTypes.ReserveData) storage reservesData, mapping(uint256 => address) storage reservesList, diff --git a/contracts/protocol/libraries/logic/ReserveLogic.sol b/contracts/protocol/libraries/logic/ReserveLogic.sol index c73655f18..127fcaf87 100644 --- a/contracts/protocol/libraries/logic/ReserveLogic.sol +++ b/contracts/protocol/libraries/logic/ReserveLogic.sol @@ -43,7 +43,7 @@ library ReserveLogic { * @dev A value of 2*1e27 means for each unit of asset one unit of income has been accrued * @param reserve The reserve object * @return The normalized income, expressed in ray - **/ + */ function getNormalizedIncome(DataTypes.ReserveData storage reserve) internal view @@ -69,7 +69,7 @@ library ReserveLogic { * @dev A value of 2*1e27 means that for each unit of debt, one unit worth of interest has been accumulated * @param reserve The reserve object * @return The normalized variable debt, expressed in ray - **/ + */ function getNormalizedDebt(DataTypes.ReserveData storage reserve) internal view @@ -93,7 +93,7 @@ library ReserveLogic { * @notice Updates the liquidity cumulative index and the variable borrow index. * @param reserve The reserve object * @param reserveCache The caching layer for the reserve data - **/ + */ function updateState( DataTypes.ReserveData storage reserve, DataTypes.ReserveCache memory reserveCache @@ -118,7 +118,7 @@ library ReserveLogic { * @param totalLiquidity The total liquidity available in the reserve * @param amount The amount to accumulate * @return The next liquidity index of the reserve - **/ + */ function cumulateToLiquidityIndex( DataTypes.ReserveData storage reserve, uint256 totalLiquidity, @@ -140,7 +140,7 @@ library ReserveLogic { * @param stableDebtTokenAddress The address of the overlying stable debt token contract * @param variableDebtTokenAddress The address of the overlying variable debt token contract * @param interestRateStrategyAddress The address of the interest rate strategy contract - **/ + */ function init( DataTypes.ReserveData storage reserve, address aTokenAddress, @@ -172,7 +172,7 @@ library ReserveLogic { * @param reserveAddress The address of the reserve to be updated * @param liquidityAdded The amount of liquidity added to the protocol (supply or repay) in the previous action * @param liquidityTaken The amount of liquidity taken from the protocol (redeem or borrow) - **/ + */ function updateInterestRates( DataTypes.ReserveData storage reserve, DataTypes.ReserveCache memory reserveCache, @@ -234,7 +234,7 @@ library ReserveLogic { * specific asset. * @param reserve The reserve to be updated * @param reserveCache The caching layer for the reserve data - **/ + */ function _accrueToTreasury( DataTypes.ReserveData storage reserve, DataTypes.ReserveCache memory reserveCache @@ -287,7 +287,7 @@ library ReserveLogic { * @notice Updates the reserve indexes and the timestamp of the update. * @param reserve The reserve reserve to be updated * @param reserveCache The cache layer holding the cached protocol data - **/ + */ function _updateIndexes( DataTypes.ReserveData storage reserve, DataTypes.ReserveCache memory reserveCache diff --git a/contracts/protocol/libraries/logic/ValidationLogic.sol b/contracts/protocol/libraries/logic/ValidationLogic.sol index 60ba04394..f0e9409df 100644 --- a/contracts/protocol/libraries/logic/ValidationLogic.sol +++ b/contracts/protocol/libraries/logic/ValidationLogic.sol @@ -261,7 +261,7 @@ library ValidationLogic { * 2. Users cannot borrow from the reserve if their collateral is (mostly) the same currency * they are borrowing, to prevent abuses. * 3. Users will be able to borrow only a portion of the total available liquidity - **/ + */ if (params.interestRateMode == DataTypes.InterestRateMode.STABLE) { //check if the borrow mode is stable and if stable rate borrowing is enabled on this reserve @@ -368,7 +368,7 @@ library ValidationLogic { * 2. user is not trying to abuse the reserve by supplying * more collateral than he is borrowing, artificially lowering * the interest rate, borrowing at variable, and switching to stable - **/ + */ require(stableRateEnabled, Errors.STABLE_BORROWING_NOT_ENABLED); require( @@ -621,7 +621,7 @@ library ValidationLogic { * @param reservesList The addresses of all the active reserves * @param reserve The reserve object * @param asset The address of the reserve's underlying asset - **/ + */ function validateDropReserve( mapping(uint256 => address) storage reservesList, DataTypes.ReserveData storage reserve, @@ -648,7 +648,7 @@ library ValidationLogic { * @param userConfig the user configuration * @param reservesCount The total number of valid reserves * @param categoryId The id of the category - **/ + */ function validateSetUserEMode( mapping(address => DataTypes.ReserveData) storage reservesData, mapping(uint256 => address) storage reservesList, @@ -696,7 +696,7 @@ library ValidationLogic { * @param userConfig the user configuration * @param reserveConfig The reserve configuration * @return True if the asset can be activated as collateral, false otherwise - **/ + */ function validateUseAsCollateral( mapping(address => DataTypes.ReserveData) storage reservesData, mapping(uint256 => address) storage reservesList, diff --git a/contracts/protocol/libraries/math/MathUtils.sol b/contracts/protocol/libraries/math/MathUtils.sol index 825061d77..d666d2f73 100644 --- a/contracts/protocol/libraries/math/MathUtils.sol +++ b/contracts/protocol/libraries/math/MathUtils.sol @@ -19,7 +19,7 @@ library MathUtils { * @param rate The interest rate, in ray * @param lastUpdateTimestamp The timestamp of the last update of the interest * @return The interest rate linearly accumulated during the timeDelta, in ray - **/ + */ function calculateLinearInterest(uint256 rate, uint40 lastUpdateTimestamp) internal view @@ -47,7 +47,7 @@ library MathUtils { * @param rate The interest rate, in ray * @param lastUpdateTimestamp The timestamp of the last update of the interest * @return The interest rate compounded during the timeDelta, in ray - **/ + */ function calculateCompoundedInterest( uint256 rate, uint40 lastUpdateTimestamp, @@ -90,7 +90,7 @@ library MathUtils { * @param rate The interest rate (in ray) * @param lastUpdateTimestamp The timestamp from which the interest accumulation needs to be calculated * @return The interest rate compounded between lastUpdateTimestamp and current block timestamp, in ray - **/ + */ function calculateCompoundedInterest(uint256 rate, uint40 lastUpdateTimestamp) internal view diff --git a/contracts/protocol/libraries/math/PercentageMath.sol b/contracts/protocol/libraries/math/PercentageMath.sol index 597521342..c000be3a6 100644 --- a/contracts/protocol/libraries/math/PercentageMath.sol +++ b/contracts/protocol/libraries/math/PercentageMath.sol @@ -7,7 +7,7 @@ pragma solidity ^0.8.0; * @notice Provides functions to perform percentage calculations * @dev Percentages are defined by default with 2 decimals of precision (100.00). The precision is indicated by PERCENTAGE_FACTOR * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down. - **/ + */ library PercentageMath { // Maximum percentage factor (100.00%) uint256 internal constant PERCENTAGE_FACTOR = 1e4; @@ -21,7 +21,7 @@ library PercentageMath { * @param value The value of which the percentage needs to be calculated * @param percentage The percentage of the value to be calculated * @return result value percentmul percentage - **/ + */ function percentMul(uint256 value, uint256 percentage) internal pure returns (uint256 result) { // to avoid overflow, value <= (type(uint256).max - HALF_PERCENTAGE_FACTOR) / percentage assembly { @@ -44,7 +44,7 @@ library PercentageMath { * @param value The value of which the percentage needs to be calculated * @param percentage The percentage of the value to be calculated * @return result value percentdiv percentage - **/ + */ function percentDiv(uint256 value, uint256 percentage) internal pure returns (uint256 result) { // to avoid overflow, value <= (type(uint256).max - halfPercentage) / PERCENTAGE_FACTOR assembly { diff --git a/contracts/protocol/libraries/math/WadRayMath.sol b/contracts/protocol/libraries/math/WadRayMath.sol index dbc8f21f1..f61fe87f2 100644 --- a/contracts/protocol/libraries/math/WadRayMath.sol +++ b/contracts/protocol/libraries/math/WadRayMath.sol @@ -8,7 +8,7 @@ pragma solidity ^0.8.0; * @dev Provides mul and div function for wads (decimal numbers with 18 digits of precision) and rays (decimal numbers * with 27 digits of precision) * @dev Operations are rounded. If a value is >=.5, will be rounded up, otherwise rounded down. - **/ + */ library WadRayMath { // HALF_WAD and HALF_RAY expressed with extended notation as constant with operations are not supported in Yul assembly uint256 internal constant WAD = 1e18; @@ -25,7 +25,7 @@ library WadRayMath { * @param a Wad * @param b Wad * @return c = a*b, in wad - **/ + */ function wadMul(uint256 a, uint256 b) internal pure returns (uint256 c) { // to avoid overflow, a <= (type(uint256).max - HALF_WAD) / b assembly { @@ -43,7 +43,7 @@ library WadRayMath { * @param a Wad * @param b Wad * @return c = a/b, in wad - **/ + */ function wadDiv(uint256 a, uint256 b) internal pure returns (uint256 c) { // to avoid overflow, a <= (type(uint256).max - halfB) / WAD assembly { @@ -61,7 +61,7 @@ library WadRayMath { * @param a Ray * @param b Ray * @return c = a raymul b - **/ + */ function rayMul(uint256 a, uint256 b) internal pure returns (uint256 c) { // to avoid overflow, a <= (type(uint256).max - HALF_RAY) / b assembly { @@ -79,7 +79,7 @@ library WadRayMath { * @param a Ray * @param b Ray * @return c = a raydiv b - **/ + */ function rayDiv(uint256 a, uint256 b) internal pure returns (uint256 c) { // to avoid overflow, a <= (type(uint256).max - halfB) / RAY assembly { @@ -96,7 +96,7 @@ library WadRayMath { * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328 * @param a Ray * @return b = a converted to wad, rounded half up to the nearest wad - **/ + */ function rayToWad(uint256 a) internal pure returns (uint256 b) { assembly { b := div(a, WAD_RAY_RATIO) @@ -112,7 +112,7 @@ library WadRayMath { * @dev assembly optimized for improved gas savings, see https://twitter.com/transmissions11/status/1451131036377571328 * @param a Wad * @return b = a converted in ray - **/ + */ function wadToRay(uint256 a) internal pure returns (uint256 b) { // to avoid overflow, b/WAD_RAY_RATIO == a assembly { diff --git a/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol b/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol index 9ad96e862..e8430f6e9 100644 --- a/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol +++ b/contracts/protocol/pool/DefaultReserveInterestRateStrategy.sol @@ -18,7 +18,7 @@ import {IPoolAddressesProvider} from '../../interfaces/IPoolAddressesProvider.so * point of usage and another from that one to 100%. * - An instance of this same contract, can't be used across different Aave markets, due to the caching * of the PoolAddressesProvider - **/ + */ contract DefaultReserveInterestRateStrategy is IDefaultInterestRateStrategy { using WadRayMath for uint256; using PercentageMath for uint256; @@ -239,7 +239,7 @@ contract DefaultReserveInterestRateStrategy is IDefaultInterestRateStrategy { * @param currentVariableBorrowRate The current variable borrow rate of the reserve * @param currentAverageStableBorrowRate The current weighted average of all the stable rate loans * @return The weighted averaged borrow rate - **/ + */ function _getOverallBorrowRate( uint256 totalStableDebt, uint256 totalVariableDebt, diff --git a/contracts/protocol/pool/Pool.sol b/contracts/protocol/pool/Pool.sol index 8c3fcacda..1e5e93d87 100644 --- a/contracts/protocol/pool/Pool.sol +++ b/contracts/protocol/pool/Pool.sol @@ -35,7 +35,7 @@ import {PoolStorage} from './PoolStorage.sol'; * @dev To be covered by a proxy contract, owned by the PoolAddressesProvider of the specific market * @dev All admin functions are callable by the PoolConfigurator contract defined also in the * PoolAddressesProvider - **/ + */ contract Pool is VersionedInitializable, PoolStorage, IPool { using ReserveLogic for DataTypes.ReserveData; @@ -44,7 +44,7 @@ contract Pool is VersionedInitializable, PoolStorage, IPool { /** * @dev Only pool configurator can call functions marked by this modifier. - **/ + */ modifier onlyPoolConfigurator() { _onlyPoolConfigurator(); _; @@ -52,7 +52,7 @@ contract Pool is VersionedInitializable, PoolStorage, IPool { /** * @dev Only pool admin can call functions marked by this modifier. - **/ + */ modifier onlyPoolAdmin() { _onlyPoolAdmin(); _; @@ -60,7 +60,7 @@ contract Pool is VersionedInitializable, PoolStorage, IPool { /** * @dev Only bridge can call functions marked by this modifier. - **/ + */ modifier onlyBridge() { _onlyBridge(); _; @@ -105,7 +105,7 @@ contract Pool is VersionedInitializable, PoolStorage, IPool { * PoolAddressesProvider of the market. * @dev Caching the address of the PoolAddressesProvider in order to reduce gas consumption on subsequent operations * @param provider The address of the PoolAddressesProvider - **/ + */ function initialize(IPoolAddressesProvider provider) external virtual initializer { require(provider == ADDRESSES_PROVIDER, Errors.INVALID_ADDRESSES_PROVIDER); _maxStableRateBorrowSizePercent = 0.25e4; diff --git a/contracts/protocol/pool/PoolConfigurator.sol b/contracts/protocol/pool/PoolConfigurator.sol index a76d85fbf..4d98e106d 100644 --- a/contracts/protocol/pool/PoolConfigurator.sol +++ b/contracts/protocol/pool/PoolConfigurator.sol @@ -18,7 +18,7 @@ import {IPoolDataProvider} from '../../interfaces/IPoolDataProvider.sol'; * @title PoolConfigurator * @author Aave * @dev Implements the configuration methods for the Aave protocol - **/ + */ contract PoolConfigurator is VersionedInitializable, IPoolConfigurator { using PercentageMath for uint256; using ReserveConfiguration for DataTypes.ReserveConfigurationMap; @@ -28,7 +28,7 @@ contract PoolConfigurator is VersionedInitializable, IPoolConfigurator { /** * @dev Only pool admin can call functions marked by this modifier. - **/ + */ modifier onlyPoolAdmin() { _onlyPoolAdmin(); _; @@ -36,7 +36,7 @@ contract PoolConfigurator is VersionedInitializable, IPoolConfigurator { /** * @dev Only emergency admin can call functions marked by this modifier. - **/ + */ modifier onlyEmergencyAdmin() { _onlyEmergencyAdmin(); _; @@ -44,7 +44,7 @@ contract PoolConfigurator is VersionedInitializable, IPoolConfigurator { /** * @dev Only emergency or pool admin can call functions marked by this modifier. - **/ + */ modifier onlyEmergencyOrPoolAdmin() { _onlyPoolOrEmergencyAdmin(); _; @@ -52,7 +52,7 @@ contract PoolConfigurator is VersionedInitializable, IPoolConfigurator { /** * @dev Only asset listing or pool admin can call functions marked by this modifier. - **/ + */ modifier onlyAssetListingOrPoolAdmins() { _onlyAssetListingOrPoolAdmins(); _; @@ -60,7 +60,7 @@ contract PoolConfigurator is VersionedInitializable, IPoolConfigurator { /** * @dev Only risk or pool admin can call functions marked by this modifier. - **/ + */ modifier onlyRiskOrPoolAdmins() { _onlyRiskOrPoolAdmins(); _; diff --git a/contracts/protocol/tokenization/AToken.sol b/contracts/protocol/tokenization/AToken.sol index d011e19c2..7bb079455 100644 --- a/contracts/protocol/tokenization/AToken.sol +++ b/contracts/protocol/tokenization/AToken.sol @@ -204,7 +204,7 @@ contract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, I * @param to The destination address * @param amount The amount getting transferred * @param validate True if the transfer needs to be validated, false otherwise - **/ + */ function _transfer( address from, address to, @@ -232,7 +232,7 @@ contract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, I * @param from The source address * @param to The destination address * @param amount The amount getting transferred - **/ + */ function _transfer( address from, address to, diff --git a/contracts/protocol/tokenization/DelegationAwareAToken.sol b/contracts/protocol/tokenization/DelegationAwareAToken.sol index 51a5f201a..6f48482f6 100644 --- a/contracts/protocol/tokenization/DelegationAwareAToken.sol +++ b/contracts/protocol/tokenization/DelegationAwareAToken.sol @@ -29,7 +29,7 @@ contract DelegationAwareAToken is AToken { /** * @notice Delegates voting power of the underlying asset to a `delegatee` address * @param delegatee The address that will receive the delegation - **/ + */ function delegateUnderlyingTo(address delegatee) external onlyPoolAdmin { IDelegationToken(_underlyingAsset).delegate(delegatee); emit DelegateUnderlyingTo(delegatee); diff --git a/contracts/protocol/tokenization/StableDebtToken.sol b/contracts/protocol/tokenization/StableDebtToken.sol index c37358ba8..ae207b7b6 100644 --- a/contracts/protocol/tokenization/StableDebtToken.sol +++ b/contracts/protocol/tokenization/StableDebtToken.sol @@ -21,7 +21,7 @@ import {SafeCast} from '../../dependencies/openzeppelin/contracts/SafeCast.sol'; * @notice Implements a stable debt token to track the borrowing positions of users * at stable rate mode * @dev Transfer and approve functionalities are disabled since its a non-transferable token - **/ + */ contract StableDebtToken is DebtTokenBase, IncentivizedERC20, IStableDebtToken { using WadRayMath for uint256; using SafeCast for uint256; @@ -264,7 +264,7 @@ contract StableDebtToken is DebtTokenBase, IncentivizedERC20, IStableDebtToken { * @return The previous principal balance * @return The new principal balance * @return The balance increase - **/ + */ function _calculateBalanceIncrease(address user) internal view @@ -335,7 +335,7 @@ contract StableDebtToken is DebtTokenBase, IncentivizedERC20, IStableDebtToken { * @notice Calculates the total supply * @param avgRate The average rate at which the total supply increases * @return The debt balance of the user since the last burn/mint action - **/ + */ function _calcTotalSupply(uint256 avgRate) internal view returns (uint256) { uint256 principalSupply = super.totalSupply(); @@ -356,7 +356,7 @@ contract StableDebtToken is DebtTokenBase, IncentivizedERC20, IStableDebtToken { * @param account The account receiving the debt tokens * @param amount The amount being minted * @param oldTotalSupply The total supply before the minting event - **/ + */ function _mint( address account, uint256 amount, @@ -376,7 +376,7 @@ contract StableDebtToken is DebtTokenBase, IncentivizedERC20, IStableDebtToken { * @param account The user getting his debt burned * @param amount The amount being burned * @param oldTotalSupply The total supply before the burning event - **/ + */ function _burn( address account, uint256 amount, @@ -399,7 +399,7 @@ contract StableDebtToken is DebtTokenBase, IncentivizedERC20, IStableDebtToken { /** * @dev Being non transferrable, the debt token does not implement any of the * standard ERC20 functions for transfer and allowance. - **/ + */ function transfer(address, uint256) external virtual override returns (bool) { revert(Errors.OPERATION_NOT_SUPPORTED); } diff --git a/contracts/protocol/tokenization/VariableDebtToken.sol b/contracts/protocol/tokenization/VariableDebtToken.sol index 6b73f4b5e..295843592 100644 --- a/contracts/protocol/tokenization/VariableDebtToken.sol +++ b/contracts/protocol/tokenization/VariableDebtToken.sol @@ -20,7 +20,7 @@ import {ScaledBalanceTokenBase} from './base/ScaledBalanceTokenBase.sol'; * @notice Implements a variable debt token to track the borrowing positions of users * at variable rate mode * @dev Transfer and approve functionalities are disabled since its a non-transferable token - **/ + */ contract VariableDebtToken is DebtTokenBase, ScaledBalanceTokenBase, IVariableDebtToken { using WadRayMath for uint256; using SafeCast for uint256; @@ -121,7 +121,7 @@ contract VariableDebtToken is DebtTokenBase, ScaledBalanceTokenBase, IVariableDe /** * @dev Being non transferrable, the debt token does not implement any of the * standard ERC20 functions for transfer and allowance. - **/ + */ function transfer(address, uint256) external virtual override returns (bool) { revert(Errors.OPERATION_NOT_SUPPORTED); } diff --git a/contracts/protocol/tokenization/base/DebtTokenBase.sol b/contracts/protocol/tokenization/base/DebtTokenBase.sol index 3e5ac909d..d548491cc 100644 --- a/contracts/protocol/tokenization/base/DebtTokenBase.sol +++ b/contracts/protocol/tokenization/base/DebtTokenBase.sol @@ -82,7 +82,7 @@ abstract contract DebtTokenBase is * @param delegator The address delegating the borrowing power * @param delegatee The address receiving the delegated borrowing power * @param amount The allowance amount being delegated. - **/ + */ function _approveDelegation( address delegator, address delegatee, @@ -97,7 +97,7 @@ abstract contract DebtTokenBase is * @param delegator The address delegating the borrowing power * @param delegatee The address receiving the delegated borrowing power * @param amount The amount to subtract from the current allowance - **/ + */ function _decreaseBorrowAllowance( address delegator, address delegatee, diff --git a/contracts/protocol/tokenization/base/IncentivizedERC20.sol b/contracts/protocol/tokenization/base/IncentivizedERC20.sol index 1c684eaf6..79f9d2724 100644 --- a/contracts/protocol/tokenization/base/IncentivizedERC20.sol +++ b/contracts/protocol/tokenization/base/IncentivizedERC20.sol @@ -16,14 +16,14 @@ import {IACLManager} from '../../../interfaces/IACLManager.sol'; * @title IncentivizedERC20 * @author Aave, inspired by the Openzeppelin ERC20 implementation * @notice Basic ERC20 implementation - **/ + */ abstract contract IncentivizedERC20 is Context, IERC20Detailed { using WadRayMath for uint256; using SafeCast for uint256; /** * @dev Only pool admin can call functions marked by this modifier. - **/ + */ modifier onlyPoolAdmin() { IACLManager aclManager = IACLManager(_addressesProvider.getACLManager()); require(aclManager.isPoolAdmin(msg.sender), Errors.CALLER_NOT_POOL_ADMIN); @@ -32,7 +32,7 @@ abstract contract IncentivizedERC20 is Context, IERC20Detailed { /** * @dev Only pool can call functions marked by this modifier. - **/ + */ modifier onlyPool() { require(_msgSender() == address(POOL), Errors.CALLER_MUST_BE_POOL); _; @@ -110,7 +110,7 @@ abstract contract IncentivizedERC20 is Context, IERC20Detailed { /** * @notice Returns the address of the Incentives Controller contract * @return The address of the Incentives Controller - **/ + */ function getIncentivesController() external view virtual returns (IAaveIncentivesController) { return _incentivesController; } @@ -118,7 +118,7 @@ abstract contract IncentivizedERC20 is Context, IERC20Detailed { /** * @notice Sets a new Incentives Controller * @param controller the new Incentives controller - **/ + */ function setIncentivesController(IAaveIncentivesController controller) external onlyPoolAdmin { _incentivesController = controller; } @@ -164,7 +164,7 @@ abstract contract IncentivizedERC20 is Context, IERC20Detailed { * @param spender The user allowed to spend on behalf of _msgSender() * @param addedValue The amount being added to the allowance * @return `true` - **/ + */ function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; @@ -175,7 +175,7 @@ abstract contract IncentivizedERC20 is Context, IERC20Detailed { * @param spender The user allowed to spend on behalf of _msgSender() * @param subtractedValue The amount being subtracted to the allowance * @return `true` - **/ + */ function decreaseAllowance(address spender, uint256 subtractedValue) external virtual diff --git a/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol b/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol index 51eba347e..caaad61d8 100644 --- a/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol +++ b/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol @@ -9,7 +9,7 @@ import {IncentivizedERC20} from './IncentivizedERC20.sol'; * @title MintableIncentivizedERC20 * @author Aave * @notice Implements mint and burn functions for IncentivizedERC20 - **/ + */ abstract contract MintableIncentivizedERC20 is IncentivizedERC20 { /** * @dev Constructor. diff --git a/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol b/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol index 033728e43..d659b5897 100644 --- a/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol +++ b/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol @@ -12,7 +12,7 @@ import {MintableIncentivizedERC20} from './MintableIncentivizedERC20.sol'; * @title ScaledBalanceTokenBase * @author Aave * @notice Basic ERC20 implementation of scaled balance token - **/ + */ abstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBalanceToken { using WadRayMath for uint256; using SafeCast for uint256; @@ -65,7 +65,7 @@ abstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBa * @param amount The amount of tokens getting minted * @param index The next liquidity index of the reserve * @return `true` if the the previous balance of the user was 0 - **/ + */ function _mintScaled( address caller, address onBehalfOf, @@ -98,7 +98,7 @@ abstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBa * @param target The address that will receive the underlying, if any * @param amount The amount getting burned * @param index The variable debt index of the reserve - **/ + */ function _burnScaled( address user, address target, @@ -134,7 +134,7 @@ abstract contract ScaledBalanceTokenBase is MintableIncentivizedERC20, IScaledBa * @param recipient The destination address * @param amount The amount getting transferred * @param index The next liquidity index of the reserve - **/ + */ function _transfer( address sender, address recipient, From fba69f087131abcb5945f6e817d5c7acb51badfa Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Wed, 14 Dec 2022 18:48:54 +0100 Subject: [PATCH 77/87] fix: Capitalize license name of contracts --- contracts/dependencies/openzeppelin/contracts/Address.sol | 2 +- contracts/dependencies/openzeppelin/contracts/IERC20.sol | 2 +- .../dependencies/openzeppelin/contracts/IERC20Detailed.sol | 2 +- contracts/dependencies/openzeppelin/contracts/SafeMath.sol | 2 +- .../openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol | 2 +- .../upgradeability/BaseAdminUpgradeabilityProxy.sol | 2 +- .../openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol | 2 +- .../dependencies/openzeppelin/upgradeability/Initializable.sol | 2 +- .../upgradeability/InitializableAdminUpgradeabilityProxy.sol | 2 +- .../upgradeability/InitializableUpgradeabilityProxy.sol | 2 +- contracts/dependencies/openzeppelin/upgradeability/Proxy.sol | 2 +- .../openzeppelin/upgradeability/UpgradeabilityProxy.sol | 2 +- contracts/protocol/tokenization/base/EIP712Base.sol | 2 +- .../protocol/tokenization/base/MintableIncentivizedERC20.sol | 2 +- contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/contracts/dependencies/openzeppelin/contracts/Address.sol b/contracts/dependencies/openzeppelin/contracts/Address.sol index c6dcfda70..66cf8b8b0 100644 --- a/contracts/dependencies/openzeppelin/contracts/Address.sol +++ b/contracts/dependencies/openzeppelin/contracts/Address.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; /** diff --git a/contracts/dependencies/openzeppelin/contracts/IERC20.sol b/contracts/dependencies/openzeppelin/contracts/IERC20.sol index 7dc55938a..326d73882 100644 --- a/contracts/dependencies/openzeppelin/contracts/IERC20.sol +++ b/contracts/dependencies/openzeppelin/contracts/IERC20.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; /** diff --git a/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol b/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol index 02693059c..6303454f3 100644 --- a/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol +++ b/contracts/dependencies/openzeppelin/contracts/IERC20Detailed.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; import {IERC20} from './IERC20.sol'; diff --git a/contracts/dependencies/openzeppelin/contracts/SafeMath.sol b/contracts/dependencies/openzeppelin/contracts/SafeMath.sol index bf5b1ee57..461c0ea57 100644 --- a/contracts/dependencies/openzeppelin/contracts/SafeMath.sol +++ b/contracts/dependencies/openzeppelin/contracts/SafeMath.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; /// @title Optimized overflow and underflow safe math operations diff --git a/contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol b/contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol index cc8f3b34d..035165d83 100644 --- a/contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol +++ b/contracts/dependencies/openzeppelin/upgradeability/AdminUpgradeabilityProxy.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; import './BaseAdminUpgradeabilityProxy.sol'; diff --git a/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol b/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol index 4bab09949..16275741a 100644 --- a/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol +++ b/contracts/dependencies/openzeppelin/upgradeability/BaseAdminUpgradeabilityProxy.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; import './UpgradeabilityProxy.sol'; diff --git a/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol b/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol index bf52cd596..805fb578a 100644 --- a/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol +++ b/contracts/dependencies/openzeppelin/upgradeability/BaseUpgradeabilityProxy.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; import './Proxy.sol'; diff --git a/contracts/dependencies/openzeppelin/upgradeability/Initializable.sol b/contracts/dependencies/openzeppelin/upgradeability/Initializable.sol index 79b720c9d..1a7863313 100644 --- a/contracts/dependencies/openzeppelin/upgradeability/Initializable.sol +++ b/contracts/dependencies/openzeppelin/upgradeability/Initializable.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; /** diff --git a/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol b/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol index 49ca1344a..94a0b16aa 100644 --- a/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol +++ b/contracts/dependencies/openzeppelin/upgradeability/InitializableAdminUpgradeabilityProxy.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; import './BaseAdminUpgradeabilityProxy.sol'; diff --git a/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol b/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol index 5ecec0834..d76a024e0 100644 --- a/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol +++ b/contracts/dependencies/openzeppelin/upgradeability/InitializableUpgradeabilityProxy.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; import './BaseUpgradeabilityProxy.sol'; diff --git a/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol b/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol index 44b790da5..6f68021aa 100644 --- a/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol +++ b/contracts/dependencies/openzeppelin/upgradeability/Proxy.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; /** diff --git a/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol b/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol index 896707a81..65422f6e5 100644 --- a/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol +++ b/contracts/dependencies/openzeppelin/upgradeability/UpgradeabilityProxy.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; import './BaseUpgradeabilityProxy.sol'; diff --git a/contracts/protocol/tokenization/base/EIP712Base.sol b/contracts/protocol/tokenization/base/EIP712Base.sol index bb1611939..88dd80786 100644 --- a/contracts/protocol/tokenization/base/EIP712Base.sol +++ b/contracts/protocol/tokenization/base/EIP712Base.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; /** diff --git a/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol b/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol index caaad61d8..29f735433 100644 --- a/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol +++ b/contracts/protocol/tokenization/base/MintableIncentivizedERC20.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; import {IAaveIncentivesController} from '../../../interfaces/IAaveIncentivesController.sol'; diff --git a/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol b/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol index d659b5897..9aa13547c 100644 --- a/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol +++ b/contracts/protocol/tokenization/base/ScaledBalanceTokenBase.sol @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: agpl-3.0 +// SPDX-License-Identifier: AGPL-3.0 pragma solidity 0.8.10; import {SafeCast} from '../../../dependencies/openzeppelin/contracts/SafeCast.sol'; From 94fd3c782e3fb0e7d25856804b5e470b2e792e87 Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Wed, 14 Dec 2022 22:29:48 +0100 Subject: [PATCH 78/87] chore: Bump package version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c7299e5cf..89a955f4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@aave/core-v3", - "version": "1.16.2-beta.2", + "version": "1.16.2-beta.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@aave/core-v3", - "version": "1.16.2-beta.1", + "version": "1.16.2-beta.3", "license": "BUSL-1.1", "devDependencies": { "@aave/deploy-v3": "1.51.0", diff --git a/package.json b/package.json index 0220e2b02..4c8abc777 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@aave/core-v3", - "version": "1.16.2-beta.2", + "version": "1.16.2-beta.3", "description": "Aave Protocol V3 core smart contracts", "files": [ "contracts", From 1cb9ba198650c8582e12657c0ac9b21fa379ff06 Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Wed, 14 Dec 2022 22:33:53 +0100 Subject: [PATCH 79/87] fix: Fix param of IAToken function --- contracts/interfaces/IAToken.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/interfaces/IAToken.sol b/contracts/interfaces/IAToken.sol index a50e11d5c..441d3a200 100644 --- a/contracts/interfaces/IAToken.sol +++ b/contracts/interfaces/IAToken.sol @@ -73,10 +73,10 @@ interface IAToken is IERC20, IScaledBalanceToken, IInitializableAToken { /** * @notice Transfers the underlying asset to `target`. * @dev Used by the Pool to transfer assets in borrow(), withdraw() and flashLoan() - * @param user The recipient of the underlying + * @param target The recipient of the underlying * @param amount The amount getting transferred */ - function transferUnderlyingTo(address user, uint256 amount) external; + function transferUnderlyingTo(address target, uint256 amount) external; /** * @notice Handles the underlying received by the aToken after the transfer has been completed. From de66eec55e165d424f1cf8c19788dbca24280e4b Mon Sep 17 00:00:00 2001 From: miguelmtzinf Date: Wed, 14 Dec 2022 22:35:11 +0100 Subject: [PATCH 80/87] chore: Bump package version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 89a955f4b..0002302c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@aave/core-v3", - "version": "1.16.2-beta.3", + "version": "1.16.2-beta.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@aave/core-v3", - "version": "1.16.2-beta.3", + "version": "1.16.2-beta.4", "license": "BUSL-1.1", "devDependencies": { "@aave/deploy-v3": "1.51.0", diff --git a/package.json b/package.json index 4c8abc777..1d7644f2f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@aave/core-v3", - "version": "1.16.2-beta.3", + "version": "1.16.2-beta.4", "description": "Aave Protocol V3 core smart contracts", "files": [ "contracts", From b3abe176ac4cf4edcefd5de681e08f1685f14792 Mon Sep 17 00:00:00 2001 From: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Date: Mon, 19 Dec 2022 08:39:05 +0100 Subject: [PATCH 81/87] Fix calculation of IRs with non-zero unbacked and zero unbackedMintCap (#773) * test: Add fail test case for wrong IR calculation with 0 unbackedCap * fix: Fix IR calculation to account for correct unbacked amount --- .../protocol/libraries/logic/ReserveLogic.sol | 4 +- test-suites/__setup.spec.ts | 2 +- test-suites/helpers/scenario-engine.ts | 2 +- test-suites/pool-edge.spec.ts | 146 ++++++++++++++---- 4 files changed, 118 insertions(+), 36 deletions(-) diff --git a/contracts/protocol/libraries/logic/ReserveLogic.sol b/contracts/protocol/libraries/logic/ReserveLogic.sol index 127fcaf87..a3cd77f56 100644 --- a/contracts/protocol/libraries/logic/ReserveLogic.sol +++ b/contracts/protocol/libraries/logic/ReserveLogic.sol @@ -192,9 +192,7 @@ library ReserveLogic { vars.nextVariableRate ) = IReserveInterestRateStrategy(reserve.interestRateStrategyAddress).calculateInterestRates( DataTypes.CalculateInterestRatesParams({ - unbacked: reserveCache.reserveConfiguration.getUnbackedMintCap() != 0 - ? reserve.unbacked - : 0, + unbacked: reserve.unbacked, liquidityAdded: liquidityAdded, liquidityTaken: liquidityTaken, totalStableDebt: reserveCache.nextTotalStableDebt, diff --git a/test-suites/__setup.spec.ts b/test-suites/__setup.spec.ts index dd75c64b3..adbc68d51 100644 --- a/test-suites/__setup.spec.ts +++ b/test-suites/__setup.spec.ts @@ -6,7 +6,7 @@ before(async () => { console.log('-> Deployed market'); - console.log('-> Initializing test enviroment'); + console.log('-> Initializing test environment'); await initializeMakeSuite(); console.log('\n***************'); console.log('Setup and snapshot finished'); diff --git a/test-suites/helpers/scenario-engine.ts b/test-suites/helpers/scenario-engine.ts index 772cdad5a..dd2b37f0f 100644 --- a/test-suites/helpers/scenario-engine.ts +++ b/test-suites/helpers/scenario-engine.ts @@ -56,7 +56,7 @@ const executeAction = async (action: Action, users: SignerWithAddress[], testEnv } if (!expected || expected === '') { - throw `An expected resut for action ${name} is required`; + throw `An expected result for action ${name} is required`; } let rateMode: string = RateMode.None; diff --git a/test-suites/pool-edge.spec.ts b/test-suites/pool-edge.spec.ts index 27bd7be25..92e1fd6b7 100644 --- a/test-suites/pool-edge.spec.ts +++ b/test-suites/pool-edge.spec.ts @@ -1,13 +1,13 @@ -import {expect} from 'chai'; -import {BigNumber, BigNumberish, utils} from 'ethers'; -import {impersonateAccountsHardhat} from '../helpers/misc-utils'; -import {MAX_UINT_AMOUNT, ZERO_ADDRESS} from '../helpers/constants'; -import {deployMintableERC20} from '@aave/deploy-v3/dist/helpers/contract-deployments'; -import {ProtocolErrors, RateMode} from '../helpers/types'; -import {getFirstSigner} from '@aave/deploy-v3/dist/helpers/utilities/signer'; -import {topUpNonPayableWithEther} from './helpers/utils/funds'; -import {makeSuite, TestEnv} from './helpers/make-suite'; -import {HardhatRuntimeEnvironment} from 'hardhat/types'; +import { expect } from 'chai'; +import { BigNumber, BigNumberish, utils } from 'ethers'; +import { impersonateAccountsHardhat, setAutomine } from '../helpers/misc-utils'; +import { MAX_UINT_AMOUNT, MAX_UNBACKED_MINT_CAP, ZERO_ADDRESS } from '../helpers/constants'; +import { deployMintableERC20 } from '@aave/deploy-v3/dist/helpers/contract-deployments'; +import { ProtocolErrors, RateMode } from '../helpers/types'; +import { getFirstSigner } from '@aave/deploy-v3/dist/helpers/utilities/signer'; +import { topUpNonPayableWithEther } from './helpers/utils/funds'; +import { makeSuite, TestEnv } from './helpers/make-suite'; +import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { evmSnapshot, evmRevert, @@ -15,6 +15,7 @@ import { MockFlashLoanReceiver, getMockFlashLoanReceiver, advanceTimeAndBlock, + getACLManager, } from '@aave/deploy-v3'; import { MockPoolInherited__factory, @@ -25,8 +26,15 @@ import { Pool__factory, ERC20__factory, } from '../types'; -import {convertToCurrencyDecimals, getProxyImplementation} from '../helpers/contracts-helpers'; -import {ethers} from 'hardhat'; +import { convertToCurrencyDecimals, getProxyImplementation } from '../helpers/contracts-helpers'; +import { ethers } from 'hardhat'; +import { deposit, getTxCostAndTimestamp } from './helpers/actions'; +import AaveConfig from '@aave/deploy-v3/dist/markets/test'; +import { + calcExpectedReserveDataAfterDeposit, + configuration as calculationsConfiguration, +} from './helpers/utils/calculations'; +import { getReserveData } from './helpers/utils/helpers'; declare var hre: HardhatRuntimeEnvironment; @@ -127,7 +135,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { dai, users: [user0], } = testEnv; - const {deployer: deployerName} = await hre.getNamedAccounts(); + const { deployer: deployerName } = await hre.getNamedAccounts(); // Deploy the mock Pool with a `dropReserve` skipping the checks const NEW_POOL_IMPL_ARTIFACT = await hre.deployments.deploy('MockPoolInheritedDropper', { @@ -197,7 +205,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { addressesProvider, users: [deployer], } = testEnv; - const {deployer: deployerName} = await hre.getNamedAccounts(); + const { deployer: deployerName } = await hre.getNamedAccounts(); const NEW_POOL_IMPL_ARTIFACT = await hre.deployments.deploy('Pool', { contract: 'Pool', @@ -223,7 +231,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Check initialization', async () => { - const {pool} = testEnv; + const { pool } = testEnv; expect(await pool.MAX_STABLE_RATE_BORROW_SIZE_PERCENT()).to.be.eq( MAX_STABLE_RATE_BORROW_SIZE_PERCENT @@ -232,7 +240,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Tries to initialize a reserve as non PoolConfigurator (revert expected)', async () => { - const {pool, users, dai, helpersContract} = testEnv; + const { pool, users, dai, helpersContract } = testEnv; const config = await helpersContract.getReserveTokensAddresses(dai.address); @@ -317,7 +325,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Call `mintToTreasury()` on a pool with an inactive reserve', async () => { - const {pool, poolAdmin, dai, users, configurator} = testEnv; + const { pool, poolAdmin, dai, users, configurator } = testEnv; // Deactivate reserve expect(await configurator.connect(poolAdmin.signer).setReserveActive(dai.address, false)); @@ -327,7 +335,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Tries to call `finalizeTransfer()` by a non-aToken address (revert expected)', async () => { - const {pool, dai, users} = testEnv; + const { pool, dai, users } = testEnv; await expect( pool @@ -337,7 +345,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Tries to call `initReserve()` with an EOA as reserve (revert expected)', async () => { - const {pool, deployer, users, configurator} = testEnv; + const { pool, deployer, users, configurator } = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -352,7 +360,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('PoolConfigurator updates the ReserveInterestRateStrategy address', async () => { - const {pool, deployer, dai, configurator} = testEnv; + const { pool, deployer, dai, configurator } = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -370,7 +378,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('PoolConfigurator updates the ReserveInterestRateStrategy address for asset 0', async () => { - const {pool, deployer, dai, configurator} = testEnv; + const { pool, deployer, dai, configurator } = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -383,7 +391,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('PoolConfigurator updates the ReserveInterestRateStrategy address for an unlisted asset (revert expected)', async () => { - const {pool, deployer, dai, configurator, users} = testEnv; + const { pool, deployer, dai, configurator, users } = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -398,14 +406,14 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Activates the zero address reserve for borrowing via pool admin (expect revert)', async () => { - const {configurator} = testEnv; + const { configurator } = testEnv; await expect(configurator.setReserveBorrowing(ZERO_ADDRESS, true)).to.be.revertedWith( ZERO_ADDRESS_NOT_VALID ); }); it('Initialize an already initialized reserve. ReserveLogic `init` where aTokenAddress != ZERO_ADDRESS (revert expected)', async () => { - const {pool, dai, deployer, configurator} = testEnv; + const { pool, dai, deployer, configurator } = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -431,7 +439,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { * `_addReserveToList()` is called from `initReserve`. However, in `initReserve` we run `init` before the `_addReserveToList()`, * and in `init` we are checking if `aTokenAddress == address(0)`, so to bypass that we need this odd init. */ - const {pool, dai, deployer, configurator} = testEnv; + const { pool, dai, deployer, configurator } = testEnv; // Impersonate PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -474,8 +482,8 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { it('Initialize reserves until max, then add one more (revert expected)', async () => { // Upgrade the Pool to update the maximum number of reserves - const {addressesProvider, poolAdmin, pool, dai, deployer, configurator} = testEnv; - const {deployer: deployerName} = await hre.getNamedAccounts(); + const { addressesProvider, poolAdmin, pool, dai, deployer, configurator } = testEnv; + const { deployer: deployerName } = await hre.getNamedAccounts(); // Impersonate the PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -543,7 +551,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { * 3. Init a new asset. * Intended behaviour new asset is inserted into one of the available spots in */ - const {configurator, pool, poolAdmin, addressesProvider} = testEnv; + const { configurator, pool, poolAdmin, addressesProvider } = testEnv; const reservesListBefore = await pool.connect(configurator.signer).getReservesList(); @@ -642,8 +650,8 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { */ // Upgrade the Pool to update the maximum number of reserves - const {addressesProvider, poolAdmin, pool, dai, deployer, configurator} = testEnv; - const {deployer: deployerName} = await hre.getNamedAccounts(); + const { addressesProvider, poolAdmin, pool, dai, deployer, configurator } = testEnv; + const { deployer: deployerName } = await hre.getNamedAccounts(); // Impersonate the PoolConfigurator await topUpNonPayableWithEther(deployer.signer, [configurator.address], utils.parseEther('1')); @@ -775,7 +783,7 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { }); it('Tries to initialize a reserve with an AToken, StableDebtToken, and VariableDebt each deployed with the wrong pool address (revert expected)', async () => { - const {pool, deployer, configurator, addressesProvider} = testEnv; + const { pool, deployer, configurator, addressesProvider } = testEnv; const NEW_POOL_IMPL_ARTIFACT = await hre.deployments.deploy('DummyPool', { contract: 'Pool', @@ -1125,4 +1133,80 @@ makeSuite('Pool: Edge cases', (testEnv: TestEnv) => { expect(reserveDataAfter2.accruedToTreasury).to.be.gt(reserveDataAfter1.accruedToTreasury); expect(reserveDataAfter2.liquidityIndex).to.be.eq(reserveDataAfter1.liquidityIndex); }); + + it('Pool with non-zero unbacked keeps the same liquidity and debt rate, even while setting zero unbackedMintCap', async () => { + const { + configurator, + pool, + dai, + helpersContract, + users: [user1, user2, user3, bridge], + } = testEnv; + + // Set configuration of reserve params + calculationsConfiguration.reservesParams = AaveConfig.ReservesConfig; + + // User 3 supplies 1M DAI and borrows 0.25M DAI + const daiAmount = await convertToCurrencyDecimals(dai.address, '1000000'); + expect(await dai.connect(user3.signer)['mint(uint256)'](daiAmount)); + expect(await dai.connect(user3.signer).approve(pool.address, MAX_UINT_AMOUNT)); + expect(await pool.connect(user3.signer).deposit(dai.address, daiAmount, user3.address, '0')); + expect( + await pool + .connect(user3.signer) + .borrow(dai.address, daiAmount.div(4), RateMode.Variable, '0', user3.address) + ); + + // Time flies, indexes grow + await advanceTimeAndBlock(60 * 60 * 24 * 6); + + // Add bridge + const aclManager = await getACLManager(); + expect(await aclManager.addBridge(bridge.address)); + + // Set non-zero unbackedMintCap for DAI + expect(await configurator.setUnbackedMintCap(dai.address, MAX_UNBACKED_MINT_CAP)); + + // Bridge mints 1M unbacked aDAI on behalf of User 1 + expect( + await pool.connect(bridge.signer).mintUnbacked(dai.address, daiAmount, user1.address, 0) + ); + + const reserveDataBefore = await getReserveData(helpersContract, dai.address); + + expect(await dai.connect(user2.signer)['mint(uint256)'](daiAmount)); + expect(await dai.connect(user2.signer).approve(pool.address, MAX_UINT_AMOUNT)); + + // Next two txs should be mined in the same block + await setAutomine(false); + + // Set zero unbackedMintCap for DAI + expect(await configurator.setUnbackedMintCap(dai.address, 0)); + + // User 2 supplies 10 DAI + const amountToDeposit = await convertToCurrencyDecimals(dai.address, '10'); + const tx = await pool + .connect(user2.signer) + .deposit(dai.address, amountToDeposit, user2.address, '0'); + + // Start mining + await setAutomine(true); + + const rcpt = await tx.wait(); + const { txTimestamp } = await getTxCostAndTimestamp(rcpt); + + const reserveDataAfter = await getReserveData(helpersContract, dai.address); + const expectedReserveData = calcExpectedReserveDataAfterDeposit( + amountToDeposit.toString(), + reserveDataBefore, + txTimestamp + ); + + // Unbacked amount should keep constant + expect(reserveDataAfter.unbacked).to.be.eq(reserveDataBefore.unbacked); + + expect(reserveDataAfter.liquidityRate).to.be.eq(expectedReserveData.liquidityRate); + expect(reserveDataAfter.variableBorrowRate).to.be.eq(expectedReserveData.variableBorrowRate); + expect(reserveDataAfter.stableBorrowRate).to.be.eq(expectedReserveData.stableBorrowRate); + }); }); From 428e2582a3b78624204d02ec2934bad77176c57d Mon Sep 17 00:00:00 2001 From: Ernesto Boado Date: Mon, 19 Dec 2022 11:07:51 +0100 Subject: [PATCH 82/87] Clarify inconsistency between `getReserveNormalizedVariableDebt()` and `_updateIndexes` (#754) (#768) * Added clarification on getReserveNormalizedVariableDebt() in IPool * Updated docs on getReserveNormalizedVariableDebt IPool --- contracts/interfaces/IPool.sol | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index 68d0f11a1..3faed9297 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -571,6 +571,13 @@ interface IPool { /** * @notice Returns the normalized variable debt per unit of asset + * @dev WARNING: This function is intended to be used primarily by the protocol itself to get a + * "dynamic" variable index based on time, current stored index and virtual rate at the current + * moment (approx. a borrower would get if opening a position). This means that is always used in + * combination with variable debt supply/balances. + * If using this function externally, consider that is possible to have an increasing normalized + * variable debt that is not equivalent to how the variable debt index would be updated in storage + * (e.g. only updates with non-zero variable debt supply) * @param asset The address of the underlying asset of the reserve * @return The reserve normalized variable debt */ From c0c00dd14246a649deb788bd6d94a4954d6ee382 Mon Sep 17 00:00:00 2001 From: kartojal Date: Tue, 20 Dec 2022 10:05:49 +0100 Subject: [PATCH 83/87] chore: bump to 1.16.2-beta.5 version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0002302c3..2762a7471 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@aave/core-v3", - "version": "1.16.2-beta.4", + "version": "1.16.2-beta.5", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/package.json b/package.json index 1d7644f2f..afa45069d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@aave/core-v3", - "version": "1.16.2-beta.4", + "version": "1.16.2-beta.5", "description": "Aave Protocol V3 core smart contracts", "files": [ "contracts", From b34d6a445e92bfe54e53565a029bfbed12d85516 Mon Sep 17 00:00:00 2001 From: kartojal Date: Tue, 20 Dec 2022 10:11:34 +0100 Subject: [PATCH 84/87] chore: remove github registry login --- docker-compose.yml | 1 - package-lock.json | 2 +- package.json | 3 +-- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index b2fa6abd2..c22d4b5d9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,4 +22,3 @@ services: TENDERLY_HEAD_ID: ${TENDERLY_HEAD_ID} DEFENDER_API_KEY: ${DEFENDER_API_KEY} DEFENDER_SECRET_KEY: ${DEFENDER_SECRET_KEY} - NODE_AUTH_TOKEN: ${NODE_AUTH_TOKEN} diff --git a/package-lock.json b/package-lock.json index 2762a7471..e7c3ac992 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "@aave/core-v3", - "version": "1.16.2-beta.4", + "version": "1.16.2-beta.5", "license": "BUSL-1.1", "devDependencies": { "@aave/deploy-v3": "1.51.0", diff --git a/package.json b/package.json index afa45069d..bd1c93fdb 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,7 @@ }, "scripts": { "size": "npm run compile && npm run hardhat size-contracts", - "auth-registry": "npx dotenv-cli -- bash -c 'npm config set //npm.pkg.github.com/:_authToken \"$NODE_AUTH_TOKEN\"'", - "run-env": "npm run auth-registry && npm i && tail -f /dev/null", + "run-env": "npm i && tail -f /dev/null", "hardhat": "hardhat", "compile": "SKIP_LOAD=true hardhat compile", "compile:clean": "npm run ci:clean && npm run compile", From 3e1c3c24d4de93b071d4e8253ae41fb70b7d91b3 Mon Sep 17 00:00:00 2001 From: miguelmtz <36620902+miguelmtzinf@users.noreply.github.com> Date: Thu, 22 Dec 2022 17:23:51 +0100 Subject: [PATCH 85/87] Add PeckShield audit report on 3.0.1 (#776) --- audits/09-12-2022_PeckShield_AaveV3-0-1.pdf | Bin 0 -> 341086 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 audits/09-12-2022_PeckShield_AaveV3-0-1.pdf diff --git a/audits/09-12-2022_PeckShield_AaveV3-0-1.pdf b/audits/09-12-2022_PeckShield_AaveV3-0-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..be293a4fed30fa13d6f56c5b938d057dea8de34e GIT binary patch literal 341086 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

tIka>tZQK{N;*36T{)`U91$5;}BrLjj;R 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 literal 0 HcmV?d00001 From c38c627683c0db0449b7c9ea2fbd68bde3f8dc01 Mon Sep 17 00:00:00 2001 From: David Laprade Date: Fri, 23 Dec 2022 11:36:15 -0500 Subject: [PATCH 86/87] Make AToken's initialize and _transfer functions virtual so they can be extended (#774) * Make aToken.initialize public and virtual so it can be extended * Make aToken._transfer virtual so it can be extended * Make AToken._transfer/3 virtual for consistency --- contracts/protocol/tokenization/AToken.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/protocol/tokenization/AToken.sol b/contracts/protocol/tokenization/AToken.sol index 7bb079455..4abfb1def 100644 --- a/contracts/protocol/tokenization/AToken.sol +++ b/contracts/protocol/tokenization/AToken.sol @@ -59,7 +59,7 @@ contract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, I string calldata aTokenName, string calldata aTokenSymbol, bytes calldata params - ) external override initializer { + ) public virtual override initializer { require(initializingPool == POOL, Errors.POOL_ADDRESSES_DO_NOT_MATCH); _setName(aTokenName); _setSymbol(aTokenSymbol); @@ -210,7 +210,7 @@ contract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, I address to, uint256 amount, bool validate - ) internal { + ) internal virtual { address underlyingAsset = _underlyingAsset; uint256 index = POOL.getReserveNormalizedIncome(underlyingAsset); @@ -237,7 +237,7 @@ contract AToken is VersionedInitializable, ScaledBalanceTokenBase, EIP712Base, I address from, address to, uint128 amount - ) internal override { + ) internal virtual override { _transfer(from, to, amount, true); } From ee7d556e1a968f8369ac5b65868edb4f5f066956 Mon Sep 17 00:00:00 2001 From: Kirk Baird Date: Mon, 26 Dec 2022 19:53:02 +1100 Subject: [PATCH 87/87] Add sigmaprime audit report for v3.0.1 (#755) * Add sigmaprime audit report * Add exact commit to introduction along with PR number * Update report to version 2.0 to incorporate retesting * Add context to the introduction about the additional testing * Tidy up report and change date in file name to today --- audits/23-12-2022_SigmaPrime_AaveV3-0-1.pdf | Bin 0 -> 351225 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 audits/23-12-2022_SigmaPrime_AaveV3-0-1.pdf diff --git a/audits/23-12-2022_SigmaPrime_AaveV3-0-1.pdf b/audits/23-12-2022_SigmaPrime_AaveV3-0-1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..317d9dcde97aef3e2c448028670d24f1ecaa9418 GIT binary patch literal 351225 zcmeFYbyQs6w7H4$)~s1`|G0I0@AKJvpL@@_pQ2C}mtR?KEgjy{uhZI9zS? z@8cqf$OZ#di^V8GG`_pv!;R+F?ItszYL}3@fkh{WDWIdCx{mCm_S6-xwti3|s4*#<>oTY~7`==< zZp{F8bhib3ALJ{!(nOuW8dWOc&(`B>4ky=1w&zh>PhTxb}eR%EiP3{ zQmz)}OQP3hAH&ig-77(FmE^3F;4K`@{~K7ZsXst-{R`mg-p&@pOxjAOwiae?@Jwp% zrfz>rB%J^buh_rd|F&R(XHr&|&}Mu!hJ~Vug9R})leLqB1(Tf(z>dky!pp((&zFknH{6Exh2hi8(G=J%0kiI!SvPC z|0Ybv(b7rW#>|bF<&Vay@JynjPF}=%%&!@CHa12sW@auf4q_HoE=CRx9%c?!19&DW zfRnrPYtcXLRV`ed+yQ15uEc+QOTx=dO3m$6!@oHb=D$B;B7el0nY`X#ok~#f-=O$g z>BULR!u@wB!Po2Gy_19I|I{nf+0>ceh#H6yn^>DySlQaz7~AGYrw?lkU==IFk|TA& z6O$`z3rz@z@kMe~qwozciT&av8Mmw=SV=!c>ANRKlXBZ|Ttx;)_N0W}vj4 z{f;1`{H(2|?-}APun7rII3GEiIsy##Qx56dg^q|QZmX}ORsi0Q=Z#Toj~oKe&slV* zRz`l{=eyGc!j9UPm&=DsBYSh7$K#>>b4Y&&;eE_eN7m!+_3@Cm;9O}`mTo}B3eg&2 zo}ktc*XH5Gf$Ow4+ksc2Jy^Gw*Sx{w8#d&u-@b$ajkK$^HvJjn=_+G zyB%#NT*7S#$#$}nWBm)}Gcg)qKKRzQ}!3u0d zRGd$N#u-@-l13*^k~N>( z>o^)Cq;0hhvEQo9SHL4+?6@qAPHblz{Ug0AS5o?*9TnS02+J|a?|5wU<0sRm68nS? zR124;Va#+Zz2OU#OqUD3-|d@iuDlvpjmbB6CnXH|AakL9GvV{}045?MKS4G|aqSUW z1spqwW`upcz^u<$MLo{c3#YF()ZZf;rnw|fHg%I8%E>lzURbuob?COLlS?y<$=q#-nx2v!bDRv|m||bFjNNA) zJ)(q9DFD$AC765ou0-v+vX5^2*JL%@m1=6uckaFGvu^-vYHP5hScs9ih7U_;HE~QG zSt?D1Q{qd{%+8aJuZ6Y}HoP=rv~VdHUb$3v926v~ z(-bmUm}c3AQ}Lw$-{4?@%cDu&$!?HKq&s0-l``Md)@{hoz~~!j`5MWKm}Aia6M%x$ zSjpbL>YF53Me8?IpXceYS>xMH`Z+Vh%trF&XM)z7;+82qo*QJYt|QsEvx3R!$9a^DvY)OPqKPgs8e5CfS;+8Cuoj_s}A9U)}1W=WTS*Jmz#uN>r% zf``9OR^M$;78w#hXD&lrMqb(0Qm%o+dJB8=dir_PRI3blcH!82_FhE+s6fi z6;EBDPj2Kndt|*D^$7d{pMO57l9`*54Y`RJvh*v>(vJHB3_n8_P-gYJWj079fdX&7 zdQ%Lay<*n13D@%J2CZL(RWH`7=2a$O+piy>yQ*VB!a*m?a;fQR?)|v z$wW_}S|jOv^!Wx*K8X+vcjPX~-s@ink;VB>X^e_iaIbVfJnMd%^SPPpKr(D zEEw*c89zKY&?(MnPvbJ|Rf-uwa|Su)>4dc#cIOEKLgqGi={$YOv>Xu3>mPHecp&S* zl~2(V`N-WyEqE_YW62X1`fDdFU3Xq3)LM|_8)knCY`yF*+Q@bR>&2eFH&+oR3zKB{ zW3ez91eHH=pE$M5Moc1|KGjs&JLkO>FyyLa{=~e=q|g9Uf&AVzmMjl*F{}tp(XdJL z<~RPkvyt_wQHl;29O96#A26l}bmp}_XP5~3R`X)oatApuD0OwRXYrradjI5zEt*-M z+ERAtM=**x*5)Tw`Hj(V&0jP=UzN01MBIctXw5YRY3}`EvL4tdhk+DrBLt6GJa}Vl zB&F=F3r&2Wu0(2iv7dHxjo#h1j!qocq@bks#VD^2+Y7n{)HCijd}~Q=T+>j*u1G6) z%97e|F5WHWxo?e0#Q)xDJ`80Q8&{#54I;|`)4}{kA0{~}BOzyn@uDNN(Ok8YViIa@fPn-m+#dpZ!W6uttp^oDEEV+~m5kE}R zhGvQ4qn3%DI!mwz3pGcxR5F^5{ddMK@IW%G@!I@M#7tdo&zkm%|91&A;eKhrE{zpSy2Gu}($ zNp;$tQs*aoQ~yYPY<0qv8>i}HfqjFEjL!URKGwsfeI%#Y*ZOv`)-i&as{i81uQrCR zZk^6~9NV15O4sl$l*niviM0!HNYy*+_SLEabY{4zcg2D{A0(ii!xT%m-)Q!jo9JbA z@#`4df>;}^P=is6r5zJl&f_qfzsZ<&$lNmWtm7GLRxx|yiteHnk4eRT?xF8`r>-I2 ziEQpiGl|CrZG%S9+JzEaT>gm4z?IJYt1)H})8>Rwkf(-9%}_(cv*4$MIL-4G zJi6Eb!$#;|>GIf)Q*`&IFqRQ4i8X#YiRBS9)YM1}gb*E?8keQzsyb*DGtCCi+;2F9 z1AUWSa=o$rFtv*4p?EyyGIKoy+sHMIOe-^}FJ40F`K_h3{F+`0EQ8-k&yv0IWkPaL zZS}AP6FkG^h(r{2u+l4+px5x;U6`4zu_?26UJr_V&{X|p&8-7?13^X{Gz`W2GI%Br zId;KSiS!Rq8Ms_SoC++MZ%8qXX`a88VzJ}of+m#9<)5ByPptvUkVNpZu&lZaZ)=~a zVxo#NevnL&KjC-07>EW88qSk#v#c@P`X5l|$mrJSbpxAB@Y(*?)hlRzC@oH*`!JO!_2H>8rwATI$#N5goM( zlaxV4q1kqCcCW2<*lf52PL+fq&t7jXn4RGUqdTe&2`%;3EFa+;74v<0+16kHGo!Ws zXKF`BUG?sk6U=v^>sdFd>Y~E46(=Z7(1vI{*djVJf}ix`XPmn5343-dvG&)gmubCs z@#fx|s-o?vW~qm%aMM$j36oJlfA3O*YqbYVPSu$dMp>c}j}o|C z_IJo3Fo?q+WlvYlD_Q-@p6Iz$CCWby$&c4a zVQ&x&PYQ%Et1gVoeVSJ2U-+4OMXtvYOa8uwE|{m5s!kqGt+DtB%Z2j#F8dabVbOPe zce{LcD8)yr@eZgHakI*3q~rR*0cFp1wF;~`b@l-jeP(v^?(^MO`_M=z+U6ulu!8u5I!>3B66XaZ^Jdasq|uj=y%=8?y?NI@UV(E$V3)ATQonY1G6hP?LHdXtl56EDbQ}>iS}et z&~Th-F9WFPlyH@zKGeyt`JdF81x2Qh{b*=U+f4r!$haQiiW2h_KUDePyqD_Lp7lUL}Z5e%1WQ2E+IY}Rv__H_I*OkGyt{#S zJ=8yVQxk(3J1KghsKcwR%kMfgsq1>kyN|0|VAs^v`-9J}rGWfBTeb$Mt-GMAGJ5FdsTrZLzhSYWYZ(fQ5i0Cuo?W4qm@)Rmup4CMgN~ZEgOz0<T{bLMmY>vwdeJ173Ew%0+uXMA1e4xzR`|s5mTZ zVCq5VnDHEp($taX!Lbu*6tUgP^bF(TRe~ayrnd@yWLJnu$)Oa*q-a^HW*VpdG*;6D zLRXRCxUUmdAEfpjvr|G3WF{!BLvy8U?wwkaTioNgxwBCaOg+*m9;Ws|g5Die^44?0 zo7I@Q!ecAVDHJ-}G!fBMeCn=UvWX=l{iG=&);@r|KcGpVTb4|5#D-?_qZ9oXO6)md z#p&*RvUCcIA7bevfyfza6JS%`&^fuoUdVzYDtO2czRz}x@$eHaPV9ZDX`i@zh-8mT ze&-z}h4YPcyW~V$AZpVviPHp(*jZ5JfqPAwv;f+Wl2D2-1#sW-)MX|@( zc(Pz%Ui1Z7)cjj&?#GJZi#PgPYW!^yCm>fh!fI|-?Ha%eGEc*k++magriRSXK^m^g zyY9Qm8j8woEuZYPtRaK~nxit+p9AW%XQf>GkD|IM6Fv)zVh5QicQiuj3~@0^OsBK4 zgUT+B9d=^7RIR;UaqcY(wO#e4lav*uLYFNN#3bAEu#4|Fdc&tsOcc3BQLfbbPq?H(79ce-;Fs^xHWy7M)6gO&z8Wj`@avbio_PfDAY3}85OH5-h$*w7?g*;~VBp)zzpUA;G*OAD zZt&=Kfw^!7;xXzkWg-asOkEX9B>vb*5`1#~G@E9Ew&i+V)D$zo`C|T&!rN?ST7Mc@%L>2e zXKyPXyGd;!qdz}i@JK;o#Slxy!E~@_CUx_3;gBHw1CHf zW`%>13llRT-1r4;lCcaCOH+;jE(K;m&{ky|-V1l_vM1D--0kRBU)=(u+fTudE+6#p zxE^Gm^i$Vp@3d3dawY7-cY4>DaDyuFr1n0jj>C`W#N;*{&85XI?@)ZW864#fZ@V9T zCqEe-K`R+_$;;_v0sW>=MZr{9%dnWte3kHF&*8FOp}@l>>$r4U*WW!dTBSVHc$F`A z+COVx&s)oIWa)R^_RonYt=NIH($8JHMdgLQ0WrNP<%=JlX!}Fe;$->C2i|tc49Ey2 zQrF$5`rgRi-t8wLKB zE2qS(o}}R{s{aTg|IOOEhAUGlPU{yB@G~9_ugfPzquwAMN6V9lJUh;Ia%#Ea$-eB~ z{8}ri-`$M2>h_f$*$VVFqxQvAW`>EJQfgD@G2X6B?+eiF7$7zG{{B5D*^JzUe(VqQ z`1J(({jk=ENC6Aoz?k(!v=WbE*}xGu#8Zuoe*Z_pe&s!bU8}=+k@KbENJuiAv`@9$ zPiL>#tFZ)X+Ff3~{=F*Bj1Eto?MU9SJn5)+dZI#QDrNFB0G9IQe65|zwDX)aLL7rN zDze~f%{dbfnu>RCK{(-1}Ij^}>IUK*c z#eE68o2nQw%x53cfqf4D1yy~bYeJg3x%rEOZ_ja^Xw%m@rC!fDr9Y@Ue(0}BrDRq1 zNx(SzQfWx75k`#7#$y@FMK9B3hqGRbJlrEyjQ=#99Q2KwCka8Fcxy9p4#iIKMe;yS z<0wRvtn%j%gslqpR)O6?396O^I=2eO4b}Qj8F%h=-85iaqQ%WUisRc$`2?R8fBE-Y zP1u|JGz>OTUQ#U^?y%h2TIwYCdp^AkpSNR*8J(a3PmR1Kv^_8S-_A9l#7w>$xZf8f zP#k?e7(9*gRFOEPeTV+7soK51 z|G2eeLfviZ8`GX9Tw%Gtot$HK6EdI0gy63-hT}4#3;3leiw0kD^w{G3IFH1a>$eg{ zuE*g`F&n}JuVniAF9Xqx4_z~?=v^;r)tqOH3JwopD2R)eT##UIvC$OXAuU#&3$H$TcE zV}|}x3P>xE+?-zg@nJp~`9_VMDKMH33Oi8LSwp(BVOmLWuI%H7&sI|=6%uYb2YxyE zVt{&SE?Oa6xl4tG-?Kz8+=C>$V-x1sMGp#7&FS>2q`TroThH$5_xBIo*FtGB1sebL z6q}9X^<4SCJH_T?=lEa#%yX*wqOQNHP;<FCOrrZe<*O0a$-&(89CnAQXaZhBk%xvOG`b)kXmq3@-W`>x)uLVaJ> z8m2$@){U%o{HBe^NX$H8a@YNqBEnT8cOjoR5@(q56z}~P_C%v^@jdVxVrpN-GZhcb z&AbP0>9E%Yq@Tw_nHh+H@ZSTnEcFk?07hk;H$3=DTw}tqaGO0mGQ|7_oCTFcGAz31 zo29a4wp66LE#H&5yffpYrgUj-GByvkHCuRo30jQp!}_;h971f#bOEzj?|2W9X9Dop zrj1zh>Zde2-8X98X4uw0IqQ`+@09L-A{$RE1PpaE^z-IJDWA7msk92eD^3Y8?*7#N zE%5Fz(tmr-9p7w72XnR;Kb|ex*14%&&=t=5PI#^M#`5IwBjzc(lpPUG%$l{B=Q*7D zVHB~L&xqsphx8qp*?gru1GFEfF)hw&?~kVo44+q3WB96U7tQhhyD!*~MZR zJ5_n83(zd8jd&dt@&_)@A=?!QPg;H*cAFDUxL*OJtP|R~{ixzO>j=W6j=INOFl+6D zNm(hv4=Zr8so6WV7r^*%Kpi^5&~hrTE6MrG(z-pw}P$SEuIS{I5>U%E`?3 zzxwU6S9dUWNfN#NlFm5=me>?FM_Jo1ZkysL%)UebXE4|nO5xWpQH;Pv0u~~nW(_oB zu?9&^J;7px`kf2bOO1(`##_=;$mkqbn$;Rsh}L%tY^&ALj3i4FOLOL*5xF2$r#<&r*%_^j(dwFyGQ>QnIXkhj z+@&D4QxUDbHgxh|6-QVxRiemItieqf*1+AL9FF6bA5Nc18_b&w;@3)CxR6}cEHWuI zzqV5@U-0}8&uI2S#okx4Z~NSa!nzhduldYK{giWPJI;II8DX;oLs$%HU--6t5ZVD2 zIYL?HpDk(?ws>|vXzCuo^??0eQeEmU(&jM&dFfT{BB%;a0xBaSt^ z$NkyS(#Lo#hxj>7fAw;6rN^uF@oz1%agrqh`~c}z+mh%#>4X|P!+7-z!XbU)(R z3o4HT**>%%Z7j>hecaDjAIxA5rVdntH4B0wz$nTC%~pRDZpQ+D+oKR?%5UCSq+7Om z5Vm>wB6Jf+f*KP>vSnA75($VYvuL~V&GeJBmb)ZgT2T-vqJ5~L-Nbebg=XO-`hu^n zpemq-Wi_ha3r^uXuf;+0PooWe2Q%Kx!P?L_Zgv$UNpD37P6BqmvBJoAo3y4U8SF5GA&2yM_3muub{FYC zAbHho4BjG%dk54%NvlPbfn4B7m3ptole?H2QS~~NO#H`f4uq24tHD4G11lUH_&zt? z5)KR7XT<~ZD;kOx9%Id?~Vq26NoYMDc?hI?MD(; zRx@n;v!I^Rh0zj)!oei{NtJhSL=W7^OB~@QDx36H`_8;(mLoCw+!v0Ucp3Gg!Nl;* z%5crBo1tVH@XoZVhthJLKMe6rjG_pV3Qa!b8)37YzyBB=RINEaPLeJn#$?jE4@^(a z-9ZSop)|eDsD6NbqCg1$gxs_PWRAUB{}%g$jclaC64mK#Fc!G1lci0>auAu2CsO&8 zS4+ZpqnGNg3lUuh&|z0J6iSY*GkzCugR^FEK=_u1GzXl9=VWw#;W~Z`E272`0KDF1 zAxxscq<>#fLAZ^5|Ivkq!@Q`z(;Wv55U7hSfCTIsn7At_8IlO24Q}u2MXfBUf?{$) zLe=C|F{QP%s5-M(@=iZ-PG0fb=*Gx$5~z!;^qOB*`P$<9n}%-Cmw`*JUhJKVj&yB; zUQ2sd!9uX3Gf}s+;fFdq$^;^l`eW_pzk!X%nAT*9)#^K;Z?=w z?*dy@bU4|Z78|knEH}xp>EG!_+HbT?LP!D(Jzw_SW z4o4z@CYLE1$V4wrXB0G9dT$qdIQG+L90qKkc0N)*tO2vJYwXh!_T$$jT?e`D!AS=_ z)HVwpV;-vL2@$lh?svR&+$5P~s(lPGw$?(B|uVCJrAEnBCp74@l1sT5z0H{M7(L%U9IlI?3ZHACa< zTQByO%}a2-M`8{31?ImMS-9}de!CKz*oNN|h`(7OHTkc43^fl-8#yMbZ?%C`j&t zhDeG=r@8Dn(szpX9TxfE$IuaG|I)`&_@-Hj0vstB+=AEv$I+7&CV^)?tsiXPQeded|`%(FF&ncB;?`<-lGL%}eu+-Id*C4Bj{FU!)9l8ZCF5?Hf79|`p| zF&rT*cF$p)=h)G%hY`*ai+;)3W1jQm;T4_9(CQ$EI={w34qygEicX_leB!unx9_QI zc2$FY`3vOiws(GEwDf20o{`ewMA868WZ-cHUOCjAKUr0(%Lm^|qn3#R_s45wY>)l| zWVO>K`|IhFXEb;8cS}Z?AbU=wDO76c0Yp){q%o3-zUDq7*SL-SNpIai+TdKYf*i*8 z2fq_b%Z)^60zRkp-tV*WlJASQ!q9Hkl(%O4(IoXK81X6jO5QD1v3 z(MSKbDVM-tz9{fibfDe9$` z!VqwIs`7*^%qo18L; z6V!x;viJ)KE`bq2VY8MJX+dN1{3w|5288!UPpCDg{HUqjzWL&%hL~p9%=hRg=BVsN zz`YWX;o;>Cnqi_2x5V`Xe&?Py;3 zhsy;U_z>~|e!my~0m~Ae@m~LnFzlP(NpKJU)mDE6|Mz>}Klb~-&EVo>=6MB;=ikx# zgUvtA@RteqO6VhIQU{ngx;mQxEF8_e;hAKJ-2mL<$ysrGTf#H#pTJwNAiBo$&Y9xFiq z%~F57NBpOp@dEFki5P6L{gY@Ju=*$A76bk#u}7Nq&veHn1mFEF$_@j5_?r;M`Tqy{ z3&j5?F|to#+3~TN)a>R$els85_~d^zH%?gYG4D7a6*SainM$DGaT#uO3zP=GA3{<6TdBapz_V z+zVYUz^CdLp)W0iRt@2=ZuObsj|18)gdG!39tTld3Shk)$ARtf{y3Uk^y>iF5A%NW zVf9JpM3}bku>zQ*|Fv>wKR`s$Ep|b?mk4W%O;7UGVLQ=ZUHh|)AtO#7qeJ-y3d*Y{ zWUn4=4EO5$!r>-46q}5i0(99IT8}QGg0&WZ0)bxSwIgh;ALUf36m-04FA>9k8cb!3 zr|_}h1S??vKM5zSgUo(>lK)Iww1GnSuTnaVD$H<)#04}TNyPtE!u(3nO92>hyX5X& z2+(r)&&0LAzGA?6^7NG9ZCUKxOQiU(f~zc6rr6gJuj?oYRJPear2L7{D(F{a?5Dup zITpegSX$@(Sob4||4|V=Vuo427%EivYOsHY*H~@QZ;3TKBvtzy2KPTTm%2SVs>`}6 z`AGMSYj^A5nLIc%gIj(1PVPTO?CL-1W?4eyXsnAen*Q={7Bjw1cRfJ4Q=cjDgUv(! zi=o>mvppfiH)UrVgX=W3pt>m2zs+CcMY38EBO$*I#eCW%nP8Ee>5mh=dGlE!+4;My z#$rF~-;mO%31m}mnG{U_yZ983Kp+riYT=ihOkD*VqUpa)rp>iWLtgvnFZOf%Etv5N z2=H7)xtOMvgN*-OqOw08%e;tW>RQ+kE&kJ|%U0-@8XeoHl1~i37y~Fo?7312tFO)5IFu`Idpht zxMq?ec0H9H3MfJv-2wg};iC>6C|7$aPnzhqvYg_WNx_4|o9AbL0{<&_5a^k6aA#ri z`ODREe))+dlhWo(jnv^7r?XRYe&Gj>q~QXAM!3W6tfcuTX8!nsQoLK66X)nV_~o;$ z=Z6R0dV%u?G3gy(hi66EVPPZW2LD`mXHfBwkgmqyL)lF=1lK2nK}j5fF^UYfUR+X- zKG}G=bl&ryem2CNJ9o=67nCn@v1l#YJMk47kY-eLKY;zzLeyzbF# z?Sw(Rw|bwF3rM_CF)I7v8HsmjUf`5anLy<4P=R%Rw9wYm&T{lT+7s~fsa_}!EVQ=r zrau6!dopk%>T;}Z@D#W9+L7S<1lAKbbKqoz@)%F!L#DI_)dxSL8i?KzlZC?9F!NjP z*(XWqWAA&TENM%77+$hiL^trW-%IHF`bq#5^W@yXE#WMq<5vHPncL-3b4RThP8a8T z4gd^hgXRz$o-(R9E;&&oTQN{x>u~XITt8>^!)X4S1ZT-S6HTBnk$9X^4m5zwhELWEf{Z9LC2c;7#*ihR+t6U_d zq=z*vd7UqCwzeZyKQ&G^x4wGPqzzdCR*9Y)9iG@>UHXT)6D$K(8Y%b@uG-(L-*$)B z;9P3X{1nVAPxii|y*a}qFveZoI;Uh9wt7g}wmb=axWG#@7OlEttCQiD^7(GQlXI>S z*co9cC8hfDr?9)H;IyqQWWG}PmhLF_=3-P0fk=*MIsuH^EA!=9&w$PU)IW+7Kz1+x zVqonic&{}2aZ_1*IJo7&pcqn?RdRZ8TVLm~qMjF#6$5Td-j%Z$oaNC;N|1@&WqUFn zk(ffBjt4ij4-57GVs4fDTAgl-Cf@Z<<%Kb;NOxywn!PwtAl?~W1)t%#yTdKTXehtJ z9067RwaaC5U2~gc_m|hF+;+O4nvrKB=f=FPo1F66fw@L^sTk-~;2C4pzpcLZR~=;2 zLFn;pIG^IU;JC=hux__jFqLA&O7$n*-0M&yZOhmFGLT*Clowaaq7mbprWwdnxYNO! zP7S!hDWJo)b0n)&W~y>~g2>F(>B~v0g%``Y6=%`#)6~e33Ss>f2NdBntM%7E>-F>Y zN6I(TFJBY2Vk6n>x7ZviWb~T=_|kvieh%S8nu;m1t)fv&F#BmZTdz<>HeHji)jhJvK*w5Uo(weLEz> z`(dHPo$nKf(`)5E{9*NGX6lP#PIE3X-;+5PE> z++=?^_R%xJ_4agYJ5E-Lo0P=u41M~Gl{SmRBG{rd;=OqJDPDAGMV-=D^cBXW>ucM? z6C%gPr6WI8FTp7zxvzhr7S)B|07aw&;k{!}g z1#Su(-8`hoL95K0OE=T%)v7(+nW~P4Z3cFmBgl@+WUPV%&vm1MzzB;zD{s@2Bn_bJ~=~KG<8RH=%CC)v< zXtlc~LtBIbKXgngo7hUzDp{ulv z@^%Yr{;E$_tp+D5F1CVf`fy}EZpra7T5$LB*&WK?$%Ey}Ud#v4(zbb%KL$ zgm{c^?g0~ryFXW+Wqq#t!n`MB#J@q6-+Ao$Z=XI-A!E2MkWjW8FdDeOj9aU%39We~ zT_8^gV!^9kv}K1xwZx^gxDJh2ZD?szm&soq&Q&ICvo$n$U7m)G`4n{0Qj#R~3DmkbJmE8Q0?U+*6=c!m-1Ke@nT|#!_i^^cAg3@ZdhYGA(ZOuI-V3<7{Lb zaLp;GHhe12j5Rnbz{FoMjx+_cZ8KP0RFo`$F_Fz}=ZpTSMRw8by}<0%?Tpyy!N}*W zmOQN&;{k0o-*xO{aPeuk1mwkjHXf|Lcx#U%;4YbxU>^CSekDSF@e9SMI?v*-2`d33 z)CqwYiHanK;|F_(j3l@Aj^|LYmFdI%{5RG#PhiU==UN6`i?N46#LPs2# ze81j_Rzd~eep{+l`xzLvG)1gfRz$=+^F24vjc{#pnvla?0e3O>yyIwmsb+RQl zY;`oGm6CFw(Rb8xbuS+zHUc_ff8wMs4yx@aZ8U0hTVoQ!by&Xz7CJ0V*yq&EbY}^C zUfOyBl3u3dnB-)kOgy8s+=n~G;XLnq|6=L|2{lI%-q5a(WK^;#eK&ZxN~{lb-f^@( zxQng>7h-#?|4P*0kPi5XJ{ngj8gMFrc`yIAA`STMsBjq-I{~cDMde(mI%Gw?lIn?m zOuE|Xm^0+v&%W3e1MG`qD6ZqN_hP>k{MPDvSq+iC+aR`ilG1%0jv0eof|RWGPwsz7@T^sa`zDlyHIRtAg#+gG*(S1zD5FQt3z9Nb{!$Do9>a3#-(FHxm|beIY8!I zjBiOgun&#tE)-}P=PrvQ;8gdH*6#opo*{&S|BDm;l^?WX5D#TA|~I53?^w$MYJJV?oPh+gV$3RHufx%aq8|l1Og!+^X()z32{9;W=5~nXO%yVq0 z4pd)sW@cO@V^TY82Ywl3EYaL<&V(2Jo^+X!!L2oT0V6m`HeIP~MYynKN;P)-6Y$3nK! zrt6mavVyxWz$m+HAd4MVlsJ_^E5gh}xwI;4Tf|o930^o*A>~mTj&`k#U*?vK=;f|@ zJ&AV2Z*f%%jaxBIIb6Pk2aq5A1)fHZ%^6Po_|vy#wV5d)15v@LRA7b%qpJ~9%dmvQ z;12xjgWApafqwQ$^Tvrh;_f#{#)7F&a?QyI;;jz2DQ9IVZ^6hwGuV?6@hPDR;Z)k@ zIe2J@@V8hz&Y(a0oU+wS9}RBvip+ZCYN5R!=?+jc2C?j~O14&$wea0f6jCCpv~!j1 zKCI@$fR;rIv3?b9rAIo+xOccTE-Cmr$*8Qg{|V-P0%TIF=q;cEI*K35ZQsG`b7)o2 zB8A=aC}P)9p#gr(>geZ4M;0e%6Ru-Jsz8`}10lzGd90l(*?k>d%VNBK?Pdh$k-rP* zmL1}R#V$x;c*X+U$9{j2GGQh-h}u?ivCD>XiZFEKf%O7ZAFx+Jfy(iW1*0G$(7FZ( z`VrOMobF%>t@F$l#d4UiDVSDD_}=={UEm3<%OF@KS*Hb2ntOpN%_Cp#kicx0BVV0% zCeFP^1hVU=ftKsaI@?Qi*1VjNL1c}v1$)mTiKHf5o{C(Ell2o1y=EAdx zM6D=mP(j04!$7K3d`QmRNA%oiaJ*-6z}%C5A3JF4oGF)Y`F7o+(18WY$q@c%EeOkZ z?3xh7CTyJ-7qwKAbS;RJ~>4%ixve+!TfpSJvRTci)g3`WWv(K^w5p*Hjk$ zj!RaoPgOyj2N4{DgiDsi6~v2#JVUvl_4Z3+gv&_eJF<)A%-E>wpR!l_UZ zbWYgwIC{&y{2)d`5731|DCcf+bK3#gEmLN~ncxcqb;3Wn^Ic9_XrRU1s_TxTpODb& zDo7Z@=-{0QI}-5eV25o|05!GA+>CGyvT>!MEr=ncCx@7`>X>swl_8<#Hk-uxFj^zt zg8wp?gt6#L!GD|3P_}*N+=VO9$GLviNK$ zIwsVc?lDzG5`^M-;E(O(j%<}F>!{11BI(-$nz{0>nMod_^Byy_rd--1uDY7hC zH2iB`ygt=u+`qVxJ=Xs3_7962bKLt z`9`DUk2qMDDGdpJv`Xi%fA^L6{zZ{un+;*t9xuTraxdp~`$XaNqS(ZyA^#5Z#SLB5 zU|-hjD$K^J^sVOsu*`tz{%r&wXM7ff9Rfb;l_F+5cgtis{vf!nM`mwAztgI~upV2V z?pgC-TQo0faN#+Usa|&98P;#Nd})Q$aHdUxNHQ&Rl5}r~R^I zpybJ{i#LSxZBr2j#jiZX?3?)V?jYgUb@y9X6U&rhz0U zpyqkw5NHlYZfv15!|+!k-9<*N<`EX$nTBz6hEKDGTT(<3sJjd@p~I4MS~uCZ=GfSo zHFYFJ*6{0s<1~9rlQ)-!EXyU<36#&L)=QLFd+&oxU%7dX`#iP6!+7rLs>n+_9b6i? zEcP@oLQ`cJmBt5gkr#~fptBqwvYP%@QuJ%W?*4eqyG4r8``t+d3j%kn8qK=Z`!os{ zzL?SmwwirKzu><<&|JwOwmF3|W-FGFReyok>_~NDAM1xVVJ^j!5CfKmd7dmwltWR$ zgfQb-8R*q=>FxbYHPcH7D%a^EnO|~yaX^TlB4QA|7EiTK+53l zz5I9gHxf9PH7;eu3@gwneI5Ku_s83l4#tbN7ofqFvq!cE2Kg~h#@45Fy(z2vaG8}y zp7;yAxa|Flw&ThzLGP=Tt|OWR;BdMI%d{Q3kyeXkm%VzYny9BKjiYq<4M-&$v_$u` zqC>IIWv{tgs#u}hi?OUZEl?`=)N7i=flgq}i>#c}$0999r5E(U&PY= zCA^Jww-LzKE6>_nY(D8D<ad2t($JKpscE>JJ=c)wiu)eDZaz zV9;wFa55>N#gsVl$i2}+V>sY@sUEPp>Y?waaYxRSHz-<9y-4Brr57$WDzFudtJR9d zI?zry)KuOZs-4xlU3rQ}ljR7eUAO&YpZTmI_oI?6C&Ql^MzIX=VIUd|9lpbcMew*O zL|0qE0BXyHB*t;ILXXv=_dHOFNs`ncWhbla3I6^+*n6v}xSwWGln5b6AR$PAV8MdB zI|&fn-4Y1y9$dx4(Vw-gm8i*1Zqs;mjjcRoAbo zy1J^mt9#NFW)uxB91})jno6$ssAjt7>~KFzu7UZ@lrMAm0G~|)s7>1~qgxYC$Me4HI`uG(>$XjAJM=X}fgoKl*L(*kx zixo@rk=%#GITD`m2OmHOeX_E8!2wNe!wAJuh!+M%69%gEu$T5>P!8P6UaqGekdJ>@ zxO9j&gCo>r6MELNK_>vDEr3WmR6w9N>I&_gXqP~9=~gG6aJ*xB?_s}HLx>-BVmV%cx;3D0B7pgx-)6A>K*vhAzZ9zcig zjArI4Tx|=0MSMDVr$H|6QuYPkrTGL9EDL$7gtnfF=k35Xg!T3&jllGy9zdsTk*PF_ z`SB#^)2wEZ3E;Neit(WsEDSL zZV@bht)0gmtbx-Q=m0cig1HjA8W?i;-`1uE)>UnWr#4PGX1&ga;R@g(GT%U*d^C?y zfr;Nm5`})cFn~mUq(4k$#$XqVcM`BgWyG`MvC8DikzZGRDpvvVyfy<6R~rT&4k(Im zv(rH9gU_5ffpb)mr*auapv+;c^DtYsxx*07X83lPEgg&{VMQiSe?W)%Nge&UzPLxl zdzC*zS9#`9h^QbcLw5@18CPMWJHiwv;c*x5;sGXH$y(B9b>1}RGI5MRdynlff@kl` z-pw-c1MR8w>L|ah4+OhPK76m1TEFSzKGVm*@p8|+-IDF-rZlfC&G5(D#Cq2|zuxQ_ zbRgy|PR&Ul~KW;8Q)k5N#Yk0QGmkmdyq7NAdNEtyBFpZummT#)K_zy^Bk)A{>t- z6p&9TcY01a^xi}Mx2WnDPir4Q4*|5GvVD#nYHAYGXSyTIUOYeP!c$90s4I_~4o(Yq z8Sf6axtTz5JR<;C>HXdciUuEaOSDhvh^Mz}qFm z0WkJ>FzXo(f-nV;pv?a^%+bbE$~jYd#I*k88(Z69a1VD~udfT)tt`^5?DqC*rk5Z? znSUFzRl*%PRP*B_0PT;JDF}qe<2zV;%9d`&$#Hw4qQB1+Pp$3h_#rLnNZ@tOFpEz^ zEID5Dx#596Tt~iFn;-g2B_a=fxrD<2`Hn>DZ8}S*3 zS#q{lZtadY`m(e~;%DFa&FX3&r0B&xoE~l}1Fz=F@o>aMK`@q*0=^-6DqTK*NPSvG z^_6U?!ubi*RKlpC$N=p&Y=ws{^6Y8s;egd8xNBzW!r%O3hn{YT7_tB3R4=8r)pwyeO}pN`3<^FTO@ zr?}8MZ$0|lJaK_N9?IO!S-i((-awYO*k} zitRRxb}P&>7AuhgsHJ*4*FHXCTE5v@{HCOyU+-{LSb=+ky<}tlN{UqM-_+B+q15_Y zkBiKf=T!mmc*-kxS+a92guUxkz?}S%Q3VBC9~?x4gDB&xbQ92wB}M{Flr}Bl@|-~X zAir({1O2OoZAv*7#@Ww8H35k{8P)~xp{Iz{K;jxc0iZsqRzR>mRk(aO;Sv8@d8K7X z=No6e=yhq&WqZwJH|J^u72&?6jI)&Vy)k$!?I{;R^#712@O(aCFmj;~F>;Y{wG6TJ zyB*pySOXjg^+ZMm7f}9N0er%Ow{GIg6pD=()_< z=YMHqB>!&kX)Jic@$)ADvch@t5c|e_s5z6|^-Pl819kh?LAR>Cu6#NO!xt6G8F7Tk zx7B|W>V3{ZFq56eEf#%QeYiwe)}7>QtTtkm*9Sh-6E+Sv|CljVpt0h)8FH4~!<%>$ znzl1tVel?h;_p-~KSk_T+F?|U&3E${8tSVw`sMf`Q?TO)3mF+~(Gq%b;15jpa~#0_q~^#mKW3(yni z#Y@V;7(3)}+c~Lxf}(cd`!<~&j(-?W6a+?toW5qP>2H-V3j%4g+{6$kBu?e1fys!E zSlodDIfW~)>1al+KKuC}{lJ@g7R1x~T&}O_B$N!J_v4``pmBU>S#8j?duvsR7n1gh zXu*jbsHKVU41*cq=W=!F?fgev=gGLP9!KTcIjI8c4~6J|DbuyBVyw)w*p7@Sm?(I2 zb7;#1m8tSvR;NdhyqJRH!`3n(GzT$zR+3ZiQr*^Ec>0+3B>xe36!-^Vm%w#~#sCZt zQ0ug{HwW=W9=SLrV44Arf z(z@1zh({wtfd3LbH}I8qvB;*BsNsh>!n0&VDd+H6K7LZJeNRF3e<+svUJ2UJG}h92 zjp^w(Zci4;Rv@^$-;&j(Z?*$n8*3+D$lp+)S2tIz{2k4E*D#d=uFb!_+}9YZF!moj z{~+>LT#3BES2sG^Se|0-TbmDy7z^)muz;;mzi9}cnkgCZc95h8YpYIPlzk2~(~$N) z%D=nyV>VHY+}m4+{Sc;7OF>~i`dA@OwYy(VY>{+1-ZHGfDwj8GXm!vh_}AbI;2*uZKn11s9%A8 zK{M{dn*KXA>n!weTphUamw3AmjdJ}I{E4oFvF-kWJmE0LMM;6(*inL_*wMK#Kl=W^ zfzH_$JN9_RuqNyqZ`QBWIX16|P(GpaPY`E>@?1>*_@VRoW8^f!J%iG*v%DjE{RT{` zlVNw&k7a^s4E5)-pe6IRfom8nvm4ff%AuZqQ4u{37R)LIsI9@qRI{1BPjpY@2zR*2$)KgrS684>1m zt1pxw_G*l6W1p-$ZhMmbdnsx|Te!-#u4g)4$#-vaosc=oe=^PQNR5#W< zrYEMi3K;4@Si?j?Wgpkz^%+gw!lDTb?{+BrAvD@Lm7@uM!sePuUeyazM;y*eA<=x? zU|Q3Tj)-Mp41XdHlAEJb=|=s$wL$a6yh$6vDFrh^uxi~@u!SV^Wxzzs?r~Je$LiB_ zyS^6OL#dS&0o)YujN{h0+eoXZ>+}W=P0PE#Zg)@+9@fX5;plpsA*iB;3g%}$)E!Rq z@v%mngBgOz{yTaWc)s9DWmTX3GXUz|WYK`RUvS08*$lXLzQlGtD-caC((@V3!+_z}uRfIg z6L{?bNgIc67B1G(Gs(2#PbyzePSlL(UYH~6YjL4(rBee>-_HMaBd)MjVQQrk&fD@Q z7_1^()9do7TvfoRw3W&|tr(y;+8L(}K=!#?JgedUAUSrfALT`Vxd2}kL z+_81~EpADvYn6^<2$9lHz&Ef-it9IGA3oCM??>vb?CEu?Sq3Z0&#OBA&UTru_HY6u zXmvTs)*sAz1!|wCXw^lf;?jNiNWpe4dm>RD1?ZV`pot%2{zsB6w_#>M%A>7L0wh#h z4w1{wytviiJmjO_3)Qwh0Fw*EVATY|#rOs9VV0RvqZXV?N+qR0-xjt7BZi7Od^-#b z6NcO!0hQvKH9+#kZSKht3Qi0T@1nm5r}zM%Om z*&Xz|CD7d~C4f{O5mbKo8?q|-TthB}s*y>iEROO0_a=T<4 zwe$RvE1R92BkYJY15w&oM{x4F>a%mEhsRBHi`u6S2W zMJG_}##hcj#zSLOm@O@4aq(A74Xr?`;eZPXrjH3uJowK%&+gMYWJ~#^s z8`R6jMA~3)Q(;3C63Kw5&s`aYY8-YPj_fo$)IWPRdr&qt2~rK3SwK^!`wLhJKgw1gRm zqbQm@M$F#w#XoD=orw!I^Bj&OvP(SYkLz6Lc@72H>%y)uyPn7IVulnaHBq1qn>HWI zU)Dj=TA`*T{eMMaCu9^^cf~!ZNHw&&VmS|m&kK7-%89DOJ`9g9N2q%Lc$i6p!eX#@ zz~GzLKJ(9FPq3t(FPE{NV>qdCs0?_Qp9JgMq!b2EZ*-|B+@AQwp}XD=`&39ei)m2IF5HZPaFjmqP?!w12F5 z+(po53IOr_F{9uMryCJoqW~cn(nH#Nk3}Ik4jKL>V$*vPY)GgZq9NuQfi6gHGG{I; zqu){{_mO=!-g5PJNUti?CQ>LY>aQqSZ^H&I);Bd!!If?Gg7=mh@Oej#o|5y`#Ebr4 zj3#3>MTi25U_C`NxVr|d|0(`A&53in_gLQ!m7I^jkqe?F z^K{YfxHfn@v8eYe!k-_p1KuAH3CxcMA&M;z0;P8dsVT^juh;4{xN$svA>;7oxqXiS zvDZ@HfiJmHz5qfIA@;le4ffeEV3^^ptSiIp5AJEXg>X@^XwT7etZpR31t$Dp z4~#NGuSDjeE7{iAAwWfl*IRp<3nZOSyzB+@I^qbCdW3muMwKLb>py0s1STVr@!B z!=GNaXP8_Q#bpWp6hLm>kkhdF);g(&wq~&G1UGSnwP2Ps2)m7XS4coBhNR#tQr;XR zt!gDqh&!Ocgt1krJ?UVDdBh}na0_yTGs^3H$lly6Erfk7*o026!PAvL;gnkmMe`5k znF*7JbHN=qI%A2?|1En{&6Y{MY^JTQ&3D6=7sp;Cn4`Ac7)EG{jhA3a_ajs9y$nZ? zft~5x(b{Lo-TgKrL!!zkGew&v(`DHPN#VXPa7+3;8I<222jw&3k1mtW0Dp8rA_Ja2 z1k-4U%1_-e?)@dSqIRCEF`i85DN`@fXk1tuuE#7JDT?FL+8+kKtZTy`#+qErLLB+hsU|HR zF+D1+>(cWVQ5;7ZjXmxd+hz|0m`EX(;_@(n3AgU@0I8f+JEII`ZKqhZt!u(;S;_@q zf;owe0m#A0LhvkOo}jhOy8Mee!f8W+*{i%!V1`x9pdy;BOT%WFj)_vlv9BX<&UFn< zPYhZXsW~Ey;E zC_FHdgs5497Uvv`h|NdViExDnJ8}ou#r+~H)L7y3MUf^3CC3_$yQaTf^Q~psog7GD zU}4kQ82MaYS6W2m3}O5e(1lyYulYJmr#;_+j-tn>KL_tZKAKi|4onxL0_`T?YcN&sz_#}G!Nc-n z#N-xE22c}$^B7zUqT8ljrJ^A*q|_oBYFM7CsznN1&&lgbJ!0x*ZbQxq82epKzDm;m zBa0S*iK{`GTBaKNfH=krJVe;V{1Fmgp%yEY3p(KLqG(#1zV;N*CPAp9g5rHiRn@L7}%wOuC-A!&z*Eoc=){!Y&Z zY$D1h7)7->IMJv0ZMsFDMQeuR4f2#rxi;4}a=_hQpg?@N`rnn&;d(SQnfdY60@yCE zaZ*G~jGHJ}=+tF_yUMq}^8r{=i)p8OUThPYK(c*&xDN2*r% zTqSIXniBM!L(a(2xoaoIGu`VRQHZ1DBcUH5+_oHx0UumhY|Mc|2WqJn&TsfIa5xb; zF_(*5aO5eZ6%tiS|mbHtI^>x;kJ=#Wx@gy|`a-o_>w2JirM)19yMKacvEcue zo&vE9brb$^1om!*(7a783eC=z#n$jRwC+r4ZEttQuU#eZc7R#IRmWWwo3^y9oA_o& zERBYMqY7oAN%Gb=r)=JMF02^K&(wdC2u+LHU1v>!nUR65-DT!S`k`IQ1_Pjisy+>N^u)kx!jqII(42l!ca@OXHp7wI!(OrMwmqk1_C0u~w+Zm>6-juxvm_ zLOPghy$3*4_Y6hQ$U4%~1yj58_yRfyPx~%WermL-=z#PP4NJWa^Um>tY(^wxot*Es z4=N1WYwJH5I@Z=Bi(scAdZchhUX7|MzZf4uGAzYS=4>4$ib?_?yY#NjiEIK)8(ct0 zNI% zV#j?b9JU12?+rxyWO*?`jcCEk{1yqSR7Cvy=t^4p7s{bT5D zzmM}9!H#}J2j2VHczq7zxGNtdtB34C1^tGhoRAEEX{z?*J%$VI`zW8G=E+k z6MFicv0A+RY6xhkZI zaD&i?=D@C-lpDF4K~FdRu6CNX`_Qj9(akG~*jIJ` z5{QyXIm=fVr#olx_E@Pd?dR0B9cctLoiO0nK0 zw#K$9Y(;;(*h%Q3Z#)vC+abxEVrssu`u)Gg#NsiAnTSpy% z4{GCV!hGT~LCQ41JoVub;x;uw{1>YjmB={-!VkmKuVbQIZigC{fX|v7Sa?9p61qTzZ4YJK+RK6Q&n%XhY9EMEzL@z)kmui+6}E zoQgdxV&gc_n`a!4N+$G~_B4_LjKN!%mueo8kNYg{EkquAQ;P|V7Jg|SqP+a&zFNjn zX#qXh*`^EPZ;~-;6nT`&;Vwt^(5Z^vEQth4@j)8>rON)(MN?<;hkO?@+Dz>z{gVgA z=Mj}5yZlLSmRC%YY)`D>S@SvNW(A*x3u+xgpNh=xT>k0OEJNfFC25KI-tYKluN+2~ zI*{UsBPC6(d}zb#DA|$RA8cTyBp;Zl4ELcDXB$@#935TCK^hp#&^E2@6-@5oe1UHI z1aYPr(N_uJmL*%@I}9^6VH?N#y5h<4ohBvUJlveQDgTwwbqU)ng$51My2Nyb<%8M& z{Hb5c4)jzSV4BZ3m`r*oy?Q>&6gpag2@oX1++*mNgi?>_2Ha&I`X`llGnfNWE#}5d zYb^Azqo#}crTfN{sM73*C*c&s3FSSh;*rglZ#4?YIK>p64 zZ(vXXHIm6;yEFe3G;}#8$eP?hYCFgOw{cy>z{4z6xGGqc+VN;Rb{95)&Yb_Zw>`tn z+uL?tsEUAZ=8ff@v9uwc{~j#8?L)+FuYz9C?8%%AqzdwTiR^*J|BZfIH{Nnv`nUhh zwG99Haj1V@te0jK@;(u~4!~g9jhIB2Lw^Eo--QY4)a(!;L z5)@Sq!9UmfGzSh!bdv3O1bknLD=!)t{Qo0-JFr6J=(9&iWKSW)NS_sEj**Z&I=xVk zW?o-Y2eXhq=P{q=?Z_t?r#SkC04^F7(w|`6Q9P z_rGaPFb>1SM*7SoVQWmB6N>-~8I{rM+j;*8Dc|ry8IO%m8tHrTo7UL)un`2`tuOPsoWt&m=uEL!E1P4hW0_xnA8 z<;0SXX;Ys*`RR80GOh{wy80g;in5B{$_et}TQ5E&Ix~Bp4{}4+Yl+e_u5_INu0ed5 zOT-{ni~F)xGdK1VZI*m}Zrp9MFm7ffSoLk8!y}&$u@+WlZ{Ss0%4jujO`pt1;bv&4KUuh>5FyxTMkmam9kIhEw>1wdYLEz7 zhG5_YF((ivhn*_JUW}!o6oJuFMR}&d(7KolUE;=fm3-avH^;W(gq9xFLIR>q1W<2Lb)&#KGV?ZXgDl0kMa7B-dH zqAC4L(9tF>$ZWrY1?LwQUE?yvFW36gde7=-qc>idn9F5hG6rs8p|aA)bj$2RKE?I{ ziyy65TFcWDXk|95=CosB@04?w)S`I`7rd?~mgcLQT#5-lzD|g})bnhp)%+^Y$9xwi(>r<YBMbv8|dlkulw>QD`3F~*B@(CTh|ZO>3q*Ts3eV5WM_)?qMVsajtfz8 zH`&fdn|d3K|}E1x_-;Q4g+VYZ8pI#$D(_?uf`Gzvv9FAfEDDJoa%Y0sXj$ zA2C61^9;8oun?Wqwc=JI-i;nE)_|`s9bXG4#M~V$^IO#h6~iR@lxCF1>nt?BE)MQ3 zVtvrNnmaz!0SszljU8!&iuObz0jh$?*Io*j(om$BMRVbVZ0J$pe!sJz45hGfJ9@lH zwrA+^n*&iqJ9mQ)lnpo4V~bwN~-cy@hbXxVk zS?W3v=ZJQ=v1)Z&)5VvhNQ}xE%AB^qRlc}V>6_ob9Ei72`Q6sNTcY<>>`272p*d(a z#4LNIBwD>0njtau$>vy}38B8Y`ikOddW~W^Q3!THg-bMQ)04WzITCgH;$Ytj3GJ$7 zLEmEa!|Ym5wbpH^e6SFt)iY?E8#EBGIbsXZ@cJqCMSq?hY0469UQaO4~uKP)mn8MwQYG? zb<#jH#!P4eIJ1nqt6q$}$_K+vB`NMihfHk}0Y@Lp=G4p~#+Q4aH&HlKjyUD@4%qOK zNze`lJQ@vRFClTzC7U%XO4nX5eAMM#&l9hTn?aDxYh)5>=pFHVx0B$o*lvQ>qs5^P zydw!iSAzrB_$r5v4oxP9d;RIzLKdanYwvGfmbKv(GW`s3Hp#fZhu@Ayaws?Re_E;! z>91OzMB&6+*TY=e=Oe%MiHNU^i)Rn$q$SkiI zRHNp>0|zjr0nlFO1ukA$Up7Y#Nn^?3l}0Xx)qibP8cCC3LntBP%0R6GtA3?WLfO3x z-8!!Ez4HNahdMn*e{o!j^eV6Q3hA;nqgqZOj^c1bzKe-Vf4mWTdBy0GrxZMQlVf;3KAFTYl$5EQD# z{;Z%NA|fU8zahTbMVfAjqZ7_TS)y!42>;q~7a;ngBlb}3%O`az@Jraw>dO&kCn}bnJClz8ehA+i z6%Gtz50!@@SU-@JTeTkV>k^bUc~vdX9{VL3A4pmGpKi~j4_sxlPzG1+UU@(^F}6O> z9&bVfi$VN(4eq=|wD;__z16KWvi)>%Hd@-pw{#k*wt9`xgeCd;f9#~N?cH>loq_w6 z#}oLQ@FuGYRF!J9Je`Co{niPR_D9V{^FpC2rG^_|8(KE9;@p9Zgf} z;8h9}RgGe^v3YBkg+|v>-`>oB{*;Yo{LvEOnO_qqd%!IVmJS_Y+wwf~)jYpGCxWWe zx5ZEY(l)xoBE~V)w0-_W!Rf8+2_9r|XcNxMD!41vr}R1wqyDdk@i&?YBCvcq-*4NI z_X6XHaY4E9A2w97ciChUcxgoDREF=UB=(JM{iZnSfNwV< z?{WmnG|-LU^V1+oznV6ZjS3X8#5!hUg^)tNoklKa|6cP(=6i6O(^?6!!9_+IuM} zVkSFvjk(VQy}fMOatO^g?Eh{0C41<;i=j)BqDOx)zC8t7_1ub!@_rqAA+tXW(VOa{ z+IU|r_1E8AXJ0Etfu@bAFGxr_g;Jfpq!cq+#u0#J5J6yw_$nm=ls1L*=_OmX=_BV> zf$75?z#B^DD>^)qZoUU_Wdt}>dOsYZ7ZoD4_Wr+sn=P*%{L=r`8T-bxW~AcBK)h?S zp1B}IaH2>rq255fV#Jw$&XvcrCY0d^u|TLb*ZzG-p{`rOeEd}ETI_vMPrm(22b@`) zVJu&Fg3+4qE&9Zz_n8voZC$&mdg~&VB0Jm_CmP*vMTAN-9zz7n?QtAblb_lGpCUg| zAU->Dw=X|%g`VU<=%HwoEx>k&(5(yT^y;-7>2-+%?HCUlZ!v>!1dV8i|BjZ3KJ$ok zd&PC_u^r4J@r~kDA|c+VookO?wRSHM)W&QKtB2Y_)j?J3DY1gDFDinWHhrSfnr|!4+Aeg7+4T}Jf-8f?n8H6O7e}PXxDOoN-DQ8KLM)q2zji@_t{!zp z>He*9bSxiEu^@s>4ytVTby|^2(40)em7)*&2EcmtLN4TVowW9ayQ}Ig_d&OS7^v6w zpt3sy7U!8fY5DZwwM*)bSEBAxpk}24h{3w8T%QoJ-kW5(Mvgb=Ea^^wIvw@ND>FNj zwa^qMeS~1UU6;VhWgWu~p~LFh+s?a~&&b;2zd^mb^MdBbgyU?;l8KrY^~H{56*8h; z)KBV|!U+?#BbqZ7N=_Nx6MWl?VlJ%cbG`_S9&7E}-7h<0G}rse$N2L0=>#yXX>9=v zGg11_XxjT<6xmNE$PE+?URi0IQ@4S*c|F^Y-%K_Bu9N;b-c67R-0tzF6#9_p(mJ|Z zmy}bPGv)qf0z<&LPh&zjcE9tY;*1L4o5$%agcC0;jl#SFN>p4F3|1mpy-+#0wn>$5 zLZGGOR5DHh2ytHgMZ-C0eskn-3{6ED_TIeR9)8WA4m!N3_9Hj}j}u?oB!?3g1ln(he_Os`hZN z=;Tk8Ab?b>z)akbe^R;QS;&5KNZ?3RS&2^)dszI%aeIzi9L-}>4qj;nSq z(yv&0v_?b<+WwKv+fCMyPsI=f?&oK+q$A>&pUKVnO>2w6{G(NctJUdlOT_SusX(%y z*?YGYw14a^e&9Uln{Dcoa`!tq?uTs1rE~#PQ(>On0gEWGyc+G4hVS<=u+>^rLR+yiL!ZTAEYPq0>M ze>>n+Ah~#veb9jAVwPxZE!?oY@2i)*6Ztdf{99vshV1A1-39Wm{5lZluQ9WEHO#{A zg2r>=FY*xxTxN+>dWpx^7w#idVELOExPMzw^iDod@FO+Lyb}y3CcO;m&ewD>HmgAz z-Mc#~?V>{1j6zg9=uqBHvUnU#(tmb~s(-3Usc=O{k(l(QSp=k!@H_;q_9~fQAhcDUmic0d{WEMDjTZb zy7EFkQhrI7cMp7iVSr{qFAjd}eAy8zmB94jAOyw1tyqC~w%ffcz_8D${%W7zI7WuX zz~iG(fg}Zr3T8kTOW?Hb+WztNO@dbdy+)^ZJ62M2OEX&t6F5q~R8WT@@S~}vu%GI? zMyHc_nhj@n4hJXPsGUjiT9C0QLdnLSXI9FvtzPeT1%cn|K4b?Qz2?Js!{iIIbKq=T zFk`yMDr!?YiD#N_6K=EGE04wM%pI-FY9SZCQ3^fG)M@Yc$>ZZ+wcR=0`TYc-%pU zi%QC3F7L`?YB$XN&M9-c%wLi0!LSx0O}`vYlf0iT{MrtRl-$15+dLVp z$fQ-_F>wrhP|!-2yGFSRGah4`ZicZFm*51uAW2}I0f2J!>#HY+DV<-IRk7<^%7on8 zd%eCNJgHo6=p`VQBR%{W8H6AV10qursU5nW@4hY8*Q&8?&1oz3Yzw)9&{Ml7cvmjP z>_3(f52KBL6^7Z<*STK0$<Wua04HQ@2XNtck zk4wfTX++9V_(0}3IYz;iQy8GU<+a__gEFoc0D-5FppAFsU!2~PBArf)MzEk?4$gsh zWQ87`RrtOAf+*b8rH)3+hEwyNG5f#$Lc+n1sFsRsNyHN0;)_MGyhX?2Eu zt#?cr?PC7Op&-9X@ceZ?Wix^Ri6`QH3@y`#UDRIr9&uoh7!yWqjM+^78$VY{${(lEPK8 z{D6;NY&Hh{%H9R}CE>mc=zqnGl_32ntvff0RyNYfqf(V_g>uVZ@r#%LykENV6G>L8 zTr_$z9nyoicRaxa%Y>~K^>1}Z77u5VZ0 zB9T2G^hD-)iu8O{=Wsa(u}%E_iI6Q~vnLty3r1*-xbgJ=({JP+WvnH9;lJ*|aX;+0 z{XedYN8E|e{XczGDqT~{c7f}q*Rlb5CNuVDb8%(UjFfz-C?so4B2Tjz6gMi5;GLNt zF~m=xr|EuiuG6XAsE;K#?0C`$yd3R}j^{#K6HA1d)c5hl*W#6u`-eb{XJZTl(wmzB zKctVduY_(CN<^N+sb2;!Kh2V5hf9dtQ+~T=cv&TUA$p`>q zA-!{d*6u58X@cZEzE*3Ubi%4GHLqDT-yyrR@x(-GXh-%!?rq-Ex5K7YNFx356IL~k zMB=5wsE7uOv1oy%7ZU3PeywEN+BA6$rWzY;1^q20^k>AHhR&^z-8xD6GG0|0#yuYs zd-PIP#f6CY>ZRuf)lEwNu3PTm^&y1x4Z1-4W>x$-zc;oP2ODFA>={Mdg7SeL(+-W= zQ%dFIW0BlU15|h4$P^kfCXFk1)wOn?cw#fnJNPp;) zLT@H24OT{)cew}87;h>Go+#a^1I}^N8_l!%0 z<0qNIaMFKXX6-&Tlg8*gF7_(dCVA~(0TO8dJar;VHDNdJq>;t5Rz^86UblHelMx$3 zdltMv%EfMk?y5uEymd37;o978qCJTscI#?m=&H(SPUt7g&TZn!-r)Ix_dvP9-O!Z+ z$l4_lgi<&(bA>$op6xZPETf($r0kJMb6WUO2T;}qWu+}cWrTnX|185kdu z&4YVjto<4}>+#@`BO2Nv>T{FXQppC9IWfaG9?iKQ2t%K~7$PW_YIrtv`J?2us2k^X zZH@)4Bpv?kz-C!=4f52}T;jP@Ef4zu;sPG3&VbbPMM^0@pQgUopHfA0sy5Mk0$zvk zV9}-C{y26cGw-n&CRTxuuKQOCepxj@+%j&0uJOD@S|nS}$e(0|xvTqA_cM$;?JWBh zzW6vU?+8r4zVn}?BJ62mqvz8n1~r&pS6$_TwBp}r_w`_ZM;{Ax^Q}Q%_(qq7ljZDO zHoJ4hq!><1b?PNNzkbXXVXj&Ii{FR2VMePNviyBHJUkM_ zV>Y#;ajQq)BC7JMe9Z7@KBQi~`-J_Nr@u>K*VWIF4!eMn`x#9Z+tBnpJ5w=$ie)EA zC|7Y-y(am>OLEr2DEX*F|5AIU~YZ-XeAUNR+%l=W;*(ykU8NW9kdeAH9E3kA< z>+nnkS9c&YYOL5HeA570PLSG5vD+bgEsd949fG}rRXmoh0E7?Qc(p1l6sMkPA9K%(8ek0cJiDeE4jaKyUjIibg+=(pQLUf?aa`) zq8!eUG#(EA^jbtm;p1OaPb|abI1cneRr!=?kV%6$Y4wdk*&(Mld)Sd&08gz{a~}T@ zmkMWhyxYX!?+_%9*cK;(+>`e7rxTvon%cV3b9FTq!M1cR3xT9tDyaGc4)e!sMS<6c z4t+6&#n411wZ%^F`dsW%xvs)QRi`GW>De(`W#u++={1VGQ(B4p$6*FO%7XW^J*AFN zr%6Mtz%?pjwBI*7B1h+;>!kQG@36&#+Zh2`;$rau*_W;4j7@q8m0pul$KWrQn6Re2 z-_jVz;u$xiRPxz8iAS1jJB);#p5&G=QtyeXJ@^v_Wk1XRx*YQSH!p>-va<93PnW|0 z^+AVuE}X@E`pTy!bZ@YPYGl@V#;xXfQfv+w$f6SzV`IdWUD#qHkCB-~f~$*}I37P= z5gHNPe(YNsOa?S*XExz>6&I7%H=&~lrHL^Spy%vI@0Y1A?0e#An-q5u(CYPe3=X*0hfos!d6f$RR z+_0bFsRPLH)E#OAQ+|B^<1NJiI+L-O`r*N9Dj9C6C$;Z>HCct1sSNh>=J#J_qAF^b z*;%EOUnSe6e;qJRmSJ*|I{SE9JH!gsNl?PyeWRI8&f-QmL!jTrMZ^CM#6Syx%9W=D~>nPN;G444|HjKuU!mVvVimZ&&-XL|ev>U5A?xL@Lj znliyFnfaNH>@T7n0nDMEIDEnC28WeZ^TEig^b9>{kVc*H7mba+0P4#_-p{ey7Zm;` z>O?{4KLrv+k~qXMM#S#=x3uw`jNG~V^agB}rX>xX*UQz6?v{F6*n|LyEjr&8HBYvJ zxZV^CM6YQ4UyQxemLLEUELgT}8(nr)mu=g&ZQHhO+qP}n_Vzt{ANK6b!~8=kA|o`j8b~p0cb+n|Npp~+I#cu8f0=#@;rM(ZIH4*9)`tWXI3=KB$?aw zh#tKoAZq%$f; zu*dg@MJr^cQ<`ra$T#US5RArZtjer6e(&4+m8Sq4@pqOoaawI=_`BGb0HSYfItFG| z=v7y!Q&j@{S3qUQ(sp%|A!IIbNnAEz?vJ9nAKPs)z880>(Zxy}(*EH@P;St$seQw5J9u6=Byr|tbxI|}z~!7VSLqu#GO#G)Cr*|K3% zp+f-8wjHu%!!}^|08dj@;hA5RSaMG+02rZcGseafuXEP~7=o#_h7T%%wnH`<0E(C5 zx$l0U0$KyNa!c+Hynx%k9qY+(u$HQ7zQmKcz92BlC>+=-fFM}stjRNsAHOfCP3=DZ zW*JVuy{8B^|2{;FF27v>rB!JF-b=DAQw{F3*-W%6vgOSUH6Nb_*ExHnhtp39KX-%@ zz4}6qzl%Q6{L;zOg#%S)=n;9q--J9CW!%b(!+ZSv@aj>w*)zW^^R6hZ8h_60>)cu< zpi9?mgjI>3{PpMjIn!rQ*b-wGX{h?1oLBS<&*U!y37_caXHmGpGWy?Nr?WjXblmqI zoME?*k~AuNdOPG)J8T)iAl2RVOgevZeD1To@mKE=Qts!v%&dQ}&$&_mZhg&DIdlf1 z@1@$Ca(#WvDOv+ov}%^~b@yHSv!e}WWL5-^x8^cSkf(%@zS>l} z?lNlgZi@I`etEGUS~h3qgOc~&Gn5MCwt2hpqmSacDGN<%4ODtsp%)mx!7jCidPX4~ zRmCX(p?ju^9+Z^#C+KwAjkjr+B5lKvj_Pg&>>{>HoTnGst_yP`9LyiVV1gj`!s&W_pi$Ls@SpP^+(my?LUpiNWY-i=38Zaf6RHwvfRVHz+YdyIeTmM~^YAlit zsN4ggOf0y|k+y69d4GvpR8ujr#c9GWctP^DpeP0+Cq-wNul6iz)a&ec%0%UrO}Ux^ zU8@6C%)!)Lc#kLDG6JIB@ILK(AG`*{crjrysUJ5(^oM_}Q-|axz;nyHs z0=ytXY=+Og+xrBD+i^sZuI>FUL#_3Y=iUY`w8J*0R6RC1Pux?1E>6$*vJgO_;WC17 zge@hEf+K@b-01n2a{dt9l?+NR4?ol-8I~W6$=B&cD&pAX9=RqTtN1_T=ihU*{|q1| zMmC23wFh2nYuav(q57=W?r91WWK4Z87(}v8+r)teY?Iuem9ar!gtvsB9iSGwHCq3A z&T5IpHyn{5nTNLku@jkwWTiXyIASL_+BsqFp9$ZttKXi(XNZDfiW@t*AlgTOL?@Ar z37Hn2b^X4QkQMz>l6B>d08<(LA`4<5`hLZx?fqC`RsI;@UHUL;y*;oo6wdAFq!-tp z?ef)+2t4HqE;5^Z3nxS`#@l`gN`0<7B}vmgzHP6^cHho=^gcttAcz)W#4Us&;K7o2 zKf1DG@h`_BicFoIjj&`1;fz$l;=~lTcCYf_l&Jj>Nrx%e#h*Y)eo~hw%zrU%s63wx zU)v)DgOI!6w5TZ9qgDJu4;tx_ z!>hu5f%c#wizaM~=n|9k197rlD(-0!QY~dWBE$!{8yJ-G={e!p*q-K5J{Ni=OQXAF zS?U#lh#RXPV0q&!qWK*G9H##=k`?5B9^P6XlW5Wa5P-7(fS$DnKyQur8bYbg8bakg zlJ*Woye8f=c6+y~&WWFRIhN#zl#Ms*$IXUOqhC+^AHyUM0g`Tfp8FG5398pe~ z9vYmrn17GLf4RJ)ZAb*7Y)3XJ0J2Im9Hc48v7v!adj0aJG*!bs$}DVvVL(bn*=;My z>{cxeS)hULTP^}bLs5Wn27-wDJ?4HZ37}s(A&8l&L+ofq{xUbYdaH)$hazOFCb2rz zYZ>J&R=(Ow*y!nb@Ycrz)htvIL|kyq1YEDFJ5^!k4^hbl_vi2hAN8rbPLE_%$CXXT z*agzl=l|{29%)S`5z;GdvSfCLba8|7MMooVd>>jgWtAS8ra(6X-aF7`+2om1^oIkZ zE$J!m<)Wz@B|Hh+*E7hLOn^UKcg|Y^lLS*qSI=jr4tIz^pn+xjhL^z|8F3fG;R z#88Ay`SU9MaC|p`Pg;y*a7S11#VO%dU{&RywtZZ|seyV2Z$?%HbXY(@!4w8;3?Up; z0j1@NdE}B<(DynQFNfjg$3gco5rS_EbTo_ez~HN3f$kWj|xBB@Iy5%h>k56$G%!z=8E^o>>7|U<82FC zU_!q!ocss@E(ADM9|8%ddEOU9>3A`J346&`x*n=m)%;32btLOSc(=daY9D z47vat`!whss(L;b`*(|$B57{)gZ8Vv6w5_PFm#v$_?UtuG6=vlGbJShN~llL2K`iu z-Uu}Yfxs|rIs3>&UWTI}0fjc{4sD(f39164 ziLEV|zfX7@UVm>vVVH)@C(^Hhj!0DJ6bgXYmPi!_FPqlO!`uD7RbK#sdEC1GIn!$B z9FDTF118WdrZ9)V4zX0imbyiiuU~noGt8q_kWF)b&SllIH8f#ijCk6Or0=F9Ei)+Q zTKCzF9a511i^+1B@=NX$n$SELXU0C*MzT+g4^xUB(~Yn~`g#V9g>4Gq$Q z7#p5rzzLx;Tf{%Cn4>v4Ab4asfsJkpL5&1aF##k!k$#TA5qVUTv zqJq>Xk82x~OC|VM>rf*+6Hm{Fg=+-Sv{=NwH%$}!IJjq-f5}`6f4Ej{kGS|Ybsrfv zi-Ue1z>5a+pxuZ$qtyLJk1sGDB$Ttx(wOW9kpU$jFInmDdg<%J(u(qI9{_&%lNStF z?A;B}W6G4jCZW|r+0V{?`7$OOL}Dcsh8?iDtMbV^pFw9-lh|qH^4bjp)zl%cHANvo zwX^Y%>_k~5A>XzAe!Pql@@Jl?3YiA=dY=eszfp?HduL(RDwZQkLV*+4>`d9E()=(KraNb}B!nV~4LL4`zZ zBN6h~K0o#kJ?Q(Q;Ldv06@05RCq)|N=f4YcXW+ZlwYrm++ zD#51Z3K3>B<8RHMuH~%y_(tE9zVIM>Tly-kXXQDx8UP5zJmm$T;IaQfp5ew@1G4`WW!?f3c(I954B4*U4_Hycj=dP$#0`lI9x2<6`09| z9giYRE}<|}#Zai9izkJ+ju@3$G|*SvS9xPRXy_<;&Tk@A1hX#iKrMFZuAu$U(8+U5 zb7Oq%3&b~#ulY3zeKlVyd9X`Z5}JNK2oSq0S!vXCKjpnAa}3plcs5rN>;q8_qrGiE zS#kxLAA)u&6 zU#h-1)ZhtS_gWf6&DDitPjcszpxd)8OK=IV0#%xa93T#2kd|Fgu!6cMF729tRaA{o zn*HxrHDOKvIT;qF1r+tO+%DAQpN^kpyGEDlnyKD9jrI9%0+omj-PoMU%|g7u8{EL$93rpc=x>(*44^*CU+0GC%Lydc8^wu51Cej% zgc3BSC1ABFcJtDd=EZOVZBhuH3FYX)5fWfBRJD{3>Xl#1zBiTD%@<8hRTn3p?hPZ4 zJ=b)+q)n+_7i>k@LJi_x!`Hk9`TR&lcO-H#lq3(`>fA!jk8dwp(fAEA3c`Gw!{6XDE_OOn?*NwOYv zc2~QkDY)U2YJ1~IY%}J^W6N+tgWNhmsx7p)mU?VNl&=U(*XKyN`VNJ6*ysE^GVECI z$Kz*;@Z#Cf=8i@EMrJ=$;a8ayFtPae)Wri$yW5k<8qPHi~P-Ss7LO=mMwlI2)R7h5s z1-q372_g(gIjRxqX6^gN_v5;0W+1!#t4UeeOeer9YD&o*ki(OQfwx^= z8q=(Vto%4$$iQgCm0hRtfh}j#xrs@-wZrjdNv(-8R;HZ|JnXu5VO0pe1hhl2!wMQPO} zCal>6dFz4YrNaK)_7|Zi$O4DkasY3(VvL4&A1j78;;9vw5LIzj=l6Ok0_SvpF{MYT z{&8lbhb}c4QTO;YQM7aZQ}rJP6twi<2^0ZMk%oYw5GheP&WVRhdy1;vxp@YRHKIi8 z@e-WiF1uzghc!?Nm_ZTL=R^ln>SmvB{7arRQR$6;@A{gB05DD6x^>{>6CkIW- z$%3lNS}0ICJy~;S?=WE>A1e-{7crTP`BqBZbezgY-! z&;JD%G5i-?#KFk^KLhJ)HEY{VR)n7#UHiVCu)d)?Z4xjT%~cjNe?aF8TXP1pmMe(H z<7J0T*v%i$Sh@yU+kQqaNDC_lBBW7d_u0WtVrQ6>zCA`y)|o##YM?Qk#4u5&c_7O` z5|ibD_b4@ww$uaeKk;_St3?PKNBE@1NuximL5*I^35>f{;nS7lWD~VvC}p?1Ru%=1 znkbqj&ObQHmPC)z%QP3}NO8$*a|=%KvW3JbVFY$fvT8Dq6z)pxpFvEI?!$|0$2wF zB|%Y{Ol4%~m@PcE`Z8w3mO+Jus`Js+8FG;$rSn2AT%=WM?EU1|%c zF+)FD9I=I!&*`|`PkOyf7agD|bJD$pczy_?Q!W<>C7{Kb$J|oLZ*Udq;DfToO%q@j z3ug`Su2}}F%rHH*LE}rsB;*kBS1aX}QwBcXH&y-a-pZyx0<=mMAS?Js-_f2HLuz`B zBG_=ixmOLqTcjtwl9nxQDpE)ntH@zomnjWkqiSU_L555$-0dC6Pp&1TD2V1-o6P6O zG|ea1d4e4KlN_*Hn4qys#pZFx4du~C9owdxkn8out$5Y@TT~<^s8pMKcJLC>e;XV12VDN0IS5mNbw0>O9`bZ+q_NNpWwH9BI0KDGg+_HRa z@%+BdBK7g}p^mdbizbVMTXtKq#^MNv7uITl|KUk+(G=4QoI z?jiQnbl!*u?Bxqw--P*8nEgE96cDy8_TM`+*+TiZu2$RTfc_+4b!qJ!I(@%dsc{o_ z!)}Tl>t+l4ptyl6YYl;v=W_D@%r#{eQl>^wjpI{r;N20G564z9KgUkm{G2rD#iQ}6 zO!ZWoCNlrr$b9HZVtr92jQmnQ(X6k1hy)sac`$q2P@uo;!^L@SX+cqX)AGaFjQZv@ zSWv-SuR1QM{?;(lZzwZHs7+9`G)Kvo`84gX%dSu}^$`n(dZf}p8@stWtAzA-+hA;T zBY~jPr2^&DHX#1E2uI49Q6&kp+h{gmpy5>)u5gHP`sb_$Wp-sCZ>Hk?hDmdjMG*q# z0_2RTWB#{<|1bVjMs}wEoe0tVM})AW`OMZLoQUgGsqfHzwk*m-!gcVKPQMi6(kMxa z2PGFTHDp58@%r#4B+zomY?vQR4x)(B$`^>`+-Aj|#)UGsOPM`fT%A5Pn$lHE;n-(f z9(@tTXHn!}OomC$JRTW-%vueoeK-#oX-Ji5oj+9)B-OcndkvUvEFmZUK}XIsX*8zs zWkbZd{md|CkUxiwpjD>w_E(Jz7fV%FM|JmlKMpE2&Q5(c=6e7BT5Z&wneEA9aEc?V zx{a$3Vo0AlF~#>S6^{|^B};-ZP0YMI;Eq3QbZ)Ckcs1?Kp0^3R)HT3l0!yx9R{GSP zj+Q}79rupi>F(HsHwjCadL2Z!l*zIWmn-v^MI9f`JEqXep&wJouSu;TT}U5-kZ!sG z<(4P=CZNdt=r25BRtb}(geQ8h--!hoFB3Sl@q|#o8c24xgAoMPKg%9E{l=g{u2201 zsxaotY-=j3sQQzkjGgbzGH))A&d*knKQVPGJeSdeopUGw#C;I7?*k)4g(lkiIR3In z#JK@kFwDxSg)rK~Q-_BQ1*ovDzu3aBo?DX01Ejfqh3J--OT~ZzWlRhZf}73q>;QOa znfqORTj|UC6VB7E=@U!eOdP^1k+Q)js8S`6g2n%yDrN*ziOrS3u!N z#mv;^-O8}qS@9POEKRydcvC4)=*;COmOZH^+?s=;faWPb6~F>*`!oNVpUn$BAr|;S z2)WW2(gxS(w;To(w=uR6xms>ALWhD3b}V4fcTI&m+wmlPO74ym&kWK?FgsiJMmc=` zEX^qhDCqvqr^xr!v7o@8Ta?iqcBb;)b^p0YeX7ta1B?5O#45lwPwSymexJbdv98MVQY+o1YQ<*+;Z?16@i0xky1hgUXD%+_%ESQ!yIb*Ex8?>+O= zYG+#ubgi?Nt=?igFS_Q+;z}p@?+~l$sJ{jh-Dxl8z_G{>?K5`lGp_a8Cx(2J2W z45^F|q;aJJ5)H>}%jX)i$l=ukch*iS2%|1HMIZHK4x#UknMhs_YHuOYmQ!RDl4p}M2lK=nrSrS zmv$;Vrh?JKS$6V(2O)crr21|kb{Pb85-B}2Q`xZJHPZvAwnB5*+q}j|Z^FMrqYMEh zqJD~rGhHLch`9}a|4?ZW*A;*jAO^v1@$d(s#bJNgz63+DMg3EML8Rm>|K%aDb1vHB zA;_u73>#OL*B-5OS5Hl&<@_{Hg^@)H#z{;#*?la?QHGG z*pqHwLEv~DiAI$xL{2|$)q$ulvJr+&Aoexe-7>cR^d~YhpAY_ zgQgtB1}K$8*z2*{=nJN2l!vj&Kks_{t*UvnQU`JTvmvV_|5abQN*wslNrmS=7acST z9+raG9abQwS&L~0_+24Napp9mYmifF&VcWRU4QdXQOjd+E0?hBzRHKI)HwFgEPvoZ<*qw zE@0ktU8?1+)ri9}suWgMiAg^XWxL^7puiO6%qA}@0BwhN#$WW+ej}cHrq#N zRJMr(28mr`YCQiEdte)dYQ(%?2bg)97knu5ja0^vE{2=}vnojeafXnfe}S%bJ56{B zk&Y`-#J{(eIU}6htZJK4<>RrtS*szo34E^pRMrss(GRXS8sELQbGt$KVZmDvy4)X* zgLTXr?{M0;M}t7gq>Zt7P1|IQCqPuJI7@__?NZMQRiF<`H=wksq#S7eYVx>q?L1#C z_WBq9kN1_ds3x}hHk%VJ@$Wg!2FHYt2a`SPx4CEcY_uv2q#(*=A;W%$zSluijtGbi zE+W#)9~6dxC(cny_^P&DbHErsUsVbGFxQ%&(5inf!9HuBMXeO32bLXlI!|q{TUD+I z@~l5M{?-@Y$Xy)9A$2~wCr@^PDwNi@RasZdtrzx!ZeyR%!RYIZT(4-tEpZ;1v<>c_ z7+G0*r4h*71hlN|{wBc&;0<&YdmCQ0-rvURhz$Cm@xYS@5ft_qgGgvGeZV2lsp6o1 zO`=0^Y`AhB2$4v4b8fcswwWbF3@PgbO%x}`7Cob7WLNc80~v)}wOaYMBHR4O1VW?V zHlzkOh<|GF0ZzKqO_mAMW+aHF#uaga2>o}SXYk8rDBTHa6b%~15eYnZme7xnE#hf2 zLDwO-dVx#c7qOG^IT9@kv8w7SGIdP#lU?x|`Ga)BP|ZD$KwJ5?!$^zq zmrX>Y6;U>MYPTgz5QU-$tt-69Lp=3_LM-!TLl8X=1&oG^|I#3J+e2cb!FDXqW_lCe zOY;Ib2FRCA`1oWlSqbQ>#Vm&!@XmzGUwy9MUKgmdHk!nuV0g(o@`6gZmBa(v56dQi zc% zTV}04;=E*33kpsgm9qP2yUFU#?%{8(T)=%Q%TV`)(o0*Pt7*0IDzNI!S9}@vu0;s3 z9xtqh3|V2>%(AXd-((SXbl9{MZK>fSUe z(7-$1MMhFwygS^p+5V+i9)66}3p1AS%z+7#K*%zZ`#iCVnXo%^@jE=4=iC|Le&-!K zF!Q@&^ZW65Poa+UShrCzQ^+lVWtwOkPMZ1MYD3VSSurN)Vfyo0&GxaC;|wRTc6O!F zl^Hr$^JiY}O$l2RoA=c{?nu;SJnkl8=MG}d6(@+o0L$Pn#8KsmM~}`N^Ixub*HC1; zM&}m*(&=Xs6S1HtBb2IGDktYmH%wvf2`z31G$!(qpe-hgBmPAA{a=JaoQ)KHz$?A> z<2$mll|U4w{2?)T0}t~Rk-zZ_-&==me-n{xI$FI`fh&Nm%du*wj%jv=k)26EH1=(0XI2Iri1j*f?~=N)~6g`}Wq`J+x`m2eZFgA4jAH(FwV zaT*yi4O!WYkF{~H;WvhYG__(HoP=|Wu?y8tA}nA>dRIgy>g*2@R(ma z6b(=Fx$0J@D?4%0x;o#pnupo3G5caDWr_Ui^Of>9#)dJ&7w!>exyDz!(X`vuX|e~lU^zdB|Ant-t$wBds_p@?0y<`ts{i3tfnfi zXb64Y!<_AMf8mDX+OtFUk_n8wBmtRrqA?VMh9He3u|n==F5=*hlMR95*C~StFUH0k zJ`!e_32LP)-z%~_Pl@7@4jUKg^_5K?dOJ5VHW!L%%f6!^QpK<+Cn_wr$o$;1q!M2~ zQSQV(GxWgr5)VA(BjAHG0Bn*@Lm)JgzPlSE6#b`GFL44AMPK6!OGAz}f#nV8^!u$I zmaC_S@lK>%E^@jSPf!(HQKSsp&Sb5;qPK>AIFiFBe`|53=U9aDy)#LcFU#NU&((Tm zyX9^!5E_Ewimd}RB5)~^ijiabV}OtV*&e(jz%YOJH;($D4rx*I57~nd4pXpG%^9@? zQcXZXw&;BBVDoq;xEQYafEu=EW_`0F9Y4P0FMj^`OCZ9`}`eK zd~(V5{u&(<;{k!|PE{7!-q>1CpKs!R&^x_&jB#?ZqgrDwi(uTKo+nJUqjRDgisO#M zA9m&v{8ANt;!=haC|00istE3h@(GD(un_QOvQ+9K1`ZYH>*|(4rbY{%X{gmSua-L4 z){J%eX6@VQZhKgX1I_U5L+(-GDc%OUC|VdU`%p?-ckr)Al86H5bWX zGZa}nTL}=1(p!SZ5(-8=kpG3In7od=wD=5~bbLku`>q#`H-}X>A^KPWrv>0xF@RnA0F#&-Raa^U2A+_zKCL$^X5MFHP?L~9&J_}9 zn^%xxkZ`z`5)kuR<@-?EuQo;H5jhu;eTYpbcrRy|PSZg9D8}_EHMiWj2{q=8ju`vO zIp%t1$y73(J=MhXP13(k0eur2#zyoK{(|bv*4z9=?ZmAWn~qAISE3~AbFO1B62yx& zGaLBdiT>EWSk|gm(uP;H0pJx7P#E2~TcqylSJ-Z>S+hAU#v8cBDZnZW3i9~`q_dZW z4**Z_-=Spe2Y2AnKI!B{O1JY%m9zLd=FWsvxdyy2@%RiV6jC zE)t@(hi>_Q;X&D4$ zjlZj9`;fz!%s*UK&){Kbiw7EPRT_5MmDF*jI|Hqb9_fiy+%8a;V$ZORS5>mdpQfTV zGD#>tMx&=B^;{Gf2L(afrhe)BqAuW{ar=#U33v{ZYXI<)0JftEbLQSlHg0`nkt6iQ z3OfKHDxvZ-bs&l(6XFE3)!b2{K%fW8ZHxhN!J9Vnm$U7e-u-`USLychO~a4|3DL)Z z&CjvKqYa;3w`5{XpqNQ;EJ#i62AAlH{dX;=exR6H-!!1%9cA-ajAS8D(Z66BUm4)N zXdRhGULoPQ8>5=?65SM6@?4aul-$3cUVeVQxyqVh@Ot8Qd*D!k73N=SrVgqoAB(0Z zi2kNjJOQjzqj-c9iBL3GA!!4BQ&Y2EYig=%(FJIA?2x!C6fxRt7$r{Xi#RV((c|g( z-;uhds5iX3Ps98(qSu*8~)cp(kUk8!4W6VZ>>X(omt-t=+e0e62e((bFmvtO#6d-ekIY@Bs?QIJ7 zpOtR|0Ei!d1Ap?XwtXi$Frm6qE4hkD_=}!j7u4jg_RG(>eR);;&o31tP zGf`-*Y_Z6f-gwB|0olx&J*s42!w#?BYO3dNF#d}iDHJmNgEX1&ZbfFg+@VKg0OhE1 zb*;(Fn%O%1XVbNrJCGFC>7?#G!8zd-LDKKQrH@_KLM`PHZRkofE>Kl5djF`F1#X{$ z69KceFSM5YPp-l`b2?n>i0QwsqI$+Asj~p0^5Zed zxq@BKx3FoHS!7-Eu-?*r_{6Hg6Ec1s4w}@s`F3SN=__-;|LFA*cZOg*{CGax^J4FV zolkZC)W6$+=4h|!<${pckdwA3;68s$nXF#Z+ho1Jw?iw>a0)OvlKlAyGZk*M@i*<2 zcZW^Ic|9c#`Cdi_7ckJB)dL*PNTZ$Z5+9iX_7qdwz)wZ*-_7kr1!8g;P3{j=mHLhy z4*rk9%J9J>fdR|K%XW5vc?o><=D$|dx%BD2 zJ@weS&d;u7v#V6Dv*_HHKOv^xJqPWJsRF@2zkVz*Dz9^hWK*l?Ce%{yC=TB?OG~vm zv`(X$y|FOe)T*v`yN}MXJ^q290E_q5v%|d@K|qRNOlPBKV_pvBwSxj&%^ zsgJ+t-?YvDjkIK9{?DO`fti{9fA3wIiJ7bz-lwW}3z(030eoTy)#iyN8KqV$wp^GZ zBLgM@{m^SSCLf2N;gQkN^hDOKrqL>5qN2OUX9lBN88PqUZ`Q_LpMm;Jb-)Kmj;NVy z&EBg;Fzf#98)K`iR5UGn^272F8TwJ4x1^rt80HN-0*~*3av2ZHzjwAV)aJ&PEiChyx}~Y&tz0 zCty0>thk%dY3?=HH_|X(>Hxz_UaUDVrP({QaF5oj&m>cokkWtCow*7{9snz9TC{al zdbq3(b%|rF%oHXp02+?PoZ}JnP}=Z*tlkzyxGFeePUHr_EV^D)+)FP<3kKD2F-s(}XAxMRAOz)4s zA0J2ISCHE8W}#ht-^m1_Ml``#$$a4V+}7?Sf-Z^Ht%Thu9;jjg{-7ZojJbxW?a-p( z84Od>x$0*;!rTr0<+vH7s&(7og8{fF;UL`$u531PLu!^~nq6oeG4pDaZ9vR?KWwr9 zs7D`GF`Cy54M+nDmYQoTI2wi}KdKjR0wmX&a1%>xkZ8E3HGm|D0ZNcTph}Q;l_hI$HvIuO#J?UnGtW^MERmYRp{rzz^}i=ta&Hf8n(dyoOzqGPq=4(Cmg8Q zQ^$-1BFNIudN<1&1UL{7G4Ayw@k%|8+X?=HfCem11TYOn_@*QglRr%%e57P_Fx+T?&t6yv=}!hdMT&~qtd#KW$GRc zkNgT9d$Pm3_tzG7Kq6)r%7x!O9j$`$4I>J@Q3Dit78m{k*amV%5*j~CC`Z?KbGNu-yT2RY%`ZRNpuBRjZf$>3)pL(dMPHItxVkG<^sqMqAuNe>{p=^`E z-51KOjUx*xS2f5)w?*RTPrO)6%6IQ{p?WC}nhsmA(N-;n%hd1f`TGQ^Abbb%@iigQ z(V8m|0lA2ov8ZWZXed7hTh$B`qLXjNI?nS;O{2fcEP!MlM>FLAx?)q}Hy@t|cA_$a zk}k?)EkU|F=(NcFu``24kB}qu)Qlk8C8i-2ydqaM%{Y1aq#Vlh+}tiM8-P+Z98+qa zHcE`QydjePzF$$Ix=Iz~cL6bpyJLK=xIh2?)fb>Wu^ggwhF|<>4rFzDgr=6inlydN zH3uHNGpF}=AFZ|4D54R>u}PqDo6b3}+F~it`QC3^+|HNPO^KwBXMbfu(Qb9V@MVk9 z!RUO9zm{W9gbXAzYQY6*$J+|_4 z*~@X%vm4B(Lr07*6Z`!5SmL9+XK3bP_LIve?^J&C{vxC{B)ZGb{kc=8-pBb`UbXAf z@iqhB;SkcNc6ITY4NP*%YAE3H`e~Yt6lQZQ7?auBqSC7#LH(|JxZ_sh#|95#d-fN< zo8Cd?zk!wi;^1Uu|G$ov|3UBFtSqhgPw(CRsd~16d8wCgJK4G*knTW4(h75kSPz*q z!muX8==5>enUD<+M0PxfLuB53+r8{znp(h7a7OjU3OVD05ss8#Rx^JDC@zB{TCY#S zp9mv8=opC!y_z;oKZ>ZzsRbEh#Z-{DRN0N3# zl%+SaUvmCE0@q8Wan*H8w%UJ8;s%ESB8s>PhKxOsCe+B7wj-a^zsyn~L;_~rWf)E} zWQnx)XO0~Mw8?kJ5^ox1f8ddu_^w@Ghv7~Ms;w*C?l{U+_A#`UX%eE1c?L#mNc^1^ z89{*t2{6Fl03d;zRnR09V2~IJPmcb=7zvQqsm_5ES?SmJoYp4+b^PX+VG9#+YX122xP9^-~r}TsSC!VgYAICK~ywLY`1ss4Bg7WQH;& zfQ0b|sv-D5eAPwXsAYPwswQWF)Aqq5yR`SQL&7?xzr7!^Fl*uN#EZM9%P)~j3i;)D zW*Kt`fmF!CIiXR_!_y*@EVMxSNnFM~VXt@Z*P=iD{ym>0xDsEbrea&rc6@w1|)Qo25ijpsZ* z01M7Lr`1{qIL6W)$qi#;#KgQ^0|wx^t^n9%*aH9qo_giw7dM*oYQ*cZ^q=vMc?WB~JjGi@<5{qJyHRnqbQ!1YVj zJ&36w`W*mA$t>1bb58LqbNCAQ1`^3Eh1f8Mq?vzs9UZ`2!X&H2MHHOR?aHU~6Yz^* zECAxcBW)0=%`pRMr#M5uuXXgd|c9jgV^xHV4$c-H;vh82Fe)syP$oK@p(2K z#i`LG=f;(0Zrmw%gqNXOkLRZ9WNHBz2D+N&J6c`b_VStgPjAhI#jomyL%-7wqW5)2 z_@l=H^D@3b=6MiDM{VEk@^R<9Y--^wF{C{Nk>=K4J4)E}8j(Y4eiQoV7>JrlJ~;dR z2n-0?q`B(x;j=?A9Ag1Q^EOtQX9a)hb4SLsqRneBp2{8|*1~g16){4PkYWe58g#U( zHa!MJtU(8DHF|rLl-mK$@=$`{maPexy@X^Zb(X3*z5H}p+eDtPRzr!LBAn3D>`eEa zmt*#CWh~VvkA*2yb4b4MYafnU7ju_Rz*SEeGL_DZCG#!~Yr|#xccbjr)#Y5NWG5Zf z$?1~j@VS4e25JO=J3!6QcSc>`+V2fWd#2GbB(smQEnrBGiezqKBPqfpj;0#@N|sR< z{5(W_$OSAjF%STnZF*&OIcZ?zt~;*7OdRrW$RsDK1rq9}dKIqXMA%VIUsY3P0!l z>Eo?P43Qvw2y;@}&Q0l{?Y?U%1zx)1MvKl9-D%lUXI)_>U{4Mm_lS)hB(+{t2Hadb+_fEgh6D*# z_TNQASFw*}#sFa8URl>#clrm6OFF5;VC20D?}Wtl`)_%qTbg~E;dn2FOoKPL{FKzn}f0eOI1Iqw6x z_zX4-0V;(r{A6&K41U3EghzQIeMeoQeY2(Xokd|Zu}kKy3!&U5nM(#Rxc3`|iBzpY zaMhx)${Qw!Sa-YiH5YZHcz6uZl5`h)l#Cz$qd*TjW7ALer!geOfFAG?Jo8D<_qi0j z%cjLqpfJU~x_LrOzgPI4RPG2~DW3^lrH<+HY{K^3bIugi(bwI!y1R`w0C!zll`>oH zJp8_k8jbuQRw6_*Mb*Y4C;h*SRJ|w$ICV6Alb|{_dE%(r+=0$I3ZzD3+vrmeN6|%z z6(TWzXX*Dwt;wVFJ}E==AXPwTn1b@Ejuw)vCsIGZTiktIT(oV`y7-qiAzC)FSTM=v z*0#G%-W+->@F(II&f&)49M%j=Kze5PhJl@_9qjir`d|0t?G;fuyJPfqv%~HL29hn} zQT9}hy$xB^qI75L+fK*VEbp>+;9E5TO0o-U(`e2kBjL^Ygbedm> zk3O}q5>^aRXtxKccEl`p+hkd=9s4)7QVZ)??*adNP%*A&Z)(3+hL$bNdKVklVKNMhW7HSFuh;4RRf?)9e)<6$;ctN`pMcx zGpT<8(&z0f%6TNsJCSA*14bXK?eLAFa_QwllcETyvADd_k(#`U6-Mt{KW>)$7IT~* z1m$J5#Dqz0mEw+Ke^CK+gnDt1D~*vc1h{_g9b?FtynWwZS`b4~Y@B4;Ec>v!d;`Xu z-a#BRB4OYwT5!N4Pl=+-C-L+8MxlHb+6 z&P-8WB&pvWqM{MFFnw_JguVpy7aSHR1)!i>C_j%7_epph{5lHY17xBAs3`y|l90Dt ze6nL7Y}t$^d?E!pY>wwKQjnpFUu>qI0exEFeV8;N11NubkY!|MI0LB-*%myAdn|FE z08835g*+jkki>-P9=bB5$c!8=djyQBgA7%qx!w_u(j7mJSREo>pE99km!TM0OXVe$g<$2)f&mbg^*hkeRZH!h&!ZJ zm^v9yae_G{KRaYO0bz8MOr0Cit^*jkx?3o+eHc46N0ew9XwK9Cc^Wtv@fvS1Ca}0 z*}*oK@=fK#;?bs1GX4^O-@|*wL~P-S-1ieQ9{O?XqeT1Riu`@ zPqj&+J5QB~n$UH0Zsp;;o~=VZ9E{D|6-(qN?s*bCbdk+cr^^JnH_N&3IzHk+N~&w3u5STj#Wf8V`LMR%SF-(CECwU~2X zGWiuL+y6O??|f9{{ax?T8@6Yw9cW_&VD78&qD&R}Il5>jW-H213s`f!%6ei$mRDsx zS8I1PE>m@V2P0MhtD-S80-O)u*Vp%f6Y>+ERJiEv9SCBEL|2ey|r@q=k^K5&j6t~p95ecxZ_eJk}}Cr%x!f-}kKzwLT0 zmH@I2EqhB$1+SwC`QN%P;EuS~CCW%HK#|99G!$XAC~%9-lsZ12&@<;9fb;b*Kf1 zt#FJ#L~#;L3e8|KKpJ#fm~(We?+?!#Rhf&@I^Gmh6wCucb7mApqmn0{5X5s?%J%#jfRla=zsgtcsNdSF4l!h<4^d=SxGM0rIAmsmf@3f6z~w-<;*_<>X~ z;tY?05+=kj@Jb}oVhoXPlLbO3i6Qp~Rt?Ew27MNdH}hlo$CBb2) z+H)2>6d*7IOY^ymQ+A_4-OU%iJ+7OR3u9tV(^6Fu@7|`|J~rwAkFf*|>49BHn>q&& zax<#J?CV2pb<%OCgvly|deREBNeD>45@Se}F2A`s`4@L=^1{*2=RFz8V3FcVsL-g7 z$^x!y0yOBKi13)#O420-u_AHLk6>p}dIP7x- zZwc@yCZR)6|8!&w!Gp$DAS4r7Yg}84FsBTo6-U-(%oDOh3%Z$?WWmWQ`qc7H6v_jQ z&etOj_&veGIRkg_xNx?o(sh55iL@4;t$;vu;Y}y9SmOzyhPEY=f_O+9!P`2SD^t4e zc3YZKxNc%--K74$f2jLtK1}uHB+5H-@-7UHyK`W8)o$?G_HMQgifdnQ4SW$ydR=pV z$D9oYe*hN{@}W1CT80sUSjI{i!^&f4v6{(yUZLC!r3J4oz8q55gTEr8JObl_;H^sw zC`nBcQib3NDxKMl{!tj7L91_+zw#Tc=??pex6y|UAXh>fzdqLhc}E8XB^GN zss+oT>B`I=b7nX&H+q=D~MxSYe;0p;$lmh3_jKX!6Dt@7JWTmt}Z+qlI zbF9v?)0>rinmTRH!@22~9RxOGeC)8K2c!qYvY|@~PYn zDYsNJLsV$UF@8f!#M{A>iWE~r?l^Pue7tA#C(`~}%SH6*Udtu6>@eyLL5J&d%OvCY zqII__QH8Z8;hN#HNXIp&Eqc14-nvOx+?EFmrJQZg9Xn^aEUYzAGgHu2sI|rZoqz#t zj6fIsAZ0AhJsoDFd)kJnO>R`)68{h{j?|K$EGUNEV(t2kcA$IP2)n2J8724ZkCq`m0Vyqj~Z86P@&pr+_j zpvi-}53GFZfrOnWU(&jTL{|)j`{IjAEgmB}NAEN)=|Qr#twAftDSFk!4+~Tpcw|b> zwXrHPOsUUxvya|M^F>HCvJ19}3$;nhR%Lqix8yuy^~R;U=HLvse(jrTL#pQbB7rGe z>#9J7YqrZntP!?#vgrz;Mq0qez&umL8%k2L@9G%cTHs&K%&f7H>vuhk*cob`jHFer zR$FU#EkXk&CkBrIlvum*Ik@A->{NN9FxN~wQr zL29;dNsN#qwK7g}_WvR59biNYmUhvxZQHhO+qP}nw(Z&DnLV~`+qOOP_Br?cxi@(? zc`GZ`>9ndlYb9TIb$vB7Ff@Qt4HOBP7IYpAb>@A7McsDf3<^{Tn1u@Pk&MRvf79*% zG{*lg)Ti+e_L&;HK+!9^8oB%z2a4G{{X>EOk^im12t}`;BC0_rW@%$8XJ~6mKtXR| zZ)-|#ZRuo9?_%m|GuHHTVyv{ntRr)Y;zE$=KAHfQJW)Uev=yT-oKHcK^*8 zGW<6Y7W~hE#)kjoKfVUOf6xC$xy=6%@4v~q{8Nfv>_5{IF*UX~G5t?PXBQ_^Lt7}1 z98-l!DG^4P?N{mt;E}E@GJOIFI%?I^`O@}G+b6m+PzN1t<`snS^6rp9V}#?KFGJ6 zzsnEo@G<|q+OPH~+$Bm4iN!~6eT;tiX2;ChDXM$!)3&6ex#-hcAnJ8l2pq~?8=)A_X9+q{UF zii>%5qFQxZH4#@AJQf5+Ov`>`4YTtsu*xXv2+QQscrmwG0W^||z zVp!6^#_&kSz{1GP5L)z?{%>_)EF@reNJ&_I1;DdEIc9do4>+-*wUzi?Z{-Nx%de-49H87AOH~OakzlgI22G%kKHb%BaR_4}* zCIST_32fwL(1CmPv z+d~>V1M6csee3hXNBnk>=D^m_#DLn&*2q9%zilcuv9dTdv^KIw*EuvlHNk0#`~D*- z)3hE%BeOyqn%;l;iwg>JxdYK@ zv6-O(X)pPiFfchYAuupCFnxZwcgKe3=Z99_cW)>7wSFeqn%~R~Wn{KwV+vN(uVUJQ zX&0NAaxUi{#mYjKHz5Q?Gq%GzM`#9dXJ{*yf?-_M$0A7z@un>g3qhUp8KlQ_c==1Z zTDh1);9*M-gdqwktl?t{)+Tv1ApbxhI{%Kj3wCF7xF`X^4 z4FRyu74%TK6iy#RJ>O?sMhiXf?1pdOel(>a-Hnz@l2)b*0J!SHU*G9HGgX|%rM;nP zg989J!bBmeyf{##1{3E1n!f5jbFj9;HKo!+`^m*DMLu>~Q#ea5kbEsSn#-A8>pc8D z5QqB=;$4JU2#+)wve}S~CAVW$0~E)TWEjbZllz^@fwe&`p-m+vPZxn#fJ19_& zACPO3b6tWk?*375vm&?~by`iH z3WrtEr!NIX^U%*YpHGS?^cLPR+57G81Pvu3ZfKJZ=QX)4k$kFX`PvULlI|0!qZ8IV ze6UOtVcLYkVO$yPuG>?{uC5>HC$k|cMxU0= zoHuNENj~)H&85kV6~&eFkwnPcr;;XRL!{}GjgJ2CYNuN@=Se zyEz1X;W`A{u`pbP6yWlbOvdh4e}BN27|;fRCMl8BqI zS+KSU+aY=?{J{3Y=XkgxhLas{m_Ozgi5+PUYk87=XUtTNoZS2GV7mds+zr-tX1g)w zc&HUK(jqj`aMX;a!afb=l*BEk?kJ&rX(b>W36EL1EoQF2kCl$G(Hw;bHr#*dg^{HH z&v%inYtNeZ-cREeYU-vp&}xE!R`ThNt8=p!!TxPeyu4FJ6ukZa79;fMZGqh!$dO&M(f zUkmMHPrk`#KMQ`_hrcM0CAY`JJ1=wRuLaZp!t2yY?%~l^Ii8%vk^#Z-b`OyZ_6QBc zQQ9+jC-19l-6E;cd9tt?v-1GoujC={uT-7Q7@RCy(O6> zsWb4)1$cGWi<5)f9|W5ljfHo;>4<%dGhUB%&3v;7G*VYhYIGC$p#Ft5oBQWfO8=rv zF@JKiUxu<5g*7BwlxrThOW#pc8A>Z6?s+pXH(>A}kf=z42$-sgx9p9z{^!A(ap#x` zr8J#%DwG7~!A{g@69^bkok$duOS}?#$2KPE1o+XI+B>gR$AEZEzX!_l4`95w3kb+M zL}SlClapV^VU0Nvgk=iFshyo+eJj;~^hx8seIHF57saS`qtG8SjVNExKp5J}8=ES1 zM@gnGLo!9=nBA&5Ncq#D7tjz;$JV}QA-qqhVN6e|$q_RFE_XQNtniW8i6_>1X+K9P z+~!0u5AQ*Fmz}*T3lGJU5*T>ir3Ag#@dr8S$lK3f(h%e{W(MEDiQHsV!U~K82KFJK zn-NWpf`Fa6M1aZNo-VlF@04KbP7}97LNuv*GHZ%zvSNuXXEt=38#| zD0NaJ3Zl*0mvif^^O{=0h}2@7An+l>oXia~vwAEbV;r3mM4EcGaI|5TgX6=d^;;@! zyS&-JpbjT$x3Yt>m0WwITIX17pT#RrX%wXlT<-~W&f4`gT;uy-_E?hG?km(*QxUKb z=C?IFGDh#(>2THbQx`BNHp@^T-EY+RSJF3-u>)h9g)E?ALxQRhIZNE<4r9DCU+rb0*+j`n_QGu z<+5&l+dU~WG87~cdewZ$)Q7qrXGqR&Udg=AI>yL_eiVvoeiHWU|FLzR()&lT@Zd2M zqptq382uQ@28ytZVjiKU)++*8C+}^u1Zr!TmTCL7o(Jj{;8~F_W2?h1$Fu3C0aQqs z_0K)r5ms_YuNYDi9sdlOV4H&--Snw#kM$(!DVVt5E(q@&JUpt#CM_Adq@+uEx0qAL zWgfKKWB}a_Pk|MHCl6wKU6d?JGmzKLYpP@!7UDc>;E2{(0x@i9=tzh8a_|n0u*^oD z*~@pLUk}W0>;YULP};iF>@{HRII^tvNRWb9?SCIfD!`2raYT!6svHk6VB0EbDy^2cLH`Wn#koINJ#n?jH>`h+b}fq``?BtLqh8$J(GP^-qKn zBAg;MQ@0~1V@-$BI~+ENfsD%k+|l=Un(97-ULf^V{%5PxV=W1VY1Isl^z^en%O)n# z0@CwUr{9}boRg`RcqRJo?F3#ce{IYxE~z8UVKL~YzLYYh7nnzJD$Tbva$ZMVUY=^B z>RY@%sC50q*|M4}D#CCbPN9_zflEy6;0Ijx0+~|i0&}vrt@{pa-9rgX=;|vuRP_e< zdVKLgzYc=UZmbb2$S`8<6~T4jG*s}eGC0|yQxaK+YmUCncWS;oY`gL`6*W6|e{oog}zL4Rb>N zn4>auKxiQGSu2loP98wnuvq~7f$%N%ONJW$#nhd)ft-GnyT}xXHDQh`>FUQxpzvsU zyAaEZ$jsan#{|D>UUf{=;y)6PQa^WQt3_YKxtN~^lSAd!C;fpy9vhzril5fyt*quzI7T}uIi;wTWBIozZ z@VCEAV~GJ!k`*;#56JJ3rg^`|%PKgp2!w+NYHQP0jn7mpl~tP+FxzWZvF}|s=js#G z6gv`$k>^Tn&gJ^a2+(YigmWFP^4$Pk9(98Of?27Ub>)3)RN~()=GOWwhS$hA$@b?G58z^VwPI>H~?QFZ_ zdhuv938$;oGGq;6z_9An5{vFhGKjp#VavFQKR4o2vL`n4OL&wqp`nCNn0&+Qr5@iH zGnj#cNkRQpRR<_`f`&r2#;nWCfHtPyEEbSLV95*7ec_%-6An)ey*FBkHw8wLhwgs( z(h{qOld+eF5~YorBF(9GLx=seM+ulVa`CJNb&E zzLo{Gaxw%BUx;|NyWT9Y?i-AZy++@@oB;BTb$oJgY1SQQH`on9^C?2g0Cqqf-<+ty z-Q3Q85GV3^5)t!&v+mky;GexoIZ%LB?T6tQNi4WEw-icLmcln2iQ%0lFy9N3jzV;nbqzh(4{f#aNY(DxUlkZZ@bX5OMBr9m$Ln)vm3 z2$@r(R1O1vcGhcf6(!z@N$)D^o(&9rV7=ggi42$PL91KllHjRaDL>}#rLQozk{5RR z9pkW3b&0(klVv4L=mZf!1oYoWftlc)$&5}sDZ1ytIjt8jzLXtdhrrFW-e`1i zWys{$A_!78QSCJbzxv)?g>e<2Y04PgBhg1pvBL0vjj8RqNmuDW2JFr93#w*%trRSd zW?c=zveYnZw04S5=0#Fq4=EZ4O`fn)!&RYltNr6TJ1Plsitr_Aq6RO5Abm2(NpT2} z0os9UjeNBXuAIU2Z;BXQYPWXZGN_Wk+Y*(V@lbhOfL~+(*A7_QwpD@ag9Zk-`sY>=w%pJrK8ynN=Te6Ul zr%q89Rr!{skUH!J_iJA2UoKFJoAPPq%Dcyk<1cCXQF@3B`{7DQPEu`H$hIKAgE}kJ z{>@pab2rY$0MNf0c*CqJ({8gFE78}h0yV^B?b|pOiy{vaqS6SZs)tEUAqXJCw_|_0 ziOFdGN~#a#2Mqy+|JmsZ&917tRADKM6$;BUZGz_`L3ooqE7_~!tLuAw}&{%Rt48(axx`r)71dX&UqHSJ+iegy^wr=2S`! z@~oI;&4A2Yi3LuFAv2h-vHfdfe6_E6?sce@g9nUkzsSY?<~)nrNgI|@Reg*0%VCQH z`#Z@ZU~oF->3?hOpf$6hdyl5zz%dsH6}dwbDRy@6Y__a)x?FM;M7UO8G1ZfWz$)?A zhr#Wun*YtRUVHE)SB4|$p2yLCZ{U71|5}Y+b6XNERM@!eFS+~kO%kpV8S6ZVtLb!HE^lKCAk_1mB2 zqVSr^?pd0c+CuY5d>s0MKdOXS-P;gqIivRxG;8?WLK*V+e7ASD)wu?E?sXs8ot_># zf9AUfRN5wBi&30Wr8+l(ndqs3c5hU`~5=R{U zJ5u~=V=rhqZNDhXp0s|%UR7;OZPYS|`VSbK)Z0)Y_M2^uXN;YnF=gO1VFt|vFUr(- zZiw!CVn2l>mQF<&&52+lkv>ibw)FziZ#@R`M%e>>WW3l%##N4OJNC8Y%m@&8-qEhC zQ|V<*0c|-G;XY!$B}+GOfIqaTP(S73w#L2mr`w+fI-9muDc|mvaJ7w}%}1-TFRP#k zru}rEB(=(2cPTgexN1hof{aK<1JMyO*wEt?l8O5HB#7EPmArKlm*CHLW@Z92jh|CQ zbD-It5_t9T^8 znsujiSMoq{;wYd9hlkp^Qt}msW_=Np?RXgvahdR-19JEECV|lo2y)I+hUpKNReL=( zByDFzrRb%qM!%|^9cCU-s2>%p>>`5i1+bDt%i;rae0+O@*pOAN6NOJL!mCMe zITgs!R_7UvoNFujow*aLi5PrNUpn_*1fR1L!#v8kpa~xT(b#}c42M-|LP6;-^%UKP)zEVz(4EEAEp1iXYkL0aa6bLQsp0$etkm*u4_cEtF=4{MlZ_aBqg6Y3odSy*x5B;4lGMg2%Xdv7qLUz=|o&s-~dhJUByJM<(6kwGYe)f(rTrcI!^lJ zr+N>U-l9e0K;I-*Gn?9D=tJtbLDv|hCD}*>We_Nvo)%x{WjOEV=J zBbo^kBs_p$o=u}AqNWiHUEQ}Ql%8S`7W>u6$E?=*?SX7_MyK4L|J>J#YbQbMwJC-+ zd`K!vC*(9*Opdvrw$l14+g9=vEHx<7uA*<@1t6&PYQ}lFO`<03#6`9Ayk!6+7tx18 zg~$u!e;x{K4=L0hO&A#5ACg<4%@Z(>1h^AVse-H=|OyE7N~cy>9fV$^_W|vczy3d-5qMycydMBc|kA zLq7{0OJ63ePpPz)bPt69pW# zh*jdIGEa$UW}mQ9;pQp#<<`p8(~Td@5LmI8{5S?Zd_PV+noL?YiK>W5XkH8lqtPJ) zw=RHtLyMUOCr^?%j@x@X@ux1c`O$~B@PyG4*H!`Fk4P9~z8JFc^SET(^wbQi8S+az z1B@z_OOc(J>qD}qjMr=xytMR91;z6NtAE^*bpCBC!Xuq;)jtFo@XUJ*Vj;2ZZKLSnGVre85CL21!%(L9Gd4F9%DIxVLZ( z?rN7t0O*;1cEmYedVar}>y@ME5plpx#t@?&@b2Umc*Msb7khDuqUaRCL&2@zBxPR# z+kCTil*5YRb{aiTs{~%byDXV4b=2B6#`K~iW^pkvAh;^v=%G%4vr--niw4p2v^Ckd zJ^@a3sb_sQn`uce?fn%X;9L++D7{%$Qn*{6O?HaRSRE6%nL2=7>9jjB%TKCgiUfly z@CHdCQ`81>zLcd2+YxSR0)N;hvq(~B`51J%{x}2v9~M5__?U(G^@0-2pc8`$!5>7I zkXp2&dGz}u!1PgVFREAy@DY(?nOg>Y8dM;dDdwJ^h?{&NsJ|Ya_zHS{#eF9dA!?J; z{6;}OxWOORYka|;t%^qEGOtB?jcQxSJ#$6-9lqB*f6#bquVu9ebl#d+c9ApPyH}1a z)wSu2a~29z6+pyISClc0LNvn$xJ)bYL$>|0sRAo>en==PuA{;13u0w zUn@7iZ{if^U^s%I!`)P$ue|w<3z)B`-!=A=>Qe^CU6$3F;hhLYB#=86PZ#SJ4_Q2# zXFzI8qy!$Bh=W#^P&rfe1SPm!e7z(To;X0@P!aDp`gw2WRZxx*J{*Ym;HDlc;(ck?e&*Ja8olU!;(z7pZpPnSC@VTtv)C{M%@~q8zM? zpA*gKTrcq${R{%W?#cvW|uPE-rp}Ru|-Z zMR1e5puH~O=(=Ya9GEI&b_a~brGJyewT=$4r1ug^#$)^b&?!K*{A2C$(Ge~N0W5dt zvE$XGPW9zpQ%}v0DlL399A0xx=AA?W=T>we@^|S3YbJowGMw-k!4#LBJLcXfSmHmxhEzU@W<|=0(-lfKE6R4uiQr zbvX?qfWDrnQ{%lP*^-k|HIGrOh-x0=;1!iOF6C~QC}i#5M3d5{G1Mlz+}m$uckfGH zbs}oMvsNkWo)(Sd56VGo2`@@7X<`gK001EaS%7c4&se_^8=^+o=Tm+RptIwz1G z)C65N=PyCOO_1l8+Zr3Vh9`V&zPNxWH^*42@O~-{!5T6{ed3NSwkI(=Yan&Z4tjeQ zX83GXxYKQxTfas|fMJ6IMq`%!*BO;jVm!%OaTSMlPm^3qbJE4FGXWD`_?B1C&%TTE z`*L4tkEX;_RIj$-V8~v}7*^M&bdY7N1;gt8bBl@t^LX+|Qn$^hZ>PUNPU8rPHL8y> zdrGri|0l`ld3FcCwTk(Ks@-Zz3qqlooJU#>Ye3hZ{T9zErqIOOd zxd;ne=87-2b>HSDl7f0tVEUF|=uB-PkXZRw<{1-Y1 zJ)YBP6B$R^EN8@->)N}^+~M4S0v|(WVk?G~p12qGt~W#c2_|rk(R6lU{JJlWM=8;h zbTl3({(__l67~2Bk>mQZFG=j0*y_oq5jyYQpT*R;Wded8Xa~8g6ltRzL+s=i!b5q& z)xR_gtN~48(kgTpg=~P1>bfdND~K6gazs=HN0T8x9+WkTv3{M(;tIaZ*#idV=Hz|w z2Ya)G__U6*@3fY();E(4YH(#FB=dtE442P2riYM?CYK*7P|z5AAwaKGu`dMV1rgM@ zeYJ_&lsQ%Fu8TP(E!}vq{AI!Hr^Ga(3cIF+Up|p{8xza3Fqf|4B>5+z=Zv9@wNS_v z<``PU`@Mo+4UwHkmW40?5vTFFB)E3PDDP-URXFPyr8Kxd6X|z%{>kE+znEUl@fqUYWRJ$Hd0V4JizFrsDIk+ z+4n9j1XKAAzYX-%GB?rd12_z6&j;#68$9#KX_Ap80i8`=hdJJXyvY`^@g~o4AcB)Y2(#roh8K0EvqKzOD`OKbZ}q z`{qsyEy=J`zXxrgg*iKhydoTkI1Odx5&|aoR|Viko6PSrr`*3-UjjZta5pMwP}^Nx zaw>89%yZk2*IY~C9bC2#tMxns-PFRd6bvqlvw4FJSqSvCI%GzM`nlb+%eFTl6dX*N3{bREXU}W(rKCgJQ$%~ z`Wud9b)_f}eg8pqFnt2F?7h7g0jSX%QUb{D9Se&JrvAkM_tUg2V(=z{rI-XgeJhUi z#;VXHR8yo=+#|}fgVI9XItmo%5tITakKi4{Z^s6+h$zy^=z`?FI^29M`7OPov#;00 zkaPiw-ksKIyZkD%v2Ty8HLFds!}o3^2+AA<}u3ddH5?7R0O zUlsVXF6{c4eP$FU5w;)wPnRAQY3Rz3cq>QzQiY@K)bJbf5b~#U{`^7I*AcMr%i+ri z&2vc1sft?{*XgS_WaPmf?!IXjabL(L^1iFj8D~InY#%Y<2iv9GMGX)&-t3G%rvJ0H zj;!WANyR#St@|aE?Vh~0Q|k_5T^NTrB<{tHutU$a>I}8C6)4dmhN*^n_hp1y-%GfF zk{d1Y&xCg0^XDRz3aBeTS+c{n|B?u*vB5eYjm+6N_6FjGy`|FFKAGg`?&^#gpUP>=#|LwkO7tH{HFSy}1tImV*<@MPlojmD^ zPdSvqZh+2x5o6fF;Feh0{;dcNqs{%!ca~*s2 zaz>E^Msufd9{gH3%%nAJ9p?VAj)I^&huH%LO?wxh| zfb4Ud&jZqSo6KbgoCIElWAiDH@ZYKod8`Fa_>Ajx6IU*1#Q4&-oKC(Yh(=QY)Q;G) zeH}IuHE&2a6&=SO>9KLBsiruWa`=#O?TpPv6#OH{9CHyS$j^?4KX@k^i+$1`#_U`P z@oPm$8ILD-cqShu0Oji$R)3+J4v&H-WCStSxIOpg9s=>x{jGV2F8H9l8!k|H^R4h{ z!Z{-IhEDO5XJ#qM(~q47w1Y==rS)E)S(30c zePT|5FSt(aYqaG+N4Bs(KRx6ECN?>E-p42Rx{*}!$qzswV| z=)@-ZRk6PBZhZ%zqZdQ&Xx)D-eJ@?@8Sp5Bh$C-DL38|jS!2}?JR9LC;%YmDIbqN# z;805E8af+-q^e<)`bOA|>r4gV>pP&}v0)5X__D$P4_%B}`o+_rM&z0bycXPPp^t@4 zdSvN_Q_^q|JnGTJiY^-`D*YG9_SQMsZ=N^aQ_PH@Yx4* z(n37KnduCIPJWB(reDwlZa%K7$`I>ey&IdPh<6A!$QDN3?5d)SSsnFK!2Tjwc(*a~ zuZQgd3&SD3#g!|)%PC%jtQ(`0_ffT|EC?X6}ZFd|E#*Jkr&;uLdTx}N)3{$pUFZx?d?!Xr_u}b4KB5OYJg>BKT z7J)Wlw?;XBbw!Il#(;vp3Oc&ZzYYQ>KD~_}DHZ?N4B&WHLJhy!JI4*G*ljbei<=67 z6pimO-93%U$Eq-hm13RbB1()^S#jBOIe}njp75<-OTt~x*61T6;QX6H7x+& zT-Wj($uhKpWBlRubjQ;mqou}Zag$aR?Up|wvvgp0xdsTK+QU&aicqNYBZ-${X^!-V zOG?0vDvxW?Ws0uNX#`fvu5B2z{8UvtpE$UAQ%41zxin)>_HS)6mQi+#%;y5He{#nJ zMvx2%hkgO?%u~IafC|A|6^C{A65KSrYt0ZI@ z%7Jcx!8R#}T)j8CLi)bAhRPr`)Yum*aif(Z)2iN9ZvCg!*!e zv?(LzR|pszz2LF}8@oE2(|zX2S`i2JyX_ES0Q1O(a%I}jHb^qBhLnON>`-QHP_~F# zBn??W>Vj|Z4JQdHq%(Gh%~xMj$@OWMU-W-wu* zNUp(iz{^R`;@o(ew^g^AJkAYaf5T z9gb|MwRGeqM?_5a;(hHYuU@4VU+lae$@=%ni!xEXppST&<5>|6#VqWikSBHcL>8k_ zXh^KFj#=~Z#=dw@kpPS`HUDs|pxh6}Z|$`<(P~a+1FbSv%6#Zt0iCVP*XnnZ5$v%9 zk!k2mqh!5n^K3jfg}5HlL*9vS^hrWCKnJsY_!Y>*5W%@#VM?Q;gFBkFUNS6}x#n3V z4!v0mVYtAN4dNh%I1HRFttPRqHpO*~+&Tdwq_lmSs)8edcpTklHXNoG57_F<<#yCX zvKzK@%@c@$qIvephHW+RE|&+cbBkWhFv1C-H|=OeiIlIWEP5HwFR1+9)sT@Y9^E4pK~ z;QoS&dVLFG7eXs`Dc&)(s0th}NA5fQP-_d?xY=fup0edrk^Sj8&;~g*?YbvOi_$Od zY>^e}CPJZ>%&!-eV;)jPHwZb1&hkBf_%kacyfGY95Fpx(@LU08^75c^%bZZs>%!vL zY`XZ}1FjrnI0_sC?Aw?f=cAXzAxR6$^?b#Q^n^}ncJsm{aC9c`KD3kYv?=3gwM7e; z4g~VTBC{F0 z4@%fUsDJ{>PON`jvLa$LQ4874mv1t@BEAbb4gHG4jamp>1-!FAw6EI1>yuJlY8yB8 z6h5O|hcG1RQiSLvkZ1{t3VbLACEzBIHjoo;RlkkchgSwL8gv5BUDRGP3Z_sh@3aOx zp^K6`SbA7&rm!rf`X$Lkt7m6jpDEb@oEeS3l0n;I)fC;+Q|`JmPJ2NusWj{{Jl z9>`;rgC9UXt>#BLEvMGo0v?4o{J_6fM)7BIsxCk^uCn&)okv=dkZS$Yk~!2t zKIakdvp&|5_=-|~h$k!xa&+V`X1Y%j)P zUJd*C;od~yCHmuB!8qiiOc@SNdbr47^(7M{pDDrT5Uum;*Am0I2sXBNqX;9F$(Iy?oE)wpt0kY~ya>T=n|`MR9ikIc9|%Hu z+$;&M8$5a=HGO^lK9@5)2OGq!_#fx`^p9C>Tp^-Gq%!dD(X28+0x^T&kbpfH7$V$!S52VJ`DFlo$0Oi zM+!*z=6PWbMuUS6raYFOE&eTxmxk>jT>jS-`Xb_Ftn_*V!%+KyVcyMT}p`ZZ~R!m6X6Fx#+RD``lkk4S~LE zr<@YV%WW))Va(PjU(Iy=Uh9P^!&y~(YiH%nqm>&1&)pgcj(hxy-b%0552~RB!jq{(8@3I ze}AX1+Y`j*j_pp+&#l@gn<{5Ss};sYu{&|p9}Hom{nAl$5a)h*dPbT4B=~=XJ13ff z)aNFENk!KlK}DSG(1 zTm0~d_|STj8)F3cLPH)1^~EU#6sILe5B`_q!vskH^T$vcI@RTUIc123~MRoe>>Vw@1e0?9QGOpFR$sg7M zal?|uc3*eL-uY}zNKK zX0G3*Q3f?K2)lf80&B+dhhsmn*6i`J#F;9aC>TE?8Ud={+&cWeT)QAs*fITJt{to# zu-s!6?*(b$e*+m4H6AJ(W{`r*9(1^jjx=mDio(i#y zpz-qJP-kB6gBjX{eNQMFNslJkKPQAG35OUBTE=J!ul2GdH?~@OLazFQgl%55v<034 z32hciDMZbXJa>Tnq{XP}m^!&X!FIHeG}sEmIKwE?=7ua@bO7|d+?+RP^ELyR6S^DE z^V-}<)NH5Bp!wFMB*HuaRKW=vQ2aNiejb+vem(pcL< zi)V@`5gW!^6lxoi3nHFt18{+$P6=zG%elQCu2!&FM0Ld8i1SRblriZIOtslK3sSez z=rsRqo{0UlrV5u_YV2~PdGTu%aJZs2p#;Km4D+Q{e5xiW4?IAew_k{W8M(9=?M7N^ zJ9c)zP}dEAspTPiTyU1${KzT85HN%MxwwhUD%M(yUh~3lU4XVUmdd;4C}&Mlzqq_V zb$0W(Yi0ObEG;OrNWlgGa)I`n<6l`N2Z_d z=~(K7gn9z>1k#|Ar=h@wJ|l=l>mxVrbmHW01T`RdHD2LB@QsS-E&`cyx}12(=!uaG zN+v+cyfb9JWKp|Y$tX724{Ei&WiQsQfj2m338Wgl*^$t6;JN=m@qp`HE5*`Lmp58= z^LH_H0UbIIF9n}lVfbb};Pp=>k=gt#WD`E=y$veCZkG#k<5B=OUGDDL^HJ}z?`2bR zc#wXtSNNj)K-@KutQG{@qnok!XGmwUvzn5CqT#t|>yMkJ8JgCSr)m_q6S&3#wr`3r z=YgcZV*($&+AakUyys=)@gDl&Hw|VyEv-<`-vQ57cFj{f^(0!=LzlsG^`WrE z0X18LHXL~Tm(0I#>Z^_|VR|0Ss49OZ6$5;|?LoK!K-l2Iq_S45BV8M;D668nv5&=P zXf`(aBps14RR1nyJ^QGpO^)_zu1XL&6>f`LUoi2tW1H@5a#H)*U8)!!Ybx;7bb5Ce z%XA~t4IB@2Fydv%F{Jn=d~?%IpA zj0Is~>q`c1c4egu+uJeeJHn=VAo(7|+8A@Ic2}~#82RA{g^Cu~ZHwyheqGdMdsXjn z_*D%EATM!$k?hk5e0!o#KQ*Uh^>-s`jxrQ|4%NuS$Ovu!)Z6Nk8)@_={O~PUQ=y-r zeVbNDZd~k=3y6I~rR6Kq?VSr~4W(Onx{k3ca^^Za@zc#eiOCBqiS9z`pb~$M%P!JV z6hyKMJ5W5$@~n0-1EIUZN+HV;`w0}`av7QL7fb;YpEwDa%7{<}kB(9GyBFPQiucpiGJxS3(_yVj*(zocPBq zesZ(#lRP?MyC@U}OgTzuZbh)~?Ka_jU!yLj& z22O`SWCL6t&(TgA_tAGAKs8D+_!0VLh{Y}P4dd?$@4&Ivn_mjdQ=ujI96AFkzO2Sw z1H=DA*g3_B0(4utZJxGm+qSz;+qP}nwr$(CZQHiy{5NwSCUcXU>{L=u^|rHXXRY;7 zXohqaUwRkIMvHRr?WJ5xEgpq%uCVkkdz5_`47*+XhN!!CvU9(MEP%DrKn>$^gTp3w zseXyi+Pgs2a=|@}S^g&T5`oy16*H+tWbWh}e|zM0!l*BSq7m@Tsa|vPW_4HxLd#(* zr9*!Tw|<%i^4zufiQF*n*S`fvi#6SEZAEp9CVDksP&8T`|UvpqAy5 z9@Q$I>*%`hj|@(2r-lm(s>R8>QjjMquQtRDJNa$@3<_bBc)4_P#Y~@W-aPm2VMx{IonLXYoKim!hm)uT>Q~K5z|x_D72ZM(V>|QN*JpI z27SvxIkrWIRalAVTf1H2=n(HaPt_q1$CWES_?|b|#7Qce(g^rtXh;CH^uZWpBqrxIm-c0`$Gbc^(kMi)RJa z63s!UK5#}rEBTE3!3wDl1#RW9`DR^vMrw%*hQCScdZkN49$RCPTpDE11{iydmztQL zEMCQ3ikB&W~iB!7_b^YS(@?Q zi3iJ?3UIT2vzQHU&`ykStc4`e zguh2^;80Z!U{Q~)aEBA@0Xp5%GS{kd9MEP;uwC00NVK>@RU8T%T?FKKTLj$uH_II|s7?HhdH!9pESzNXPUeW8mE3&FVnNZjc3-@rvI zuSU$gZp(y%6=9~Tq_d5u3ce?>|NJ!OFQJ<9fb8eMt13{~{iGgg{1hwnJy@@8Ux{Fh zhJ=eCZI-~+R1A$i62EvkM`R*g1)?Vib-`)j=y-M+DpgUN#`eu1#vW-k@(djT@qw!b z=p?ir;~~FSi9s`2zOe)f1~&=K-8DC`a98Xum<*sR`H@Xx-yeq0#$<7d^znu|%$9Od zK(0a1bcI{nGhZYH;+y+Brp0bPt^qY@ZKSQB$seorN+M3h?nX)QK1o!dBO1;uo!hZGRX#Fa52|F8>?KfLLY-wtBjwSm# zVpQO_sIwAoVq@ZM8rBocO~7PM5o1AY*HFJ(f%pa^Z?u-isi(4?Swt^4NLq`}#io|r ztySsm1V^06Z%@-xAROv_2&?vdo_&@(bUf-v_RLAw+FXhPoa6oUsDNbG&@MP^sU-G3=ACYjQqc_>I!)!~Ni`)3n7jWnoNVO=xP(TCQ624j(Wk zmma+u4E-%u8L<)EDcKdcJ*9=!rnsH zw|)O=9ZfFG+x(sdqi3MsXkujO6+!c~7$UGDw~^ftwm%xBy|tuXAlOY1gtw&zp`jjP z%#*BY#?WGpuC>aj#qxJ_(n*x^`ssU0QAZ_p$0Ni8}scgNq=2_Z`>vF(v9R*mHAp=0 zYy^8iia7IIg&qECW_W?i3isE>*0$)Bx_ZdRac)81#j{L*t?F__t{561T8K^Cu3jVu09S(V zFEb3Rk8j;{PJ|-daLT}=%zA0RsDJL*au*eBrH?Lc1{I~3VV=!2*Crb{T=J1ExDVcE zqnC%hCldkv#(s`nMe(}J4XJQ#+P6uc!UP~>0zFm1$uB-)SkTsUJE|4Jqg!{e=U(Zv z3`ZcGozl@_U=crD0M&yu>Ny7nU*y|93yXHHl+^lFj8J+_*AG5H>v~Xw#mU$C7H15L z;WU^EDr?LOwC~J(1YYo^t$)AlPu%Di{fZ7WxZ_VaK1Iab*_5x$4vzJK(nvkX=a|l$ zj>*5O%=v>@n`IDH>fJ0@K`J~x!T&5L*+$B#m3Ds+HE0m3CyFNh zj6lf5xvOhor#!PWyhxRbh~QSAn2Hs5##F4U#mQAXWX+eM=D1{P6=*9G{TlgUYS?!x@CtgQFoALwjq#n5NhZ1bM__c752DhjxA-n?Yk@glo)W84@ z2&~&IwcoMZG~2p*7sd}{cppBBb1umYT=ULAp^F7%nDtBC4^&}tMpL)Y?&A<9C`3h+ zeV->j%ZHB;w~i;ScO7=FV32r`S4Jbj(U`tjT)rT1z-2(SNOsf9D`6WPk7tt_jUUT0 zplC&KnD~7+iH06ri@@J$T1b1Epp?0Uk>ZPjtLHDX)*B`7J2fm+P?Pk~rH} zvS><{E{(x1q=pq58jQcGD8@({(5hvXxqO`T89-%A(i@8P3{)3R)7j4o(*yCYOW3r* zSxkA6o+*~s|4H_Iy5S8+Yi`2UagzI^arjr3&ZnMTriT=VX&1+EfzFQw)o|5Le%pxr z9^?r;*TLQLmxu=dC}pMk4KP8Kt2Eo!6g1mnvxRik_R>xi7Vynr?VBhUClxesT2K3a zt-Q!9!?MZJ?5}DKsJR?>GC`-&UWSaT$e=XOBw|ltQ92N&Ie2=4%VUZ zXq|htSuv?E*vHQgv^Rj8dmXnh(HDIfAqhxhh@lrZ=%1^F6_XXifP-l87VIUbUAk$G zWJo0}&l3+Ehw~1uh?~Q1)%;hcKmN{p3@&UUL#su9xD9I6d*|)dF|2_&7s{D9Zd;y; zmia>+JzHOMuMZo+KM4G*8fLJN3B;!}&T)1`sD5Eh;@ulLvsJcaIS?7MWYUmnxmN(E zv?Bt3(E^cH{SYpiY*vy$_~tKn>cT9I58V=YG#kBK{U@5h|DJYJ{~IXb%--wcZrnq$-x_#zHV&SUN|67g;BWT`h9*To^)wm;M@LeJKk+% zUwTjpq9O^&I}%uhy!0{7>b<{l1#d<0hVe~1pDuP$*z6pLF_M;hDrf5;7wxU@?)w)* zjv|*tQpf^Vk4t(;s!`(o6J|NBjy4w8C67Qh^{5FvE4BKFy=px6jYLhRmKJ{;aPT4k z%W&Ha=A)aL2!R7;S+Enky}ok|$5L%4)zH0~KWe9I1;CCO>6B=GG)na1z=jZzpZ*&x z7QK{045zF_Ao~Hp%V84p z9efgwbYi|!#Man_@rDj>;xTL(`(lVR*~qn7CJjk|>=`JK)4LQ;R^y}7569D0!#qu# zZ~7zn8v)`qIhcq5FDf+~-oxVQaG`GU>$%OC@l#e05<5xRx4=7k=}{q0LNpxgc#l>c z>naIAybENu`xg(^zSB0Cjjrd5wuR$l)B>>uhtZU2j&DjPD~=3 zNrhA=?|b%+p#;$BLl(CiN~sqm)@ESw4rrVJ)$qOUIw|>^NJeC#TPI#a{JH!+l83_M z)g?YjAQ9BS^9OJ|cnz=O1azd_Nf=$Dop2-m1z`h51C{MvmYPpN_6M|4?G`ylsa=Z1 zRjID6al_GSer6patqQ);^2G)7_G9R49pXkI~F(=<(z+HnPoNQaAVbsmaWBUkNI|WRQ?pJp?nvw4JX~ zwWAwmVz#u4Ra1o=cdGn310KA$6eVGQ(}|%se$l#!Pq5F`;ELK)>U8-_RqHh{>aU&v zlL6{MADU_?&S~?%&MLcwkfE|+Cctm~q_9rHkMd4D$s~TUx2AFi!aN(g*?sihzmXYi zYsWoz>MB6~AXYwwew!X%GWE%mN(pMdicTb{;T-kAEWzq|3+4v*w(4BGH#W;dy` z1M|~VcT*e5ngkZAZPfCYnjoz+2$cQAS&-@K!bm3 zc_EYGQH1debL>d1q!<{eyv#}&M;mebl;*mgGJ>%fx0f^-YgDLR&`qCCa9Av7p%K>D zCN`{Jq8_R1Qbn0BbH-j@NMiy?%OPwlz-}r>5wDL9qtzOJPSLUV>reCnN|4}K!WaGu zH*3CDUIP{PYO47=nRqIigRLvG_rMM1@Ekru; zjBT$0`jS+<)rKf@^vx*Kly%rAKo!P=*YtOHlBL*%asDpb9kaMHB| zZ9P^&{h1WJ!RYj2$lz0>Wci1b=MShU(~1r}>0#@!3Rt!eN*aE5C1TmD7s{n^dHDtj zv>ALn$N69j^XH7mL6lB7mseBYPX#g5b7De@0-UmRP#AV*dWPHuf2j(sn-Fa}%hgeh z8ZIpz8V$K+g=t0a`bkUxS@!16B9X!&jVLk8CzGGxuX$N*oT(4WOrNW_clI|U_*{5jeEOkUE7D39awAREgFtBn=&e*A zZ3~OVr3RF<8qUVG-W_JBJ%o8MKxWM)IL{S{NSY{zl=A+%qo z-Xu|MfJB8p4KW3Qxe-IzEu4!M0Of5ETc~u0klB}MLQ8+08M1<14MFA6j?xctj%Wa! z1OTXLbeMUeqf@Jg=0E4zCvVFH{z@vPYdX}OAaxt02}cg_vnYVlv)Zj@+erA^BB6;I zL_o16j_N|SdW9ES%1U}f$4&&l#xVZy+r@8bdl(f^^Qt9PJ?(oTsRM#F1A!`z3UQkgXz*8q&X6`BpaUsn`8z}>m?bAfMvb=|2L8P%J;>tl|%D&RG%R@FLLQAe(S z+khyiPAPQ}KUZ#nl3VY+lprACa$!8;qN@^p)^>$piI^E!<3}=r7`toSN8xFW04uA) zX%%iw145kFH$-1^qr%m!R(zz1Zep$1kak1IOsT32@1@n- zxjJy+3Ml7dP)|Cq&7R8hERe6{o#&?>PI$T!Io_VvRaX2IOP? zf-7HwuFaS+K}4JLU;OY#?eXybRpEtkg_0GYl%4cD_Pwg9lDh=RD+5^%9sGW27r+aWxnG+NGxq^c&E7d6SQ)DHLxjv?<+ zxC{_V08KD0D8TQX&q}Mc6#KaF*Qi{<8$?eBRr+=*s1p4Qk3YWFO3BI&r{H|6~U zAEDmkfRSk++Zn!``Y2MM5q6k(M`v)q0oFDhUT3L8?@ntC1B41zsj+1b%qTse9LoIR z(KXF7)*{O%NE=X1YYL9!{EJq0DU>^@6ULr6S>z*){T`FaOmtkb&4f0F4YSY_Yuu7> zXMB+;;Ye1BIE(KWGIL438MOW*wd9qnVsM?yu|$?_`suH4o4-){_K& zR6PVqDiA#eQsah%?^Tjnc<3BMOD}!h`bB8Pf0{H&G&;|lE)u{fMEapAK3?1j#PgBA z<4}mLQ`87|S32;H$rcd62GYohq2gG{JT;Isg?FIaQm8#OtDHXE@*vPM)pL*S(va7e z*3Il8LzQcyVo?XD_o^Kn`?^V%Gri-E@+y9#WoY85T*SZ%ACmfYtn*~mm$f$uJxIm4 zFofyFn9JaL)eZ5czXHz%Nd_LT8Rlzo?+y4@$=ofw$VPaGh!Lf@efCej6Utm>1As~M z#$k%Xy}E92Kkcd)D#;3c!u?ekbtk7G=>1P#3*jo*-AWgRyi$#T~v;jIHwrxos%ggJ;fXfP;_V`!tgb4Ex^5R9Vik- zohDU1Hy8?wZ-Hz~A#T?qV)6!uA+t6|bD1yA_wvB#j_Ni<{2tecH=ix~=S8kIk&$DyCCvoxaE&451Uz$)Fs||ZUp8Z1v^!b`Yib{4$pm1^A`ED2X z7W}G~@!J?8i6TNswm=erdjHNc-B7@a%9x|#5AZ41-{*ORGMaS*ZY;{Lu2L)gDCaRg!V4VMGJz3xd_c>_x*cLup(*4r zrFE@dfGT5bcR|IFtPoIgA^Vg1?aBcN4VCv{yF(=F2rjTh;@d@HypNIvFr<4t(%##CuEXm# zp}IuN#>m017K4h7qZ}PxI8u6AV<+!0w|TlfKRBQIJn4!NV|N#9lRS#Rdo~ehlm={D zri0khforSm{5P=CR)ceB%HpyX6`(UseC1LEOJeC_!?3@LMg^-tle6e9rchcE)!*C$ z{lspdJ6K~!@xEzi@*CoMoTHd~7GGiJ!|uhq#?bOvI4CJt<* z4Yr)PRRP^qS(JI60K1PTwJ04&Ypll|iUY#}n9baURV-K=zvm2x%J0z4sG`EhVTEqf zAN(*LmbqA9U{w3Xz^G#5;_=1M;wi^`{sFfczM9mn_w#)DL%4PmQS z^U#0XlKqz`i<259M5QG{&0YC(^92@`1uI8A=d5?q0;8X{W0rpRhL8l~;nz&>EIt(W$z&=l33a=PLl;2?y^43H}ty`nCrpvd3 zQNVq+(ttLT*vOvEqUDTn>2fZCh(k95L4D;pCiFP=NH%4TRv=9Jo(wZkwU35(Z4%Oq zw%x>xs9ljl!F_Z{_~1YqfP1;G@XnBXYUglkSntKU5yb16lKg~+c04L{@86VXRA> z>iy(@Ucy{69(0D%6dX1baB3IHJ=1rk5ml#s?AgE4PZ4EXS&o5qm2KU+Wh$aN<8J7; zRjF6(Q-m`jBcciJRWga4!`1>DC>Fhc+(aZ{HO_CB($#@;ZC^seMNP@NyJAoLDr1}U zek*6v$Y{RW-f3$S#Jw|=`K0RYBdaTKr5+L-4~zk1%K*YY6{$Ip4-kKFO1+Ph0P8vF zHC@eEDLaBthZbkM2qHvwvt|+b>)twIvV8>&zJjRMew@uEX{o5_3$iH} zet2=hRJB5vVcIQGT5Asy?H#VZvl46aX_--6aZ+eP z^HkH&b~T?b52}Ry!kDL^Se9WY{FR=iTS#0ZEVK)s_n)?_PX+`ahR@aGPR@^e##?;X zFPNqlPArxogE4Q-i*`;rXp1xqrma{QGGBvr;)BJDFlSsp%C^QornN{mF(CyT=kcJ5 zOly;^HMQU`rOj7OEJxj7985W*pYvy=isL23VFw_wIxdd@5|9QtRUqk{uV|{r z#B9n0Gwi&Nf2A{%h+HXi^^^Yh#!=gsi@~Mf15W4~aLZ)w#v+)NXePxT<-oR)2nh6clm}S?3!y~zA~lS6C=^OMHI-j$i%x(ue@aCc5kr^tn^OeIH&iMeA7Vf~q8rbU(o(kXWd)8RtkngFX zpAhn7Un(*J&#RM)kn7x!HTN{=#Mz)FuB*@@3=@)%mPK3tI`I}Tp(0xouOS_IEY&JE z%N{c>wjWn?QiD}+VBj1kc+XKjh6~Vvz80=bp|`9{XZF@#k2DN4-_Rz%tz9lu8Lgbw zgYa>XLaLESdu)(afToeYk!IH>XfJfl&xPt>ct*1$QE z&A0&Kk%o(R*U>skN499wz7HXiDs2j{Yu^F!wpQ)id`4puhq@ds3V9%A17O6$L}eK@ zRH>P0RG@Z9H$#Hq+>xTaN}q|M?vw@DQbmFWchTWo``eFP#Z6_&xrT6G%)q+s`uwC{ z^*YhEjU@h7^A~Nr81y_f$3B@g+Oa;|` zVN(063uXwoEaG3AdfY|y(hLm9zXyM_)cN6*I_nVPSGfG=4+$uk+ifCeapZ7(`xeYe*4A8K z@8@cW1p4I>Rg#(vPyVFH(bP;#&(#(#)4gv&15429JDKZ@yo@Es89mumWMFX^wuQSJ z!VkTr{3|1PQ<~&9si1^r?{XLXn?~=J?4s#$KJin%y^Uz?$Rlqw{UHUnGZ6jNWvoWY zj~y@yHe&H0pD1`iavajQ7|%<`%BicXL#oz&c0NSle#n63UG&_}DAHj_8&6ULR?qq# zV6z%|^fU=PSx1+(D)um5IzRZ9=aOC|UpD)<*Pfp)o zFm-`wB(wZCN2}d4s?4mbq%eREOD}IVckCPPdB5!IbcVJ`J1Uo8#h>nQ5XrZlZZrSO z4Q)W~LXPg6B$-E}!|1|UY(n~YG~{6)vLVwTU*?k0RnKDLt5&aZQ`&`oTR!$hr+*r< zm^7rC9s^;robD9mX%E(55UG46bsB&QD_a-PGg_?kEdtz>$*=GItu$I$0v0sB#yPGI zQlb7@>7Q|V{{_+T&Fze`?q_dV|CQ1l)44P2X}jBRXVBujLLL$@C;p zf07&bzh9^RP->&bTm@@JHejCjDmZQmioYa9*MFGROH+L`J+7S#s&$6}arhMDC-UT} z5x@rT&z^hNIFUUH%(3P5aDy(1`fTJGWL3((+C|WxOY1)5TCFs+=;VBVd9QSiOL3M!=A*1j#HoqETVwQ!1C$}4=N@t-l^F5I$S}Iv%c*K*7fBg~C`~0%=r+0gI*58kb!wXUtAiqB{o=V^!%#QE>ofAtu7YMK_DBe`X<|*_9q84 zYjqMsS5W;WmS~z-&abXy^t4m^LLOZ=j|rhCGBe49wRVM`=L@^=wWQA^_J9Q1>P%+l7kn$`_uLP-rvaWqe;;Elo#c7luXWh3Tcus7=pzRGfse?%t>GY90J}?pGobf0 z9(2ODdzy8g;{&tt_R2gd?i)Qqi@gX{^mFCs=jo@5BvL zCTWgk^vF$Ku+&!gz~OX&CCh@`gA3r>WN{x5Pl% zpXt?Taz2{Weiszlcr9GzeC?lymotthN@lxcsxA{Bae?pw$7wW>1cu?87GbF<@87h% z5_RNoK~u@!b(jTnHMCJ6X!*d2AycBSOu{TMm3vy20?m>^+3 zVLfFzLix)uHP*{vj+q9(E6R+j?AA2yN8GO5W0GSi@fKfvErNIX^0dT;~u+Y8PU zoE}F1HVPjBI|%fr+K5BukLOm!6qgf&rb6j|!aoCKSyc@bB&feI{p`4!Rs@z(%3_fyax@7FRmiGWL@oT_ z)Gh{#)N_yE6C=L*V#Zx;iG5N0X%8L|r|0F6t^${*%JqgvmB)!wmAXc=886y_3+?ap zlk_H;kR}FchXEN+(Cz4Sr$y)YI(S&rXA2?@pL5;^(u%_=AUb8HO*}dp1{QSrUo7!gbbXA%V zUT{lB=u+Q--68b2;#0n7unM-#q9Dj|FWC2%!+(53dPm`(n~9`_pJqND3eHgqh7j6h z3;4>CCU78g@8!gB2>j;tp&f?U5MT<+95|obAN){Reg?-F@80_2f5$(=&@;PpY4pdF zlPm$6Fl-*#0~_t~-}dNCs%hK+2yp!?fxU%$lf`4&xrbM=zf2)ZJ`XS-6FkA)I3Sf3 zaDp1%OP2ZE8fIc$vVvdAsoRB~9$V9qhw)E|r$blLuRy~D|EaaOiRJ8=iAZ1p`pFT2 z4M`(l0+t<$nCK0pGv^&G?jYSN;N^7i0Fb&lwUe7yv%36=KQhREWl3L9>lcZK$JWyW zcH+p`r?O8g*Y$;Lu*3~svwMQ_?2aAPCXUPV0l*jrS~v!c1$kLpS3CVWh1iXcqhs~K zaERP&X~eUxbS6ju+W@gzmI>#W?fW}u^%6l=8N@J7bu*6yyPojGV2(e=&{OCgKOL9I zAdy*rZ3K|!?CCzpBeeDfoMd(Abm`<7Pq4J`cuPEnJCnI%bEw5~Rq^yFCszvKE>0R% zbEfvAKH1^RJDX0yWn}E4u!KLeEN=zetr8j!RtFfDZk9lCf7lvEJ7zg-(%8x>2x$LO zwn=|K4=Bay0H;%ScU3G1cu@dj-5jMwS-iIfJ_q<=SuCo78M~Fil6Q4~Td`Xc4$(tR z7^#Pw-K#o=YJ;`SIr!D7rjmc&oHg+J&S=d-PFra{#KF#w_SKCPHq+-U)-w-s@NiQK z%$#z3T~nAvE=gX>%7*H;blD&tC!vbd9-Pc(_HQOMo!Zo=LC~iSumj{R!Qwy(3(a>? zV{`^V*VD-T8I%^(5Ue*~-GGPPkGP;l3hFm^mlM@tclO^tEF&glNWAHn4uigOMgA-g zu1cZVMx=(~4u*~+!SJ%YoD!}xt@3-h;Tmsq5LzezIoTUVHbn?|dP=#0^HxvAF&&+~a}2t^F)uM$<`u$nmFu z7q#hMz#8VnZBq^(WlP;5Y3v@FV!dA{dCK2Z<9g zFWOI-{ru^PM(5tB_dW2*pD$^}(ELvX0yj?#aV>5X^VCFH4QY(kcCZj?BOwH)Og%y3 zOQm3PD1TWJGW>4@p8e*Zb+mvD=wbaGI4HH5%vVAb&p^j^l{h;Sm|25$(P`o8`sjE| zzSUAZ2BU6)!sI?;I&pt9_OcV^rm3VodG+k*#)j#-T1-p%S!d$Sdp3H^;)6D>Sed$kAAKW-pXr<;edWTdUC z{OFy0u?Yt3MoEYehiJV;aL^i)+7Ml;ElQe0XJ!%aPjsOma=8MO8@yd8@7hr|mXR>n zd0;CTrQ7Our7U^9C?0ndIu!c)a`H}#%T@EVJT^Y&p0rdZ=n!TH%P{p>2|Ap?WiTOv zH9J^E)TzHn3U_HGgVolW&IG9qdbw+JXcSDy>oweWcpY}r4y><=mSU)z0WZTqcTINc zbKSFW;8){ZQw1)0`Wu)=+fwdR4X7rIBi7=egGpE{a>t z#aR+S_kxcemPhbVl*ta2@(QA3E;Tn1V*U%OjPkbdL$&pTim*=w4{FU@=s($~&wA5( zA4D+3qswIKbeb#hFpO5*-yu!M=iuBuEFe`>us7nhgF>fb1 zWI{3&mpOrM(Im35Vg!3mAago4X86P(uNdXZqNsiMlp=rw;*D|BJ>IMgui0^D1y%9 z8e&I&`IR0#I*xeDvqS_`qyhUxM=)y0efEtl%))Hd670oMm!rnKq-%|M!oknE*<}cB zS_+j9oJZjvjv`VyyMZ#NP)(EOjO-0JUJ-wUiP@91_q3|LYbjBLKmhp{OH+P2y(|#G zDdG>kBfM)NUat|GyKS)Mzq|fR`eQa6Ma$=x4j~2=xFJAM%axPj&v+v77aa%@J-6m5 z@8CRQ2IZmFyBT2FMB1eAkNI@nTcT1{M`pPSn5V+pnkOincIC9NMV2<0dYyG+@@Xqc0>(Ze?rVVjsMR^C(ubV5fqzsmr|`dMnU=xKNTI12f4ws{#fh}fk}_PU}AF%U?Y(jZiR z`9auP-XVuYtC02V$)0vgJ)e_z<@rAbYwBf%6yX`K^$y?=Q&gP6~y*z?fsB!^7L zNM4+&hI320*TxjMBXFv^{IyIM@6cLe4mrLucK$_4!N^`4C47vcM<$h~#r;*%ra}3- z-zVA!#TiFK-mHJg;xP(?hcj7IGmdg_-rZMc_)NI565LD(dJsVl`}zcs7+lEdeJKvVokS z!Wq84aw+tr26T9tj<2WHj}tCxnl3ga_T4ZDt0HL+K|3<*^FxOqIUmIOr@+JT z3O(e&DyVf_l(EfU{garT6iZ26janVz@f&}N1aWIfHPSejDqTY}28{*K9A;4CTl^Aj zlFx`Yt{JjYtw~7aih`2pWd{&KdvsE;voQxC@#cDea*R#dL>YihzGqwnGJ#Jn!$BrQ zTP@m`c-dK@krmTn}*<9Ywzyg8_`;OfDEb4l#N*hoPOt87!06HFF>f+M&$h9;J# zhKQk}DV6s>G$=3=4iYdC40zwz)*Pgso|T0Su+T3ah`P6>AwYLiMM72r=kxC%6C>-p zTv||cIL%(~n&^zn?{@$2TL1jk3K;*rE>IExxS=q*E500}2xhwthi=az<#RIG^KI>0x0Jip(E`(OU&>gnpOU)Zl( ze3nDsZGz$7($Mz8vi8jS_^$TEe2l*F{`EJ$#XqtiDkmX8tR*TV03pB9~Ft4Y&Sur$_DI5>b+zv_%XqxZi`$n^|OER3xTpyV9ijo2S>qQ6}C zwGCZ8?a_%1o!h@F-?84Gs#9;i1{mIC;Ers5sK7YDz=wQ&zA?W&3-4?kBxK;4Qid#! zL}ZP>o&Vsn)mVLrFKkFueksp*SW!{f(g31hDqy$2<7`eYcJwXwAFD`@v8lf?GE=|m z=!S-DhC*r2D4Iew_>oOhPNkevTk#b7&#Z!Wh$gH1H4KsTpG=OF&-}pKC=P@YY2Zv7 z>}vg4Vpj%?XtAyowbe0B`@LX)?fZl1lbXRp=&g=#s{AMgkFa^)Y17!4J_{S%0#sBR zZGSY!_D>zfl|%TNVCV5+na}8;w9y;g47|5Ye1-KrZf^u{UB1<%0Ke?Z|At=-%j0XS z3UP6#cEen76b|!>sQl#hQ3o3MP2jo|JBSx4##IT(X=;Ehd5d%1E%r*FmA7@fD!48q zP|_GCGS^CeNU1iC6JybH#ThRX-X}UB>Ga^q?;z0ch5vkI1$ z4!;GEE=RSaRg3A5F>f+~9@4-_yux)x*T{}EzPM_6-b9KySvNHm8-dju9C8;Qn?j;gV0Xl9#s>Sq$pedoQIj#rP zB$}(Q&~^TEY&H@=WnnPvrF)8|j65Pjc*cueiso;|NqUm*4k*d@Du4vji{tu~5BD#!`Mfamd5? zt|1mPij`l- zSAK|-KUm%~Ri+DZg|p4`!(_u1MZe|jz8~E{-^5^I zT!VGlP==BCu=XD|DUmqy0X9L*?yg}LPpn>-?4QiT)q%WC#5lM@L|~*)8$aYZMnGG< z?OZwl@)Ss;Tui@uOof$+Z2rTcJbPb_g$&n>FPdotGN2U=;JWQT5oll?CfWtHpc3Rk4uNPCJrBxsZ0 z+tSk{Jp=OLSoB6{2fC>Ty~eFnpA#k-k^);{>2kQG*d_^ZH+P^+zQHmHIl7gq{w+V2 z0(oihtPxcd$2Zc`Kev{eUa19u2l@B!&7e*kkb#;FMmxyd`L;Q|ziMcF7b)Z#O+e#O z*vGP47O{PYySkrAgZENrBuv}X495@VAqDKKQenT2i%gh<01Kcj( z{C~Lls6s%^$_V3JdYzXIYR>*bM@AJXW)jfgHV-B!0Owrg+%RFo72>R zTKvFJO&&k9BeD4wNgzvfPeWyg8O7MDI*X+!$X@Mt=IXZmpPe}OT z=Bi%-DW4|95nCyT;F+icDC8o#J9ull@M0ogBfSfwDnV)YU_T> zqjDz)4wI!hq($K4$<9Y0x4{2N-}zV(^t%s$;uKqm=FB+dlN4sqyJN}DG2NSmeRfbd z;*XW8>Y#^ITpSE0gnsoDLur-?{bRU3j6?X|!uA4vzY4T#h`g)VfTpvyq$hdBa}A*v zNIh^du-E&BLf?j_JqqvYzr_W`@Eg%;Il-omR>TYh?Xo*MNBw8OAaMm*H3ljQLzm2xh0c=4U%JM%&RASepI_QaI;rn zLzOjfgP83907yW$zkW_a(@F%k zwGY|ViVa9v=X`GA7ajX>?4yl>)dPJztYz{PSnuxIlz9e8Ya41@g7d!S%=s-ZeX2We zRY`hjQnmUFe2JG^7}u#ZEEuHqkEAD&0Fq4PM;r&KEZ2++m(V)5aB+iguydd zOuW9X7HeV)Mi<7i`} z%RHF)M)u!PyYq!O({gmiT1LJs+lV&5ic8~@z}ZL=zPVw10ujSV@y-mN4VhRS5OK8~ zl(Mg`8!uh2B-lO?e?&6P`6}2~&CrNUmJ({#=g)jQaHP+Aoh3Y3bP>e7336vCm&o-} z<$@pE@ib)?H722uj(Vn9u=K(iy3kMZ^KE?}Z+aarguS#L-Kgw&Ara{g(784q1-R9N z^=Tkgtm{-wWmM57!m@X;<=R*!_h_R!4Lv%L-Jg{QAjYjEqw$~+G>4%gjI0)06!)k=D}kLLPNr;J=RJ-YMsGSx6uRjF9)ggv z?utb2{Xw8FF28K`P(`wQ)8=WH)gqx36c^doQQ+SCyviVKcaVdk1~9wlrAHBhg+wOKPo|Y5b?e@WDrPUo=~NGR-{z@8B~*;pa^mcIFDHA z$w_p2U#^5^HvvOBpC0R$3}iR8zO^rYhZHBXio1^^*`sIa1#V^i8CE&ad&Sj(%J1-k z*>Dnmb;0@O_q|aNo4@X~7PTI{E(x{!XSwxB7FBw7t}e4Q0%U-@^lY{~5d$I*KoWS) zk&30>7!e&4iM&8HI=6-I!`NQ6TVY6rW-11nsAidu0^$%@D8RIv=HPy98mNXqf^`zP z!OB!Nz;Djl3nzC;HZAuld2G56ZnA=uB&6ogYJ?&LGD1UO@O(_z(un)StQSecR z_!oLOi>G_!xD>iVzVb(UAm`$bN?2GdwvSsouL5}%?E3k-I`Gu85g#s%q(WIcdCmVy z34ZSC)sTM^k_wkE{Vh9E8pi{!0#j(uOD22Hp&=~-?e!0hWN|^-W)g}Ud<6%D^%mk` z>F=sk;Ck0Z{UtbG2n>%1x|#^BOHwiFzxr`Q^UnBdMb=OIBM~>(=LTZ^4jqsEh0>*& zP|r4e-%)t`Rm;d+CCLtLHML!3j*rvl^m)cYLz*Tts{o9#J$|Nvf!WA41)l%xb=^Oe ze113GD}sZr5k67j$cHQX=PeDn-^!cH3S1o~$ypeq5%u8sun;<3*$w||HaozNk$P;C zg?KGps|f|Fb+)41Z0u7Z<}W|0VKR7{m{w3NTA|bN1)Q%dn&;M9UOg5s4SbG`P;m954e7t8B*=SIt4Q@%QQpHI#ZH?UDm6cD^NAV;fBWRwzH248dTxwk{1LI&21 z>XUN-v={J%CNW9XO>yW7Ec%g)bjVXXqW+s}uwPo0`i{f_tZ+oQ5%B;c3P^-?EXYoC zN=zgAdZ2beNJY;us)M9AacDA!LE^UZIyD~{UCf%d**pOC@h6)~(2StMTHbV$}NteHV!Y4K+aux+9h z@faA`s(Iv;i*kB*!qhV4`A~gu2_1C6W;ht z*)}EPvUMOmMb1s_qpRqSu}5+O$CKkn;%Zj`GIjsWq%Bo6otTQl6x!b zek*RmO4W?wJ{tp@XAL_J@m+y zU&d<6tQ$|8r8YhD5eJr&k(=wLJC zSa{B_t=ulYa>=$KWV>d5g~=ddhYum-+@{o;k<&ck!~L|P0Y3&P?ut)fJ<&1KL>6{M zlCB6xKA{wkks_@%kg_=j;NOj=TJC)i2yB2of=4oe7QgO#W0F1ctRS}Prd#n7{GzpA1%njdrp zw8_TPuyq;q4wT@%gG|`Q)hRFUTr5OoBt;?tH93Y9kkSL?c?IE1B$kkiz3N?BRg-HTFCjzZm&3+Kz9)&B~; z*2RR(hT8m7;L@|*$j+dTNz`LCN3Zp8cLByhz`|u4?urZ{4XXL#MA}ByaYrE`^|bXSv=!V+&`YPq4%qWf(_Y~G-cnz z)+FVXzHSL*+b|x}9_Eo|tp``&UYTBw`)#3`PPSpG?GyJ+=tSO_4d=VQ*VL9`Q9D~x zaYlr_(9tL5enJ4xW_14h2}!$eGoMoW9_lLmi3`W=K+MbEajZ`Pj<7?|Y0%6>#X+n> zm+DDDwx-iFGMh*Wgd~z=Lu6%4*Pt)46umRqy4<|q*;JkEs+tVXz-P-H~01Nb&3VPW>kQeaFKJx7GUhK+GlfUAg{FO9@7iUVOtio1Cep_aX)UjQZ zN|&fV5glWF>~7}n=Alm1XvN#FVpn2tTD=A7s(;I;c3cH5b4sdZBrYPa&`tgUff9~N z#L%$tWg*tRsAo(Hwa}cDm^fJfnFV8^kDcRl)NpW1tvtSuiE(G|m$|pMeTh|yJc}Hh z^BW26%Zx=Y5WDo`Yy>Qx{@BuI&;z_mg!a3^O$~jP5JIz))mg@3Qc>ihdXWl4!e!Of z!~5j%5b5_cEIi)H!N-C^29z=T#_%*9uPRN5HkQ48Kv6pNznX|H{_u`OYESUKni!zf zgVCMz^I<>@BQ9j9vXZw51(bAjB#e5ho7QSFogD3+-MPm8oynl^Q63<85@sZ6MbLA{ zoH;vj(ktO(#I9rmdzBbqv`y|2yp6Fl7UVJyvAIp}Z_>h9R}l^%By~KoxW(hw4bAXn z@5S|kDq^mRflK+DyZpWqTY!@96Tw}vIee zz72YXpk}TZU~6oK$p!8?X84w$VS?*({iBq_d)qJP$&b2|Lg3|dAnL&F4J|wUo|hzu zZ3B~w|4r`^<4NtJ0{-=;w~RGG8S;vv@!|V9vXP%|sB}9pKN2+H9YwI(slkqHoLo$Q z0Z61}PqnLRQ9|ENj*GijvbQc%!XF~#H=*4bfSX|Jf$uP=*^;&bHR@E@*6%m=ciSJ_ zLOkW|kHT}oN-|g&l=)pthj#{lq3^SzNJAQy+=Y714nLFKVB6c5?D+>aT0Pq_BZlRV z1U>#AI$x6FbWi?Pj@``GO}(h6DJ|;XSAaTmQsEIg=*&8z6^Q*Iu;fjMs^$g%7i{>E zQq%75Ylbuw?A}_&EAC>^5cBZ3l`%{~i7!k$oG$R4sNpc_FFt3i^9i-SiDm6%P*WE> z!HA{|o3zWdC5PGYg!=uYq8r>b%E1|XrSi|i0%oh4IMO*?39Lt6rg^Jo}UcC67 zrh(fXSh|%O?kiqhn*4k2*C%zmSIFJ_i{c%8vQcqa*&C*MzsM{G%&Su+C*AKB_x$@l zlFr=Y^?Ls5=5(#WC|wtr0xiD-SI z#X}NYWOMkb7E+oSe!T;3ew^X#2X7k?-0=}XehP2AlHh<@2GC9m=RIM5=VlVp%OQU{j|rpLbG32%F)9+jlT zjgNdIjOyU8RDODTL`Z1+F4dMmMJzVEFvm<@Q389bSLWcDc4RoiakfP^q$+PyShzmZDz4(!D+`Wf) z_pyI!YG_${MuAPWTXt-Ia%e}qwXmdnyCtEw3gm>zqKAr&7Bm-S+_+MGJG#q;H5gV! zz^X1nKfc*13X)5kG3Vp-L*Az#yd@bR=dhsN4IgYseTN)iSp5nS4rmy;^)ab21gb~f z4jPOx??fso%o^iYijC+dKM#7(nKv7xiVTBqIR}liREIO*)z9NDP}>67p`%VuG6Z+# zo5cQ5r7rGlt+}F4R&m?NUFonidG`aRJDn8#GD^zaTx3NQ{O{_Udd*!4+6N8x5KCZp z9CzD>N1q*vrzvWd?>rqT^9%!>)3PZf)&#YImHykr%2 zcFpvGCqUywcT>i>^vl_wqfJrWOva2KPxIc6gk74ZRRaSycQ=W0Nhrimgq<}Eft`aS z`qsJdPFldHX(@w$Vb}A(*iqj99VO_}gX1x*m2^!$J!`9fVFjY(FT^S?@cJDIih&VG zKx`uu;p|_@by*E@D-W`3h`Z4I8o+M@YN5ov=z<2`?jp*68oAR)P6;;C1~lSmCEQzh3v>rVFI`;5^p_ zsB#-%LdB^TsL9f+8qs2>*Tagxl?7+d-GK0ENE@3C*QUVFZ37gRlwY7|Vkid|N+eFo zUWaYS4>qk|F0nT=N@1tXwDrM4%r^L`Fd8<1G@yMJ4n0yykK&t7bBcw?;~Yvi2ZQeV z4$4TM2gkd1k(=AtUD~#=Uok+r-pT)-9Ax|;uDs=QKpPOB(RBa%mBfuxo@h59g^%v$ zMMDOpYTQ%vdwo^hH@w<-rSU1gQjD_(1-&3f)p|n2dvYv(oIGX})>J5t?t^Y0G)P8K zEY?^A)7ui)>%#Ta>jmyuI-94Ac7z-U4XT%0?LlZ?sF%d0tH3m+)7(<$SoimF&Wf;s zIPyy+H#Dn;DY)<3+IbmLf8niwr9Sd+^Rg0gVAj?}^e6s}hekP)l(e!APX;!W7PLJ*r*b3T8YA(a7>ypsJU7N+`6f z4|1ZW;8uWN!Ee}QR@#e>tB5w}E@!y}_OmJ$-IZ2(1?C;5&P zszi?e8<&skiqmiR)KMJQmil&ce2*5X@(^nmvM*05<9aw* z1FLh1JPX5P{9arut-gH6pN7zhtM=UA?>HFiYkpTD@B@)rLb9bXpT-A13VrY+k&8pB zFJ8fiSk^u%$cBysgKqtGCFv6R`=WNO!l;1nJB|+x_0=+A%hBS2Jmx;Xo+_gw7x?Sz zeuUH^ccn&RET1bD-&0EhHl-vFp-8Da1M|1qf}1Vn zCR|AS#gC8#c1}Myy5R%8#K+j1h(z(C-itgi76mN)ec#HS6}?w_3MBuY-kRe1Rev*D ztJ8QSZTvKeZc|B|DScZ3PImv8Ud-XlDusmbzYZD}1!PL9H z17L+p^S$+9XL6f`4a35YP_6{qce=Hd%6-(A5GOU|N6-pqg->^ITn7`Kk@FIV9Z#g- zyQ-nT(Q0J8GHM~i6>Nmp53zi0tI!aNaiNLK0#0YSL8$xl5YLm7qz-?r%Q(>zvOy*X z0Qx`711SVmPmD#><0bZ2aBy){O$wSod+gj=`|HC^PmdQtMhIw9JL35mKRFh{HePQV zCH2U6d9S!Lai7E))uZX$Q9z7bnoC4H!#Q{xxp4*6oDjNWm#wR1)O+=fL3ipNS=EPN zvm^!)&eBQ-2|86rOkz-7lsrWgx1~{ftng6w^uGQ~3KMA9ge(xDF2d>zU`9?=e&TP) zWJ})>dHCz4cf`*iD-vn+Gz-3C zAdyc5#wrt|x~Or;rXQNQ~_ge8{_$W;LI6(#)k5E$j;5fdG%|2V`j4@$(*QC zHxRWHBX162ae^#J@iBok4WDRU=h>7@G+B%p+wGQC<$s{M`%hVM_ zIx4vDhPNI98C*RCwwah--_H{AnQa`n--0e0it?Uldm_b5H?7jSKY7Qg&87}~b zPMx}35J^Mv{_`kiNl^c0W8Eib;OSq-kQzPf9aB2-S9?FDTK@f@WTvGMV<8;!WG2P-5(_QFZ;8@nU&{;Iy2#Pld zX=+|^?{Pmu^&>dp2i8J;a8Pdl%~o&-ckHqTi0~*EW_=E8J3yxin`A1 zP*VT)dc?P4MEfww|J^uQz>iY6eaxq_a|`ZraZqOS^|+XYJ~9m0`<(=*oUijhARrix zzH;MyU|QZ7^Dw&&F-B2@;+g3btZqcCY9ndJdxqqwKf(|=mD5n_Bm^8|r&eY-FQP-% z&FrPy&EdHoK(tBTD7wq1=$*eDIvUGILpUQh8|c@|7p8`%66wmB8-xun$VCgAN8mt_ zO%GiRgFRXq4@h&7c*j(Jl0@`?7xP~CkHma8C`3ObrbK-8tvP#GvvTTg*^#Hp^;kn@ z7J%=8ffl!CAH=lI>yt&?Qf64X}`v}*~ za&-qYyc(r=uXBCF<+;@veQcSogD@2{ftCJE&O)Hry7UK@)I|1P_ zg248>WL4vhCUGrzixw*3)hnZn2nM+QWH_(HrY+_?R?692`ovt~DVEXSgmpmxK+E{6 zyI=C6k_2QF=QJIa{b(BU?f3k?9;p%&=!m5$4L4Yu$F`L<$+mu^8&yG8T_d8$=)gvi zaeFhQL#8(ucYp2l!^&c124Isb)YU}1oniPL=5HHLvr@?k-#k$#=6K-l(Jl$#h0F>qd&YaRQ zlY4;3$cUOx$%W|iT~->%=_I{AW5idMTNM>otGPeF%U$P`6`A6zgfBJov!(5bYC~tA zpVdr;>5{x$fBWph^G3n(W;d|uO`fW3wuk7r%5|x$qmGh211SELDWusk6t9ho%w3g| zEZ|*iNtu-*j`*22P7#KMmo5^?8B?P}{93Cg=tNkld&|CshTO%>8OYz*!8HBD3%jM$ z)y4iUn3_iORs4r>51^%iiHuC=A%gi0LyOC|$+H#*#jd6??)F&*S~kC1}kl7 zu?s<$Bo`5JW}!B~H+Oc8+ESZ$!af^ls8-xYLSw%W1icj!?WP+UhymZogcnM%`dn&JTu?sWy+1zPw!D)-C&ck!?JJ%QZ#2w!JbSga zI9chuny4AJ1V8*jP8-)I?GC!qbOM=P0`x{g>#Bhk+832Ob-{DL{arO3k z?c?-2MVD&YLH82xacvbr%o0F?_MoLMl#=X54YlG}$Z0kF3afz9ygy<>l(ZJohKHp? z=6oC0lD-)f?c~uLARF$(0Fin44GY-x-NzUBhzb#jJPkTM6!U*jp%ob@kTk_?w8P4| zKtktv$p+CvVTLxTTm96dX<=xb;3j4*iubLGXnsLhiu3%o^sv>mr;-q_d50LDL>4eR zlVc2;`9#MVZv~#X8;#2yE7qg6QkM=I=LpiGa}z7irlBz(EWAt1EE;MgF{k{qGT7RB z-h#~1mlaj#9YVD6XiJ}janaQyk@cX336Ei`di*K=V&(e_W;Txapii_`n|Mj}*E3|+ z2dt&)A`+;>o}4e+QTXZYI7pw1$le`Ww7VE5$4>bE!CX2PugPw(j{_5vbm+$xS18qH zyo|gNZLibE9De-Fdikv91iQJ@?X7|u=Dzz0sAH|=J$aCwcEOUiSvZs`R5i_akxNU; zBBfeK3Q|>XjkcJG=7M!$V4caCdEeYM_8Po`tF35RHW=3| zDdI4;F1P|Oyt+}w0A>6lO`U)TvGQ9T}{nH6-P?GO&_JyG}N#I~u z>bi5|d9iLRWun1MsLRg5@#hnlr*(?-mmA9m86F!5^nVkQ<0-3mU@OR|RGQM#<;cJ5 z*WXhnnT@ZJ(4;W@1i!OE#1M1ZZVR5KPhr5!MSL|Fv^$j^52vI|Wu8=^tZGm^-r z*|Jn114f0XGTkxH!@5XZA_|M7oRPp8v%FYk9ZJ+I85MSWEnBn3ZY>Sf1%0_1_lYV% zddcJb^7pU&duY?(L#DTy8^Y*Iw=Jii3<-o&*9USbyFz7i61jJDic6dB9I#i8*Pf5; zZa5KvCk4=NEAlGRz`rpyCb`tU!A~XvfekCkzr275hP1i~a%H)|-lrm2zWaZ1d@Lr) zg@HdfvYN#Inb?ejAL2DM$5vjzTNG57FpOHbm{fk;^ zL-nyIzeQ~6v72}36|wzbECcI0@<^8W45Qjx9d6&dUKm^!p?%>zh~R>v{48_z_6*5_ zQ5chAhwv$Cz#1U4m3LJ#v@78V*<|+QgKd)zW&m1Z8vx&h=Vgm!88nOc)ww$0l+LhG zll=w!H?G`w&K3|v;zV@)m&%Uz^?9pxzdF&x4u|~DQ6|nq(3-Q;rU$mW@cz23B(EcI ziG>iP8E(|NR|)5=d`S!tB-*NMfMQk0v{x^7SSuUAx!&Fp=IWLo~1+mXIx zum1fEFDB+%E@D5TYTIl%u2hgEhwzLY7n@}U2dYDVKJn|^v4kXpJU`=DS~=scNoQw- zPG0OI2eo}QY0p-brps9Q?j^;sV%EKs{pBgg_wFe6dl1UN+j_v(?MI2Rplpn&u+CUQ zYLX@)YKdgy#G{sqNCNf$JTz8*3;jvfu?=aDm+(oGdYMOTp2_I_6O;}_KH|-Aq(y%K za;xe`Nv8>E)}=N;@r+~`EG=1vZBDA$lx$pLbjG@9OfrEfoBp)`oc)TX3xuXi31f8t zx7jsnaNpy4%?-q4`DQI^&9`i!AlPuC$$$34r~6wb1<_t^@K+=`Dgze6ch21fXf_F* z6UzbJI7>%}L9OLeEvv1cqjX)QcVipzFN!U;+}pa{Wjjm*o8wi&MC``GM5|*#4KNytE(GY1ER1TNXd=2qmNX5gTq2uxJfc@$i=~&3 z*_lJ~fE%0f{F7Sa#0=!CTw)gQo22%{Aj%2rav~CzVor7k-l+*jY3E>kcZGjO!>i}_ ziz4S|&ohE{$Js#MUB0QX9E;MZLnaMg-P{`{>uDl{-&BvcALd%74acg3I1<5UTqvR_DRVnK7}5a|^H2C#lAc z6@!?CQ}0zL+g=P7_u?(0=R!F~JRMm6mr5>fs@!0+kB)AO*9k#p$Z9P<-KJ$|p)0Li z4vAQP+r4#OD~=xni$4{g3=?lgVRz6QP~ek-hA%8OIu3uEj76LHZ>?347!@%X5k`9eMeDpi(V*!rI-3i_dR@sb#>_E(s8nTXnO@_A(5Zgw-=S%R? zcw%Y=fz6>t`2d>AoiD#8-mP8o`uLJX?N`;Ub_LZ!;t)_%=i~MFq{u^julYM5Gox`j$k`y*d1+;q#T(}RJ;lrK zy${4B|5)dMlyqYyk@*RUhqX~VAlq!m%pPRU#KGq;bEDVIp>~9Tm@Rd*(a*;}?QCuq z$|2Bry(X{3(qK4RP7%aHkvG;BY0EoGefAV;t0ScEeu!nlk)_l}R4_aZjmrJCxyYh?BphEVBimqtF zFVqXGrM}_3Y6PA*rie>~*)_Yvt=~~-AG2MVBtXoowZ1mEfQs(3zm9&K!xxVNKylfCUnx*&4MhP!@~}Hz-8?>@*V5KAc3FRzv6upq6|q@VXL ztcMO2s2RT>x3}>B2D%IMt!oW?=$4syeP7NI)5nu+_Oi`VEqvmjlv)lOs;+{ynOjB zzvb?m5U_{dlK*rFJb9s^j~%H zIPa=46e2B4u5UT?`?+%b>4`*jelKu7`pK5DRb$$%f}OO&$qFovQM8T3OkHCG9d#F& zl!{VtWJr17l8(=y@Xxio_fmVc z0A!R05kCS0qr#9>MBObybvVSmf*H9uvlC;1GtV#L24`{{p57Zza4EYMu_({cjVrO7@GPmVmWZezdiClBW!q@f&k#|#) zGmW*^p;vV&(7%i{NI6HRW*65L1cIrQU5QRNDc7$M<)-yiwbeN@W|IMoH)aENNDv;1 z`v=l!&5Vg3ZVPSaY*QzPR&SYTQ5$FOwhTv(ozvN^E+hztaju?;@GDW-iz%t*s#|Px z`GtmDc3;^ylnc)!dNF_coJL05cviD)-k#W-HT|gkmd&J9Bq0`!***i&=lv6|rV2bh zL=kO_KdSGae{jp%b~IRK=pMVl(S!_eNhXt=97#uQz~wtDLaXasMqOg+an10AQ}^Az zO$t_??p&E!L#pctb`iCQj@!ys@t2=%2AeQNS8_w(i-6mH(_uU^?s8lB>dwFYjKq4h z-HH)O=lY(2z*c}#5>15jAsp;w)!3xP=yrC)u6&R&<>I#uISS!DxXqQuDHwVEIQH@6 zf%AAD^Aw6sk-_0CHfNqmb+o}?CYrwNGQ^^EXQj#R(b1&S^h5X3o9ySIo>3M9r!2;Qil z5Y5O1^c`G@@K}{asbPC{BC$X4G3UkP=#wc!<+d~`7Ys|U`W(H1{OpF?Hnif5t{&cJ zJ{U-g4$NhDmQCNKsq06gtbGBIF*ueTSf=^?_PWSPUiO@YAv1kioZB)t2tcNT%(N+? zKbPr^bF5S>Y=AF3>cKo_g|1aeHqK*NLlgpOjr85k|YS z83@yc;7rpW%ODDpuXT9~MF5ZzH*#Wdhqm$Z#D5sm1EQNz)@3tZ1mo!VQ`tP;g(x@v zh2jh@zgVW^i#tx}I;AyOxwZ=O9@F{p5o%2^P&H8;?%v)2M zz2CamC%zAp({09y% z{?&E2ga7hLyCZ^Kv9l_=X+w2c_e#qh-){t}%73CPDSLHLw6MgZ0mpi9ld2Vz0=wAZWjYX)ndd>W{j@PU zs$6l-IZ@lXtUwfor0pqxW)8KkS;-?lP#QRb%ZRgJR5KM;1fN7bk?+~Sx@49_XS#XB z1>>SG5IOEdbE?JVzF*0X1dF7iYvAY~KFCSeB@`9`NiaZT!zg3b|eNc4Y)mIiybyg$|!*+&~7i8 zYfkkSizwQNxp+uP2iba^Y4ISB!rDq-un=^-2J%h`0q4J;7ORJ^c_?M$Ti8MZMJnt> zE1t=03j*92s*`r&hNh^6>8v4JLp@n(wJEo6YKOzQz@s#iVoHv23s`7948xOE=KX;_ zPC(c7Jsimb^~!&!R(E|a+GmEtdZ z)pPkAqE4|m0!hXgE3^ffCJomkip{kWnNCkC6#JcK^S5B&@(WV<;G4|UN4+O&^shnN zy1rM4oPf?5jJwU*rg^Y?;oXyUB~BMBatvBD4FLxR@Y9h)z()aX8N$!o|NLKxwcdZT zEEppWvoZ2f^vD$@)lSO=g?qD3C51!g4RY%fW^9#Ov|#B*-f6vg?ee344F><-FkcO6 zzXGW=JoV{QXY>vOpORiwRC06Hx{?rih%Hd~*<_2a^W?s^{P#`__F+m)nbeIlHNoAa z^!Hx_c#w{(AUFveLJ=jZhJJl8d_1FAU_KZK3PG&d+FzhZs!S$Gj_Q9z!HsrD3DxxW5qgHuY1|A!M72zV z2K*WJHSnsM+*@$K81rhv9sImc_h&X+hfeNNNaURE#s$HwOOg*?_h|e^|9@OeF{FWKG@^AnDR4Sf?ktRAx4@@81wxORbHjuRU-|xJOS*V=xZu z2<_O1Y5o)5&UeuS@GXbynx0K0hYh1k!R+ zUu6$i?L`aIS0($+?-Q8|G5%D}x{{>X$B23-Gn#b5XAPNXvUC|IU32>94KZSzt|KOI zlmi`b$Cr%gA^ZAfStSSxQnZTPOHV)_>DtfGka!KMRD>n=qeq>{O3U*U@U;+knLrx3 zSKr*BRwwe%dL_D&E#KgDnfm(}^k_XiuM=8-O$8x*Cn$XK*&br26#L+G9OO{(KAgD8~(eKnW!&yIH@NA2^6jlK>XWa7}%aIQkF~Q|xv5%cuux%4< zQZTcy_kUxK1502Ew`G9e8$5GqheQ8*`i{6zj<+zeOK<_0yd3Xj3!Tg1=`O^*9ny5e` ztuc22J+5$I5hG6>RR-vvgv)Av(`43<%<@GJ27AUj0yEZ=iR@P@r%7Wd%x2lT9(^XF zUeYpE&b$ryG~X0BgDgoXP!UD{xVB1aH&2K)LKM#s)r=*7p>-R69KYcU^5lM(G*7xe zNLE776skT?6SPo#(@2N0)%xTH`JU)YcW|Q~h%8t&uqfd>+H2){ynhCT^`edGO;ay^ zr1Vn|J}g%!^{1_5IVc8$vXnp6ls>U$oDuf-Wx^^TRsOY&k7CL z*U!-x-ZeL98^em*f`Z-UenQM<2;4ZJgWXY=ishBg=oDx+>99t(ldCIv5f+i%kfko< zpRl5u5L;@?x=8bf6^jUJDG{LglF%MH?j#1H5H(iMPT7ix_H2A<==$MMLjiypeFpn9 zxrcM&11%S*EqXdcG6PvQqHX;gGHGe^`9t;jH`Fza(5g-XoUz``LZ%~CKABZg#x?f- zDDFNr6klR*gf)M}z6q?S{lsp~4!m)fqL0+;tB}klB05mH=}#|P8z=xcyPkFmH7T&1 z%h`4akDZpK1o_2@X@Sp)$8kZQ9fyd)4WGlJ2_%lRPTb#pRJ%>jLTixU`r>DTV#4K} z^h0i|d*w_9me$a6Sez=y)p~3?r>OOY(G2<*lP9vsj3;GLh3Th<6t9w8mL&An=ekwR z%+Gf})TtG8dd&4I|DM>@baAht9BM5)lR3Ob%L+ZQtZYaLJBNNRCm4umMyIJ5=$nn? z6G#Q)h1XxNBZR69rK2jpI{6dzbZGxp3 zN@g;t6YHU;EsnEe=y9H+hyv9|=~+}Mhe2m_)}cI0D~?V~oDY;~t6wO!r-BE0P^4oK zteyD&BpuP&T3)5)3+MMQj0bVUO$y%hz|$irQq}#$(E(g`ePvAhZS&V0 z2{!(VpQ#i_9`kpHU65UXjF|e0o$ztc2@w~N0)6bjn_qDE;5^61SukIPU((T}93#2B z;&v=?R|_R8%p%$qTpnh@O-9nN(MyqVab26D$V+8#A0 zk~+%^xy(2hFml%~6DkA2xY$%Zy~X^2vF-$3D~Vo=5Ai83`T#y$3F^~r!N@GCzZu}4 zXUj2uL;?MX{JAAFNJTdGjrizYENom*c4m}evbzLmIX(aPs7#*POc!NCvh}nr;=PZ? zj!Io2ad0in4Wz&Q+Ky-x!f!#&D3E*hYVNR1F<2NQ3yjIDS;0N7W=O+7TI)Jk)5%E6 z8oSgjI}Vue|M~nGg=$G-DM4OL@6zwLXrkJeRJFv~`muawcBS9Y9<3aENu2gC5_tPe zO!N7hQuMgd7a!uh80KVY zl^W|`4P9&nNza~{?;-y_5+eW?W%9Xw#RWYoHcxskAV&p|Ff*BvLISNSopb1l72wynS=+a+!X!E+_P?rC>lMA#TVQpMTK)o?%eV<3aA-w^AW(!1 z-XviardY>hd!@AXvRI5v5VYeG7oFmQ&D24!RwX)gyP3&x?Rj=;yBAlFstpYYsPLCQ<{z(7@# zy6!}((vU)Fg@!1Ew(X#1ej!B~f@)l7x5r^gxZ_GbeTd!nK?+t1#NMjfC`yTMpctx) zzxMRb-^!+Elk14=4$T1@bUwhWUvcM8zMy`hAu}d#{|OT;wq7r@HTsT(kvX>x6xW015$6pPpefqMXX%GY4gP)|*a0 z;{%lXNk!G?5P^s{_k9(Grk!$Qj&thm_;i;s*x!9 zls+gS{M#@1YzHLt(PhntL$_mmsKO4sbF%H%L~d+7cYHHagr~r>|8yWDhJV3a6|T)A z6|KGxz2u_$_Uy_!VzC;_vnIZ@voadsUjX4%7}cg&NI3EO;g)0(CQ zWYt2zP&sS8uhj~|>2VJ{|9iUA(E%QOYES#fIE=)UCk<4YwGfFQj`<{qW%{VUq8k%Z z*pj=vcW|VC7+_UnVlArrXW2Ead^@el5VJ)da4@O`+7GcCdVAiN-@eqo%p>8BTChJX zMpe~BgWW0TR;E-&a^wd9O z(J|Uh*t=b0HfeeLdPok|Sm*E@B@aFvuCmlSRkoULL6NEEq~paw1IqfXlh%$7=e80} zfvb#s+&4)Eis~A^1vAz}>3}t3@&}(x*$NDN`hFUUtwz#5rLk^190PP zz|b=~rhi6BL3ed)Hu7zMGpnvG7J&{9+_Mr8Y6s1l!SvE|gOXa`!B-b+i{Q7fodK?fX__&&uK4F+oRDiv`WHTjW* zIbd&gBar6~3-LD7BRMck;rdbU<|IT6dlqL>%iCdTnXe0BD;B9S0;K}Ni32roH4r&X){jv8xVr7(H;ZXZ3WGv} z%e*>v1ecd+L7nwzpu)iD(p0o*4kfLgIlMl3p|2gip;8ps4a%hP9}T5LIa`@U;_~?| zM9Mz0B)4%pIrz8Ilre%)s8_+9^*KCkWhG2&+RcEGF-z z>K3{t`F@)*FJ$vgongghM569;&L|b+k8i^LGd1dZkJ_er+&h;ZS3Q2Gc@F%;`dMar zb8Au!hR0?p38r&?w@VwspWd&)-2v_tbhB*#y%i>DG0sL?>wtSBv>KsBx`8!2SkqQ6 zvkGPc@2EKiD<~Zzn)3BBEt%vv$&3tz@#_$ zy*+-DNnbWu;48;6aFkpSxn8aaB5HHdPGL&$B*q zR}Cbj(5Z*wc)4dq7k+dhC~UWDy4GfBr;0raGxROgLfgkTP^@9=iHAcIH2vt zs)m);w>wnqmB#&pwp^tmfXWGOn8=uljym-vU^EoX4Th<64HuC+44ZJFFNm!iq21L^ zQQxcw4c`LU#O#UqS*&$R$b!(?86c&?iBG!ODhRQw-X~A(+@(&n)|hSIbTJnTs}!G;IHI+ zaba;*YirRpKQ9U3@6-CX+)0j6fr^M5meUS|(8MqNx>h2pp?}5pA|x(02c8E#g75n4 zfAWhFzcC_ySCa;>3f-m`99ZZ663>k894IB^dKvOdz=BrpjS?6_4h@g*G5*Zcx}@d6 z7lDMd1_#J0)vb71N)rLC0&OC!RL!s~=&% zje`#XKThZW7mw}xf$!2si|_m-QD-NF6E?#qbI49P2p*UAHW_Shil?&mGhbWeYXp( zv)KEPJk%J7V=GfR6U2&u$}r*#ZRTdDa&g8?Mpz9t{r50ln^M>6M{yK6JG&om`k^oS zAMoQZ=Rq|*mQ7!|sE8pwJtfLjW&3Y#AzDy)dHKo-Puz>@Z;R{{h4pXiXLXX6+iB}~ zKeL_}?{kN(m>kfjn!*v$kbGYE$d;^;>ghi}dtwF6DZGBjUpL*KvMW!DB` zG_OLhRF-Os+pO`&J#Q=+C}8B&E)zg8kqtHNWl}s$v%zpSlgN%foK`MBJLc>wrWB-Nv>_kKB+?RSD+ML zkOr8*`1}~*wbVhJ_O|)2M~T% z%4_6)@DMbI8hLIz$EpPzTF|)}hXO{f6WnTuAgHvRXfLoM0`CBaSi@5Ok>$in*Xlo4 zj;IEv)NT(QEgjD5EodJTV@ljIo#9#yBpDU-^V#Y9tWfh)<+^3t2BTi|gA zMt6mteTZJ-#_*LQ*3}3O?{=hmBl0F;_TG=6lV0}QDZ!cRQ`r7`=4F04A#5T`N>T&M z%%_Fk4OX%~p~+D$9>LJwognz-7jDjpef`;;G#TR(t5jkfXy)rXU;eZpr2Vh=J|f(^ z?GN-aENf~&1~yShaDp&W9Wb)8rU2!IwoRB$ARY{RLydby^}$|EIgb!?Vv9H?QB5#9 zHY#Z4+BOi)7uFFN@*tdtDh?!EbXnI6cbAEgH>z9>Uon4CWABA64#v^cGY}eD$O--uqwzfH zE5yX21Fr*tQHUxdhAA=+F3*Cx_SCW~gk|n`smY~{`=8B88z>-!J$EB!Gi^(8Wq!XI zAfqJy=4O0YxIv82X{4?1XD60h1Ty4Ev}9WjaT)x*71L&zzX~M*3i9c!3hepbR`!uz zVh8ux`e=F4BA!miypJ7pCCduoM>w~oRpP{nf%N)_JLF*fX^Apn;+YS}F?*de4N!?7 zF6xARVj~Y#2MyON473hfHzed>Hdz5!_VmNRe&0Ca8%Ngi^Nm*EUjihJ$BJwQxPA9=|XM1_!*3`-?6FrmmyIV=Kz(@;l#G|R+cvu1# z>vf@K_OWHvh|~@WLBaB-9z@T4(-!~^1bq7M-tdJGftRHvvlY>WVfJMbCp0|^&j2_YUW zzu#Q_CJ|i5OU-zknP*@-D*+ur5d)VZBSdAk6=opvZ2k4)sH6Q=yvuKj<9Ghez=1V9 z^Qj=sdO9A|O7+roX0yf35xB8RQzd)NF*C5_Zw~Z-)z|D(cvrEVDs`#IpUbGy|4L<{ zi&TZlE|yLM9#w@|73;g^7LWuso7~HgZvL9IYU#Mf_V+}lR+p#?zP8S?q`#sF^vRDG zz4C$ierS1}MOyPyQF2h#OFVRbNUl#JUh~!8!+ezm1s$&(1w=qfh*4o9BSkpGJA2ZT zl~b7obIsSoej&`VK<2a6a~weJ@Ygv8E+}jm>Bn?bB594V={`y8;O3C<7O>E^Foi9= zKpEkC2H2kOnMY;fG&c2;j7ByNOBHAnkv(r1OA%Z(tagq}`@oFLGd;1Gvzn&Qwu88?KgkU(PAA^|fr5Y{0dWv5t}2YZ#2@Of_qv-vOvA}PqHr+YUad#;m` z*Q%d>JFCItJ|>w9O+S}(fxj2qXX(?U{jtAVW`FL)C?QN{U}U^*!T{G-zScZ+d#-_O zoQjqI-d`-;5ssS}?9*8!4Ppo3@^<2?Yxce;%BWdlY`7e??_j;~EYV>E`tj)N6*8(= zlkE5R%B$|Dn%ELNqyEjsA%btJTH&d}bPPAi{8y76-T}Wt zmgT3`ifQjDed~iF(?#;-Y%V(gKFg|<$IaRmd7t&62W z-CX%C_+?F9Tljjnfu$_%E)Q`!nGMy|wVb`Fjg(+ppzTC<5 z(rzy3WJD$lpiZxLNqwP0$crxCBksFg=#GOx%26$wpC0|MK~fJNOSK`!24zZe`7?ZU)vqG6u!+p z2}b&cY104I(;7EhULN7xUxux^Jmvkim`9l^IDB-^EAiq{dOTWsW^kg$kyO{lI@%^iSO?QUW0vf&*L>xj-hobnyB*lQ1Qd&>iF`Cc@;Ron%XOqCP`9$K`6pP!wmY&!vSgfS$MX ztiVuQ92QL2uo&TJf&%Cp zwkgekiYf4yKe>Lj37x*M*ilYvTy6f}+>LFqL-_0Ta;=0cVJDa6`PtG$^nT6j)z-G3 zOc;d_##1cnBq50CWTZD_>Bh=?ET~{}&pUQy2+hQ0oE4Sk7Jy>AFgTbfX|YfL{rAC2Wi5)+rNAe)Wb}_%O2lkB;qtU- z7KU>yZ=R?P%p*=&-@fc-3zsSL1We;T;olLu!dZNBSr-4N3bWrWGc;*`tBj(EIq(%bjOD>YA<a2! zl@(TNWFhnVj(vX({?>UG1}0HyEf+`bsGu6ll&McRtNdIeZdPDP!Ep?=D>LB8!cC4j zU?>4{Nh<7TV6FK08j#IunKfN)YLjXJFRRqdn86Tp)+~fm`==TdU*l-YmO;XBm}M`x z!)z+mKKx(rp_l)1Vcy2?fJz0X>%i5Nq4dwdQnylpTZ6N_h&nv3Z4ZRG&YRI5nz|Pe z;7_aAhq=?m-D|78#%KaE9py5l`t_pl@8J{72I)tkl|YWFXsIIs)0eKbU7>Go}?XNcP2_oy4)+gnrI-*Vo03=w!g8 z?_E)}xT~O`)9lZBsR{g0ONH_X93+N`&2{-if6EQM+MyY%0kEGW^y9nd;iY1mffk>T zK*9C_DUi*JO~-;x39Z;l`B}<%1KavCzyY7xBYbjrc1b2GX$M-JIGNNM%Y(f~#cM{c zI5zV2S773oEP1OMSw3lRfonuoiP)^?18$OJqNXS~Bwot%(*1p6i&9=g#so8_dZR?O zakcBzC02A>W*ZL7KDa!eJ-;IIvX%jUW~Xl+0mqLqErU>`X_nj0Z8$8iw`ZHGJwnzq zdULG`%xin*q!&XpbuoaHwZvlj{MtUhU+WBr%x60HWij2;_^;nTYBUbMUaai9f4aDQ z;2L1GJbn#+D6IPO)0Nn};<^L@&`X2oX*F3^#q9;hz2Fr$O_}AXEuQc^eXwDA(w`5l$stmBMxgnBZ)rWM878* z0}4mPx#ycg)`(OpSZM)xu|h>9`dB7r9onPgJq=+nLcrF26korAKmIeTcU%cS~I# z!KRL#Om%T6Ut34vJ;q4;6+Cz2|6x=DcT43Fx+i6zuLmm2jh(Q92{p{(_GGujkDZ&R zB*aC9-{DbHMhV>_6Lf#ZR7&A*why0poy{HNl_IK<|{D1 zx|AEhM*gcqBb0f`Ygh+VjtjH3j+gry6fQ#Z@ugi(FRMND-}qp1mqfskyR&a#&6uDPsMtTvvAGSoj2@uvcst7+1;kPBwM!sUVZ*uY9*J80 zoCl44o^6&cj~(5E&!F9`^c^84*qMeIPzd5+bpa!Hdz?Brhn4XDRxy6VyEXZf;XWfQ zT_o~;Oq=M`)GApcqsB>Q%eWVl zV-4EX>*UNWq!NGX%{__yOHK>oj(6% zyIWqMNl`&6d&e1RjC+1ow=Q@Ic}R&xKeMi--iSB#2j|^MVL00h+Yz`eChsx9;IW-) zu^9+hS5`jWs%1s~bdtfhjs>RH&3U>eH&Al$}P0LwsHHs=Up*sehvcMGtmlo#1E}3d6 zriDdadMz@Lx7=>J1oO?qEa`Qeo8a!t4ud=u2{Z3Kl45|IPnF_)sf)Zp!e6E_KM$-C z`lT5W^P$Ur1sNKBPo_y@)gM6`!-3;A zc;c1}y~ut44-|8!&V>DE^FXS`(l)(E73!>!(i3|S=4|8H#<6<;9HrUG(lxIK0|zCV z52g}-YFr`P#a&g|@&w^`F~Xl^`SUL6zd4s}T&y0_<$nRAq0@mG^l0y9-jx$D(Bgf+ zKd~8&NWgXLJ0C3d3^}-!K%%*Cf;@@tQA8K zCv#Gat_`pg!?-sP^YYV_#aez{MFVV$k3~y8!gQkUZ2b2sWV!##m?VYJz3KiLnvsBw zxHBY6eW_XsjAU?vRZ}=PeP=Lb;?#1Mi()hcfk~nRHj2`oAM(FgBrgK$OB!R6k4XZ1 zp80>73n)dh?~&-Jh$sk>p*LC zSh-e*cL=2!4kt^5)SdJ(ds3|bnrB{MG=oHbx`P-SXK8t5(_R0?=rsoD3l#=HM!d!h>!0|o26^Bh-|2AMB6*Pe>EFrdOymWc+X z+Q}hr*rtCcptDZyF*<7$Z!F$vYoxO^RYWM5RGu+*lnI2cuQy+|5y+g02H0Li?KWj% zoOagIDPPZBL#-z$X_sYX-x(BH^9vv>hj5+_xOmUWx(14>l{_rK*`~OvB$Mlbz5-`5)VnRdk|bN*{&;knY_I;N_7gGajT_YW z23jKUdvA9Yifgk4;Gu!&MbDyURq~*)_r0+CviCK+cu@YQ;F0;BuXh>4i@ed(7L7ID zzFa1+*Vx3#rutM3JeMt>G4CP0GSw7a>%n}7NZ5j1%bjY#ygEoj7^p7hl%`NecP65VABh9`7~Nokez3Y(DC1Zzml_%cETrKS={8OB+wU2^j;tzOclEOFGYyLpiB z*}(~BT=~?$M5B5C3+Rh(;(^uZrfWWC2>>JZsR8){{V#_Kz=(MBi~Wo~os||xb{GV) z#bmn#*p=P8HO|CWf||%XgOX-$Z7}sEoD#EY^`hFNw4A6_MSoR&^(`pXDp@C<%H(yA zQ|sQt6nHLBI5;QpnM~AA5BcHfcGPuY<=TCZ{k<2Ls!$ z(SaKK?bKcEA_Y#}DEg2_`+jQ! zo#yl2YCF>+sIUre)5CKw-w8l;{wMZ;kOUV^4p>TrZRRhK4ZqeUzI=&SI-$L+j*(`` zu}ZH6@(haxi)&{xY{Bt)%dkMx6`)vFZ{YtPUKOy9h8jA(kP))K!O|X(zSw%C!~2yef@dePJO+i$*{SJ+rR~nX24L= zAZ2yYtK@kaC?b_AkJi8xPuwuHD_LK5A6_vdVj|F?rIN5kV+VwT4=*M5FeqR;M2UxG zjoz;5rByoPu~GwgE7pWEuRRd$7YWbPG(0L&11#vT?C0)TkleivWn%* zDGHw&MykBq>lgA8na+-R`I7F%mXQTI;d+oL6Ttj{_jKpcfaCTm{>BQ+hAmRMy!D5$ z1od}RZ{Q#DY{?Po!CU)Wkt_hpJ{4@zvR8$3{2ZJA$!P4aO>$RjWIy9FL5kEDiL5Gp zXBBR8JreCfjjyJ5G{K`ptjpuXKH0iAr<9NY1`I^+trN`J)e9iBAP9?2GaH;ef+*wY zQvUmy@w9LjdFlNm0jQA{>LvPESaiPM{8|+xS}fdNX6;eOdVP8$lef%yfB#{hkAk8Y zt?WyysYl>lFGGSl%fI)Wey~?Mw*`*O<%#X(U}44C9W*s5p32+098w2izHJJ7@Ti4m zaGiKSyT;oS12_n_s$YA=0g}!%}VZBlj_eP zt;l-NitDXO4o209p)`3e?WVe^z@#(*I-+$m4=PXXH)!G~1(y^`e4?k*PM7T-M^>il z|JOdC@HGNsHd)-6S!BZIZCgbpF;%Km|}|cxx*U#)`HsT&>TWi z>AxW^Aa85~J8I@yEbJWHu$rgtR{Ug9et%x>vy?2-SqnoD2}DmZW&VCtcCSNrls}7- z%H6c{PtGl(x}y~hC)-Q#$=*q_V?Se6>42~S->ex;5?ioXnXH+Tk*Ya@#ta;` zFQ1OoX*XET{ha`RJziD)DOQ=m#t9piVnzM3CTp|Z z8*domLy&_5AurdhkU14&HV*<$%-E@d&?y@Y53IJ`dlLCoGza+%^0Ha=IY$(lA3G(} zD0j1`RFQz;e8X~I%Gi5_i;``DPrUTxf@t*$Gs%UU7865K38lv%WYTVbnhl%eTI)|7 zeQ%s6(INo>H3u4;b&qSxpPTzk-_Uu)L~*d`O;(KbiZzim5QUV~BV)tR`3)Ss{cA^! zrpLTeusuBDnOCl`!5}&GqYd#h)B@Jd{^sc003Wr;)S>3L-*rcOkxOKzY^qd-GQ}eyj0%)c+fLrbgXcj zSfBw4$QnP-&OtfrhA-fS%Ryk1>G_4Fd7)d?dl)zmd^-4R2mrV`qPfAq8$Y*{>^z}N znsnJi&+lKJa|8y@+h>*{8GvsS8rFVIyVW5rk1>bsFAR^Mt_jt9$4RO`)fK)d+T&PnwLAeYVvZ#^cA0G0YWFMd0s|RaW!PDk-XV#%Ybakl zGvA{-Cuy*#m?m?Q2Zn`nV>7LdL=zV(_dz-wydo!KEc7;P2~aXG8s#JUqn>FMIHea` zZFtW_YsX|w$JUeXbZhXffSp{yIG+Wqn&qT!emO~5ti@pv+A6uIUbcwoXa4EmzbWI2 zy-$H(*HadwTMA9lhvp)0XZmD7*ibt6F!EpUvZ#veABw1b{BEN2TeHs|+j_-4;>UEM zN~j%XRcPG$8y2XSszo$AU|+G>e;HxIYM;}xnuLHqE4SdlNDXo{JCUezd0Bn5TWRz0 z9zQRgF;crDGT4h=bwd0N@0!OPQ3yfw0s8OLK`q|d-rZUYGBUYe?E``(L1yXhu|Fw@ zmM6@p?qOG{0YX%n^wf4b`SK~r9qiqC60CV}SsGW-Sjl0Ct_b^V=f3m*ZP}*l;i=F0 zb=_P`BwBw#*9iSUM`^05Pp`w9B1)*J4^)?Ll?-F}5dQsR^50+7_O87qaAM`IDnfpk zw=A&!WiJe@jN8{SYUiPu`CFUfWxCIzAJYg>7`w}U!Jy2`aiOVzp+rpF+Es1s(>smR zS+sb86@HToo2 zOkcyE8ZIF+*@-1?>|6UlCgQD*IVEU$ATNWoP1@y&4O3R^!=0^U4urE>+%PG9efOWj zE3~fQdtI565feg8O0Bo6Zrpzgr1jD49KkXkXjaQ6&V)hqjMAE_Vp99B1{5EHA||er zj0sB_&;x;wuiWF&v;dP22ZZTWNUJ@JEvEGTj16}Sur7X+X_L{yTChFfL8&1d3F7YrHq1H;!cK_Dow92MnQG;`*lNjJM z_8A}rl|j=Z`M?yxx_Wh!9l$wuw=msxqaNg zqh&NSs4AE&l-RM(2$7}qC7BXL&UOmFx6g!L4**rYA_|OA_VegK>PnsWu8HiXdHzy> z);c>reseY}ScY!@jF8@NSU=#{84Wk}{E^O@u0K?0!CoqW?vGy!Km{RTqZ8Mx(hZgo zG)r2|A5K0~Lh{fnc@)AEW{A!H(+trOb$*RzWW*WiRvpuR;lWAUG%+C%E6Bl&FC_(F zO~cojp)o4I#=BYiw-cUnfc^7Fd5KKmZ?{q>lI&)$@7DBg(3E3cv;g^jweQE9`e>{Z zF%q~w0Rbr*CdR=^BteN5N@5agj|dH+3zlB`_6oV^4I~z@Oh`pD=jVuUVq8x$Eabca zUFvTK$%N}Cv?WC9ZLBv|uLpC$$sd0MSDVmMnEUVriHuWAj{HQ3*W$Bu$q)&UNmNv+ zimmL{+0xn0P*ofLfkAQ7yu1&Dw0x={S(BJ1LqTnB2S073U>cpzPzDn$3L_yor43!))q(w zz|GCtKQP?CzB)Sj!(Y(YDkngK0+a$Z4|fjs%<<7<%$B{k%>78loLAzQU;|FPXfIA zb7N@$$AZ~TSIYp!03835aI-ixfNf=tZSevDYSLrF@BECW&iRQYv5`e20XO^!6Z}>H zZ%IWQ5^dxBSS*2wi#$b44om>SSf8OMXnyQcU)jjJzxwkY+Y+F~6fPS#zz&F3%u7tH z)IS2C19&NZ;-94A#k*$b)k0x0rpul&&V= z$_Pd0_Y>{|y_uUoQ-_gSx-)%XcKPACv-zr6FBjN_1K1Xfd1zb>rO?CPp3^TQ`(AeT z!uD-H>r%iV|ChmKFvv*@*6zmOjk)9;`acZrettFRVZfvvLWz?_GD>|lFt_JL-J#AN zOek4FjTnN}zvI^f@o#CKi*b7Hv84gJR0#W{9&zOv<(u5dp~UfNss8c19Xe?hgq(o5 z4ST`SOT(pDSa+}J{Y0}QIZq=56!{{|oyHOJHLrr{F6ELJx$M4U)*s5sL@<*gRYJqb z;C1qR9eicYsHt@8-Q}5*q>dGqEDC-!^?7rqnb`2UmU7EAj)iGE(FvbU`^p2)CeA_i4VCDLW!VH><8Sw=0u^E~u7cr}SZe__<5H12=l-n5f1MWJcfhrs!S8VZ}Ujp8dMb z->hNl>tPY?KZ(#X(!y(oMASxOtU4hL;W-s+?EkKYIiw|alM?2&~_k~~My)OVWwH&ESR*bUFCH2CJ8iWz&D zPKUBz1tFtfLket-eH@lwhFl~eTM7wl+lPhJ^^Fzl@s?u=c+1DfEDCg1INck$DZq{4 zZoc9>B2;(ICWdFpxQg@EC+e6Ge2#KVyO3qwAaEMp_hnAeT}0^latWX{kEJHlwVsKe z6ScSun{vOa$blbe0zrLps4mVgx-%UArC3dfvG9-0`|iUTkshRzEgdz zqMRu6M}0ohZT3}{DKqcA#ewUrgr();z~&GFcT1a+Yzm(=zF)M~y@h@P1x&?Qi&IUj znITO}zn^AqW#pz&(u3l|l%Gvag)+yhxO`qnlE8*;e%1@9eSMISr&_DXZb8jR@FNvO zGf%U&Gkkms&Cs27)yC*`^viFVvy2lltl&9uXKXOuykj(E^65B3zwhmjmHnDA#=Q4| z-Wgx)G}d-RZl^f6tr60|T`v!tsM3HIHFK({R#Y$tmsBl+nQ$5Y?5`vN9 zze;yLeXEr&{z7TE?C=Zb9OThMZy73GUu84l)etAwp|EU?}PhTl_&P;dM$yr9|_7mSyflcog(EJW!n^(qyb=)_C3p zSnDmF!>{WchTTg74Jg%i^Hc43c5voE+5taoGVSP4#wL*BeET48tf%!)Q4Se!WpR@v zHkt=AIMFJ%8{V0kv=~?mC=lev-WeaBa$jj+;9JWRS3byrm|#@9R?tM`J= zqW&piSe&S5l~qV1i_=`XNcT$oui1Zzx54PwQ`C?C=fy;kTM<<^%IQa0)(i1ENcflv z(b^|SR%b!hK`liz8iwG8R2kkBk<8O8BEcENyLBWuB(2tL0Y|Bf0$k$kHp;Gsd}cqy z$o5-s+|dO&c4zQvTxO}(NbeFJB!kt5ct;18aBjpa65J|miWu1_Iy z4v4;b6~GWaF~<$&>N@hooft}Al0)8h=x*mG=lR7Z&~CsCvLXw+OhE0^EoJe)dFw`} zQ$;aT)Vv9w$1Leg;HQq3KeJL7ZVbFyCuF@I6W85Rw?k@Z@(u5rueZxA)9QpIj3EL; zbcVjb+!F~2U*da2$g0N`IDS4Jw1%-$h(?JC$)akPxcXw9u%v2MHH z&AAPHT4q`*+7B(8UoYpnrc-5$K%F969(uHU&tkRRHu$IUo_%hP_vB9mv#i&sZJ52% zYQ8@q!mk@9#kTDhh}IcujlzW67dyT`j?jr9dS{;wPzzmQ_^myR8@Ka%7i_A13u020 z-RN6V6>gNFas)}Zt^d1Vr0^B)(jIjBrLM9Jw)7o~(%*R+?qETyp@LbE^J#e;cysj` zex{sC89PJ~_1!P&`wa8HkRbl`Ddu_w5(2{;yu9a`8OB4cma#N|LoH!WQ(4YeiHx=2 zZ3~`mRLol3LzSNXfTBK_+)2IPN`oy-HrJT&zGeO5h6o7uQ-7nCLhNrS$@Mdb z$AD(|6}damTZi3(2#!C<2GSeYf7wT|QD2*rGP9m`uRi#R`kh7Jp8m26@U)5>$wm%p zEA=yNy}4ljkvF6yG-JqKyoTO?SN=)KL*XwRW==-U&Ds)M+9W%bu{gtg)|y~xmrLo| z0rXnQ-yn5@0j?eRMR((M6yY4PcD?`u4{^%_Y`!IkXY&Q$K@@YOcX?64y16|3a%MvryY-!>8imL2dCJ%zpPd99se|JEe!k)?%qbK}O{4)&5FfC_6gDH1+ zOS4LFKSn<Dh~9;@h)UgZzm%Is9WHT!xow?=igP z!6r~6fX7rCQK&&};nQZ4=~%A2_SvSxJLffJj=CST^WV`fUoR)q;_kiqOh%~Oh1gg% z?ndy-`H`I9qk|q!6If}{NCpd z7$^T#|2Jw>{NJx@x56#XH%2QeUbX-HH?uo%0HA(3w%uKL`FAA)@W_< zl`FU#wavDy&+gI8B!f8>%?)lX%nQagn$Eb6q4~| zSW&fKU`j{1u0Zqy?(n5N=bC2QD)Y79n-9Twi4Z+tow5tu9IfG46Kxe~OU=8I9yQ(q z$G(*uQd!-#qN$t}q&rnHYM!u->`gH+d=y!IR+Q~BEcz0g34Qe(ApF$< zFs3Xlp;23gR5MvSwVifMixYpAQY*r5>_Lvri6cqvlwtuur<61|&Gz5PdsSQEdAKJeI<%jKRz zCccK)xA%`#7n%;)2f#faCiQETPaiPm*eJT~exCed;WG#v;yW^+4vSPC;!)@ExZnp1 zdhj*B9U`tE%Nr+^iW08Xqp#G#uos3EFueaD(R}3FF{L35Yb}rXfS#MeW{`Zsu;p&K z$BkLh+|D($SaxEkFB6af?6zNjbtQvkAKelsCACj2LHOZA=FkS~X$zDYx_sxk$7S=iKOP= zJemAYT%+k?U4c)E&{F3Jm}hK0?f(KsK)Jt?pvDju6GP`E2N@z;lju(PI+s9wt6kX; zsLKd4_Kt@NuMUL{YCD=hPS3$TI9~`KMTO`)BA3(ky3PmdvB`wj=F<-v+@9!{Pu|CoUbuo@ zsjcilWL>@&Q3hxiH6s2=@Zv!8BG3a+r8L*6s$71u>>!cpB-0XSk1IKgKHb zaI`2BTriMnn(p4P3Rz-L3Mf?On`^|M>e3+IxpFYJ+K><6x4D4qsy*AcPO~5d$EVgu z-L2DAW0apXbY%AvK36>(phWcR-4HCHOTM8$9vIiv3hirxrBZXLlV%zx3tmAFlg>{= ztv?c~euBmo3ap4Slb&60ukn{iyDP5O50u=sy8kx`$nzH0%3}@OisDh z^q28S{j|0-l^O&y@$QAA;Ucp%h8Ei~IEl#-@?D$X08A+>wtWETtQyM^H$BI4#+JjA zk3GVtgA%1V#;c2_#R=v}hnLVVdwi!74u+l(FT2_&B^vuuy~kDT8g_}Ci^h(J>?M*^ z5%AD2?;q9Bs!yA+N>$TD5*lf)?bzzB5OO!8EZucg5k2u=AysyKck-8$6YaK}qpmt8 z>T2I)(UV0X7Iyr&+zX+iIv9H)Ct}>qmnibZl5fNJ5&P$Jd92p{NbQK2{uL3*?m~0) zL%!=wZNu;hQPwTpr(PMnm5JBA+|lO78K!h6K%KgjYG&@bEe)bR{;kiI$xNcEzBY zVdbD`xEY>NKe3Xtt5s84br5$Js|oxaI5>_AsR*j5DjD#YqRq@`xd)Y=CuHytO;iAD zJ5n{GhO8Sq{!ws#TP}AO7UnnblcyJ8--5W(feDsez8v|rM`?>UpaI1!(&kJVO4S;| z(hc41ORB&Ydk@n$-FAupbqGS`21#ebTC%2kChmag-g$oaNV1LzDDEU90{5mo7Tu;R zLN9*j63My&4l#xThr7BPIj{0PLySe4A1cCDX*S!-e49~?BVyBZzE3Np-COx59ZRk} z;dEkP1Dg3Mdfc8pj6++FAD-W?wb5~j#Ye9!-(@>3^hotkUr}CCrv}&(*GsS^B#ejy zIaQN-p|BI}s~77UgXJv%7t`6`JJ|DRFyr(S^n8PO2kvj4!=D3Hlw~pp!T5Gh&(pqg zR)+9d$2)_f?Z<-~bm;Sr>i#-2nHhP+j;xC`EOsSW_lu?XJ>Vm^!+H|Kq6I9!E_SQ! zf8?Ut^!Z8vP(g`3$JcUSiZ0@&cb+SBvf$QGy#=tSNN|E&rG!vOL8(lk6RyeCE=$za zPpEUWHxFSNw?lRvqypAEW5zoHxUpjF`=2_J<-xEUE}_>UmT|Hn=NGC`C?QUnNv<9n z@T}>b2~uUQ!97RoF%n0!y@Fr?D7V19+1KcxEy0x76VPnIvNV`}FYh;@nl04OY*`vm z-MR4br5+xDw${Oy*J%T-$i zuy7+Y@dx9*9^B(fl5876sQeOmX3jfBeXXnng5(;-TQl^X%9asvKR$`+&d@3|B?QBU z^Syru)FYQ2(u0^m(O$yZ6IopV?Nqp5tBamd2RfwU_Qz)|VpUPlxh$po&#lJN(8|+I zz+VRU%SSYi+IEB99{k(rTZ=Kj7HWM=loY))&6*%}(=;}!SxV&gA8iBe=ng*_tZ2u< zg(C6XH_Ey(X*L^6-NM4EX!n-;7KN3WazX*u=(9u*%XTSX;f)NTll~=W6fyVEpFF!| z$jOt(gPoZlwmHdFXj~-WKNT^o21qu!YNGKI*$LNj--=!(_3PrlVIv~2f>92Xq>=p~ z_6N~$ac(|qHU+d#Ad&ptuRA}>i@T)ii2Wsr(`l+>(i8Z&bH@duCBXYTSc*8taMP`+ zn@W*o{f`D+N`&;teI+qve?owYG+Kx~kQ;mW8=+{&Cae0&4amj7i&)%b^8E%p7=+B@ zm~&E%2L+e-shD`jFWK3yK9!OmutvRJA+-Y{C|5_+XS?8iCD_Zm+J%U(O?Ww;S8|HF zPm8-q<14^aP?R08B_TO*VdD>c06xc12B4MljQBeOT zud0USEB6L-)5a;;sO3X%gK4Uh8;>Rc4bQiNwB={&z>mf3Ic7M<&UnP3(t^wH460Pr zO2E#Q`+6wKt;r_5Hnn&Sb-sRE_fJwXk4dDVv@G6f2tHGh1!WfJ+9hUeNhI~K7h-QZ zzy{pXsjfpRmp4vZ+Zr(4At~TZisxHlLvxKT{aippnd|zj-SIO=?-uu5I|-76@o~TE zg!gn?Od(jK>pRgZ8=Dmn+Nj0NkU>;34riEiFL#TP*xV-A>4i1k-HUkIJay%;8EmM> z^l;L)tw3>7#YWSf)s|)}>_;SSihr>-|Ou2W?GeQ?qfq2HI96*sez4MSs&< zBDRmr1*?E-UT`00mvxEOro2b!I%OMt9pa|l)LJ`_`9^HZxu#?3>9`b*yy60UUsQVv*lD& z8nNKF;SOJ!L9a0!LdrB3QpR0|kz4^Mjngp<7tolhVPXvYwel9j6@nOzGv)D3f{vYy zcHuMbL$LL4z+?u;dhFaRyuj0~Q!MrnLyGVQer-oeA$mVG8krT)syGM}@a5XV+T7Q> z629T@ni3OZPQ6z)v#g3Bwr$Y=wB<^_{;BqP0;1?^wvKxa$A^WCYF9#84XBC@%z6N} zbh>3qeiKQhJSTjN#&17;$*rRy@`c z<+mZEL2bSXQg?z;L|0Z6n;N^nLern-x^?*By<0eI%|fqf_mtP-25l*%O;+_hsPah1 zKn?QGZpqUMGPDMNwc%t>+g4&Crw<<7e`H*kN!>i`vaIjpLQx%JPqzB4oP5W0AP)nL zb(v6`Yd+Jx40@uQYhfqIl`Q{T3{sScqpu%RQ&5Dm~7GF>v2(td9NluLx}I z$B3~mCdKK!XzFpAgeDoKWF|vj@g8e(vh+Ho@YT|o1w2xq_2aq6 zLSYi+i;2bK<(|!_iVVX*M>26k0q$k&w?UYmbw@@L4em zWOmSw7onkzEiXi5F#YyDyZ&*)$;z8JO^DzOV3o_DJr}QVTdxmVN2t27qLegX$Ptvm zkHR}81^J5?xJEF>eiuS%x*KM5B0Yy#+_zSxRFUiw zN#nEN3BcABXozfX(^`xcTD4G@c2&-j6DKxG`9-MI)}@rK&~?#c9pdhv7nmQ(wXqbZ zN_D;2L2D+^f=n0LnjcB^4M}fv6GC%^a*TUeN$m-BO}>z4<%13}cpyh8HG}P9a-hIZ zT>eQ15c19=25Axn5Zhvr%#Cgp#Wc3{yj}Qcjr1= zYPsn~spE5VFTu}L8L*@7#g;KN30*RF zPz46(C$#o;%b47OB+9--0ol_syH4d*(HFc=0`r5tr4mBc-3E~?3zpVB%ti-c1uQ8& zPz!O+jUEj*qfIaM+u5p`#%K);`b#OE8owTcd!mWpO#QTW;Lu~=y@0sR^K^8h%I?-o zJCR$Xa9gYbBXkl=g?t;YGh#sbvuk}d>)@@6--Qx+bmhri5(oYK578xbYXp9O#05(d zlU-U_`}R+u^~|kvXNuAiKToQ2zIWNYg&N#y4^?NOeCY=Zi#lBA1{n2-&X(Ya35p%U zs!C#D@AoW9V@{|E^*0%NSSIrTnnytFl0mJYw&?-7Vuru(qhh7!TSk9bitL9MU^+!2lh%zpMp zGU_TdDOd)Xg#|>XZhWPG>qafN>80u%zv!4-`K0W#f%o1UaTfZFu)0!Cuzu_~NK3iE z0~AsC?z}BA#~+Q?GDyU{cByUiamIwF6?XysCW-#xSOk2?w9BPH2k}?swYydFqTDSoti39uNG=b}F8v?aRAY63ZtF zi*1^Z!WdKLsX}qc3@W{MZ$M_UcR8uo?e*Vw2tb%bwB&t2FiAyK6~+^mp5=GWb^k~7 z%PcYo@vJ4cB`KmR6t&8#bU0}VEhg+zt{|k+lU15)MrU_izOWLJB!8BiJupe}2!ZEo zWHM?L=(4ePMyD|!ti`!UHd7wVFOlm#3ilbE8;x`ZfS1Nv{y!S}C+{mN2n zZqpJ$TvoE=dBfNmr6mEKqhzEO&BC1doce7hU`OWUfC09&24O$R{9dk^Z_nk4Vl=8eyP30aDpx zw7Z4=x9nFvt#sQeu)!SO*e6mXw|vpG^+TVRt92rFdcJ?gofsJV`aPk9;BKOlE?a7M zc5400g|2k2KVjf;AWkFN;2J2+&V#JCD0h45Wipz;W1NB*>W|FTi|69SgAMLvq7##1 z!98%g>i9>w=FulYyV6gmnkNd@2UdwE;Nn|ebnq)yusJ`3oIGgTCjZ(@)8Wm=RDWZ0 za&g6bH#G;XOcAk>o3kOsOSdhk?)^0RavG6$X=*-&N08+7tC?~{vTrN;No;%ge4FG? z7BOt;N`TW9|8P`pLS;dK2};gX4Ga;L30l)%_=PIlg$$MPRj6h6FWqh)znoJjln}g_ zDsiXDs))+?&)-N^lntm8eE|=yfj%(Qn;Z9k%r;l0x1$|RXEeQIeoo$`ZwA5h;ZB%g z924W>FF_&Qx7`Cy9YPZ$vgj)FTa<&! zdi-LoQe4|VBO)~ZXtss04eYk1OLXTlpFl$puuX|mTKpD>`}~Y~5(%PEjo=&I$a%Wm ztqyQGC@v;W)qsuESthQHo`(U%+I&Z=#R`jLw7#u8NfoS(kGZ|r0#ibv8>#(^M)bx za^P-D9NV_!1%ec~8=M>OfcZ~lOF7PPYoqHlK0%;6QP z*PHWqb567(L+|?o;NLtz&J1(*R@!7@i$+42+|B-c4%FqPn$;)ww41%7*n)_iDe`ZN zvgd{Ez158Wyqzz@r41X2Wb~`TD~}B4{TuZL>neebiP~n#kDR_}s*z!6_+#4t*ph09 za^PqG?8ljRs)#nhD2Mg=Y?_1bHyWxCBj|_$Lt|oBQeFjMW_T zTQpRZbV>RcbV$L+EembqwWGy|H^hfluLEICI`xHyO~ZkOM=tj zN@XjeO*a(r1*o;PbX1;TfybUXgM!xmW~ZfQs!>UUws*Fm$RxBNY8$ga;jpO4kERY8 z#~(?Ca|1H$we$q1i01}AOA2rd%umrX8gJD}kYl5n>w)?g<)2ziia-v;ztF6#43o1(bfqMDNU}Fu#Q^m#RWz&vhu4>GU;L*o^+x5+OW=3IGr`{P?+q$F7 zU77SnwmNSAf$RNr6_#?t9cA>O`v%u1u-@hP#fM9A^fJ&fFbTK97JVuOB7$CR`tLO4 zXjJnmLMBoO*Cl2lKw}Cw>JToroG8=0pavtyNb-m4(29b#fF7mpW1v=$-y0_1SDZGN z(ztUP*qJr-{N0@~q>ql10O>(_!Z|@l`CgdEDExdvhszly-T|*< zm@U(oPLJ*=aQG~)ETTWavpbpokC}$qtq(WVTsZa1M~rW;A_!Xvk;~4M8W;Qtk7ldJ zniwgkR}ZxM*U}~9yXm;-(H#n;&OMl-j%q1`s?H~lMZbePVEZew)h^<#`>)znW4tvx?-uO$ah_Q#>gm{6%RI{= zuGKkOEd2L7BHcNqh)vN}*=Ti?c=vk61TY8K0_~QV?z0k037VndoUw@t5ni<4w0?wb z#)4v_2O5(!6iuEQ&f0@VStmF72E^1GV==-d;Rq*+Q2+Fw|9Jf+f2q~PVN5Ud8CY6i zYS(rkeBJoPi*q%zB%Tf*6LA}8&$qSA2M4b}4%2H^^m);!TrF#=2!qT*dX@}(NF7nj zqfwB^oktx_MCoF2$^(Ehnn}(Ou){o5J&&53xYsmn|Z=b$nG_uo|k!ao^j~c>t!DR5rs#5yFDn0mpa<`sb0!_?xpkcnpW80aCu;6eYqc=c z6uf@`xOon1%sq2GV@G8f2a{!%H4D;yZXVFBCTb+KVYjWHZR@{ z5fo-;!pctWkbCT|KEL0U{T)fXM_Aa@Hyj{J)UHV=?IhaT8yNmdW)D+#eG$ zXCT19Czf&eo+tbhw;h>~<7X2uZ*xqXj>4M;hRrl2_-+5KS05%3sm2Nyz^tGXl~bn_ zo6-=oA~y>I&62QBKqlYXK7KdB7qjZEZWIkQc-Nheu9MH9v!53FkUtb5I?I4b|N@+j!BbQ%*ar_t=JMNXU| zv!snMk}4`+a`8Fpke*kO&d;A?;DPvocXlu*>!EjA`0An%#g3k;M4$!NVz5ynFdJq z{#e z*4jEPO8qp|nBZ^Z&hZ`0TO_fMN%_Peo|7gRfoKxpXc?HUe{?0R-3JrOhWMxPxPVi9 zSuGOzZ;At7l;S<4e{9^k=inPUI_&VEslsYjro+7bk!GuShQ)-M-EYO=hr=+qhBc8= z$b*(jcn?g*(WdaAF9Pp<{m*mtyeo${iQtb&{PyW({g+-u8y{*I{>A`9d{8LYi>z_? zCr{^nc}-Legx3hK>Z~Q&zR~HDwEM*_y)ud#(V>$TilQRI)_#~Z*cZ_xA2OqQUE}2C z*V$ga!pp-R0ZLl7N@Xalm9X@im4HiA?!F;VN8xHNsw9thuQbkB@MEydf>m2ZuL03% zMkwLeYsBlsw)BNL3r%t)szY!~*;4J52{kE1(RiZo!t8pfkHdUVIwB(5y^!M&2AgQU zAJEymbI)#%(t)}JBm<%eR5^i#Aek1w6k*S3`?;Zz?}E7*a9WrKBu_UeB8DhwE$QKT zad{0uq++yKG4zdsIrWwe)m}M_YRf?lqlQc*{Tz15;are$ke3F8MXFiO3|&J9@}4he zeg)r@y4bF*Ysc;FP~A$Is}=4Zs0%vQ^Yc1WzK}r_TD+)qKM8gAiw0Xu*HBdS>tyB# zAyEjfj5W}M)K8$n8IMrII;(BUhk@7AsdlaXyc~V3zA=3S@w701=AxN3oG40DEBn2I z4VmXb3ySXSi`bVJhmy)P6><0aS{oPTTw$tGnTkMf3cg4G%nXtIGhN^5pp(eJ*1A|< z!e$3wE)5lN%9V0&AcMXn{^;^2%<3C0fzK&1LIe>&Y!EVyS90#zq#)jWDH$z|_5F2DvYWf7K%W`m2f5v5 zk;^QHVH44o`L*CusabQ7S>_d=;;^w^M7kt{l`@Lwv?WHdH4kCp>gVHV`*-sD9!E?A zL8WWO?a9i~SUJE6!T(U$^OdQ5#XV zd}h^FSV|DkC?o)(J|erTyisl&&}#E8Xeu673od-n$DjLIIp5O}7qD0E+l*+sk)dN~LTe6?4w4XF83J{x-L?W-Pj|KE?3)uSRgwKXS^(hf^cyPp+fA<_?uIn|AMs79d@_kL7Bj!T(MQ5ugZn+-tFdu&J5499F z6(CFzn24B0C=gwxBNpbPk&ZlF#*u53r`L8;{`-@B-wv!9`!k!3j;WAJpG5}&_MzAv zT8_i;A{B;!`5VK*l!C)#uB4SmOq`-`pfMDy9kA?Hm%KVpmH+@SxqHk~I->mcBs&R z^k?2ZJ1KntJ4jo_RS$u7(>I3AqPd{c4movRGZrA@Xl$hV=ACS#&Y(r^)2RtKc2w}A zCUn>$S9V|7t?(6(xR!*Mg09(6?vNwVHJAuBd4wjHWWFNaG8x!AMP{M^j5p=)A@ zm8CB9=6)k0&3)fH$TIACur#meqyC@{y8%;C^aa;j^}72%o(ORfZl+KpBhwq0Rx#D+>(dCUjH7u3hix|wJa zcuo~#-;BpyARk|}oS#c6A_uwQbzzNHFHOb}d|ymMLRBBvPx*K}Wa#;-Qa;rzaVT5t zD@xCi(pl2-KCj8$g>@3j<&UFWo3LNSn0|gPklwvQuz=r$kRdD}k@5AmHcM3-2tpXa zV?%%rdU<)sj;C$m@7=Vsl*#)VcCel8E0W*JPh9Vo&D={cg%@6cJ{M~>-t)U7WX^Hw zT$Q<&`_>Eg;WSFN!0oLZY9_G`?gp(m-8%)b^Vl)?I2a@}^Ow#ycKf-%7fPIw)mf60 z8at=vDL-|(fUnLpsY23E6o6&7CM&BtvL)M+-9_-6CwYPzFnXIvY5!|l^OLQ`!nht{ z?lW4^X}IOE;G(b%=Wm#rM<$78cOJO=9qx#4IV(C@>X=kqR>+9bJ*t~N#Be+h=9=Z+ z0&$>3gDZ;y*iE|sr#wiU5WtHbAG^+h$Ece^=M$HQL#lJFc(|MzJeRc*S3R~y*c>+% zMqCL)gHw#pTU61NJKBS+lGd4lcjM5%rQnxzg>`#fJLp6xSuD)G&wk$t7~C+i7<7^7 zMqo7&aJ*m-gRCyZ3V5IzB@0X$`4xTNCAH8=7-l@$Pv-ZW;NRiBZGllZVk22refh1D zAZ`evR%IhgM`$o&@Om#q-yFBe;*D;1nXci^kIA9lbRuStc^p_O>V4`>ys9DapS|NC7gekH&s&uXztk zhcXeQlXG%7^fOLZ|5!*=R=_L6nEnr>gZ+J{(Mv!@;8*nC1DS})CJaJ(uat1IHnIZB zQzL>j&Eop<=O5=oPQjL5wo9;zhOXs)h+dXG&x%R@mli>UG_91rKQWxAKW)8usChP; znG-R6ZHl8_Fd>pk`{o|MGHd;k`;fnHp;|9d`~u{*8=`MIVIiK_6h++ig2O-kT1X^e z!XCQZ1g_g2IH4)<%4CmlAkije>TGl)?xrrG2Zsf1>qdN=ygmN+p)r+;K453o&($-A zgZy#ITE6zGK9P23$1jA>HR~l`OFxIvh^EUORwEs;4#iBQ4Y?l1I_D`on6co+LR)gS zY+~T(owvTH@K@i!vQk{kr&1m_?KE0shHdRqWDN5Wf>Rn;kC`mrzKI#*Vf22DwH+)D zN5rPoM*av#2FMHpZf6+Fw;fAySgG3*@Brc3P$kUi=juvTYZ(?O!z0!Yd6j)LXhYP# zLK#cE+Yq=+OUwAJ&wli5T0iav_x>gVFXgg9b9-I2o7J{eO*tF*%sWlPADff!__}m3 z*%$nP+A=)}&iJdWJKTe}MeFX1WtE$L8Ms?qEJEUvO6dyP%hu5CNq15OQ&NYcDy*Qn z0XEUj(>IUkrFi{GD=)AcIzCS})Ma5!RiydZ{ciTb_GiWd?hw*Y`D%0U>ypcd zX5a<1$htnZ8vPPG$Y$i0Vy4dQ6L2ro{H;6rXn~9$n4VnB;WYKhph%fl>~atzksbp9 z95Vcj-;Sv55%7k}`!ZHGJYFyZ)_7!4k^X8{rL|gmLWg)}tvnMxKPm`?FCY1&reI;O z{gz?qreTY8&~0vD#-;p$H70wQ6;-^3W*NcBkcl-PD3f)!bI`b^Dp)2gZ;E~uP@G#X zHrz`6*F6rn2#*u2ws(&hRr8Y?fzHHe-h|X*SPkawXCKUcl%m2pB6AMMAMx7jDEU6? zuv^!;2)3&?P-K1D4v68rZO~_`+mhg5Nd*R9VcL(CRaGsM0;NNO1gl}2rk!9mTIT?w zWv<_7Vwwdx&gJt!MTMXQybi2{AE~x4&581q=eXOw!O3VNiQTk8j%Yz5?ST+!^ZNK0k7k(qMm znCOa_2kg^>Ag|i6NZ{M5uXJS0S4qnm;gd|d_@?DxP!KN7q=%tJl?L2Y&RIJPj+u>r za(?I#Y-i}jKi8LtXEDn&%~0*L=Wy|tqw~5eJ>*~33NyG^dRb)hCe%sBza)L=Y*rzfg3KV-%sE%teHna zz`y3$MX<{eZ)MK~?Ek6TqsO*dpWTSu51zTA%YHrHo4qkLZd!iLzgWdhxB26{^QzpK`{ZPELVoM3I~Wmca=Q8qIysgJ}@Bfn|DLQ7;r>ll{lMS zr^Ng2yI{vui#V`7P}6}OloyK@fYXL>0RI;m z=h&Tz!ZhpH&K(;Q+jcUsZQHgzv2EM7ZQHh;^L*X!`47E%Rdv@@mviktZkCqTa1m^J zs}_Dsy1Y%xw)UC|w^GjCrdY(06K%r zrGB5S7||W@XVd)wX{Vi=0gk`%xEPhae`q$G=QU3e;F3)~Zu%!`WZwTJy=h683^XYJ zyndTK&4X3Xo-%U9c&qU?IrZsVhr4L!0!n3|ndhVwF z?jFxj1oBb~<0q_0tU$bX5@^cmSfm6m!wr&M@bkx2_H;=*csQNJ3~@ z`>+gUJWnafFv0Uck?O{jXqj5^L4#d{=7?Kz zG{&n~^-Lt26uZC#zLj$JM7R({P_1j*gGu8wXSvdx%b?_tkwY)0pV-)S`jyqCw{Z4I0c(?6gT4x`loE=W>X5?Hov>7QQ@Oren za!D+Dp9Vw}nac~LE%s{eoO}(}Ser6(39G*oAs_oAf9zpslFe8YnIKI?i7``fPC?24 z5t5eE(bca4BGDD(;*?aM9m`sr0vRK?25VOsv%1$vZ2UQme6mZ}+As#s6RI5Np=w5h zYk#LqfN|GJ;T*S}=IDHQ#zi-ur;L;)G2>PT6tS7`xEw(=v4W$hYE@0JY-ZSJ~l4Y0;GL%i<|`9hrcJ| zG{h)X`fH3IxgUGn&{yck#8E-vmV0C69sJw+^HA@aZR5cpzeW%nJ z+=b&1ScWR2wJZU_MfIgNU?5eBk#+2VT z&#`~P~yrTSie z!z&i_HCcu=r?%Gv-5-dlg`tp?6#SUQ%Z2?1Ga8T*aFu0Z^L{g%kiKIgci~y=f*DGx z9jHDeertvl&o{*WDM8+s88M)66wLH|EWkfK{=12O;RUW;4)-JM`qt8W{h;gnm;a4^ zbA>4?ghoOIG$T)j#eNCl2}GNJjd$g)I6@-0oDVKFmTvZ9xABczQN$sWIfn3SwW@)9 z%S7N!G!lHO5*Ne%agR%$#@;1F82G2&ic~=|W$O))_eDJVcOg*XnXz7MaW0@!!b#ho ziOB+9G|c?g88$0|W@|sJ%gDn!#YR)m!=9($BKO2+=V`lks{`bsO>%*8a4COc!7*9SrW_^nb0F`ZY*DK0SV!c6tt7VF(1-cF+U&5V zi-dy~-P-zhQ>y4z$k`xG#w|`P<*Ze}#1fduE^Zu$xPthNA-JAX6JiJvHMLG+dEEsc znK(w>G^vnP7@+D94#jud8Ba=cC;0iS6%^2V;rPLEe;pB$+VK79Fn|z;bQ0FPYTItm zvbs$TmAmy#Y#CnvgTewKqIPDRG@P^)*QDZjs#r|MkXWGPbBS3m2ceus=R;RK4Y?_xwlm>@W1vZ5<&0 zDQO|rfUwe#nk5Q7>Lf3lH6MhvZkU01hCjSV)nx}$qZc}_47Z(2tZ0D18}B#p40a(K z>7Ig_X5BEQjCy=yXn)C5?SJ5(2^LkHj{1jbrxMQaJzKv{+zO>kzOT(cbgZGfu5l(* zak3TzaR50@{|cSb8@U5YGr58jb&dI<`O8Ykt?J+I#EvXWgCGJ1YvaCJ_h0D2FKiUT zQ7D;4(mH$O1@#4qbPJ&svOCH2~6r|$WzQcaFO?0#R>S68U0j+|Zx9?`>M#lUal zP;wmfEmxGGX~UBQJ9e;e5?7k0Ta=_4pgnIcjH-hSiR1sW(BXN0pTeh1h6G$q0*0re z!3$~eO0a3IOb`a;2PHCM~nBm7H?Sioo7C}Zg|hSU|0wloq$9S=2Jkk|vU7fVY1~8I%YO5p zOfQA1aUx4Ns{{egN95c<*<&K`Nvy4*vtr0^a|0mx--?rAi3tzWgQwmR#{)k@{)2f) zn!_C*4rtMMOo7U@=zSdf2CMju`7rMxWB?TTgKYZNsDZ*UjoUiWAIhZQA=3ZKC`N^W zm^h*&hYOIe6ji3-5us8|;ly}7&G7>U^w2jCS5ivaQvCoCW~Gohb#vQ}9Vr=+3d*r3N1Sm=a?#-qB7%MR`g1I&1HZ0SNPlS900S7GjP|EpqgSBiG2Pl9 z=Hv`yKMc#m^P|_b(52cY#kcg$+%uuB=IzuI9A_M@lc=Um$^&}GJ6v{6=F3`IRy(2O<48rg|R6bJF%_!wsyI9N#VNz zCjg%d_Zd(>Zj#@KlKc)-V8kD8FScefYS8RiHY|xh^ETX>GiDfx-TJJ(=Xe*xLg7*B zo}IdpIb^VyOr{K6)|~y9&u|9oC4aiWT%0Y2et{G75qRPbYv7R4V2F1_<<$N0bb#*V zUrr9BtLzPKP~v?MDXtp?^L9(OIl-Xd=2e@N8Ub-xDh)u7#C;@6{E_{) z)^R215E;>vnZzD-arN1*bN^NDC}_wt$bPPLOLh|q8*Hib8l6vYw&o}5$LAR? z4RdSAOAFB*v?Ln#1G@AIOg`2&ylY`Xg9k6&V4K@01>)cE83Irj@a{!<(oa1^3hlF) z!0sz*awY{9(V2P(M4<#UdIqc1h|6W; z3_NmX{m#O6b)9%jt>r4Zw@_Uw_TA-T#CHoRNg$L`j3)^Wsh;0~YPTV*LgkdC2zgVC z=!|K)NvVyI?6LcbjDe6(@Wf70jgcxPu-b_^I0CP6_0eY4;Xq=@{W7+5Upniunl40(Kul)n z8aUyh`l%e`hmNB8?eHDlTWINrXpYDkx(tm@M>%6o8}g*+?-v|KfHV;H+-=RXn293C zaZW*p4o-<-SQo~f^*K&Z?e7G6xNYX@T)H7KSE{COy>o> zi?;tBaM24TJ@DC?Z`Z3H>YVYvI0vkp+XoatLP=Q_=r|7(><3GJ-NO#uB;XpZ-tTRB z{I{s*bjI2`9zO;)?HjCqqtND)T5ATaXq%=I{lHT#xCy%y)rDC5=_*)?$V*chDi$Y4 zZ=B(Fe`3Gq^688N3dMgYTON-C)?l>R?yo9eq}J~V$JRt8835T>5SR9WdEA zMj?3WeLjSnf7Gyc5jNeTb3E;SloMQ#T?8HU9%#A}X_iY6|H0;1o|?BBuMxVAYkjd` z_*n$#?e_gkLL9IX@)&dzkv*3I5jTK16_2YCJM*`N+~TqS&c3Bwcp=q`(eHB}nfxZH z4-6R7G1H_=uV=+}ii73bGy{b*p%J;R%W}PH90Jr(#7i$5^v>O`9Yvhj37kXTI21xtRE=YJZHkWMf7-lzTo7!uIf_;{9ZjG1UD+upA z{Vh>GX<8_ORU#?};sS6b)`~6J|D{1*IULN;i$w5`2TzXR3?jL%zg6C6?s`7bUU3rX zRWS=Fk_n@vZ^^nf2$?s=q^rYKB49WYaf^d)Bo|q|JfKRm#4mO9c%M&3uy!^}hkmax z>9vl!=0g_k#WKJE*?rAEnF*K-U5pg-k}CXA_hSF{p9z9MWj88Bb{rGHR~x!D`?MWV zMqjv8P`p&2h_>S14z~EhyhaL{kLZfI@>nkIgS=2!(w?}n+QTgYaB8~l!20-S&%)3S3?7llAH0v_$cxb7VQP)G zUPjdQ{JG{3F=@uvdje--z$SB5GF9E6j}>=*@H z`u-b6q4@uptMp4kiuM_sns#UNG=*{{x8VThp@Jae|Rtsj?e&C7~vA=_wIwp%2KXy z(_}c28baWq$<^7a} zVNmihoFM{mDr?9LIrwEA5HAeyRyg;+#H}XxNOfq%HGJaq!-e}{jwAe#LODCVg8(`} z#lK2bH*0z(y2!^F(hYsiDuK%@WC;1Z5@$@>lNFXkiZiRLQ6_vcd?6hn%=K32Zh9NC zr3ivSM9CAgoknLq)LU##9)PL??na^wJv0yZoaOY>Ot$r-7@YH@@z&P&|32}{LM*LY zzJEiDL?t;353e~uY=HGy7EUZh2s2xu*IVCT39H8@Pnhv`3d3dTqMXRDHtC}9ue^?o zi*8v9;!H8K4BXc4_1Z_MsC(nccjf*fV1hTQMZf%JnR*3~C$FS7yljw;sV)z!Kj4s8 zH^~v3DwZ_mWpu!*IL!`YZ?3>f51KUO6g+8&1d#^8aj`+r^%8gz=~kr)0tb^kiMr-V zQkmRUS{UBj(V?HK&%h#@F!|Rvczan$bZsVEFbDgD)DUh!g|S+C+-uANg@Cu@y`q}M zC45&)fjkz43MN1*X`?*FT*)!bwoWBZtV!9N z!Ln8b8Zv7&8$S%39w~^_UX&GoPJe z>7YC|6jN|O-b02zP2^|*mjrHquk($49zZg!J)n4<_a^iuCrEDTfp_>sdnkQ9> zodbU$bEu1cFhoh|re;$q!|v@tpa4=cVlcA=IHJ~Z6ib_wq{hm)oFN;2vq|a`Nt8YA z)`VR@HxwO&xJ{84!*Uk`md)&uTP^2h%Zc_NrcKuTn5K2heKv@<}8qLg59z|5L zzc@Yb*W&jpcNjz_(me1vxq3#ccEhu*=3n9{~(*J$_F@fK=EmgrAU|v3dUjs~9xHqy~$4v2l2+ zl1AW$`Dpl(Lwiz>RStsS8QBsx(~Di@a7A(ws6il2f0D1sXo5n8CGujW?m^N_{n8N{ zTVrj)|4_0U$;`F4pkT%Gx8UaB^56)H)I+_v;G|e=#2X|lHhs*2s=Gbr)jwIW)mLs`I!v(uWlWxJJ zNCr%jV#e5ZJoLI!C-9heqATU?T)ZVM~ zI;_vWd+Ror=w@3B*eYBnTb`Tga?D;Gkr}@B^krnorOPeE<+vj#=}gGNxR|Kfwka{j3?-El9pH6ARIyV)|*b?Ulw+jgYX zChcnXqzcn144k5m06za)E@Fk$C@v!!&^A7Ms&&ktH4BUE_Xy9(@F%1K`>6JoZ{CP* ztv9bGQ2#=%V>!NCkTfF9KrMoU2nn5mfv5cH=0>p;-NR|gUu?_${BvxNFtTo6Wu6Wr zUt9g_FOM^1PdEW@<~)AuvD=ktXy&RTwzzkaJ8L@;R2-8{HmuVeyW5;i{Q$tfTVwDM$5Izi(fq|fe0VdK23)W=#>%?3;7O@bht zB!g!y$!vc6e|)DQ8upd-bKs2_jxvHQ z9cK7q+}p}Aru*mmBFc>D98OB2LiOoZMWPb}V+rZY1u>qEC@O?KEWcs6Hj@qpP_M@D z{o7oBcs-wG0-1u`&KBzU-u$F;kA$Bv;=H(VWn_Rj>;`bU!Tu!zm-BQxMVC~C%0|{L zMM(<$OB5U^YG`&O{7?eXXl@?ME1Rpq&8os;h9n))Wct8p4<_2ECbf1ac$uTamg^|^8yieLju!`g zAugb%hj!Od)Nqa#3|wf{e0!mj$M7HIe#~(i=mipM&p70Evu+qZf|B_Vx&;C?4jM0g!dl@PIvwbJ@^L9YlDf|0ry8^B9J6Z{I+Z&1Vye>sA{HBG z&O6lwVg&F0Y6pgMd|W{edFWudJD;66WmXEp7 z5bIL9!3q_Nh+=$EH^xIhc9M$sEjoBf)pUkZIqmZ;PTuE`j`^wC}7a!CiF|B8-@!yq;) zJ&=nw-qS07Pn*msO+NXCstaFWSA_B-+R>%m>8_@ZRUSSH$Y!4F<;s`hI?ZjIIG5Oj z$kA9Cqp_fZ+wyKw6n6)maBp-qW_2Y~cVzkaE^*+QWfvU|K~~%?41?QWBd2a4To3PB z8zME7`a=cA%Y$&D)cu@uyCth25uk^>=MN%0wt>HVe|&f7i~y7cj(b(`aoZUS#Rj&C zcs5m&Jz;^KST*YK{nrOtu@gS<--E@~#Hc0*jXqLp5z%(Goy<_t-azD>^m&id2AR%= z?32QOurLFP6(?n zEY-wuUiW5|6QGIGZpIF-x8F*Zez8OqgGC>KSf-h8KH@MWzG%5hQpB%q9ztl{Ibd`rh1!_(jxAq3kA1C3Pf}+*HyeuT^PB!boDn(4>%=Yrsv(~a~%=^;c0fW#WpyK_Sh%2JCg29ghFA}`z7BK zHOIOF2_{tjuH>yi6i5V<+lh1d094hjxE}4rKj0SO!w|Fbxd-j&xojYbv#n`rE|ecvt80FrFa3^yvO6K)N!ppuQso z8r>f55Hs}@q5gU@AKY{5wb5HRY0qu=Rq#T|T~CYMQnP3FAU)B=Ot-xEE@7(-I~aBF zFn%XGZ47=i(&MF(4kaGaFD$s0PbGoxCfni5Kj?`v=$WNpn1lvXcZkXP$6D58)^EA@ zOj5kbDZakaboNFll|%m;odA2Y4_(f%?=@Sc5JLbo5NE}b&Allh#^3cLoSWK58SI3F z5tdBt_p%BFO@TD`_ijT_oh@c*yd4!5$Uc#9wm^O4$2gV~F7gvA z>LP^&OmCgCQjt#1OGgz5#H3mLt-$}8HhNe_I1CH&?6_xj$DT7mE0nAy2+FJiCKIF{ zc3P4~Bo$rsSSB}z4x7LgEN#r?;z%=rWJ}x@6x8I6X{R)oV?5_ChV*`ND;PYDMZs2_ z9%R+G*Ubt6M;G1vjztLfpN5jxX=UeabRV>t=&>c7Op$k+R#YAv?%u z*vgk|*^%R}vJM$26;7Ib)p{KCAF^s z9rAyX>o!jm(<@xhbmgas2drZT9;^`^JFWxCgcOV+#LrLGY-=~h#uSK1^H|mLv>xvP zdPbHub9uI_BN1c4sk-BbNGBI9!^My0GQ`X6!3;l%G}~N$g+%%!NEf1FKHV0Yr8J9j z6IjT$Dh3DNneDTY$j4D~Cmyna2LJq6BH51>g;G4O_%M0ml@jj8K(Y;ASm$2y>^+ww z<;^f>HI$&ZnA$ho5Rz2~gfew32NK|Y<$U0T8rRFC%ZXxuf53Dn2R!kAo0b#q%<#Lc zwwUl1NsGI@{tNDga@!WfB<%!lMj}q#PyLKVdKU&oni?6##5yEt#Qx-fD*e80IXS)5 zu!71#qtBO8!c(N+nlbsoO-_*yQZjvc`k)uYAi2i)Q?k96eplOwUGSS6x$hfgKkX87 z6bWQ^Om>3OdQa!%hMj3^#faE@2oqxnGRq7s_Dntiw?e00+64TvnghmS)^b5l2ugAp z0-3I~1#qV#bo$x zS4V>(%Rpzy<%WH8%5OcQ_e9;Y`e2%-ut&y`VIXF(!wEG?Hh*<3fSI<{l%Q4zgw5>E{;u{FXnheutW?9$ZK64G9uV2a+i|nuasyv&|=6#CSDTdMLpnnH@aCSlt;VZnj59Vuj|cokxHd9#sQjP zU!EcY=7ISU~}ij3{5RhqMHy45sJm7Zj1mx%LfJZ%_$*+V@T`NHxo zLYg4DmX7g&jA5VDQdDKTZDHbp_J?2}hwAMr0!J%%Ui5bX19Ovw#d_OQzuyfK4YD?E zOZ7o0^&ru3bYY7(tl=Px?$%qM59C$6?-q@|3oxG}y?9+3l#afQmLgOxE7*Fj&)c*J z*9>WKPwe9UhzY=~(7aTAUqPWawp_DNtu`6Wdw0Cfe{px=58(hk%<=@s<%G ze#;)5;h>Ij?!3Rr!n1PvP|8Pvel`j5L`p2Q|IooS)0l8B@PoQ05+6O&3;OHT38P z67UB;YG3?7n{T*7JK@%(G}J8XQyW8Yg6PV8N3b_tfs%;DGOPfLBd4sk+*%(Dzp_9WDE;cUG9lOE1j+}%s?H^xlwNxIPZarA0GeA`x z#0e6$_PSbh=$W9iinP6TVkp39?n?D%xeRr2w!vHioAhDwJi9g&HR;-%dTtScca%54 zP3Y|-4kVCLBz#S;Bw8}6pLvZ(XOcKG_j3_;EP2``&caXPAoGEdiA?~sF2cl|f@|7| zm^n#J7u^RGS34Ivq60xf z{J<ViE)7hBVt#;f~jN*9@Cn( z%O#%}n9@S#lh*1HCtSerUBxMIkLK@|to0AYH2D_PJzQkNfN-t2dILy`o* z5`!M_G8hR_ypn3~xG}m_2ze`eWgACRLdjS-=p{a4W$oBW!O@o{v$bp1x?6w8_x{wO z;q*(CIINB$F=0qbD7kysToxBoV9)f4#nn87maw&ke6i=21li+&I#-#k^$#S>^u&Q zBRL`vH6g2kL@}X{$9^`CuywFTAe2%IJXwaf>TGWqQs|^EYh65inSZ}k|6)!HLz=?U z%|h(VS8f^??_J5CC>B18W zlxKQm3lchG&ma(Q8>xri4{VByEqW7|DtzfCRxx;f&J+EHCG+hQT9ueCJ^QsciIt*^ zdJ5NYxs|l^5wV^$w{fj-Mq?LUmP%2BsE%|)Q#0|2qwzg+8908;Hti-8(q6y~<549xr5;BMY8!lQLGe!%#H7PybjDCVR!|7Qir%FfuooZRvgI%)zUg4)JX5;rGJPBt z?ah*FNoiB*?cAe;$BpAFXdwl=Zy#ekcnYOlCH8po)#G1`F=s zQ!>>^7~{tknUJRy8kQ``^k-vbT9>z5dcHbw6d5+g?2U z#Nzaqiy=!z<07b>5;xg)zPu`m_(-6=W-i_7QOZ&UO%7C_7%t!^ow!mkAFT+QqOEg7 zHEp@6eO8p~Ira~)O|0%@|A>)P5*$*(tgVaSJ27^}AR9Ncf& zu%i9=>NqcE8-3x1T2$DY{rJ>`isNPL2rG1>hWR8QYC-bJh+<|ifPuMqzBka&ZFg7^ zD?)obaM#JVw*uZ7#cMHOZ<(L_=hcrq=R)7`QH@%0a+f_ZWjk6497Y04C46QH@sHSVeI`V;h;Rcy8LSn`N_m+CP- z>HQq7Nbj``6de-(EX$YA3+=Du9D85=)Sv?m3`8FeY7Dh6@zlfLt(3$ZC-odaq1}fg zUN~9fHrmVj*BNX<$GX4UJ%eS1V@7&^{gdgLoML!RyF2Z8SoEAe#;qB_f40ywGVSat zRLz_hlKAcMl~li;i2>S`!k3+2Mb+Tn{6380g99PZc=D#n-Cm?NWa5BfSgE)AudmaY zQVw9%FyQ6&vB|{6@aluqK`C%O@O~Sl;XRhNOfLJJj6*l0&|Z!_ zMUvt5l;00FF-UD`3!Jp2;Z|`mo!6$!DtZC39|Xk6n-Oc#|Jq|Q#zhT_24toVAV*<= zOi<0B5&7}9=ND0PA~S$sQNX@_l1}`sl85!}FImF%NhF`lAJey@*!`YZCrS9G1$CIs z`c#yXsx446#$tvdyA!q0I)e8(L zm}0+pezv4B$&e*?E2GYYnUxvn3zK4XndsPApqVD+dDc3nEvPwo(<~vLcW9}21es^o zO_!wuKLI*&T^g}jI>6ODifT|8Av8*r%GhO%ZVz9MZ+=@lCr1n(%y;*&4IIkX`?SLF zVMpS5d|nJSR#h-%GBaIeHaVB+LA3mg=Px39Q%@Tu7l7uV0)AutmRd#L7*;$shp3cT zYb%$F#?ycUY|wjI;W!4!d;Z{xM0~%C>AwXRho`-h2v9*GNwB;(+*5GeVT%3jz1=7T zk1Y#ZMTEv6XK4BOlo>P1M2%bjs}hrUbE&5Hlc$k7ERGlY2qphBhjW-J16m9WK5PuF zHlA^mynIwFEc{ogHkajh8}dA6qU4K*A9MqA@qW354?34Lq4U!->Vdb$w$*ACa>J4E zUQDqI%+U_6)6LmQ~N83TR2w1-Wp3r_>OgnPVT+>X`U(>sy#0?yfJ@thfyRyfds&fJlsIsLc~<~yit zEmSRuK5ew$pOxC%I={=b{8=ubww5Z)D`hN63~f~nwba^Gh*xhX^{c!5gGMG_rd<~u~W zeFk$|P$~uV-}RN1!qdi|%r5*GGnTn{YQGb`+E{hJqM;qW4|&C#lVDja~-KW3HHwRkH)7g zo(>SCx3Ldsp`nctW8H4TaKCBw$oFQAhttm&4;$>TMCT2S{HAanqS}9J^uD*Iu8NXB zeN)Q&aa_k8)Jw-f!&xRq9Qy?L;ENZFAdR$z48_pu`B6?sgRB4!L4E)|{#^TRe@U?9hBcS) zU&-kj=fblL*Och7VHk}=7v%HYsc;Kr3q3QGad_HP?bFof!)(8mNF_LEHLJ7`SAolOm@3#1bbx-bWKW3Xo6K|je*dY-RP&9MF47f* zeRZ3q%cy5jpS_`7EunR9utYHRtBiFJNFL*?%!f*6xQqF>{mz z_51XmS$=Me7m2{48@UXMXU+axomUUuFx85$x;b1%4w9ul@tKeXHuFBX8L7wsn;OA% zgsT8AI0U#_QCa0Ri7`G#Il0RKk4Y?I3C3l$2E&;7{8HySsQ=cpodb_komj1Es5S5q zuhurRudUyeq=iaqfDpAd5vj9^G^B(^yhQZDFn0RvoQIPe>ao7>Ktey~>GH=uOBlai z{w>w6FQ$(F&{j>nZ;{IkWdNZn{cBJRWSTwW{Sab&VU*@UD*>a z^;X4AZ@X$&rnms|lM+x-Yw`2NDJ8{4wt$~%A&(taMcYy*sCE*0V+$p=1zB@)k3VszoJ_4L8YXLjW1`q2W}{6M=JDx<3ec9QM9*}9`7uO{lK$;W z>5?O2Ptlt%0E98HQauOe4XqpG&Hl^zdMRkEUGyThMg+n$029RTUe>4H@;~)IY;(Ps zsr*hzP%ZXNnJ}{;hy-PQB;e!=C;|QEQ3j&l#@nyd-5xGg(q|=tUOq#JPYE?k$cPdA*G#IZf2~$s1FQAnZ;bvJ zy?8z@()dIvDNs4mA>79cN|ViG7Az62#4-9z4(FFP_60(4;{Yu^Upr~kTMK9rZQ$4Y zLn(kGG6Svk)pP9Ab35ahiEU|{36^g=cKWqu=E$n|66BMF*>2W-Nr$#FJ%G(P=DPoU zW7V{-%RkyM*TMOc5C5wiRh1l+1B=#a`lzpVG(D;piAu`B$Vg-pDAf`g@$_~MD#J!FAaS}rUhk2SxKtL zTJk&}b`ex}>!pLnJz>!F_CIY?_}|VEN%~~(R1Se+@cip@k5seORL{FSNPN72mPHE=@~z5WKXo^(rB ztqwPRm|}FZPQZCwG;|H^_)iQ;>R9HBcxI~n`XoA^Zwbe!C}w6aMBqrw6a(c$6Qn~_ z{F~Z$sSY^*f_w>F-;&Q(+$YQ>;$Gc}nve2GPgsoU{@a-3(rEYcG5T!^zzft9?Z?|n zZDB7;w|p?|xnRjZ<;pV>n72H`;U1*#lS__bBkI@ObLK%k>gEFGS5HknsM(* zQUR@Fic%f&y47s1rn$zNt)k4^@{Vu-38BRN05)9(qkPK|b#LPEa&9zRuQrsf9%t(8 zNqkz^1_Tx1LHVt`qu#Hf7esq)*d#xsgwQUN>j~&o46~)k=NZ$&^rGpV(HI z3ZcSid4&R+z_kX4xV>`0U7CRNkJMHE%5$$JVI9z+D00!)BX3DK1mv!EX-mV_3m_CX zB-yI^gONqvUJUH{kPK$*yvRUenitJ*72pk%Fu+g5jAFEWWHTo3K3P z$TfDbY||NAqdx_x!W8seX4kem7q^Vrimd*QLwL63=qfKZdQw+Ks{WOnV@hnxpRX%g z)nIuO;mbJez_3SGbfKT^<)qE2ZHwPDxtQ(P7ec9K$S>4IkEM;IiGr|txy)MM%s>~U zgfFDZFDy5Ytt}&X*+?sTsyu*t6)79;RUa*G&?Sm|i1ek&^c$!15~_nCv+v{=S<8e! zy?h*!PtL2zrOpD+=GLnM^k8Gn_WO6O2~6y~F7?XFhB1Q+K+Yc~ie$?tdzc^?TSCaM zwaw;+UUvf8^I6iO_(J@~MyQBA!k@)z;LllAHQF=G#B^6g1MRj@zJ_((BMD^Y6@W~4 zdla(xjMwMc^c92AYUqfk`a>{C_Oi@shp&??Xz!`KN4T|Ieo0>;U}voijQ3p zYg&9XwUn!04kf}@Yb_oSjNMtm&_d2uJrf6EZ+aiPYTK^9&=?rU*{8s=G~u7<>d|fD z>)fp>|43U=Uw`EDhyYvfKr_93R8Y;5tk`SDx*S5&2Ovu&Q}UElYQA_vvQr{20LJ3 z@n{7h0~u*g<*9Q2h^uv$b%xNG&JvM_bV3Ylk~NW z8hjn)F83P4qfbh&C@d6Ro|O6JITB)O1R{q3A`Gg3tX1r$++2KVTX_8xfe3Ps6r9l; zogJ@zGu5cd_sluxEoy{p{FFYV&G($NTLwD{Siz9 z-8UkJ6KZKs1)v@-#s;N(+v|oTY^Y|kj8^56J*X+RGLL~ID+_6WpW#7@BhgNSVVd9cz<3IG8N#h7E-MLTOo3Mg#HfinAAru&{Bu9d`9wNp`;?%X8fPbjvw~nMUHu2leasCa*># zqAmMbdrLL5koqRUVxt_<0}7C4O3cmBWJHbFW{6X6ayyt3(mxWHj350n z3ti`!COX*O4=XmsF3EdFi064-F_4eAsZR-&k4&+F#Lo<}qAi|@*H$R2?jK@`D|>UX z^wNnmPo;_?FTn6o(k6Re73OrOgTkD1X$*g!&Bt(9lGBysIj)D&7fm6kC6WV*hqpRc z;W>d;WJ>_B+LHbyrN(j!TDEW5t`Y%jIiSd4FV91}N%i$1n~}6Lsj#3C=1G z4<4aR0n^+Za%@oeN-_V7PstB>POUfj=YEy3KLO9cL;ucB#iLOPK(Q&DXj1=RGpq+y z;l=UW7+L`%ZPMj<$obah%J>mQx89o}h$!DrX8`*>A`Phbfebd4a&hyq{G?{0q^g#@J*3KX?8?t+j(oE(e)pujloae#@ z*yX|iIW8zGmBOa?6U$`nW<;O>#1PyEgk8tUO=XlYEDI^m&}s`0>^?QcwZg1th2sB0 zi_nWAl%|#Z>>1YcYYP#Jcjz|Y+sGw39%I9kp^_Gx^zOZ=2qcvkAl`DO2U7uZ18w2C zHPaDpe{)zCc$7>SfbrR?_7{)8f*lko8c*ilR=_US&mIV;Iq;Ktmyyy%J<4Weo(PeTM zC;v^nUn=hq^Jx@VGU9c6#0lQLRlR0ijpk2_tV1Bj&hN3%U5fC#8;5(zc@&@^!vNhb z_+=B1Mqb&RX_R2Q9Od2NE_@yPAyj+wc!0~Vm?1`JP+3znKGaVOYw^=!LncWTNq_5SN z^tcslY8fR<$pv|F|D5+Kr-yq_+Ns3tIl^@s<5 z6SBvt?MyjgFWuE16P*XI@6le}ciUIcavLxFyb*6;7dCmf=XipTf=n3cD-XMvAde=&_AnUZiEo6tg3GvrTk1Bba!EYx)O>MXBs!k;r7Rt2eT|!_tJdv1) zkkxd7tdvQ4rZ^Kqw)+~IEnCY8<{iRrGlZn~rL{5+I>t^5hH5HOR=@Qv7H)pF3E&4ZMz*Sn{aIbC1{}THj7EM-w>} zd;Z~T(P--%C@Ex=qqriy|01o>)PqGJIw7IrW3!KLd98-8J7a=(-fbd=&Y+TXR<6vp ztt!;#)oe%y^D!rVtk4DoSwNO1TNoG$@O044`M2ZP@rt#c>6&9w3a`SU*{oD{yhN+Q zi9CAcO*5}CMf)cvr3n;01&VQBfU#@(kL7{DTuM*Aj%y^p-Aj-XluMcvI|Ug5$evD2PUzLR5EofG(vg&Enr!#d}aZsPgp19`V04S-~2dMN)F zgFrGAn|JY+pD2hj=+3os9oCsn(=MG(m^j;kNypk9gk`fA91koD@1DIyMj7Hn=>DeS z7-s19C&V?{$WF42heP`q|DI^3UJR8TiZOM3SH)puv48#!-NlWz5Q5RIK3Q3@wQdtT z4nd%}kiC~I{?{FweD^J~#fq82vTqxsTbE)X`0nP>wH>jG7%X9Nci*9!^Eot=g+U~r zLcEv-KYVV?jCxC}qHz3#)=8X5&kk<8r@Ap%X3@jJdZcL=@ax4(CD8Dqxi5MWeR(1b z=drZ(I^RSBo<V|3S>d1AE@xZt(e{C|ZjE5TUwWj8?7PH$oo7*|19^vrDpS0g-@xk% zzy+~mo$OoWNo{1I3hj&yHP3l$`s8M_*NnzGy7+3RX^?F()Y8v|EecT6E6GQ1UQ4R!_RFPUNo?U{Mc*aijj z|EI+*YOWFO544V1SQ#CBw`bD4Cgm&P*6*p@j{XIPlfUt;DJGBsTMp+<8j*(HWFDKt zlW3?^@GulZ>DLe{HswJ#4qYSCtlzr)>C1Pf#q#QtqRnrbvQ1_c+=@V?eyYZM#GML% z&{4VCXcR6=p5rmxAG9QO%>Ys3Xk~>#+zKDzcjo}w{`?z^>Ri9k4Ir2uH$@FABv9@5 zBtap%0n}iwnPPA;^&mR2#kEX`9#fJ3%!^A-!avDtid(BqFaJYbsdVU21X}$YsFP%p zpmL)?LUNHvNc0_CZtlne8*SXQ5;J`OF_DCBd@*e)dIrBydd0Q;&PBJmNOv>WKuw=c z<*>3yU+D2xpv1micI%OfWN@}NK*Ieuf$CReOQjx+iX|#oT;KtkGkxQ9p^1eb^Kmdx zYa4(U@}0zI94n7k@#KTkJj?)%Jkh73^p3cL_B7A900V(KcGGAyVz5^bxAgtbUI>&a z@ZblQya>aO-pOm{12)zR+kCn#J{=>RV!6xX^E=<{{q{sV9zkJ!b z#m8uuoymZN@t{@jkaqy(Mo%1La!yTy_wZId1*2{8U!DWF(nK}#E7I&qM5D{!!ovQg zf9jsV<-;m$KL5mI&0dI;Gz19jk_Qg5DsB4Xe1No&UPO93f z0u%%p`Ra-Xlh64C=ejyTNo8Vx6CpNC`vf;ciTx}Rm=zc77eB%!wmi(jvt%z9e`A{B zaf60xfkO=d_GI1Yw`KyiQ0`RgGKpW zbBWMvw%M#!%c`9B z0{@er$w6N(F&^ibWeo{rme-eA>)`DANKL<9IhAezF5@fN1D6>oDN4 zMdmp!)fHRjkTHZeVsU&qBIGuI&w?t9{w=CFBj`%JP<}y87Q}rn%K^XHB;kzNRU6#n zGSBi0?LPm$=W31|RIeoll?aq)#Ry5UD7@O_($N@kTaLP<>x;+HC6@GWM(*23H962d zGAlKiik!Tah`o(aF%E)0nBL|P7Y2O+Gu7+859CRb3#@1hGO;hP#0vxkYuk7LoHrv; z6R%8%+Ag$ZP%vP;b~p9WIfJ#__c33Xf_Q_zn{T3PRepfmr2&USCia&7!N3Ht+!4t% zY*R>-7y}j8sk{EEM&~E^E}-459LY+x{QC@xM^OyFEXE<7Oub5y6cv`nt_)wnQ9kK4 zVp%u}o(4p;+AO@N-sNVPLNiNpts$jl237;LV;5DYpU49FamroykVL3sdjnSZ*tD3v z!jPdCbmu@Jf2mz^muYu;@&4A~69)8>TLl0TPlV3%MB#g!ZHD!DSl&j&zS z$2zl(Kq(w=kcOiE4wS+T>&$TWRbcLe`N~b3$m~Ud?JG8*_@f z9P=%KCx{cjq-*a)~QXGkRtz@y0aC&;ocITykO_R574!M(p3YB;Y33i+q$U zpgiY*eahSz!^*HN3Mp&uceh)XMc~%H-%FSDK$B`ro;B{$*NnL2SQjc0j@}oz0numl zDm7MJ<%e3b=;pzi=dA*-^>?`23z_9nEc9Zi;U~N^X=l|V;);;5UQk0{YJ5#mP#gnl zVatLit)K>7$+7swn5lSsbN}+J{sOjJf%{l&H+jpax-Pd&FA~9=bPKKp6R~=>zO(w^ zHN7O@2MQMA{Ej3@bCXFc>xarnPb@17XuWA2cbjfeGEV}Afn1DS@prH$${Nn8jwoRML5HsI$EOb{?Kyxg9k2e)XjEjlBS&_?uoax4UnC^y?yZj?C+e}7)YG4-;=V z#UrdeM67=C?mtKR7gGOzM0{@CE`Ts~8bn^n`$=(vNAnM zx|5vrhDA3Gd7sn*E;AudQaQ;>@h)iC0-DRw>eoSt4r>Fqz`|+cluNEv&5h3IFoB?i zgrIej?>vzK@!TCj0AWC$zq^%v_aq9p$tmzS?LW=MIl$A=D5C|25s`kyJQ0HV# zwn%M9IU{$#MxpP}lx*itiYsE|)5-Oa$+$#@O7xu66Z(CM!zX^#YsrXb{6Bj0eu9t4JMto3Do1>wS_PXLqJ2N!C? zBIuT#6ul?~5dX8YDH)T6b)$tDstUY0(9e_-C}xsT`Pcpp?d<5j6+Z-3TYCs@=ySpI zknmj^HyREiEp4vKdE(M=*nzs^JZofwuUiBGH;f<3bK=Lr1QFEpK60!AS8e?>Iu@E1 zRaWrxG%%h1VYDGUaUmBQ;fc9$Z@!EMVm&Xmv=`&lVL~%w>3wotM_~7E_$pot2D)?% zi7@^Gz`%0m0$SQ}_;KeEx}lrpBnhZADd>(djtUsX;s{cgGtqh!XWn?E$rju#jaaoc z5Ltwo1Ojnm6FvB!IdTHSX_Dom7r*se$;bUS^zlf3x69D9O4mojDr>j~6fzynR-Q|P z7d_fBzXsz<(3F2eFOQe3YMaHhGl@HYHft^vyl3%&38z*h zTLSz|r&IHlAg9o0#AWV)tuAjhbbM{cg#!0$r1MJI=mAGu+vu^z+)<24%FuTtjrVOn z^qgj30O989#O?d=;lYsjjQO%tfG$yD)3`b+F-5b%bG@E&p%Ysqqx$eOePH@GoCUig z*<2a%oUT4?G4Kr`BlukmV3DQRhr?!of>rvd!aldS(-4hG@seH_+2vv&U}HB*I*0Qk zr8OA?o^An8)4A?OR+~7tEj%HN3#R#T!Nm^H5~8N*4UNqXqdKP^rb zG=+JoF{~lSCSmNwR#o8j%OS4O8JFj?`9KPN|IH~EY$~1HPRzcr_^(HeCje5#l)H95 zUj>IMv(1!aNFLoRw;U||2uy!KpJ_Nmj%V?M*H!kl9OD;15HzurgNvn-XXWoBw&cg+ zIO#Z~3?y3~&j2el-Fg*3XU#=4(FYI7i|G_xND)O=D~lly)2nN)YwYI>B=6_Z<)PTn z)gYF)d>Zu=-`mnyyhcIQ_ZD?OR-4wHo|b+*a$?1D-(Eh8FXVh{95wm7jQy0A9#yHlM=eS9vpIIud@1z-6PclPd<^@s{5}9 zFh?3zrZ>SabR5daesxM^QS68V(jUQ9luy2xmE~d~zLDKn#E8P?wM{gFDAz&jF>H}K zx?JkMZktfwuz7&`^`M1og>bZaO;_gnxFqSxH_-l5+`h;#qYm~u=GUS=U-=eM?ync) zWXmkxb+nle37%r|`m*b&+lStWpBB*mzHA&iiV!0(kc2eby9F&1nunhkO(sOK7^SGf zH<1}gjm$aB%{aIvZLLOf2|*J@-}v3n1Li1)=G>skK$asEN91-F33ko;j|Ymgq_Y~< z9uhSVWA?g^#V;J@ndO3Z?n*UIZ0ZWAMiX@>T39q+Y^G1lR6GUsu~)Q$(R%^X@U`cX z8}gv&QwA$$`n>L8t=A@o>|b@AQf7r{MJPWXWdH~N$YcyBL}sQpQ;c8zPBeqFmI)SV zQAMk+)vO7BpA4?DuN8O|Lxmz$rG}H>aEg<;a@S%eS6hh~mYYJd_WLx1hRjtf#J@XGA9i<&Mh#veEVz*?rhS0}f{OC_uK zV*Sz#ckx|h$?=25^sQ|=g*L|M6tpqq8w3+4GkIoV@bUjj@Im)_b6VwCbpw`bhJ5ID z9N1DFrc@I~w$=FG#SSp1nVfLeb#e&2`O!rLCEnG8!y~0vQw=Y+VMICeWp4<9$>O zJ+vxQgveyy%i%JRqlj_fzh8@i%f;Vws^jlk0x?7u%I$+;=*ee>K*Wm8fJNX97lIqj za*$182*5!v7T5L;v+-_HZUt<4vS}1!l2>z2oJ2s9<46}_+sp#Z$-eA1 zoJgI-X>wz$HSur` zG)H&0G@u+*+ZH4EP9-KqGb&~JN+M289$_`_JabaJD(uf}GkAu70TlGykGY#;_70M_ zxk#iAL0XXV(3(1BEvrq()?m_Ihh)A897(|!ADA$CnZQTJWxiR5C$@{K5H?}&1&g00 zY?xxs5m_#0pI<~wj$Lq3MtWm~fS4!nnXtq6A?)JgqEG&&W7-x4oenoafKfpiAjY33 zuGbo!c8x;A-~ehsWRmr;lWjHF&92%_6bMCU)&jVMF@NQF8h2f zL-Ar`c4slbjE{JVQ&$o{#9od}F)R)IBe=7jC^)M#Nyf6s@EW z6)LpJJ_nT2<=W(qBX<3%)+rHe|wa97M_Q{?~V*$hcY4?m6oyd$YJeJ30fI zNXq(m%TB5ec{&=^IsYry#%--^>yxRn+2{dW>AT=i#S6$Dm}Cgt5|3&sbov z!qHe5V!6b{DL!A#7G(&1?y)FM0u9o@g$i4rP!a@o|Jef2a8M*>`cUDj>I=yBO!^~glQY_&A zbr4aJTBIH#XwN6o)ItqH3%ma!k4mK5D&7`EqReNG)ieXJH$ zmts4bbt&y#V_PoN4BlLYf+*~3R$_BQrl{w}Nw#e-gn2asv_ivyY*Z70@IGj1e_lpH zELF}1M13!VKSkw)DsV%wfx`1mLUD6s9|$PBQ9GIie=VNAD`Skt4I3Zwdb@c-YDgI? z4~hUV^LjqixvY*e8&`YVmmmGojs(I z$U8qw2!Ys?rW`+kp4BOp3a?WVl`^#e>V=5D2Jmg*|ED;3J0;c4H$`cWuO6 ziViHn=!fUT9rNF9T1jX<2|^^^KN{h=lRWPu=lS=!gbEEWl*@gDaa>r{HBRT$|0117DZ?x#0jPxGukD<3*c5Kou0iqW z>PsaKwxgI%9?e?i+rRtPDOFNn~MUecNjgm+b(V@^ECr z_c)ugpax+^grC~a?nH*VobsZKUc6B|Y|kU1vYyZv68-kZF&p|e4^euzRELbs#)+(D!I!aEnf4AkOogzQN>8B-52AY~bmX%< zyvS^5+gbT2nnrlBnM63Um_X^C1ovIq{!^WaqxQk1aAWpTx#GjDJBxnA)`uHFDwIVw zYH9k2r;(wuCp-jCKm?a^Uz}0K#=Qd~QH9#~c)=kkR#hseuT`0+<8ZcYrS~zJLuT_Rg$c78q z2GAqR!@(1MwY5xLXOQN}Z%VwB9FeKIpam|3PH)*k=*{o|{57j~+*Dr3Uzz*l41X51 zbSi|2Acy+p#~RYdA3cZehmvie1zuT$IzwjGSN=L{TPfB!;rO+$ys4}{?1UQ36>Uyl z6$c*e(O?A~XrR_Vb>}hcWT|{w)pr|%d&86j`{X4P-vbX<36l-SUWed&gp$JU+EZC1 zYO#R>p&a^&?d;9O*GOT38yh|i_!o3`Gl{4zWG{AGV+LR1G{zq^0ri=i?d3lc5O3|! zw^*C=%`ku=>2Eo*7k2CqLCu*GXckZzM?DH-8Q2U!$Pba76_iaF>v0Sc0IjiC6y|o( z@Thg%_g{?5M6ACE${!R0O#m)6-#!X%#RqT^yi7FbFRtcL3b{l`q~3`+~%x#xzm zi6W5?_?AvZ4(xj6(}p-J5c)Nqx$X|OA#+J{ob0`%yJDN1W@%<;gxGJ2Z~asfiZ+js z!OhZ*1Cuy>vSa9qgk)%x#@rV=$@)F4}T1VtM8bAq1NX2q%GSxftp;Xum8 z*9r<}B)RTCy+ao+-3+L)NfZvC#K+3am=Z_KwdrMDO1H8Wl3^R=e@CAsDI`{+Ns8}8 zY)di#0FO^7xRr2|(M$?`1^+xVPc#u>MrpIWD}#t58w?3Q8Xb^A>H+6<)*eDO&m*N<+~WvYPRLH@VkGgYo zogQ1pb8|tJS--7>b=|(>28bG-DI`xd(48}y1)>wgmSC(M|3=CmkKz`pG@6rsCs5BO zDFUb$+%hddyo09e){9$k_q@x2BWy{g@hm#7-6r$R!ncEJW($r3||TG;h%I@_j? z>ck-U^XmMv4T7e)4?^DbVn+*8NkmYyhO9ef%+6P^CG~@fi?u+RrQ`#k04D1~e5l5e zVrp25=6YW>i)YMyGZHN$FKmY@adK!Oc^p`E$qrI(Tv>-};#Z2T8j!A+?ukfZ8-l9j zpi+_`hX%4^=XSaLn(gK*gaT1%lw@VU>*-)>xp20)ju-RKwRr8>zohi zm3R8yz}5_8c#(YbO43~auLS7UJtrexYydzqFId5rm?KbyG0Rs`Ott>Mv|s>;Pgk{H8b0xp4*^o--HYqTwHij zOmA=QB|8aa7yRXz*Wit5Aue3yV#A7#wy%R1}Clo4(4tS@5omnAnP6NL%DE6NeFG&H*uxNJzEMiXn!)Y5bh?{nEsrpPH zv`u56CWTg&0EIe+!;aWOkqWPDLjf_VoOlyMcwRN=y<%FsM2H%0*=4YIR-V6hs3ilh zrD)#1t_)V`rI>A$f~!Zf?>f%NW$gdY;Fyvdt=|nf{7+HFejpy*v{c+BIP}p18V*cy zzl-L+UzwEdThoQ{&f`ct|1`2j6Y76fdQX`N{SU@CK8DT4WXWb)R*q<$Xfn0{s$o9$ zm)L2=^q-0#d7#L4uFXZN77NT51!V)%(29zI}CpH#%>K0Y9Zig~IOao#c;b1xt-Bu6Pu z71=9;H4e^U9#&Dnox?hW9f0Y*|4fnaqZsK+%I-x!X4ZA_08xL5-6bKA-OW2xrZIHf zKMcLq0hJNWHyvd90VNy75N5LCc)Np_14jI`BZaoVICGb_Sp*PX3^U#?+}w+3!pmoL zI0n%}8Cvd!6k;5MxB6?21RMXw&s2&dkNLYp<_;;2*EnMMr|yD@T37oEAsg43z?W%7 zsbz!mp-%u|sEk=;y@W#twgK_xD8|j}5ePh#`8hclc5GXv`AT)34R^m(7ljNHWFAEY z6qTD;!{{DolrJKH$ij<>I9~I1POcV;On8M~DC%EKNQyqL^+(YM9EP7*QX2`bvR8^# ztm6wxR>%nztb0prT$S$JF+2XAaVOWaCXvrLEJ`Gf0wF*{jlWsm!*6`Mbg3(BRn56{ zNj${qj7Q~&k@pV_dv>#xR8yz*272#4RIfdXia{dVU4 zDuiX4#S%VBb}d3ZAUaL7$E6>+-$-9ii=;McxF##@@E3PBn%(^akDX6Pn^!Rp5tR`T z^`X7f_`XtB)lOT9q;f7X1w4gar6Uhn{~ml`qhamN38l$|$7BD*PJjP2l1w3w6&cdf$EO#j3xskjVih>UgDb z+%m4>`hay@N-+Zr@n}_3t=CC5d2bfVWz%yvttEU;`213JjasKw(bk7NO;lTSpshYn zdug79@e{d;dBNYCV_@*i*HJ2z+V|Chms9d?A~w@$|ggwF5{lZVPI%s0NWK2=S;ypX6a><2Bxyx1`|l!3b^ z{tkk=m2gcp(cC^phQv(cb&fUz^yQxh=3X=^%>=9SyBkJ6V zf7iKt9@{29aCuiy-D2{9SVCIb|0c9h_kwL|BbTjzJevpSi4el9m@3^n@6r|xkJhf0ewNbtyGxNVSt*#OVvX_z`u*9uAN~*< zuGM-S4}S`%0JWOp4j0T)GKEVDSN7rLW(Wt%X1jS&p4i*Yp%KvgCZ`I#av~gPP&bf3 zA%o&3-ytf`y1eUAEKJFSB1YSQDyYj2*>IXfN9J~BO-s?3;O5;?q{*6ycmgf@iFRTf z06m4h*0rRkge}k}PBr`b*_eU*%DX|fi?kli1_^%PsovP}Zsx%!aEB0(>(w*Q9*~U5 z8HsQ4CoNU+jTF?M24y?*zb?ymP|)|n=zu!SLa50*1I*ciw0P-1fPfkFgN9J*HU{db z5J4^A5iDIGAN7GSv8Za^?&gDYh%X+8PB(}Nw)&%fkcd>iv7$aJSn-I{564B|9B*mS z<>&(3wMqkya-E57YBzS)x@`wCC@(!K34 zav>>xKA<%LhHzf_oGaApHH|O>X+)~OF6$A^h(X0nc`~eZ8ri1@<4z{e zgJ-*hnJOa+>S6X#UDn-V$^VKO@z@reO)0x3umYolZp4chBxDsNzT zqy^7DkFK6p@A&AV2LeR7R`y8QFoW7tQgq7pcnBIKm5#M}is1=0*vzYk2hPR{r7hYrILyzZgj6-{h#fSdKYAyU)o?7 zQtWG9rTBnQuoOx$L*03oZkKF`%u_&eOpEa!9o~A)th~u%iqnd}-$)!!RwS+6__r`^ z;WN&cj^qi+#oq&9i_q|utQwKBs(hxA=mC7eSd108K{ZCXlf!>(+s%R`f2_z?lSFZ3 znO&nN?FM5F5xuBGpQ#hHEI$TN%J~UO0*_mQL->PLHDu%V9WZhR?hX$awtBDBy{Nhy zi{q9!#RB^2<&mJY(&v|Vg0#|p5q+C*pG2#7f1sC5$W8@_$J=r(-zjB5nL!R7i-d10 zhS)10r!jwAJy5zQ-jTtL>vxByVAJhffJ#&glUpk-EUqX}2RL?A*w3<=t;y5@J)LQG zvk?&n7h0;Qfr_EjOpYTuex@3Vvm8u?K^m}dm%!OYovO+GTdeoX7vB6nccGl;ouf63 ze(ndE{uEU5ADZ(wMWZAdcw;^0Y|0ypsH7txbm(^k=LJp@KCdFvZUA3DeJr)q!tlDv zVglw^m;c7*98=Tupj&6RE=aU5G7$bw>y;M$Y6W(ZtV3C*{`D%45IoB=DEdjT+}RmL zjKnCIgK}pwPq`dHQH-u9NPZU=|CC@=KVl51tB04Nt80BE*PWBt2_#&cHce|J8yr4!J z)Go+fRY+|cxlM{?D=VR%w2enRjR@FRO|7Z!7BhkO8%-tm4kdC-65{a6ZYFuk<{9=0 zG-Zmnp!y7-+WBQg5*96Cz7!5AN8%&?JKc9 zJMqgFfGIoS#cv|+&_3#gF~e%BIY2L(wc=~l((DzdBXTe3m?|EvcAH^ZFXQ@8eo=YgNT&<@B?$^2e^K)i(1%mK5TjvCzDzUI)uIFQ>g*vlu&D;(C|?3^{83%DAI~-H z$UC%aVb=sOv+dFo^qM1PEY49qL)QxZcR%1K;(+;%*&OEVDk65ZUt8$m5lQx1516G6 z#Hdwj-O4W|*9E*w4iXK6C)Zs`Z_-&coJ%35T;fQ@ZA_8*7sMS>s#AEdKrD%uQA&Vr z4<4y#P-4La)MC6Jpx8m1LHz~MY;dL;G(v^JHmZEr-y&j2r}x;pZr!}J(Nr;=gAU7Q zdD8ppdshBVsg{W%MXj?;%*P2B+&e=R8x1EsXG@+0tOFLW;A5W@#x`f$~PC@uCPHG6Y6-a{~ z-GJmhA#?USC3`&$!&rxu5!~(c(jn0AJKe(3(WU0IvJ)TiR5EJ-HQ;h}TK)2+?1~gV z``)?yaP0T$c0DlljdKm%RmPN!Gs!mO!KVRv`2WK^2nRtL@i<^!5!P9NzH`05rZGSQVfK5+b?EUxaRb?*lC+aW>M0BI^?Mjk} zc^l+R9Fl3i9go7oElB);oJDZGDai#`0`)wC>;4%}jW$jF-vH%v9}6TiQOKV2QGeXE z&YwmikMhp|7!I9%Yg1S~l()+biZ9PiV~V(h&BUD@WA!)K@=)#zh$umVnEwtF3N9%_YGOdU9%Mf+JFImt zO>DS1-0#PL8lEgHQF4G8Tb_`mV$KK@RobWIKzgWf42cgQ_>9_fCqIcF9%}9t3d9dy z+)9~%n%~<;#dKD#I5niy^CV4&je(?;SA6SND~|jYLEiYo!=Q7rQB11go)fKo&bHzS z`EVxnjWPitsCia~iK@3*pXL&UKX>TbRv>XyN^26_E;cM-O1-mo4f~#EB!gAmARlLB z?TLj8;7`7YPVtqbU((EV%dpbmZrL#v(wQT2faYo;)|>zTKwFepms)P@vBN1(O`Vgd zMh8@fK2oH2C(d)m|VO`KEs5rNK8WsEW#eArE^2KLn>Z{1(-q;s@KgjmtfV)E-^90 zaiK2yRS$pfZxt#!E+M?86r-~y;9p_uWn?fmuOf&T9P-?MP3KJ0e~#irH)29g(hkry z(icWSQ3xQGtN;7g(SJ#NOoj+D?bUP7^nI<^n`eLMA7Uw=NLnfTg5jHiZOr(~tpM*k z2GpSy$`(5zcmCWC6Xn#FRW9CBBTUr%@Z~+KPOY0iS)AnGgImc7R7sU65~_Hys;1Es zfH&7%**M-}adyE~ztB>@jIiCO?=dE5fldi!2JpTZOn)+>MqpB@FZ}2F9#;j9w(AY| zl`Jj9B!QT_3^;=4K?SJ-K||HP3kD>WZ=}LAVCm_$-BG)~m75VLb>&^9PAvK|u?>7$ zvO4oIUeF-DGcwb?-vF)s3v)Li3t;zn%#hEj47qj>EJ4H@lg#`I$}&u|^H$&s?&fzF za7h3HXOe@;BF|TpD6fxCX5S*1^J@)_&e;gOu|4XrmVKv z(oJ(WZ$p!c;8!@Nel#VN@b%8evD`3Wdf4bF5!FNJbTZ%R#VN4R+}hAwF+}qerWknG#k~-V}wY(8-mKhd*vP5rpi*LlJ4Q z?;42r<%F1TtBBFw!Y~sIVxoDoOBuT0zD2(GlOPL371y>#cnNIQE)%xBzp!L$bXkQ= z|7h5Fr0Q)1LRL!HP?5my-jA33V6I@jz0CFjPOkM&Y>Xtv#0$H!5-!bXViKvbk;;x# z^^1ehVGI_LVb&nOK$kRUM4xyo)pj#*=OTmd^(kvy^9I+qnBo#x&3bM2|cUw zexHtyT~{@Vg?7oZm*D*SjU^(68|01Ce$&NBhpZ2u)eiVLs63|8@Owf>g}Y=CgP^J! zJCf=-z|IkoHKNm(m*F7!Lc`d=lJp0Ip-Eh6Di#?{f1xfF18x3D+N6KI##=@^uQ)@) z3GC5LnQGsnd^XIt`mq@IvzCe#*ob9)0R?Ljqf^dowBkVjglcHH9T`A*M069$n&m_(-r)z zO7OVRAJeGyVEd6rkW+B|ED30M^~U70I(m(j~ zF5?c$6}K}_Z2dz{?6UCF3o(oCAZEzVvM*3QNPfbhDKwZ3R&4V;xO#d2x$Ifh0{vSK z`(@lyDxuA#kF?oOq4aV_nHx=7BRmMpN!c(7uJS9lFjkw|_{F0QE^S|!=Vtn@dkD(` zOvUFc_Y#8QaSIA8`9L;raH86jme&lW^}$z*3oZVK4fhI9x}*?r(W1qGrg)=cc1r8^ zlP5ZF)@*9mA7$dF-#A8n*$cdSiz|`|Ov#xc)azXQa|7gD{StOI@i?`%ZI4Hm(xd_2 zc0)c;t^DKkXBmw>bJd(VqoPe>{l10wm`_Ngu`8Ob+^eNUzGu`}HkmN~bG&}I)O0_v_yqMavv-8c*SB{-$hY3Pw z6%{aFD%H;nzJk4hI2xTTh^CN&K*MnR{PVfl7)`8rA>y-NCGGeJLWtVETgOKJ^0?MM zuQ!RK5py>g#63u%AMOiSg>(3TYC@(vgzaPF%hC*x@-h@qFjTOH^y2gVXotuByDPZi2!W1QKM-10Xks;&P&NSPhADh ztKrSI7<)k)*aOk2Q%y}%?jKjYhhvZ!IRK^e~~qZXE4JTYr3$$OazG_cJ!Kv1Ou*qcfS^EpW5ZROUOa7 zap?~NgB6$q2o?S#j9|3WRn}y>`48YKhBRo0N}?sSmVMS*m6ndQzAIYiDg*`mWy5if ztX+=S`KAWNHQAND9~3i_6#$wY&qjBnd}o#@`zb6j4XMAV*>qw)b@r0vIFW?e|c zhUaQ=x%~5e74y;E5f{mpn+bUoe_RA{b^f)^giMoTCIy}kg@_D!% z^5FRgIdXm+>F8X^Z&^iw{*uOhUih*M{kWu6ZV>K4(&Wu1y^@4MjFn#<`3Hq=9^j+2 zAJ$$o&5Lz5ZKXNBya%{RycrQ`quNU()3c*OiO}~`;52=gPNInlddp4`H?S!M%#?Rh zH;olm)Ktc@0rFqhJhiTTD442JD2+N!Aj8{ziEtXO&Skfr=@cvYc1!*#Rw|_($yR(R zOmEbR;BLW>BQt6&yi)x(Kwajq19wOkKUvV$C~q-GgP-N1!PT^n)}5)SeFPSj9_uPs3XaDv#W@fp zzJ@of)w-~S7fetN%hH{mJ^g7ujq;`}bIC131O6WlHeQ4^=_aEPWKG}{TS2UA42@ELFjrJ=>BNu zbjrsvG_sOXcTdFz6g7w<1!3IGBykKxBXZJGmp0HG@$G+kEoW@F1*CPIbI1X_GCQ6G zR58iTeNWN%_>3NkS^ATS_r zVrmLJJPI#NWo~D5XfYr+GB^q^Ol59obZ9alG%+bY*fNFGg%(bY($7E&c>?7_AU%EuEw@jrT}JUc1AX47C0V&nU$$4zyxSv zWe>;nFTR4Y9T32zCM&KeAxZb&VP-({|FC52%^d*T{|Pp8bNrtK?m%Z3D+hZ3_5Yur z2H*@dHgmAI_4-e!f`hA-DG)#{Ze?NRYUK?y1DF}R8Usun9KD>aEG%6CtjsK|4F8ck%K!Ci1x0S7}F+kG6&Hf+ezfv39n*r2-wm@?Sdn;38fGVR1BR#-G)WH*==H&dtz0CnJb`9PR<5R&0CQto z7vO*V|4AldZ($1rFmV6Jr*3Zsbhfp!2P!$ZSp8cw0}C_re_?8tR;D)gKo=JP$A2K; zKbrq{O$mEb2Qw>s3xKNYKMgTg-?x)U-1Dr@{YEM$vywjSmAC7YBfWje`xq!p_14U}5Ir z^84TMrf$y8KzrAJ-%YvU4fu2B9xV2>mQ@&8^jODRHfK5=aR) zkKwK{>qw_FD_X4(6N6GY7*2uA*C+3S4*d(@+9Im56ds%Tj=4Zb7&1_BZkH}uts{!XXP%eSwg8keoG@s zxZbZw`v76$|+dR zpsyfgr|N?Yn8xcRPRPZK8;G?c#%z0eKc-?A0 z=8gPeuN_#h`40>(3^129)dNsN#7D8YVwjp9nVLxazF9n?zk1se~-7#9}%zVg!A?Ou*)W)*=A|I~QjACq>(VRlRiAkCJ zXf!J14uuRO0akFTT=MxS2W3@{k&fMdq2OXM=iKpWIGB?5SSEFgu22elh&A4iaDM2A z^&tk%ZIV%TK^r6pXnKcw-Rexc>X%6pfA}`~cn^8pxXS~dt=vcguGR{u(7qST-4(dr zFZCV+B)Waxia(`LcWLV&iOe#AOgBR6+&vkaq)~>1l90OohRdRi{UOA|zd6uKu?z3V zUGEOeuX!&Jp08PC^JUCQ zm@I7N=M>XqXRP#_1Rg=ro3g99CgzcIw+{Z!{NLB`06=G_3Oprmln&TMJ$K6*5xo&a3&g^NZTh( z1A5K-PdT{)0DcoAX00+2RjrMlphtfV*bps7P9eajl$Dg_fgk7Ss?1ZtU@td^ZB9C9nN4m2Ag%b?chim2O_o- zR$a9AvX8*1(Ctg2j>^`Y3_%xklw}o>N$!bv+Qg&!5;3V;)+aHpX1EKZcAx7Hyt}WN zQgwlODnF;k>2@qD5bvG7Kuh?VJqd`(${)Exz~tCQx-ANXSIO~IFQqe%8e zG{Dhb1@y zUvpTuqQFFR?%#Z@)l!YMf1qkMW)fbkbazPjad$`jO`a@AZH&PnpTQuP#z*+V4rKBT zVv1BzC9D^EEY`F%2GbldjooH71Vj;~uO|C{L|YNqo-?@vwqlkJJ$%yVaf3_@T*;5| zEGW|SKTVr&Cq(`FAQV$MV2>u?>h6ei3K(ZbeU+#ukY9BWMK^$zQD&Xv{&zvKgeFT5 z>oSDadbhzH(&!P-v=+CxteWUhh;~})Hj$*4U!@O)$!VE zu{mv`cQB93XID`}%{&`^rfvhB0dI@zu`{eYC-XxdW6=u@-_`%ul7IWys#0D|A zdSV$=bu)7fk*Dk*5Qqec{+MU*A*p^PVGp8X-WO{UUBTtD*=?WrW$&SpPIxqs4KLwh z?@H~x%J=ROo99gbNy4YdM)HXj<#&5Uentu-Bo}4;dD2GxtE{-KJ&md4FygG2E{D8G zEqYqLQB}R%mV{{mp?uj;Z>LxWwmV)I(O?kjg+BuicC*y}SlDInObrG46M+-DN2A2Q zX~?b7FF-qNE41MUsWhAorcKs5c|Kd~F6RlKT?usX==?4x(R$I9k>u2`1qC#shztN& zh5D6SC+^)R^W+m1E!2>34H&U0m93RFVLQb2fHa!07P*7lC!IPgGSvzM>Wdn)hJ@4W zY|aRF2qPWu9sqbfRE)kele*P>m9CyEM)UR)j_! zz1yf%B#l4#)^?bO_7i>hff9i*YSFuOhs#`70>&R#Xe8&(Ne#WqPJ&%rWmC8(jhX7~ zXOb|Vkx?(O<>3X@XZ^735m1t9{9U57Q4m|3185Sv^vjG}$R`Qo(bx&tAqMFpBEV$% z;}A59Gml=oR==9k!OwG^vK=_YKN$KR$|`O=WT&`o6PpXC1SbwHlA`>4Xup5icA(NU z&q!SqE#E^oK<3!%f6(^t=_rz6J@Dx2YcFbTp>1Gg5omSY0z}k))yO%JCV2 zz3-3D9-a<1jt4O}0 z(N~Npu6wsixIYcG_vbYkVl<){1P)aGuEL%Wisdt0C1jY9q!`QkM#+Ltp0j!--noJW zdA~3r4v8QjRCd5%5C++r5U@(b)51XOXoAwPRP=Mc>P(6Ub+UF|=c$xkS%%eY#6;JL zI;vQIk4E4uvoy`B8-lMI&_us*Yv|Z8n$2LT=u>Nyl8=FmrQ2V4qrm|p$RP=))nyq2 zcTti%uT5HqPO#;p|7frr;;fR~`bTz*5DfC@xwH<_ni#B`yXRxa5$ z6JI4Lt&Z;0BpoLp`>#HV-3E<1BlKyN63Du>2q#v#1?7Pj>v;Jepo}UdCSqKC0xc_k z%|4UY#JiZRUTcI`WeXFZWLlcNdN`U00=SfPX5qWxTQQ){JF*Ss5=gYR%Z75FR;sY1 zHPZx6gO&uVb!T%YDi}?D5vk+h))OyQLuKt^3Ao99 zPp;I2PN_|vZ>U*>u@l&eiOxc76z;;7d(XbzL!l0J$V(|3qhIi z?XNY>WPu_A-*)OT;&%9udVDLpoj>1W4xGMy*!#_45;qDCv$_J*>KQ?t&t`zalmd>h z_n#e0{5k$aeZi@ngiwl@l7v(YZt#=R7JvO%b{KH>p0@@aXqfF=Ym%CL*;nyS6p*wl zC%_>iD|2$l3GIvv%)UsnsrV>!jz%tABo7C|v3M{0ny;ytah7sFN4N|7Pp%_qg)nv7 z#!-R1SMyFeK2obUIyfmkZorn|m68>cwLleo6A5|e}T1|RciK?UDI@Z$t8Uy0N_cJ^aK=K4kO z_s`pPZGa0I-uRjH$*D|W&44QuQ!#k4Q*gxcBI>2iaA0ZWnn{b4mUxoyEmE`H7kBwp z6TES6bumW+I8}zEWPHj-KfoVbH;Gof0pLkB& zU<9HJFOQ@Ftw4c&2uAUW^Hek7d0Mu&64QJQR(IpzJZhUH@r@vRc%N&Z2pyvhJs1`- zz$5Sab>lt(CSU9a1IWRj8BE@+2nfnLJQ=@iCmlx%Kd!?=vJ2zkLGQ_RG7`G!VvrCM zdWf1vc~P8JODrpscpsO~2PSY)Ll|=WA2g!3AY1%B)3s0KsQ~Eb)M~T^NnbkwKlDVJ zeX0eB%%5+5G#e@)x&*hN;Yi zTdw1Q+|a}cNHalSHY%IF4A@8nQ!f*tHwe-2p4KO2Fl_;{UY8%(sY4EgL&6yhj*IJ; zcgII-h@rQGmcpMC=vX5Ia3(nQx(My_O0s7;mD=)+Ns6BA@{%x(B2~)qM2(6{;Y2mv z9CQiSe?CqtvAeC-)v9p9vEyz{UO1WXAq>X<*_4n)DIu(DA8VM@69($d3#D+5z5h;q zVEwEs4-RBSwGq16<#Corbpj{|R{m6cU> z=$X^gSsX^h5}9a}Ldy|?KWd(Un!9j>Wt&Wq`|aYfi`+(&KjH8|eDT&VIQ3fMvXH4e zbnWN`=kNyb_le&<=hzIK0{2fTK+s``J4H&Bw^|8RAMH<@J&DH#z`)gWNLb?x`zp5* zd)rkD3I#^|ZSdL%fIrX)3g9y|P)pxzO(DXuPz#11gTyz@jk&;EXX{!NoZNayb=Pd^1uUi-eFgpxOO26{?CAANs`E=K=jX=52i?zOXQM% zB*-!4uGS#h7a|yz8%5!lUDP!su|%kt((w~v3qpM_>GuZ;yAq!5{>Y=j@`G~xhjDzXsne| zK%=)?=E!hHo*`0{CJaMOrJTGod{ef=1g_`%y72$q8>jiZOU!>v>>o`w_x7|iOLGM! zT$N^u?MvdEz6v%7)>MZGYLhooVr0=^M4i>{wJ;bXnBRD$aaoEJdta#*Z-zFrcMqnI z5X?Y8_|2!uK6{51tc?#RIs~E(Y72Q~!C0djm7s{!jHqm6<#$jj*=5IvrBsB(v9Zgj z(Il0o$T+(aZg7Rcdqi6MDCBUPRB~=)jCSlvRzD^LhX{ou=>J^p>j$JQqp}0(`Y67f zkUG?abnWms!NLsB^gPS+u?+zoOLXV^&~1hrvF{lPtYP7_^fHI8k)ZT$JVQ#Rz} z7-4&b|545wL`M_HT1$vQ74=yQ?OSSk^r3|A(5)Y7Kttx~z!?r=?RUJl-pphD{6*nh z8zjJ6BApmf&ojMH(BsJer>2|LlUxyYAU}1>$b3f(q;*=xIHM0NARyyLm}#JbGiz*& z<$cyZ?29XM(GJ=Q(*SQiJD*djGJ&40*OWp?r-&q6-#CY&BAdfnV~2D$*5qqhXUhm;Q8*3QI1XV^+V7-X5fZi6_cm`qitRy8H87=5f z_(A_R4?$Y|yg{?WL4v``w3tF(yM$j1Meqe-WLHt$!{BB66 zU!BYeTa4&;$>B69P|6ub7K#RY7GDVXMTliRIR;}NNq)2fj}s8K57qgTz$~C1Mz=b3 zS4ipJ3=DERN8nAHF6d?YEObG-S=${0ll978H{N8b2c(wnEbKaIqRzgbi+A>6;f%0X z$1)9J$Pr_F|1L5Y&EzR!y%MwcyC1hN3t>NW4_jhZ>_Qzh;}k&PlT~nk1P8Oq`fyrA zz%0uzFDJ^do`hT8n zL|-TQ4_Ru;@cU+tIQQzZbNJUIc2)Vb?X7*fPRnz`? zwF4CzycUW9Fv0i4_f-hO0wr>o;y_nfMDGb2K2r87J@G zS2-zVWIP2&6lW>lHFeNZv)^UDNkE)GOZ;5PfcU;*phC5Pr()Y9f|{>Pag?LBi2Kmo z2&>}&S46VUlshrF@WCIKpMw*o_@ZI3Vg3iTa?)hC zXO$>yG6#O_E36emdr@ttv(%Kq8n@S(%^vc%~{ zoQWsj*rR;jQ421d6at6A=DV1A$M2LJ@ufsk|0{$Ddef%#oHed^1Y1;qPN8&esoURv z&2v9HAYKdb=R0`nL91@)jYdZ^1%}bBGnqlE7HrmbDJT0bzo@e}?cshLS#SSOOB{N- z-%i$bLxDY9>)>H;g#hjuL?SbeiP7mISF?x;xYwb3JZVo%Hjv0PFMtfUyN z%rP=Hy(e%hM3 z*4B|_Nt*5}?^0VAjNNUVdgJ$<*V?b=&hvUgP+YwwGqaBEm~%|XDRbTAl_xtLNQcoC z?M0e=8BE7ECgz-E4?J|kO;&8oYTv`+S@O7HAioC#)GD&G46t--Z+}^vZg7m@y{=&| z_90+}?@Dl?swbaP{_h7uZ1K@6@^P*k`D*2TCgkNJjBEH{7hj2*M*#}9ys~VLSVV3d z`ctE5@HqU&LDbA#ns>K*5z4-T+YJF!snUgtf-jxRX+rtduyUudA;vK3Oe1p#)Uk9e zc+fB{kzIh$$xS=k=iC*&eg2Eat}fk4+l7up=OM&?>C-pJ{FBKpiQ;1sC$e+eI30vL zQjV>$wGW)^YYG)>6ALY)JRl)+7z_uz};k!a9-+KUtq4%fP${9JP7c(wPbBUOHj2F+Jb9cnXO zF<=}R3m$0in@V!ecjRo=H9vOBAhgMN0?gKb41g%Pgzr>o@dgq?n=o3@t^PoWh;?>;xK7gra=A z;qVYX?}0WR*hzB1=r<}Wv5SYRvdrQQJ1@cc<1CVvGTfM)4GQUADa|p&GZddNqAuiPfYAMZLpBuCiAfFMv+3 z9p+B1d#{a|uA@C-2H9vOPw&qt4_K#pH?4oN{IgrQ)V`u zXjbyk@SE$f5Pxu6Rb&VnZIE}WBlJ6mJMb~!B6<@StgnkaX~PhzegsT@jn4?_y@lOH z*l1Y~E8=i5#{=xRG94!8Bt7pDcnV>@GT zNu=S_;mNo*c*B1*x(BB(3OL^*dAkX5&qH?oT0#b@Zr@kPnC7(zHZuuahhjf zqTSr@{cr^DM!D#BO5)5!Ebk2Dc34EX8V|YBsddFBJ0RJ4;KjSS&CVaZo-ef~>BC>m z&htFR|2Lnrr;O$rIR0DQ>zuphWG14|u`6o4CMk765MdBl(yQh7l93&KF6IJ$cn2-! z@gyJSh5|^l$+(^fPn;)cBV5NLkMsK?oB%%BJPaC0DvwGnUssT-L)}}JOep#3Mt_)|7=-P$bP7kn=Ix(_{3PxT5nvXWy#CUmd{P{D|dXD z=l;@DdZn++H;9x#7Wd7!|1I=(kjaH9{ON=fw z9~o6U(lwsUFI|@vP4eqen?+98 zdVx!9?&@miVSU_YA&^%rxKkvI`ogsW#)c=0QA)KELy%{_>gGD~m!2G`h5G7>djO*F z@3%ZLl6f|tX(_;bpfo75QN^O%OH++y$8d<*$6YQ|8reY#UZt9xxb17^sZcF0Du%sK z?bh$syPov}&$Y?!zjkQ9x&5McEC2dPOK8En+4R7rgOb$W*(OVvdY`}IINL=S`7UL2 z4Zm$(%IX-h6_S=Q_$b-K}~nonY11Zqw&7&D4$s%Gl2tnncIdwV*kaZ3Rf| zU#cTADq@231z@r;GMuW0f64_h5^=@xJkQV2cNLaRPqkf;a|^tU_mYy;I3f{IzG2!y z6EEb*T9Q4D-IGa}jiWrv2ag@%s(PzlNWXn4wsfXJ1H3-Q%d6TIM=MhnO3oWPL4PQ4 zVYOd^kp1ioT#BXUi8Sc;2#j5ryoNuwIabN0V`$NNOH_UM9V>@8Vcb`dhP7vK*9=kr*Q{~{QIT(xzzJ1Z0Gh*2CIEaQ0Yi~h)+9sc2uK8Yp=*l;`#2+y4^ra^d2dn_0v#A zueLUE$?3gs@4|wGxZmAY!9AJ_BzS*hvUKw{I7&t2Gqe&`TKGbyJ>&wLoa_<7MnWNW z_q^mfUnS#89 zpZ>D@1N%7E1{bTZIl4NIfaPg`Ox|>Y6r~;Jtsg<~Omk6waNSZ>VOpJzGk=mo__#OYUA=g7M#!<_?zzQpAn)N* z*a*)sd?Ld%B&BODz~lJi?7&YcJW+k;_*g1Lgx17x`)M$Gnh!VlNxcEiV+VP%LlsLN z(Q^;iYit|=6md+E_ML<^ok*J^JHIP9lDwL%)z@(zSX$A=>9nQ|P-xiwF}5jFe6Ytn zKhy_#nNL8YI|tD~pW7}s&KXFp(~VW10LiM4W&Wph^ll{4L$_Tr$YD4EMTtwea2^fS z=JSm|Vq)ArjH~B%rD}-i6g8cB+hQ0}Me*(@)rONTTq#HXoHsjgO!z;p7|#Ocy4N~z zps3QV_Cv>&ideHloF>L*LiZH&2hpoA9OCoasOT=RB$E?gVCifPVEJ6sxL7$TAZ59Q zdkf6t4Xh(XO245gln;NxmBsh>>o$=xf6>M}p)?cL(F+K_g!AB}J2aD$>U{AE{cP7| zAhu4pBJFy+K2!{o5B@wgB7>c;Z#M`CtFz6K!L17vGQB*3vU2{<4y%B``-%f6-8>2#BJs|y|t=q zj1{G|XfhIYWnM27Ff=fSOHhPS#F$v0R9D+AxH++32|RFIKhkN@U;~~tJK96o6qT>4 zRf{5!1vyTuJgOTPWCw=tHJSJ3mgz8cu^7Xwg6yaf8svuASN^o#jI)-zcTj0Yb-?$F zH^tPFCwVJ`5Z67P#gWD3HEEF%(=7`}Pn^h|9B{;-rGw_DpUCwyPhGeoyW1tD#ax;) zU^P;dDOO)V;L1Dy$~z>;e5Y1#H2E>zng30PFmblEFor%Vs6#JG9>*WLUX#);J%<3U zdd4D51(W7KdKaJA`n@bOjnY0F3hXz!a$pY`#6RBu4WQG#vzI?g+g*z9Ps;dHEsj|$Aw=$ULB>lQZ@^7xMBvi*JoTPifn zsl$5;1a)W<1bfqud~ENk7Ir)tsJQ(hzv+?s#7E9#-J`SnG6ruY)RBZaM-1#pb;5zRGnUATyW9m23fZ$cIm+wIrkLg&muo^&Ood|8RsK@~R|f-MYC z!P=RZTu?Y_F6mmBv--=sX-IY%>L9!Jp>3SDLY!^eKJej_7ZI4wBwj-_9Xi;fH@B>+$=Kcx|YOAQFYv`0qxZm`f%$@1WgZ=(Dgh{7TDrav!W5as4Q3<`K58<()kL~9ds!x9ACqbiUoou>SHUc|SCbR3x#uCT z-~rK&v0qhOi(FfDb4_KZ%5PcvItH|?VVfBlCoABJcuXVVaBdEs)-3$YP0Kbdx5`0# zs-8vhanZ=AVEfpc!{Bte7tn$A7f3EG&ZtK)M86X^VZ?^87Gm)iuAMyb!j3JHr+G>; z9`pP7UL}tly=hc`3%5N`Q80W zjcdBaQF%5Gw@D~AU%Zv=DUUg7->$uGoNeHuRc&i!*Fq4RHx*0{`kjTjK{LfgqCS@_Ome@ni1&CozJtzp;QuHNDzvl`YMB7;FqA`zj7KQ$%s%o+`ovX6%Ji~%K^ic zhaGi^RfkCwCGFbWaV&&IH-04yG)wUPslz(EvO8@3cueayKt)@?bhBQ)qghiaSLMmD z2*plUGw4Xt;!Lcqx^PhjS4V-ar={H?3bFBiJujKw%JggAZ%#n_3mg2GLs^BC%-_dc zb7nsg^fr!YyQmsE2ImM&%t>At(zT6~``x$ZX$a?69wIs+MSeqnsy*CkSC4VY=4}Es zckRnx$WI@*xNd4T0zcJqF>?@}up3$KfU?vZZ-XVvr4C(sZpU5e(pVgm83QcnD=Zh%lStAmg zgkg1}?M@%tXJi2CmtC`fQxhRf;p=rNmq`CLFm5DA_C0Zz)-tNKG}(q(C6!)dV?e5^ zcjR4W{V_=}$0#}kJ4_l;0cr9AZ=kJKb>>||nOroyWN)5sAGm$HDI6Z|O_g~!D1C4( z*V_E?E9RhBsIomD(3JhFb6o4BpNr&rj&S8)AIKDq0}$AlItU!K@ti7@r`WIO+}jK+ zKxgE}+dJmr2Y%{b8d)z6G(EtlH^^>Oli?JAr9?tI#d+ImNQo$gVz7Lo5LrrTgP2Hw ze-lSnk}-EYJtsn9^(RfAr$hbOj#B~2Z@D>3?ex5FjHuV9P(DNZScC-g#Khg#_$|b= z$(L%s$+*#0D_Ee0|0PVJseGnq+C)JblJT*Q&G5$NZ1O>5GHr8Fv7Iuuvb+{o04Bq2 z%TJEy!oc@vnc}*lgsutqLD6~*_E0MDaUlJ1LdvW4V$bP=tBF3YjK{k?BX)$0vmcgm zZEdODDW|EnT-A2_eZOCtyy5-JI5eVRVU48g)tjs#gZD$(q3M>ovhi)R%zG+{@B>#7 zOs4xCSDY$`n9{J-&+_L6G4X&LYdyf{{_?3w`x9gh#Rf69#)GWV1ikuH&9M)}{V=?y zro2v>X!wimr|B25!d9ZT`b1|=?YB8xLW$qLL+V}xk&jx!o(v6)e%Gxc#0IZdT6w8t zco%XTHp^<3!I(E~DP3l|&Z*5SCKbPRCRDx#BJ8ic98s|5R`gULn>d)#LB|!Awryo6 zefxxcP%!aE@R;n+V1#STxl8mdd~f|>fD+mwc;+pPGAjHK+0tXX zMs97bQC~yfMQ!|9AGN_f0y)eAD0OMofjT>ECaw30zq_jheV@WZW8p6i2(fu%+j1rG<8P3gB z)DZbp;i)F0`EFB5Lvqnzt!(hVEz9(bOiIzsFss7l3~-H{O)hO%&4;{8vOXv+Rq^lJ zl6PgK5jk;1b)t2>hhgCA!mQ@+#L=w*@TX;G=@F0ALS>_Q!L&2N@6OuVYc;KcKNU46 zf%cc(ct}*p;Q@#R2o`agfP7{|MM^ zi0Iln4mpTfJh&NGY%Lx|N-i2I8PMj>iz>WZ2j0TG(0&M|AGkYD1GV89rN(!=p}s#y zl5oaqJu)9uJT# z?o{y39tbXko0Z)ojA`ws*+2V^>rQ^oLooJwPUp)t5SwHe8PyT+%F)rtgOu{UnedE_ z&-mplkXK2QKb6UswS3JdnniFTmJ8G=ugE@^G+-l9whH4-DmTD97WCq~e#*)*l7+$d zFbMIV`lRc$KfzH=$ONM`|AeLCvV4%}1A&^`C7!(!A{t9XJC*DIJxhx4hEpBNB5oz}) zMrf8~RChQQ%<^YsCJ~FK&8&++0)-$#h2|r%1T7A${8by`o6KMARSfFyUHpX8>wp{& zUaalLGH48Vk8$OMMpl?TZ4Mjr7(Bfw74S=;lnZq-94CGw!e~9il8arIDjP=6qQl}) zL&AnQmsg8X;fE%O@Y$uQ*7(o~%`gyHiM&SSmUS3`sf(UkRPXRd*E*zVBRC z#{fr|_G{D-JU0KK57-~+-gukZN&8=en~of`bfvI4(csj(*EBmd=75D(WITAd>R--D zkWYbShk8)0VQU>+Y#mfqGl6BVd*XunOPXXy3sHBMWKSBF zlvvPbG8=QPNME+t8xC;HP&)gE5-{Po^88A`-LpKR+J;Jo~{E0tX`8cm62O)jnC>_3DmDb)0N>Qc>Kp><|xEXZ%9-ym)`|376b-kdA zdtP-tXw1hLzQk;jg}g+c4-irPWaQ%g1rN?n6@XMG?xHTF=&uDMrwo~NBYi} zYwQ?Hd|lRv8RDm==Dg;rkgi8(cvl&gn;Fo~(7b+TqS=B^vZ*2WAZXM&MM7yikA|H> zxi_t6NzMMNJ>QXBF%(e3Mg$h%7xsgkV~Vn9UXO77M4gr-S1K;ui5IBODq(TsQzb}~ zO3c`b-7G{MaGXfIzJMHJ@5$3M0&@_QESQz~aU8>$yZTpJpP9_EW@K4iuce)x zMNnx-R90TEW)=R^!;(QOGS^ck6K*y=m_-oa&g3LjGFWADPZQ4`gxDW zb%uBL{M}gl@COpLx&Vv3=v5iR#Fpen9|AJ=3T?T_M@};iK6{dWN{@$UvWpgRmIn>{|6t}t-+<+6u5fhMnHXA4%>s-~*T%uMe1 z?2NoA`ndM&LpfCa?^lb(#=hL`Uq!@NM_Rolv!E{ZW?u=y2 zqSGV{4Ed-c+A5B|?mCh>^BG8jVK56{ukTZHBQc8HA!H*{e+> zYV{yVhH4Yfhs-*~L9O_!2AB$>H#DAD?;6=NPnwr|21Deg?p7Scm&(n=-kW9R+B{=6 zE|zs1a2=eMVLV)wN}EYX=4O0FAAT>LodVI^(2!}siiKkB2M#Z+K)$KnErmifA{FsXeRAxMG0L7V@5RDJHOfXBNBc zsET+z)H%02sSkjJ>`;9A5ye70&xNKs-?FQZuInNus925{B`DBNXURGV%?vXA_>HB> zntGe#5c!2wsq;&G1n@s(Zx^U7>%bxUR1=qUvu1Gh8_Ntor0^u%#I*G&|)5~A`I z)l7J7P+0syHl~5{VP*pg_qwSh;olth0#NL-MGRIN;?+?|kmbh(Z!QkA6R{`Hf9$Y9=4Y+2A22KV zs}<7f!w)LydXYFj(%6;bSO<*^gFAvnenPA2p*_a$o}w%fYc;liHSG97vD^2}O|N~r z8*O|-EuB6(MfJ~xIM|L>I=8a~C_Q+B3f$JxeQgQ5Ak!`XRTVV~Qy9&YCz*LiC4jCUg6tg`X7E!SAda1h=Lf5vbl72S3a)p=+?x4e3*0%K>o^-lq^ky|-`EjEG7;pCOgoM*szE_{~UxFz6y~RfkEz_yE^?Om7O;mB?Y-UQd zPPbX?emaGEwh$1e9n!H}qLv!Sis@z=dpxMC^ZuY=`i(o(zuE$zS;QbU4u~O0w1;OS zq;Plz^361OVjfNY*GGKho;zFDN5`@GwsYXY&wjw%ZP^2_#1S zS?Iz9229Sy4p}TvAWTmhRz~BMGE_T9en13vUu3^P?sk-dCrum5uJi1m;Cv<3{b`mI zCqn!|8F{k~Pc`jckwi7i!<_)@JSV_{FaE3CCPe%-MdE^T25al17 zO^Omm3Z+D&vnCX=N?!EGadBlgF@!a%#<2!jI*3{1cL>2?NP%qO=7b+ceAcGRUUMp+ zC_N(S=SZC&ZTQ_k`~1ALpO#C#>0Bi3?XwV~hfh^&BLf)LILYcZ3z%R@PW?J=tI$xa z>PNYLU9_wEDWiB&A{xP8K&XjG1hNtPWIjf2dn1Y%5!w@hdrrQ6l~Cu)i%8AcOJK~5 zTxewuWu;gGqvu^l?)9$d8-HG^keIEe1CT$FL&zYt8LZ8fs~C#aa1)s@y}ba)^qKOa z@$T|eoX3OtdgLi`4rB(xZsLAE9UUZFH+Zje#{yV}p+UP7BG(v72Cof!LC@wZa}(my zdRv8)<@4$PeQZ{eKv_WWfs8LN?X01QZs*u5s|1C`G>ZZ818vbq&2Aau*&W_p=gVIs z)4llqa8q6tD!<*;E=&Z`pKA4)+tLiz**Omvo*?ocGZB}3hkGZasb>He7sD=~;zN=& zwAI5M@>o$yVHYO8J)*Ryd4Jt*JE%!AwZ|hz(%=D_nia4v5GRxe3?NMkkz!lT@4`vL z~?fQfRG8+bbE`_7$evir1co+;M<8G z%Kk?0NUb{tkFOKA^U;&%?+z7(1ZIXa&i-#gUu%~^$z%pJJ%~>TT$F)JlYfUf?`vP^WktrgEc{)?UkI^=OI4%=HUlXNwHa z?A)1mWb_V2CE?fwaUrct=8<2iafNGk$4S-ib}2vcy3;!%(0b}5U7gIKsm)J;#Ww{J z7jJ&Ve`>-8vDC`jqaqVIV^>;647y{$t6Kvsrt?dcdbUl3*O+;pIRYiY&qc_>^e9#w z^M+33zPAmb8(a&)JbA1$3AGPDRK(P?2mn*BDK2yv+90k};R}U&&~XSqpZ?5mYlL__ zE9TbJ+{~Xi9V!eAp{sqEY@)$c-A-2Dk)Cz+^rd3q@IB8B6>wUJEc#o9e)F&Epbj@> zIUX*$5~R~?XKhTqI9mW66I1NU`?t|KFKpt+B&eM;H)NI_9bLt@O~T~YrE~1t(;RW@ z>c@N**E}uzZ{ACJzwHPESz-$_6tZ4lifq&|=`2!;2OVgK0HOoVX<%nokc-2>FAR#Q zSg6o<$!*GjGKd2{4vcjQ;7ry*B}z#pGqwUxmbos%9%YOm^sbuW1!;|$fFBKGb`Oz#;N)SvpFlkONI2r-J(b5AnBm*X2h zw-UP<00I$B)2etv9QNI+BsVwQWPaqBKq=M?(XKI)rx;D=KOyW%PO8TsXI}*ypc!J? zCgiGR$hmbd0^JXa-!1UYYO?C2uGGo>VpCRqtsLhd z2QMdze4`*Y4^`dTQlUCiF`?E&HagZHf*v|Fv4Di4pa4vJX>%FG3U3Bl>F z4p3sK2Y%vV5Kq2G1Lr_cV+5k$#Ugts{!XU2zbU3bPGDo9`v30ljzYDFOciRR7?yii zqS1nFj=dWJF3-|ELjYH*9d0=~QUkP~{>jv51;Hg07ZG*q5NAuLYpzjuD+8SiJ9gOs zLxdmZn~drolE%307Q7GmacY8Ie7OG_-A5D99ND_JPvjt-$>Fu-q*1}(M{W#dr7-8C zF=VuGv#nE#&|-6Aule6k9CXVwF6e>gz|UMysfe+HHg7ut1jYhEK#b9YL-aB|X=EhK z`%Du2rv06KOpG1jwQ2LF@mbu;mYZp>7&{dO@ML$md_%4mRqmy#6Sw_b#)*Juj_(mS zzj|F7(a9*o%k5M?x%8^miG61*Lcg&Ybs#07JtMo&fD1uzgDTj=Z3T7PsbEF<0iX*l zOBqaXj=#*NEx|5{INugF_%7RCYZyg`xcg)NP7qTTdzk4LMzH2ln8^NikC^=JLh@JO zx@6#G`Lmhg!>akn+^FE4tI70)k~1PFolB6t&AnX>S1`cjJ=Y(eU}JBga`S35E|@Z% zgJ<(Qo_@yTbV@Z(D}M|Unq^#uhhwi<{hP=Ss<+d;?=nxGu5xQh-M_xlp;xjXHvd4_^I`|5+?s0K=^bMs6rM>Xs zb7K8KKVNJM^|DAl?9SFTLH7CG79^ZR3ah5Ber5tMjW8ulc%i4c(O(#`qDKn;7{XU( z30Xr>IFl$XpH~tIUFQ4Apps=e6yV~&K~27+@4V0R?%5zQnwqqxwvvz6PNc5E7?6cE z*&hT>QWF&p(b3@B0+}SxFEx#-xW$$S5w!iT?JN-Ni3rU`WtORvQG3m;qod`!PADr5 zOhn43pAR4_VSm&i!X-T!s=hf}y1T8s*oFw$yUC>PC$X&VPg8p%KQRtO-r3I^{Y@rT zM7bHZD~48PZH>|i1`9(sykPO)6=_Du+Ogs|rGbCzP&V3m#pJG`g&RFLb5xT#W&bd`UBQ<} zx#XN5qs47iXfc7W|QtC7}2ignm(al`QLq=F<>MT_Pj;4&K*JGrG;}lx?b(61IHk7&f!2_Z>v%o3VK-jpj3i>S@*LymuZtZ0BpUVbVQmkeU-ZwX-0-exy4UF;BmhF&k26bt?4#=^nQro;Be>@*mAvfJl+ zMOnG4K*Bmwvfe16`8wIafLTcivcgN~bb4V7-hjL9TRb(VMbK(1Wa%KZbo}xKGr=;m zbjyI%0hGr=?P&jDU8Z0YbZK#WSSV7TVDBd-jrjTpDIr{*Cls=p%C8V6^(>2jTvU1L z2@OOHm7b!N-2Txt#={KmY44g9!=Li9J4BUeQuB^Nj$Yi?CeGhp_Z<>>*ioF>f{1k< zHJ&~P*)n}fgyS>#T89+%RV`Il?L8arOV5(>BDeZvD=Oc!nDZ!fsAtp|EmEuIa#yx8 zqkEA1O3S4gi)yCJ@WGpga}RkH9%W+rJ?4^UG?Mdd0RS}lAemvQaU6M#pW>A|^+><2 z4p35=*xy8e^{;(`3!*3yrt$FlF^a%67(^`r>GH_U#fGr_u8hlWR#&@FQ6KL_W{QC}WSQ`~V&ap6KDs+%?xd!i0ZcjvlH$Scagz3L(KW z>^RFTyXbJwI)ak@-_poolj6~eU<{S1+fo?CP!3^(KhN+Ty7G?m<|pHh9_l~v#)i@q ztELB6ue6^>5_9F%OgT`NPFoGk_+PfNIk@dHy6WEv+y0{i9AeO;ZJ4k%D+BUC1T#A} zwZz8}H_b#p+Us}~8eE%hno&gBVqDsM#3s%|KQfRbA>M!O#Kiup4-bqiH_xZef>)|I z(m2Dn@_rsgr6McN$E{58+r0^@>?%vq{g&AIijqsIS(*j5K-T^~o_+6Q$u$^ai&CMjG|=n>eDip=28DRb=$3+W;s) z*S}%Lu*~p(0%dIggWhG2Hg{E|A@Mj~7&I*B8D2sOTKf-|nI4^l3}0f+Z?0LKf@~k# zqDmG4@(FzmsJD(z0A}8a-`QQAPX!H(rO^gO>f^F^H&OLGS8@mD;&Xf>Yfi64jj-l* ztz4R219}e$`T|kjP&BYmh215J*^cFh5J7~xCMZuL_o?OB4BSKbw?Um2lXByZz-;0}5T-qc+8u1z5V z!W6@tt4Ba8>)$r9lIiDsPWVL{`EvrEr;Qq$daX1F{1>1y+cr%<2^c}#|E)x|v`LOZ zoZIe-3{^BlwtRk<7izjfue=-tVGx#~Q8*P8mx^46MO$V+oQx4`SX2ch_vQ@6|o))}nnta9e~KJj#Odlwh)^x5|t7V8DTQ?PRq z7$o#vHyq#+_F~8y&3hsam=IL2Z@>Ly{#j9Hf1kP)Hdl$}xL@Myk zub{v6gPX$W|4Jv%|KbY_FCls`!EQnYHCgA839lFJ7Ov6+g6yQvK%V*r;FekshM5Oi z?0qKqJ4|?Fe6}Smh7nx+CD>Z^>S2&Rm32e(ZXN?YCmlYb=6eiqyY@82p{;tMbg=>w z!q1Ya!759QyN7)inZ_zUFfd{MUXlpcVI`}&_GEMvGvCNtfH`u@lnIBhy7 zvs&%r77>(Z2l$V`T)DVk>0;31@ck16V}u{uP0%E=rw1YtsoPELfv}-*i66WxD06ag z6LFZyvmic_|By z^3Rq3?2~O4WczogTiKmbH1k#Vb-;m za&#B>nT=aVs~xT7S{hN13XU8MApBZIn|KA)M@q> zkv_7MMYrA5z@0#{7cyc*ob!gsXm!~17g>rCj(E`kd4xwWOR#WteO^0_h%Q;wzA5%) zmGupj6f(+@T@l}Z5m%@?M8+)07V%g{&NW!X;@84FxNG}ML3-+i{2(n1D1RG&gdFs_ zY(2oZ2|9EeI@0iHIeTV+nHRXP>uHS3;o#nB9HJ(69p--g#_hB)?gb>jANeV8FEO@a zhb*MN%0nrcpcQmGY(jHz4>L$$W%ae1C-W|EBX`YebxMj$qGrPem6*_wXGGXuZY{5> z*{N(zJpKL5U=-HgBYq2r1H?bBYdAY9V}`|Hdg2@*d9N&$hy4vt)fDMre>$?8v}oPY zG3Br2Rvy{)GdmiJL=7#IC*hGuGmm#n@KeEV8ft_J)*kK_EY5g*(38*OVcZ&zfG&?AashJ|M=jT_-fdvBL%2 z$yRmy6K8Z;lH+xq@QOGt-VE=(3f1gc{+Kf~=PB8QG(wC?{i&DM=Iqo8(+-;#+Ue#i5fek0jjcgTozSj+C6?Rz9{@FXU45+l|sZkj|#=#jXvD{rJG8; zr)_W-@QZ_}w0+mO0@2WoesmM2KiZpOdwU2q8I(lC#I4T{Wl>0P9zQ#Ai@c+Uw8LDp zXrtbAVAqkk^51)ugc;fz+F@df-(s%8SJIR`r?It}_kN zh7pb~e2nJ&R{G8*#haZH8mdg^PG`g7Ch-(1@6}k2JfiofkWN$!tkBQfY`oM(u&8%& z%N1eTOop2t216?{#7Jg>APN-7cyfQhIVc`$)7aD zAe!nJ&sT4Pru@@%@il%$m_-Zqeb7k(i~!j{tL!|@mMrYzF1NJ_-^>mXYV#6TM)X>U z!05wC9b<^IoN>y0+-#7axTXsqr5uR4uQzZ;YGr+W+LY}bVhnpp7=R9vELPh6wvV;n zT^G9x>{QD7$S$Fc%{f@vMU|1Om;c$Vfls_e&x@J;FyKENevVoQEc}Ftz_j&yrgqXS zb+GP?)NFn=g)FBKU@ou-TKE&IRMSFkRxd$?R%Ud|**?~ZjPEc(hFRrYsDMb8Z9PNbiT80wB6d846^Ko|C=t56`+=x)S3F)|)2wKV5F zGKd9nz>d}pK+@C${FQ_z#&DKIQbP(W{kzHb&E)`2$%tJQ?L2`aXOG{<8t=Ze6#suD z3G9_p8ZCvuL@xY9+G4;~^TbT~9H2i>h``oq(+?uq_xk#+k$O^?nvdDM!5>AD$M|T7 z^5r`a+;=W6XErW9;VQg|<~+7BdJcr9&xM@2Ht`k*G}6}D66d1*z(Uo6#hf6X=;dw^TBdIx3Qitct#hI5y;ALGcX3GuUh0sld zKhblOu^?B8{D14U2m3&JetvR=MfEjjm`J=huL_! zNcmvb!D+WHws($QmHTx{=1KMB63y1M7bWl&b2FhBa`rGcgP>6Eu;Ku=dWL37Xb{sl zg}P;y*7ld?8DxUY{ehBXI$M?z>v{4455M4)f1}Hjo7lO~a^zU`A*S1?;6zPOn2uRw zut&p`18dUmO)%Gx zpENt4+adM1YohixeJ+1Y$zf&x376SA=E@iz45*1xAlkxXui6+Yg3R`Th#e`QbYJ;M zkAYq9RoQQwl96;w|3W{*SG;wfL_w^-t#}n;Qfu0ct)HVU243zK&&2&Ubkj(OvDNzI z2D!$A@U4W7oT91|&v@nQ*{;nzSS63@cQL14UrddaU+`rR~4Ia%1oU zrtv$t=oZWLLcYvvlVX=TSwD?XR&$GXwa*hbGg8tqbBQHRubZ(fY`Jrf_h)ovv`fEXR+y-cyY4-?@FRLhsC z>5KxdJ>P^Nfz^hmJ^fINH?i`WhC6SrF(?buqz5r`w`yANgHZ16Crmtevt1z#>_KUW zM&RgRAI+0*t9}Lmw1vK_h3R*r`6yl7+b^#9=DE3*P_TuIjRefXN+0-MCmsR-)FU~X z)eg+QI-W5e!O~CO*7sb7RG!Bs;oK?PAU>0($YBAD98i?SBv7PsPMKdvHfD||XFe8- z^H;Qa_{xCktY9iB7Ws%2bSWkiJpPCe@QmpMw55kXj_2_t5}hi?4aJrQw>t>f!j#@` z=w`XfoH8)pVOPtvdmT;Mu?ocLKIHmH`0J?{Q*Fz*8y*beJ_TL8wXD^9*go1OH@4qh z;a;>pB-wfptHvRl^bxDCNgj6&$Nlm0bv_0wWz_2QWMH(6V2Vx`;`-^)6y2$aapviQ zzaCy?R|G3}J*uT;btTN+LY}Gm(MVWY(78DbROo^WDfCDEi=i{gm}uN8#Xmr#Aaq~P z1yK@hAR#?5C@<|}6N9su&<(1eP`UjXob#*mJBAK7I`3uSrzfw@ueDP_!{?X8oLZp7 z$oi%ETJ1w+iuWqDSW`gmR!59q+mvoe1FNEv=p{ z5H87sYmupOIKz$BH|6p$>cc^6f3V<+3m~6puCcA*3(K2B@i13Pn((bhA0kG~M7rn6 z&q%`wQoUdg3T{rc#Z>5y5#ie^sEQ^!2Fpq;BurVZc@z6oS97ON;&+w`obE+CkNX2# z1mo|?kSRuVFyWq~r4k-zDK0H#6{(%S30G5pAgmbi$M|NG;^W~BWucV&G>?pfZzId& zv;{A2I&|XhPIo{>0S*K=9|vIsLP)oam$^rhi1;d7!{ZFr7;HKx92S2;>6Q5sRj4yD&=2jC&w*(jH8X2V`c%D$wvcc8gn#@&InS9 z&@ITalfp~%p+QB&?(W4q3b=LsmlO`NuE2@B%k#<7Cj;QL#Xqtqge8B3=vg7|w5J%l zuQy!g%vX7cA*e?rqYl+O7TG#v-XC_;4rr8*XcZP-e48?DK6|YZgewYfmoW;v^3Ra` z5)Z(Sk`x^9>O|}n3s|1g3;6;DV zcXUxZL+%fr^>_wm`0UoOBy}11LpM9e;u@msmrIFeB^c1$cjiT*68|kw+$Vtj1SeZ@ z8a!?dIs^uL2j`9;980IXXuldCbU=`K?B75()}f_sEI> zjrHrl+~ccMRQh@a390!~I61=MicHsjYb>uFj{D8Cs*x2z4G#6$%%+2e;3Ky8tn>mKfFtm3*(;AcBnyQtD>wS zTL>4MNf0wZD~7pEfFOCyuwXH3Bcz_YcqD7-N>yzT{+~}A@2FI0;?rIz8m_yk!>WYM zQP++ak5g>Csf;^Aln6$thh@KNLmkl^#T>_4M=f{3>xmJ&a^j|?>?}uoit97ZyJU9yv)0M2V=is!zw_BEICuWm6 z3ctV*h{9ASrtF0uq7y**T8{bLVBr2toK545kUnbAsTkBAhEbL0c=d#=p};=;!!Vgc zuo4*wP~T?XHW+YBTv3;X+x2)oRp6}U4Ii&<{F&3DDr&8MzF1|%*a#Ld)2(Dtp*YrW zH$JbCunrtmiMh%X?gx%gLGeMi^}yPK?VbvIRr#CTT?3p!5l&g;RHD%Lw_r*xnb4GA zm3FIM2(M)b>!{@lZCo*Ch{f8d&WOEhkrfzvJdFxNoZCYD;Vsr^K9~8;MX^C<8JHC| z^84*+QYXoJk-h_ON7_6GrkCsc)N3Lv5@C6;5$;=ulRkX)M_NEmMc_t-xRRiPxa}kYDzToqPR|I2 z!hFuiUub~G&m{06gw7`zx+Q@vksrhanNZVv$1k-2Y3FS@IBB-0C=U>NtJ&2I1qd5) z_!;+SPBv51P;8t;6jV|x*Af;LcT9M=OqL^l=1I!#2bsS|0B!-;(pqy0U+d;R6ZAo@ zJV3_B?L2<{d>Dv0oBEKLP^cX6v4O#k6HLKImuM8K#+$k7`8Ag%GMUdQLDv`U zk7av|BgbU_vTcN1x?X$_K5>7m7VAz0U!PD&A`{^oL|`cdT@?I1_#E7N{?Wy91Fil# zMFd|SCT~VN`JFhRuHe8T5pgQt6x%9-ExSrgT`-jvc!OrEO#b|Jj|M>RAR_vpOYv5Y z-qYa*fZ}(?&Ca*GFx9j|I6DEsGTh(M_?M@1O}N}yk)y<(F$cZzmj;pT#{ zZo&~}o4#MYN7j{|29%Yh`wslocCv)9V^Q9x&q-^l5Cbuh+P2Wlyy+IBm#+6SG+SC> zfGvBIxEKgtGLVg6XI8Zs^)Fzu?vX-6KIoBcvmfnn$xs-JNZu5)W%*r>n0sw~^sU;A z{^LQZ)d6f^FJLf(lopo^t9trmGMG-G4CCU(KJfx6wb(qeqKE$(QK)V$gX?LyC4d4P z1?8EF`_xRhs9d5`646viVEWtS>$m|+DX*U>ai0DNb`b?eNjzA7t z$I2brm=|)FA1=oqcOqmFw#@iASb`y8C5kjqo(3pKI*chRM#D{aD(YL?dO!l-hyK+# zl;MjFDWRADv0QyHEAd6G;iyKNUj zs&C{<+r~BLHUi+?H`;-JlvFGC@OyC*d8LT{!H}n0l**XV@`D^43Y{?wyFgRvA@(D> zw*7lDok}d1Bv-5sU+yQq;&2``2{#P?X^)-L+!Xxogk4P<)D~5C*jqOM%F6U4?oM*j z8y49#_riovvH<@~yqo0pjY=khtYI3o>L!P60@d)UmA9 zi0f5p6HghBa=8Jt?iWLEadQZwzYTY3l57`NK1YR7gDn!!lYvqZ7iM@oq~Q(ad`%er z+p@}?K$G)E;w8z&z3Ht8i4N49GH&Y&TsTR_H3c#xcY578-vMk9FV^xtjNNQRI?9LP@ zl1-gr^Yid5oYa=crKoL7Qu+CXJ{fs)?2K@9)O2ETpb`}1FgQ9sTEO#5nN6!&qi9hfeip&QNbN<6@L zbyH;$21+z^urGx&lJApGRbGT1>v;O4#lEdjT}_E`@4}8;3+SL+{;oLx)fS zMwm(ULG{f5c7rOK8HzXxTcu%`(JKuZk<|MB%^+w^Y6>plPdW8!EtQJ! ze@aDoq8Y16WZpPCv znYK2Hpof`IrJlw|7L`f(RFR1k9Xz^AwYoB36(vc7U>*O}^q2E(HGWcYjvzAkuYuf2 zE0Qj0N+Kaigq+W<{>LQ6Vm!7WzazWRay4Fa>Z>y+EASDZ2pN7XBhz##&Mh5)9#a*X zmk(-3-8*@kT|!VNvr9C#a+!!&toxgo1-U&D(CU;B#0t)bAKgT)12B-WIwU7CA_(X( zH}71>AjOrep$8AOqann|#`Bx?(|j@~Zp)W0V?5C$Gy<2>Rw?*)0rK_gIu~=K{6H&; z`@AUckSs_lwLIS1&jdybE;!cdeLMb&Fq3+8%}wg0b+}8XX-NN;BzqF440H%k!5t`i z4Z~&(_SWzs9G^f`FWvc}|nfgUKyO zwwi|=gclH#(NRgi`0p6|!$$}ijp{1xoxX>>q&g%#RT+Fthn=zY%gPx@FtU)ioTpM@ z*Lee9W~>1aU_yJaNBxSu#f=y9x^$Oj=josh4-^Q~x1FrJsb+IPjOD?)htw6{n4Lez z1J&~-1sD#WJQ<03=Px8=R)uTR79ktu4i{SlCT2?hjb%daU8t`0)%s5%)JJ2v`%fzi zz`}x$lLYYbw8p&lbUAAzmiq4g2S7~xV-@N*#6N)sRREgPZM`yfKa_jpXL9NaT6Q*p zKkVj>fwic}qn1+2#~RY5DGn4Mp}Nyk3#6s;l#afckFwOLzF~|Vp{OOBPWmLQEVi{Q zOA%Ju2nKpp?DOG=*_^;w+?4$`%RDdZPrIocR~ROqBE8dZ@i%KfEU3A7qQidC>d9HD z=pn0m(93TcuZV=+#N$U!-^Ix(_)WmF88JgiBu4|-_YXyY_@cH$uD#*8T1Y0MbnF9z zJB;0Eo(>mo^~f-WI#IGL{Jck6Z_7~2Um1BjGr)NcE%Dg`+rHD2rUTAVk*ZSPydszM ztUFjd$QhtgOV<5cFj*dSDB2XI>K!#LBJ4x@6fEv*L)u={{4d>ol0;$L}CUo-Uf4Q~|?z`*}f=}ww;Hai; z?Ep7ZUvph#e0L-?${l8WZAP23LC133)f)Caw+;SLtE$irbyq_oaKSBQ14`QB-ZFt3 z>?g`dj><+MDukI2^K*ezKz13IwJLRg1f>f+mtP_Rt&?aJx4<*a$6a%H{bU??akv4zlw`u_|KH%0RN8 z=kL*JKJ!;z58TBV-8A%xgvkwyvl;Q(qLCA^`)6d(`NnUVS!XibAW&=@Cn*5gIH`_5 z4qcLI?r`$Tlu4Og@M4H09Cfb0LxqZ`^h;t>+?#V);i3_tT}ag(c4e!+yTa-s=MlKj zm8|HP+E%}BuY+hdD&KJ)LnwhbQ7UVQhs!;nE-6~wSQ{>ZuRIjUsxj>GL{z5(+9a9R z3?~L&?8zoe?%e?(GnDx~Dpe>e?-xkXzTkni&$7a>uK#KIsy0O|-49mJ?frXmH5m#mkt?s~-Vvzqs>lELW@a zwXkg_1MhWQg`O)e(C=0NSv{#Ma{0M}j_w8_imB973ItEX?NF6rJ_>F+*IA~nN<^BD z75Z9stlkelwxd;QNIh#JFRjBXZS3s)(I^^`FRoTyVB~uZbtTnz%-m-?li7n%ncM&K z+_Et=ADx3OZvd}w5N_ucv4RIZ5S1zrEx1kl0c#6pJQR?SU;S#vduv~&YNx>Xm6uIc z2^)rr5m?aYA%1Kt@f`1y0#cGGTdb5i4RqJa?6Gjhh@k$e^7LGPgNz!pE_f(+eCfow(fPI}yQ4n%!gJ;>1fG4Z zGPR5jU;0__c(mdnU3;mY0ie;9b%+}rlW}ObW`L}#wo@OQWPt#KuBay?4l*0p3*d!| z*mYP+O^RR{gBMEIt4|RxgEAm6s~|Iw4boFM<%Qfz`b?%7oY4YI+o3anH0DI-+4~!e zsiKoYSkGI$4pc3uLAcfSC^J74iqVs+VTWQPe5jOmME7f(0C1(fQ7O%HqoVHqE?YHH zWQMnA5PBFvVQi5&Vk5NZdkVQ*RUIXU(o8>=HVf?;tF}a1lm;c1fz;ZhgRj^mA^mrp z*iVTRg}F#)@j<$tH#en=Krc@8k_~sh)D_Pj!ou?7M{N$LX4qc+-007}IYXaU2%w_k zTfP_09baYsG7=aAon3@OJWm9l+7$&^)ok`9F+8*-9>^UTUTIIBXG#nqmRU96!&lKR zn{-;qTHNMLW6wU_^)vyXu~$+d%O7qrx0Bdn0r8BC-R6Bxb`yW-}KPWWbh0%#CNkLJ6} z_(pHH!sg#qj!z>5iSpx+eKO86S2M%P9Z6BbZAW>I%@EpRtF6HdvegYFJ*>E_o^`4dQOrrDqE0Q5POo*-F zcUeLAQW}_;UyaPMCkC?sj<&Cf3vg}%XuIB~0Fd^{z>(XfKaBU+2^OxQ829}zECfi_ zszIU31O(wn46IHfapBUz)P(^;UD$E|E8`C87fH|;rtHIC6_e(Z#z5!|I~}YF5vm27 zCi^luD#B9a!OG;*huXX`!{Kyp_!uG(97??-^TA(5Fru5@-|8 zt1zj>xuTTlM3thr93+=|_xnu33h5zU&IUb#M2w6lrhpg3p#@P*8&TqHph*KQ;XD*= zPh|<<3KRbi?ejpXM{#P4qOc zdQJWzq~U|=s%tfv>+3f2^{LSPH3ln@$o10YSW-TK<# zbji=?p^LcSUz!S>FXGM!bu)xfWeeE)#%j+1e4j5e%p}Ty4{{#kdNmg^JN#7?oC1{3 zFKhau%yPHQv<~6)Ou>$(F&WvA@AVxxv&FP_c;y*roM)_Ba@#=_Bz3Jj>wrT1Q3^tE z!(D)w#=%eM68$oMyJ{RiSaiseuXPFKK1gKAQw+t0-f9?j**w_bmgnqBX9DL%B%859 zx1ahoS|b-lkIS;XKF(WMb$CI^OXf^}`gIr{ssqy`-F|tw@bMpiJdy!PG2ovk$h(F<% zY_5#-f<4y^t3H1g3f_-KlMDGHnqNP3)<%+{hB-^tWuUuAkeXEFjV5{!t2G$bkKx7Y zGudp7YrHSOCx;&MwcYv}M|zaHbiH|~bZIY27^vw+rrR*=R8TW6&RHmnTlJ-v3UMgMb(>f6ZgvaiwhVeMrk(7 zz)edP{DTYQ72k8Fc27jELyb@hzF^TW?@d%$9<-CvIvf)Vf@LC1VJPJ3ePJXac(HIN zG%x8Kc{2As0&(Ze>~_YmugXIj$sc!DijCPDcd~WYKVk(8tjd3-yIY+`JOyLYXsAx{ zvdu!X*}ai$ZJdy@AEFg-RfL7tC~}qh)%6IUV~g+%T<2jCfJcofva@Peg0MGQ4hPQm zz<{=pzQH8#D!@9Hcr2IPd{Fj-AP4~!CficyDQd`BP_dhoNy9b<3)|Z9SnEjV5%tv9 zmjN~ioJwSq^6z#5o(RzFXKOFe))Ae*p#O4SEQQb3ruc}*=Bocq$P?@dyqc6PPZaPr zoM>M1x9r(8dZ$~EgzK)+KEqK6C76@~QipXIrt&XKb%q<@l;Vq-n@T;1ncXv2CEkRD zN;D!@cdWwVysi?DMiz@jw-OTxfb{YWYhVt`!Hqe z4@0bg`A4JuJ}GFrnL|sbkVU~E7=h$FQp+SNi6%u*G3i%wA&P!BLo&k0u4Zr2;rD4r zajWJ3LUxWg>VE0xH=88ZI>Dz9T0iz6vS3h{;dP z1OQLQ4d{$r>#JUKSc`>1e1SnxZgghL5Ve~F#B^BeuMpKvsW)QC4}qo)DDI?+S;HHp zwsp*H`BD;i;&2U|oz$#6>gvR4LHTojHqKeACd6~+3P?9N^bpFHw-ka;z?i&BzO*Me zv2(}Yn3itP!_Nm{D&y(+37DIyok{a^82e-#dDlKfG8^OkEI{^e;xbXE@gXFbL>DMT z56tNi5Q|txU?)uz17h*Y$8XOI056n6*nF?P+WLCD!3w z;wct5QHI#1jz{o-JKzA-wX9N)M-MV58a!G}rGTPF9{i5DgUYH(wSyTEV1@%&E60^Ei4^P%Rw zG&F9C8?72DN}V19$>azj@NG_%70+v3FBGcRpEVKuf^33Em_g6KatyX1W=mi^qjbj# zsqh3PwZQy2BDUWt{jeKlL~MD`*>hkfjfXj3*8|6TCn58^Y{g8ggoe$Mxo*OY9h^(d!rK!GE%u8xDA<5@)=ED`I2BR zdh8}nuFDD6>t_N)K2i|Bahtu??aqesh%Ogt7(~ZK2J+TLecr1xj^OTYY|ruVQ^4Kw zEwNtd0w!HsAP^sQ5?C*P4mI}?Yuq4@Dkp*l`U%yO67bCT?iXFu#=D~q;9wbsSbtUb ztB4)$!lT+Zu};E+4-tcPR}}NR!0*P}wu_y}ofyraxc(lqoV(u^q796-fAGXgAc%8j z{^;Xe3g%P8HbWx=?6fNnUXk$or~!?wPhvAc(jJ@KF8bUg)CIrNK%qAPL%~fvekG7G zGRY})B;fpcy2X|`gF8j$hdV7759b?jXC{g=>OsMEpa(ggx$P>KNBGAk`+O z9^^X}xC`)aK=HS&dwhP3H75+ZBh7j|O;mqjx!8yqFA(Q8=C1~pkB?IrN(YOSgs{mN zNg2OtJf_~3VPC66?P~l0K;IgC!A|dmP3k9d%~~Awp0E@c;|Hh7V z7Szp@s)3j;CgQVIBJA>{a!3l}n4i0~!uKk|c!^tr#XT5x*5_B`No{1I3eAiS758~; z`sDhe6NioA8)2A-0m7)eP{cX1$jWkcy(_ z=!1gr1n!77WTvf`f;$m=Y#(3}Gl#(x=Ywqj8I)smfUNF92_Q~^y%L@;$MY_1WrYm; zj~uRUxKf5$_+M+I>XV*%=x<62a01L-%hXU;WhmJPk%&9vIGMn=IzWifci9B($fO5a zzS`W-GE>mLY-2KR!t_xUfHw^pL8G?M9kHdE=?hMzfzdNIaL7fGWh7Q=Hx3C+hH9=b zkNr=EGwkW$_u^=>N)oW*WLbJ;{|wm@SiEms=0W5-dh4!PDq%h{Qorsn?D|mO#cvP+IN?OCRPuKyiU0&LFid!Mtbf0FdU$Edt!DxzNm8!iMMvkP&abWD zUC=1*LIxx+A%MxFGUtw!w$TI(7|Mt{XL$)$w!SS=rX((ui`Vf-?2k8Q$!x@{h)Eh1 z=M(Vp2trG#j=kXI+6Rz{l>*~{w~9iQrrw4Ip;Mxcz~&&{#RVWF#c^OFc$^SKY}=)~ z;Gr4?Ppw9J$eAHfpv;IZbO3G`ghLCz#QXPouo@6kXc#sgvbyVk5k5UW^v-Q-8d^y^ z{wku)8HNTt)}xFu+O))ySZ(XSL*3 z!o$AF#BecJHcwQEOfd30&H{c<(q87moVK_~b@C?qb_N5Tp1?d80%5ogQVh){X>&dF zAY6A4ZTlByF%>{#l6za4!F!Oj1qLjbuPHxIXsu#ZZ+(a}pkOjTqpGs38S1P{>^kQz zj-C}EMv~k@MJgm?Z{qIc+}!NYK?VvB?^l0>N1-FI%i>-g_i>j}sknv+Lc%P{+_K>s zqK>NaNcxq4mb9P$v!A6Tt?ea1wHq-uF8Hh4o^-ivMO++JR zR{){C17q6lzNL=r@IRhMCD&PP;~?GG?!0lcUL#L-gH)5Yz#C`8@t(Iqoeid1xbKDc6DuvRhRmWsqf@g z=)$7!IRfi_SZ&>qRcoN%kR@%Vg6mc^3jz@(v89t}N8dvliM=AXT@p}SHSn2K>`F+c zm%nBBT&#afYbk1);Ts;q5x?)c5-5S zV%z4#wylY6>%_M0OzdQ0+qOM1_wJXix_5s7Uc#X1|vw>*azzY&t1 z-!K0At}*|X=7E>IJuHdXL%UoPwZ zhW?R&J}i0b2Mw#E*VIhY*_2PDZ5mdu*mGD;+%N8Qck^8tIym6;wj<0sG~Cc@MMa8| zWHjmHTjflafgB4oocAR`(-588KzN+l1ezT`=-SKK+=x;Y5L3yaY)18 zt0!fJjhKDGqRMaUEY+-z9hpqiFk}n1f4Gs5c8Tnf|CFJg`E@+m9R6pzZ#cVO8@ttD z-=g;6O|gPhc7A2Gv85OSW$5M3-= zDXbLq08j$Vl^A`pIRrV$HkZ=KtPFKaGRU7wm^EFBo4@I;U=kA8*fzyeb>rBs7J+nT zE^Ptf1!EUno{KZxe7xx=2d|{aCvh_ZQNLlP9`7aJZMoMvR`LPJF}4&@pR9<1I^t}U z7~}^Q(L;=h7Ok02N3f95?{f4!DwrklEn^JC64lI_a0S|Avs3c%aSiS?M0E z`!hv_Nu;CB7q+{B;WGj}&333ddJY+JdX8++Li!7Ra7vZP%Q|CEeNu?+RS)nrlx-8A zSH3oYnCY0keO1w(Wg1YwD*vu1RzP+{Y%rC`uvB_%VNLoB{t!bE# z7hYc87j9u4z5MaJytGu`>@Op%ZE}0F?*LL&&7@Z83VM@^t$cu}mU;eQkQv4-af}^E zVF`5=Z#!lCT>(q_Xu~VLLP`@j3qVlVcJFZWJHK)lKe>tnrWK_cbp~aHM zf!cq+0;ZA|1^k7?C>Tx1Df?O|g~4rxlXv)|m`B*fX zzAS+HuK5V60bxtS>N*mK@qq0(7yqRsVVBV>tte=Pf$D%ICb(hQ?QVBXSln}@7?5IB zrs`Br;)$ywvD4JH*|_7&h3W-wPRXOYD>>Cd#y)`BvIy?$M{qi$(Nc=Ixb-0fOZV4e zsGj_Rv%msn#0;o4CI`(mY^ZO;NZty5)%+u(ptVgwOV>lQaW*Q$DQ3E&g!m8Fk84rH z@?%)S2hi>TWlpMyJ3?s0=Cbz;FE5HR7uO#6C8*~$9@j7_-zuv}L<|)z=iK0Fbf#U2 z;fXID(Ei@-P8jz%khJZyZrL$Ub2z0w#`>S;(np-`$HQ2O9u=j+cb#ent1J-2FLGlQ zl$QI$62LS~VU0mvJ8ifUC#kR*JIOzl6D#>-^G8(x{5pD^%%){Xpt1Sjl0>^Hl=nU) z2$Njbv{0eH>ICHA9e*Ut{6U{&1cdBz*iXHuOg8^36>${=;!|IHElD1gL(U&8qu$rdCVhF<$5Q2&pv5 z0aZf-N6UGAk89%i{ABoJ3^zwL{z74*%LqXzDEYV8v2r{5uXBb=iqrAfce`EFNi&VH zj!aSHDNbpDkB};yjTzim89{qWU57l>ZlUoov3HU!fQoQR)gP`!p7~v%__cuokSYq=u z&Qj$N4_&XvA2=Va>g&pwvF2>zr3J0`}8WEi0F`;H@08;pnd`!tKs!mM>D z<(Fq`L8mnfO!jwOdCWIY6~&fH&ad@f`s@|q0Be`8NQTaMKobEzid-ZhYR1d5A~pxl zKYQga-FUsDWM2d=2g5Ba@PJ6QW|yK1J|51Vhb;;1ck9+;J*qGdzjl{{2?`FOxe#+W z1WOR(28DlXBH~Jddi})&qIM_9Mx;t5xs!#32;x>hk}t&1nDb#u_T|vq3JIgr5qJ1* znL&Q`2$$>P4-5S27AFb}GGqNs2y|=@b#8e8q_;)nz_`Kd?Cw-}R<=E}b)kEndVV~O zU#~*!C{Uw+9nU8zBR)EoIm)ivEr;F5vuIsVfFA+{BsF|+T`#f-6BKz$>|!c)p3S9f z14X0cF7e*f=K1k`ZrYwZ4K+O>7?m6WugQH-&lvxt)|dztD?3+0QZH?RiLx`CZXLIV z8%gA{IgW9sZ3lDGbUQWdl+mQ5iC?D=?R*qsw(t7eq;bcOFK|l|KH6ZSRl*f6cX0+r znF}jei7hKA_VlQbDuEm(Ma=W&ARHYFB3=S9VE_9G)!u%Iv^R&w__i*T(PzEuy0;I! zSm@nhD=>AN=zt`Geee-r=ZVzQ80w)ycs@Lk2&lqioFx+uK@U_@PJYsk<+HRFj4`WK zJa4OnTcP)c@3Bg$%73ASzm8|gl-i1epzRM{0KZ`O{o6-J;9EHID_recy(2`}IDOCG z)<4T2@Q~`HcwHdTvYMs!Nn7&Nby>0%>f=>;C>_XW)86#dB^v&7h$o5%F}o1d(R%(E zOr%>FebW7~zXJ#@RAiu$HSS}7mr@a$pcmQQ`F32`gqd|x8Lx&Q+uT8{P*$%f{erd`@G`m>Egn1&GtX7;c~mTt7mYxEOaGZ8DT9{D!^M3_;51zfEn)k{Daz88hI%zy!Gf+w4_rj@C~4sM6i6ABsS!vX%i5u#&cag6Y&} z7LqVsWxXogSk@bTU8NFvWt|cpL3^%syq{WW2Is~3-vif;aZJMxWPDJbZ2F(-Opa!? zJD9uZlhJY($7k&^0(2CuTDeT%#2@qc@nz0&6ai?^U4|HWy$_bvf#2H9(?a`K&-bMv z1t*R0cIK}w=rD~9Em2{)^>n9~&^LUf>J~Ie>(8K}9=kB9b!Jr0GU(S6PLlB@0kQe1Xt^nMA{4Ce z<}tlbKgTF7l8K7vLpyMg8UV=Ibm;xvUlY4lJt;$l%iD{)&|^2QMX_BoOsgzJ7+5iZIDc@>c~;6~#_7p*t%nW`#}a)X$63y`=M>Pa`WS+Sk+J4pe4x^M6QUWNQpb zU|F*U9BzfwS26O0Blqmc`1^1L_gGEr~nesi& zUnYgLKgI4Qev=aMWcAdnk=S(m7a!`+m|1eCTqv-HiBX$Kn6Nzv3K%*RYeajeprP~) z%G5S|h_h8uEO_WQ!=z!#97hvT{`i4OIDd(Qs?(G5rr=}&zOdx-QPk%YKYYNt1zBHM zjgk6J9Lf!E{w7R8>*S-yphdLJI>8eSKxZ4wrf3*(vr?wfmusK?sVAqy)NnD$ z)EVE0DYeVvtFA|BpJ8LG+3|ud?e*M?(bA-j*Ev>5qz2w29sDPCmydKttk7V8nd5PHMGu9qAx1!ZxGk#GCVh3vdZ3IXMZ4nZ=1 zLX6xCbeK=VxMl6Bl`oaZ&UV}N&fUULmQF&yhPLN7Uvb&nvq{IQV0rJQRvcP~kbm1B z)ll;GW_YdQ^ck36T5upj-(HJ=uz+VKVAR>`u&s7;!nu74Y!cOm%{3&x+A$681+tBBt7PPcX zfmFaRwWpu0bbe6`ls~H~_nEd2A=`@F4EBsKciYawq1E`bqEL>oDewHr5JBdvcHOI& zOQS0BY{n+>b*!Ugk|pb(G^5ArE=e-aa(~YB<{S{`!(izuy?G9g{osRrC617BkO<`3 z)Ly1bGX+6$rM_ehz*?VY(oPp!K`i^@ywt^PR}F8F+JDNCUmgB%05M}EZk~@C3_XgT z+gs;+5$Qd_D)SCaN*trMTMynQJbvQ37>x<;4ENYeUYW)~t!$XgwVZ*8FGVAbca{Tq zK2^|MrfxSqtKCLm3CFaCYP_f+p(~cyL^T*?dZY zolW~Oaz(5K$?GeFd^5^R2Bx4oX3#fT)dBZcJsfrBL+rWveUrj7)mxzpo?IDRRTs3r zUftL5VGx=>T=H+v@-g!QNPZ$X`M+s8_$|eZ`57ZE zymPGjvgG`jfzjIKwRVMWx(X~2GlKfGD;PU;_;;uvxic?tW{S|ENU+ge0+0jpV7(|V zC{R@plA9dTH!Pel1=^mpe%iG}_ zV-KoS+xpx^l@KVq}-jp;7a~VPnd6GYaQo zis7EbMDV4BM%P1jaR#jNSaHTRrzt!)NRq0e^@R$`vAPDCtWEME`%Ix-WJaPnV@y#+ zB?AR^xyB)j+7d;r$o3k#EH*!^=hrWVg{tMTu{12FZx+KLRaMZTU8}Cp3=PMn6(>19 z1AkUZ@+N#TST5^((3T|QVmvs96x>r(~YJ}Ac z$}b=!ydr}~=5wjB!-|z|W;4BC)!^^JTj&g4(%&e?ih*)%{0zOmpuaMs0(!%kRHJ`7 z$1pBa*KTa{JUH5vl@>R$`<9e;^8o_y^EoK6f)rFM<9o5&>lkj2i(B2t`XNJDWPef5 zFMCU)j-*n)tk`xgrDuZMJK5~T%;U386@xGZekA1@x0U;TX0TqP&LM}^R_Vn?SjSu z4%H3xiRRHUsasu~5K&P|F?g)g1M% zs;ks@npwX(M{j)sMdPHZG(A4Edkyffjf&OVMsbSI!rG`Ezm>-OVA!yuc^KCW9gLC%?@o5ZV1XdeEU zA~m8a7L@Bg49q-~hQA5$(Sr?`U%Q9STC>nNn&KqOJQQLXj}ixq?}hl0DzrFF_aU|W z)(L3PlJ}FhPK2vJK{Pf^BNLAnD)uO5)q{&DEg5@OT6EZU*9i{_NyV6 z@K#!{!SUZ5dU2PUB*c6wp>^N=31fnC5K{Yh5MOTW*EMY=m&Z`sdU{sdn{svy0_E%@ zRxlTwGx|DiMYzQ?9bJFobLOAU6{#b+KN?`5Vt=A;KQ)AUwsL0%c-zp#;U-t$2J=|M zmzaBiu6fgB*R&6RsX*N|ugmGU&r0ILwv?TO^_2Qyk#*D#*0`iSH{U-U4h7UKhYnv; z5lc&(8zoS#>a90m(?|HE$VW&>)dy`tMNRSAz@v(-Wz>4@B+%E8p9WVsbvWeDj7d+N zMTh78XNH_ht1Vb9Em1%+E0+3+C+0cAGp9OeT|cpNH1}APj$Bk@ zERB=jkj|nV*rTKP-?EAA%Z^`UvK+Afm)r7b$`EnL8=6jiX`KYa3> zUgM+k<5#*KMv^o+QFu7`xO~;jkUWGS3S7ZV7AUm+QPMZ0K)_#)v2#)O>d$9-iP2xi^kHLweibHh;v1j4IA66keqmQ+jVLqW%{=G;0 zB~Wq0y^yvc5;wEYGJd<8uF2Qt*2wxYW$zt|-?$>>V-TJo?1&ipegLd``yLVV!e&O{ z5;kA{<+;2?n#9k)&$-oxp2Hj5x4`+o&cTqS@0KvU6H$u1W9M?BEqPrr=*Z?@0FvybVn=NiL*ES|II4M`e7WY8+51Sbsz*XnQy!+>|zcdmAF_>_Y6C zm^PdlO$?~&0UYYv@e;2`3(c!$K4j3C{>M7c;2;aFr$o+ z7kOLE2KplrUrm~_LYzn~oy;du*u2Aj->qe>X46S8dt;Y|Y18OU5HO*+(`f4x*+mD% zXi%(x#Z~2yf%W@t+gZmIY>H#G;>Whvi}=zs|84VM^98b?+n1}$EcKxp%YcsVo5gwxp8oA%I;ZxY0Gz@0r@wk#dV`*SJ2A|GHBhcjcVtY zw+_&$p;j@%z^-)LfKEgXBRV6mH@F<4?TWLBhANV$5?k~$8k-OV8J`8|`M<}xmNP~q z9?zK0P+|g~tgl4fC2hWQ5wnQfdNs3v-=hk0VqzzB!-H15m6!Z2JC7L$Hje>VN?OZeP4{mEzV*;n9XqbuYv(vLHaWw-x&0p%oi84)b=Y0*dG}@W-qc+syA}{XWgoA zs~}uMZ{ssQg;Oo=B!10RXXlU|WO+jn>z?qx1n}W6ag6=CSQi77{YE`dC31ZtXi@EB zO;S>^A~A=7Uuj)P<<6&RRwBpt2CtEBzzZ7qh(di1Ff%)&nGzW)dZIZrL!C3!^yF|g z!ml%{bSzszh25X$=|_U>-68~+#A~6Y*J=;HTg>fGG39Sq62%!v%CDJGm->af_877= z9~GAt#uq~c1SqMgh92oDvtBM?=NAf0Y$Rd}z|lFppMN;lxk)0VmIQ|Eg~Ul>C(uCX z%4C%1A;?ZUxe~uaubgTYotOl^aXuJAhsQIC%Yh?V0et3`2uPLva8S2n)`Gqa4yt^g z-q6b~zO8wDnCs)Z^7i=Irvj00mA+=YZEp9@G@O0Vh!V#5XeFxqseEoOczxT%QJ z-It;xZ31;9a)nJus1c((f^1~QX1Fnd$fYEbE_69oNImVtppVIN;wMpdh`n z&6cqp;ow7awg~Nn40-zjI3O?}Z(?c+JUj|7 zOl59obZ9XkH#0B_FHB`_XLM*XATl#KFfa-)Ol59obZ9dmFbXeBWo~D5Xdp5)G&MCK zARr(h3NJ=!Y;Ke*oI&}X}o*BUWKVdR<=Jq7q|H(FUb@;CeZU84|puHUl&HrpbOX37DHnX?0 z@%&G!qP+{y6hJ~F4zvKe0KEWaBxc4g#w4cp4xUax3riOgR%RAfhJS9{^d#z*01^dz zFQAQ$F^QzTtKC15|0->4XGWq9umPCc+W}3DNz@oc80kq&MD0CD)IA*lBvQ5}(*KST zGj?*a2Rf68**iJdI~lwD1DUAOlehz2EJ;)W&HyL3f4cvR3dz4Ill_Y;*?%9eq^ph1 zzhRnx!6g6Eg5-Z{@!vzW0RJXH^Z$W?&XPb6fSEGT#nh6-+}Oq$@E^a7i?I#RRK(80 z20+66AD4!m8NkT~Xa`WXcLx5OGXo3rf5+4nf&EhX$s?ahF8 z79?se{|I92WcI%t|Av)~fp#wc){Oao&+ET!mj7)l7`r$DJxFw!8JU?`{t5i&`mZPb z|JF{;#mU|ppanGhN8taXqUgV-#+!kQgOh}Tjf0JZg^iP$goTBf!}tHrH+6M#0@%6y z`;GdC%YWJCz<-1R06YMuaO*4frhFk*=~)>rb=bd0ro?}?kwQwaxes@ZSw%RW0e}1q zHZfSCCXc|j3Fp-N7C55A{-8Y5fD);0dsUk(q6;kek zd$V*rDoY@4b+`NyzJ(rsK8Mz1HezUq0c)Vgd{ODbnkAI## zj!%Q6ohg+>28s!u$d(cM^vQzCr22Atq z5+`{15$5p}JSMdQLauuSvrteL^ZtzjpFzP%eeY|$9AM-}xu-6tW$Xp(S z3j@q~UF`tW5b;rLz7VFmN2WRgzi$?g=t*y9MhmvA%m=A~&%5E|Bxa~m^>6p^g$s<4 ztMCT^g}k!j17{4AzG8K*YDp6wb7>p{n_;^k+U5K|9UYc)Y zzkKq2MVdrOq1G8X!;7h@PzGLl@b`BW=OstMM0OjY0IJ$9vDV-iS zSnK#s^u><>8;vE$iZMh)4S<`z`!`t za8Q<|OJo;*`4eV9KBqT`@%!r41vm~n`Lnk4kSyQ_xhMdR2Xq&9JnjvNn^<8(E16Dp zPVo9we!S@qi(|=n;7!m#S<;y@eV6h%|Wlrmn5>Tg{ zJivCJ5*2%6%kj=}AmJMs4K$(bDAdNL<$)*^eAGqG?ojBjyE1feHZNAkl!MUW`jhM9 zPyz~Dzxa2XrteB1DA`Qecw_Xa>FLmpCYxaiZ2d2qnc&-g^ub@3iJ__;fCP!rj7SU6euD((r7 zQo%vQ38kluR*1H_?@c|rXmPTKHG|IbpQcUQl?wPmu-#dPIBMYVA_k1v1qR)!Pj^3K*~Yb)>3JUW z283rgP}dL(gskNC?w@R!1$=Tt6>$-|c z4eW6kyVO0l+HS1a^$Bec5u~sXbsNIvq5V0(5XtD3>O+8vyQoE*ly$8y6gYe*F14rCk-j5ZodE6Vlj{n|^IJY1@q1}JM}SCMmu z{mhLauCX1meRLq=S8bzU&q{)iT^RqZgNHJmAUgQmYSnINrSpBj`JKL?B0x*b!C?&14=-IsDXc--v`&WEE_8|>6q&l4X5`h8io0lQQi|2IF zeh9Mq`TU={m@`b|*;#+< z{Rp|pMLZcf$m{Rt-)}CXjqn3x6WivUF0hQ=3STfI9(7}{6hx8mSRVt(&QGH08QkD` z?bn8VFwjQScH>E%0}684VpCrVQOKogI|9Ha8ttZlUt^RL86j!t7(cAGI*Ge=IQz*C zcT!1#>T<#(Jfc`zJUCQ1bnKFnyJrwd7hN=TJl*R58Izz?3Ox;iH*o zQ}dDy%fGxvOibKq%^Z333XshmxOxpT!N`^l?^5R8ffs;G-kyF+V^~^&UZL|c@<$xd zPePL6sk&T3+)&YJrwA8mmPb1?AFLpQa;tpDc^kp#Q9|j-@9GqfZiK>WQ64y`ewk&x z3k@4{Vjjk?q-BtPh1L-xNyA{?$?FjL%(!Zbx@1QM1T$+Tdj`LW_$JVGmgc zI(4YJFX!IAhdlD7CPDcmtNF8(7^LU3hJ=e>V3A9tqGl`&YlHd5_}Tq#p}(*5t0jsp zhoIe)=m-`w4^FWv(AVXPShYgIMO6!3+ILNS2?+y=Kn~IG(P^ zwfuv(-+L^xI@^O8Vuo7u70JK#6hBo~3yT6ai^ zdY>c3lzXFhecBM^$wG}b{UnzmM0P7rzlh&y6PK}!+}beaobV+jS5ugI9^aj}lRVq5 zmMPNq)%8_uzvY0`L0Fhpr%*XYdK$PQl7<}zKw}KHC|6+UpWiQ`d?&H*ZBScrl6H3x zI5Q@bSkoj{CsvBSk28dbql@*O!TaBdfgF+CFdTKua%;l!%ms;RigY*1m=Fb`EGO(k zi%2SPm$RgMIscHv5!axaPEQ5Mt9Eo$u~yVR{cX^VaOM*`?}GZ^NLvNmFBJ&9%{xlm zi~ML&rTcl5p__qypG~ntHaXH_BW%YMk_}%SV52+j4xQsv)+Fwv@3tg- z?l&O@_E}Gj18Lx^zH>>$Y+rOQ_A>F^Zg*$UXZ)uJoB{sWje@!ZiQTzL@BlA9ANRb} zf0XNUxaP}UFIyu)%zrHhs#YL2pIV-9;Jx0L5(o7yV+PS>dHeH)=wred?qlJynxOK< zy%JsAoNWEIn-e2Ool0c+tUklyWk!&RY7DPeibzd*U;W_&JvhYf0q(6Q^Hpf!tolY4 zXT^l#iy%rS&Wj;|JrCJL2Yq9Dnyk9Yd2oNj2Z1T$NsMj1DP;k3muHr8!J*%!_7M4IIA)P_Ye%u>3TgALjt4q zHohDWZ2TZaks90YaJgvIBag7XXJh5^YRVuHO~jtYty{Kk0X)R1DWP;RpCz~<`4>{v zPw&L4YnKbOCqdg%+O=u<=q1Z2&}EYGWj4b_cY>t-?-@s>82`98pUSG6zhy^&^2u^F zVR-KE7~1~1Ed97gJR*eC6$Se`e!X`q7B&jyv!O> z*ytbf6XUVu8U~k*nF2_Uc~3qig*T94Mbv~QcqN*@-%N(uJ6hmR1HX_VXyj{%mbz@> zwjD9@SbB}oG}$8)vKG8n<{1NRG2o+=R9gL5QU9{e#iRaFO2Qhpm)-3$nd&9&fK`8h zy+*FChB+2q2+DC$&~d+X^BtABgfbt1Jg!-8ByBsT{O+8H5!sUD+qE=|yBw)j-7|#K zS0ib;4{DOimZGd@WliyVdjU}{v`gTD!yD#*Y|WoU0G3)20lT~e*Wd`LKTIJK`twRs zxL;59J@oOxaCE0x)V1ScUsmQ^@lX_~)m=mUtoOg^)rDUdCHqN%A+IpBpKRHdI>h-TuKk zUaw+Cf)PfF=Gy2mUXLKynextxI937NkQrnxj&~=FK}xS1C-GWnISJ%ArMoKSV%l_4 z@~tOAYQ&0tC5bYQ(||4^!VCdvi66Ci`9TtnmVvxl!F8oXeNlM%0P<#x8#2R#W81uOD<+41+ zQiZu+k?#*BIuSl;60(CF>9Pst+`}1FIZ7F#L2?nQbh~&|Hm}BQpK4S11v{{W>s)HT zhMksI{j?P~dp5K+Kkz3DBxL6RZjVU!vFS9!s1pBG?{bU1J~B678x^5FU9|7xIYgxP zl;N3xDJv;Tn1)*YHCk%Hfq{Bqvv;ARu>doNrK`F0zM^5{CV#yYhgT!tvhxJRYm#Jr z`gRIdTx4qap&&mnpNu_(QQUEI8wczVC5B-T<&vo6wIemzmOqgr*4c%}oFgD%B)pbW ztUUxrsSWYqWmmfZV`4BGMwmr?usiYLbyx%V*T7XC`cakBS(Zp# z|0~GloX%z(`L|mScT+DhTA~-i8!t9mpf*>@*1lr9WToW7v~s+~(H(j1V+*sk|D+k0 zv;~v4z$~z~TCxGaWak><$AxEs`UfIQf3I5~MlFbM>Ha*FnSUS%9W*)sksu`j-47&$ zCD?mzm8$dtq4~)~Qe}@1S!wi!CQi9rmPLBd4>HjH)&A+xyrWQlWHXh)W;BofCkN>b zKW!JA^HnL^8y+xF@)1c!OV@Cn8Mk@@3>%Z{CR{A%^j0zuM6u7*X6vgp#!EbETRd`S zTEnZlpTke&p8PxntwB%iJjU5o^S9P*eUo9H(BzQFfqDAxU$UjBB`YWf_$X^gR(#bT zn;ps6*br?Xh!Eg1UxM>(3>rex(fa<-KndS$L^H=QN7swZ?ODMrS1}MXy9puKT4mE; z%}L{p<>Z=hkM~SI9FH*Ua0{Fjq5H`l$tbJ58ySomV{D6A`s=PD#&z$OL1D?;9*t;l z;Vy>M47gWc+#!(2R$1(uuet3|jWpzS^P#QpGu(=`r+-g(yG`ZZ zA0u_|#LRxc*u6*lGrMaJ%&Las@4)x~>0APg2g)I~!gxeJu0jmge^d!F9~A{P`3hk- zKD$Jo_kflFK^NuEwy#2UPW{uUo~cwuq^KoIYY_u3EM^JHv2&LAj52=?K%b~Qqp?S~ zg>U5M>lW(e!nyh)J^VUsuQpb^7$2R7W2~4n-hYdwv;mr*v97^FcWb!KIQLX54|ZS@ zv(Zln26TU^&4BpHR{kp6z8Z&82a_f;Zt|;Ri^bsH>*ELc6#=6VU8-QP$EEp}@G~g- zU>gD_91@dPC5Re9P&m)k9Nj>2$TDTtkY22qa{0!mA;F(DK6w=6HG>_%<)+=kSsVtz z7;yw$Q)K`@e#_J@EU}9-5O}3Kx&7|f=hHl~Nl^(6Yy5#g`91_IR4&Q70uQ20BChzT{y3;dLW5!JfvL3gJ5X($4j{C=9fSzEFl) z*X0nqac+s6*+J}U{8I~gRQj~SUfzxRd-6j3Z)hAC0MQJm2EJI1T6+dcYcIs>GG_%6 z5Ys^_s2I#r6ZzSWFF#B{Ixk|Y;Ep|y?8`uc2La`fOoUDDI1-iuI~yb6{}e#rLKm=a zr;lw;_n-zcg`#g@ntv{Ej(8!OnrJLD#P;T3Fc-^R-X<7#1eSWEoQIz@pDV^QuEj`o z2lK}|q!x);a$*(y{1Y1|Nkl@c4&`YLNx5xmin)bAUL{ZrZ(SS#UL&muOC2?es^a37BO~z z36hTCkjl%ZZ;+3vY^jP`n@MrpSnJ`oPh_QxKKf3Ty2FuM4PV-2Jt;AKkTDSuhbTf>2gy^)DW>dP3tkBA0SF8P9xxkv{ZQX+1#^O3mhOn zwFTW`m15y0(P+TGFU&jvF-hoS&(?K@;rV!pb>JYLkYd0_NElRjt7t}k-!o3_}%y!=o zTs+d{_3UnaZHDW*4@vM{FDiu-5ZV}8e|Y1Gw1{-#DO-b25P#CTTxr-;t~vWL^N=5} zYp!F88S`0Fj0Gr~Zhoe6)Z1>5NZplXk$($>JUr1%KVK8SfH!@_=?WM6B;Xs{o~D9k zCp^W@a^aiasrSrLPl6zfOPEl>v_FGxs^)wZ0FB!eSk@kF@$ARdpZy|53fzp`8>Xj$ zdwwOjgEYi4O%@M#B5!B&l%9G8+xk~a?PfoX667di#MpBHS?Ydb`l`QFrQ&dXQy*$x z8bx`rX*MW(@cxbuZ|Ifu5fG#|+wI02*Io*%aevO(T6d>)A5Sj7(&Jjnz`@3LcQ?XM zx{={!7Vv-T;zYOCU~o8LDn@E3#!%Eky&m=^*uR?MjrXs`%u1FhH)XwF3)=}!)4VX! z%`Melto=TI@ri<-Wk$eL?P^zWdGUfJd?bRzsr1O%I1xZqlEgaNDuQ=y(?+)vQlO+R%)IrWYA7W zXpwgOh?{jBOgXR6V~*h@JSDRa*@(#gvX%y3!yNsM;0O0xE->V>*xs{vuspU8KBp*} z-Z$ERrF1di666n_z@>SIOBy7|TIwyzvVayB@{fBu$;lyIb^5gp6Kop+sC;V8$$FnW zgnL^ltSZ5Gvgpl5rjj8`As4H#$uVn;uj}GpovJI))ZdXVWc;f0*j`ht%-?wHHDf<- z0Q*C5Ag;xvYFtQ{bHo`kX~Mt*d6jFOro{8X-62fN zFZqqp#vrX+Vquc%K{niP2=mL7yA)v*qlzJYM_s6icv^eod{4BSK{0_YpeglF2m;T7 z2QCB3Y&MpCs%08H53}{snY)DB_cb<89r*SyPj5G9_oBjh3u=yxYGuonM3$IYVVJuo zXz1_@IfwRf*YVRLtc=b1MYk2TZqd7HBVt8fpk1X-LG$J~)#!S+_}et@N0VDX{vjuoIxLd8UwaUUSmoHQC4itHT>jAy&4ClIwGIdc6B)7J7c$8zsQtKGP&ayoB__XSn z#h#p+3Nh;Hn)rUAbVxu?;cgzX$F=pmv|jg;EgeX)0wzxv^`fOq=cWqS)NV&Cg8)3P)-9p9?Y zHxd;cV*0l+L1LCxb3KUXXRL+C>$0D4zdB~{@E;W^HaN7*_nf=9`*5RsG~pjDhHN9q zn`kt{)d}(?0*02y59~Iu_4^+o2?H;dA&(UWAhwM+RfBKhv-~*WcaaejoeIvAJ(;Sp z7H7yh+UV-7`|R~8Dw7!oPQ5^EZaFh&i0XL|zTOE@XfbPmQHx?s9R|!SfC}vpmIqX{ zr*KY)cqi6HtQQi(&B~BEiKX_Y!2}6xj-EikxTKlUh3@tBu${akb z?TB)}O(-Gs#0f6IYw_zxRMc<8K5psFiTY5fr%)TAMaBkbR?|u%XhTS8By@V^#eTwN z4>0lO>+RCtprAscSmT0OsA0R2IohLOUbm8DL-a?1r;JtwA$zwEQzv{~NdyKI#}nMK zc4bFTYRk%gcg>Cjtb3j`t5y!)CMY7eFy*VV^iwC^)n!TQ*=NC@L!626uDhu2F**B$ z;<0a#ELgaTCdwquw)s8fN)D!*cUKya6r**)crcD-Zx1E|JSgOEHjWfrrW6BDic8M6Z+}`uf7jv=Y_{BNTx>07t6hmNKBwpW;9uYW7G;UD zo|C5J1lJIp(|cQ8HnF3B6qcM}8v1Q*!t7l6ko!dXzLss9vH_EiPovWvP%d({dnNCx zXaxtIdi-7d`y~GqV^P%SOOS$r^@Mq5Cf-iIDUxK_aLzX?Iu+y^T-iD8Siiu+4RZyD zdq%zBK`A3!3H>IN)Te?X^tu(%(2N%CH&(YUL%#-j^Ph2t0~GgSu^kN!_5-w{M#_>= zi^;LpM_Do_hk5>2pMV_C{?<=wGCxnYd=^Y7o{#Y(OUn{EfvxAn&+1P)+bRhh7X-hV zenms_G;VKaVo8EKxPkc`+V)_$)A)=2DQC`c@Hm{YTS#n9us^)e;Br%gEENHwAI`rR zDj-%ku;$PTMkG48fBy(+RqKJL@{@cc0bRj4ePWa+%ObXJ>RiJ`3TS`45MYSbas5Gj z0fB=uvaN3DFY0fRqCo$oZQQ5AxUAaf8(^0N!{bEDoH))9X!g3)uEUz}#eY(F>rsR% zm*O*GA71?Gatu#1x1?7DpAa?_$HY^BK-MhKz$8)ueLTW#>gRYtTPMTn(!Dz$dcoRe z!Gt|E;G9uMs1EYfvF={LNA5NmV$ftuvoHH_Htv-Q%*7gj`e3#LbO%;I-S5~)jhe|R zPfC~T72Rk`=xC$~z4$n)VrFA5b2 z_GTUyY-A{s^Q{^3Gx5*xr1C{XYFa=k%{77mtLWV#^K9W@@@Vh`;C%1Y2PgZP-^eR( z`8*)xuUe`eQd;O;*>OJsby_b5nfO7(iCmgwjj2A{?oHC-3HmI$m#X7J`%U?=&Xm}= zYR#R(BeB-c6^rj_B|)2VvWGC_A`n}GmxDpAq_|O@@{Grr0nz!UoS8K6ab@hXXX6s= za_sKZZEFMMd@r5M7Y0vGCeh?s^S!yrnwoX9@=>Soef)re3C_ih)?TwS zMm(#9dT}lGw{2&lsznOk%>C+fizh?SS*w=I?rJWzFO(uPy_MfjVnLk}7dyPw^~1NG zLjKf~p?jR+^gAVw*LBE zz&_>(U__1=Yt5>k;fZe~1Ixv~3BjQ)s=v;zz@ZVmN?$4pRF7e$N>{FDln&^w4|~eC z=p261^Y5Bohl^)mG(7HdXFiygt+*Ta-REyR0DVmVc6Kf2gQzdTD&=dl>3l zF*}b#a>|jQevKZwaXj7ajn`=L~mcaa19gnR)cHf-=l%r%G#VEYd)KO;xm9qKz?PztIaJc0# zuk8e$<`ub9!6nOzCVW|{0+rXDJffbY@74d%K}X<#!L{Ud6iC~vnQqHP)RCaI0QdWM z`%0Z6?!|i>$aUSB3FDk?fzqW}1)eUydmibff6aF~%FCiSvzL-N#}#*I7MS||mt7I` z#&;n7q3UbnTXaMx3Z+C5DsA&k(bI5F7DT~{eE_IpVHiqeRU8%>WeY7gF@i<8``lC8 zo}ZqgMv5l-O8J88r@uL8s~kR@)F-#;_PNIM4QZjjHO7?Kp!#3w)3}W35Pxz471fzU z#`W-Y|Mfm9E=iu74p$VU-507)EJjPC=pLeb#jqUq zgorzWiQ_u75Zj=Rxsdhmkhy_a%BYgEcI?a+Y$N zwmEaZ@8~Of5o7MHTwcnSOPJbsq8+)2T!U=^IeHuAa<)({;-FeB`qfR3Ha+ zo+%F?d^z}H$DQ9DKZ^5I)U|wb`LizW7Gj(cl>{H;(A#3mOuueVB~0lswJQGwbZJP7 zf~K+7xgKeR#BL2gZxo_txy=PZQRC}Z)Er0<;a4U?+-*E6S}s#}y;ysm()sEpaU)Qc zz_ga&Z-*y|Q$h$5x)=j|KAp|L6vzk#4usk2?R7dwkq@y5Gs%8TEQw7U%|rv&rP#i4 zAsd^O#>9M&eA89C5r*ZbtG9P)w&joGKH=-oFWB^*q*7jsAu!XVFmi*r&D+=w7>IV? z;k^Av!7b59t(WT_O-TD+PvVceWe}etN=vRG=^`bBPWRa^Ii-G%z|L$O($h6+5dF95PW#AS?B4f zTe4rHyRH`T4{sUz&saydNOTBivGRgnKl8>HLs^=ez z>=?VS1(L2>&$Ey%BfDko`yw6KDZVK$qfAx)45qag#R*}ZYB8qFqj2bXmT>VdJi8Mc zJ&@9ZTM>YOZMFQ~81JMI2?v-Y=hu6GaqHjppxfl_38EA=;?r(bUOV^7S9UpACFXX; z_nr75y@64*MO)ul)L=NxoH`hN_zAH!nQS=Dww&5HRaHPNe@U@?#+ru#`oy3rv6x>5R=I2G`@s-C3#i za_A+^*>H>Ww2-+QbZ;gDt>Wv4$i|2%hl0o9@z=vx;96gzZ``qNG?_KYKHMpkW+*sP z5~a-9qO0GnBji@0cg&Q@Mv>|h2`PW3cBbUz6&Q!p_c*SA{LyTy_f(GEWZQizR+qP}ncK2=Dwr$(CZQFWxGs#Ty7L%NFl3JY9rjn{f z{okK*%lf&GL+SGr*3}5GML_Pf>&aReBO~QHnBn=3@ zDvN1>;7fY2r`Mb`?C~`**?E!EX>ykf=|uUY>jhP&h$4J8pV;Sz+yx!iOEHh_D2|PX zm&5(U>EUtguhM?D%+lJ=Xs~Pk`A$y=boN{dyV0EXn;0*GlTiZVn0@=GK6ANEo5r89 z(ogs1`B{yk+@eXO5L(4WD^oJKbeN1!XE4FhSe&Zqy#s#ahsAMz+af6Wfbv*y+Ua5i zgNj&+d!WMsz=WeM0-(lagjfOa8Ew~IIp+q3L0z)wY8XsU93=wt&~)~F4Ip-g z%P7qjW2T9IrmP3{h1Qo<<#-g6fpJ_|g>SVE-dU$@=bZ->*{}w%LZqsSXEdcK%MV8j zY(|Ka$!KK(ITP+kO7E<^^QD`v(%^>y9oT|!G^0C1z~Xq=lmu*ZY=c~%U9W;Z7@FQ` z1Yw{{VrNusZ2VVw@Ck)T90a8|PB3{8M7G>p?yr4s@>Tvi2yAfUFJp2->VvtNRXet! zwF-;U(@+X0>Xjx!8#BOmAg_A2|kVwW6|dNpN|Olg)H}J&Kd@fc<;ihhcoZpSGFqrsD7W z%{3DasTXLtzQ@`&pJ^FdLm!OhU=e;6Gq!)PZ;d{<=A5?9g*Rv;S=C$A5vsTf7}x?oe* z^eMsW;uZFN{}8u~xOE=Ny#6RY6i3is%JSFQhT3*Q0 ztjsR8ymDRsAy z{v#@Z*A{$K15@F#DVPp6;SZL^Lx@H|Shg=!-JAl#{wBhzR-b2>AiB!f_zgH0doXmZ zFwA!xTO}_UfNfU!18V)1zv+9j+f7lV|H>5J2(IBO7c7I`I2X%s7n@s7t+7b?0J%i* z>8uFcul5?K)vrGUmaRj6Ss8)iWG{`y<2W^~hg?6gl*CfWTF*dPR+|#(C;CX*Y|OIa z-C#)`lsUwuJ)VC&6#~*HLm-^~3A;Foap!SR^{Wk}ccrC@**~M7%^Rh52&gH9b%KTw~`5pCpX6F?tXX}7A?p_xfzsq^NsGRuZP@ajEWM+N@ zydxKkAv_1@UPq8m@RHHTD>>y_0?&P({tfA*5UTuHoC!CyNnOhaI}U}p8J9nXZ-^-q z`iZG}5;mm=EBoO=mvJfWA6U$DSXU*KxRms=1des5`f#PX*^(?Wgr68E=05{vBjCOw z6J~)#L<54J)?1}C;L`!I?p@agJGUD{0x%M4;l6(HzKX<7XdT}gV;Ec^9+#Nw#gEBO z1G-VJUKO{bGMlsobj}x9syu&{V@l46d#NQ)LB{7P$sol-zIOk@3Wl8T%G<-GQ*$vH2dNQ6Kl9X@Q&uL?n=C_985%8M_waWW`$TS zmiWlV_o(%PgoZlox|sYLt^b)cn%^IKIaVX?NbbfuS#h)L_*d1Ct#9l z_GB2lVP{oD04OvGNo>oPqPewDiqT|@Gxoijn-t1zFigbD{c+0S$(fqvM{T&~A-`Mey=B|Yg}wqEvH}qW?X>FG zVgxW=|0A~*_)J1zQI2ZsdAo8$Bzmv%wV%VrB-bTLT#&v2Mb?mOieoZKk|denS9p2AjcuFO>E0G& zn_wg1hOUI3qPrW7S$FOi@YePq2fir>RmGB)Ma(}UmwFE38~3SxJ8!$9gTe1t38FD0 zMG?2q-eUGW)cqMX&UEE2;tG4stHq47_$pOHQvK~wL?&Uz>a*0$%cqS_Z`;tdQ3+Bm zp+da)%!-`pxZ@9cbl*ltE&Cm@<-uGh!>XK`479po5Yn!$aOn0|4t%x!qKYCr36J;X zaky1&bIR;}M?IPG6Be|zQzOjoPKnL`Sheb=Fl61*0|lZ{1aGd-mF-AkJg$m*-6ff= zsq>ceQesybW#)o(P=a*gr_TPNujez%Mn^^29W6n0%{>2%ob|OB%4~!;*pO?ZSHeQB33EEt7$|$taQLUpHM9I85V^SGpV1t$BoO9{&yztCfzHqg zurzPEk0ITpB}uq%RumR&h@F-W4kX1VN? zqgaj0Gd&J#6GT$lJ2YqqkJMu!0=TT+#cIb? z+_rY_#VgI$dSSY;@q22QO1UYUGQLGFH!N!~RfC4ma;C0FgwMPD%^CCA!lZAKUM+4m zoPLzvGkR5Mys8{|JPsPSTTRGN)4w5 z{YHv$CLdaP#vwLGtj}{UgNaRbj}D7Qq^!g|Ty11j*zvXJV<0ucvVsXxd5wmxRLBEv zJE?AoS}dNqZTA6k5V++hf(Y9gnT{PpHs^6Ks(omXAtNxRqprj(T<~!` zoGN=VBw7S#m!>9l^E3s((4om$hdvw-oCSHX=)?e%7?JR+kKD_Uv=CLJ);GU5YmdYj zgdFdR)W_|1=WR=y({P=B>}BHkjd?2jXZipM3fu9gK{A3e^nv4$H$v=4jOz+YGp=FJ zq?u*wJxC+kyDvU|b{Zk+kE(r^T{S~H^Z2Tx+h8?xS5`kex8cp&ho@62zKUI$4(C}M zAy6+cNYd&jF=$B|z%F(4-_Bzel0O60sU7;qS!3`Swb33K8~O+ZdS9-=XL)LBWE6Z| zXA+&T9FW9=J5)TVo#zoZ4WX#73z92TDnBo_VS8t4wWT&ul)7=ml%|&653tgV;#1Th(Y^;@)M9f-5#0& z6B|>}2!|Tb*Wj-zdXOqftMUR4X=Ib*?!|zl#!$HHd03oORDn@j+}K7*jCd3Ka$l%B ziL%;|2w;$PE7FeJW;H^OP*Y8Xe@ONO_B5?wtZz8{H;v`#>PA&*_asx_eeJubUK<5s ziU;XCLwjO&yMS(MZyeoJI0v)4DE`cjA@E3_4HbJr_~gV)>~3ExRenhr7Q$mHE_#g9 zVcV{<5KhYBREs$Wh>dXV`(-cwEr`~78H{2+w^UY@WB3TMxd~%pS=Q@I2g)X+ z&#g^CDYF8S(50UT@F#w{HWx!EtNT*Ox};jNiOsNM({piJZPsobL77<0{EKGx*}4;# zGY~*?)ZLgy7^8xS!FS@IR(z6f`@Z$CCnl#F_0vIXWPQkz#WnIgk|}do2?sWa$?~9q zy1q^AHx07z!mU}j?#AYaki0qhvQu;)1N1rGR@~dEZJ?8_Sqq8$1cI^@BZ3-zKvB<4 zYYUt*cz~~^z^%Q#o2;~XO);4{RNVj>Hy{#m_QT7p-~Jnv)M!XAA;$>%4vfS{vRrtt zOafLFXJvBQ;*jI7HuPw@Uz!JCo)lse>nB0gHE(E+&0i9^M)nW2R&i;2V=W__(;fC) zeV5aaMA6E2>-7`=XT8@y9eSrmu?AhpP|?GUb3}r^WKdjogp#vij0!i)g@mS==HkPz z{5G0hcUx6!j6FDeNU6q7vXT%vSa{Y^L(5`|5Wqh{tGA>8S@0=$I}gc~Qe?6M(w zVtA2s*fn$!6gRRy+M(9+T|4nG#5}u<>?r+a=u}W9Q$MJO=UZx{TVY{~Mq8+LevB)t z^S^W2XeLGB7hr={i!U&n(8j$1jOWJ{9d*u|B9;97y3G}wanh^+;l!oI%p{{a|Z}Z^f&TXm%O>-VAWr(GZ%cvECWltg! z_<_%5=Ed;?QRGV3<*sY^D6yE;*QRCyjh~fjq=8bul2l$ZX3Ip=kvcKILe?hQ=i(>p ztS5r?F-OWaQcX8rStSO%qqPXd8z8(txfGi*rCL>xRs(>@?O0o~Q%SwXvCX|)5p5Mi ztUk6fI8F#j_2)J4I#(h3iiL67jDeeZi3Ai~flS*EFEks0)n7~TSP{c*kg$rP z-#Q5t!8zAPFK$F}byy12l;xY~1Spagxk1mc9z2rsP#B%Ld07I~ZQ~9tnBH0pSOa^) zPRj$8uPG*2>NXT5{9rS>{BY6_Qbs1Xh7c0F|D|3a2`F|Fz7N9w#=?9Q>qdw)YIC3d zZf@3l;_f;FT1Ez}NEF(^yUqsN#l}3oxFOIGv>Qg{F!K8Xq0Aj1C2tx?|UFJ|b(mSUB-UwiXjtsGHPYW13#UaQ+yvO4>oQ%na zuL%Ur88)Cm^J@eXuQ56!$jh0O;@Wnjnpt`&9f^INGV|mWY0`qe^7|{J7Hfpm2qH0hrttt@d%{3 z2zCFdrOzxf!-I51rK$HK=(b7Z#OPfjS5(fqSOi;}E-y~0ULH0IzRkwU$O*y=_<5Wk zdLq8NnYPX`7%52ithd@|FpDg-zBHcLxj^~4=2Vuj?e!UwD)@UELAU^^oM*Iv9TV|- z7ZHd(;+egYFREDV1rFAj8%HQ5N7p_}9v_Z5v6grIBBuTHBzN6i5AD((>O?p6eE|k%a5vMXWW6I7????*T80CrkxbI&{ zdnXG|r&rK%5UWITAsQ_`oF<3og5wNQVMna7SN{v%yzJbL^*DY#BU?FEQ6}ZH(+1JM zq4(4BHUWBvX!g7r{;wlyK}_pD5jq!sk}l_DP+(ZMT@*2St0eK=1Q~p}_cys%D<(9n zE<946+Og&SvA2G|_mboAR`7FuFt+2n2bhAoPnTsB9E(EtY5fM!rCo02HCE6DF13VK z{;2n>uj8(wccx$$SKgxu0Oh@|yJi~3oncEcY#jKbeP-$O6v zFz_u#kG(#CgIPAmHXZoZ&N%F$KZNnDZ3=8K?W_QH2@kBKy_H%oQo$&%>6gbbPZjsd z*d)Dim4e%K0`Q%TP(__k)<_D0$g>R(0>9cnd{hLaJ?-q#hIPwA7_vn~sf?U^Xl7iN z1MVf;xKv>Jb#(Q{bL*u)nw#vV_n^v$*&_I|F^>@v0pUMk#WkL+eeFZ)j=!%@JD(oA zS1=VbpN(%&F2&Mi!W=0YKe;k67NQ&AA@4FE3@Ax97T*kuJR;V#(+Sy7SPY!K0KPni zB|L|CNc4uyWu*lw1AjA4(YBnDoMx!LY#_<;{(f>rQ!@6|G-B%r3z=JWwlx54tc>{k zp@Iv9Yu>x4FvdMWg7U4wwp9AoyDh1UI)TyBNJ!$#_eh1Iy0?Ypj+c8PX<@Nn|NROW zEBERh?m6u;Ty1tH1K3lj>0_B|DYSG@{N=7Eo=T85F--cn_TH%pn`6IO#RYYpUv{P9 z9;(>34sDc(TCpi!>+NqtVoS-Yy+F1JSKD;>Mv)9+tm-oPNXoaOaxr44O$E2!{(T_)z!Kei< z%DDgNQ1Uz{lu`@c8|SOZK5Yy!>^U2+)%Cz6^hGsQ^s^RULkCrDh&)tPkg=5)?9BqW zZ0U1W_*(e#A!XQ4)YfF5M$u(PuWdbPLN2jB9A%{1ikzTSISD58lT>5pLMnG;X0a$~ z1xhlO%CKlp@E&&q!+aM2c1~PqO>g-V!!Cs$NMON5@tob<|H)r-h1Oa1=@G)-pHguU zZIY_IF;WM1bSwJSb8AO_-?wR&s4XidCuua|nXlQMGz~dj?253R{Wy&O=)nVtdizlQ zbN}n+XM1c7+`!;5bq1G}3{YDS_}%bIu$OE1i>GI3b7XT)3K@JO4(y99=O*qkVD`OzMU6o#u+di>FK?RI}CM=uD zgMB{zZa*V8GWpmz04lqi)=dwj%(=4AzFA`r?_@NkqhV5P(CL8N#3iJLR&*9WlQ9%tmxr?Z>WBmCmTK+e z?A~UGf=8Mw8I&*amK-xPM?E`ZUe(^7-#)-P6f_lR$d$%FA$BvKF&=xd`7%d|;w2eh zUgEq{z6AY?x)$c8en~+uq?=2LsgB%hWrNH(2N*t)by1Gq8isf>18m9izhOK;tyug)V4$WZ&@NvT8o^~^Z_sT zMJr!ac6L?wtZu(PbS0mVdX2E`ChASb!+}+x;K0A0q_-nJHO&qi4pq1fUpRnDqZij6 z8amEpI`!w4h$V+Pu*&cbsAXB1Km3KuM9 zXPCTcS0I)Q{&xr=qPH2eJRo%c4sSs}K>uh>el)c?aKb>A>&xjI-u$oIPe=`%548&fzaOteX1 zm|xcQKG&<`GNFXF7=ftzxAfow@7HBH!v;r;EyK(0~Pw~CJUyCuG_@t8;_^Ow>)aWop}S`YTe#JPYYU; zT+6NNx$glNA=WCRp$u;CU*{)H9548z#I-vZ(5tvY3sDHB=|{U9<}pzWfqQZckreqP z-Bh=_p-ZGh!Xw3GZecgBw;X1n%+g%JFKR&GQ}0ZBmb|zNfqN)Omut}eRAMQDCe5kO z5TP=(%l;*RmxBv$mEwy@>5JPv;;lto$e5PED*kz42bLHAo|Ip7vm&J(QOZxF(x3zi zOj$oXz##_U+1R1gI&m-kce_1xjZaCZV38Glh0f~L$PT{lL1J=3ZX5h_PI9Pc zE)bA!JOgu30^GpwFE=e5Y*lu!5hP@XKdVvgM&o4)xF9|P3sDvHuu{zQ1kdG@Nboes zFk_b|`^L4&)QDC0%}q}M#S(CocZmOs;%af_ny*%CT#uW2hUEmgAB0gHoDCHD`UMsy zf9u#U`Uqq-SBM(R2BK$zn@auIP&k|HWXA0a*H1Y34(p9asu5sI;%(vlO9I@>2^Ppo zL;STPZ8&lb)vaJ}&@l#)7}YE@&{;I7S-(oM#Ra%o8^q9h;7!C0x zJ9unwX^lk7{TCB}ospUD@e5dhvM6Iz2XnwP$(v8#=@T8BNHh2VE5OOY^|Qk8zaWgM z@DS!*O1rrKRTTlFYpJ+cX;7j*pmgLRr#)Se?cmSUp|LSdK7#?9u)kN%Zql@E{Focy zZjd?T;$7D?tZ+f1mo`3Bs}LSN^0R{TXr;PQ)4h}Ks%NDcH}lxD8>p%*Co3dS$vnU! zmZ}v^w)N0b%=4~cwIUap@fR|GPV_f^EjEQKZz@EW6Mpca+NxlMiZvxPWoBv^<>+&_3tqhKbbYpL96z~m*vq#9i^SI9J5ifc za7mWo1=zX(J5AZG@OuKCI`qyD)Ax5<6*=pC(Bc|Gn7@e}MITe5!ueuFpMnc{0)0n| zxeg+#dUB3UzbHAq@zKW$yQ_w=>8lyvKs&q3@pW(wW3oagWFijOKFC3|5Ww>-*CK2q z6BWUK;RF?oXMJA<$LCHgpqqF_EgwqB6TIAKqN1U?tQ2~(EVJL(qN&ZuBLm>f+Co_T z2f*(qWG!ieU#U-9AT!v*`3Z8Pd9BZ=sK6(DN=IwV(k!~Rs>Q0<&Xdjx!}coOEOCU4 ziaEoQ?KJlNc5X<$;#avk}AknL|UE*+T_m;l&eGC;QN&Am$HAqE8$v7Jfd_@Jzy+$~;4AAnF;Xr1& zDNjOX;rIZNY;4J1eO*Nu9SHkkq4H&d0*VCh{MSG^bL3WZ!C|W) z5}O>NnY`xkO9j%7A$*0xuYtqE!;8)fLPBT1fPdT(F2pxazEfxbxewtNqwKoa)#&rfXFxQo(RWdxWL8HK9 zKwLp!04j-BAzSLmb5&n44lUQ(S)V!*?IDFONxWsh_f9 z*d18gAh6*p)>3yrL4o2WFTov|M}0>612%@SrXSW6K81AYMEZg+932}Z*RBjR!@P*& zq>kmMI-kC7>xwXy0sc;v&Vyl}-|>DddD%kXd#`e`7qQA$5BdG|te1>w2Twu@QE=#` z#F_VNdh|?c^&>T$TWsSWj3GXi0}-B}Lm;0@(-_}zyRbdxV(tJ1hr~8)UI478jKuZA zoJ7@|uxmaCXM;qb@w6i{6+L-fpZezmLAtX{J-4p$Klknn{m44aCSG;@e^A1#t{7EI z>^8C#&D?#YL}4rN2NAa~LupoDa1Dy&r>wA-#p!HjL1*lQnTA*(g0fNX>(UWG#}cY2 z{b%6-0@>a8;%5!Vd|V%L!+D7)_!P4)19o`#Z1@QK;uq_U}uE!dJ@{~3VEib?2MnB+M~Xe1g_C8m5qt(mM=c&+d66l%pXK0CzI2YG<~9#G-J+&m25SK_1f4T`?h7l73u*jV@d z1=f;PAsntP0}Ku+^W=88s9M1uvJ7~$hq|fifvhW&vJ27(vAmH9?8wN$ZnY29n}>NV zDYOSi&CI2*TE(}yOVTWwaRKoL4Ol)vaMz~D3hpuBYU z3gz=_i)LXwNNzopmugkFn&Isga?PjgwHLT`B>sdOGGtNT7CYA=oNp@iPRyN~$(r{0 znlpgZx_gQUDmp{BLwD&zBnus8=4m7`Y+WA+7e|GO>#PyRZ`qm^OVupB6lxmQn$23M z7<6vVY`zZumS4jk_2!LvK@|482Y1bIh`gA-(4h(WG0ZGb-+O?sy%c4be0d*PYQ0+9Xg;*Hv>_JsYHLu)deq=AzaM46k0p?3d13i&bwtbCk zdl1uc;CfcwdMNaV$-@^;4Fj0!B53Z3iNuo(_Dbq+!_*x$;XezQ6dGO2kr4qM!8<^&oFZV z+}bD`Nf3)BQYO2`=(gX#B^p&k+dPKSSsGx>!g)tVH*^lFwPuy-_NK60Y-(4f=|V}% zyX+VFcqdd*KOJCYApi;8u8amURqF&k;rvF1=r}RtV!RO>uQG`+JL?RxAe~>NW8C?C!hHWE{xde@+&9KF&PF0W30xg2X|kcjGp%VH)9l z9~4hODaeKLM@daa{}wx4$N`E0n)<@l&6uElGYepMG%jgXJAlj{9{-!lJ?dp-NKtO_ z<4NKACTLZr&LlT>1Uz2M&@R>IlSh!z_~@?Rlx*rgqB1i5hpgc8NW@w{V9$x-kUq>I zMwaqjjXO3dghld}XvVoXhc1n2_APeKX7{7UfbT5p+`60?Gg<(utrX#yE;}2U(l`7j zO(<49z`Y+7Vd!l%VpLOv-hqaFMyy;X166-*`He67}(aCJbp%u%cmaXXjP{O#9;$X2a>n zrbsf=im^sz@{sTD(194a^G6|WYh3%KqQ5HIdHHhn4&M3o<&`9O;;=!P+;FheB1j>R z6#8^T(H;NBCGq38P;H!2UiYMY|2=z}4di1IDSeA4wT;G;*Kv$OmCHmh#4Jb1n5*%4 zN`d$5{z|m#>Bwh8$NnloLoDtI_~>pIg;weBz= zvs;|xMPiBqymrz;M*&0EAm1(JvDJw{rWN1%6hu1Z1OYrdOXTjR1NdrhkRMRm%_d;?tGx5r

zD@3vfr9SfH+$I)$7`%rtHEznMGt$}}L8#cp^WEymN@hR&qV3jJlcReL94Z8?QEJ(u+x>FLcD;SPdV)@u?r5_Rp)+9N?c z5zsLm=`J98-f|ZhDf6XG@Sw~3<--~0HcN8$O3=H9T{4CerIBj>dm~HYqO3QLOuYF% zBCWeTy4HM_0wuy4@&IRvKwR{U=bX2xI^0wIb?G5Q`zDaqtX-(38V%7wJQqW2hf&v8 zGOr+wvB;`IBkoF>U_lD>rdVGAa)Ym>TaE-F zbA+O2&bYn~Lyk=q9+@cMXY!56n)s)fDGEf%a5L6r5V`yjeHQ*Nju)^3WL_cU06jK` z#ix=Z$QMS?6rh?tgY^V(wD*uUT{t7jI(#DCLlDdDl#@arMy3PXh&D_1bT95fMg1!s zZ?RbZIkbJmA1ZreMy;ag9z7TKW_0%MM|;dC$S`1e_(0bF1Wyf64-vi>rTfG8p)`q? z_Fa`50`=ADt^=#3*O=K@jmC2Uf^+BX0!wPYCNvB`k8cAD$(}$(s{X_e=907_%aOxQ z$JkrkVT#*-!Pj4i@2DI)$m3BJQa_Tbl$3tCsM?^_I!cAdfBNiM;HX0* zV5{(xaBU5gVRfFFZ&EFm+0_sO& zFS@k zZ4Y=T^fJ}LNJiCBe8m39pq2rMPKWK@<4!NfzKb29n2$Di(K(cmBtd8ZUw#MXHEb%qBAJthc%rFHw{e z%tlPCfd&#y#JF%d!;U%um|e>;xw_D9$p6`&FK5?XySf5sY1^YcsPEG%7iSN~j~zn- zAU&O*oPsw<>^YXO3XES%D+w?EZNz6IL_fY&`vWe|znuUYm{w`(XG5a8N$7R?xtB&0 zRtO(V(6?FPzmzhdUar!ZW4&*fTFbqOotWAS?3&Nhr)>%TL&a04N%^Jn{UGvJ3?=+ zm#dRv;ptsCJJ?PNsm|ynq>LHd6YS=2pxKrgv^%Y;3kudr*0R9&3(8{@hRwvpD(F{V zV)t3XyA*J+CoZcOPHFsL%47Qu+@*R-y~}}xqG)+uoGz+NECk+Ne7MSZFx1 z2RsZ@yFXJaq6e%zXV!~qF+l}kK-M}LnsMLA)br;>L&!B5uGoClViyi!HbQFMNp9s- z&?!jF&3^e*qkiB~OT@J6%csQnn!M#TB;I`%jdVkz)y=hL(Nm*4_}O5WEkl7`DsCLc zGY!xbqd&)5D{(IUU-{HJ|BGk;+ar9sAc68tG9gx=C9ENS$sEh0-rD0k)4{(@1{i!j z*_Fn5o^VWqP01a-`a*{^5FJxNvnv?pTuc9Vq+@9^l)|#lqaK~%9HM9WBfUXWt`f#;xbEAyB zbc|1_wsz{>5tT<1pJY>~3HPuNBL*fQyQcMAB|2yW*c!S864KghbBXRgQ5er6@3 zGg@|eBLf|P?FACm(-EH}$t9Ii^w8Kch~2C%p-9?qP*1cLFD}d!$6y7zFdlrsNeVxR zc4zW$L?vvQm9`}|Be?PnC7z+=t0kYz^imCYc^%xN>Rt~j>zYxaoRIDHczs;v%jOqJ zO`q7Mt#TekCwuD4AnVb`>7@H&$#~P=RF_5{zr_9&AEA2gAZ3aJaIj8IWthvU$2(C@ zQD2nvU9adZb^I@!mMOyp84vy(Un@Y!gB3As^3>2&e60Q_j0xO!>PDeivwtg%pM5Sc zf}ButB0W?P&BkJx)p1^iICU(lO4Sb4uCWb4wL+LHlTE^tk?R*7{3KxJ9^bU%w!rB{eCO+rnmIG(Du_39rMUGa=EleyOsmb=L46g94h0^5T866Z_rvy za%8dri#3MqFEJi)G<7WL+R+2ge|RL&EDv^MA~lV+#i(E!z}HNAX~j)*?dp@Ahr>J+{_V0ZP@Uu!AqoRjkOC$MRK4hMdWm_CtYDuL92QaDA ze8oKVHnvu<2|d z2TR+6WD~S^pw=iuL6mx)WpCgSo*+_O*4~*LM4w1*(Hnv7{8vzrNg% zR0}!~QeIq(O`OMt9ZPJ(uarSoi(}M{r98RCAiMiIh@Aor{X$g(q8IZEpmydBU06>t zruK%vQICOsf=VP>058WWSD7J}np;!YOnrv5Jpls?4T$AMl|w@m3&iL&>Qv}t1`^!! z@$Cir{TKe9k^aB%|BUpkjQ`93r)Ohk`Jdtc@&6gvIsU)?e^x7~a@J)F&EHNiGV%O= z=-0iQn;YFWP&ddwTS4IP{|2=E+d7#(Gu>vlpC8X>zC0L(BYeHhCz?*$sKDzSi%bmkj=;t+*#b|3_}It*Ou$6Q*zo@Ehlx4y|DJ4c{rxNJSy+&c_I8Ff z@3(ZHx-5(+ffjxcC@54ZGwembJ4Es&Y20jT0oSeH()eIp8Q5&Tzl5PPcz`AXt^gG1 zTmVc|{^{YF$;p}V_qG2BylV)@ugTGYxs@dle9OoCGjns}^Q!=U0+@zZ`zGdA`xCIQ zQ$&6f>2LJR@EpB55}A_NDm z%BEhy2p@Hs-(@;cQ_`50p7DmJ+-|etkobG<7U4 z;3(;7nrj4qzYxXyIyO*xKxygepJ)@O%FsHiAwfRWyxAK#_#v}nk&nUO=g zf!+@wltuZ()TF#`uh}0XbR?j5;GTIV2Brq!vvqdfk*S&ScLrx#TL0JIs1kkicRf#x z-x8^f^Z)>9>E9Kb1H<3l4V~Z0ROMeXD{tEXD}U%JevUpud#^cTNIWdW5ne*QhLvt&O!~537 zUrRN%?^l=4UB~2K4o(R(A#5ol0WPP^UmOk2aE*@4403f&Y%PE(7@I8VU!R%}wSCqU z*AggvvdP{Z1U##Op|{>OWoqi^>TBujEC4*ON4muPMKQfBK^*Gcz6YWvuD+#jA(*&+xT7xtz_m_xFJN9zmdU`10b?{cip5Xbg5IJE!kfpkFr*A8ntX5z}O>m6_#*tz}dlGd$x7WWxvU z(uX|B+j_LGTh{i?hF0L!h6~N6SP7^V2j_kqx%o&(ULMpCjcO&DUj*;l!G?xP(6Lqe zL61vE+F#xW@DKH~}&qAI`gU^J&18Yr~C`L0Vy+`$JhYUr7 zuEt+7Yn8Y=aew*pl>xWOwYagE3WCdqX<-a=sqH=d)fzCj4m3WQZW@%33IF^^@~f<* zYRIC#Tgc6SeM^(zO_UB#>o(cd`wlH8PLcdcCwj*- zu94TpQGzPKP6AD1eYt0SXwMV(BN_U2B^j-3TgXT)>*F5QUP`#d-_bQ2(l|%3RhWU4xr6p#x7L0eaYdqr0YX0b=?K69dYs0bi z;2FOIWH;H`;cD`hgKo610t=zyV@#2YH8`DT!)2!?*pYGJF2%PavEKk^Xa;FCayAoA z3;>{*z+D(_=kgWXQ1}Iy|aOj)(U#(gL|T`Ov2R&meZG!)mn9kuV@9doVZJbFj+g zE(wScbAf-Pyn71=okL(5s)Eav zJ{{*aXYgSPK&N+b`l?W7;4KT6w&CVzb*fywR{`kj3#9rj-zCZT+#4i;qNnt@S#)%) zWkaiER=2A4Nt&HQmZ`(2qIPZZl(9E4SCPTNS;uxt2IAT%@WW_2Z8nw}qSzHWLS6LT z>ew|=wNaP`a?Jsy-eX-yhpSo+sKaik3uTce%rF*tm5a}kxQGvu)Dfr%pe;qy@)P+1 z83ZtDpZI|uy3-)vs)sdPPG)h;_Z^HI4HMilc;?rWK4yKda(mq8CWvQh+PA&u>UW|a zBI-qEl<49}cm^+rHz%EK)uzT^F1|0mEtXoj@4xAK}cUfBxQZ5*;L?(&ZXD9iQ|a|>|Lk?&a& zd`#>NX{o@dsT}c2<1PG=rW7N2bJU4p>!dUtg$X0?EgfrJdGg>e&8*XEmrtUS4WM9d zC~hBt-|fpLd*yk0U3p^s!InalEej~>vi%TaLAm*^WL(0J(Lu|26+DJRspn*|!A8l$ zSiC*Im`{S};}C?i(H`DmO*4|s$3kNPNp6W27s@TYtCh#xk%rFy%H-xCNs6m4iO7Ml z7FxM@eY38RaahniPu*y{4-woi1IX3k>*E=t`(*jO$*|f&+tejJTI%8kq$5A1;{p*Rs#=)dMhT-_%hwUHyT zGDlzrHPx>kCPTq{BV#i045&F=2ay2p9Ye*ayA4w?k^8I52cxU>Btfp3b2~ z@g#i~6`nV1X((qDppeoYA`jPpjPpT!uSLj#<4+3xEl22s&Ls>)N2q!(F=*nuCvFLx zc_7+apMiD<=JXWY)8@FvqkmG_L&O7}g9`69CT(8rp2#09OPg@<(s3ES6;yZVmn&ArFoth&@t|?oYHiHP7fylFcFZ!^ zc5*lX?~SWB5nu@{*dr&{RQ=O{_jG|4o@iUwjS9@;m$#HFrNXJ>Tb4zrQ;+A;paWhYd;Xnn07(Sjjy`2fH~=HX{X!~ zc0558U$iksg}TSo6|XRHXqo9^LGApZQQAEG3!&ON^uk#0XRtF_AHj}HU7%^JXa?F1 z=orA<7KC($vKo5Sg_10PB$XsrO>6EE7v0r6iUa21?J+%phDL+G8O5+Hul>d^S>eo7jKh=BZ@yZx~Xw6>BU|+t8 z)GZ(V0AGXt8t?rJL2=8TO2^dh%%7%O1XWCgl@Y9o-;;YTj_OLIQB<#KTI+I3$7gXP z?#qDtkFSqT@7r2d9z=^QMP@9(j9v&)gJh)&hJhm@)?LJrBXm- z&)kdxI;!qqXY_ZbY*2PKAGFXd{^chV1DMAft8wVp@m!s|Vd~uHi+a!o!LpjRb znc=I3pJ!iXLvCh-WT|c!g{sx4uM-Mz!hn9cg_-JY69GH2(+ITg z-RrjUU;7QXM5PeJv>UKPTQr9YafwB6kNa+y6(7#*F%eRUUGaRWW~EIc@p;1VsZTiY z`S89^PcxS5x6#Z(zeJ=YPldIYA_mn0o#^@5Fs80Dsms#akiQTEPw(lRxzB-ho}6J$ zkqnDs&;Y`*nWZS>&#D+B)!kWwKTH_kko~!Y14Ydc-E+)uSrPT_KHZPmEjz||*(@t+ z7Mii8F*Jtsr00}iT6qxiG|dz9G}`{WN5j=ME^2@oZ(6TiuVqd7T&h2iZQ-F($FJSS z^%;VTM?V9d-Zu7tf!`&{Ka`c3{_$&@GO3Y$S$9Kxc4jG#$bu ztg(=rAmg=RuG|3!-46OhX|q8LX82HM=T_^DleG|+~AmBp)`h>X1PZ^$t)|M z?a4RQskz!22nC=^X&Ua)D=GRSR6dPNEJBw?Lc(5NtuMX?5`31Ug=@#@x}6!rl5NFX zR2mImgFM^1J_&Hn)Grlx@*+e45I!L_{&ZlV;^4YXtVGUu9tm?yju8sol_t$jOkVc| z8tb|c#F=-;jWi^~ofj`roK~+J_>gHjlfl7A%h79j#K+TTwGjqdf!piyfk!Dm%SFIW zM~lGuQHl5=#>+t~n~uvLdOZg2(N}RO#%-cc!;f(-Wc#~)rau%e?-2~TAO4x?tNte} zL!bOkUr0LHTO$W&>DPi|53y|)V;@>&DZ%XGAjUyNu#QBKjB@%BlnZ*h+nV5vNjo%j zghcV9sxs|M2k`}goSmB@*h#-S$tlsWJFC%+#Blf5(DW`sJm9C6h5dkNUKCHh+G`vV zEetvGg~T6AchBj!%Sk9bbuSfL->|5FZ%H*>oW(+yyF83{t<;XZiblMs3gVHyARSnL zAzFN47c}9ZEZgC}x=aGOp3hcP(>#Tl>un@>;8oMHHI|v5=Dx~c)ErHSUxl_2iB9}E zGaGR`;cIjw*i*f^e74UjkbSLIWWKHC#M`$LEU=p?Nz9xeEJh)1X2_svOX0P-{%X`z zB+hiisC}GmyI~&*`21(|bM0EGxiG#0l6P+mO@=$7Gl>fF($&JuTfc4B&2o)FotBr= za=j6huAA%@c+>``Gc5=5v&RaRc`S#GGE8qBfmGj+$>&;w z0w85dy5~Ujb4=^aM_;cR9QD6mUv~}VQI|SB?>u}td7+%lxz9`vp)GD8oMYJD5|rb6 zZbJ%{Z)V$g(#gL2l)rVYu@wq)QM++XO>Na2BB2as@8qCyX=15_?BtJ%swoctf4{$ z1i2%q7enGLpgl$3Oao9Hg33zpTZ1p(oX>$Ol*VYQhbN5^&NU?E7k3<^e$k~z1v0Hf zTsRswTan|u0>Rv0U*2qP*D^mYiN=PM7y+FXUDdi3G?l1$)}z7_< zxK1G?Unq-@HJp|$TdIB-^#KJ$$Wt{ito4GDWOt~Y@v_R70Z_Hoc%chmDbzig28*Rb z<((2QUW!_$4{}I2urg#Z%+<|E#sW^S>1(rW;X@DvB+*>{BH=&KD1umtdMAb}O1e0D znP+Wc35l4?Vso|Egl~_&eO!56QU8pihN7*V?+qTvWc&_g{Y7Ccx6rYFeg0-i_@y>6 zUZ_OO_`5zIRvz2*VUDWZPO5qJdrOcRVN(dS)I(2uhLL{q4oZu=kg$XrJT%niAK@<0 za<2y5WG9)mgut~wCx>x8nBuvp@@JUeFd-9lO-JE6Teijs4(O6%U1Lz*8=g z5=Yis;^DwcNAih)f#_idv-MxnHi8Ux%Q8gWS*PymU&bAOd=D9t;}6muFm`Er`CJtd zL!=QU+FNk4hZ*u-=_6Ke`0kx_hawavxHu`pd$qGCGW~Tz-zpvPinNKC%Q<C85sGxm(!5~^Uw@72doMo-p+6)tmfT^}0 z^$d&4l7p8Kc`8R1-C89nN5U zu)BF&Pg0!?TBg1V@%`()t2|wS(RzQC+b9p?y1l; zi|%pW{&II(dOM6B++P5_87XIdM&)tMx5`VSD@r09zi}W<#Yl%$hV6m5=_YM_q)%T} zcX)*s?6*SiXeVlTNFM4)K3@t8^OJ1~?Pj?rn>Cu7maC(b0KHDxV@DK<9RmtPO|+R@ z(+%wQ6Fhdoj}q>ruXkMAmgd@bKUQQz4syH5KaCYyr;xN&$x)M1Xulmc27beg*=ntv zY5(oIg+1A^A=j`!MGJi|o0fZ#g2&IbQ9vncZNl-%8I9fgvSsbcdBe0VIWXuc%(!U~ zz#z+8UQbP6=J83)TbHG>Ml0VULSrCQqFG||{ee`5v1%Vp@RDI-fB2_hK7>xcF@P^^uiBx!}FnXyZfIo_9O1IMOXaJ&`xNZQ9X% zZpn}kQ8i>yCdoHQ5_>S}5NtOIvj=+O@p}xdoI7Qyv_`O%MWta9dTd!>(ulc+pl59P z&pqby^co*e&YHAOJa;E7zZ#f98g#2SVa7ROWPr2%>{R{PyqIa5XNl#zw=LXtvwu6+ zN)Zvof$*}c*3%CkZg`<Xb{(Ic*X4P} z;e{4_NL9hR=45C8?e$1}AsmV&&bf9y>s5h>qj%KxJXY)TR1W1^;xDFIYw~R!uWEAq z^GI9l5w@batyUaptb>Ja=BA@JU^e<~!_lrNKM7t)96s!nxMTBi`3fTJ#3>Coi;_}i zCus+CSTeZljPX}5=?6nja?M~lTM*R`kr$i#p3E@9lB4%A)_ljGPPO1+X2fsrgZSwt z?@Wn#VVRG&QI>o^ir|&XAK}1yM{ZJB#kmz+-;|yCLCM-d9yQah; zQkKJ#mw9F3#lv0(mI}|I2ZOVSu2IeV4 zCh96Lz^YZw$sk{U|7r+}Ymq5->D{EWI5C5MHBw*RQEvgwromEPzp^l9jkH{d z%5p1=3d76Z8mUu7VPWDysbZ z;d@E)Af=~QGh;F$gUIs%U|uVHT}Fbc72(ZzohNR7dDQ^!@TARD!Q$K5w>>LW;0SKLalVQ1s7|BX{$&_ZMO^E z%wor#5|0lK?7%0{))U{T!peta*As5Sdjb*t)e3<7=}+hhhfz<Jg3P*Z4|^2M`ApX|S4+5W!cyry_0+9EEKeRMmh6p#RdlP9u>WG3^w$4vnwi zI+=y3DAnVI}ly?2V#LYD6jDC@bcRFcy0Yt2bKP#27$n*hwGk71lQQKQq5hh zO$efqr7495vqi+f{GfxfvlFIy&aH+P54igXpP~YjG12OIRw51}=)zIE*r6_dr;c?< zUZO**?{fLUrl`rkXnFMVp_q!&tF;o|;kMm@IhQq(2XC9@xR5)m zF-na=InKSkB4}8LFuj5_rOei9G_g&%*C!>VjTK(yDBkjv{uuHb;9@;gZic%;RHLlA zURn!uJ~h2Gd1~7kW@Wf@hdriPzuRVm{Hq#+nB9I!e z&4)&rg{Tr-%6HdcsJXkAUVO{9XXPw`|ECSfihR*9JPxjm8q{LHaoK!M#l{7E{wJa` zUGrlMC>B{>UP*_X?+b~FR-(=RI+J4YKK4haRkkRMpE}2`v`jTucPKM@8t8+b6+cw|v;}16tR1;R`PBJKQQu$Y5EZH+eOuvY*0 zr{Jo`-*x0}Y-SOu2c4rDYRQg)$&?lT;NXDM}k!ivleC8M8?q9y3Va3^By@?=#rzqM+(bnqr z?UL{N9pG~JXs+-JF@^?MVKpU!OZj+B(SWabffn2|mx{029#Jz|f6_9k-$-6Cwd699 zU_KImj=uJ?0#z?qcxH_ri_%YL-Y3es8>tEHw&|w(h`EcRtzIR%+-7S_Q#A2YGu$z; zD2fOkwe1=`mD*}n+Y;_d&mB596k3do$?T`v)j5GQEPrThd*Szm`fASYh746604-rY z%3CRIeD`cE?vMy_C+qT3SHi5W<+F7iPF+F;gr0YU9StEGBx4g8a9D?6MJ zm?jNH`jEny8R|Dxg$a4vl7_P}8EQG2*QJTYbR}!LP7N*3ZrQyR7V)oQNDim1vLWY* z-Q>YPs8_A8wGRTgBE!{;RXGCkC|`qJ>_(D*s{+aag&dq(m~=->=5>y9Sh#87Z5k)} zj@IN5L}U|WvW7IgHT~adqL$aX;E$Qd6^-nPnc-a!4Fp3T(L1UQrE#acW1Irz9cxn$V`)Qn~H-@hc$jC2AwF;YA;W%i}OyA$pZF6ODL3tJoZxjPYUDnXdL~x9Km&q>yFia7n5& zu0zB3I(04YVV6_i`lS<{KaIw1J5eh^^E59nCq9dm0Kozc6D3iAfFdDp zANd)lB_-)0Ev@;X7aH;A`9R@HjMjKU8?82J$}QXJD{c0ARil_OaxhqJKfFZkJ(yr- zJK=@a)Zq9lxZ-=#-srFa6u=L%L^qd%h+#)<)RO+bfv8kd^Zl-dtxp`R=(|@EbVt<% zN5=q-^TILqyyY|WZ>T+>JqO*!UCI9 z$U&~f6yj#_VuNY~78+DMepG6ZONzmHQ#4q$P3`)F2u9{96)Z(C-wh)U`6}6XMOBm< zBDAh^3;`3w%jd7Qg+zzRB?NjZ<-5R(U6SXO_gXj)Y=#Mril2Mjj+n|eZhkU@uDe1i zBQRo*J;-2DP*lQ&Y2fF%o6&2v?kyvo-^*q${IyhXWze*UCH0Z)Sn?5>J9*)79IH{h z#_YHre$9*oO9|PA?90;OlP7zI^aL#AnK#1ajNp(@@R!MI@3&+#fF^Ce;iX$dTuINQ zP1=`-N!bge@gyj5V`nn znkT|-E@BnhQsTJ^f6j%y_gqumq3~J^$7E0`+T?7pkX+QhwYCFq+5K@-3nUGgP18!MjZJD z%#tm)^dnjKk`RhdP8pSu5N389;h-v$lSDQ)=RDq#k-kBhc`ug ztDioq&oT3LWs+7FZCRM+VEO#yH+n`|7t08FcL%gq@-Qq$e>EI;$?Jei)X+}jr;9ts z@ntY#2Kv742y~$Iiv8y%X$glpaN*D@69uGTUzkVa#DOgBLj5ZIX$VALb{PSaaiTN! z76P%YhU^$G@bbEh_*n}+-+Dk3*iXahuxcrqSZTjxAORIzg8k+v?%B&S_?=w{np=2CU7y*&0DFUgA-LYT{#8)@S|#CiX^uG=jSu7W6MeC`y92_7$>t#rAm zb1ZQcjd`}QVC%8uqN6{z1HrLBc0fH2rto%&nGv0BrFZH6GH-nOjG^G}esrIG_NNAA z>gZ?ougs+p6C&+SE3)X&CZikW0?>|z^Bq&A5}^n2cmS~ByF2{@Eoov~83Y@+V4q@j zl5#rI6Yq<3I);(`R6qJ}9j0R%QXcz23I0(x5%eW;9rVVM&4%49D`3QY^|90in!N(& zF${b)+pC%1xm0@GCrs+5UF59HVd|s)^71i3JFrQtfUJZ`6aV-fcHqp{*MH{X zIzXL-LWKX~P(Q!Dfp=700VhA6N{>R}x)hAqe-Y7tX&>v*VdW%m%{Fm@T_X%fdkov% zc}W7TfX5NMTPTV2#3SR482V$={T(YGE89e7aKq8!mfa+7ss-LV=B5bGY?gj0>?U%K zZq>BR*qFj0;{Hhdhs`@|_bTdj&scwkX7^>xHT^E_n7yM+kT1(YB4}fE&_T4Rr>Acm zm2|dly*t-Eq#lNlJC)9O;%u5a=ezcrnO{*UF=G?UWi|cLo^z7a{#Bz?&@KD+K@~cW zaIh>n!P?$Mqt%dk6?Z_hM{2F$y_exSRig*a{A@Q2PK5Q(_7yEQ4;xi`$x5&Rg@m?@ zkhIdm@8Yq4JjlwRcpVTCD+^JG4;a37Po#z)wCXqj@3a)6(|l01>gQJDyhj?(Q6zsg z&x9EY_G@!sPP)zwnUtr6B!B{E&hC9N$Yl4c#oM}6hW)e zAnV*2uIyp;)Ha&_eo-2iPaW_o25GYA$e-1UoQt)YY?>9G!!mmhjBry??%1u7Z0jFq z3RKs;-R=4Qmg%A=Hl&lY3hWBXdXAp88qe6ilB5vbwU9P@8Agkg69A2Hby3O(69k7e zvK)QMMb5GdwpzYr#dBV`LCy@6Rqz@ImjVy-cIjMlsjbA&6kf}dVY$tk zj-RKwv2uYco|0Ss3^+}AABR}-s)X1Hso{2o)(lJjsW9&Pe%~H?5uLJ}?o%?_L<~gW zK=k88QNtmqSBPa_^XlYU5s%I5WvIE(7Z;Czn|(<2gO6u{wR_7KdO8W=-%$+gMpSpq8WGJ{P#%Tk3?ha^X2he$$=*N(RLSR~-W6Z@Y{V5TaMg{M zP3LT@9C;0J+chI{vP5K2-R^k5#WkkHF^+SlK_MiyVdgngp(fXcY|8IOHKcxgOAdgH zJd^V*$_>tUBAs~xw6jhq2`x*o#l-zwwlue7bp#TdX$By9U$|Cl( z33uqj0vCn!!${Tk7El^Tcqhsbq(V!926Vy~Ru4{-Ire3?eK!7T@JvC!iZ1scWe{9azM?BV|cxizI;{2X4r!^21Z`xyqqa2<>a>Q$3{XIx{o_ zJUX3c;$rC8OG#5<4xiup_QjGiLN%T)kizYIYK~k$b$b-2{oOWl8DLr5`FomC37(Yj zfl}}GGGiq#cA4XEVC`B`F5AXseDM{_I;Oee5e?wgdOT+?&A`_Ep4I=dMEQ9CcKZM? z`XY!EOo4B&xk|Y1Or?eC&veh1cw+4BZyv$h#T?wYfsp62Y@pp5<+p6O{w46a)0 zHY|Bsyk!-oI0`_x5k7p^GOL(`!tZ#zf}nPWD3z%$BC+b{3Qgu_Q^Vs~$S7gWXFr zm9N&ZE~gybBgZV$oa`015aY|%s9o=O&vW_3k@#plGXi}GoZ2*{QB(B2RliM@uO zkdi@(y{${%qKwB@CSvE%&gjJ^+k)n)YU=1-(B1V-aOl&Ad0VOz>&3L4TT6WT;6qNm zrqB75(eta&yME=R7b9n`tc;JilIg+o7!UMdVh)uM(PJFB`u~Wv?7P{r2cIN!KSn#+ zCvnt`(MIrNwwOa!zN0TsY{AqwH!68M5WdTjNB5e41$GC8wr6Oa6c+RjVQUebP)jrh zX);-#GzO=}KAu*N4)ETU;&im|6>59wvG*kCOaFQ#)*Rm|j7Je&*wC$1L33;4f%wX_ z@7UI0(i3G>>FpFJr|RsaaylWQ?xEFCC~7E6_L&yr&EYrfWY}5sZYy5YjgO?`IpPg7 z6oMYO)QkTbE*i}n`!g&MtF!A;JrTIzFG*zyEz2Zn#&PyER@!U4eS zm04gXaz_fm%@V0M523h%{s|dLy3!{RFzy*NsX9Tp5hU&RnqGUo1>b8QCvzzZwg!sx zuJ}~bQm$zfrFRtpTxnHm^N{n3v)N6 zVeW7mj68fbo;4|u>F_%a4c`}KZTKB@AYhHlA8c*E%f;qOb9m2@7jXzg>(+G{CaRBh zjmvGUOW;i0@HlKY%+^{h+?w1dG9jZr7reJ;BhFQ|3fxQJ=jzq+`Q-%RS{FY>Ja zZEy%oH0$~iu0{~U9wstT0v}|#e|wB4Q5Xzh<^>K64cBV3nqKvjrdx#cDWo+l<8nLP zSJFciErc1kU*A9)K!e9J(P``%l5p$*IZ?%9on0u5DeK<3eUtH9QbiMoFReph(|N=b z3l1m`5*&dKO7O@>&0#fHu4mGxnRWcV&<=JfKy&CAR<&?xlO|8dq{hqrX!9P6j-4zh z*eCr|q#6-(oy&#p7vuGyH-{XORR&S*Dq!?P>vSA5QlRSa==~b;^Dvo%ycD^ECO!LP z1k3QQ7b*%93f*OjetS?YDvRerDrH7+G)v>-x{j?Jm~cf7zg>-@zj*15vN4l@w z3NGf68Qmw^;S||yI*38ONX7udq%8}6_$(Y`3)RQ`cu4GYYIL}jeSW)S6B9j2Q>Wom zQ=C|~3)f9`MAA3uZCA_i zUO4(V3E0$NFVNV2sM~TbLHW2#B(h|ugW=d17U}s|nzDyQ(s~XKdxzG=-96z+vqNN9 zc3_yB4c|m?k>a(a04cj`P?=RkJ`TXK3W*c#k7L32UII^j8yJ6@n%dtp5V74H1I%L` z2K`WOfq&$OWYB0~Mc)uz%2-^#`7%dDM=LvvoW))^`Ny~UQi%N~4MWIV{^9tOG;ydS z=)}UALM?%pELB4X%k zy!2PzTQFc;4~6~`9at#iJJIUrH`=UF=9HG-C&@suh4`|mh_4a^PWgJ&ve{pdQ%+Ce z^{}w&&zL{{6JFS_ z3;Cz;42+d^=7bld-h^<}72cvle$NrWaHK_~5_2A;3_^OGn~7Vp-cPE#A}tDDtl!VA zz(2d*R=!?p9K$9YyLfhgz@dND@CdwPB5bQFA$r0a?V{FK!SEPM_#-bjzpcW54)_k11tERsDLBR;1nXSziMT|MLiZK zt{G6cvB(x*5lKQk_N0ZC*x{=Jt-nu0boI_N`4a7&v|aSPJJobNVPEYFlLD@nt~uNe zOaCtTHDbx;(&+r5NX;^}HhB!p03X0Cga`3yMx$L@zCHfZUdaH^0+Gs#drKOX4(TYYn@p76OsEG{E-T*d z_a!h&3n8c0S(kcL`FoS62pO4~3%HT|PsQ%XPtFQ!V(IIip#~um>ay^a}SV_utPE`|Vi+$DH2`R=B zkM&zlkwtW5&%$tNZaN$sye+Fg3}%GZLiCX<+7y%%6H%|CO{1oQol$(dhvGO0j&wtd;}C&H`9dn{OU>aa=is(#dwuZ^ohSTli}d{VuoT^ev2u8As& z5(j9-Jkxie&b56f*0(!D5}KTq(HXDy*7*j++3Pcp44T&4Y-HwAhYi8`0mYlf47en-8$P zH>D^2jW~qzp6+BfUAnp-MY{?+zUZ9mL}ucYa^~bS<7ZcU`-WwTbR*%J5P|MZ7mv*Qj&@D^+MORpGwv8`Jbp9|C@P>L}KDa6E2+ttZ{jE>oB4rR3Mb=`&|W zFes`&>sP`WE4ab}@9!NMYNKQ93DDoC8m^4X&g+FTpu-n1cU!^Re-h&{l1c(1Bk8Wjaeq#N9*a)_boCZ>=yi<_|d>(HNzEjV1vMK%TS4@J9*^WH|qQ}iLWE58rtLK1kzrtdp`C{ol6X%l7w@0LeLUQXw|LATtj(vZ)gvKAS6-dT9itC@=UzG+{CWNsNlN z9r+Ytjs8V#0BRs9{T{78UV`07*=AAzJA_3bCW4{G2bb080->##U};@Jo6SuW9o z-^Gt0gg0ex40X44v~;E4uYz_+x^3G*v2Nj$FEy$F_L+X^C;(KT{%HO<>XHPjc)Z6M zmeQHuanPVTu9;}B`3bm5sX@qe_mY0jPZ*i%5U)tj3Uz1)oOA^%)oLY^511fnL?!L7o1k>OCb{6iDb=8WU|FAg!mVJk3-F0H;=Kpk`A5}LbC z4`ZH`L6@WLU*!*qjx=S0b){Fn^Ecvtgzaus2p#F7)pKLFd_sFRx{$8)87a%n_}@5= z(Om^Lmk*BiAaL2_J8Huvg@4g;Z*R|YKJFazRz?pjGpN-~qH^(XjoMP^jKN7f5W2;+ ztL9C!W`3V)>Ls^#cQ+HU7GP8C?09I}T@k9KPx2`Zi9cqQ|pwTKGtRO@kHw<@`9e?0U z6dbYnCtVJO?J97G9#S-5${H={_z>-hQms3{Zt3CauBr%CEY!obi?&g7s%ffcKq~?{ z1?CQK`9(-`Q1aYBc$qQFql0sRh99%-X2%*Ou}9lL{Yh_QT;Z%Qj^(XywC`}omhnOJ zds!Szi$$R!Be|;GZvRvQhUBJ|8Y&MLbg$q>^K5%=BGDPjgdXCqOSh5zF>iTDBFZ6m z0^Jvno+`LXvC4aK{|nLWnJdyl=STrnj6zY@bcvgqUP_>Pixrv1{Z^*-n2da*6Lu@J zXS1%p{-yL&=|*;+{oOutJKDbZpA;zq!3FR=QbaJ~E!Cd8rL=vH@L}P#dHh!d8~j$G zOT2>>0;$BA`m|n(pgV~A>_|IaKpaX4lrD>CMTk!iBsHFimy(U4jK+Mqs|}81ZcX2- zy7A~271oNWF|xIrUPjT7J_s`y3|O2m*UhYJDHA)%R3guX0in~$=-g$3}C&_-{3yQDL!?PdT#iTm_A)Xh#dw9V-(oIPG9Sbm8jP z#0rL*24yT#db}gRs9|HMA1!Z_%~a~2vdrlYQ;8aTN$dKA)cZ{XQhfqMf6%ZhWSeAU42M?VrS9Q3oEs`>8C95Px%j^VAQa#0`MZm}33@kM;rV&TsRE|CjC(~& zsnCP?rZ*$^<@ZqV+MH{wq@(YZ#;DFyHjN+(LQ*bO&aS_s9`85-qTNwNp`;= z6ctp5++~xW1m7iKK29N3GVw&|E+1jt%JAS9zi68LN7f^D8a~)DUi^j7j*v7PK@)JS^7)mEF{8d;Rq}YpnYDNG4hKuTz4x!w&xyu zgj9SK{T1)KC5fZrA~^~O=?h@1SwwcBq>rz*Gh>ntBB>751#+~RRM;LuM8mye3|5yu zQMiJ^H-%C=A{gHZfVoN%(1Q2k+kNO{$b4fTJd`#5HSo zO|Dnc36Pw!YY5uwFL`VaCVq{7PAh^5Gb5NB;uD~WofaZaV?P%937SPyjGbE4D1)1~ zu`!mx`Qv#l@5ki*iE3;4!5X-4#6%Y#)qlJmWN`c75C8VlW=vfJRrtP^W5?kz9AKDn zWEVErxyKaxh;Vmqr1z}4D~Wz2(usY9njI^g);Py(fLA7|8bOx|6OH{X%rMSa6mV`w z^4_@y1<{)ac;X4lFe5jMp0>(2WBHsZ$C%Pt=qhW(u(=b3&B?u0eu@j%si)btj;=K| z2KB@&8ApiH3USA)ie3)z&$C90%D*CwYnq}kFAj*U15#N2k9ZH_UK14yw+FbSHy9Qu zXdOKW3>4IQHa8W32TAhkuU?gLmD{;(+((7!fr^%|E-wz`WI z|Dg_4ji;wgr*$RgDG(V$`w(*yT#gi7wu<51>o&Z%gtZcI?%`_zIKgu&R7U=#iZx!j zy?3qc;?Y@~@uH|!*K0kZ-<}DG_YOUcjf)x||5512gnLH0ctqQ(Ege3Ocf?x7N;3<( zsb0mQlk(n8G$lhsfvmf&D>Fy8%*C2-&$VjXtgTOP} zmH61Kq(rdq41B{$JGAg9f$zIg)<(JAh=u~|H93TG-N^X!JiDqiR@Q#0>nVq}fep7J z`}-d{N#e0d@a3oKt|8CCdh19}*~?jfW@%5oD%czLkMiSqy@OZH8(^eqZN|U~q{JBX zUoDc)>STIl2&nCt{wW~_>Eh7nc@p64?ACJB!K;WT+EG+h&c2S(27IlQ>H~*(J_F}! z^mO++Y^0wIajS5`ShwCja;f+q5c6;{kKo)6zJnn{3r@DTA~>~rs|Vfg%1X*z-;A$3 z2zrQ=Aj)LS8wL(02ZFx#avAGD!L0!u35Am=6sH#0Kpx0);vyt=6m}l`KsRSO=(Q9g zevv(~zI>2YQp{oRE+As<9X55hmc?LXgHUX45gy!@7d?9Zy`K?dg>r6?i>rMTS5QDm z!1KfBS2@WN1*wj9^2iIfahG0o6VMfFLq^DxXPEr28nn;Rd72h?FL_}dILERdeyB2( ze}b3+>egEk(+&4H3iG=ify^yyv_I{)$Q{QkLfx4VK;KRS&tO7))bhOMc`JpneFU7$ z8(Rkg=5Q!Z&5Ri%C0d4sD5~!hJL)Q8;h+LbT z8L3LjcPSJ(NLBw+F?*34UG5aV0%XPDBt-22?_&#;o9_UBPIc_ z)B4gl5I@AbD{4ZY+}swTF81NopB%*17eu66B#3pmV+H{V3@r|az!W3(f|_`!ZUh}v zh#OR51TwN_q>UDedli{CH@*&RF1)O5&SEaV^H}CRpI`v-AHp?%qo}!5kGkjX${CfE z*Q8tDyr{&GQW{b@*j0jjwHwf|Ts!Umk?ihrDGlBrJXRBq=@lK!Pc5B zBKL^2-q00ea=+XR29y7wpP35koep!B1DAnU-Ydu%ncBd@zC% zc2nf-4ooOR`O@$lKc5fabX*-aS~4zw;)U94P=HY>W5Ij`-FYFMk7HLM4ef#J$6zV> z2wwFvaG>ZPA601_JRH`%$#5Jk6ZD48WDBZDf>_VrR>*Z4q4A_FBj6TEkaQjg(A z!Z1O}Y~u+B)fD%7}Kdo~CneCCDRV99)<8Nl*XNj>c z@5|SP%laQaEcq4C*EIlFD^~XdpR->GR^4lxcRN0h$H;lF!iBy(+8s1770T^sM^ zgFF$u=>R(q5Vg7TsW!fveA+O}gdr%P1TBu?lt{IPsxJeRO|+HTQP@7tFKcG-2F+*{ z~70$tfd;txP%Cj@z(AdDmj+g063;?+|r}hB%Fhp*{qE{ zE8jIciVi~v&Uep%7@;Oi1Tl!QMT9OilPH~ato-EPlZ~=m10-*=CnF`Bad>!HiY?at zv9E3*69n!}xCx2ZSnth*dL2ueh+N8QBA6xTr6Ubx2)2!U4p6}~ps!=&Y$)MF-bLq? zeZS>1Q$C{)t*{R(oz5M|TmY6pX}_B|fztFN8a-oQuBp06l5^h|*`|?oCZz!K$_ZWe zKgzM^!6-^NBm~^rI8(NH1;77f>7A{stIhw0N_ar9lI*s5d@5<1zSEK%gAQL_!azp$ zl3chTU7py4d<{L4>)x%SoInA0aH$@YU3@o9>jyD7R@y3DSQCD&z+Ckb53s%=Nye;n zY9orV*J*b*>Mzm#g2fYhxskidv5|LW=ZS%Bt_`P;IjdS->d;(q|P09j>XF@&!=tBg$GktsO*amn0#74~yZcOEY>eX%=-LnAI;6 zzaD9GA`p+_lQ};3J5P{vtC~|GyunwZ7Fd~uFa)g^+Chi81m(Z4HDKHosNt`9^$}6d za<&ilcz56%g$d7a#?@@s9?txXa)8Rhr+d|VpzF+uixKg&^91!WT3W}7elrNLPG%X7 zC5W8|lV>C{KiGVzb0cBlncR53l0y5ZMJpWe-s%)KzsIcjFNS6>;DVgw2X!iATdPrLOkGqjOJaUFbMlxVCi&MH1S^7Ha`EAy%#L;Y{fIQ3pL8aE`bq;crin0sfr&(!$sL_8sy*Q7 zx!6HOU?`&nZZ#u)NU!jkjAvFiBPDJA62$eglZAJN2sa?v8AQf_jMQd7Vfqj7;mFF; zqIajNQPDKhIU7NuxKz$RC5u_A1u2o(4tTP>U&NGtt)WRZuyYj+A8ZV*fc#Xe#?cga z(3`;E-wdv?gG@j&V$n%8AI^WZn!S3ixA2?+vxBnZW>vzwu$$-CY312b-@k{mUA-vb zOV4%MrV~H7Vbek^xOVp(WUDTQ_e;+st^`{FB_kP8lhKa-g^vniE2Vr$}>KWKkRePs33h?=1 zohH9^-iH_rn_0uni!f;2=ECPEOk@mZK?K4m5lUoa{)mZ3TwGB=Aa1MG4AmSgaq|<1||ko`e7+v z%4%5sPrz(+W()a2roNU{sTj1wXc^i~DqtojNVuZhEw|B*WMCNk8(!^iZpU7Ez zN2`iNiNzTPnN)msj5!VHce;-(VJ5qHwP*@aVrRHz*{*_FvIB;Q0}}h>fa%c7V3CyK zt6gK5#aY;wonLD|&51u%pg(5<&U&Ab37yJ--swJZ{B3Fi zKeK`Js?M>Tq;B;XSTu48rKjueW?f5cfCLr6lz|4Pvn=iYnrH%#tyZ-sL&8M32Cx}g z9e9jUL0PtoG@bAk-cpxfSpVmZx)i(In!q9q2Uv8(J{)**U1M7)fpVCQx~jpL+yz!-N5>4|2ULs zy#{B-UZ?ayA)($HRlyv^USIzCY%X$4m*QP`Xg?U!RK1}>Y83bfa8oyb4EgQ=vLT0< z5+TOPLm)#gmjYbY{Qaro;V48oH{TapsjP8LLWi+``7oBG0wmR91ea)aSKdgLY3{XP zbwX9o2G8a_6Jeu36@}CUl2gzo$ziA>oHeD{{{@oGWLIO*ob92F!Dh?oGlfgKzruPO zWdV+!I47Xvp(ftU#P#4g8wB@Vy#KvsK}<)NXN43!VS?B{r_=I=Vps6kH8587j9Yfo zLi|=f^VivrIg+i-aQ<@`I|yF}{G*;={R|SmsO9IZnqM}(oqBAWFYk%kPj90Kqm?MU zE|W00)A&2mxHs!}-u>WOO{JS4OmlNIv5B-QibL-D=HH&3prV&=xx$z4p)cJqZ;=uVwqrCj8;SZ2&Do=^2?ACL1WLb zXU8pPSsto-6z=B%Bk~a$C9JbEu~=Oe#-o_B);7CTc-?TxS7)cV;mDqO4eWPZ`%F0n zujWb2*sGVwA{TZb%*CsA;c+e*2~AzAsjS{(g`CpKd`G%|N9 zvpA^^-CCN2($Yth(PHU=ij62Y4U%9Yd7}Oh1=XY*X9T18Sfu@}V=ijgYHewID#0pZ z?`DvhU!F}VTMQG1%~cPdbbA5m;Wi zHL(bZ=804`ZwsXfqvobbq+eM0#!w`}DZd`j_xmT94@YkTf<6+Qc8!wi#|mX`WOHhpWkh9TZ)9Z( zK0XR_baG{3Z3=kWoVNpzCefBP+GX4R%C>EG*|u%lHo9EZW!tvx>ay8o>vi8dGxyHS z|KcIOh>YCl?6vkjYp=|VkCaeeiB{0q&d@~6&eoZhk&b~2AZ_4mM=NA!Z7k_*U~ORp zV4`DSWaS1h{khUIaL_WaaRbbqo$a~k>D}Di=&b)_oBqK%(HYs<&_k1wDqA>PoBS^p zXi`-ZM<)wATdx1Fe8P?<2F`zgA_mTXXl3kd0a7lu045dy6C)Q3GZ!oSUnb7~Otf?S zn`3TZV`2;twf=MKXkcjJ>;X+GY-jJ`XkljV%mw(bTL6U-FgZM=;g$uDgV?0h@04&IR25%`0vsFQi}cAHTj2L3`~sd|Aqgn zx9Q(4Iww;)TN7t`%0F_7+8PVn+1Qx;83i;W1HjnA$QfX0VrF3rP5+ll*~8uhzz8rl zG5u#OW8my);SSJZpkrWQUq zWakd>qGe=YVFb{!vatb}SULV&7&%!1KL4Fl-oWBNx?=bjT+-Im4#3Fx&+d&~?Emuw zuK%GZ#s3#GQUd;aMOi!NKNA8_{L4?;46F=Be=dyw?_Bkd{Qo;M{e$NJ!B7AHJoN8n z{}0yrTbK^;KMyPBVr~78(iDG71OCnm@XulWuS^3Q3u}*m<^IooHIsindw(hZ7gp)t zC-_f(L0dCx696syKi4dr#4OxRjO8tyjm!b22G&j{|6Eu3D}c3yt%>t< z+`*Rh!JW^wf;euphtq7fcRmutcdnbczS13N>#<3v_`wTSMMbrCTw;x?iI+&D@2)v>LipndV*FDA#->*k0^e47%4u5-JSrZYNU?fD%55ZxEWa!sNcqH3_%-^(dFxQ>hV6d=% z1=i+}fg6y$tR@j4p*3Ub;$MX?#)vL(>0;2MtBo3eYCCuTG*b_za*N}-?~!^eS~#~Y zj4;(o^Hw-Cal~BPDFNM)ubq@t#Wny5z7Y$rF0B8u^*n*$q*OzjA+X(4KeU_VL!aU?+cLZd!odtNniu=7W&wG(kUjT*I zIxb1Q3vH}j+?f6EX6DURafw0;)0q?Tmp{lYI~PblxVRvsvDRNWAE-@?)Iy?C4=QECHF(mU%-knILkuCPwXp2Y&rm_nkZx(yk8!4Nl zj~|?jF1y(?Qg-KhOW@S$c-ywf#9L37u6*th*IUi{zOtTSpZrpU^F~fy7Eg?$O!fG^ zc2R2h`^9~31u{HhI{20G^KJ-ZZqeOVRo;!-ipT|8Zrfpv zd06uS?0@Nx%%dSsvxStDQ5(Q7-)J^mLEnjlj$pftpI{+chQ$Y^vYpt60i{)=mqnK` zpjukSFGiGXg=BhNM^%OPSRTc?ON|X94s-G(lz>VZ;(*KChM3)l?s8N%zutkG7XT6l zTIzYsk(#i7X_q>PqKFuYi6s!n<{JM-dvh0`*w?jE_gxZtg_a7tf;N+Y^x1j-CbS!D zyA&qm*pgEl=Q=U&)(1*GIx2x2ftde|^Q2~l0_<3@JH!={@xUuxWg%v)aE@u&u-05U zd;I8Qf1vBjdg(LPRO^r|j}t-;hg~}^?|H~!?XV6`nK15QbS_2*T3ReApF0-AcvRwTu@ZgkdX+7{#5)62b#<1M+0M?$9%cFBBUu*l2_PMsJ*$qo z4hX-e_@M>=B*_o&jYhcqY-eACGI0ju!&cYHk<(~pR7G5bO7a zm<_0u$)GN{o=E`~Owo$5j5Q;#P@qJp9a>Tepfr&@lKi9>W}juWh-oLeDAS!UD-ApaZl7so~FE!huwpZ6|S-Y z-k%7-2dRW*$(i(2vKE>8E`?#D+0;Ut7_B(aNWN*4){O%LOP-7&eM4~lSz8oqgFZ5B zK>jSl=QmlpeYY^tW`KNq4kAN8;k^(4;Mb6uk>+oJUm767L$0Kz`o8L?A^lk-{cjnl zS-FgLzR+x)xVlIurwrOguD@X>V~?S!+I={gPUhJ#UDp?xF(+9F`^w08fUzR3fCnFc z`neE`>P&^D9Pp~F9`M_lZE%au_^MSN5u?4ymIUJ#xc_qUUN1aHvJ^^-5`%J3@XV-^ zwI#u4T^{qQ!nPTNAjE5#8eO+;Ae8BUHll2JN7tevL4|a2T=(YU0>-6q9-TG@8|ure zuwLR)6QDFjaz2;KUr7~+6Uc?vgR?U3=rhD=7m|ib;tVMU*^obcZUvqK}Q=I7D4aT*M0$2&$U|` z_fN4RF6fL-d)J)WVIlKiG7gFJHLkUXK72|no~==9w=?i)>66l(4D&&%-fZj|NfLZA#Es9M3EbVlT5l~;2wszf+%cjr88C2rXfo!_M-V;yVj z`pDu}t<;?(8NE`gTy+u+bRelRvn38+JFd;XT_rcG$0D;Rkepx7Eu3L|NDcpHnI&oy z8yuJxP3ZA0TJA{=25+CNx9yTdTVd?fQ<8Y{$mI3aI&$pLkTVS>}sC4(3O#w@%`{Y)twVt7HYZ6Oaa~Z3s5*+MKRPrYZ=MH zxAgX?ObdUR8dKYf*NNDJmDG0CT`HSpH7E#n@b6$e1@>p=&g6k zTYR0p)CW(*lL!~ z1-jM`L0_qbE7OF4FJn8J)*Ob(ASr+cO&^}1w5R5<Oll1WJyeIj&e>Lg zngoKhP2iInF2HZHFreADIeH=T+RiiY!WgVfe4nE&a1KMpJ|`~bVd*oP)*Iv^WRX)n z1+BWcIE)*{MXUmQh+Xv_QN2it#AY+sbYK~&{0&yK-Ihlo=c|$wTt}UHb)yc-MiGYU zxY-_ACd&=9S6-6ZVK!h{X2_w?yfmq|%(yHhIbFqi?M^$I)V@id0XQ^y-R-6QC$zqq z$p-ro@AYS!rMt)jLWkaWy(znW%FlG|bSz!hNeLAAU47~voC2_Eo0jYB{QTphIJ5qt z4{D_s2p@qP37s&Tu^@*EU2(jrNwvG^#3Q!Hpi@A$k~GQ>5g~pP%UIt#OjqyfPP+mx z?OK6gum)PaTrNWhWPjj6Ig_4q<2v=kt{fwt-(dN8#yhlx$4Z15>tGCOv3fxl zRKxahVz@ltCt+V@h9;79Hn?B9%X?iZ3Ek1wuI8o85@IbrA3OM_YcLiDleN`t74p={ zR=dZ3=_V~ySDgZCN`e#$MA=#JWPxwhsAn1_5IyAm-mwTJ6xzbwGqSC!jCk4y z^@RFGizb5#W%-<=5Y*l1ob`r=OyY-2>T})=@NTc!z`0GEtE|Md#>T-yZ;g7S1z3q5 z(LbpgU35z88H|@XfCZa~Gd0tjkKL>%2S$v;+@S`X4Co2#NvIA5^=`^GV90xoOe9knUPK43-SvCf81 zP}nYX9MK_r?Waq<&r8+^x}OzlzD}RMC9|t4w!>Rl8xq0hoLLUL?Uj-7_rMsB!BAF0 z$IeliNZRwduFc>{e!Ecq-tU+pwfvPh>DZnmP_A#)n?MLuw+T~Bh=jy(eIcswicjhl z?|=VXF3k%~mRA`%8)C0+=$w2q z9r7Snnh8Qh03e|$))fq`1jG-qT?3If{J;nuHy!uG zC$H!^pgA%t3e#Jl$w2C7Du0%2s9XO}8K_cLZf?9%4Ep+7v4M7CT;Lk}Jf9J|H^=He1LJEo4ptZQ?}kV32SH#lYYG`BWA7 z0(2?rt*7B^@^IYr%^I+5wX8~Hz++HLV0JvQ6x>aJ{^CiVLxTjJEqc`#tl!UJGf443 zLYOEst^Cf1l&BIR=9Y%0c%I|Wi$8MMa}GuGZIe>!Z%hK;p(g?QnQ#(_Z{XOxHG!IYPwT<;0Nw@~DdU*s!BY|-Of z_We#JwmAMpDnr#il=n8}DZAm$tmD=%yfV{&tr51GGh!`LSpVFBVmM0O!s$Kbjd*%y zaU04)wYlX9m)oh%tZoo&huR8tVVGP4YApU)b+!*rrJSJ22C_1;jUohXmQmtCoeLu% z>GsW#(!fL^;liAo7JClJ&EVW2`u9kr>&mKYO_@Stg|VAu8}4-e0gmWUb8hxU$8WTb zmsY7yzLRiEz102;x>U<>Zl2T;>IYkuqTl0c)THCE=Rwjd5RPwyqwy5($^HP5Gahr?6LE-C1QESpnv{yx0k=dz?iwFMB zFJts5qj_8_wx}06-u@{%nCODFnz=$#0l@${MHR8zRCSmUp(qk*_szDuT(0x$E z-e{n_eKP$8)uXg>#ol|pDubqUw4-@k*wl-k3VR(LT3aj>5(;&SWqWkr-wv4z{X?~Skg0Qk;;vj;Vr>hM zocAE*1WGJ;>|35f)VUxO&vD(fL!2ll5}@$uff@tSpB-$l3e~Bo8Us3x9;!Sk;O0(6y zy7{3^eE!&x4rkh*?@6CXC3iU|9lu09vn@AFEZfJp^QwHVzHE43?eDvV8hWXx?Wwg` zh7ctgDaa*0hfv>3s)*?&gX7~ve`GgS3mDQm*ae2@w)<4gIoDSNpuNQK^p~93K303l zU?T4r^BfP$ys=ff) z-DzUOFvFYRXKxtLOelll;SXV78t+bPy9p3>>lNUKTC=_~Zv4&^hL=>W)K0`3hR6i7 zD5#G%Z}BW1{zV8& z4*}Owbi9#`Gy^P~J7pNQd{G)nt(mE)<}~sYplL1Pxpt-=C*=1RGg7Gza;<{{t)KIh zI5Xvr45*@uk3u$y3$ZBYz?EEw(^BZ_$YJAG^eHELk~qdcU35(|5SHM2lg5sc$aDiE zMNmY~v}G@bq8qN4G`=l8#Id)A+ML{h0U%xw<-+TjG~m6EZTeyNY$gm)7SZ}tA-U*F z1CwQKW9m?*6C*4hyZN}I-VCS0VRQWX1maD0)z>9e;dQ28j@(pLkPi!X6F=rG+s_vpHAEdw38j4RpW;t1LMV-b$7 zZnq_ND%mZvXzCc(mRud6}73RfmjrN+bOjiFa7Y3;BJIB|&y!~`44EoKin zkA{P({I-N9zml2#rFVCp0vQ`)SBe?H##uW1oijdc{5v9cVLbLhO?+yb zP$TvL^tZb$h$C|Cw1Ko5_*We?D2+v!h@@6y66cNW{uKxmw#4UsJZTu}_JJZx0^?gz zX4js(eRw|n-w^16FE>?B&yxg7^{?L-Y05u-H|OHlMBsBfZpon#yKf?|9Vg%R7|uHRW6>*3B1Su=OH2ki}CLEy66|ty*OyfVWl*Ao+AW4?ov9 z+-(D4--!PyElC=>TLu!}k@U^q`}6zLc+1L7bPSBd*Ma>0_8`mVro<$l2>%ka{>?Mw z&Rw^^iDh;y6xfO3GYwptV6~^V1x0VdkiN0-c8U*P5``-0WywwSB-D9hhV&L)mf-$GVDH|{aG&7g!w0*#V+6`A!zN<=;EafDyP`0E} z#;}`vQUI8a?~>5`+k_W_ah$;J5EBZ|eTJKcUR>UoG*mju?&*w@

Cu2G6kjUfOL)a}p8@e{X!ChMl3xd}Pjl&3mB#@oE?vtZ>e6TP!J8}ZrtvUz#s;@Ny= zXUc)rTZ&xBg^qOGKFj>G>dhiS&*oJ1mO&N_H3pf-@wH3wjY7`8DJnU3?NQ!zlDjF0 z3fedSn&4f%yPSa`P{>11I0RbAsnDMC60-!NIwRlY~ocGlg09l7)P<3Q$8T)NyESH49j&*AE2w6 zxkym_I(qzW!VV2&SebY{v%8IjGE&^uUs53Nub>`4vf+pwhjiKyeP&3lpAOaCM_LB% zHT+yrZU=b?jK#PM+vyvf>3VEYLcnlUFjA}(Els~u{Hz+YT@{`QP?9~6PRtd=e|`dP zstw&E%|HgvtU@c10se0LFs5P~1mnk6h=9wgtj~>F8I9=Un}x`0xsfDr;ZP)kAoJ-0 z&bzCU6ZI<-yDw|o7qpXon*;R@PmOs1K+$o)oG(3OOAtm)qDHi6t2?~WhUbmlf>?>} zApk=`g1g&ta`97egPdiIhwE6X#Fxu`r2~VCA>qe^tg>rS7p6bkbwzt^&a?YBX}uB} zl{`soN0=Ni>r?S7L^l%5g&W*4W1-7-hT~D1D$VaJ%iHVvuOO{W(GRM<^GxP_0V(+H zCde|y$o`@qBEFLIW%-%@O0fsPVT29>(N~Ye) z1%2$_Ljx9alKh=7t?u6o(HD*MdC%+w>Q8hu*O5q@&U%6mpiJPiwm*#4QulPV;SoN8 zJN6e|;|DQ?V$b|e!3}rZZIU&Uj?>Q!wPJe7v_U&CZ@r4{^zPXpI5%D~@s>Czz(%VI6Z~Bq zw9*QVX825NXcuNX;_Mp9lj8;G+Hn=UWjJrc?Q=PML|m9oa0RjDK*@Z+K;ZA=A{_^* zi?~r`OoMW1=<7)-3j&l*7)12GOmQa1?L{V4bKSd~7W{`C4J#)j4wliEh4*|^qY2M_(y19B7$2rCi$sJ=){J>MGi#;;5_BoYc%l^=QTuV z%^UM_S(^zPx7+^olItRr`>IM!olzDt1R%k$T7F0eEK&`9f=kS!%Q4`ohIrnn9%9)O zTlv>ThZp%Op|DQI-VBuDVPc>{>_?9E%;&mz3-09T1&z9pXyELtqN>4lbFjoxEqLG7 zdz`E;@?EtauQk1qPoYllFEOi+c7D9But-&7Cin70Cizx6kV<#{N>%B+-IXC4jl-Q& zzh%o*kL|FdYpgrq=nNc103WB9v}P|A4{6E|Fr>?}ixw4`o*%>T?^FH4jiZdtkEfSJ zV9IfYY-ka zr|Qr<(7+H?41rPY5Zdr(ybM_6L65o4phBmO9PDcwAG4OYO$HGfB*|+@gd&m^Y!Wex z%oJleIu{X%2))480;b)9-)W%2hCO#y=WQsgX+(MlOz0+g$OF0S&5id?;BY^rL>~T< zgZ7;`+CFkXki$7@N3#o=#DtM>b>u)sBu62%@dzR)?XT@XI42BZC5LpuM&)s^XHGXG zG`U(MU^YO+pcP2fEJdWI(9%WyEh7D3hEjMJQ$Wq$u-xhicci8QKLCmBAUs{m@kse%|QYjBPOW1wf(NDSo5qsgItF8 z7FDH+F)^EbOSa|X#3%82#_j8Qz)hqzHD;3UPWR#3xd7d3Ha{JI&8-y~rB-N$F&$vx zE(?u_QCQQr2zq0Jm=a169l88v<+%3im8cW2mCWNbEFaoh?S`awR1YZ!dY;coqUCVA zY?wZOXIniXrz7PW3UXlZp<@;c;;e(>(>$nNRiDbCsfMwdrcXjL89GX$bvQRYnB~Gcn5}$a|L=XxkB* zMH<7)^s@WV;F|pNGek0ctI$%`?Np~;P%d+5%{#-)fI_^;M&-G@tI!yK&ta=`tZz&8 zJ_2pizq1(_%ooqnV7jk{68Sm-)a0nV&n|rK z7pQgg_{Q-4H%wPGjI|Q56wL_@XXha%!H01)73gK&$QQ=jlS~>xv z!2F_sHEKN)$_N$fGy6v0O>5InRQ-0J7NyBwr=v!yaP&AgVJrMrP#N}ySSxS-vnB2p zO$VJD1r(qki^Frfji1 z4X<&iV=PhY$7F*0&9KNK?2f0beS@d1qQ?mGSSe7-;y@|8fD8s@4+NjQLoXdN-PvsC zxDndY3UsgMki%!%H7iu$j*}P5?9Gg29&gn(c#tQJF0oe5x%4JgN@$H<9*b)Rk}cJ| zRxVOkVlL+zn8>nB6`lGX2y*+8-aA*L}U+J`pvtWyqG}*z5Zd5J~NB@CXufJ z*8J#W1ZRCTbc{kqa-^B(j|QH6gX#EJmeWyHw&P4`*GlDa5_-6- zUV5BMJ^hEVG@n3t`w7EKpNO)QH~*D~(%w)f=67p( z!V_MEJjv39v`e^7co%{xSOGL&zQ8@3+mdA1KzuQiM)vk@z!y6PIYUNM71s|HpJ2@By0;$lu@ zn)gaH%=(%bb}6txo693MLNXOaFvL`W%C#)l3PItBJ3uH}A)O4yhA1ah8XNmxBk!rq zLO>Z)@u3~g=SWB3Dc`x+_UU}2!%WZRsNGsVHo-Z8#>@!Z?xc+F42INlhIU{zgE@d_ zWlr*JmUS$k40GM-Uz}^+1AukmA*eMoIP&k}kAGx};0H~)r2W`oeROP8JByq4hgyL9 ztjhqNi!Kz4I9%;7*@v+sw&b30mcD{4`|*MwS4a43cRsJj(L5g1WDa%w3t`4gUDIk} zk2e1(imdA4SW((B32dDffx|Qx7K>a%v#}FaJz3ZC7iEWTID~b+koLf) zaqi5hpX*cDjZU;6rVt(aDN8`nUQA>o<{$u~4oa3590f*~2A-3qsX_J1ZJ&}gOW9j{ zo5j)bwV7y20g9;KbcjX1acEu4+K4~aYU+B5D;l{khHo*X0tx<9d``>q)Gk`0&u@&5 zzY%C-Iak+wyS+@FKcjw1S63{Gf_?2zhbzcOCR5Z|p%D7;Yc++$|_RKkGTxpszd<5_?u8r5DnV$4abW9kFV;2R7 z8v?01g<_cFLz~JFg&<};vlsk)7y_yhqGIG0-?;DuN(0*)myV2jn(FRc^eu*})Vd54 z8ho4p@6>S)pa}-kGr>o?xYgWvpC1=?j3)MBW(;FdR+Y!O#W;h zg#n&W+NIf*fbglvOHDO_2sdlYBY7vOvuqZZV@L2a7-B=;J$okFD7S_c6e?1@UbAQa zu+U3H3I)6Cr?YF1%_MT9o!8uNr@f$p%|KB{(dMFa^2{FOAqorZ#8CN83Bgh-Sama| zblB3&98CLM%EenvNo(X<9YHTUo!^xxywZIE_ee=wcd5HfSd9GWXhth%icA;ji2e(jiSbc3-6i#UO+Nw$`Zv zOT}Oj1Cc%2s2kb?+2KUS7oIO(`&HRi#tOg`R=AB7wGe?fm`@!7sOZL`$1345`PDDn z;$nU=1TDt$8CTt0;zaVjy{ewc=bFV>F6*RN!@lIxunuq6S_bv~SHh9hsUs40JL z>74m-`LRbBfyG`deeyo9*ke2sIe6xw!%{FYtOQ9148F)9W{vw0`Q}-?q#-+DslT(cfR9h}(7JhEUf7X2TUyH}{$Gi7$`!JI)Bdxs7@+(uuS257k`m z%UkTn6k@a%h%OG`FR+A_#|!oeM|sUWW-b+eO1dhhF2HH>v`kK#TY70+ql{*k6LY2* zhH91vjDb4W0CStM8(}9DgNgVJe*dLlZB1K~4{7S7zTwbY z`5(=fKk0hkl``(1-;idoM!o9sL3q3dJ>?2gUKo1#FT|U+1OT&LrPj z0ODFF4MXe&M~9srlo?-udl5J0TLCOQsW0ZQCH3iWrV!%2g@It3{$8E0;W@lFcV$fh z_4d;j>3jV?huQ67M^j<~a(%)R^jMQk8s|wRBjzVWd9ikp#w(@BD>P>hGi{cgHkL7Nl<;zhz+l zN+{vgkLK_gmoL1XR;_La7klbxZip4T$X z)$zdgiT;N3ys81QeH)x3&EsWwq!iC#Rv}OdUVlV(%fW+N5vLRHG3j2W-o?&g&w7OF z1@>6sl|!}9(^BKII4r1@sotQaCc&v60nD{}%!OW&1RUMaT1CFa;X3Fkr{<)k@L~t{-$O}^WE~#nar(ohE%UZ^dKjS$ zAqn%-odpWtc=!BCw6srENe$J|Fk|7GzGlkHjaTwT zzgf9CXiINp7?_iyNn>sAyNXx__;y46g?N0>qK2|COs}{e2u>XypT&n^DldManWlg^ z9QKRL1&v!C)OQi{;b@n7!~E`YR5HF|IP`BiIgPKu?5;hNgDt`y;<}RqWjjReNJ#U! zPb83^!t^^F09a%aMk}(qFPyMB+Nc}X6s$so1tC!O%w@QMvoC;SZSgb0o!_8Gf=T7c zcP8iaE7EGa3n)_>PSF;brTRVeS71v^^mLOI5f;z>@Yk;vv4KueAx~0QxLyYWcPSe0` zp^R0|8?8Xu6OK7I!~izbC^k`r&s|Y&1Zg)J6hSuRfji1fv6M_Xep2F9AiSt(=I4tT zBRtikEZq%Cu2fyNU963}9>scvZkzWuRf+)|ij9Omh{k*|=j|Kwjp4w#+({OwPs}8J z4p{PnkG>x&Imz`PiB`fNE;KY7_w7jeiVCm#Y{W$&iiZA!F3KNspht{vQ~a9jBE^esxI##>np!9Su6aLNjr1!;o}hIl(wFhsDBjHA zU9hNqoEaA`=j}T5OJzq(gvJ##vbL_C43>od2C-P%ViNLmdqtrNV0Qyc{hgqqOp{0R z66u4ljX&Sz9+H8jS9d5OD@;U;t&NoDniPEE@NP=PUS9V`1YkO+79ZdRvA;1|1+KC> zeR+v4+g5rGnrwfz-=J2xjEg;!;)k^vc`oB3FQOkdgMYz~_udqiWr#I)hpByVCtSx# z-**@I_|T^AaenBMfoiwq@Bx8C08DUSM5O#%;G z+vj9t<1Le0yIM}K+RI})QC2h7?nc00Ev-D!_{SDI?xb3n$Z_Fo9Szk*C9$;rFWp6; zYD;dVqJYy{3N$ykuJ!^X5OO*@(eLI2v~UO-q+XU1KNd;`pQj@IdsD2_LSR2lYZ!p4m}OTBGVhXhkv=;V_gsLu}J?C z9R5o^I2lPSzO7-?D&7T)F*i%ZP-EG4iYbreR@UJ@5!KFmej2QD#Jr{}qOq0-rHOK{ z{9Slwa94aT?&a#dQszdRyjXJsEa5$z?#fW7a`ccG&R!o?>3Rp_13FIbRUQfn`KI`g z921+(E3Le=ka9@WNxg(SXBw`f--H=wuZt4y8m;qxWA~lGQ21iC!&0 z?;4u>O6XRW%5BbrLv7Jrk;^a*Cl%BVZKV|(+4`zRb?hk=vigU>8w13v10CLmN^%;Wt}IDRXNvile~Xm0Z*SnAJ} zuj@Te^GL!^srDFo575q>dylyz{&{vy`=zjK!H%-Xx>&!kuIj0K1KbKu>sfHREgdXS zROEX;{9j9b$mfJ06pdA$HJUZ|R|jg9w<$TV;q;|=9R-fQ4Gu#{iE~TSE$tYzv|=S55Chhv;^o8d%z=DrqeTTu)RFhi)Zfs`f4N*;uDMaB*GuSNfw+1~0J*E!pwn1QGzsE=c;hRpE@MvD-)hvy zxp@r3M^dya-P)loJK`>APh#S>4^t>5GubT&TK(<64H}5usRxCv!<*p9komyp6+I(f zQ$9umc|r=%7&u2K32(-c|I;M3N;cGn&tf$$N$qZi-$%Q&Olxw@eXEkpyV6ho!frbr zf()6ZptGPy)2*TB5X<{)waq?NI}VYl9Bi_#qtL5*NXC4nruv>f*&h9GV6(j~Yi2>BW+C%L{A6oD1{s!Fih zfcz8tB2l?2dtuK+`^?t9`T7g^985%Cg4IZczS>Vyvl0*m7<=i z>aCiYgSFgNpVGsTgRywW4~uBZAkUJj)d4waLyCOCmps50L(BqG)X8B40VBvsUX>&a z>^B(+?Iy^qLUgSoRVmK-fPg17ip(j#U~5pcHTy#0*}_AfUWY6z3RVz%L%PYtRUd{G zqJHz-=IX=m)soeFH7zKf4^BFS1c$0$(19GVo^CWU$UUWVjWm(MxDG|U!9nFz`hn&~ z)(VX|_sbx`c7!Z}>md1Z@}BeOv0(!q%-%Sw^{X)`CJ=6AW&la6i`)1-TcN(|U61AhbldRQM`4tK5 zv=h~Q2MeaVR*L_pV#xJw!G-wSlSVUpb%s}z)boVZ7`DXb_}0`Sx^MadH<-S#i-;df zY`foUiKuYIM>gqPcSe9GFyr2fsc$kFSy-Q1Z8d$_bO{OK{KAu%BHntg;`Mk?@taNA{k?bYuo@<<5tVD)L3aX1&_d@vv)N0N0gIfts{E6HV))@TE<= z*#QB6KL6rT!F6gG*NGl-J{2*ybYF(l$A5u$ml8vJTU>M>P_n-iPE+HZ2WdDIWTnS6 z^^F*|)7&y$j+JIaLEl$bN=tv~vx#*|H|$DNZ~ejI(H+iois2Gw$+YBFO8>yO!&A49 z4RU)2ZJWo#H&w!Opg#dpgE1z$v*Q%S)Sx=9YULttAYF{;0<` z_t6fv2^#8o>h&};m-B+L97ly4t>;B`xF1W3PcHkhTZgU&^P>~_Ppcw=1LA}^+@qg^ zS(L!S~uiNGigTiX@>Mor#p_7#v5M_S;=GynNZt% z-^6Z&VltItY6 zylEVFy!a4a6UtmJMD`Ga85m^1EbHJ{-l^$+4^;5uG`b&N(P?VL5P zsgi*T+cC-t%eH&Q$S-ZMDsIliHcjlVBg;%Ecjk^JN&e^-7I~1^{>V7_{q49RCMHJeXEpSZ@*jc5N+yGR4k?? zG9;p(oyl#k#MRfU4&^>jeGyUZPn&^79j16g0)yTGW@#cvn>uAu+t~9lbLqgi?SgRC z#bnWPia~QeresU7t3T?;bsU|pYlXzn10vA)Zpr6yaxh_O({$2W4M&#Bh(Q>rJ z&3x#n;=a^09<={QV8S(9aJyE-Vpo%U{QA#>Igy?7WOfX{mmFwUmzbNfc*;yQ2h49V zTotBzmdX)3vFP)&97EPFD!A^P-ydD+e`u@?brA>q#Fpg7gRS$2xEw|h`s$wH#B)s$ zLESmR3Zyok?|_1Fy48}?u%xsDGFe;M%MnsITTeUR_Afwg{h{vM3m3BF%uh-cEt@9? zwCE&TVs6Dw1PsSrXt?ZAr3fVEVhZq1dwI9Seg*PnQ(9%cx| zkDk<8+b`VW0t?F$l}_`vv4{qsc?!3vVOBe3v5~7np>mVmHy(p0UirNfZMT-4cO%_+ z8B}x2?2pu3ya*|6@Qp*6CZRH2je64w2_&xWL_FsptB(#@BK>GcC+tY`D)rldVW1p> zPFSJZ5nxR$rJeh3S?%u=&ri@I~iRb@i{8nY-kNaP|A(x10%tI~NBT?e>$;g;HVmeK$H@DX|iNs-toJ8vE(9zST=vUJC}1*IAk?P<{$ob&5mzp_CXX5OpXDTI2>9 zXH@HM{ZgpYX!|CttbN<3KxFKlkdhd=03cH?-dw;LyOzOgVfs{QH1L+ap(> zu~3ko8VVum#>)w?+{Rmp)SX|j^npuBm7dwet@x<$e!f{#{)SklOJ9lG`mG}K<#WU% zq#vx`MX8BkmfyC^nX1TY#F~Jh-vJ$Zjq;*oIZ7n8Xua{+0gL%K!FCEi&;54L&iyYb*d*7z3T>E;(0K8yxd6{*_x?5m-T zxtF>VE-t#N&W*rrEGT0Z?6mV9MEi;_DUtU7SiuNXJUu}qA{u(4Am@eE8+h$i(T&KC zPDoHE%X$xSiYAY=qt4?3132clg$`UeTX^D$+#~^@YVw>1T~Vzd9_FLLYf+ReSzVHr zZ2R+^@Mm3~%7(%!drQO{^j)EljqL6e8uJxd3)r%?Y~F-R?Rd3luK6oYzjp2wH+@q3 z^CHjj&Ca(Ni*EDl=lgD!UU@FCh2LS{PC)|qk`QJTnifN_VYCl{GD@Q10+E_HVVtQC z{115=KhFt2BEj|6W3IcQsnM4&CIp|$HKJLR=p&EY&u0cVP%7rytO|xo2k;}bSghu{ zTLpe}c~QoQ4EX0OJ9|C7P1tzrOKY~pw(}V~4a3Kbv9r#6_>Z$BYbvYKU_={~A(F&y zv+<)(vsCbq9>UCE^q>S)k#@`~P8n~6XNfYN*159*ee6r(C=UaRMHAxGbj9%)yp&se zUmG%6T`lPRnxN9xplWtR;IanqNP`q^!9+WOm(Cple*U*gKjG7+S|@2ki(t8DB*4~H za-;#uj7>9Zgv6G_Fo5}ZWVTsGbsBk`Q21WDOQhf2oHj|^j9~puU4~ptY@(Amobi^G zvls5Gq=|+d%Ki>EhNSLt{81S`>;&co1h7~ARr?otSRvsOVSpUknXuIdpYPWU=34yz zR@?!I;EMW-j$N=o{{FQTg1cmROeUt_P0npa7e-6Ey>}$0t6$-3H+l?T!Hn4up2n>} zK7L)iltcz0f2w!+URrmQlZ(Fzl+=1oIW@(K`{vCYO965;PMdiHV~fA}I~J2f<5dW$R7)tG&-nSYB! zVA|X>d4*}f`IvbcP)^er*iCcohu=~bGPOb8R<9EIyE{Uv<4tcfzqFq)Hd&lylJnX9paLF(Y=n%u0?_=h*#Uu~w54x5X z-4T`sGK2l$kKG5e%R2!Z4NS+)DbxR3>DTuO)Y5Qd=$TbfVr}K)nr*T=+q0lgRORd; z8740MtL4BdQp4s5VPe370$=k{SF$&l0ZaEGWayisALIN&r{Yo~JpsS-WjwJ`2bXDb z{v9xqs&62l(rMphKN2Cr(4irPU%z68UR5+O4(M4o@e~7QB$sYq# z|9&EADc~>btoytWm}*VS!9Lj3>B2NoV*{){Cbmey9LBYux^x(++tazEzT#eUg+ao_ z47Zmo5LVVFPej9hwf-(@g|NFQV&E+9y)U|wNm!Pw-iXW3vw+)|^*$m>tE@e!H(E)h zHMvt~bfIU%yc(Y$b7pM~kr47Tq-~gvCwczo$o`r7gR@xGgzaQ3 zFR%*N?V94B+VRt!>_t2t7Wx-5%B6te!BhFC)AFAV5KI*T`-d&V?&Nq|> zk)uVnA)JD{$RYb&iOJsfu&+QDH#rEq>p%+qE}rSI%@I;OS`GXcqxb8_SuAk~_2f6k`-^{v64ntIwLOut-h^djLsV*|1AGkwImrT6cr2NdFs3SZxRX1-s7BLg9x4Z6@RHbG`2y5l~e3qZ}*^0e$8>a$9l$h_+ zdfyLZ2j=aUPdob(v2HGou;3ooFVL{+6>EO)A3~9r>R#M&Y;bM1Q($uc9Bx93W&ohx z?PM6@uuuq}6Z1?-!L!m;t@y61qKB`0*vB&rwaD)}xsx?I&)w42O#YI~B6r*-U)^_^ zW6$tr7R*DM^dBI+SuK~R)m`9lLV^wLL#S(YL*YCwG2WZ_) zvwDM^l>nTmDGCOW$r}|8T`u>aR(LAmPf$OMu9DYVk~w1ic zWf5>itQ?H>2{H;;HajMv1rQi@du@+A(e#Ywg&LB6Rx{o8I5Gp9#^Q<*uYj|BVb(h- z1Rx5q_maPK$$lU%;!FqMF~~URViGa*BO}AI&FW)+vqg2Mk}7sd<>06%i?ImEaZaQl zsistie&uX^%lGa~QC)IFP$|vT@=DJvLy`RX63Eq^%srOa#9;IE-a#8I`*nqp!aIl9 zjy85jI|1nE)BDWE{0 z_`7m$AAF>I4}u$g^KksyOcL=In>+i^xdK6fwvc5N+QZ-j8vEoeIGV1GVV<>GCVSL| zVX;Vbx|VXmL#tI>KKi7a3?A5@JO@5Ma6!iA9ajD^5|Xq?Di_W9;g;U12{t!BevLUZ zf!ppHUKcv%uBRYzz9sIg(vT5VM!x}Jeti&#TYBjlxiQ0jC><7^=OiNnyF1Cl-M}ON z!a3;#vns{THsa@>{wxF!sqNh0chc>@bALuk2DE`3dVY6Mj12#N5>At+L^KF$6VGYm zn~$TnmGy|La|(lyxw28w7rdY${`F;JVhx31!u8i%eI9WkLfj;uvVocBCqC6cdQExj zW#3C(M04<7@!Q?fO!{pF4{&!783+t~A`tb;U=;p%y79*lOD8kmr{VYH1`~JTBM-$q zoMBVea8z2+1N%H1FF>^KD0BaI{DEC}Czja~h);w*YS8!S@(gzt-t&55LVUYA}#in_w8c|0Jn zbjTqexFO<4)cxdJ#%8z1rcnZn+V}Um_Bo6y$D_ScOJbgcKWYdO5(AERjBdY(FPYAs zE+-~7>RE76K@0N>Rs276{K!<L`Wxq^+hSPy5xIcqS8`zssB~>SO+TMVXERj*p>$i}{DzpjfniF?)ny(FBGTRe%u{Of47_4nvO1^>Vj$${X0LBsnUoY6+IItK@ z^_%JYDhiu8<0alm@OoV9;H&%_1a7o03%0h)i#tJ0dk>$gp`WGiTxLn8FB%oxpajk% zB$tcr?>K$X=u=F1{LT$D#t0|?C?)tJ7BDye?uYSeRg(HZsdYfK%5oDlGLatHe?lyP z3(W|F=TW7EU%H!iEF%@vs+tL$%9UFP4v|NIx4-^|4`bZ1{dm~`N4<|RCaf=8?M(lK zv!Sf7&SO{U!fYL`U}$8?;txVQH9of1Q=) zJw>6GkTBzjQ(@qyWq$RW_1mz_@ZI7Tud!R2Re1&amKOHXAU&WJqSIb|nFc*}K#Xk7 ztW{O(J$H+D@f?#O(hU@Ba37T)&P2)lfITU{GdPRj=J3Gb--GptZ_2;8)Cy#r?~A&` z9o*5g@B9cV6w&UhUmpJGSy1N+J*q#wf!e|HC|TGv$U#N6awdO?UOzOC6dhz_cH=i` zrJJe{32Oonf8mmN1vp698W+z@gAzETw8p@k6w(xPD^C6?P_3*tWRX>eKl;BA!7Tq5 zBAA1b`M*qHCIUuQP6m$uF8?mG%FN2<|dfFx73M)#~W_7~TFiat93$uHi#5 zuVt9dChYbaik&FtPr<3Co6$c$(jH z2A1r(EvDh{&`JOUr}=06mvo)s@gZzW`@vh^H0imC+2Oq;Dznp@45ht2M1o^0NJ9gV zMuz8_hUXgR&*bpePT;eg|A+?mdR8Xzuq~f{ZcI!dU0%as(KCFWoB)h8#_#?X<7U6 zPK}@x7@gUiojy=+)#-tt^R<4F__qdy?C~#*1IYp|bNGjJu4JZje$l0w{Zh5$3@8fD z+~&{xK@)&@tzQAkz{>cE7s`>%34qVXa|YjFSmV}YppqI_^j`s%$Xd_j^lh7dtS|mb zRoZu6y~O`AGBP~=#Q3TA%l>H{*|nK5Fh3rY_*$29)><6Ef8~x^dd3pJ3=Lb-30{TfWD)Un& zy_vZQl9BmSxwW*s*SFmDrOsaYZ66~6_c|K|{Y;m?2&C|}DeWb5DMOZzaQtH*_b&eV zlbraSc>FUW{qytr@Y3`HvH7W*0rVe4@Sc_NL;Qk@e=7K=v)qq%LL%+l=);cTkF);b zWxl%H@ZZ1h{s&dxz8*gSdK+^?WAK8L&lBu9P2f{Qvno&*#zxQ#oOO=uFK6Aa`sU4F zSAdku+(3U{GQQkFz$5?j5=|i4iksQY%rClYe>*Hr|F%)Ee!!i6qgg)4yS(JS8`*Q2 z0C%+fqT{caoSYaQ!%V)fnR`n760J;5u0yt{?xT^9KW{MJ9{QRd#vKG zon3R?aDPFzIC+y}(3YQUg=2Y2xqr_p<^0ILs_fesAAYje0`fU^{%s}J`2pu|?fioC zvvU1mH+fq+ze9M%M`3exb$Wm7=kJBjKlrh?f&X;L&CCqXgu0w8>VdM4Q1z7Wt~KK0)1F zRM@EYu6PT7LWHa5C-}(*mi$8S@wLT#4;KsQ(^=+kMp`(JbCa4B?HlXBBD1^@jwm=TEuBzIC5evgccFXbY9rilwh=DKL zT8aTRL z@>wg4=hPN177B^|P-^;WUO#Nu-6+CAHawZYLqmF+)@Zn%(5aIgX`+cw~DpEDGeXzIoMM*u1NMF9AI#C~U(! z8xHxsYENUm-vpy@n=sssEcRHN@xMH)up5S+mB#(}0{~GJt3n;d-Wm!pU%?qQUm!MC z-k~Mnhd#h~;A~Zl2=rFrB)lJ6`RXdffD}BGS8HhC^u1##%kTL{5Mjbug}O(*RelQ} zf_Be(7l_)ViVOL-^cPX{`JHo=%L=-bvrBc^#@lp?%YjZem-#yX!+<68L@Dj5x#Z{J6oe{Y zW`b&o5s|(MRmq{Hw14Vx4_4poIAmOH!K)FJZ4MdUgc)>-M;uF%Gp{ez&}6<4!Xh}& zfY2mp->&ei#>uc2#yEDgXs-eAOn_G&`-_--Y}pC!Z0$~TLZ#UlZ?g3x&jK|e7g+3v z18Iwpo2$`$QzB@=xdC4lZeti}?`2;fNFyggFsVZ=zIN)&whT_^NmHuho#o&mjB(*% zO5%Wo)c9CF^4aqlw$yRvVrMSI1|pS9J4rDC$yXE(+Lc}di{;HSCuc;hd;>erfk9fj zfi90FJU|i;q-tRJn7g?~Kov1L+kT{(dzI5F@@`^&eS6%dP7u;|!0kHYUW>WZZ{c6N zGXjrH%X+~A*@SVka|{WS#1@!h??U#NPB|{!AiI{fW<~jPC9%fsnW2sa{W!XzNvS+`sdmCufnvDyIb&u`L{S30OhO$TpoX-L`0xpdBh>= zmssTd7ujXk1IurnLl?A(j$)fJGz-oW#y2sSd1=UG0^!LhwsCbrZG(eK`FI)s7>!wU z;TRMA;h+&C9=8DY$6F%ihC8^T!?wR+lMD;<1AgZ%fA}M`O3^H*_R5s6T*C%w#F10(-p$n9d6nPZnWlH#AjMaue6R$r&7>%Fs{ zwBBpWS+H%@@aN&{uXHKw=cc3HaqTnG&-YeJqCZldWo%0()GslxWdgdfcDeC zM)Y@8QS`xm{5!f3K=9K}xwK!I37HOh@3M~5)}XruiNm4wFvp~Oj7J6z zN?KqZe>zC=J{q6Ubm4@brm&WMQ`oMKiU{#N0+|>bZ%r^YS+7+1XrZMh9~qRCyu-6i z81GFuoYPLIR22cY$u&zXMD#|O^OfQJ|rd3G#~as zM#}-0foYkBuCNjC@`OhDx@^NL&eJomn;+)QKu=j|M_%y2`D1`Z9|_W{6BwJFS_y) zC98R6j+0Vj)(L&yTlL!mC;BR}ln9QbRx7B%s$6KGt2KW(vG*-^Sck5XSbf7xV@y+X zY*?KKP=hnp4dc4~33&RTTi!cD%Ds(p1RtN%r>`(v4u?@4wg(Eu1}M#iZkIJ^c+X#Y zZgB?`!Lc6x^9tXgCtybBW=!^_1CVErA^+$y;^pVAF<{WLftN=Y?C-L8$lBxUVYGiO z6dp|!y`2ryT)@*z+Y7WLQc?1%_Xh2(=cHa%3~;>za^ zFq&YiFo3MhGSb=Y?6#(jC8RV3w%|>Z;9&;<3uhR@%nV}Sh>2%OKL1M-X_@qL4%w$^ z{jDN9MpRTiS`bn_ofu8oJ+iX&{xiSLq@VD5BY;uv&rk;nXO$V^>Hk zop_E9D;UdlF03d|LAM1<*X@Hw(%M1uqStS~PuY>L28FLdcYzx=>3SHE2$9r|+Ox3{ zibSif$&-*Pdk9g6!+_a92>kwT(YM`1n+{%kQF+fkae!}F9nl<&Bu_hlxYZ7vK8sA< zKYXZUA%r+lupt^lV>eN=rqNZFuy-0=UzH1}p!{N6!bV zL!ME;Q%aU{^N2hkl1eN9wsO+PwdIc@SWot-X@4iR>piL(=M=BCWRWqQTrXbOrdZ9O zXRq*hlc^dhr7$vgLIoR!~G&Pi(t+TsT zw22mfZUAwoZM3feBVy!B3_KR?sqI~VTeMo-j%_GG{h$RQ>B>6YgmjQHKULZ%-$8DE zvV>}IwAF#zQbDI(IntYoBu#0#b3%5|`a9qcMk=t;^=lzfGHUBzylxv9@GSb#kwcFS z&aSJcty{(vfUr7s5xUn%Fr`$hSlZCGqp6!yr4J{{Bh6yuzE%fq#hnGAMug~ICypAzZHg_=EE0NeF44|;mV!X(F6h1`Iy0RaSNAOCmen_0nMpTe+ z<}kqXI(AJ1RHvlcx{g25Apm4Xrp-^{Vj;RgI{?3A6?;*!tVp3AQkN9>@Jt?^Q?38S=3RpELL}S6O;g6dA0L%suYdxYw`z_V> zdzaZtZ^Ya>PVT{Gf$hB^wL7A77>n0eP^^Z zz2G#JjuIqBpP-4IGWw-{k-VP-WdWH^ho-U8XC6J2Q1MFwxi7t`H4Kie6I!oat;bVv z-&yDb-Gke6>U?#76_m_C&!QGooc;`)6O7RQp5Rz6$}A-AwMxR^16z3m6K`hfeGxfx z`*C9DW9^C8p{PqV2@}XlK#m~wvQ7~99V>g-WK21VOU-s~y~M2{ro_Lkjp_K@3uA} zK}o$*MgEfcM!4HZ^st1+Rvoh>R(qj4Ph#0vdJge;#Cqk(ycIkzM?-^3agvH;>CERm z)K&<3(#<^axUj+P4XBo>-N6!|E{b4xX}5Mxe_dd4f5JA{lOPLtkYyF#gbTM%vsNYx zBTl&1>JX)reLH#LpRenRCgsdvXj18@+6sU5FEDRxs<&LE4LL_vt~NWv zD9~791BVu4PFTTq>}K#+#lROclQh#+Nvf1b66Ib;7(k}ITsp@^HBug-&cZ*E zU~~ZL`NGGkp`{ro#bqFBiO8L*5F6K<5%=>ASuWL{wEADF6u(8A;o2>?*yjk-f4@1> zC_i5aF`O3$27Z(pP>FpLF640(I=J??sGng+`U2(V*iNC$Wx3lukIP9e2u6*E0TWt8 zI##;y?3AUY5|&8hqKwU@E>`M`D2(B0&u#41!MK{ggF~OHmb{?AfL);kZC5=WP3pwB z?`8sb_{I{=6bMZnUSc_@lno+itNwWT5mdEcbBo157s0-LHVb3*`WTAA z-(VVT=4LLNce5!3*SXa$w|&LL6DIWpv~**Axhr{`j!_E9D@{JjowQ+ImFQNEHdium zvE~9SjaH{49yZi(Vgs_Iw{Ip9=rwG}{Dy5&LD^yw4o5y#HjI>N15!-MrxXZHUFcXt zP-y?DgROi#9@Etn$qPJjqA}+p>2K#iMAS&gavqdk6H)Axn3n7rohXTCXe3T(S0^F!6x%;(LA) z2tb^Y{HQpqj$7v{L5rbqs7L6yD?y>9?*(}`xCc4cq#j96Y!T9X}M%?@^Zffty9;CyF5>ZvkC@UcT z*oNW@+UAPY;&`AY9)$=U&Q%3uO^VrR6tn=9hzN7#5)A(i7VGu>ju)`NHO%2U2lz7%!|O! zVi*?dGQw$$-*50oiDo&Vs|83GKze$)&mC?wQ!`$gozS+J2dWONX-fMAVC42Ajfv&GEcV6a_rJ+*|}KyYB=Ta2ZtA_^evot^3OPEYyq-mP4_g*u=Bjb zwtO=P%)HV4^HYfcE@mRalW2v4Ksea#p`vu6Q0it_2+sLt_6fQsy*(S$q@b7Jkix&T-9Zr7N44gDbi0e$U{*jU%}4#83yU&qFtEttHCLbf;qN33skKTwjcB7%7k z2Ve$Vz=Hi4SNC=-H8!Ja?<@gjZKJ?oAZgGxHxOkhJDoN^cI`?Pl7Goj--xR|U!?A( zc6XFc8W^fa_9mZ4^G(aqCSFm_ zt4yFUUe9Nz#N->Jpx3b(qgP?wB_Ya{`GWh_U9=yd>!gr0XQe`K0y zf8$T7p`BrKHA37wNHEMSi}Ygq6k(wLcG=KoktsC`939NlBYq$!WI-JQCxvC#Kxo66 znc|W>IU)&UMRp2Ik zKm`-&F;3=a;Ntr@l-f^Shozv?O3!yDQ$=mrF1wM9G}q6Tr(WSj{l5NW;-rz{d+B#x z1(wqp-R03CaahC8Jq4pvk)Vt%+>Ctk@aNiBslU!;cx`Cbe8;} zoA$!t7waA0Mw=;GTfv(IvxL`|hT9mGHc7YO{S~5zyUje|j;FM2Ud~8DwElw9<_%GHQypIl#Up*$1e5*@=pQO&3Dni<2t>6=dfZ&b z61yk#k37by3tb>XGexX26)+Fj3q8*I>!`=NA9fwwL7lOT{Vd5lmgTxH*KBkVB)s4& zrwzrO=JLm$Ma;*Hz)DNjDHo-jDAtzE_jhsMz=FODKOce48p?Bd01{a)-}i%Zw#^8a zNYKk3?9%|-yNgcq<#YJK5YDr()l{ct-ABNW>G-pcy*1yMNfp0zn#WXF$_w^viAEri zgx{#B8+uWg9{V8@bjWA5(%rdrUp*!H1CH~w zkq;962)FT{q89QSjLI6^IiSDOC8YO|3*{1Zs=dH0v%fW(*2ifMzHbK69Iz4n?!?nG zsex4wSx7jR)}Ba_HdlI)@?~Nlv91 zr*`6vCRQ&FX9kGuH$B%{1LrSoi&XggTf=Kk!~HI%9_%? zNMa?UdiTWs74Mag4!4h+pw}RoS3JU2mShoK!*==PqLCzOqzhPXS##8ubZrN;tAH|p z7!Nm_7C}yC4l1s3U;itxKEzAqfDseEc*XuMfFobA&Q+Z=S&FsGhpC1_pIpgDag!bh z8baL-MPu;CIbx#IO*;yt)J81WiCJTd=(5;i$T*g4wy+HtQkg?i(#XE>y)>R+Ne*Qm z%^1AgpgkI=ssAB8p!pZ242h#Hq~_Zy@{+RhIb}#5D_kp8zOP`2!p`<}+U&zn6QBZ{+X;Cb~ ziJME&qj=TLBDK5-BVyk|izF>FshX~0y3!ATD2^VF0p%I15D-P7H>ix^gaJkXDfEki zvo^Hf1Wqp!9vNQ@9;}eGgSR+MAd+Ty`5(s4Ax0P`>e6lVZQHhO+qP}nwr$(CZQHip zJ>M+;WETHoHYcg%rc#wk?xJ$eb4REJ>I<&XNu?zM8D5nP$>OYjdw?l}+z*8~IbYSJ zS=Hre(>|C7*@%oiu8nY3P;m{73TxKH^dP!q5p2k%x|1)*^ zHY$_kN)2P?-l&SZq_j3mdcTmCA99vLr+~e1yA+Q*YzPg}r!=tAIluR_m~gRx-t)80 zZm)v8bhVQS7murC0o&(aH1f7>@V2;LK_^Oo7)QSfH(V?Ao-=vUgInlDvIntHYR;~* zH9z1z$%0b!>Xif~7rjZu^OVC23Q}_QgIG6ODA-1^f%(}c195HY3*j4(Pl8t-)=_9^ z*&Y)#{JiHOpR&gBPDasIZxC(9!X89Rrc^uBZ+M8wXh zFkKp^clvzY@0kf>QDHn(bzqa0@}kBy%0?mS=`>X|)G`vFSjlJ>6}r0x|Ae1Qfr-84M3Zotu6I|=sLt6(0w z`eHCRyy^P%Ajy~D<8f=ZJZDB?hgNb}CSOJ7_nE(osH~({GV#a?rv9cpCHClKhdDuvRa2KHb}biKb)(DO*3d| zc^=obUPH^+_C@J0+O0OX8}0#8Z)U*v`sAkdUEE2DV_O)T8TtM` z9zFh#ZpP8+JciNI@l0~+Y166G25wb6cJzX5r!uusxTXYI@28O5FLY_mG;dGwqhKQG z<8!GfMS4#I*BDx{goql%!0zep=|HqVs*q6z8l$)KcYbgNHGx0@(i}kE&*G8!_710~ zPRTAybTH}=n_+_WaQNGR#oOvUy(J+QAjZ3SVMcZNED9VjtT)rxodi8$4oeB zaN|%XyZx#={basQ9BHvr&h{DL3(=PM8H+y;*OEOQNG(=#t#=(dcp?R(CPlqiWqXkC z^F*F{g7Q*&S^Aire`uMNWA0WL8=@l%C@A;U8uA6)1yz6sI}nZOfRbHd~RZ7&&@ zMQXxu>h~oaJJH!nuiBTj^rNu@q@dKHKWh<|{E?*R^aWA6EzP}z-54{1gPYwyHK*uzrL@7gaa-I_5$W;*!iR991AUPrT0OoiiS)oU= zp`oaS-WyQqhjxq`SGYf?-wtr;9iLy6~E?4z!zcIp~d%eaa zqR6fVU9(T3YhpgoIju)Jo_=Jz=tvQ>ydBfon#3zp@~UmmJZDH&YdCMPwv5#J-<}m| z8Pz#*uY`B1XlSxwsk^5k5*LRY4DU?HOjCa*8KF<iHr-MihFMLcXT4u@1@E&I<##xI}S zFl-(J-RI4S2@EID=>)7}14P-ntn^U7OElIbmOHsH87;uSKjegIvFhD}cc4pj8ZP2@ z=0zm{6&&EDOpP{qPg2De%L3|}bX$f4$$vc31jr39i4Abpk&=}BSlkEj*pUjb`GKwT*S|R{l82TF6wb!++nGB@Y;tJ}Ltm zF7md2DleQm#fS)#f&?HeX!ksPEKxJTx>=2e4l40;}Crlu34KaM~-!YRY zfe?;h8P=!m=eMT9&iiCZ!W7*;^5X$0jPQW!tOD(##nt_RFkVBcRcx>uVjClW*OR z-B{<#-y};(OcG}3nF<=jgT5EAFGsyUub(kog@;byUX}X>*4A=F3w2RNh)MJ9b>-Iv z^U!lxkXqU!n(jdDoLj!hlmIiT&~88w+-?}9Xmg_)EVxx=_{_g6Nk)z( z=c;9@Ff{gqu!X)gQQpmQdSIGli=|)*JBOzYZ|II1aE+$O{H`X+TId(J(X80;~-SS8oLOx}7qtgov#yS*P5Wn!FuuN^Dc}dEhTO7v3v4P6d}eIg#>&_fBd$Tgo%Q*!a2`K!v_wh(GX!PPV#|IU)FIH8ORi9@Kpj?*Oc#VV2(F zEadx*FW$3}F{>H?>G@jb6d`zBgEgiC@w{~JYQxx}^y`s3mFJfM@#Z+ZT1Rak*E%^9 z?L$0&+YfeEdjx30p}FN?=O3s5mA5wQ4(h;;S$Q;9%@91+K>gbMM0)JC@Wo>DZz0UgpklR3yNRzlj~s4GBjatR zn#kD2xG&?OaLio3H2Jn%`l%v0v*m8V=04)^*C5hgLN{pzFYsdRi>dLLj?j>x26s*5%g2d59XFN+4&l_`n#tHoDUTMUTkWrhyRU5h4jDwQ?bE8VrxrSd4XQA+PIcZi% z)Qj0@hY6cQbc|4#9JE${Ad+~mBR5n0n7~gpy0kIS`FW`ePw~Y%_7(YUB8qDuNc$YZPi zVe1;wGW$#WSk=$Cs(w=75!dWeo`Gx^sl$t~c~w zSRr~pIF0BKjjF<(IDd`iQzfI%6uvDNaOeU(VAX8`U*3vg^+AI9Z6ZMZqAKR&6ExfN z&`0ktA}?D`Z%-KZuIC?(aMpmX6(@9hmsj6+dg*LNrE}=z!BY9|uTMG+Q^W9@_&yEp zy+05~&d1bPL`7kNafzatsB3ROaS|6B7+!4)TkJr*Jx%O@p+_!4_&Dy%Bk^@OI*alw z%wnrGT)QfF&Ackvo6vOK>)G(eGjL*hfB1DdCWO*?+{x^CB5T7~xKsLd9zwjb=Z!~) zz623#sU%^Jh*(d|s;Er!*}T$aTW3KHo$U*e`$Q3ZtmzQHn+rBv!^3VtrpPnS7vGgm z)tlZsBt;}13dSn9#sUs0MTs}zkY5GjD%n3hN=xK4*6M5NfQ+43lZTe!rDs$x>x{8G zif2X?`x7=e7*l%LRfVG}lW0}yM8tWs!gMbbVW~;`s4Io<`QBUT#pYP)HuKwXfftX0 zlaU-lJbXk#hS9MsDYV7llqC=pM)cWq${d3;gIW9BNv!O1Tl7qr&@P1xV+FSQ(~kx3 zwaal7WGtYxPWl9&GBr8l%qL8<<+4e`C0#w_>|b!NeYN)=$O-BT#y`bunxbEfT%|vu zQiia8s~UPm%?VgyEi^`P``3~f4-K+JDTX;=4%b;rOegT<5#$u~hR9!R5$0q}d6*+i z3~{!w&z2QOEsOfR-yNH$A)cy+8qGwKRoWuOrm-HW>f(8;dw&LoxhS9wdrAaP{-BN_ zPbe??hp0lf?Fz@JYc&6m27I}Dw}7+YfapWuC&jTw8X7C}U<9~zWDH{;4RP#Hj5wT5 zw4As&D|qh;7-@`=yW%)Yq{BV+ob*r`m)wyOK>Yk{Df*~(GYMQO2& zvU(`Wu0(Rxw4?L&sntVaaum&g5oYqGG?hz!Dshc#mn0~Yc`eAiq znJ7YpfAAu$kD#XdFqN%!mGo;Z!kJ~44Bsb*!)FjGC7^k15Iw3A=9NuGcZ&hgMMshGO%$wfK-)=FrbUWnuX*8SE} zCtX#1hmZh!LLhXsM2)3*U%AX3OS!knBFFRZ8H-`D=KpAI)2JraJTJEre6Z9@2*Yyv zD-aU~i5|qFyJ>tcDG|dO&EDt^WoHzXR&Uq!(L_#nvp5+IC8Hejh6}UK?u&Rhf{4v{ zbE!PxPng^?01d#+pVhg{W73rh*o|1J*-!D3J<}koVu|r!xJ7SjdcF1^$oYMaX3?*e zL|?#OQ!Og~1>lUS8XBbIr$=0^^kfB_+M7MKXue6=1~T!*-jUNEezv-D9<<537W(Y^ zZe-!xAs(2-4h_v1uwN%B2Q~=BuySeK`Zu_}1fPv}cE^r`G7I>A$w*gcC8VXH#;Tx= z+bcj-RBKW^d>oSde-4jTNcG25!Y(1@sIf`oruGJhM@dnt;=IcnRPR|ha0|gx@t9vc zztSWp>HsfSot+p5`w@FT6t_@yu-1j202t#l{k_0O1NLd@uok<|){(?xEo2Lb^4jPS zUgtS~9q@nzr^m~3{#)(rY+x+VZl77oEQ}%D8wl#$*_)`U00O2C_c&GZC^)59#}(SY zPUAVPp)usR{Nfou^%B>hieGGEHQsqnu=6`p9xUt6V5dpE!nnM()Bgf*iElusW!tU;|!^T<<7v0$)7DK=yf67yjyQij{7H-P&E+1 z9L|BVan5XLl1!ZGi{QB_e|H`A6xrv8UT;ungAuQ9+Cs#f3|iYpA+6(dk0NR!wF7Mt zyj2q=VLC0~J@2dtqV;9a(d|nI`@qO{`zo8+1 zhSGe5L%Z0J&XCF%dfYqTF8 zyl}TeMcj*R%$hHbboP+{dsGg+@=u4l5ro290fhiF=S)VC%X~gtvqkmGJ(l58-6w># z+W(B_&E`ao2DiLWE7{f^1AYyO?qw3<60%8>vz%CRX2nYfET2&afX79jB}2VW>YpsqGn5D2*5MqUC8#TZ5EWx zMW=%#2_RQUPG=D_2Ga^pZSu*dIM`RWFU0KXl$j3poEdXwYko?bfnd7Zoml{z<%fzQEkJ8mHwx2R6VCCy;9Ha?T$R|QX< z_$b-C5bXPN{a}A}UkolksjjczNOw$x$Tm93YH_CH4-`Sw=;xS>P z`08hM{+KH25r;;zmDv3wemCG!P(6~5F0k9)+7M;`GhHZYvut@Fi|z#`s9p*DPIp>s z>Ek}U&}+7;iy7GS1#`uYc7dvU5n}UAJk#{5K_r|pN^j^ih@>Tv;5g^?PXC{>Q(wdw zY`cmNn>X%=*dSX1j=?_|xnYBR>-EpaS^MaYJh#nD?6an6(H7Ku0{pq=Dh2)AJO_CP zGQ-Vf_y>z=1eM;wKqRD9TtciLJvt$JfS_)DXJM=vpH36`yCmK)= z2k?|5L^0)+w;MMaG&iAIWJw@4g_CQDHyCpFBiE>r>)^}Nfa68V$3QDr7m}Vf0o6r- zg~e4liuTE(yQgm#9GGC7*tDwshU73sNtXR+zD~YV%)@sWp(QK@>O;>N-F7XymjBXh z$>b*YWo_BwDRV<1A;8aMm~GK8=b0tIVDy-apTbV{%9!hhCL^_~J`xJyjBP1UHVvu^ zRBLvyBgpxF;01Ex;qal%=$G{1_E*2uj$j(0;!G-YX8e^;Kr_e!yF zVEUYs7`L`Cg*-H9WTfW297Vip2;A}&|4o&wU11JA>q%M6^*jkIm0xCuhoth@0@h6* zolk8U;~>($D$_?P03pj&S2S?$tE8OlvLWhY;!N;D3?4Uq^Bp~CHwO@Vf%5z0VvLpQ zc-x{!w?jvcDG@L&U>Lg_sTB4`CYUvnH}lk3q&yeuxY(22(?W{jRxjhe&`Us{&JX4a zm+Aml?B|>pH?0K^sv;e0mdoBEh$CNxYhUNh{Zc_YO5?U?b`f*_xrkz}L`JS#JmUDA zYQwQY%-J8RgBJV16$vb69l!suzrYG(=oRfCL$?OyUs`ctv1>dy zUtQB#z&A@Gl-ejrM|cZz5F}9-kYhQb6=Jz_A29WE5|lrIgehuQ({(M%B}k3CEw~Cr zVRvp2VzIbhJ~WFduFOLv6rjNyYwa6>^Hl9gJj%WN|6 zI}eV9@A<69?QC%OC5_(ct&fD{rZ)GxR7n_8F1BUR%H7++Ton@h+gza~F=#n;njRfk z3!O;IE4R38)kZ9Hc4hD_!fqyl?{QrUDy*)T`ufLxZ65sFV)ln3l=K3{jY%^duJX^H z&|O06jG6*A$St_7PEQ?vYFq z_lde=kZHyC8&yoPY_FW08?UHL=qXM`2G7s|KoRifjYwrPW4di5*ltHw@2VmX+-jt6 z`H8xAN=I;-M00-IPXu5An#Vzhg_pHPBTb^DG9@Gc*@w<96CM7xlWdJk5`E-awoP{? zZ7-!wW7*J_$A4@AT%+rf^)v`6_jwx^5(u%DBdRlu(7_nxteGq`+9_KE9$g4;frJ~jtrJIr?1I}&}Du|3cqcTHWP zilF>1=eN3@Q`pMY@~)HN^Yh4>++tPLCbd?~n5?)+4h#@gHQFg-v}>LBE#KkOws#b3 z8}&q%kSo)NT8u5n5JwtBsa6%_$tGrHWC!Bo%wN(>IY~Wf4cTb6!QY?65sa08{Tj5B z3)*NU=c~iQBg^fB^L-?-ByNTKyF6FO1xpbC_o&8X;`oI{BeKon66ZD+LqJK6Ir7&g z)C4hQ{*D4a*&ZZvIDP-ky^(+EI|MgYcmGrjjR3wteP+6JDyt2Tuqmf{;&sx4pRxMA z>V})~VUeFO;3o@DK@?>Sf9dW5_>NQLi8f3XlC|3-x{*n z@=0&xPDw61=liF`TO5|tHND*{m6f<2W@#iQ6!DXM~RaN zK$U~cawXF~DSLegmH&u3(VM>!F_)$Nbo)bIZv|zlw*RcYPg|BU#HVUyesQ<- zLt>2}D00s5m&qgMMGyA895XAC5u+3I|X28#*o9T3lz1jP{pmY zVL8q>(ZwoocW{njq{jb;rV&!TCe@`tApX-?~t2SBIfkGF6%u;Ij!U{`ogcnK66noi7%WPA#c zxaG&K4hQL~g2}p)nH_xEWkcsmn^>2#)8!uyX2`wH@u8zIstsv=^F-0r*uB*`cjeu`F%u%r^J4Fid7sJzRpocrP&S=~n{A>ixd8phH;{x%z_ zu#VTpy9(jY$j#rxz|L?>oI--m9rO%qqiNIUcMFJYqtAd;;NuFrE?x zblLwM7$9^DUo6iY-G^YqP&c?0n$MlZaE>BpF9&(ev4#+i`TuGAQfF^@o6WreU^w`M zCV{rhOZj*b8=*FQ$i8~keG(BHh6|RjHh7+SGX7-KbU89z;)Az-dtvJu0VGx+cr7Ca zNiEmwywdHDWR1SQ+2+vNmLhXNgLPFxFBrMEp~+TDJ484G+9%fRub2^Zu)=uC?E(BO zA%hLQ3y8)EN_Vp@O>sFqaXe$lSO?n0`?hV=D{kLPD{-LU?h%vw6}Io+7TheMz`CVS zg5f}^RVMpZi5=H}V&uHqr+HU)TKnU3tS>CyP+rdEB zWBf`2PiKSbq#p=%O}g!QP5H;c1s!$pM|N7MEjH*=J7`(9D;Z_69_pPoY}BHSw^>DC zFEZ0x1%MtT;cwTvEF5hDoy3Ovzc_?)71LTTHCL6;(B}mA&OMg9sTxHZ$ zmoWX&krYl>yx>E|Qjr>?b@%`6jg}g6zv_$;rRygI$7~S10Q^+QxXH_*1n%G_pQj6| zJUo)0W-E>21|2_BHlFV{p;oKw^f#x$3X^!?_}`cntp5wMf{}%p{(m49jQC9dK`WU5 zXZim!E0`EL7}@`SnH8#aAVtu|aS3(T&LjeBoD zu3de1-$#6B(JZ5wSDkkeR=Q5SPa4DTjZn+pp{t+#23AzymY$fLaQ?-)K`brY^Xm(O zb8!9qLSl2%koxX_rKLtirA7xJ>Fn(5_VbIJTwF`)-C3ADT$@Yi>RO9~h)7hKoaz97 z7(lV=80KbnmNp{~epu4|aOG$Bx8(l`uF~Wt6#lI_sJ=cB{k#)BgCl*@FG|EuA56{7 zZzID(69^_yF!iqA=EX%8XZs)`wE9;2W(H;!yFI|~FC;z_{@+wq?k621fRCDgP*rtH zNNx%N|Kfu7+%7EsxhWL0GZV{u7~ck-Gmf^+@5wz~>oI_t5;&4S_dKro*|Y3E9Sh*% zoi+f7pM?PbQyhI_DHuQ1mm8B9l~6uT{{RStJVFx4_&Pw%@687uFlE1AG4TA-{GVOK zI@Wr|W;d0oouz=0jhQqR5w*l`E;K$+Gtg$wle+j`pL5j{z0KjJeq5Oru zhUDC!oC;|EpxDsZ*jNnyx3#l3xth0K^#2@o?Z2+?X|&CggN}ui|K(}ZTl-|*KWcOU zZkL~(ucHAhO-J8ko9Y?*-hO({a{pk+tIR&}B%S+qMyjK$0iU1$N^Q^0pY)z{eu>C7 z{$_|1fqyd;Ha8D?cmNvrhKeP|q|NSsMgII)75^Il{xXaGLO%X5O8?pbKbda+Ol^N9 zrGek?MxeMf)xW7&HuNe0|16gO>KB`sTkL;q-uCWP{QrE<-)m}S{=(`8^LCJ&=9}nQ z_L~@6-@nF}b=Q|c&B?7U|L?OeHr0dweraFSZPG~B_&2V;mipa9yh#+4ec8E1l9qy< zs`7hz0bqUg)jePDl{f&*H+_$xzVGJyG5%|0tY>9zVFaV6ZvuF}zJAs|INt@&4amUQ zmxZVIfxiI)=6Qo!GbF#app=&Xf0S_na$t zYB&6vEBDIgIfws;)ng|A9+M8x9Qj{Oi{yXedh%ak*W_OK4^Pmi-Lr4mTi5Gbx+h#8 z-Co4yU(ETQ8gI?-m*@M}rw*(S7Z0%0{@2#%IXv5F-`wAi{;$u2ZsmU``rzpdXc_tH z|6YScTGAs+P3?nRSn6qF`3CMS1Nn`;*CoBj!#Ka#MPd51xt|>#U%r5k>#ME7x%sts zXJhyU?p31ykU7^;K~lp)%3r}ly)!HI>vw}Q{ZDvi{`~J)G`|7&K7Zm^Mb_~A3gWh5!t$wnOyri%Ay3a56teQW3esYII=itm=;!qhD z{?4BBU_JNln_2n0{CG0_vKqgyrk6kCSm*nqOux3SbeOcnuHM$NfALxt`|^GZp1x>H zTmE#e^dQck!)mARPG9ft>iU*?l^WXSo7g^xhPjgVx_950YJwtg?&D5-(=PX|f5L{m zV8;0Ny_m9p{qF`j{up-dc4__k-|lPwyNkk(Z<1HsF;AW?>eGJ>h6}Hi>17v0X?ja6+)1E`q%1l|E)v~e1Sb+q z3?4pE{D$XRD`N3wEv!~dbl%rc*cK>{%L{MBYJ=Gp*m!fy(|Bgc?CTL~md>2pt)ONs zw1uuXzK>i_hBDa(qJxojhZ^qP6thXE7zob`wPRHlsPKNvGY0iIYTXl9SOT{j9d=>^ z#P`<6-3WLTJaC)`CEzCd&Um6@G++`(IS$;WFLz!}-tffCOVW;=ggZwPN#C%9;@x`m zX7rNcG?l^G`Neok6@&jMqMoFMV#_6@?jXBMGl;G z$eipRDhjj0z0*e%(^tozLW38YUD~G*16CI+lSM@v`#nPvJ#uGBir90fh+_+mMsy+yck1n)veT~qA>^9G=gfD%!T~B-R+EVlGfD`UY zSn;ijPFtT`qt~1V;c6_^EywYKiM!_ys~k|Qv-_+UNQT4JDn z5OBIegDT}qsxsfQN^!xBd4(XeDV=@uGK~JQA_u}5zCr9fu0i_zu4SAyBET$T3tn38 z-y^1jJg^g0Cs`pCRa`Hwm92%9cf1Imd#T8FY(QR}**ch_qf*H$qKG0_SN06s&*rvG zMmHJ;GNu>nZSgZ%{v@Le;(m8XV0xoh#lBU4NVi&dI9g9igWu)T#|wRN8m3Yi%>A0$ zroT8r7^iLt^{UURN!88ybPQpo+Q+kCou4;-wNho*(toLu2P08$&17*?Ka1F^7XtQf z7FeD>3v-bg!rHAZ+QySreENOMCW;E4A5FF6@8OmUjI7YBHK#I^)syFy3q>M4_-r}x zgM%d^*z$88_Fy6)rEwGYZY6J(jx9NT+ zR-L#a{@L5l_4oa(5jqc5#UVB&`<#;wlG1!a2CdD2iavuE7}YRe%#b%TnF)dwIu^z_ zN&PHP<&=DDBgxsvSsfC$22SOhoaVXE=Xh+#PzE!io&5D^nAb(5`g6uN)FL@raSI_K z!~DC==I7R|uNE@;`2+@~=WoHsryDxzH^97tTTx+9vvEVul;vUA=Xh4rx)--VQ-;L= zxywlIZ{7vlXeEb|a)}**6`TW(mq7A!!8z8BPtm~N?HMP*X$oRIcS^Q4kRE{!kxcmCU?QZI+&x>TlORce^L zQuYUnD&0g*fR!o1;bPD!#olPm9I9QeaQO!6@`L^;>W@gXR+^2aPIW(zZhdR7`%?MU zGb$xKwW7wOk_#84HSo6CX<|%JWGEa-hXx3hi`olj4l{%BNAV7@561B4gb9)00vVzu zmldj(v^?`oy&o(`*f5nv5L0Dnr_$G;N>B3^+}I|E2lu_t)4{Y1@=7T=7A9k%l6j%{ z;)%ySP2MCL`q;-CVLF?@w+JYgyWGJN5Wrc5(h&h*Uup*FE*4~*1kK{J3gO+c0`P|VaX(5-pqjm z(*P+C@Exo(35wjB_8K0mth(g>g~FB2mTIRiv>N3ZhK}3#kNVi%Ln2HUv@A69$u-;N z&$3QPaKN&K5ikpj0L-pp>itr$ETUt4!Ib*G`R@6fj+dT#lDMdiRlUfb5$rZ}KXmO= zXp3+jh;}CS*dbn0CXNk!zFBk#ZF*eYpzZTIJ53!dc3HDsF98i!J6gP>1fH}%YH^D~ zayzrHmO@2EYsBm5k0R$ob@nGsxF32!^ugL4+Jn z?~^nCaGmv(9_X3iRC^?zJYTytyL5IG_EW7fg(~Eg3gvGs6JV&2%1+D^W1s5xEv7sv zu-8$8x0~j|53z%>dEkQQAH2ZU7pBMtbd9KZZ?sbcB#Vj1wRdZ*@+-16^dXFKsz(#) z%sMC}mdGygz9jHJrehR&L>g~5s8MD|hzGpS1$KmX|0yl~TS)F#c+l7`TOs5z>w(W! z>phka=0KLs0gwWn&DOy~78I#qkMAd-4(4gNL%Z=;)%drYiK_izPZ>cNYL{bO^tDf_ zy31&^7RonePu&JG*l|kRzTlIzdtFdXU35^-x2#)DE&WO1ceU9W{5HT?u|s^}!7Z#{b=^fAyG@HZ;VoyoSkqil7)uqKASNWTu!IDKfLF1Wu9AJge=qW<<{~smJX%m_P%-nLB{+#i^^Ll$-m)d?_%70aE$Mbl znWanSLCI}>aS*7j2kDGvLAelQKDBP&0~iOj5oulKwJSB7_ zaGW70Rn&Nh($^sZ*r?vLXp@YNm$7@{3t2L6`$j6re(C+A>8d@zf-Gee{X-RuhEg=1 zgs>OoM$|AG6NZ#3HYqz}YSEzyM+}r8tb8(r6F)%6t%sSHxc4Ux#X<@Oz z5DJOOeQd+iY%(;u66wa#2+*s3h43Hr!Q=H(#DClfGFcTgG_6iUlg6?+aemjzK??>u zPFKa`7-qr>(A;Pn$t5zVYrVug{!csx3pQkf1dX4~%ld~IW#qTR8Mu_o^G2;%n7q^G z!dgc-pfdq$Xf$BHN1BGH`$u9gySO)fAIUVLm~ikC5r+Ct3NQ}){fICZiLzVR+63K* zPK~b!16VYxXR4(l1S;~#c>Vbs!t_3LUEt5U&ro@hH!E|J;W*&)J+@|x9#dcCFpo7c zrrYVsbw3KynBEe^$Ws{$0+A-Rsm!8Ixe7L?NK)yf

4!LL&es&3gqiNl4Y2z#m?$j9f*rU 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 literal 0 HcmV?d00001