diff --git a/contracts/mainnet/connectors/compound-import/events.sol b/contracts/mainnet/connectors/compound-import/events.sol
new file mode 100644
index 00000000..cf2c0a6e
--- /dev/null
+++ b/contracts/mainnet/connectors/compound-import/events.sol
@@ -0,0 +1,5 @@
+pragma solidity ^0.7.6;
+
+contract Events {
+    
+}
\ No newline at end of file
diff --git a/contracts/mainnet/connectors/compound-import/helpers.sol b/contracts/mainnet/connectors/compound-import/helpers.sol
new file mode 100644
index 00000000..c6042b9c
--- /dev/null
+++ b/contracts/mainnet/connectors/compound-import/helpers.sol
@@ -0,0 +1,41 @@
+pragma solidity ^0.7.6;
+
+import { DSMath } from "../../common/math.sol";
+import { Basic } from "../../common/basic.sol";
+import { ComptrollerInterface, CompoundMappingInterface, CETHInterface } from "./interface.sol";
+
+abstract contract Helpers is DSMath, Basic {
+
+    /**
+     * @dev Compound CEth 
+     */
+    CETHInterface internal constant cEth = CETHInterface(0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5);
+
+    /**
+     * @dev Compound Comptroller
+     */
+    ComptrollerInterface internal constant troller = ComptrollerInterface(0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B);
+
+    /**
+     * @dev Compound Mapping
+     */
+    CompoundMappingInterface internal constant compMapping = CompoundMappingInterface(0xe7a85d0adDB972A4f0A4e57B698B37f171519e88);
+
+    /**
+     * @dev enter compound market
+     */
+    function enterMarket(address cToken) internal {
+        address[] memory markets = troller.getAssetsIn(address(this));
+        bool isEntered = false;
+        for (uint i = 0; i < markets.length; i++) {
+            if (markets[i] == cToken) {
+                isEntered = true;
+            }
+        }
+        if (!isEntered) {
+            address[] memory toEnter = new address[](1);
+            toEnter[0] = cToken;
+            troller.enterMarkets(toEnter);
+        }
+    }
+}
\ No newline at end of file
diff --git a/contracts/mainnet/connectors/compound-import/interface.sol b/contracts/mainnet/connectors/compound-import/interface.sol
new file mode 100644
index 00000000..7a08c094
--- /dev/null
+++ b/contracts/mainnet/connectors/compound-import/interface.sol
@@ -0,0 +1,46 @@
+pragma solidity ^0.7.6;
+
+interface TokenInterface {
+    function balanceOf(address) external view returns (uint);
+    function allowance(address, address) external view returns (uint);
+    function approve(address, uint) external;
+    function transfer(address, uint) external returns (bool);
+    function transferFrom(address, address, uint) external returns (bool);
+}
+
+interface CTokenInterface {
+    function mint(uint mintAmount) external returns (uint);
+    function redeem(uint redeemTokens) external returns (uint);
+    function borrow(uint borrowAmount) external returns (uint);
+    function repayBorrow(uint repayAmount) external returns (uint);
+    function repayBorrowBehalf(address borrower, uint repayAmount) external returns (uint); // For ERC20
+    function liquidateBorrow(address borrower, uint repayAmount, address cTokenCollateral) external returns (uint);
+
+    function borrowBalanceCurrent(address account) external returns (uint);
+    function redeemUnderlying(uint redeemAmount) external returns (uint);
+    function exchangeRateCurrent() external returns (uint);
+
+    function balanceOf(address owner) external view returns (uint256 balance);
+    function transferFrom(address, address, uint) external returns (bool);
+    function allowance(address, address) external view returns (uint);
+
+}
+
+interface CETHInterface {
+    function mint() external payable;
+    function repayBorrow() external payable;
+    function repayBorrowBehalf(address borrower) external payable;
+    function liquidateBorrow(address borrower, address cTokenCollateral) external payable;
+}
+
+interface ComptrollerInterface {
+    function enterMarkets(address[] calldata cTokens) external returns (uint[] memory);
+    function exitMarket(address cTokenAddress) external returns (uint);
+    function getAssetsIn(address account) external view returns (address[] memory);
+    function getAccountLiquidity(address account) external view returns (uint, uint, uint);
+}
+
+interface CompoundMappingInterface {
+    function cTokenMapping(string calldata tokenId) external view returns (address);
+    function getMapping(string calldata tokenId) external view returns (address, address);
+}
diff --git a/contracts/mainnet/connectors/compound-import/main.sol b/contracts/mainnet/connectors/compound-import/main.sol
new file mode 100644
index 00000000..456ed1f5
--- /dev/null
+++ b/contracts/mainnet/connectors/compound-import/main.sol
@@ -0,0 +1,250 @@
+pragma solidity ^0.7.6;
+pragma experimental ABIEncoderV2;
+
+import { TokenInterface, AccountInterface } from "../../common/interfaces.sol";
+import { CTokenInterface } from "./interface.sol";
+import { Helpers } from "./helpers.sol";
+import { Events } from "./events.sol";
+
+// 1. Get info for all the assets the user has supplied as collateral and the assets he borrowed.
+// 2. Take the flash loan for all the borrowed assets.
+// 3. Using this flash loan, pay back the user's debt in the EOA account.
+// 4. After paying the debt, transfer the user's tokens from EOA to DSA.
+// 5. Then borrow debt of same tokens but include flash loan fee in it.
+// 6. Payback the flash loan for all the tokens.
+
+// fill logics in contract functions
+contract FlashLoanHelper is Helpers, Events {
+    function _flashLoan(
+        address[] memory _tokens,
+        uint256[] memory _amts
+    ) internal {
+        // fill in logic for flash loans
+    }
+
+    function _repayFlashLoan(
+        address[] memory _tokens,
+        uint256[] memory _amts
+    ) internal {
+        // fill in logic for flash loan repayment
+    }
+}
+
+contract CompoundResolver is Helpers, Events {
+    function _repayUserDebt(
+        address _userAccount,
+        CTokenInterface[] memory _cTokenContracts,
+        uint[] memory _borrowAmts
+    ) internal {
+        for(uint i = 0; i < _cTokenContracts.length; i++){
+            if(_borrowAmts[i] > 0){
+                if(address(_cTokenContracts[i]) == address(cEth)){
+                    cEth.repayBorrowBehalf{value: _borrowAmts[i]}(_userAccount);
+                }
+                else{
+                    require(_cTokenContracts[i].repayBorrowBehalf(_userAccount, _borrowAmts[i]) == 0, "repayOnBehalf-failed");
+                }
+            }
+        }
+    }
+
+    function _transferTokensToDsa(
+        address _userAccount, 
+        CTokenInterface[] memory _cTokenContracts,
+        uint[] memory _amts
+    ) internal {
+        for(uint i = 0; i < _cTokenContracts.length; i++) {
+            if(_amts[i] > 0) {
+                require(_cTokenContracts[i].transferFrom(_userAccount, address(this), _amts[i]), "ctoken-transfer-failed-allowance?");
+            }
+        }
+    }
+
+    function _borrowDebtPosition(
+        CTokenInterface[] memory _ctokenContracts, 
+        uint[] memory _amts
+    ) internal {
+        for (uint i = 0; i < _ctokenContracts.length; i++) {
+            if (_amts[i] > 0) {
+            // add _amts flash loan fees to _amts[i]
+                require(_ctokenContracts[i].borrow(_amts[i]) == 0, "borrow-failed-collateral?");
+            }
+        }        
+    }
+}
+
+contract CompoundHelpers is CompoundResolver {
+    struct ImportData {
+        address[] cTokens; // is the list of all tokens the user has interacted with (supply/borrow) -> used to enter markets
+        uint[] borrowAmts;
+        uint[] supplyAmts;
+        address[] borrowTokens;
+        address[] supplyTokens;
+        CTokenInterface[] borrowCtokens;
+        CTokenInterface[] supplyCtokens;
+        address[] supplyCtokensAddr;
+        address[] borrowCtokensAddr;
+    }
+
+    struct ImportInputData {
+        address userAccount;
+        string[] supplyIds;
+        string[] borrowIds;
+    }
+
+    function getBorrowAmounts (
+        ImportInputData memory _importInputData,
+        ImportData memory data
+    ) internal returns(ImportData memory) {
+        if (_importInputData.borrowIds.length > 0) {
+            // initialize arrays for borrow data
+            data.borrowTokens = new address[](_importInputData.borrowIds.length);
+            data.borrowCtokens = new CTokenInterface[](_importInputData.borrowIds.length);
+            data.borrowCtokensAddr = new address[](_importInputData.borrowIds.length);
+            data.borrowAmts = new uint[](_importInputData.borrowIds.length);
+
+            // check for repeated tokens
+            for (uint i = 0; i < _importInputData.borrowIds.length; i++) {
+                bytes32 i_hash = keccak256(abi.encode(_importInputData.borrowIds[i]));
+                for (uint j = i + 1; j < _importInputData.borrowIds.length; j++) {
+                    bytes32 j_hash = keccak256(abi.encode(_importInputData.borrowIds[j]));
+                    require(i_hash != j_hash, "token-repeated");
+                }
+            }
+
+            // populate the arrays with borrow tokens, cToken addresses and instances, and borrow amounts
+            for (uint i = 0; i < _importInputData.borrowIds.length; i++) {
+                (address _token, address _cToken) = compMapping.getMapping(_importInputData.borrowIds[i]);
+
+                require(_token != address(0) && _cToken != address(0), "ctoken mapping not found");
+
+                data.cTokens[i] = _cToken;
+
+                data.borrowTokens[i] = _token;
+                data.borrowCtokens[i] = CTokenInterface(_cToken);
+                data.borrowCtokensAddr[i] = _cToken;
+                data.borrowAmts[i] = data.borrowCtokens[i].borrowBalanceCurrent(_importInputData.userAccount);
+
+                // give the resp. cToken address approval to spend tokens
+                if (_token != ethAddr && data.borrowAmts[i] > 0) {
+                    // will be required when repaying the borrow amount on behalf of the user
+                    TokenInterface(_token).approve(_cToken, data.borrowAmts[i]);
+                }
+            }
+        }
+        return data;
+    }
+
+    function getSupplyAmounts (
+        ImportInputData memory _importInputData,
+        ImportData memory data
+    ) internal view returns(ImportData memory) {
+        // initialize arrays for supply data
+        data.supplyTokens = new address[](_importInputData.supplyIds.length);
+        data.supplyCtokens = new CTokenInterface[](_importInputData.supplyIds.length);
+        data.supplyCtokensAddr = new address[](_importInputData.supplyIds.length);
+        data.supplyAmts = new uint[](_importInputData.supplyIds.length);
+
+        // check for repeated tokens
+        for (uint i = 0; i < _importInputData.supplyIds.length; i++) {
+            bytes32 i_hash = keccak256(abi.encode(_importInputData.supplyIds[i]));
+            for (uint j = i + 1; j < _importInputData.supplyIds.length; j++) {
+                bytes32 j_hash = keccak256(abi.encode(_importInputData.supplyIds[j]));
+                require(i_hash != j_hash, "token-repeated");
+            }
+        }
+
+        // populate arrays with supply data (supply tokens address, cToken addresses, cToken instances and supply amounts)
+        for (uint i = 0; i < _importInputData.supplyIds.length; i++) {
+            (address _token, address _cToken) = compMapping.getMapping(_importInputData.supplyIds[i]);
+            
+            require(_token != address(0) && _cToken != address(0), "ctoken mapping not found");
+
+            uint _supplyIndex = add(i, _importInputData.borrowIds.length);
+            data.cTokens[_supplyIndex] = _cToken;
+
+            data.supplyTokens[i] = _token;
+            data.supplyCtokens[i] = CTokenInterface(_cToken);
+            data.supplyCtokensAddr[i] = (_cToken);
+            data.supplyAmts[i] = data.supplyCtokens[i].balanceOf(_importInputData.userAccount);
+        }
+        return data;
+    }
+}
+
+contract CompoundImportResolver is CompoundHelpers, FlashLoanHelper {
+
+    // get info for all the assets the user has supplied as collateral and the assets borrowed
+    function _importCompound(
+        ImportInputData memory importInputData
+    ) internal returns (string memory _eventName, bytes memory _eventParam) {
+        require(AccountInterface(address(this)).isAuth(importInputData.userAccount), "user-account-not-auth");
+
+        require(importInputData.supplyIds.length > 0, "0-length-not-allowed");
+
+        ImportData memory data;
+
+        uint _length = add(importInputData.supplyIds.length, importInputData.borrowIds.length);
+        data.cTokens = new address[](_length);
+
+        data = getBorrowAmounts(importInputData, data);
+        data = getSupplyAmounts(importInputData, data);
+
+        for(uint i = 0; i < data.cTokens.length; i++){
+            enterMarket(data.cTokens[i]);
+        }
+
+        // take flash loan for all the borrowed assets
+        // use the addresses of the borrowed tokens and their amounts to get the same flash loans
+        _flashLoan(data.borrowTokens, data.borrowAmts);
+
+        // pay back user's debt using flash loan funds
+        _repayUserDebt(importInputData.userAccount, data.borrowCtokens, data.borrowAmts);
+
+        // transfer user's tokens to DSA
+        _transferTokensToDsa(importInputData.userAccount, data.supplyCtokens, data.supplyAmts);
+
+        // borrow the earlier position from Compound with flash loan fee added
+        _borrowDebtPosition(data.borrowCtokens, data.borrowAmts);
+
+        // payback flash loan 
+        _repayFlashLoan(data.borrowTokens, data.borrowAmts); // update borrowAmounts with flash loan fee
+
+        _eventName = "LogCompoundImport(address,address[],string[],string[],uint256[],uint256[])";
+        _eventParam = abi.encode(
+            importInputData.userAccount,
+            data.cTokens,
+            importInputData.supplyIds,
+            importInputData.borrowIds,
+            data.supplyAmts,
+            data.borrowAmts
+        );
+    }
+
+    function importCompound(
+        address userAccount,
+        string[] memory supplyIds,
+        string[] memory borrowIds
+    ) external payable returns (string memory _eventName, bytes memory _eventParam) {
+        ImportInputData memory inputData = ImportInputData({
+            userAccount: userAccount,
+            supplyIds: supplyIds,
+            borrowIds: borrowIds
+        }); 
+
+        (_eventName, _eventParam) = _importCompound(inputData);
+    }
+
+    function migrateCompound(
+        string[] memory supplyIds,
+        string[] memory borrowIds
+    ) external payable returns (string memory _eventName, bytes memory _eventParam) {
+        ImportInputData memory inputData = ImportInputData({
+            userAccount: msg.sender,
+            supplyIds: supplyIds,
+            borrowIds: borrowIds
+        });
+
+        (_eventName, _eventParam) = _importCompound(inputData);
+    }
+}
diff --git a/yarn.lock b/yarn.lock
index ecf0f61b..c636f51d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -30,6 +30,11 @@
   dependencies:
     "regenerator-runtime" "^0.13.4"
 
+"@bitauth/libauth@^1.17.1":
+  "integrity" "sha512-UtfCijrCcPCQdstlxiv29hBNuYs/1hqeDMgS6CPjxps7r7/y/0p9TRGDx65fczlO12Pa5rQdWO/GzwsXo03uIg=="
+  "resolved" "https://registry.npmjs.org/@bitauth/libauth/-/libauth-1.19.0.tgz"
+  "version" "1.19.0"
+
 "@cspotcode/source-map-consumer@0.8.0":
   "integrity" "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg=="
   "resolved" "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz"
@@ -221,22 +226,7 @@
     "rustbn.js" "~0.2.0"
     "util.promisify" "^1.0.1"
 
-"@ethersproject/abi@^5.0.0", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0":
-  "integrity" "sha512-9gU2H+/yK1j2eVMdzm6xvHSnMxk8waIHQGYCZg5uvAyH0rsAzxkModzBSpbAkAuhKFEovC2S9hM4nPuLym8IZw=="
-  "resolved" "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.4.0.tgz"
-  "version" "5.4.0"
-  dependencies:
-    "@ethersproject/address" "^5.4.0"
-    "@ethersproject/bignumber" "^5.4.0"
-    "@ethersproject/bytes" "^5.4.0"
-    "@ethersproject/constants" "^5.4.0"
-    "@ethersproject/hash" "^5.4.0"
-    "@ethersproject/keccak256" "^5.4.0"
-    "@ethersproject/logger" "^5.4.0"
-    "@ethersproject/properties" "^5.4.0"
-    "@ethersproject/strings" "^5.4.0"
-
-"@ethersproject/abi@^5.5.0":
+"@ethersproject/abi@^5.0.0", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.0.12", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@5.5.0":
   "integrity" "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w=="
   "resolved" "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz"
   "version" "5.5.0"
@@ -279,21 +269,6 @@
     "@ethersproject/properties" "^5.0.3"
     "@ethersproject/strings" "^5.0.4"
 
-"@ethersproject/abi@5.5.0":
-  "integrity" "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w=="
-  "resolved" "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz"
-  "version" "5.5.0"
-  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"
-
 "@ethersproject/abstract-provider@^5.0.8":
   "version" "5.0.8"
   dependencies:
@@ -338,7 +313,7 @@
     "@ethersproject/logger" "^5.5.0"
     "@ethersproject/properties" "^5.5.0"
 
-"@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.5.0", "@ethersproject/address@5.5.0":
+"@ethersproject/address@^5.0.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.4.0", "@ethersproject/address@^5.5.0", "@ethersproject/address@5.5.0":
   "integrity" "sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw=="
   "resolved" "https://registry.npmjs.org/@ethersproject/address/-/address-5.5.0.tgz"
   "version" "5.5.0"
@@ -385,7 +360,7 @@
     "@ethersproject/logger" "^5.0.8"
     "bn.js" "^4.4.0"
 
-"@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.4.0", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.5.0", "@ethersproject/bignumber@5.5.0":
+"@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.1.1", "@ethersproject/bignumber@^5.4.1", "@ethersproject/bignumber@^5.5.0", "@ethersproject/bignumber@5.5.0":
   "integrity" "sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg=="
   "resolved" "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.5.0.tgz"
   "version" "5.5.0"
@@ -446,7 +421,7 @@
   optionalDependencies:
     "@ledgerhq/hw-transport-node-hid" "5.26.0"
 
-"@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.4.0", "@ethersproject/hash@^5.5.0", "@ethersproject/hash@5.5.0":
+"@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.5.0", "@ethersproject/hash@5.5.0":
   "integrity" "sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg=="
   "resolved" "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.5.0.tgz"
   "version" "5.5.0"
@@ -509,7 +484,7 @@
     "aes-js" "3.0.0"
     "scrypt-js" "3.0.1"
 
-"@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.4.0", "@ethersproject/keccak256@^5.5.0", "@ethersproject/keccak256@5.5.0":
+"@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.5.0", "@ethersproject/keccak256@5.5.0":
   "integrity" "sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg=="
   "resolved" "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.5.0.tgz"
   "version" "5.5.0"
@@ -523,7 +498,7 @@
     "@ethersproject/bytes" "^5.0.9"
     "js-sha3" "0.5.7"
 
-"@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.4.0", "@ethersproject/logger@^5.5.0", "@ethersproject/logger@5.5.0":
+"@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.5.0", "@ethersproject/logger@5.5.0":
   "integrity" "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg=="
   "resolved" "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.5.0.tgz"
   "version" "5.5.0"
@@ -551,7 +526,7 @@
     "@ethersproject/bytes" "^5.5.0"
     "@ethersproject/sha2" "^5.5.0"
 
-"@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.4.0", "@ethersproject/properties@^5.5.0", "@ethersproject/properties@5.5.0":
+"@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.5.0", "@ethersproject/properties@5.5.0":
   "integrity" "sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA=="
   "resolved" "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.5.0.tgz"
   "version" "5.5.0"
@@ -639,7 +614,7 @@
     "elliptic" "6.5.4"
     "hash.js" "1.1.7"
 
-"@ethersproject/solidity@^5.4.0", "@ethersproject/solidity@5.5.0":
+"@ethersproject/solidity@^5.0.0", "@ethersproject/solidity@^5.0.9", "@ethersproject/solidity@^5.4.0", "@ethersproject/solidity@5.5.0":
   "integrity" "sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw=="
   "resolved" "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.5.0.tgz"
   "version" "5.5.0"
@@ -651,7 +626,7 @@
     "@ethersproject/sha2" "^5.5.0"
     "@ethersproject/strings" "^5.5.0"
 
-"@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.4.0", "@ethersproject/strings@^5.5.0", "@ethersproject/strings@5.5.0":
+"@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.5.0", "@ethersproject/strings@5.5.0":
   "integrity" "sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ=="
   "resolved" "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.5.0.tgz"
   "version" "5.5.0"
@@ -901,6 +876,71 @@
   dependencies:
     "@types/bignumber.js" "^5.0.0"
 
+"@oclif/command@^1.8.0":
+  "integrity" "sha512-rmVKYEsKzurfRU0xJz+iHelbi1LGlihIWZ7Qvmb/CBz1EkhL7nOkW4SVXmG2dA5Ce0si2gr88i6q4eBOMRNJ1w=="
+  "resolved" "https://registry.npmjs.org/@oclif/command/-/command-1.8.16.tgz"
+  "version" "1.8.16"
+  dependencies:
+    "@oclif/config" "^1.18.2"
+    "@oclif/errors" "^1.3.5"
+    "@oclif/help" "^1.0.1"
+    "@oclif/parser" "^3.8.6"
+    "debug" "^4.1.1"
+    "semver" "^7.3.2"
+
+"@oclif/config@^1.18.2", "@oclif/config@1.18.2":
+  "integrity" "sha512-cE3qfHWv8hGRCP31j7fIS7BfCflm/BNZ2HNqHexH+fDrdF2f1D5S8VmXWLC77ffv3oDvWyvE9AZeR0RfmHCCaA=="
+  "resolved" "https://registry.npmjs.org/@oclif/config/-/config-1.18.2.tgz"
+  "version" "1.18.2"
+  dependencies:
+    "@oclif/errors" "^1.3.3"
+    "@oclif/parser" "^3.8.0"
+    "debug" "^4.1.1"
+    "globby" "^11.0.1"
+    "is-wsl" "^2.1.1"
+    "tslib" "^2.0.0"
+
+"@oclif/errors@^1.2.2", "@oclif/errors@^1.3.3", "@oclif/errors@^1.3.5", "@oclif/errors@1.3.5":
+  "integrity" "sha512-OivucXPH/eLLlOT7FkCMoZXiaVYf8I/w1eTAM1+gKzfhALwWTusxEx7wBmW0uzvkSg/9ovWLycPaBgJbM3LOCQ=="
+  "resolved" "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.5.tgz"
+  "version" "1.3.5"
+  dependencies:
+    "clean-stack" "^3.0.0"
+    "fs-extra" "^8.1"
+    "indent-string" "^4.0.0"
+    "strip-ansi" "^6.0.0"
+    "wrap-ansi" "^7.0.0"
+
+"@oclif/help@^1.0.1":
+  "integrity" "sha512-8rsl4RHL5+vBUAKBL6PFI3mj58hjPCp2VYyXD4TAa7IMStikFfOH2gtWmqLzIlxAED2EpD0dfYwo9JJxYsH7Aw=="
+  "resolved" "https://registry.npmjs.org/@oclif/help/-/help-1.0.1.tgz"
+  "version" "1.0.1"
+  dependencies:
+    "@oclif/config" "1.18.2"
+    "@oclif/errors" "1.3.5"
+    "chalk" "^4.1.2"
+    "indent-string" "^4.0.0"
+    "lodash" "^4.17.21"
+    "string-width" "^4.2.0"
+    "strip-ansi" "^6.0.0"
+    "widest-line" "^3.1.0"
+    "wrap-ansi" "^6.2.0"
+
+"@oclif/linewrap@^1.0.0":
+  "integrity" "sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw=="
+  "resolved" "https://registry.npmjs.org/@oclif/linewrap/-/linewrap-1.0.0.tgz"
+  "version" "1.0.0"
+
+"@oclif/parser@^3.8.0", "@oclif/parser@^3.8.6":
+  "integrity" "sha512-tXb0NKgSgNxmf6baN6naK+CCwOueaFk93FG9u202U7mTBHUKsioOUlw1SG/iPi9aJM3WE4pHLXmty59pci0OEw=="
+  "resolved" "https://registry.npmjs.org/@oclif/parser/-/parser-3.8.6.tgz"
+  "version" "3.8.6"
+  dependencies:
+    "@oclif/errors" "^1.2.2"
+    "@oclif/linewrap" "^1.0.0"
+    "chalk" "^4.1.0"
+    "tslib" "^2.0.0"
+
 "@openzeppelin/contract-loader@^0.6.2":
   "integrity" "sha512-/P8v8ZFVwK+Z7rHQH2N3hqzEmTzLFjhMtvNK4FeIak6DEeONZ92vdFaFb10CCCQtp390Rp/Y57Rtfrm50bUdMQ=="
   "resolved" "https://registry.npmjs.org/@openzeppelin/contract-loader/-/contract-loader-0.6.2.tgz"
@@ -1057,10 +1097,10 @@
   dependencies:
     "type-detect" "4.0.8"
 
-"@sinonjs/fake-timers@^7.0.4":
-  "integrity" "sha512-fUt6b15bjV/VW93UP5opNXJxdwZSbK1EdiwnhN7XrQrcpaOhMJpZ/CjwFpM3THpxwA+YviBUJKSuEqKlCK5alw=="
-  "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.0.5.tgz"
-  "version" "7.0.5"
+"@sinonjs/fake-timers@^7.1.0":
+  "integrity" "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg=="
+  "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz"
+  "version" "7.1.2"
   dependencies:
     "@sinonjs/commons" "^1.7.0"
 
@@ -1271,6 +1311,18 @@
   "resolved" "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-5.0.2.tgz"
   "version" "5.0.2"
 
+"@types/async-retry@^1.4.2":
+  "integrity" "sha512-B3C9QmmNULVPL2uSJQ088eGWTNPIeUk35hca6CV8rRDJ8GXuQJP5CCVWA1ZUCrb9xYP7Js/RkLqnNNwKhe+Zsw=="
+  "resolved" "https://registry.npmjs.org/@types/async-retry/-/async-retry-1.4.3.tgz"
+  "version" "1.4.3"
+  dependencies:
+    "@types/retry" "*"
+
+"@types/await-timeout@^0.3.1":
+  "integrity" "sha512-H5PzROT4KuP7XQDua13Iw8did//OCKAZ/3TL15DjvMzDonrk4HvhH1+tLko96f2guU6XaD3AoqRa49ZOwbwNig=="
+  "resolved" "https://registry.npmjs.org/@types/await-timeout/-/await-timeout-0.3.1.tgz"
+  "version" "0.3.1"
+
 "@types/bignumber.js@^5.0.0":
   "integrity" "sha512-0DH7aPGCClywOFaxxjE6UwpN2kQYe9LwuDQMv+zYA97j5GkOMo8e66LYT+a8JYU7jfmUFRZLa9KycxHDsKXJCA=="
   "resolved" "https://registry.npmjs.org/@types/bignumber.js/-/bignumber.js-5.0.0.tgz"
@@ -1292,6 +1344,20 @@
   dependencies:
     "@types/node" "*"
 
+"@types/bunyan-blackhole@^0.2.2":
+  "integrity" "sha512-nbuxFn2FVw1AAT1h6shgluwz1cgpLKaMBYbEZcMU69Jb1UvSsXcwRiIg+FP4+/JjEUp/uPYLC+twWpfCAaVN1g=="
+  "resolved" "https://registry.npmjs.org/@types/bunyan-blackhole/-/bunyan-blackhole-0.2.2.tgz"
+  "version" "0.2.2"
+  dependencies:
+    "@types/bunyan" "*"
+
+"@types/bunyan@*", "@types/bunyan@^1.8.6":
+  "integrity" "sha512-Cblq+Yydg3u+sGiz2mjHjC5MPmdjY+No4qvHrF+BUhblsmSfMvsHLbOG62tPbonsqBj6sbWv1LHcsoe5Jw+/Ow=="
+  "resolved" "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.8.tgz"
+  "version" "1.8.8"
+  dependencies:
+    "@types/node" "*"
+
 "@types/chai-as-promised@^7.1.4":
   "integrity" "sha512-1y3L1cHePcIm5vXkh1DSGf/zQq5n5xDKG1fpCvf18+uOkpce0Z1ozNFPkyWsVswK7ntN1sZBw3oU6gmN+pDUcA=="
   "resolved" "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.4.tgz"
@@ -1334,6 +1400,11 @@
     "@types/level-errors" "*"
     "@types/node" "*"
 
+"@types/lodash@^4.14.168":
+  "integrity" "sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw=="
+  "resolved" "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.178.tgz"
+  "version" "4.14.178"
+
 "@types/lru-cache@^5.1.0":
   "integrity" "sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w=="
   "resolved" "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz"
@@ -1374,6 +1445,11 @@
   "resolved" "https://registry.npmjs.org/@types/node/-/node-12.20.36.tgz"
   "version" "12.20.36"
 
+"@types/node@12.12.54":
+  "integrity" "sha512-ge4xZ3vSBornVYlDnk7yZ0gK6ChHf/CHB7Gl1I0Jhah8DDnEQqBzgohYG4FX4p81TNirSETOiSyn+y1r9/IR6w=="
+  "resolved" "https://registry.npmjs.org/@types/node/-/node-12.12.54.tgz"
+  "version" "12.12.54"
+
 "@types/pbkdf2@^3.0.0":
   "integrity" "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ=="
   "resolved" "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz"
@@ -1398,6 +1474,11 @@
   dependencies:
     "@types/node" "*"
 
+"@types/retry@*":
+  "integrity" "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g=="
+  "resolved" "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz"
+  "version" "0.12.1"
+
 "@types/secp256k1@^4.0.1":
   "integrity" "sha512-+ZjSA8ELlOp8SlKi0YLB2tz9d5iPNEmOBd+8Rz21wTMdaXQIa9b6TEnD6l5qKOCypE7FSyPyck12qZJxSDNoog=="
   "resolved" "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.1.tgz"
@@ -1413,12 +1494,17 @@
     "@types/chai" "*"
     "@types/sinon" "*"
 
-"@types/sinon@*":
-  "integrity" "sha512-jDZ55oCKxqlDmoTBBbBBEx+N8ZraUVhggMZ9T5t+6/Dh8/4NiOjSUfpLrPiEwxQDlAe3wpAkoXhWvE6LibtsMQ=="
-  "resolved" "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.0.tgz"
-  "version" "10.0.0"
+"@types/sinon@*", "@types/sinon@^10.0.2":
+  "integrity" "sha512-6EF+wzMWvBNeGrfP3Nx60hhx+FfwSg1JJBLAAP/IdIUq0EYkqCYf70VT3PhuhPX9eLD+Dp+lNdpb/ZeHG8Yezg=="
+  "resolved" "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.6.tgz"
+  "version" "10.0.6"
   dependencies:
-    "@sinonjs/fake-timers" "^7.0.4"
+    "@sinonjs/fake-timers" "^7.1.0"
+
+"@types/stats-lite@^2.2.0":
+  "integrity" "sha512-YV6SS4QC+pbzqjMIV8qVSTDOOazgKBLTVaN+7PfuxELjz/eyzc20KwDVGPrbHt2OcYMA7K2ezLB45Cp6DpNOSQ=="
+  "resolved" "https://registry.npmjs.org/@types/stats-lite/-/stats-lite-2.2.0.tgz"
+  "version" "2.2.0"
 
 "@types/through@*":
   "integrity" "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg=="
@@ -1440,22 +1526,138 @@
     "@types/bn.js" "*"
     "@types/underscore" "*"
 
+"@uniswap/default-token-list@^2.0.0":
+  "integrity" "sha512-yfd4snv9K20tEbNwy9Vjym41RU3Yb2lN0seKxsgkr+m3f6oub2lWyXfTiNwgGFbOQPDvX4dxjMhA+M+S7mxqKg=="
+  "resolved" "https://registry.npmjs.org/@uniswap/default-token-list/-/default-token-list-2.3.0.tgz"
+  "version" "2.3.0"
+
 "@uniswap/lib@^4.0.1-alpha":
   "integrity" "sha512-f6UIliwBbRsgVLxIaBANF6w09tYqc6Y/qXdsrbEmXHyFA7ILiKrIwRFXe1yOg8M3cksgVsO9N7yuL2DdCGQKBA=="
   "resolved" "https://registry.npmjs.org/@uniswap/lib/-/lib-4.0.1-alpha.tgz"
   "version" "4.0.1-alpha"
 
-"@uniswap/v2-core@1.0.1":
+"@uniswap/lib@1.1.1":
+  "integrity" "sha512-2yK7sLpKIT91TiS5sewHtOa7YuM8IuBXVl4GZv2jZFys4D2sY7K5vZh6MqD25TPA95Od+0YzCVq6cTF2IKrOmg=="
+  "resolved" "https://registry.npmjs.org/@uniswap/lib/-/lib-1.1.1.tgz"
+  "version" "1.1.1"
+
+"@uniswap/router-sdk@^1.0.5":
+  "integrity" "sha512-PA/0Ye9u3U5cm/LHrJuOgVSff6W4oFY3h+MUEzdp80SYIQdZZJ+BV06RL0h5KOSH+tuIX72n/qNusuRcf2Tc8Q=="
+  "resolved" "https://registry.npmjs.org/@uniswap/router-sdk/-/router-sdk-1.0.5.tgz"
+  "version" "1.0.5"
+  dependencies:
+    "@ethersproject/abi" "^5.5.0"
+    "@uniswap/sdk-core" "^3.0.1"
+    "@uniswap/swap-router-contracts" "1.1.0"
+    "@uniswap/v2-sdk" "^3.0.1"
+    "@uniswap/v3-sdk" "^3.7.1"
+
+"@uniswap/sdk-core@^3.0.0-alpha.3", "@uniswap/sdk-core@^3.0.1":
+  "integrity" "sha512-WbeDkhZ9myVR0VnHOdTrb8nHKKkqTFa5uE9RvUbG3eyDt2NWWDwhhqGHwAWJEHG405l30Fa1u3PogHDFsIOQlA=="
+  "resolved" "https://registry.npmjs.org/@uniswap/sdk-core/-/sdk-core-3.0.1.tgz"
+  "version" "3.0.1"
+  dependencies:
+    "@ethersproject/address" "^5.0.2"
+    "big.js" "^5.2.2"
+    "decimal.js-light" "^2.5.0"
+    "jsbi" "^3.1.4"
+    "tiny-invariant" "^1.1.0"
+    "toformat" "^2.0.0"
+
+"@uniswap/smart-order-router@^2.5.12":
+  "integrity" "sha512-4F0HzyT436XVxOyndBqZu9IK15+gCCg+rH5X80+XW/bdHrJrKN1WfN44NlnjPCee2fKjEiU2AAhEMqVdD2I2gw=="
+  "resolved" "https://registry.npmjs.org/@uniswap/smart-order-router/-/smart-order-router-2.5.12.tgz"
+  "version" "2.5.12"
+  dependencies:
+    "@bitauth/libauth" "^1.17.1"
+    "@ethersproject/bignumber" "^5.1.1"
+    "@oclif/command" "^1.8.0"
+    "@oclif/errors" "^1.3.5"
+    "@types/async-retry" "^1.4.2"
+    "@types/await-timeout" "^0.3.1"
+    "@types/bunyan" "^1.8.6"
+    "@types/bunyan-blackhole" "^0.2.2"
+    "@types/lodash" "^4.14.168"
+    "@types/sinon" "^10.0.2"
+    "@types/stats-lite" "^2.2.0"
+    "@uniswap/default-token-list" "^2.0.0"
+    "@uniswap/router-sdk" "^1.0.5"
+    "@uniswap/swap-router-contracts" "1.1.0"
+    "@uniswap/token-lists" "^1.0.0-beta.25"
+    "@uniswap/v2-core" "^1.0.1"
+    "@uniswap/v2-periphery" "^1.1.0-beta.0"
+    "@uniswap/v2-sdk" "^3.0.1"
+    "@uniswap/v3-periphery" "^1.1.1"
+    "@uniswap/v3-sdk" "^3.7.0"
+    "async-retry" "^1.3.1"
+    "await-timeout" "^1.1.1"
+    "axios" "^0.21.1"
+    "bunyan" "^1.8.15"
+    "bunyan-blackhole" "^1.1.1"
+    "bunyan-debug-stream" "^2.0.0"
+    "cli-logger" "^0.5.40"
+    "dotenv" "^10.0.0"
+    "ethereum-types" "^3.5.0"
+    "ethers" "^5.1.4"
+    "graphql" "^15.5.0"
+    "graphql-request" "^3.4.0"
+    "lodash" "^4.17.21"
+    "mnemonist" "^0.38.3"
+    "node-cache" "^5.1.2"
+    "stats-lite" "^2.2.0"
+    "tslib" "^1.14.1"
+
+"@uniswap/swap-router-contracts@1.1.0":
+  "integrity" "sha512-GPmpx1lvjXWloB95+YUabr3UHJYr3scnSS8EzaNXnNrIz9nYZ+XQcMaJxOKe85Yi7IfcUQpj0HzD2TW99dtolA=="
+  "resolved" "https://registry.npmjs.org/@uniswap/swap-router-contracts/-/swap-router-contracts-1.1.0.tgz"
+  "version" "1.1.0"
+  dependencies:
+    "@openzeppelin/contracts" "3.4.1-solc-0.7-2"
+    "@uniswap/v2-core" "1.0.1"
+    "@uniswap/v3-core" "1.0.0"
+    "@uniswap/v3-periphery" "1.3.0"
+    "hardhat-watcher" "^2.1.1"
+
+"@uniswap/token-lists@^1.0.0-beta.25":
+  "integrity" "sha512-x5hmIniQ9TGqOBCRqfWcmZi/U5kB0qrHMDQ9igs3nMbK0wwmYLraL4owbIwXFGR/co6/lJYJC4K/Gjn4wZY5mQ=="
+  "resolved" "https://registry.npmjs.org/@uniswap/token-lists/-/token-lists-1.0.0-beta.27.tgz"
+  "version" "1.0.0-beta.27"
+
+"@uniswap/v2-core@^1.0.1", "@uniswap/v2-core@1.0.1":
   "integrity" "sha512-MtybtkUPSyysqLY2U210NBDeCHX+ltHt3oADGdjqoThZaFRDKwM6k1Nb3F0A3hk5hwuQvytFWhrWHOEq6nVJ8Q=="
   "resolved" "https://registry.npmjs.org/@uniswap/v2-core/-/v2-core-1.0.1.tgz"
   "version" "1.0.1"
 
+"@uniswap/v2-core@1.0.0":
+  "integrity" "sha512-BJiXrBGnN8mti7saW49MXwxDBRFiWemGetE58q8zgfnPPzQKq55ADltEILqOt6VFZ22kVeVKbF8gVd8aY3l7pA=="
+  "resolved" "https://registry.npmjs.org/@uniswap/v2-core/-/v2-core-1.0.0.tgz"
+  "version" "1.0.0"
+
+"@uniswap/v2-periphery@^1.1.0-beta.0":
+  "integrity" "sha512-6dkwAMKza8nzqYiXEr2D86dgW3TTavUvCR0w2Tu33bAbM8Ah43LKAzH7oKKPRT5VJQaMi1jtkGs1E8JPor1n5g=="
+  "resolved" "https://registry.npmjs.org/@uniswap/v2-periphery/-/v2-periphery-1.1.0-beta.0.tgz"
+  "version" "1.1.0-beta.0"
+  dependencies:
+    "@uniswap/lib" "1.1.1"
+    "@uniswap/v2-core" "1.0.0"
+
+"@uniswap/v2-sdk@^3.0.1":
+  "integrity" "sha512-eSpm2gjo2CZh9FACH5fq42str/oSNyWcDxB27o5k44bEew4sxb+pld4gGIf/byJndLBvArR9PtH8c0n/goNOTw=="
+  "resolved" "https://registry.npmjs.org/@uniswap/v2-sdk/-/v2-sdk-3.0.1.tgz"
+  "version" "3.0.1"
+  dependencies:
+    "@ethersproject/address" "^5.0.0"
+    "@ethersproject/solidity" "^5.0.0"
+    "@uniswap/sdk-core" "^3.0.0-alpha.3"
+    "tiny-invariant" "^1.1.0"
+    "tiny-warning" "^1.0.3"
+
 "@uniswap/v3-core@^1.0.0", "@uniswap/v3-core@1.0.0":
   "integrity" "sha512-kSC4djMGKMHj7sLMYVnn61k9nu+lHjMIxgg9CDQT+s2QYLoA56GbSK9Oxr+qJXzzygbkrmuY6cwgP6cW2JXPFA=="
   "resolved" "https://registry.npmjs.org/@uniswap/v3-core/-/v3-core-1.0.0.tgz"
   "version" "1.0.0"
 
-"@uniswap/v3-periphery@^1.3.0":
+"@uniswap/v3-periphery@^1.0.1", "@uniswap/v3-periphery@^1.1.1", "@uniswap/v3-periphery@^1.3.0", "@uniswap/v3-periphery@1.3.0":
   "integrity" "sha512-HjHdI5RkjBl8zz3bqHShrbULFoZSrjbbrRHoO2vbzn+WRzTa6xY4PWphZv2Tlcb38YEKfKHp6NPl5hVedac8uw=="
   "resolved" "https://registry.npmjs.org/@uniswap/v3-periphery/-/v3-periphery-1.3.0.tgz"
   "version" "1.3.0"
@@ -1467,6 +1669,28 @@
     "base64-sol" "1.0.1"
     "hardhat-watcher" "^2.1.1"
 
+"@uniswap/v3-sdk@^3.7.0", "@uniswap/v3-sdk@^3.7.1":
+  "integrity" "sha512-Fn+h9zNVzgX8DE0hTWqMyXNF1AhT1ovmzE2dpSsTZmJkxVbc70+DzENeuknTfA+nmemtB915mq4vHrJL3lZGjA=="
+  "resolved" "https://registry.npmjs.org/@uniswap/v3-sdk/-/v3-sdk-3.8.1.tgz"
+  "version" "3.8.1"
+  dependencies:
+    "@ethersproject/abi" "^5.0.12"
+    "@ethersproject/solidity" "^5.0.9"
+    "@uniswap/sdk-core" "^3.0.1"
+    "@uniswap/v3-periphery" "^1.1.1"
+    "@uniswap/v3-staker" "1.0.0"
+    "tiny-invariant" "^1.1.0"
+    "tiny-warning" "^1.0.3"
+
+"@uniswap/v3-staker@1.0.0":
+  "integrity" "sha512-JV0Qc46Px5alvg6YWd+UIaGH9lDuYG/Js7ngxPit1SPaIP30AlVer1UYB7BRYeUVVxE+byUyIeN5jeQ7LLDjIw=="
+  "resolved" "https://registry.npmjs.org/@uniswap/v3-staker/-/v3-staker-1.0.0.tgz"
+  "version" "1.0.0"
+  dependencies:
+    "@openzeppelin/contracts" "3.4.1-solc-0.7-2"
+    "@uniswap/v3-core" "1.0.0"
+    "@uniswap/v3-periphery" "^1.0.1"
+
 "@vue/component-compiler-utils@^3.1.0":
   "integrity" "sha512-Mci9WJYLRjyJEBkGHMPxZ1ihJ9l6gOy2Gr6hpYZUNpQoe5+nbpeb3w00aP+PSHJygCF+fxJsqp7Af1zGDITzuw=="
   "resolved" "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.1.tgz"
@@ -1878,6 +2102,13 @@
   dependencies:
     "color-convert" "^1.9.0"
 
+"ansi-styles@^4.0.0", "ansi-styles@^4.1.0":
+  "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
+  "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
+  "version" "4.3.0"
+  dependencies:
+    "color-convert" "^2.0.1"
+
 "ansi-styles@^4.1.0":
   "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="
   "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
@@ -2064,6 +2295,13 @@
   "resolved" "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz"
   "version" "1.0.1"
 
+"async-retry@^1.3.1":
+  "integrity" "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw=="
+  "resolved" "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz"
+  "version" "1.3.3"
+  dependencies:
+    "retry" "0.13.1"
+
 "async@^1.4.2":
   "version" "1.5.2"
 
@@ -2104,6 +2342,11 @@
   "resolved" "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz"
   "version" "1.0.5"
 
+"await-timeout@^1.1.1":
+  "integrity" "sha512-gsDXAS6XVc4Jt+7S92MPX6Noq69bdeXUPEaXd8dk3+yVr629LTDLxNt4j1ycBbrU+AStK2PhKIyNIM+xzWMVOQ=="
+  "resolved" "https://registry.npmjs.org/await-timeout/-/await-timeout-1.1.1.tgz"
+  "version" "1.1.1"
+
 "aws-sign2@~0.7.0":
   "integrity" "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
   "resolved" "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz"
@@ -2614,6 +2857,11 @@
   "resolved" "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz"
   "version" "9.0.1"
 
+"bignumber.js@~9.0.0":
+  "integrity" "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw=="
+  "resolved" "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz"
+  "version" "9.0.2"
+
 "binary-extensions@^1.0.0":
   "integrity" "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
   "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz"
@@ -2907,6 +3155,31 @@
   "resolved" "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz"
   "version" "3.0.0"
 
+"bunyan-blackhole@^1.1.1":
+  "integrity" "sha1-uSCFhtwLTkf09xMhWxvd1l5PYlc="
+  "resolved" "https://registry.npmjs.org/bunyan-blackhole/-/bunyan-blackhole-1.1.1.tgz"
+  "version" "1.1.1"
+  dependencies:
+    "stream-blackhole" "^1.0.3"
+
+"bunyan-debug-stream@^2.0.0":
+  "integrity" "sha512-MCEoqggU7NMt7f2O+PU8VkqfSkoQoa4lmN/OWhaRfqFRBF1Se2TOXQyLF6NxC+EtfrdthnquQe8jOe83fpEoGA=="
+  "resolved" "https://registry.npmjs.org/bunyan-debug-stream/-/bunyan-debug-stream-2.0.1.tgz"
+  "version" "2.0.1"
+  dependencies:
+    "colors" "1.4.0"
+    "exception-formatter" "^1.0.4"
+
+"bunyan@*", "bunyan@^1.8.15", "bunyan@~1.x.x":
+  "integrity" "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig=="
+  "resolved" "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz"
+  "version" "1.8.15"
+  optionalDependencies:
+    "dtrace-provider" "~0.8"
+    "moment" "^2.19.3"
+    "mv" "~2"
+    "safe-json-stringify" "~1"
+
 "bytes@3.1.0":
   "integrity" "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
   "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz"
@@ -3311,6 +3584,11 @@
     "inherits" "^2.0.1"
     "safe-buffer" "^5.0.1"
 
+"circular@^1.0.5":
+  "integrity" "sha1-fad6+Yu96c5LWzWM1Va13e0tMUk="
+  "resolved" "https://registry.npmjs.org/circular/-/circular-1.0.5.tgz"
+  "version" "1.0.5"
+
 "class-is@^1.1.0":
   "integrity" "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw=="
   "resolved" "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz"
@@ -3333,6 +3611,13 @@
   dependencies:
     "source-map" "~0.6.0"
 
+"clean-stack@^3.0.0":
+  "integrity" "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg=="
+  "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz"
+  "version" "3.0.1"
+  dependencies:
+    "escape-string-regexp" "4.0.0"
+
 "cli-cursor@^2.1.0":
   "integrity" "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU="
   "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz"
@@ -3347,11 +3632,31 @@
   dependencies:
     "restore-cursor" "^3.1.0"
 
+"cli-logger@^0.5.40":
+  "integrity" "sha1-CX8OEbByx8aYomxH9YiinCC0iws="
+  "resolved" "https://registry.npmjs.org/cli-logger/-/cli-logger-0.5.40.tgz"
+  "version" "0.5.40"
+  dependencies:
+    "circular" "^1.0.5"
+    "cli-util" "~1.1.27"
+
+"cli-regexp@~0.1.0":
+  "integrity" "sha1-a82TsJ+y7RAl0woRVdWZeVSlNRI="
+  "resolved" "https://registry.npmjs.org/cli-regexp/-/cli-regexp-0.1.2.tgz"
+  "version" "0.1.2"
+
 "cli-spinners@^2.5.0":
   "integrity" "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g=="
   "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz"
   "version" "2.6.1"
 
+"cli-util@~1.1.27":
+  "integrity" "sha1-QtaeNqBAoyH8nPhRwVE8rcUJMFQ="
+  "resolved" "https://registry.npmjs.org/cli-util/-/cli-util-1.1.27.tgz"
+  "version" "1.1.27"
+  dependencies:
+    "cli-regexp" "~0.1.0"
+
 "cli-width@^2.0.0":
   "integrity" "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw=="
   "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz"
@@ -3404,6 +3709,11 @@
 "clone@^2.0.0", "clone@2.1.2":
   "version" "2.1.2"
 
+"clone@2.x":
+  "integrity" "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
+  "resolved" "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz"
+  "version" "2.1.2"
+
 "code-point-at@^1.0.0":
   "integrity" "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
   "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz"
@@ -3441,7 +3751,7 @@
   "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
   "version" "1.1.3"
 
-"colors@^1.4.0":
+"colors@^1.0.3", "colors@^1.4.0", "colors@1.4.0":
   "integrity" "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
   "resolved" "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz"
   "version" "1.4.0"
@@ -3704,6 +4014,13 @@
     "node-fetch" "2.1.2"
     "whatwg-fetch" "2.0.4"
 
+"cross-fetch@^3.0.6":
+  "integrity" "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ=="
+  "resolved" "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz"
+  "version" "3.1.4"
+  dependencies:
+    "node-fetch" "2.6.1"
+
 "cross-spawn@^5.0.1":
   "integrity" "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk="
   "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz"
@@ -3904,6 +4221,11 @@
   "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz"
   "version" "1.2.0"
 
+"decimal.js-light@^2.5.0":
+  "integrity" "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg=="
+  "resolved" "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz"
+  "version" "2.5.1"
+
 "decode-uri-component@^0.2.0":
   "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
   "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz"
@@ -4161,6 +4483,13 @@
   dependencies:
     "minimatch" "^3.0.4"
 
+"dtrace-provider@~0.8":
+  "integrity" "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg=="
+  "resolved" "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz"
+  "version" "0.8.8"
+  dependencies:
+    "nan" "^2.14.0"
+
 "duplexer3@^0.1.4":
   "integrity" "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
   "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz"
@@ -4480,6 +4809,11 @@
   "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
   "version" "4.0.0"
 
+"escape-string-regexp@4.0.0":
+  "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
+  "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz"
+  "version" "4.0.0"
+
 "escodegen@1.8.x":
   "integrity" "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg="
   "resolved" "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz"
@@ -4779,6 +5113,14 @@
     "secp256k1" "^4.0.1"
     "setimmediate" "^1.0.5"
 
+"ethereum-types@^3.5.0":
+  "integrity" "sha512-iJX96C9W1elWhCZKUiSQfWn9fC+EO+xU2TvAE/p7QhMwcGibihKsxcG27B/4WZAudd8jNoeIhY4PH2qQPLuUfw=="
+  "resolved" "https://registry.npmjs.org/ethereum-types/-/ethereum-types-3.6.0.tgz"
+  "version" "3.6.0"
+  dependencies:
+    "@types/node" "12.12.54"
+    "bignumber.js" "~9.0.0"
+
 "ethereum-waffle@^3.2.0", "ethereum-waffle@^3.4.0":
   "integrity" "sha512-ADBqZCkoSA5Isk486ntKJVjFEawIiC+3HxNqpJqONvh3YXBTNiRfXvJtGuAFLXPG91QaqkGqILEHANAo7j/olQ=="
   "resolved" "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.4.0.tgz"
@@ -5095,7 +5437,7 @@
     "uuid" "2.0.1"
     "xmlhttprequest" "1.8.0"
 
-"ethers@^5.0.0", "ethers@^5.0.1", "ethers@^5.0.13", "ethers@^5.0.2", "ethers@^5.1.0", "ethers@^5.1.3", "ethers@^5.4.7", "ethers@^5.5.2":
+"ethers@^5.0.0", "ethers@^5.0.1", "ethers@^5.0.13", "ethers@^5.0.2", "ethers@^5.1.0", "ethers@^5.1.3", "ethers@^5.1.4", "ethers@^5.4.7", "ethers@^5.5.2":
   "integrity" "sha512-EF5W+6Wwcu6BqVwpgmyR5U2+L4c1FQzlM/02dkZOugN3KF0cG9bzHZP+TDJglmPm2/IzCEJDT7KBxzayk7SAHw=="
   "resolved" "https://registry.npmjs.org/ethers/-/ethers-5.5.2.tgz"
   "version" "5.5.2"
@@ -5187,6 +5529,13 @@
     "md5.js" "^1.3.4"
     "safe-buffer" "^5.1.1"
 
+"exception-formatter@^1.0.4":
+  "integrity" "sha512-zV45vEsjytJrwfGq6X9qd1Ll56cW4NC2mhCO6lqwMk4ZpA1fZ6C3UiaQM/X7if+7wZFmCgss3ahp9B/uVFuLRw=="
+  "resolved" "https://registry.npmjs.org/exception-formatter/-/exception-formatter-1.0.7.tgz"
+  "version" "1.0.7"
+  dependencies:
+    "colors" "^1.0.3"
+
 "execa@^0.7.0":
   "integrity" "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c="
   "resolved" "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz"
@@ -5322,6 +5671,11 @@
     "snapdragon" "^0.8.1"
     "to-regex" "^3.0.1"
 
+"extract-files@^9.0.0":
+  "integrity" "sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ=="
+  "resolved" "https://registry.npmjs.org/extract-files/-/extract-files-9.0.0.tgz"
+  "version" "9.0.0"
+
 "extsprintf@^1.2.0", "extsprintf@1.3.0":
   "integrity" "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
   "resolved" "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"
@@ -5354,10 +5708,10 @@
   "resolved" "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz"
   "version" "1.2.0"
 
-"fast-glob@^3.0.3":
-  "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q=="
-  "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz"
-  "version" "3.2.7"
+"fast-glob@^3.0.3", "fast-glob@^3.2.9":
+  "integrity" "sha512-s9nFhFnvR63wls6/kM88kQqDhMu0AfdjqouE2l5GVQPbqLgyFjjU5ry/r2yKsJxpb9Py1EYNqieFrmMaX4v++A=="
+  "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.10.tgz"
+  "version" "3.2.10"
   dependencies:
     "@nodelib/fs.stat" "^2.0.2"
     "@nodelib/fs.walk" "^1.2.3"
@@ -5700,6 +6054,15 @@
     "jsonfile" "^4.0.0"
     "universalify" "^0.1.0"
 
+"fs-extra@^8.1":
+  "integrity" "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="
+  "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz"
+  "version" "8.1.0"
+  dependencies:
+    "graceful-fs" "^4.2.0"
+    "jsonfile" "^4.0.0"
+    "universalify" "^0.1.0"
+
 "fs-extra@^9.0.1":
   "integrity" "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="
   "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz"
@@ -5747,19 +6110,6 @@
   "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
   "version" "1.0.0"
 
-"fsevents@^1.2.7", "fsevents@~2.1.1":
-  "integrity" "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw=="
-  "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz"
-  "version" "1.2.13"
-  dependencies:
-    "bindings" "^1.5.0"
-    "nan" "^2.12.1"
-
-"fsevents@~2.3.2":
-  "integrity" "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA=="
-  "resolved" "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz"
-  "version" "2.3.2"
-
 "function-bind@^1.1.1", "function-bind@~1.1.1":
   "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
   "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
@@ -5939,6 +6289,17 @@
     "once" "^1.3.0"
     "path-is-absolute" "^1.0.0"
 
+"glob@^6.0.1":
+  "integrity" "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI="
+  "resolved" "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz"
+  "version" "6.0.4"
+  dependencies:
+    "inflight" "^1.0.4"
+    "inherits" "2"
+    "minimatch" "2 || 3"
+    "once" "^1.3.0"
+    "path-is-absolute" "^1.0.0"
+
 "glob@^7.0.0", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4", "glob@^7.1.6":
   "integrity" "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA=="
   "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz"
@@ -6019,6 +6380,18 @@
     "merge2" "^1.2.3"
     "slash" "^3.0.0"
 
+"globby@^11.0.1":
+  "integrity" "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="
+  "resolved" "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz"
+  "version" "11.1.0"
+  dependencies:
+    "array-union" "^2.1.0"
+    "dir-glob" "^3.0.1"
+    "fast-glob" "^3.2.9"
+    "ignore" "^5.2.0"
+    "merge2" "^1.4.1"
+    "slash" "^3.0.0"
+
 "got@^7.1.0":
   "integrity" "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw=="
   "resolved" "https://registry.npmjs.org/got/-/got-7.1.0.tgz"
@@ -6061,6 +6434,20 @@
   "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz"
   "version" "4.2.6"
 
+"graphql-request@^3.4.0":
+  "integrity" "sha512-dw5PxHCgBneN2DDNqpWu8QkbbJ07oOziy8z+bK/TAXufsOLaETuVO4GkXrbs0WjhdKhBMN3BkpN/RIvUHkmNUQ=="
+  "resolved" "https://registry.npmjs.org/graphql-request/-/graphql-request-3.7.0.tgz"
+  "version" "3.7.0"
+  dependencies:
+    "cross-fetch" "^3.0.6"
+    "extract-files" "^9.0.0"
+    "form-data" "^3.0.0"
+
+"graphql@^15.5.0", "graphql@14 - 16":
+  "integrity" "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw=="
+  "resolved" "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz"
+  "version" "15.8.0"
+
 "growl@1.10.5":
   "integrity" "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA=="
   "resolved" "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz"
@@ -6520,10 +6907,10 @@
   "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz"
   "version" "4.0.6"
 
-"ignore@^5.1.1":
-  "integrity" "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ=="
-  "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz"
-  "version" "5.1.9"
+"ignore@^5.1.1", "ignore@^5.2.0":
+  "integrity" "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ=="
+  "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz"
+  "version" "5.2.0"
 
 "immediate@^3.2.3":
   "integrity" "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q=="
@@ -6566,6 +6953,11 @@
   "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
   "version" "0.1.4"
 
+"indent-string@^4.0.0":
+  "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
+  "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz"
+  "version" "4.0.0"
+
 "infer-owner@^1.0.3":
   "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
   "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz"
@@ -7061,6 +7453,11 @@
   "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
   "version" "2.0.0"
 
+"isnumber@~1.0.0":
+  "integrity" "sha1-Dj+XWbWB2Z3YUIbw7Cp0kJz63QE="
+  "resolved" "https://registry.npmjs.org/isnumber/-/isnumber-1.0.0.tgz"
+  "version" "1.0.0"
+
 "isobject@^2.0.0":
   "integrity" "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk="
   "resolved" "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz"
@@ -7130,6 +7527,11 @@
     "argparse" "^1.0.7"
     "esprima" "^4.0.0"
 
+"jsbi@^3.1.4":
+  "integrity" "sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ=="
+  "resolved" "https://registry.npmjs.org/jsbi/-/jsbi-3.2.5.tgz"
+  "version" "3.2.5"
+
 "jsbn@~0.1.0":
   "integrity" "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
   "resolved" "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"
@@ -7861,7 +8263,7 @@
   dependencies:
     "source-map" "^0.6.1"
 
-"merge2@^1.2.3", "merge2@^1.3.0":
+"merge2@^1.2.3", "merge2@^1.3.0", "merge2@^1.4.1":
   "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
   "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz"
   "version" "1.4.1"
@@ -8085,7 +8487,7 @@
   dependencies:
     "mkdirp" "*"
 
-"mkdirp@*", "mkdirp@^0.5.0", "mkdirp@^0.5.1", "mkdirp@^0.5.3", "mkdirp@^0.5.5", "mkdirp@~0.5.0", "mkdirp@0.5.5", "mkdirp@0.5.x":
+"mkdirp@*", "mkdirp@^0.5.0", "mkdirp@^0.5.1", "mkdirp@^0.5.3", "mkdirp@^0.5.5", "mkdirp@~0.5.0", "mkdirp@~0.5.1", "mkdirp@0.5.5", "mkdirp@0.5.x":
   "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ=="
   "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz"
   "version" "0.5.5"
@@ -8097,7 +8499,7 @@
   "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
   "version" "1.0.4"
 
-"mnemonist@^0.38.0":
+"mnemonist@^0.38.0", "mnemonist@^0.38.3":
   "integrity" "sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw=="
   "resolved" "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz"
   "version" "0.38.3"
@@ -8139,6 +8541,11 @@
   "resolved" "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz"
   "version" "4.14.0"
 
+"moment@^2.19.3":
+  "integrity" "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
+  "resolved" "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz"
+  "version" "2.29.1"
+
 "move-concurrently@^1.0.1":
   "integrity" "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I="
   "resolved" "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz"
@@ -8225,15 +8632,19 @@
   "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz"
   "version" "0.0.8"
 
-"nan@^2.12.1":
-  "integrity" "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw=="
-  "resolved" "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz"
-  "version" "2.13.2"
+"mv@~2":
+  "integrity" "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI="
+  "resolved" "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz"
+  "version" "2.1.1"
+  dependencies:
+    "mkdirp" "~0.5.1"
+    "ncp" "~2.0.0"
+    "rimraf" "~2.4.0"
 
 "nan@^2.14.0":
-  "integrity" "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
-  "resolved" "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz"
-  "version" "2.14.2"
+  "integrity" "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ=="
+  "resolved" "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz"
+  "version" "2.15.0"
 
 "nano-base32@^1.0.1":
   "integrity" "sha1-ulSMh578+5DaHE2eCX20pGySVe8="
@@ -8272,6 +8683,11 @@
   "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz"
   "version" "1.4.0"
 
+"ncp@~2.0.0":
+  "integrity" "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M="
+  "resolved" "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz"
+  "version" "2.0.0"
+
 "negotiator@0.6.2":
   "integrity" "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
   "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz"
@@ -8321,6 +8737,13 @@
   "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.2.tgz"
   "version" "3.0.2"
 
+"node-cache@^5.1.2":
+  "integrity" "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg=="
+  "resolved" "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz"
+  "version" "5.1.2"
+  dependencies:
+    "clone" "2.x"
+
 "node-emoji@^1.10.0":
   "integrity" "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A=="
   "resolved" "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz"
@@ -8336,7 +8759,7 @@
     "object.getownpropertydescriptors" "^2.0.3"
     "semver" "^5.7.0"
 
-"node-fetch@^2.6.0", "node-fetch@^2.6.1":
+"node-fetch@^2.6.0", "node-fetch@^2.6.1", "node-fetch@2.6.1":
   "integrity" "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
   "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz"
   "version" "2.6.1"
@@ -9800,6 +10223,11 @@
   "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz"
   "version" "0.1.15"
 
+"retry@0.13.1":
+  "integrity" "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="
+  "resolved" "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz"
+  "version" "0.13.1"
+
 "reusify@^1.0.4":
   "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
   "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz"
@@ -9819,6 +10247,13 @@
   dependencies:
     "glob" "^7.1.3"
 
+"rimraf@~2.4.0":
+  "integrity" "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto="
+  "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz"
+  "version" "2.4.5"
+  dependencies:
+    "glob" "^6.0.1"
+
 "rimraf@2.6.3":
   "integrity" "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA=="
   "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz"
@@ -9909,6 +10344,11 @@
   dependencies:
     "events" "^3.0.0"
 
+"safe-json-stringify@~1":
+  "integrity" "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg=="
+  "resolved" "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz"
+  "version" "1.2.0"
+
 "safe-regex@^1.1.0":
   "integrity" "sha1-QKNmnzsHfR6UPURinhV91IAjvy4="
   "resolved" "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz"
@@ -10015,6 +10455,13 @@
   "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
   "version" "6.3.0"
 
+"semver@^7.3.2":
+  "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ=="
+  "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz"
+  "version" "7.3.5"
+  dependencies:
+    "lru-cache" "^6.0.0"
+
 "semver@^7.3.4":
   "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ=="
   "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz"
@@ -10496,11 +10943,23 @@
     "define-property" "^0.2.5"
     "object-copy" "^0.1.0"
 
+"stats-lite@^2.2.0":
+  "integrity" "sha512-/Kz55rgUIv2KP2MKphwYT/NCuSfAlbbMRv2ZWw7wyXayu230zdtzhxxuXXcvsc6EmmhS8bSJl3uS1wmMHFumbA=="
+  "resolved" "https://registry.npmjs.org/stats-lite/-/stats-lite-2.2.0.tgz"
+  "version" "2.2.0"
+  dependencies:
+    "isnumber" "~1.0.0"
+
 "statuses@>= 1.5.0 < 2", "statuses@~1.5.0":
   "integrity" "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
   "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
   "version" "1.5.0"
 
+"stream-blackhole@^1.0.3":
+  "integrity" "sha1-b8LiwunZ/ea+jGjT24jeCYAuTWM="
+  "resolved" "https://registry.npmjs.org/stream-blackhole/-/stream-blackhole-1.0.3.tgz"
+  "version" "1.0.3"
+
 "stream-browserify@^2.0.1":
   "integrity" "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg=="
   "resolved" "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz"
@@ -10580,7 +11039,16 @@
     "is-fullwidth-code-point" "^2.0.0"
     "strip-ansi" "^5.1.0"
 
-"string-width@^4.1.0":
+"string-width@^4.0.0":
+  "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="
+  "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
+  "version" "4.2.3"
+  dependencies:
+    "emoji-regex" "^8.0.0"
+    "is-fullwidth-code-point" "^3.0.0"
+    "strip-ansi" "^6.0.1"
+
+"string-width@^4.1.0", "string-width@^4.2.0":
   "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="
   "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
   "version" "4.2.3"
@@ -10919,6 +11387,16 @@
   dependencies:
     "setimmediate" "^1.0.4"
 
+"tiny-invariant@^1.1.0":
+  "integrity" "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg=="
+  "resolved" "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz"
+  "version" "1.2.0"
+
+"tiny-warning@^1.0.3":
+  "integrity" "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+  "resolved" "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz"
+  "version" "1.0.3"
+
 "title-case@^2.1.0":
   "integrity" "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o="
   "resolved" "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz"
@@ -10984,6 +11462,11 @@
     "regex-not" "^1.0.2"
     "safe-regex" "^1.1.0"
 
+"toformat@^2.0.0":
+  "integrity" "sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ=="
+  "resolved" "https://registry.npmjs.org/toformat/-/toformat-2.0.0.tgz"
+  "version" "2.0.0"
+
 "toidentifier@1.0.0":
   "integrity" "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
   "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"
@@ -11058,11 +11541,16 @@
     "make-error" "^1.1.1"
     "yn" "3.1.1"
 
-"tslib@^1.9.0", "tslib@^1.9.3":
+"tslib@^1.14.1", "tslib@^1.9.0", "tslib@^1.9.3":
   "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
   "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz"
   "version" "1.14.1"
 
+"tslib@^2.0.0":
+  "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
+  "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz"
+  "version" "2.3.1"
+
 "tslib@^2.2.0":
   "integrity" "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
   "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz"
@@ -12420,6 +12908,13 @@
   dependencies:
     "string-width" "^1.0.2 || 2"
 
+"widest-line@^3.1.0":
+  "integrity" "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg=="
+  "resolved" "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz"
+  "version" "3.1.0"
+  dependencies:
+    "string-width" "^4.0.0"
+
 "window-size@^0.2.0":
   "integrity" "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU="
   "resolved" "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz"
@@ -12469,6 +12964,24 @@
     "string-width" "^3.0.0"
     "strip-ansi" "^5.0.0"
 
+"wrap-ansi@^6.2.0":
+  "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="
+  "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz"
+  "version" "6.2.0"
+  dependencies:
+    "ansi-styles" "^4.0.0"
+    "string-width" "^4.1.0"
+    "strip-ansi" "^6.0.0"
+
+"wrap-ansi@^7.0.0":
+  "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="
+  "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz"
+  "version" "7.0.0"
+  dependencies:
+    "ansi-styles" "^4.0.0"
+    "string-width" "^4.1.0"
+    "strip-ansi" "^6.0.0"
+
 "wrappy@1":
   "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
   "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"