diff --git a/.DS_Store b/.DS_Store
index b0eee8d15eb1587d64d8230196b56ce74d0727bb..5c7ed6f292f4fca62a3d2f51bdf88e26fe282c42 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/.gitignore b/.gitignore
index 45382360ad552e4351ad285b49f34dd53cd4c27c..496ee2ca6a2f08396a4076fe43dedf3dc0da8b6d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1 @@
-
 .DS_Store
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 80d123a363acdb2465119dba5e66b1ab078c753d..89182125a3f9870cfa747ef137fa50ffad1cbdbd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,143 @@
+# 0.1.47
+
+_23rd December 2020_
+
+### Changed
+
+- Hiding shortcut tips now will stay hidden per session. (n.b this hides them on all views)
+- Focusses input when creating new node enabling fasting entry.
+  - in Collect view press n, instantly type in ideas, press tab, press n for next idea (SO FAST!)
+
+### Fixed
+
+- Fixed min width and height on nodes (support towards better auto resizing).
+- Keyboard shortcut n key more fixes in Organise and Card view.(should work all the time)
+
+### Removed
+
+- Removed Specific offline component as if app goes offline mid connection it should work just fine, in all views.
+
+# 0.1.46
+
+_18th Decemeber 2020_
+
+### Fixed
+
+- The initial onboarding microcosm should not longer allow you to save nodes.
+- Keyboard shortcut n now works on Collect view on first visit to new microcosm.
+
+# 0.1.45
+
+_17th December 2020_
+
+### Changed
+
+- Card view can now be sorted however this is not saved yet.
+
+### Fixed
+
+- Some sync bug fixes.
+- You can now colour nodes in Collect and Card views.
+- initial node creation failed on new microcosm without switching views.
+- Force load on Collect view.
+
+# 0.1.44
+
+_14th December 2020_
+
+### Changed
+
+- Upload is now smarter and will generate markdown for images, video and audio "automagically", media that is not recognised will be uploaded and generated as a plain URL (link).
+- Now using Cloudflare's IPFS Gateway as we move towards more robust upload support.
+- Video is using using infura gateway (cloudflares gateway doesnt like playing back video)
+
+### Added
+
+- You can now Drag and drop to upload.
+
+# 0.1.43
+
+_12th December 2020_
+
+### Fixed
+
+- Partial fix so that nodes will resize to fit content (after dragging into position)
+
+# 0.1.42
+
+_11th December 2020_
+
+### Added
+
+- You can now colour code your nodes.
+
+# 0.1.41
+
+_11th December 2020_
+
+### Changed
+
+- added basic z-index incrementing, when you touch a node it will jump to the front a node gets to within max z-index > 2147483640 all nodes will reset to 0.
+
+# 0.1.40
+
+_9th December 2020_
+
+## Fixed
+
+- Connections are now working in the same way as before but using native SVG code and no longer the pixi library.
+
+# 0.1.39
+
+_8th December 2020_
+
+### Changed
+
+- edits to the new computed filter to use watch / unwatch over a timer for initial load should mean doesn't matter on hardware or network all nodes will load when ready.
+
+### Fixed
+
+- brought back selecting text and not dragging missed class.
+
+# 0.1.38
+
+_7th December 2020_
+
+### Changed
+
+- read mode is now attached to each node instead of positions.
+- node text and positioning is now using a computed filter - so the iterating should be less CPU intensive.
+
+### Fixed
+
+- pressing n on keyboard when editing node in card view no longer creates nodes.
+
+### Removed
+
+- Pixi.js for drawing connections (temporary removal replacement tech needed).
+
+# 0.1.37
+
+_30th November 2020_
+
+### Fixed
+
+- Add emoji reactions is no longer missing from Cards view.
+- Long URLS now wrap when viewing on smaller screen sizes, to accommodate increased link text.
+
+# 0.1.36
+
+_20th November 2020_
+
+### Changed
+
+- Custom Events now use kebab-case as best practice and also prep for Vue 3
+
+### Fixed
+
+- a human can use spaces, dashes and caps if they like in name and microcosm but couchDB doesn't like them so they are removed on input
+- you can no longer join a microcosm without setting a name, this stops human from thinking they are safe to create nodes
+
 # 0.1.35
 
 _7th November 2020_
diff --git a/app/env.local b/app/env.local
new file mode 100644
index 0000000000000000000000000000000000000000..1ec21b3ee361522effa62b22dd9a2db0ddcfdcb3
--- /dev/null
+++ b/app/env.local
@@ -0,0 +1,6 @@
+VUE_APP_COUCH_HTTP=http
+VUE_APP_COUCH_URL=@127.0.0.1:5984/
+VUE_APP_COUCH_USER=admin
+VUE_APP_COUCH_PASS=cham.zoot@naf8SHOR
+VUE_APP_HTTP=http
+VUE_APP_URL=@localhost:8080
\ No newline at end of file
diff --git a/app/package-lock.json b/app/package-lock.json
index acbb474f6a77ee3e08510c855ed601cbca978749..265814bb4489114e0530a70191ae8bdc70cc4314 100644
--- a/app/package-lock.json
+++ b/app/package-lock.json
@@ -1,6 +1,6 @@
 {
   "name": "nodenogg.in",
-  "version": "0.1.31",
+  "version": "0.1.47",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
@@ -27,9 +27,9 @@
       }
     },
     "@babel/compat-data": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz",
-      "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==",
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.5.tgz",
+      "integrity": "sha512-DTsS7cxrsH3by8nqQSpFSyjSfSYl57D6Cf4q8dW3LK83tBKBDCkfcay1nYkXq1nIHXnpX8WMMb/O25HOy3h1zg==",
       "dev": true
     },
     "@babel/core": {
@@ -66,26 +66,26 @@
           }
         },
         "@babel/generator": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz",
-          "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==",
+          "version": "7.12.5",
+          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
+          "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
           "dev": true,
           "requires": {
-            "@babel/types": "^7.12.1",
+            "@babel/types": "^7.12.5",
             "jsesc": "^2.5.1",
             "source-map": "^0.5.0"
           }
         },
         "@babel/parser": {
-          "version": "7.12.3",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz",
-          "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==",
+          "version": "7.12.5",
+          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
+          "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==",
           "dev": true
         },
         "@babel/types": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
-          "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
+          "version": "7.12.6",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
+          "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
           "dev": true,
           "requires": {
             "@babel/helper-validator-identifier": "^7.10.4",
@@ -126,14 +126,14 @@
       }
     },
     "@babel/helper-compilation-targets": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz",
-      "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==",
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz",
+      "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==",
       "dev": true,
       "requires": {
-        "@babel/compat-data": "^7.12.1",
+        "@babel/compat-data": "^7.12.5",
         "@babel/helper-validator-option": "^7.12.1",
-        "browserslist": "^4.12.0",
+        "browserslist": "^4.14.5",
         "semver": "^5.5.0"
       }
     },
@@ -182,9 +182,9 @@
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
-          "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
+          "version": "7.12.6",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
+          "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
           "dev": true,
           "requires": {
             "@babel/helper-validator-identifier": "^7.10.4",
@@ -233,9 +233,9 @@
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
-          "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
+          "version": "7.12.6",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
+          "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
           "dev": true,
           "requires": {
             "@babel/helper-validator-identifier": "^7.10.4",
@@ -246,18 +246,18 @@
       }
     },
     "@babel/helper-module-imports": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz",
-      "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==",
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz",
+      "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.12.1"
+        "@babel/types": "^7.12.5"
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
-          "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
+          "version": "7.12.6",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
+          "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
           "dev": true,
           "requires": {
             "@babel/helper-validator-identifier": "^7.10.4",
@@ -285,9 +285,9 @@
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
-          "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
+          "version": "7.12.6",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
+          "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
           "dev": true,
           "requires": {
             "@babel/helper-validator-identifier": "^7.10.4",
@@ -333,9 +333,9 @@
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
-          "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
+          "version": "7.12.6",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
+          "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
           "dev": true,
           "requires": {
             "@babel/helper-validator-identifier": "^7.10.4",
@@ -346,21 +346,21 @@
       }
     },
     "@babel/helper-replace-supers": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz",
-      "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==",
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz",
+      "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==",
       "dev": true,
       "requires": {
         "@babel/helper-member-expression-to-functions": "^7.12.1",
         "@babel/helper-optimise-call-expression": "^7.10.4",
-        "@babel/traverse": "^7.12.1",
-        "@babel/types": "^7.12.1"
+        "@babel/traverse": "^7.12.5",
+        "@babel/types": "^7.12.5"
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
-          "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
+          "version": "7.12.6",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
+          "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
           "dev": true,
           "requires": {
             "@babel/helper-validator-identifier": "^7.10.4",
@@ -380,9 +380,9 @@
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
-          "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
+          "version": "7.12.6",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
+          "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
           "dev": true,
           "requires": {
             "@babel/helper-validator-identifier": "^7.10.4",
@@ -402,9 +402,9 @@
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
-          "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
+          "version": "7.12.6",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
+          "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
           "dev": true,
           "requires": {
             "@babel/helper-validator-identifier": "^7.10.4",
@@ -448,20 +448,20 @@
       }
     },
     "@babel/helpers": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz",
-      "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==",
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz",
+      "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==",
       "dev": true,
       "requires": {
         "@babel/template": "^7.10.4",
-        "@babel/traverse": "^7.12.1",
-        "@babel/types": "^7.12.1"
+        "@babel/traverse": "^7.12.5",
+        "@babel/types": "^7.12.5"
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
-          "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
+          "version": "7.12.6",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
+          "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
           "dev": true,
           "requires": {
             "@babel/helper-validator-identifier": "^7.10.4",
@@ -571,9 +571,9 @@
       }
     },
     "@babel/plugin-proposal-numeric-separator": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz",
-      "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==",
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.5.tgz",
+      "integrity": "sha512-UiAnkKuOrCyjZ3sYNHlRlfuZJbBHknMQ9VMwVeX97Ofwx7RpD6gS2HfqTCh8KNUQgcOm8IKt103oR4KIjh7Q8g==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.10.4",
@@ -1159,9 +1159,9 @@
       },
       "dependencies": {
         "@babel/types": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
-          "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
+          "version": "7.12.6",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
+          "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
           "dev": true,
           "requires": {
             "@babel/helper-validator-identifier": "^7.10.4",
@@ -1185,9 +1185,9 @@
       }
     },
     "@babel/runtime": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
-      "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
+      "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
       "dev": true,
       "requires": {
         "regenerator-runtime": "^0.13.4"
@@ -1227,17 +1227,17 @@
       }
     },
     "@babel/traverse": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz",
-      "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==",
+      "version": "7.12.5",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz",
+      "integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.10.4",
-        "@babel/generator": "^7.12.1",
+        "@babel/generator": "^7.12.5",
         "@babel/helper-function-name": "^7.10.4",
         "@babel/helper-split-export-declaration": "^7.11.0",
-        "@babel/parser": "^7.12.1",
-        "@babel/types": "^7.12.1",
+        "@babel/parser": "^7.12.5",
+        "@babel/types": "^7.12.5",
         "debug": "^4.1.0",
         "globals": "^11.1.0",
         "lodash": "^4.17.19"
@@ -1253,26 +1253,26 @@
           }
         },
         "@babel/generator": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz",
-          "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==",
+          "version": "7.12.5",
+          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
+          "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
           "dev": true,
           "requires": {
-            "@babel/types": "^7.12.1",
+            "@babel/types": "^7.12.5",
             "jsesc": "^2.5.1",
             "source-map": "^0.5.0"
           }
         },
         "@babel/parser": {
-          "version": "7.12.3",
-          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz",
-          "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==",
+          "version": "7.12.5",
+          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
+          "integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==",
           "dev": true
         },
         "@babel/types": {
-          "version": "7.12.1",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
-          "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
+          "version": "7.12.6",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
+          "integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
           "dev": true,
           "requires": {
             "@babel/helper-validator-identifier": "^7.10.4",
@@ -1302,9 +1302,9 @@
       }
     },
     "@eslint/eslintrc": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.1.tgz",
-      "integrity": "sha512-XRUeBZ5zBWLYgSANMpThFddrZZkEbGHgUdt5UJjZfnlN9BGCiUBrf+nvbRupSjMvqzwnQN0qwCmOxITt1cfywA==",
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.2.tgz",
+      "integrity": "sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ==",
       "dev": true,
       "requires": {
         "ajv": "^6.12.4",
@@ -1329,9 +1329,9 @@
           }
         },
         "import-fresh": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
-          "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+          "version": "3.3.0",
+          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+          "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
           "dev": true,
           "requires": {
             "parent-module": "^1.0.0",
@@ -1399,9 +1399,9 @@
       }
     },
     "@hapi/boom": {
-      "version": "9.1.0",
-      "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.0.tgz",
-      "integrity": "sha512-4nZmpp4tXbm162LaZT45P7F7sgiem8dwAh2vHWT6XX24dozNjGMg6BvKCRvtCUcmcXqeMIUqWN8Rc5X8yKuROQ==",
+      "version": "9.1.1",
+      "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.1.tgz",
+      "integrity": "sha512-VNR8eDbBrOxBgbkddRYIe7+8DZ+vSbV6qlmaN2x7eWjsUjy2VmQgChkOKcVZIeupEZYj+I0dqNg430OhwzagjA==",
       "requires": {
         "@hapi/hoek": "9.x.x"
       },
@@ -1507,9 +1507,9 @@
       "integrity": "sha512-WSrlgpvEqgPWkI18kkGELEZfXr0bYLtr16iIN4Krh9sRnzBZN6nnWxHFxtsnP684wueEySBbXPDg/WfA9xJdBQ=="
     },
     "@hapi/hapi": {
-      "version": "20.0.1",
-      "resolved": "https://registry.npmjs.org/@hapi/hapi/-/hapi-20.0.1.tgz",
-      "integrity": "sha512-v8NapLf5vkKWIJoBCUBIOk6ZdH9vrxZco4GZbjdM3ROQBDl4eXwW3pySTBL7xWANYp3Nzdn+fiFWjDwdgsSoQg==",
+      "version": "20.0.3",
+      "resolved": "https://registry.npmjs.org/@hapi/hapi/-/hapi-20.0.3.tgz",
+      "integrity": "sha512-aqJVHVjoY3phiZsgsGjDRG15CoUNIs1azScqLZDOCZUSKYGTbzPi+K0QP+RUjUJ0m8L9dRuTZ27c8HKxG3wEhA==",
       "requires": {
         "@hapi/accept": "^5.0.1",
         "@hapi/ammo": "^5.0.1",
@@ -1844,9 +1844,9 @@
       }
     },
     "@hapi/wreck": {
-      "version": "17.0.0",
-      "resolved": "https://registry.npmjs.org/@hapi/wreck/-/wreck-17.0.0.tgz",
-      "integrity": "sha512-d8lqCinbKyDByn7GzJDRDbitddhIEydNm44UcAMejfhEH3o4IYvKYq6K8cAqXbilXPuvZc0ErlUOg9SDdgRtMw==",
+      "version": "17.1.0",
+      "resolved": "https://registry.npmjs.org/@hapi/wreck/-/wreck-17.1.0.tgz",
+      "integrity": "sha512-nx6sFyfqOpJ+EFrHX+XWwJAxs3ju4iHdbB/bwR8yTNZOiYmuhA8eCe7lYPtYmb4j7vyK/SlbaQsmTtUrMvPEBw==",
       "requires": {
         "@hapi/boom": "9.x.x",
         "@hapi/bourne": "2.x.x",
@@ -1897,356 +1897,6 @@
       "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
       "dev": true
     },
-    "@pixi/accessibility": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/accessibility/-/accessibility-5.3.3.tgz",
-      "integrity": "sha512-wC/enJtw5CrdWnu6l5u3VN9UIZPumNSNXlGez2BULY0osiLTywHJPdHpmXMz2YPXw75GsEBzkEvK4LTtnTp21A==",
-      "requires": {
-        "@pixi/core": "5.3.3",
-        "@pixi/display": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/app": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/app/-/app-5.3.3.tgz",
-      "integrity": "sha512-OkO7Kq3N+FPRshVmApuiHKBpobic56VYbLVCMYPy6rjV0hc5ctkchKGFyouJuPt/rHeI6FrqZ0TaON1TShnKiA==",
-      "requires": {
-        "@pixi/core": "5.3.3",
-        "@pixi/display": "5.3.3"
-      }
-    },
-    "@pixi/constants": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/constants/-/constants-5.3.3.tgz",
-      "integrity": "sha512-IybgxzLlEPm7ihp70cLNKc3IPyqkFuW+idk9Zw2St+OayJTw5ctCnLAg9cducwIVHjPYTvN46BYDa+n0KRWZYw=="
-    },
-    "@pixi/core": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/core/-/core-5.3.3.tgz",
-      "integrity": "sha512-taw50LnzV+TQVMx5HQA2ZJgF9wuhZ6DeoXHW2KkevYB0ekKYnEO2VMMiRDMcmchtyvHclJebzjeHZLGqDtKDgw==",
-      "requires": {
-        "@pixi/constants": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/runner": "5.3.3",
-        "@pixi/settings": "5.3.3",
-        "@pixi/ticker": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/display": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/display/-/display-5.3.3.tgz",
-      "integrity": "sha512-dPm7Vk2BH9byu6RHBYsI9MtjUU8x1HNm/PIi6lIlxANhTjWnhxwfvmrGE7ZcRLThTenNdDVlZ2ke2XAXP98UgA==",
-      "requires": {
-        "@pixi/math": "5.3.3",
-        "@pixi/settings": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/extract": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/extract/-/extract-5.3.3.tgz",
-      "integrity": "sha512-CE0GA+tEBPurpaXER2B1aq1sdumKLtCqE/Mms6fYUkIKF9D0Ogw9rqo79QCL9XkLMexa7xVeC3KPPiXW5wrOaA==",
-      "requires": {
-        "@pixi/core": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/filter-alpha": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/filter-alpha/-/filter-alpha-5.3.3.tgz",
-      "integrity": "sha512-AxyHLnvO892va9raZbMMtMtEGDVqO8SvEHHNnCjTBEZ67kVKy0HEYXFOBA6nJZ6BiTgGp9js+7kevi11tfqnJQ==",
-      "requires": {
-        "@pixi/core": "5.3.3"
-      }
-    },
-    "@pixi/filter-blur": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/filter-blur/-/filter-blur-5.3.3.tgz",
-      "integrity": "sha512-vLN1DL6PQXo4p7j/32PZIf+lhcBVfb9hdphSmtbxlAlpbhMWI52n3YUkeInwHs7Ev08NyhI/UhNWHqjN/lAM3w==",
-      "requires": {
-        "@pixi/core": "5.3.3",
-        "@pixi/settings": "5.3.3"
-      }
-    },
-    "@pixi/filter-color-matrix": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/filter-color-matrix/-/filter-color-matrix-5.3.3.tgz",
-      "integrity": "sha512-HFr+vth5ZHHEFJYcjtWZ+O0s7Z2YWJyDyxr+nTd5Q8AT7gMDTVehpNVrm7ByaCKeEovOZzZI6A347+WmHcNpGg==",
-      "requires": {
-        "@pixi/core": "5.3.3"
-      }
-    },
-    "@pixi/filter-displacement": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/filter-displacement/-/filter-displacement-5.3.3.tgz",
-      "integrity": "sha512-kvrKMgqW4ELg+yT2p5vmu6h/IER/L8GD1PWyXovnzpI8RG7k8l136F9VvA3wkB6sYuNcXiDtqMtRQy5e6O4+rw==",
-      "requires": {
-        "@pixi/core": "5.3.3",
-        "@pixi/math": "5.3.3"
-      }
-    },
-    "@pixi/filter-fxaa": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/filter-fxaa/-/filter-fxaa-5.3.3.tgz",
-      "integrity": "sha512-p4vKdBwaoGRNZcoHz2ET8hBF1SoWvy9xU2B3Ci32+c0dg89ZUdGTEW0zimUHi2gMdU+2v/T0lqZ9NC9B6WVYAg==",
-      "requires": {
-        "@pixi/core": "5.3.3"
-      }
-    },
-    "@pixi/filter-noise": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/filter-noise/-/filter-noise-5.3.3.tgz",
-      "integrity": "sha512-HCky3XPk6BYGXTS7d9/FnAHnqq7Rwm5Rlj2XtWW3JItXGCScEBII227xYwrJu5Ke84tpVlDXK4W1/BevZ1AwlQ==",
-      "requires": {
-        "@pixi/core": "5.3.3"
-      }
-    },
-    "@pixi/graphics": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/graphics/-/graphics-5.3.3.tgz",
-      "integrity": "sha512-1bn9Jptg3JXgVOw0SrEMdmjSwkTBYDm6fPnPnh4goF3yDozh0xEqmXobVtCgy2fulMfHRzIfbgtRxrBf2mkCAg==",
-      "requires": {
-        "@pixi/constants": "5.3.3",
-        "@pixi/core": "5.3.3",
-        "@pixi/display": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/sprite": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/interaction": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/interaction/-/interaction-5.3.3.tgz",
-      "integrity": "sha512-Tjuw4XwmrG1fhGzfn5oGspRJT2OtlH+6V7AHscH0v5Ht1Kvk6aKjNncZuSCXllhGGlIuMu3Nn9WPvDEIvW3JNw==",
-      "requires": {
-        "@pixi/core": "5.3.3",
-        "@pixi/display": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/ticker": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/loaders": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/loaders/-/loaders-5.3.3.tgz",
-      "integrity": "sha512-wj0DzniApfDoZA/buMmO/CgCB7Q7SsESForHh7wSd7UC8rrCmz5prUTEICmJGhdHpBuVB7KDPtwaaLtr9Q/kQg==",
-      "requires": {
-        "@pixi/core": "5.3.3",
-        "@pixi/utils": "5.3.3",
-        "resource-loader": "^3.0.1"
-      }
-    },
-    "@pixi/math": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/math/-/math-5.3.3.tgz",
-      "integrity": "sha512-k5C3kQpxlGm2AdBJEUjjW2l2YlSvTKf+54vNOjD4UcEfRoDevC5p4Zg49q3UAu855lrs5qw49AbkrFKsQvPIRA=="
-    },
-    "@pixi/mesh": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/mesh/-/mesh-5.3.3.tgz",
-      "integrity": "sha512-q8w70oAFNdArzOHVnsn7ban68NmO5S5TMg6qSez4A8te6cebMRQsNrT/0dQ/nZcG7ACFK4jiYfbXRQivO+jgVA==",
-      "requires": {
-        "@pixi/constants": "5.3.3",
-        "@pixi/core": "5.3.3",
-        "@pixi/display": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/settings": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/mesh-extras": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/mesh-extras/-/mesh-extras-5.3.3.tgz",
-      "integrity": "sha512-V2hARC7nUPaTEFxd+B8GDkSMrMZ38S8/IInqtYzGUy6FtFs7IYKty9Rz/G665eN7ThIq8tZrOVZOl6JRBtEC8A==",
-      "requires": {
-        "@pixi/constants": "5.3.3",
-        "@pixi/core": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/mesh": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/mixin-cache-as-bitmap": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/mixin-cache-as-bitmap/-/mixin-cache-as-bitmap-5.3.3.tgz",
-      "integrity": "sha512-P1mo3HKDWS8IZLgaP8gujiy4We4vRcxJH6EvQAevf+GsBzdjKfcGgkKzVb9HlyQvsXML5gpTOJuw5eKgRTxSQA==",
-      "requires": {
-        "@pixi/core": "5.3.3",
-        "@pixi/display": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/settings": "5.3.3",
-        "@pixi/sprite": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/mixin-get-child-by-name": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/mixin-get-child-by-name/-/mixin-get-child-by-name-5.3.3.tgz",
-      "integrity": "sha512-CksDZ5ZG4/tHZfDOwSuznANduasJg5JR89X3D6E9DVYx4CLVE3G2K1sbeiOJNXfGIKy30UoSD7Y7IFmUzLxp/g==",
-      "requires": {
-        "@pixi/display": "5.3.3"
-      }
-    },
-    "@pixi/mixin-get-global-position": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/mixin-get-global-position/-/mixin-get-global-position-5.3.3.tgz",
-      "integrity": "sha512-M3faQYDW/ISa1+lhVkjHXRALJ33BMzLN+7x9ucx8VeCmUWvcaLlRo3CaxZsgiR+52Fii5WHl/PF/cMzdkRMF9g==",
-      "requires": {
-        "@pixi/display": "5.3.3",
-        "@pixi/math": "5.3.3"
-      }
-    },
-    "@pixi/particles": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/particles/-/particles-5.3.3.tgz",
-      "integrity": "sha512-t+lG8iGNYyS6ujKvC9qQjKzyxvjxqbFxvB6hkXcOKR98JWM2726ZguHouFlIbOzOxYAGoeuHIWSDlnQNvnVE2g==",
-      "requires": {
-        "@pixi/constants": "5.3.3",
-        "@pixi/core": "5.3.3",
-        "@pixi/display": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/polyfill": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/polyfill/-/polyfill-5.3.3.tgz",
-      "integrity": "sha512-gmx67A6VmwKllxfIMQWzMUNJ8wJfWPT5FlUR0SoPastdTB/SfbgbyQBgKLZHqgmc6LOh2CrOLhN423lNiAroeA==",
-      "requires": {
-        "es6-promise-polyfill": "^1.2.0",
-        "object-assign": "^4.1.1"
-      }
-    },
-    "@pixi/prepare": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/prepare/-/prepare-5.3.3.tgz",
-      "integrity": "sha512-DPsKWfYJ97J67YCjPU6uvU+LBdw+64O9LG9vmzfChmYXom5VMQF9yUC6ZoYTHUPmH31iilqzGeMlPUTobnqSog==",
-      "requires": {
-        "@pixi/core": "5.3.3",
-        "@pixi/display": "5.3.3",
-        "@pixi/graphics": "5.3.3",
-        "@pixi/settings": "5.3.3",
-        "@pixi/text": "5.3.3",
-        "@pixi/ticker": "5.3.3"
-      }
-    },
-    "@pixi/runner": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/runner/-/runner-5.3.3.tgz",
-      "integrity": "sha512-7eLZxxT+PwxuwzcRL1egrnEdLHwD41yFb24pMSo6XM86ppP1tdBjrv5+pLDnUuDEfNjZQxx07FAlZY+sMKANmw=="
-    },
-    "@pixi/settings": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/settings/-/settings-5.3.3.tgz",
-      "integrity": "sha512-1MYJokqpPUtvYEX0BVi0Pq2Xi6KGmWDV5hlQnTXY9NGv6tmqrPYvIb/uHFaDyVUWmrqsFL3xZ4W5zMo+c/dwVA==",
-      "requires": {
-        "ismobilejs": "^1.1.0"
-      }
-    },
-    "@pixi/sprite": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/sprite/-/sprite-5.3.3.tgz",
-      "integrity": "sha512-qo7DG0oWS1uIBqfxw2jZPn34RCR6gQ+IjZRBpFxZPKPB1cL359scZmDBqBbQ4bd4rJ/6QXQfzUdGhXfQJtc9oQ==",
-      "requires": {
-        "@pixi/constants": "5.3.3",
-        "@pixi/core": "5.3.3",
-        "@pixi/display": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/settings": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/sprite-animated": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/sprite-animated/-/sprite-animated-5.3.3.tgz",
-      "integrity": "sha512-nG5j8veJ/cFXQTgzafPLkZqaHKbuaHcIj+ZYN1I2f31Y85/pfr2PQQLHbGr+3441wOYkEHht9nHhmZHWlOOZ0Q==",
-      "requires": {
-        "@pixi/core": "5.3.3",
-        "@pixi/sprite": "5.3.3",
-        "@pixi/ticker": "5.3.3"
-      }
-    },
-    "@pixi/sprite-tiling": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/sprite-tiling/-/sprite-tiling-5.3.3.tgz",
-      "integrity": "sha512-+Xk9AUh82rpArtrnZkw+9aJchrmHZ8QkpjsPRJcgPFHx3WEfABIkT6QEoYbRKiYH34OgO7ZOUXy9hcGPHnxjvw==",
-      "requires": {
-        "@pixi/constants": "5.3.3",
-        "@pixi/core": "5.3.3",
-        "@pixi/display": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/sprite": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/spritesheet": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/spritesheet/-/spritesheet-5.3.3.tgz",
-      "integrity": "sha512-pTkOCTL8jsmyAguCgcbz03UPYu+3buRkgua1g/vGyeoZBN2eJ04iSXdB0pfPrsPisxkvThGHyU23UqEDYVtXRQ==",
-      "requires": {
-        "@pixi/core": "5.3.3",
-        "@pixi/loaders": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/text": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/text/-/text-5.3.3.tgz",
-      "integrity": "sha512-juinZC2yFXnzucWWxSdty9nfIIOAq2WA8DD2k40YL+7Y5L52/ggkgnokeQ2lrTb1BvTfx6YVNlvAsKonUek0Og==",
-      "requires": {
-        "@pixi/core": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/settings": "5.3.3",
-        "@pixi/sprite": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/text-bitmap": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/text-bitmap/-/text-bitmap-5.3.3.tgz",
-      "integrity": "sha512-QRRdEAFBwmRctp8PCPii5WUPM57T1I3r/EwyTvFCCDubOYOZu4aX/iFpCKZMl5GIphDFaGp8mNvbl+BwjUmBCA==",
-      "requires": {
-        "@pixi/core": "5.3.3",
-        "@pixi/display": "5.3.3",
-        "@pixi/loaders": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/mesh": "5.3.3",
-        "@pixi/settings": "5.3.3",
-        "@pixi/text": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
-    "@pixi/ticker": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/ticker/-/ticker-5.3.3.tgz",
-      "integrity": "sha512-p5F/dwJGwfZWUg5cCPqOnEx5iYGW+huQlZZtrTKKd1KoVehFsrzHeRBOEp4d584jsOmBf7fjJaUTyzsFn0YtOQ==",
-      "requires": {
-        "@pixi/settings": "5.3.3"
-      }
-    },
-    "@pixi/utils": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/@pixi/utils/-/utils-5.3.3.tgz",
-      "integrity": "sha512-GDP2h1Mph9Uei4zmJjzDK6GZ5S9O2A09VySVfWyKgWwP3SQ/Ss0bGYm4sE6+u1NMSz1WCrLgu66H82XuXs2Cbg==",
-      "requires": {
-        "@pixi/constants": "5.3.3",
-        "@pixi/settings": "5.3.3",
-        "earcut": "^2.1.5",
-        "eventemitter3": "^3.1.0",
-        "url": "^0.11.0"
-      },
-      "dependencies": {
-        "eventemitter3": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz",
-          "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q=="
-        }
-      }
-    },
     "@protobufjs/aspromise": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -2357,9 +2007,9 @@
       }
     },
     "@sinonjs/samsam": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.2.0.tgz",
-      "integrity": "sha512-CaIcyX5cDsjcW/ab7HposFWzV1kC++4HNsfnEdFJa7cP1QIuILAKV+BgfeqRXhcnSAc76r/Rh/O5C+300BwUIw==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.0.tgz",
+      "integrity": "sha512-hXpcfx3aq+ETVBwPlRFICld5EnrkexXuXDwqUNhDdr5L8VjvMeSRwyOa0qL7XFmR+jVWR4rUZtnxlG7RX72sBg==",
       "requires": {
         "@sinonjs/commons": "^1.6.0",
         "lodash.get": "^4.4.2",
@@ -2484,14 +2134,6 @@
         "@types/node": "*"
       }
     },
-    "@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/body-parser": {
       "version": "1.19.0",
       "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
@@ -2502,11 +2144,6 @@
         "@types/node": "*"
       }
     },
-    "@types/color-name": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
-      "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ=="
-    },
     "@types/connect": {
       "version": "3.4.33",
       "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz",
@@ -2532,9 +2169,9 @@
       "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ=="
     },
     "@types/express": {
-      "version": "4.17.8",
-      "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.8.tgz",
-      "integrity": "sha512-wLhcKh3PMlyA2cNAB9sjM1BntnhPMiM0JOBwPBqttjHev2428MLEB4AYVN+d8s2iyCVZac+o41Pflm/ZH5vLXQ==",
+      "version": "4.17.9",
+      "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz",
+      "integrity": "sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw==",
       "dev": true,
       "requires": {
         "@types/body-parser": "*",
@@ -2607,15 +2244,15 @@
       "dev": true
     },
     "@types/minimist": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz",
-      "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz",
+      "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==",
       "dev": true
     },
     "@types/node": {
-      "version": "13.7.0",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.0.tgz",
-      "integrity": "sha512-GnZbirvmqZUzMgkFn70c74OQpTTUcCzlhQliTzYjQMqg+hVKcDnxdL19Ne3UdYzdMA/+W3eb646FWn/ZaT1NfQ=="
+      "version": "14.14.9",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.9.tgz",
+      "integrity": "sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw=="
     },
     "@types/normalize-package-data": {
       "version": "2.4.0",
@@ -2623,14 +2260,6 @@
       "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
       "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/q": {
       "version": "1.5.4",
       "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
@@ -2649,18 +2278,10 @@
       "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==",
       "dev": true
     },
-    "@types/secp256k1": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.1.tgz",
-      "integrity": "sha512-+ZjSA8ELlOp8SlKi0YLB2tz9d5iPNEmOBd+8Rz21wTMdaXQIa9b6TEnD6l5qKOCypE7FSyPyck12qZJxSDNoog==",
-      "requires": {
-        "@types/node": "*"
-      }
-    },
     "@types/serve-static": {
-      "version": "1.13.6",
-      "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.6.tgz",
-      "integrity": "sha512-nuRJmv7jW7VmCVTn+IgYDkkbbDGyIINOeu/G0d74X3lm6E5KfMeQPJhxIt1ayQeQB3cSxvYs1RA/wipYoFB4EA==",
+      "version": "1.13.8",
+      "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.8.tgz",
+      "integrity": "sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA==",
       "dev": true,
       "requires": {
         "@types/mime": "*",
@@ -2680,9 +2301,9 @@
       "dev": true
     },
     "@types/uglify-js": {
-      "version": "3.11.0",
-      "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.11.0.tgz",
-      "integrity": "sha512-I0Yd8TUELTbgRHq2K65j8rnDPAzAP+DiaF/syLem7yXwYLsHZhPd+AM2iXsWmf9P2F2NlFCgl5erZPQx9IbM9Q==",
+      "version": "3.11.1",
+      "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.11.1.tgz",
+      "integrity": "sha512-7npvPKV+jINLu1SpSYVWG8KvyJBhBa8tmzMMdDoVc2pWUYHN8KIXlPJhjJ4LT97c4dXJA2SHL/q6ADbDriZN+Q==",
       "dev": true,
       "requires": {
         "source-map": "^0.6.1"
@@ -2697,9 +2318,9 @@
       }
     },
     "@types/webpack": {
-      "version": "4.41.23",
-      "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.23.tgz",
-      "integrity": "sha512-ojA4CupZg8RCzVJLugWlvqrHpT59GWhqFxbinlsnvk10MjQCWB+ot7XDACctbWhnhtdhYK7+HOH1JxkVLiZhMg==",
+      "version": "4.41.25",
+      "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.25.tgz",
+      "integrity": "sha512-cr6kZ+4m9lp86ytQc1jPOJXgINQyz3kLLunZ57jznW+WIAL0JqZbGubQk4GlD42MuQL5JGOABrxdpqqWeovlVQ==",
       "dev": true,
       "requires": {
         "@types/anymatch": "*",
@@ -2719,9 +2340,9 @@
       }
     },
     "@types/webpack-dev-server": {
-      "version": "3.11.0",
-      "resolved": "https://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz",
-      "integrity": "sha512-3+86AgSzl18n5P1iUP9/lz3G3GMztCp+wxdDvVuNhx1sr1jE79GpYfKHL8k+Vht3N74K2n98CuAEw4YPJCYtDA==",
+      "version": "3.11.1",
+      "resolved": "https://registry.npmjs.org/@types/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz",
+      "integrity": "sha512-rIb+LtUkKnh7+oIJm3WiMJONd71Q0lZuqGLcSqhZ5qjN9gV/CNmZe7Bai+brnBPZ/KVYOsr+4bFLiNZwjBicLw==",
       "dev": true,
       "requires": {
         "@types/connect-history-api-fallback": "*",
@@ -2776,14 +2397,6 @@
         "camelcase": "^6.0.0",
         "html-tags": "^3.1.0",
         "svg-tags": "^1.0.0"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz",
-          "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==",
-          "dev": true
-        }
       }
     },
     "@vue/babel-plugin-transform-vue-jsx": {
@@ -2809,9 +2422,9 @@
       }
     },
     "@vue/babel-preset-app": {
-      "version": "4.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-4.5.8.tgz",
-      "integrity": "sha512-efCBo2HY8Jcs6+SyCnvWl8jGeF1Fl38reFL35AjO4SBcro0ol/qjPkeeJLjzvXUxrHAsM9DMfL/DvPa/hBmZwQ==",
+      "version": "4.5.9",
+      "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-4.5.9.tgz",
+      "integrity": "sha512-d2H4hFnJsGnZtJAAZIbo1dmQJ2SI1MYix1Tc9/etlnJtCDPRHeCNodCSeuLgDwnoAyT3unzyHmTtaO56KRDuOQ==",
       "dev": true,
       "requires": {
         "@babel/core": "^7.11.0",
@@ -2841,15 +2454,15 @@
       }
     },
     "@vue/babel-preset-jsx": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.3.tgz",
-      "integrity": "sha512-yMPoPFH6kiNFAhJknjLKAre7JQNWRPjH1K9EyzTPi/J5T5oDC8sEumSjWI6lBQxcSaBboXpQp92mvxZdXCfiFw==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz",
+      "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==",
       "dev": true,
       "requires": {
         "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
         "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
         "@vue/babel-sugar-composition-api-inject-h": "^1.2.1",
-        "@vue/babel-sugar-composition-api-render-instance": "^1.2.1",
+        "@vue/babel-sugar-composition-api-render-instance": "^1.2.4",
         "@vue/babel-sugar-functional-vue": "^1.2.2",
         "@vue/babel-sugar-inject-h": "^1.2.2",
         "@vue/babel-sugar-v-model": "^1.2.3",
@@ -2866,9 +2479,9 @@
       }
     },
     "@vue/babel-sugar-composition-api-render-instance": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.1.tgz",
-      "integrity": "sha512-F2gQbEMOUPyapqc85/O1Tbw0qBuvgXC/qBcBsjMKqC7KWJ4hK1eJUvU3iLHHTbre6V7zzIjrqEe0SoE1lR4mfw==",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz",
+      "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==",
       "dev": true,
       "requires": {
         "@babel/plugin-syntax-jsx": "^7.2.0"
@@ -2906,6 +2519,12 @@
         "svg-tags": "^1.0.0"
       },
       "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+          "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+          "dev": true
+        },
         "html-tags": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz",
@@ -2923,23 +2542,31 @@
         "@babel/plugin-syntax-jsx": "^7.2.0",
         "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
         "camelcase": "^5.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+          "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+          "dev": true
+        }
       }
     },
     "@vue/cli-overlay": {
-      "version": "4.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-4.5.8.tgz",
-      "integrity": "sha512-M6q4QPKQfErHk54ycxBASgBadgdsK45f6v2NWUTAiFXdTtqv1Z7gR8JAbQhiXbni/m9571bLJnZFv5c8uhAHnw==",
+      "version": "4.5.9",
+      "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-4.5.9.tgz",
+      "integrity": "sha512-E2PWv6tCdUz+eEDj2Th2oxiKmzMe02qi0PcxiNaO7oaqggmEOrp1rLgop7DWpiLDBiqUZk2x0vjK/q2Tz8z/eg==",
       "dev": true
     },
     "@vue/cli-plugin-babel": {
-      "version": "4.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.8.tgz",
-      "integrity": "sha512-2quuLuCZq2vH29xfp66L5YfUxQvyMX9te5jMslfQGVzvUmFpPbz8ceioZYW9+VqWjg8pzqSuBE+ANJLWdy2RtQ==",
+      "version": "4.5.9",
+      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-4.5.9.tgz",
+      "integrity": "sha512-2tzaJU5yqAfXVhg1aYyd/Yfif6brv+tDZ49D1aOk7ZgMIwH5YUa0yo5HPcPOcmfpoVoNYcpqVYRfyT4EXIYSpg==",
       "dev": true,
       "requires": {
         "@babel/core": "^7.11.0",
-        "@vue/babel-preset-app": "^4.5.8",
-        "@vue/cli-shared-utils": "^4.5.8",
+        "@vue/babel-preset-app": "^4.5.9",
+        "@vue/cli-shared-utils": "^4.5.9",
         "babel-loader": "^8.1.0",
         "cache-loader": "^4.1.0",
         "thread-loader": "^2.1.3",
@@ -2947,12 +2574,12 @@
       }
     },
     "@vue/cli-plugin-eslint": {
-      "version": "4.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.8.tgz",
-      "integrity": "sha512-1lg3K2D/harXbN4FvRoA1b0X9947H+G4Ql/43rxJY39OqswfK/d1ck438Fo9M4l1+zhBSUNDmcjn7Q2EH6qWmA==",
+      "version": "4.5.9",
+      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.5.9.tgz",
+      "integrity": "sha512-wTsWRiRWPW5ik4bgtlh4P4h63Zgjsyvqx2FY0kcj+bSAnQGPJ3bKUOMU9KQP5EyNH6pAXMVGh2LEXK9WwJMf1w==",
       "dev": true,
       "requires": {
-        "@vue/cli-shared-utils": "^4.5.8",
+        "@vue/cli-shared-utils": "^4.5.9",
         "eslint-loader": "^2.2.1",
         "globby": "^9.2.0",
         "inquirer": "^7.1.0",
@@ -2961,24 +2588,24 @@
       }
     },
     "@vue/cli-plugin-router": {
-      "version": "4.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-4.5.8.tgz",
-      "integrity": "sha512-tJwVLdX4jj0Ia/1hsBejRbo4gs0hb2z1z5ert+4Ve5RNdpOKUG69OaPQgXPqvuYSQh9MW7bqG0iJmYtVD+KBNw==",
+      "version": "4.5.9",
+      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-4.5.9.tgz",
+      "integrity": "sha512-eBBfbZpQ1sJrdlx8i7iReFxSnuzwmrv+s2OCT3kjBd6uWRqGnD4VihpS4srC7vZLzDQrDplumSn0a93L9Qf3wQ==",
       "dev": true,
       "requires": {
-        "@vue/cli-shared-utils": "^4.5.8"
+        "@vue/cli-shared-utils": "^4.5.9"
       }
     },
     "@vue/cli-plugin-vuex": {
-      "version": "4.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.8.tgz",
-      "integrity": "sha512-wU9WPhay1zBxtdd/HLRYhFRLBbG9lw3YTBJep9sTnYwUeXiEgum4O88Q2j6cwBBPPHMgeMrKMPHS85Jf4hMc0g==",
+      "version": "4.5.9",
+      "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.9.tgz",
+      "integrity": "sha512-mFNIJhYiJjzCgytkDHX00ROy5Yzl7prkZpUbeDE0biwcLteMf2s3qZVbESOQl6GcviqcfEt2f3tHQQtLNa+OLg==",
       "dev": true
     },
     "@vue/cli-service": {
-      "version": "4.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-4.5.8.tgz",
-      "integrity": "sha512-YcVEJvA5vQOcfRzhCQDfHxRW9WHvKqlQeiuSvNddfV2uQqKD3ifhsNYiZZuFvbev9qgRUmtmxSafpwYzj/LLBw==",
+      "version": "4.5.9",
+      "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-4.5.9.tgz",
+      "integrity": "sha512-E3XlfM0q+UnnjbC9rwLIWNo2umZCRwnlMJY0KOhY1hFvqisGIYzFmQQ4o01KGyTx2BZNMuQg7Kw+BZ5gyM1Wig==",
       "dev": true,
       "requires": {
         "@intervolga/optimize-cssnano-plugin": "^1.0.5",
@@ -2987,10 +2614,10 @@
         "@types/minimist": "^1.2.0",
         "@types/webpack": "^4.0.0",
         "@types/webpack-dev-server": "^3.11.0",
-        "@vue/cli-overlay": "^4.5.8",
-        "@vue/cli-plugin-router": "^4.5.8",
-        "@vue/cli-plugin-vuex": "^4.5.8",
-        "@vue/cli-shared-utils": "^4.5.8",
+        "@vue/cli-overlay": "^4.5.9",
+        "@vue/cli-plugin-router": "^4.5.9",
+        "@vue/cli-plugin-vuex": "^4.5.9",
+        "@vue/cli-shared-utils": "^4.5.9",
         "@vue/component-compiler-utils": "^3.1.2",
         "@vue/preload-webpack-plugin": "^1.1.0",
         "@vue/web-component-wrapper": "^1.2.0",
@@ -3086,35 +2713,49 @@
             "pkg-dir": "^4.1.0"
           }
         },
-        "fs-extra": {
-          "version": "7.0.1",
-          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
-          "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+        "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,
           "requires": {
-            "graceful-fs": "^4.1.2",
-            "jsonfile": "^4.0.0",
-            "universalify": "^0.1.0"
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.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==",
+        "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,
           "requires": {
-            "p-try": "^2.0.0"
+            "p-locate": "^4.1.0"
           }
         },
-        "p-map": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
-          "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+        "make-dir": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+          "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
           "dev": true,
           "requires": {
-            "aggregate-error": "^3.0.0"
+            "semver": "^6.0.0"
+          }
+        },
+        "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,
+          "requires": {
+            "p-limit": "^2.2.0"
           }
         },
+        "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
+        },
         "pkg-dir": {
           "version": "4.2.0",
           "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
@@ -3124,6 +2765,12 @@
             "find-up": "^4.0.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
+        },
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -3160,9 +2807,9 @@
       }
     },
     "@vue/cli-shared-utils": {
-      "version": "4.5.8",
-      "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.8.tgz",
-      "integrity": "sha512-pa6oenhBO/5HeDLRSokiwVN01gROACEDy3ESXWuPmragOREGNmmFKtkPHlqeYavGEX6LFp7f0VK3uMX6UYS5mQ==",
+      "version": "4.5.9",
+      "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.5.9.tgz",
+      "integrity": "sha512-anvsrv+rkQC+hgxaT2nQQxnSWSsIzyysZ36LO7qPjXvDRBvcvKLAAviFlUkYbZ+ntbV8puzJ3zw+gUhQw4SEVA==",
       "dev": true,
       "requires": {
         "@hapi/joi": "^15.0.1",
@@ -3518,9 +3165,9 @@
       "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8="
     },
     "aggregate-error": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
-      "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
+      "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"
@@ -3662,9 +3309,9 @@
       "dev": true
     },
     "arch": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.2.tgz",
-      "integrity": "sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz",
+      "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==",
       "dev": true
     },
     "argparse": {
@@ -3717,11 +3364,6 @@
       "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
       "dev": true
     },
-    "array-find-index": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
-      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
-    },
     "array-flatten": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
@@ -3763,19 +3405,27 @@
       "version": "0.2.4",
       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
       "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+      "dev": true,
       "requires": {
         "safer-buffer": "~2.1.0"
       }
     },
     "asn1.js": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.3.0.tgz",
-      "integrity": "sha512-WHnQJFcOrIWT1RLOkFFBQkFVvyt9BPOOrH+Dp152Zk4R993rSzXUGPmkybIcUFhHE2d/iHH+nCaOWVCDbO8fgA==",
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
+      "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
       "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.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+        }
       }
     },
     "assert": {
@@ -3808,7 +3458,8 @@
     "assert-plus": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
-      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+      "dev": true
     },
     "assertion-error": {
       "version": "1.1.0",
@@ -3822,9 +3473,9 @@
       "dev": true
     },
     "astral-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
-      "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+      "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
       "dev": true
     },
     "async": {
@@ -3833,13 +3484,6 @@
       "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
       "requires": {
         "lodash": "^4.17.14"
-      },
-      "dependencies": {
-        "lodash": {
-          "version": "4.17.20",
-          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
-          "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
-        }
       }
     },
     "async-each": {
@@ -3892,12 +3536,14 @@
     "aws-sign2": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
-      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+      "dev": true
     },
     "aws4": {
-      "version": "1.10.1",
-      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz",
-      "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA=="
+      "version": "1.11.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+      "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
+      "dev": true
     },
     "babel-eslint": {
       "version": "10.1.0",
@@ -3956,14 +3602,14 @@
       }
     },
     "babel-loader": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz",
-      "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==",
+      "version": "8.2.1",
+      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.1.tgz",
+      "integrity": "sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==",
       "dev": true,
       "requires": {
         "find-cache-dir": "^2.1.0",
         "loader-utils": "^1.4.0",
-        "mkdirp": "^0.5.3",
+        "make-dir": "^2.1.0",
         "pify": "^4.0.1",
         "schema-utils": "^2.6.5"
       }
@@ -4042,14 +3688,6 @@
         }
       }
     },
-    "base-x": {
-      "version": "3.0.8",
-      "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.8.tgz",
-      "integrity": "sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==",
-      "requires": {
-        "safe-buffer": "^5.0.1"
-      }
-    },
     "base32.js": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz",
@@ -4080,6 +3718,7 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
       "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "dev": true,
       "requires": {
         "tweetnacl": "^0.14.3"
       }
@@ -4093,11 +3732,6 @@
         "loady": "~0.0.5"
       }
     },
-    "bech32": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz",
-      "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ=="
-    },
     "better-assert": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
@@ -4148,67 +3782,6 @@
       "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.1.tgz",
       "integrity": "sha1-DmVcm5wkNeqraL9AJyJtK1WjRSQ="
     },
-    "bip174": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.0.1.tgz",
-      "integrity": "sha512-i3X26uKJOkDTAalYAp0Er+qGMDhrbbh2o93/xiPyAN2s25KrClSpe3VXo/7mNJoqA5qfko8rLS2l3RWZgYmjKQ=="
-    },
-    "bip32": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/bip32/-/bip32-2.0.6.tgz",
-      "integrity": "sha512-HpV5OMLLGTjSVblmrtYRfFFKuQB+GArM0+XP8HGWfJ5vxYBqo+DesvJwOdC2WJ3bCkZShGf0QIfoIpeomVzVdA==",
-      "requires": {
-        "@types/node": "10.12.18",
-        "bs58check": "^2.1.1",
-        "create-hash": "^1.2.0",
-        "create-hmac": "^1.1.7",
-        "tiny-secp256k1": "^1.1.3",
-        "typeforce": "^1.11.5",
-        "wif": "^2.0.6"
-      },
-      "dependencies": {
-        "@types/node": {
-          "version": "10.12.18",
-          "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz",
-          "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ=="
-        }
-      }
-    },
-    "bip66": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz",
-      "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=",
-      "requires": {
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "bitcoin-ops": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/bitcoin-ops/-/bitcoin-ops-1.4.1.tgz",
-      "integrity": "sha512-pef6gxZFztEhaE9RY9HmWVmiIHqCb2OyS4HPKkpc6CIiiOa3Qmuoylxc5P2EkU3w+5eTSifI9SEZC88idAIGow=="
-    },
-    "bitcoinjs-lib": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-5.2.0.tgz",
-      "integrity": "sha512-5DcLxGUDejgNBYcieMIUfjORtUeNWl828VWLHJGVKZCb4zIS1oOySTUr0LGmcqJBQgTBz3bGbRQla4FgrdQEIQ==",
-      "requires": {
-        "bech32": "^1.1.2",
-        "bip174": "^2.0.1",
-        "bip32": "^2.0.4",
-        "bip66": "^1.1.0",
-        "bitcoin-ops": "^1.4.0",
-        "bs58check": "^2.0.0",
-        "create-hash": "^1.1.0",
-        "create-hmac": "^1.1.3",
-        "merkle-lib": "^2.0.10",
-        "pushdata-bitcoin": "^1.0.1",
-        "randombytes": "^2.0.1",
-        "tiny-secp256k1": "^1.1.1",
-        "typeforce": "^1.11.3",
-        "varuint-bitcoin": "^1.0.4",
-        "wif": "^2.0.1"
-      }
-    },
     "bl": {
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz",
@@ -4242,11 +3815,11 @@
       "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig=="
     },
     "blob-to-it": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/blob-to-it/-/blob-to-it-0.0.2.tgz",
-      "integrity": "sha512-3/NRr0mUWQTkS71MYEC1teLbT5BTs7RZ6VMPXDV6qApjw3B4TAZspQuvDkYfHuD/XzL5p/RO91x5XRPeJvcCqg==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/blob-to-it/-/blob-to-it-1.0.1.tgz",
+      "integrity": "sha512-papO4swPtR4MtNQ2foUkaS9e7HlD8XFQEBL3HZNhT4Qp6RQ/7t4C6bo4kRKtJV6A3AIgKR05Z9sbB+na6u+QYA==",
       "requires": {
-        "browser-readablestream-to-it": "^0.0.2"
+        "browser-readablestream-to-it": "^1.0.1"
       }
     },
     "bluebird": {
@@ -4256,9 +3829,10 @@
       "dev": true
     },
     "bn.js": {
-      "version": "4.11.8",
-      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
-      "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
+      "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==",
+      "dev": true
     },
     "body-parser": {
       "version": "1.19.0",
@@ -4314,26 +3888,6 @@
           "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
           "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
           "dev": true
-        },
-        "dns-packet": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
-          "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
-          "dev": true,
-          "requires": {
-            "ip": "^1.1.0",
-            "safe-buffer": "^5.0.1"
-          }
-        },
-        "multicast-dns": {
-          "version": "6.2.3",
-          "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
-          "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
-          "dev": true,
-          "requires": {
-            "dns-packet": "^1.3.1",
-            "thunky": "^1.0.2"
-          }
         }
       }
     },
@@ -4392,6 +3946,11 @@
             "color-convert": "^2.0.1"
           }
         },
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+          "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+        },
         "chalk": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
@@ -4468,14 +4027,15 @@
       "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
     },
     "browser-readablestream-to-it": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-0.0.2.tgz",
-      "integrity": "sha512-bbiTccngeAbPmpTUJcUyr6JhivADKV9xkNJVLdA91vjdzXyFBZ6fgrzElQsV3k1UNGQACRTl3p4y+cEGG9U48A=="
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-1.0.1.tgz",
+      "integrity": "sha512-vLeoyPpVY8IL5R4AEMI5nICVpuK1VBwBi6OUyuD1U9NUOL7UmAgP4agfbkkkZf+cBZaYtCYrgASd6YyVbIbsjA=="
     },
     "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,
       "requires": {
         "buffer-xor": "^1.0.3",
         "cipher-base": "^1.0.0",
@@ -4489,6 +4049,7 @@
       "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",
@@ -4499,6 +4060,7 @@
       "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",
@@ -4507,11 +4069,12 @@
       }
     },
     "browserify-rsa": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
-      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+      "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": "^4.1.0",
+        "bn.js": "^5.0.0",
         "randombytes": "^2.0.1"
       }
     },
@@ -4519,6 +4082,7 @@
       "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",
@@ -4531,36 +4095,11 @@
         "safe-buffer": "^5.2.0"
       },
       "dependencies": {
-        "bn.js": {
-          "version": "5.1.3",
-          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz",
-          "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ=="
-        },
-        "elliptic": {
-          "version": "6.5.3",
-          "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
-          "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
-          "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"
-          },
-          "dependencies": {
-            "bn.js": {
-              "version": "4.11.9",
-              "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
-              "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
-            }
-          }
-        },
         "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",
@@ -4579,33 +4118,16 @@
       }
     },
     "browserslist": {
-      "version": "4.14.5",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz",
-      "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==",
+      "version": "4.14.7",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz",
+      "integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==",
       "dev": true,
       "requires": {
-        "caniuse-lite": "^1.0.30001135",
-        "electron-to-chromium": "^1.3.571",
-        "escalade": "^3.1.0",
-        "node-releases": "^1.1.61"
-      }
-    },
-    "bs58": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz",
-      "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=",
-      "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"
+        "caniuse-lite": "^1.0.30001157",
+        "colorette": "^1.2.1",
+        "electron-to-chromium": "^1.3.591",
+        "escalade": "^3.1.1",
+        "node-releases": "^1.1.66"
       }
     },
     "buffer": {
@@ -4617,11 +4139,6 @@
         "ieee754": "^1.1.4"
       }
     },
-    "buffer-crc32": {
-      "version": "0.2.13",
-      "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
-      "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
-    },
     "buffer-from": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
@@ -4641,7 +4158,8 @@
     "buffer-xor": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
-      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+      "dev": true
     },
     "bufio": {
       "version": "1.0.7",
@@ -4729,6 +4247,49 @@
             "pkg-dir": "^4.1.0"
           }
         },
+        "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,
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "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,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "make-dir": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+          "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+          "dev": true,
+          "requires": {
+            "semver": "^6.0.0"
+          }
+        },
+        "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,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "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
+        },
         "pkg-dir": {
           "version": "4.2.0",
           "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
@@ -4737,6 +4298,12 @@
           "requires": {
             "find-up": "^4.0.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
         }
       }
     },
@@ -4754,6 +4321,14 @@
         "responselike": "^1.0.2"
       },
       "dependencies": {
+        "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==",
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
         "lowercase-keys": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
@@ -4766,6 +4341,16 @@
         }
       }
     },
+    "call-bind": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz",
+      "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1",
+        "get-intrinsic": "^1.0.0"
+      }
+    },
     "call-me-maybe": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
@@ -4812,25 +4397,10 @@
       }
     },
     "camelcase": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
-    },
-    "camelcase-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
-      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
-      "requires": {
-        "camelcase": "^2.0.0",
-        "map-obj": "^1.0.0"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
-          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
-        }
-      }
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
+      "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
+      "dev": true
     },
     "caniuse-api": {
       "version": "3.0.0",
@@ -4845,9 +4415,9 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30001150",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001150.tgz",
-      "integrity": "sha512-kiNKvihW0m36UhAFnl7bOAv0i1K1f6wpfVtTF5O5O82XzgtBnb05V0XeV3oZ968vfg2sRNChsHw8ASH2hDfoYQ==",
+      "version": "1.0.30001159",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz",
+      "integrity": "sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA==",
       "dev": true
     },
     "case-sensitive-paths-webpack-plugin": {
@@ -4859,7 +4429,8 @@
     "caseless": {
       "version": "0.12.0",
       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
-      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+      "dev": true
     },
     "cbor": {
       "version": "5.1.0",
@@ -5007,13 +4578,12 @@
       }
     },
     "cids": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/cids/-/cids-1.0.2.tgz",
-      "integrity": "sha512-ohCcYyEHh0Z5Hl+O1IML4kt6Kx5GPho1ybxtqK4zyk6DeV5CvOLoT/mqDh0cgKcAvsls3vcVa9HjZc7RQr3geA==",
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/cids/-/cids-1.1.4.tgz",
+      "integrity": "sha512-mo0IWZKcaQZsret8cP39MzDnPVT9NhhQEVaIKwWnBFaLtj2slTFckYMnbk15ptewNkb22qRBLfuBK+qiWYW/Mg==",
       "requires": {
-        "class-is": "^1.1.0",
         "multibase": "^3.0.1",
-        "multicodec": "^2.0.1",
+        "multicodec": "^2.1.0",
         "multihashes": "^3.0.1",
         "uint8arrays": "^1.1.0"
       }
@@ -5022,6 +4592,7 @@
       "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,
       "requires": {
         "inherits": "^2.0.1",
         "safe-buffer": "^5.0.1"
@@ -5224,11 +4795,6 @@
         "q": "^1.1.2"
       }
     },
-    "code-point-at": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
-      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
-    },
     "collection-visit": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@@ -5310,9 +4876,9 @@
       "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E="
     },
     "component-emitter": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
-      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
     },
     "component-inherit": {
       "version": "0.0.3",
@@ -5375,6 +4941,7 @@
       "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",
@@ -5393,6 +4960,21 @@
         "unique-string": "^2.0.0",
         "write-file-atomic": "^3.0.0",
         "xdg-basedir": "^4.0.0"
+      },
+      "dependencies": {
+        "make-dir": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+          "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+          "requires": {
+            "semver": "^6.0.0"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+        }
       }
     },
     "connect-history-api-fallback": {
@@ -5581,17 +5163,17 @@
       }
     },
     "core-js": {
-      "version": "3.6.5",
-      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
-      "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA=="
+      "version": "3.8.1",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.8.1.tgz",
+      "integrity": "sha512-9Id2xHY1W7m8hCl8NkhQn5CufmF/WuR30BTRewvCXc1aZd3kMECwNZ69ndLbekKfakw9Rf2Xyc+QR6E7Gg+obg=="
     },
     "core-js-compat": {
-      "version": "3.6.5",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz",
-      "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==",
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.7.0.tgz",
+      "integrity": "sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==",
       "dev": true,
       "requires": {
-        "browserslist": "^4.8.5",
+        "browserslist": "^4.14.6",
         "semver": "7.0.0"
       },
       "dependencies": {
@@ -5636,24 +5218,17 @@
       "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": {
-        "elliptic": {
-          "version": "6.5.3",
-          "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
-          "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
-          "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"
-          }
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+          "dev": true
         }
       }
     },
@@ -5661,6 +5236,7 @@
       "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,
       "requires": {
         "cipher-base": "^1.0.1",
         "inherits": "^2.0.1",
@@ -5673,6 +5249,7 @@
       "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,
       "requires": {
         "cipher-base": "^1.0.3",
         "create-hash": "^1.1.0",
@@ -5683,35 +5260,23 @@
       }
     },
     "cross-spawn": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz",
-      "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==",
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+      "dev": true,
       "requires": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
+        "nice-try": "^1.0.4",
+        "path-key": "^2.0.1",
+        "semver": "^5.5.0",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
       },
       "dependencies": {
-        "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==",
-          "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=="
-        },
-        "which": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-          "requires": {
-            "isexe": "^2.0.0"
-          }
+        "path-key": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+          "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+          "dev": true
         }
       }
     },
@@ -5719,6 +5284,7 @@
       "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",
@@ -5775,6 +5341,12 @@
         "semver": "^6.3.0"
       },
       "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+          "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+          "dev": true
+        },
         "semver": {
           "version": "6.3.0",
           "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -5909,28 +5481,28 @@
       "dev": true
     },
     "csso": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz",
-      "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/csso/-/csso-4.1.1.tgz",
+      "integrity": "sha512-Rvq+e1e0TFB8E8X+8MQjHSY6vtol45s5gxtLI/018UsAn2IBMmwNEZRM/h+HVnAJRHjasLIKKUO3uvoMM28LvA==",
       "dev": true,
       "requires": {
-        "css-tree": "1.0.0-alpha.39"
+        "css-tree": "^1.0.0"
       },
       "dependencies": {
         "css-tree": {
-          "version": "1.0.0-alpha.39",
-          "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz",
-          "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==",
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.1.tgz",
+          "integrity": "sha512-NVN42M2fjszcUNpDbdkvutgQSlFYsr1z7kqeuCagHnNLBfYor6uP1WL1KrkmdYZ5Y1vTBCIOI/C/+8T98fJ71w==",
           "dev": true,
           "requires": {
-            "mdn-data": "2.0.6",
+            "mdn-data": "2.0.14",
             "source-map": "^0.6.1"
           }
         },
         "mdn-data": {
-          "version": "2.0.6",
-          "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz",
-          "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==",
+          "version": "2.0.14",
+          "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+          "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
           "dev": true
         },
         "source-map": {
@@ -5941,14 +5513,6 @@
         }
       }
     },
-    "currently-unhandled": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
-      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
-      "requires": {
-        "array-find-index": "^1.0.1"
-      }
-    },
     "cyclist": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
@@ -5968,26 +5532,28 @@
       "version": "1.14.1",
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "dev": true,
       "requires": {
         "assert-plus": "^1.0.0"
       }
     },
     "datastore-core": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-2.0.0.tgz",
-      "integrity": "sha512-E6SS3GEZNMCRZScWO98qQ14MIb7+3MLsJtcgla/ULCjfnhThsUE21HN+wT0+QLoYrKR54puWy/3XKp5N+5+zyA==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-2.0.1.tgz",
+      "integrity": "sha512-er9DVcug5aM/qJFaG7pFmYah1f5XvUsHZ5nf9+MOFUKB3pCLlQIrClSu+Nl9hfROS9yiou6i5dFZu9PL9IQ+gQ==",
       "requires": {
         "debug": "^4.1.1",
         "interface-datastore": "^2.0.0",
-        "ipfs-utils": "^2.3.1"
+        "ipfs-utils": "^4.0.1"
       },
       "dependencies": {
-        "any-signal": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-1.2.0.tgz",
-          "integrity": "sha512-Cl08k4xItix3jvu4cxO/dt2rQ6iUAjO66pTyRMub+WL1VXeAyZydCpD8GqWTPKfdL28U0R0UucmQVsUsBnvCmQ==",
+        "buffer": {
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+          "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
           "requires": {
-            "abort-controller": "^3.0.0"
+            "base64-js": "^1.3.1",
+            "ieee754": "^1.2.1"
           }
         },
         "fs-extra": {
@@ -6001,33 +5567,52 @@
             "universalify": "^1.0.0"
           }
         },
+        "ieee754": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+          "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+        },
         "ipfs-utils": {
-          "version": "2.4.0",
-          "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-2.4.0.tgz",
-          "integrity": "sha512-0RH8rMIEhrXyrbh87V8SQC6E6/5EJs+YionqZGAXnVoTzkpFhxC3x3FlsxwZ9s72yaieGP1Mx1tRYgfCFM/mJg==",
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-4.0.1.tgz",
+          "integrity": "sha512-6mg+S1sbjj+Ff+uoHOhVeC4myfV2tb2sHcdYwfpJ4ZcBo9WfdxSMnWFLiC5bIqByyJuN/g5aWgz3ozjKDzND1Q==",
           "requires": {
+            "@achingbrain/electron-fetch": "^1.7.2",
             "abort-controller": "^3.0.0",
-            "any-signal": "^1.1.0",
-            "buffer": "^5.6.0",
+            "any-signal": "^2.1.0",
+            "buffer": "^6.0.1",
             "err-code": "^2.0.0",
             "fs-extra": "^9.0.1",
             "is-electron": "^2.2.0",
-            "iso-url": "^0.4.7",
-            "it-glob": "0.0.8",
-            "it-to-stream": "^0.1.2",
+            "iso-url": "^1.0.0",
+            "it-glob": "0.0.10",
             "merge-options": "^2.0.0",
             "nanoid": "^3.1.3",
+            "native-abort-controller": "0.0.3",
+            "native-fetch": "^2.0.0",
             "node-fetch": "^2.6.0",
             "stream-to-it": "^0.2.0"
           }
         },
+        "iso-url": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.0.0.tgz",
+          "integrity": "sha512-n/MsHgKOoHcFrhsxfbM3aaSdUujoFrrZ3537p3RW80AL7axL36acCseoMwIW4tNOl0n0SnkzNyVh4bREwmHoPQ=="
+        },
         "jsonfile": {
-          "version": "6.0.1",
-          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
-          "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+          "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
           "requires": {
             "graceful-fs": "^4.1.6",
-            "universalify": "^1.0.0"
+            "universalify": "^2.0.0"
+          },
+          "dependencies": {
+            "universalify": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+              "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
+            }
           }
         },
         "universalify": {
@@ -6038,14 +5623,14 @@
       }
     },
     "datastore-fs": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/datastore-fs/-/datastore-fs-2.0.1.tgz",
-      "integrity": "sha512-W0qOEJDHVmzSfCXMBcgnHI7n0SROQ7vpD24v9AicVWE/DPju4CUWl/1NHSQO3RR3ooaFdG31c1J2OjDKJO6+Fg==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/datastore-fs/-/datastore-fs-2.0.2.tgz",
+      "integrity": "sha512-OA1jKopZy5fMMIJNASRRJoj36AgD/v1TIp843o+3B7x4ffSiUArHUzbLRIBchD6VGLklz/3i4mtZeIaALsh/ZQ==",
       "requires": {
         "datastore-core": "^2.0.0",
         "fast-write-atomic": "^0.2.0",
         "interface-datastore": "^2.0.0",
-        "it-glob": "0.0.8",
+        "it-glob": "0.0.10",
         "mkdirp": "^1.0.4"
       },
       "dependencies": {
@@ -6195,6 +5780,17 @@
         "execa": "^3.3.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"
+          }
+        },
         "execa": {
           "version": "3.4.0",
           "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz",
@@ -6213,12 +5809,27 @@
             "strip-final-newline": "^2.0.0"
           }
         },
+        "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,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
         "is-stream": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
           "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
           "dev": true
         },
+        "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
+        },
         "npm-run-path": {
           "version": "4.0.1",
           "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -6228,11 +5839,44 @@
             "path-key": "^3.0.0"
           }
         },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+          "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        },
         "p-finally": {
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz",
           "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==",
           "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"
+          }
         }
       }
     },
@@ -6396,6 +6040,7 @@
       "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"
@@ -6426,10 +6071,19 @@
       "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.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+          "dev": true
+        }
       }
     },
     "dir-glob": {
@@ -6458,18 +6112,19 @@
       "dev": true
     },
     "dns-over-http-resolver": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-1.0.0.tgz",
-      "integrity": "sha512-vwr6AR9aoAG+cimwd640GoTcHREy3L5ega/4j8uNp0f+mFz8Grfd8cL+klDBWWS7xqjQoWciR6JNzqXjk1b7Gg==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-1.2.0.tgz",
+      "integrity": "sha512-LJ1sEbQgwY+qmL6z3kNIKi0vHA9nSUdZb8vf3G6z43ZVIF6WhhNHXztLMOOvaMIvtCsCZBjAie11MtUD3+H0YA==",
       "requires": {
         "debug": "^4.2.0",
-        "native-fetch": "^2.0.1"
+        "native-fetch": "^2.0.1",
+        "receptacle": "^1.3.2"
       },
       "dependencies": {
         "debug": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
-          "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+          "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
           "requires": {
             "ms": "2.1.2"
           }
@@ -6482,12 +6137,13 @@
       }
     },
     "dns-packet": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-4.2.0.tgz",
-      "integrity": "sha512-bn1AKpfkFbm0MIioOMHZ5qJzl2uypdBwI4nYNsqvhjsegBhcKJUlCrMPWLx6JEezRjxZmxhtIz/FkBEur2l8Cw==",
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
+      "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
+      "dev": true,
       "requires": {
-        "ip": "^1.1.5",
-        "safe-buffer": "^5.1.1"
+        "ip": "^1.1.0",
+        "safe-buffer": "^5.0.1"
       }
     },
     "dns-txt": {
@@ -6567,9 +6223,9 @@
       }
     },
     "dot-prop": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz",
-      "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+      "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
       "requires": {
         "is-obj": "^2.0.0"
       }
@@ -6614,21 +6270,17 @@
         "stream-shift": "^1.0.0"
       }
     },
-    "earcut": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.2.tgz",
-      "integrity": "sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ=="
-    },
     "easy-stack": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz",
-      "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz",
+      "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==",
       "dev": true
     },
     "ecc-jsbn": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
       "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+      "dev": true,
       "requires": {
         "jsbn": "~0.1.0",
         "safer-buffer": "^2.1.0"
@@ -6646,121 +6298,20 @@
       "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==",
       "dev": true
     },
-    "electron": {
-      "version": "1.8.8",
-      "resolved": "https://registry.npmjs.org/electron/-/electron-1.8.8.tgz",
-      "integrity": "sha512-1f9zJehcTTGjrkb06o6ds+gsRq6SYhZJyxOk6zIWjRH8hVy03y/RzUDELzNas71f5vcvXmfGVvyjeEsadDI8tg==",
-      "requires": {
-        "@types/node": "^8.0.24",
-        "electron-download": "^3.0.1",
-        "extract-zip": "^1.0.3"
-      },
-      "dependencies": {
-        "@types/node": {
-          "version": "8.10.66",
-          "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
-          "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
-        }
-      }
-    },
-    "electron-download": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz",
-      "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=",
-      "requires": {
-        "debug": "^2.2.0",
-        "fs-extra": "^0.30.0",
-        "home-path": "^1.0.1",
-        "minimist": "^1.2.0",
-        "nugget": "^2.0.0",
-        "path-exists": "^2.1.0",
-        "rc": "^1.1.2",
-        "semver": "^5.3.0",
-        "sumchecker": "^1.2.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "path-exists": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
-          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "requires": {
-            "pinkie-promise": "^2.0.0"
-          }
-        }
-      }
-    },
-    "electron-eval": {
-      "version": "0.9.10",
-      "resolved": "https://registry.npmjs.org/electron-eval/-/electron-eval-0.9.10.tgz",
-      "integrity": "sha512-VrAw2MrAjCwM8EGQsY+n48/f9P4W+AH56adERtDEb9bl5Hw9aN+ectmuK9QIi2XA11g+owQlyj2N4AzvdT363A==",
+    "electron-fetch": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.7.2.tgz",
+      "integrity": "sha512-J7D136rhxIhPwYJsnHPpKgbyd4NUCGnKM1CuXLhmVWZdc8f6+LBiJqUOTngtSacj+xvGWgaDWOAuCXnhqiMTCw==",
       "requires": {
-        "cross-spawn": "^5.1.0",
-        "electron": "^1.6.11",
-        "headless": "https://github.com/paulkernfeld/node-headless/tarball/master",
-        "ndjson": "^1.5.0"
-      },
-      "dependencies": {
-        "cross-spawn": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
-          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
-          "requires": {
-            "lru-cache": "^4.0.1",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
-          }
-        },
-        "lru-cache": {
-          "version": "4.1.5",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
-          "requires": {
-            "pseudomap": "^1.0.2",
-            "yallist": "^2.1.2"
-          }
-        },
-        "yallist": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
-        }
+        "encoding": "^0.1.13"
       }
     },
     "electron-to-chromium": {
-      "version": "1.3.582",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.582.tgz",
-      "integrity": "sha512-0nCJ7cSqnkMC+kUuPs0YgklFHraWGl/xHqtZWWtOeVtyi+YqkoAOMGuZQad43DscXCQI/yizcTa3u6B5r+BLww==",
+      "version": "1.3.603",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.603.tgz",
+      "integrity": "sha512-J8OHxOeJkoSLgBXfV9BHgKccgfLMHh+CoeRo6wJsi6m0k3otaxS/5vrHpMNSEYY4MISwewqanPOuhAtuE8riQQ==",
       "dev": true
     },
-    "electron-webrtc": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/electron-webrtc/-/electron-webrtc-0.3.0.tgz",
-      "integrity": "sha1-VG0cqBpEU0jDIGLLnaXnpKasrc8=",
-      "requires": {
-        "debug": "^2.2.0",
-        "electron-eval": "^0.9.0",
-        "get-browser-rtc": "^1.0.2",
-        "hat": "^0.0.3"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        }
-      }
-    },
     "elliptic": {
       "version": "6.5.3",
       "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
@@ -6773,6 +6324,13 @@
         "inherits": "^2.0.1",
         "minimalistic-assert": "^1.0.0",
         "minimalistic-crypto-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw=="
+        }
       }
     },
     "emoji-regex": {
@@ -6869,9 +6427,9 @@
           "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
         },
         "ws": {
-          "version": "7.3.1",
-          "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz",
-          "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA=="
+          "version": "7.4.1",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz",
+          "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ=="
         }
       }
     },
@@ -6893,11 +6451,6 @@
         "yeast": "0.1.2"
       },
       "dependencies": {
-        "component-emitter": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
-          "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
-        },
         "debug": {
           "version": "3.1.0",
           "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
@@ -7001,6 +6554,7 @@
       "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"
       }
@@ -7015,9 +6569,9 @@
       }
     },
     "es-abstract": {
-      "version": "1.18.0-next.1",
-      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
-      "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+      "version": "1.17.7",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
+      "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
       "dev": true,
       "requires": {
         "es-to-primitive": "^1.2.1",
@@ -7025,7 +6579,6 @@
         "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",
@@ -7045,16 +6598,6 @@
         "is-symbol": "^1.0.2"
       }
     },
-    "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=="
-    },
-    "es6-promise-polyfill": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/es6-promise-polyfill/-/es6-promise-polyfill-1.2.0.tgz",
-      "integrity": "sha1-84kl8jyz4+jObNqP93T867sJDN4="
-    },
     "escalade": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -7077,13 +6620,13 @@
       "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
     },
     "eslint": {
-      "version": "7.12.1",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.1.tgz",
-      "integrity": "sha512-HlMTEdr/LicJfN08LB3nM1rRYliDXOmfoO4vj39xN6BLpFzF00hbwBoqHk8UcJ2M/3nlARZWy/mslvGEuZFvsg==",
+      "version": "7.16.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.16.0.tgz",
+      "integrity": "sha512-iVWPS785RuDA4dWuhhgXTNrGxHHK3a8HLSMBgbbU59ruJDubUraXN8N5rn7kb8tG6sjg74eE0RA3YWT51eusEw==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
-        "@eslint/eslintrc": "^0.2.1",
+        "@eslint/eslintrc": "^0.2.2",
         "ajv": "^6.10.0",
         "chalk": "^4.0.0",
         "cross-spawn": "^7.0.2",
@@ -7093,10 +6636,10 @@
         "eslint-scope": "^5.1.1",
         "eslint-utils": "^2.1.0",
         "eslint-visitor-keys": "^2.0.0",
-        "espree": "^7.3.0",
+        "espree": "^7.3.1",
         "esquery": "^1.2.0",
         "esutils": "^2.0.2",
-        "file-entry-cache": "^5.0.1",
+        "file-entry-cache": "^6.0.0",
         "functional-red-black-tree": "^1.0.1",
         "glob-parent": "^5.0.0",
         "globals": "^12.1.0",
@@ -7116,7 +6659,7 @@
         "semver": "^7.2.1",
         "strip-ansi": "^6.0.0",
         "strip-json-comments": "^3.1.0",
-        "table": "^5.2.3",
+        "table": "^6.0.4",
         "text-table": "^0.2.0",
         "v8-compile-cache": "^2.0.3"
       },
@@ -7160,39 +6703,12 @@
             "which": "^2.0.1"
           }
         },
-        "eslint-scope": {
-          "version": "5.1.1",
-          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
-          "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
-          "dev": true,
-          "requires": {
-            "esrecurse": "^4.3.0",
-            "estraverse": "^4.1.1"
-          }
-        },
         "eslint-visitor-keys": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
           "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
           "dev": true
         },
-        "esrecurse": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
-          "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
-          "dev": true,
-          "requires": {
-            "estraverse": "^5.2.0"
-          },
-          "dependencies": {
-            "estraverse": {
-              "version": "5.2.0",
-              "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
-              "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
-              "dev": true
-            }
-          }
-        },
         "globals": {
           "version": "12.4.0",
           "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
@@ -7209,15 +6725,24 @@
           "dev": true
         },
         "import-fresh": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
-          "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
+          "version": "3.3.0",
+          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+          "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
           "dev": true,
           "requires": {
             "parent-module": "^1.0.0",
             "resolve-from": "^4.0.0"
           }
         },
+        "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"
+          }
+        },
         "resolve-from": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -7225,10 +6750,13 @@
           "dev": true
         },
         "semver": {
-          "version": "7.3.2",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
-          "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
-          "dev": true
+          "version": "7.3.4",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
+          "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
         },
         "shebang-command": {
           "version": "2.0.0",
@@ -7262,6 +6790,12 @@
           "requires": {
             "isexe": "^2.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
         }
       }
     },
@@ -7288,32 +6822,59 @@
       }
     },
     "eslint-plugin-prettier": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz",
-      "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.0.tgz",
+      "integrity": "sha512-tMTwO8iUWlSRZIwS9k7/E4vrTsfvsrcM5p1eftyuqWH25nKsz/o6/54I7jwQ/3zobISyC7wMy9ZsFwgTxOcOpQ==",
       "dev": true,
       "requires": {
         "prettier-linter-helpers": "^1.0.0"
       }
     },
     "eslint-plugin-vue": {
-      "version": "6.2.2",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz",
-      "integrity": "sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ==",
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.3.0.tgz",
+      "integrity": "sha512-4rc9xrZgwT4aLz3XE6lrHu+FZtDLWennYvtzVvvS81kW9c65U4DUzQQWAFjDCgCFvN6HYWxi7ueEtxZVSB+f0g==",
       "dev": true,
       "requires": {
+        "eslint-utils": "^2.1.0",
         "natural-compare": "^1.4.0",
-        "semver": "^5.6.0",
-        "vue-eslint-parser": "^7.0.0"
+        "semver": "^7.3.2",
+        "vue-eslint-parser": "^7.3.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==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "semver": {
+          "version": "7.3.4",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
+          "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+          "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
+        }
       }
     },
     "eslint-scope": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz",
-      "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==",
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+      "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
       "dev": true,
       "requires": {
-        "esrecurse": "^4.1.0",
+        "esrecurse": "^4.3.0",
         "estraverse": "^4.1.1"
       }
     },
@@ -7333,13 +6894,13 @@
       "dev": true
     },
     "espree": {
-      "version": "7.3.0",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz",
-      "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==",
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
+      "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
       "dev": true,
       "requires": {
         "acorn": "^7.4.0",
-        "acorn-jsx": "^5.2.0",
+        "acorn-jsx": "^5.3.1",
         "eslint-visitor-keys": "^1.3.0"
       },
       "dependencies": {
@@ -7375,12 +6936,20 @@
       }
     },
     "esrecurse": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
-      "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
       "dev": true,
       "requires": {
-        "estraverse": "^4.1.0"
+        "estraverse": "^5.2.0"
+      },
+      "dependencies": {
+        "estraverse": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+          "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+          "dev": true
+        }
       }
     },
     "estraverse": {
@@ -7401,202 +6970,6 @@
       "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
       "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==",
-      "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-account": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-3.0.0.tgz",
-      "integrity": "sha512-WP6BdscjiiPkQfF9PVfMcwx/rDvfZTjFKY0Uwc09zSQr9JfIVH87dYIJu0gNhBhpmovV4yq295fdllS925fnBA==",
-      "requires": {
-        "ethereumjs-util": "^6.0.0",
-        "rlp": "^2.2.1",
-        "safe-buffer": "^5.1.1"
-      }
-    },
-    "ethereumjs-block": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz",
-      "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==",
-      "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",
-          "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz",
-          "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==",
-          "requires": {
-            "xtend": "~4.0.0"
-          }
-        },
-        "deferred-leveldown": {
-          "version": "1.2.2",
-          "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz",
-          "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==",
-          "requires": {
-            "abstract-leveldown": "~2.6.0"
-          }
-        },
-        "ethereumjs-util": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz",
-          "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==",
-          "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"
-          }
-        },
-        "level-codec": {
-          "version": "7.0.1",
-          "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz",
-          "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ=="
-        },
-        "level-errors": {
-          "version": "1.0.5",
-          "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz",
-          "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==",
-          "requires": {
-            "errno": "~0.1.1"
-          }
-        },
-        "level-iterator-stream": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz",
-          "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=",
-          "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",
-              "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
-              "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
-              "requires": {
-                "core-util-is": "~1.0.0",
-                "inherits": "~2.0.1",
-                "isarray": "0.0.1",
-                "string_decoder": "~0.10.x"
-              }
-            }
-          }
-        },
-        "levelup": {
-          "version": "1.3.9",
-          "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz",
-          "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==",
-          "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"
-          }
-        },
-        "merkle-patricia-tree": {
-          "version": "2.3.2",
-          "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz",
-          "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==",
-          "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",
-              "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
-              "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
-            }
-          }
-        },
-        "semver": {
-          "version": "5.4.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
-          "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg=="
-        },
-        "string_decoder": {
-          "version": "0.10.31",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
-        }
-      }
-    },
-    "ethereumjs-common": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz",
-      "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA=="
-    },
-    "ethereumjs-tx": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz",
-      "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==",
-      "requires": {
-        "ethereumjs-common": "^1.5.0",
-        "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"
-      }
-    },
-    "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-iterator": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/event-iterator/-/event-iterator-2.0.0.tgz",
@@ -7619,9 +6992,9 @@
       "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
     },
     "events": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
-      "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg=="
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
+      "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg=="
     },
     "eventsource": {
       "version": "1.0.7",
@@ -7636,6 +7009,7 @@
       "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"
@@ -7654,36 +7028,6 @@
         "p-finally": "^1.0.0",
         "signal-exit": "^3.0.0",
         "strip-eof": "^1.0.0"
-      },
-      "dependencies": {
-        "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"
-          }
-        },
-        "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,
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        },
-        "path-key": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-          "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
-          "dev": true
-        }
       }
     },
     "expand-brackets": {
@@ -7799,7 +7143,8 @@
     "extend": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
-      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+      "dev": true
     },
     "extend-shallow": {
       "version": "3.0.2",
@@ -7898,31 +7243,11 @@
         }
       }
     },
-    "extract-zip": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
-      "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
-      "requires": {
-        "concat-stream": "^1.6.2",
-        "debug": "^2.6.9",
-        "mkdirp": "^0.5.4",
-        "yauzl": "^2.10.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        }
-      }
-    },
     "extsprintf": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
-      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+      "dev": true
     },
     "fast-deep-equal": {
       "version": "3.1.3",
@@ -8012,14 +7337,6 @@
         "websocket-driver": ">=0.5.1"
       }
     },
-    "fd-slicer": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
-      "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
-      "requires": {
-        "pend": "~1.2.0"
-      }
-    },
     "fetch-cookie": {
       "version": "0.10.1",
       "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-0.10.1.tgz",
@@ -8044,12 +7361,12 @@
       }
     },
     "file-entry-cache": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
-      "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.0.tgz",
+      "integrity": "sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA==",
       "dev": true,
       "requires": {
-        "flat-cache": "^2.0.1"
+        "flat-cache": "^3.0.4"
       }
     },
     "file-loader": {
@@ -8163,51 +7480,31 @@
         "commondir": "^1.0.1",
         "make-dir": "^2.0.0",
         "pkg-dir": "^3.0.0"
-      },
-      "dependencies": {
-        "make-dir": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
-          "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
-          "dev": true,
-          "requires": {
-            "pify": "^4.0.1",
-            "semver": "^5.6.0"
-          }
-        }
       }
     },
     "find-up": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+      "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": "^5.0.0",
-        "path-exists": "^4.0.0"
-      },
-      "dependencies": {
-        "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=="
-        }
+        "locate-path": "^3.0.0"
       }
     },
     "flat-cache": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
-      "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
       "dev": true,
       "requires": {
-        "flatted": "^2.0.0",
-        "rimraf": "2.6.3",
-        "write": "1.0.3"
+        "flatted": "^3.1.0",
+        "rimraf": "^3.0.2"
       },
       "dependencies": {
         "rimraf": {
-          "version": "2.6.3",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
-          "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+          "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"
@@ -8221,9 +7518,9 @@
       "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw=="
     },
     "flatted": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
-      "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz",
+      "integrity": "sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA==",
       "dev": true
     },
     "flush-write-stream": {
@@ -8256,15 +7553,17 @@
     "forever-agent": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
-      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+      "dev": true
     },
     "form-data": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
-      "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
+      "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,
       "requires": {
         "asynckit": "^0.4.0",
-        "combined-stream": "^1.0.8",
+        "combined-stream": "^1.0.6",
         "mime-types": "^2.1.12"
       }
     },
@@ -8300,25 +7599,14 @@
       }
     },
     "fs-extra": {
-      "version": "0.30.0",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
-      "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
+      "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": "^2.1.0",
-        "klaw": "^1.0.0",
-        "path-is-absolute": "^1.0.0",
-        "rimraf": "^2.2.8"
-      },
-      "dependencies": {
-        "jsonfile": {
-          "version": "2.4.0",
-          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
-          "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
-          "requires": {
-            "graceful-fs": "^4.1.6"
-          }
-        }
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
       }
     },
     "fs-minipass": {
@@ -8345,7 +7633,8 @@
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "dev": true
     },
     "fsevents": {
       "version": "2.1.3",
@@ -8363,7 +7652,8 @@
     "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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
+      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+      "dev": true
     },
     "gar": {
       "version": "1.0.4",
@@ -8852,15 +8142,15 @@
       }
     },
     "gensync": {
-      "version": "1.0.0-beta.1",
-      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
-      "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==",
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+      "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
       "dev": true
     },
     "get-browser-rtc": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.0.2.tgz",
-      "integrity": "sha1-u81AyEUaftTvXDc7gWmkCd0dEdk="
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/get-browser-rtc/-/get-browser-rtc-1.1.0.tgz",
+      "integrity": "sha512-MghbMJ61EJrRsDe7w1Bvqt3ZsBuqhce5nrn/XAwgwOXhcsz53/ltdxOse1h/8eKXj5slzxdsz56g5rzOFSGwfQ=="
     },
     "get-caller-file": {
       "version": "2.0.5",
@@ -8881,6 +8171,17 @@
       "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
       "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE="
     },
+    "get-intrinsic": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz",
+      "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==",
+      "dev": true,
+      "requires": {
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "has-symbols": "^1.0.1"
+      }
+    },
     "get-iterator": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz",
@@ -8893,9 +8194,9 @@
       "dev": true
     },
     "get-stream": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
-      "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
       "requires": {
         "pump": "^3.0.0"
       }
@@ -8910,6 +8211,7 @@
       "version": "0.1.7",
       "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
       "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "dev": true,
       "requires": {
         "assert-plus": "^1.0.0"
       }
@@ -8918,6 +8220,7 @@
       "version": "7.1.6",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
       "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+      "dev": true,
       "requires": {
         "fs.realpath": "^1.0.0",
         "inflight": "^1.0.4",
@@ -8943,11 +8246,11 @@
       "dev": true
     },
     "global-dirs": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz",
-      "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz",
+      "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==",
       "requires": {
-        "ini": "^1.3.5"
+        "ini": "1.3.7"
       }
     },
     "globals": {
@@ -8998,14 +8301,6 @@
         "url-parse-lax": "^3.0.0"
       },
       "dependencies": {
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
-          "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        },
         "p-cancelable": {
           "version": "1.1.0",
           "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
@@ -9014,9 +8309,9 @@
       }
     },
     "graceful-fs": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
-      "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
+      "version": "4.2.4",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+      "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
     },
     "gzip-size": {
       "version": "5.1.1",
@@ -9063,12 +8358,14 @@
     "har-schema": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
-      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+      "dev": true
     },
     "har-validator": {
       "version": "5.1.5",
       "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
       "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+      "dev": true,
       "requires": {
         "ajv": "^6.12.3",
         "har-schema": "^2.0.0"
@@ -9172,6 +8469,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",
@@ -9182,6 +8480,7 @@
           "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",
@@ -9210,22 +8509,12 @@
       "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz",
       "integrity": "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A=="
     },
-    "hat": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npmjs.org/hat/-/hat-0.0.3.tgz",
-      "integrity": "sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo="
-    },
     "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
     },
-    "headless": {
-      "version": "https://github.com/paulkernfeld/node-headless/tarball/master",
-      "integrity": "sha512-Y+OAUntNS8dvU9cX0NHuTegMu7sDbd9KbPHF/pe9YO64UvuSE14AEKmMqzRqywQx83a3Y23inqC6iDvAd6PIYA==",
-      "optional": true
-    },
     "heap": {
       "version": "0.2.6",
       "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz",
@@ -9238,9 +8527,9 @@
       "dev": true
     },
     "highlight.js": {
-      "version": "9.18.3",
-      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.3.tgz",
-      "integrity": "sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ==",
+      "version": "9.18.5",
+      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz",
+      "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==",
       "dev": true
     },
     "hmac-drbg": {
@@ -9253,11 +8542,6 @@
         "minimalistic-crypto-utils": "^1.0.1"
       }
     },
-    "home-path": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.7.tgz",
-      "integrity": "sha512-tM1pVa+u3ZqQwIkXcWfhUlY3HWS3TsnKsfi2OHHvnhkX52s9etyktPyy1rQotkr0euWimChDq+QkQuDe8ngUlQ=="
-    },
     "hoopy": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
@@ -9267,7 +8551,8 @@
     "hosted-git-info": {
       "version": "2.8.8",
       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
-      "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg=="
+      "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
+      "dev": true
     },
     "hpack.js": {
       "version": "2.1.6",
@@ -9483,6 +8768,7 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
       "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "dev": true,
       "requires": {
         "assert-plus": "^1.0.0",
         "jsprim": "^1.2.2",
@@ -9498,7 +8784,8 @@
     "human-signals": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
-      "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw=="
+      "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
+      "dev": true
     },
     "iconv-lite": {
       "version": "0.4.24",
@@ -9614,6 +8901,7 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
       "requires": {
         "once": "^1.3.0",
         "wrappy": "1"
@@ -9625,9 +8913,9 @@
       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
     "ini": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
-      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
+      "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ=="
     },
     "inquirer": {
       "version": "7.3.3",
@@ -9693,6 +8981,21 @@
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
+        "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
+        },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+          "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        },
         "restore-cursor": {
           "version": "3.1.0",
           "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
@@ -9715,25 +9018,26 @@
       }
     },
     "interface-datastore": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-2.0.0.tgz",
-      "integrity": "sha512-wOImix5uVEZWo+8zPSRMJ9nHbszZi3PhZ14KHLN7oRQjaYQtjtOpYj6n5EXTjDAfIQI8KN9vntHXxyAw1lcRIA==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-2.0.1.tgz",
+      "integrity": "sha512-a4xHvVE8JCG8UItP0CCq+UJyBHZxhMp3esuFNjb3U9rP+tzKiG0HZXz8gIIwic6VbuE0Gui2whbJyJOFpMxhLg==",
       "requires": {
         "class-is": "^1.1.0",
         "err-code": "^2.0.1",
-        "ipfs-utils": "^2.3.1",
+        "ipfs-utils": "^4.0.1",
         "iso-random-stream": "^1.1.1",
         "it-all": "^1.0.2",
         "it-drain": "^1.0.1",
         "nanoid": "^3.0.2"
       },
       "dependencies": {
-        "any-signal": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-1.2.0.tgz",
-          "integrity": "sha512-Cl08k4xItix3jvu4cxO/dt2rQ6iUAjO66pTyRMub+WL1VXeAyZydCpD8GqWTPKfdL28U0R0UucmQVsUsBnvCmQ==",
+        "buffer": {
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+          "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
           "requires": {
-            "abort-controller": "^3.0.0"
+            "base64-js": "^1.3.1",
+            "ieee754": "^1.2.1"
           }
         },
         "fs-extra": {
@@ -9747,33 +9051,52 @@
             "universalify": "^1.0.0"
           }
         },
+        "ieee754": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+          "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+        },
         "ipfs-utils": {
-          "version": "2.4.0",
-          "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-2.4.0.tgz",
-          "integrity": "sha512-0RH8rMIEhrXyrbh87V8SQC6E6/5EJs+YionqZGAXnVoTzkpFhxC3x3FlsxwZ9s72yaieGP1Mx1tRYgfCFM/mJg==",
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-4.0.1.tgz",
+          "integrity": "sha512-6mg+S1sbjj+Ff+uoHOhVeC4myfV2tb2sHcdYwfpJ4ZcBo9WfdxSMnWFLiC5bIqByyJuN/g5aWgz3ozjKDzND1Q==",
           "requires": {
+            "@achingbrain/electron-fetch": "^1.7.2",
             "abort-controller": "^3.0.0",
-            "any-signal": "^1.1.0",
-            "buffer": "^5.6.0",
+            "any-signal": "^2.1.0",
+            "buffer": "^6.0.1",
             "err-code": "^2.0.0",
             "fs-extra": "^9.0.1",
             "is-electron": "^2.2.0",
-            "iso-url": "^0.4.7",
-            "it-glob": "0.0.8",
-            "it-to-stream": "^0.1.2",
+            "iso-url": "^1.0.0",
+            "it-glob": "0.0.10",
             "merge-options": "^2.0.0",
             "nanoid": "^3.1.3",
+            "native-abort-controller": "0.0.3",
+            "native-fetch": "^2.0.0",
             "node-fetch": "^2.6.0",
             "stream-to-it": "^0.2.0"
           }
         },
+        "iso-url": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.0.0.tgz",
+          "integrity": "sha512-n/MsHgKOoHcFrhsxfbM3aaSdUujoFrrZ3537p3RW80AL7axL36acCseoMwIW4tNOl0n0SnkzNyVh4bREwmHoPQ=="
+        },
         "jsonfile": {
-          "version": "6.0.1",
-          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
-          "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+          "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
           "requires": {
             "graceful-fs": "^4.1.6",
-            "universalify": "^1.0.0"
+            "universalify": "^2.0.0"
+          },
+          "dependencies": {
+            "universalify": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+              "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
+            }
           }
         },
         "universalify": {
@@ -9802,12 +9125,6 @@
             "execa": "^1.0.0",
             "ip-regex": "^2.1.0"
           }
-        },
-        "ip-regex": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
-          "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
-          "dev": true
         }
       }
     },
@@ -9843,9 +9160,10 @@
       }
     },
     "ip-regex": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz",
-      "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+      "dev": true
     },
     "ipaddr.js": {
       "version": "1.9.1",
@@ -9854,40 +9172,56 @@
       "dev": true
     },
     "ipfs": {
-      "version": "0.51.0",
-      "resolved": "https://registry.npmjs.org/ipfs/-/ipfs-0.51.0.tgz",
-      "integrity": "sha512-oy3+huiSgXV/W/ygQYsjjiMU2cAN7GcJI8SvKSU+5gRLL3AZ+G9iCH/YTXxT3G6Arw1KTytlPsxmM4XB1EOJ/w==",
+      "version": "0.52.3",
+      "resolved": "https://registry.npmjs.org/ipfs/-/ipfs-0.52.3.tgz",
+      "integrity": "sha512-zCd2Ziq1GYDJizXdoAj5nof325i3mx2kzOhG6E+xdEK6FcK6kQwKendaBlQHwTbzHLqLI7ITxsepQzFWNopI2g==",
       "requires": {
         "debug": "^4.1.1",
-        "ipfs-cli": "^0.1.0",
-        "ipfs-core": "^0.1.0",
-        "ipfs-repo": "^6.0.3",
+        "ipfs-cli": "^0.2.3",
+        "ipfs-core": "^0.3.1",
+        "ipfs-repo": "^7.0.0",
         "semver": "^7.3.2",
         "update-notifier": "^5.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==",
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
         "semver": {
-          "version": "7.3.2",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
-          "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ=="
+          "version": "7.3.4",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
+          "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+          "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=="
         }
       }
     },
     "ipfs-bitswap": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/ipfs-bitswap/-/ipfs-bitswap-3.0.0.tgz",
-      "integrity": "sha512-9rX9vMUEegk61O4OoUWBUcU/WLLwALhyzHQdJzqW1DCn+nNnZVbRrzIWY1v5PnlywMtcUvd/ennpegVKCPuiUA==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/ipfs-bitswap/-/ipfs-bitswap-4.0.0.tgz",
+      "integrity": "sha512-KQjRX6h2bU0DgHxCFTAgn0JJPs3sF2eTwn5kD54M1A+KeKmHG21EVyXo/ZSO2iDWgERmL66WnA+jX7xM1p2k+Q==",
       "requires": {
         "abort-controller": "^3.0.0",
-        "any-signal": "^1.1.0",
+        "any-signal": "^2.1.1",
         "bignumber.js": "^9.0.0",
         "cids": "^1.0.0",
         "debug": "^4.1.0",
-        "ipld-block": "^0.10.0",
+        "ipld-block": "^0.11.0",
         "it-length-prefixed": "^3.0.0",
         "it-pipe": "^1.1.0",
         "just-debounce-it": "^1.1.0",
-        "libp2p-interfaces": "^0.4.1",
+        "libp2p-interfaces": "^0.7.1",
         "moving-average": "^1.0.0",
         "multicodec": "^2.0.0",
         "multihashing-async": "^2.0.1",
@@ -9895,16 +9229,6 @@
         "streaming-iterables": "^5.0.2",
         "uint8arrays": "^1.1.0",
         "varint-decoder": "^1.0.0"
-      },
-      "dependencies": {
-        "any-signal": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-1.2.0.tgz",
-          "integrity": "sha512-Cl08k4xItix3jvu4cxO/dt2rQ6iUAjO66pTyRMub+WL1VXeAyZydCpD8GqWTPKfdL28U0R0UucmQVsUsBnvCmQ==",
-          "requires": {
-            "abort-controller": "^3.0.0"
-          }
-        }
       }
     },
     "ipfs-block-service": {
@@ -9917,41 +9241,33 @@
       }
     },
     "ipfs-cli": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/ipfs-cli/-/ipfs-cli-0.1.0.tgz",
-      "integrity": "sha512-spzMpCMPRVs2BPRfK6ukPSQ/0YbOLSxNREXhl8W47b4eJM/aAJEd9Ti0WI8A1/jHh7msF5o2U/CUAr4Ceuez+A==",
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/ipfs-cli/-/ipfs-cli-0.2.3.tgz",
+      "integrity": "sha512-3DGUh/V9INVPG5dv0bT1DQpjVM5diKEVrVYSMtk/h5enVPbNHTZ+Dz4zOwjRsob5QQNkdVQWdHnhCcRHNyWFCA==",
       "requires": {
         "bignumber.js": "^9.0.0",
         "byteman": "^1.3.5",
         "cid-tool": "^1.0.0",
         "cids": "^1.0.0",
         "debug": "^4.1.1",
-        "dlv": "^1.1.3",
-        "electron-webrtc": "^0.3.0",
         "err-code": "^2.0.3",
-        "execa": "^4.0.3",
+        "execa": "^5.0.0",
         "get-folder-size": "^2.0.1",
-        "ipfs-core": "^0.1.0",
-        "ipfs-core-utils": "^0.5.0",
-        "ipfs-http-client": "^48.0.0",
-        "ipfs-http-gateway": "^0.1.0",
-        "ipfs-http-server": "^0.1.0",
-        "ipfs-repo": "^6.0.3",
-        "ipfs-utils": "^4.0.0",
+        "ipfs-core": "^0.3.1",
+        "ipfs-core-utils": "^0.5.4",
+        "ipfs-daemon": "^0.3.2",
+        "ipfs-http-client": "^48.1.3",
+        "ipfs-repo": "^7.0.0",
+        "ipfs-utils": "^5.0.0",
         "ipld-dag-cbor": "^0.17.0",
         "ipld-dag-pb": "^0.20.0",
         "it-all": "^1.0.4",
         "it-concat": "^1.0.1",
         "it-first": "^1.0.4",
-        "it-glob": "0.0.8",
+        "it-glob": "0.0.10",
         "it-pipe": "^1.1.0",
         "jsondiffpatch": "^0.4.1",
-        "just-safe-set": "^2.1.0",
-        "libp2p": "^0.29.0",
         "libp2p-crypto": "^0.18.0",
-        "libp2p-delegated-content-routing": "^0.8.0",
-        "libp2p-delegated-peer-routing": "^0.8.0",
-        "libp2p-webrtc-star": "^0.20.1",
         "mafmt": "^8.0.0",
         "multiaddr": "^8.0.0",
         "multiaddr-to-uri": "^6.0.0",
@@ -9961,8 +9277,6 @@
         "peer-id": "^0.14.1",
         "pretty-bytes": "^5.4.1",
         "progress": "^2.0.3",
-        "prom-client": "^12.0.0",
-        "prometheus-gc-stats": "^0.6.0",
         "stream-to-it": "^0.2.2",
         "streaming-iterables": "^5.0.2",
         "uint8arrays": "^1.1.0",
@@ -9978,9 +9292,9 @@
           }
         },
         "cliui": {
-          "version": "7.0.3",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.3.tgz",
-          "integrity": "sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw==",
+          "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",
@@ -9995,27 +9309,52 @@
             "color-name": "~1.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==",
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
         "execa": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
-          "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz",
+          "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==",
           "requires": {
-            "cross-spawn": "^7.0.0",
-            "get-stream": "^5.0.0",
-            "human-signals": "^1.1.1",
+            "cross-spawn": "^7.0.3",
+            "get-stream": "^6.0.0",
+            "human-signals": "^2.1.0",
             "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",
+            "npm-run-path": "^4.0.1",
+            "onetime": "^5.1.2",
+            "signal-exit": "^3.0.3",
             "strip-final-newline": "^2.0.0"
           }
         },
+        "get-stream": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz",
+          "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg=="
+        },
+        "human-signals": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+          "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="
+        },
         "is-stream": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
           "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
         },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+        },
         "npm-run-path": {
           "version": "4.0.1",
           "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -10024,48 +9363,76 @@
             "path-key": "^3.0.0"
           }
         },
-        "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==",
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+          "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
           "requires": {
-            "ansi-styles": "^4.0.0",
-            "string-width": "^4.1.0",
-            "strip-ansi": "^6.0.0"
+            "mimic-fn": "^2.1.0"
           }
         },
-        "y18n": {
-          "version": "5.0.5",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
-          "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg=="
-        },
-        "yargs": {
-          "version": "16.1.0",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz",
-          "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==",
+        "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==",
           "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.2",
-            "yargs-parser": "^20.2.2"
+            "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=="
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        },
+        "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.5",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz",
+          "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg=="
+        },
+        "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.3",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.3.tgz",
-          "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww=="
+          "version": "20.2.4",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+          "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA=="
         }
       }
     },
     "ipfs-core": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/ipfs-core/-/ipfs-core-0.1.0.tgz",
-      "integrity": "sha512-ImCY4EzlTYJTozVRHC9LuZUPCeT9a1u0fE/3j2FFk1H9f+2poi9ntiZ/NlyKbwumouctPHfU9bV+Y+uPxosPyg==",
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/ipfs-core/-/ipfs-core-0.3.1.tgz",
+      "integrity": "sha512-d94i8Bvhm+0a38rZG2q7EcQXcVT4cTkjCZAu7ZZ4HOWyB0EevqrxH6D7VK3zv6fe+iOC6iv4qrB+Wtt1pE6NVw==",
       "requires": {
-        "any-signal": "^2.0.0",
         "array-shuffle": "^1.0.1",
         "bignumber.js": "^9.0.0",
         "cbor": "^5.1.0",
@@ -10080,32 +9447,27 @@
         "hamt-sharding": "^1.0.0",
         "hashlru": "^2.3.0",
         "interface-datastore": "^2.0.0",
-        "ipfs-bitswap": "^3.0.0",
+        "ipfs-bitswap": "^4.0.0",
         "ipfs-block-service": "^0.18.0",
-        "ipfs-core-utils": "^0.5.0",
-        "ipfs-repo": "^6.0.3",
+        "ipfs-core-utils": "^0.5.4",
+        "ipfs-repo": "^7.0.0",
         "ipfs-unixfs": "^2.0.3",
         "ipfs-unixfs-exporter": "^3.0.4",
-        "ipfs-unixfs-importer": "^3.0.4",
-        "ipfs-utils": "^4.0.0",
-        "ipld": "^0.27.2",
-        "ipld-bitcoin": "^0.4.0",
-        "ipld-block": "^0.10.1",
+        "ipfs-unixfs-importer": "^5.0.0",
+        "ipfs-utils": "^5.0.0",
+        "ipld": "^0.28.0",
+        "ipld-block": "^0.11.0",
         "ipld-dag-cbor": "^0.17.0",
         "ipld-dag-pb": "^0.20.0",
-        "ipld-ethereum": "^5.0.1",
-        "ipld-git": "^0.6.1",
         "ipld-raw": "^6.0.0",
-        "ipld-zcash": "^0.5.0",
         "ipns": "^0.8.0",
         "is-domain-name": "^1.0.1",
         "is-ipfs": "^2.0.0",
         "it-all": "^1.0.4",
-        "it-concat": "^1.0.1",
         "it-first": "^1.0.4",
         "it-last": "^1.0.4",
         "it-pipe": "^1.1.0",
-        "libp2p": "^0.29.0",
+        "libp2p": "^0.29.3",
         "libp2p-bootstrap": "^0.12.1",
         "libp2p-crypto": "^0.18.0",
         "libp2p-floodsub": "^0.23.1",
@@ -10127,58 +9489,78 @@
         "multicodec": "^2.0.1",
         "multihashing-async": "^2.0.1",
         "native-abort-controller": "~0.0.3",
-        "p-defer": "^3.0.0",
         "p-queue": "^6.6.1",
         "parse-duration": "^0.4.4",
         "peer-id": "^0.14.1",
-        "prom-client": "^12.0.0",
-        "prometheus-gc-stats": "^0.6.0",
         "streaming-iterables": "^5.0.2",
-        "timeout-abort-controller": "^1.1.1",
         "uint8arrays": "^1.1.0"
       }
     },
     "ipfs-core-utils": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/ipfs-core-utils/-/ipfs-core-utils-0.5.0.tgz",
-      "integrity": "sha512-yXioQTgwX2gaJuIxofqyTd0tPBPwZbbFAebiMDPxmbERtbkLBupx3ElsTqFGoHQONw6GYBPo2yTqLRJKJofeZw==",
+      "version": "0.5.4",
+      "resolved": "https://registry.npmjs.org/ipfs-core-utils/-/ipfs-core-utils-0.5.4.tgz",
+      "integrity": "sha512-V+OHCkqf/263jHU0Fc9Rx/uDuwlz3PHxl3qu6a5ka/mNi6gucbFuI53jWsevCrOOY9giWMLB29RINGmCV5dFeQ==",
       "requires": {
-        "blob-to-it": "0.0.2",
-        "browser-readablestream-to-it": "0.0.2",
+        "any-signal": "^2.0.0",
+        "blob-to-it": "^1.0.1",
+        "browser-readablestream-to-it": "^1.0.1",
         "cids": "^1.0.0",
         "err-code": "^2.0.3",
-        "ipfs-utils": "^4.0.0",
+        "ipfs-utils": "^5.0.0",
         "it-all": "^1.0.4",
         "it-map": "^1.0.4",
-        "it-peekable": "0.0.1",
+        "it-peekable": "^1.0.1",
+        "multiaddr": "^8.0.0",
+        "multiaddr-to-uri": "^6.0.0",
+        "parse-duration": "^0.4.4",
+        "timeout-abort-controller": "^1.1.1",
         "uint8arrays": "^1.1.0"
       }
     },
+    "ipfs-daemon": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/ipfs-daemon/-/ipfs-daemon-0.3.2.tgz",
+      "integrity": "sha512-MBpwB0zpYU17/ZZ4jGMGNvOHx6SYOOZyTfViw+dy/P3JZmeTZBzhPJQOZ0vwwnJI7OIwWscEakJWV4q4c6hrJw==",
+      "requires": {
+        "debug": "^4.1.1",
+        "dlv": "^1.1.3",
+        "ipfs-core": "^0.3.1",
+        "ipfs-http-client": "^48.1.3",
+        "ipfs-http-gateway": "^0.1.4",
+        "ipfs-http-server": "^0.1.4",
+        "ipfs-utils": "^5.0.0",
+        "just-safe-set": "^2.1.0",
+        "libp2p": "^0.29.3",
+        "libp2p-delegated-content-routing": "^0.8.0",
+        "libp2p-delegated-peer-routing": "^0.8.0",
+        "libp2p-webrtc-star": "^0.20.1",
+        "multiaddr": "^8.0.0",
+        "prom-client": "^12.0.0",
+        "prometheus-gc-stats": "^0.6.0"
+      }
+    },
     "ipfs-http-client": {
-      "version": "48.0.0",
-      "resolved": "https://registry.npmjs.org/ipfs-http-client/-/ipfs-http-client-48.0.0.tgz",
-      "integrity": "sha512-Nz26Aeytc5QvikiDVOwmrE3vkLRsdGrcCTeIdN/1dxFI6n0K+jFUL/2c3H3rJWRgEcD7yMPxNU9KtLF0x0okXA==",
+      "version": "48.1.3",
+      "resolved": "https://registry.npmjs.org/ipfs-http-client/-/ipfs-http-client-48.1.3.tgz",
+      "integrity": "sha512-+JV4cdMaTvYN3vd4r6+mcVxV3LkJXzc4kn2ToVbObpVpdqmG34ePf1KlvFF8A9gjcel84WpiP5xCEV/IrisPBA==",
       "requires": {
         "any-signal": "^2.0.0",
         "bignumber.js": "^9.0.0",
         "cids": "^1.0.0",
         "debug": "^4.1.1",
         "form-data": "^3.0.0",
-        "ipfs-core-utils": "^0.5.0",
-        "ipfs-utils": "^4.0.0",
-        "ipld-block": "^0.10.1",
+        "ipfs-core-utils": "^0.5.4",
+        "ipfs-utils": "^5.0.0",
+        "ipld-block": "^0.11.0",
         "ipld-dag-cbor": "^0.17.0",
         "ipld-dag-pb": "^0.20.0",
         "ipld-raw": "^6.0.0",
-        "iso-url": "^0.4.7",
         "it-last": "^1.0.4",
         "it-map": "^1.0.4",
         "it-tar": "^1.2.2",
-        "it-to-buffer": "^1.0.2",
         "it-to-stream": "^0.1.2",
         "merge-options": "^2.0.0",
         "multiaddr": "^8.0.0",
-        "multiaddr-to-uri": "^6.0.0",
         "multibase": "^3.0.0",
         "multicodec": "^2.0.1",
         "multihashes": "^3.0.1",
@@ -10187,12 +9569,24 @@
         "parse-duration": "^0.4.4",
         "stream-to-it": "^0.2.2",
         "uint8arrays": "^1.1.0"
+      },
+      "dependencies": {
+        "form-data": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
+          "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
+          "requires": {
+            "asynckit": "^0.4.0",
+            "combined-stream": "^1.0.8",
+            "mime-types": "^2.1.12"
+          }
+        }
       }
     },
     "ipfs-http-gateway": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/ipfs-http-gateway/-/ipfs-http-gateway-0.1.0.tgz",
-      "integrity": "sha512-9ReMkVNBPQS1Lvf40p4YHez8oqWxHrHWKR4vSgymX+wsMzPkVLskAh8rcAiigwHHfS6V5Ml874/6YLd4Mx33iQ==",
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/ipfs-http-gateway/-/ipfs-http-gateway-0.1.4.tgz",
+      "integrity": "sha512-/WuCFC5k31DiIIplGatyJnMmJ74YLnv12xU5DR1rr3E7abKLdyyvaca4cQz3iz2hFcTKvnD3+rRelbXH785JiA==",
       "requires": {
         "@hapi/ammo": "^5.0.1",
         "@hapi/boom": "^9.1.0",
@@ -10200,10 +9594,9 @@
         "cids": "^1.0.0",
         "debug": "^4.1.1",
         "hapi-pino": "^8.3.0",
-        "ipfs-core-utils": "^0.5.0",
+        "ipfs-core-utils": "^0.5.4",
         "ipfs-http-response": "^0.6.0",
         "is-ipfs": "^2.0.0",
-        "it-all": "^1.0.4",
         "it-last": "^1.0.4",
         "it-to-stream": "^0.1.2",
         "joi": "^17.2.1",
@@ -10233,26 +9626,13 @@
           "version": "6.1.0",
           "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz",
           "integrity": "sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg=="
-        },
-        "mime-db": {
-          "version": "1.44.0",
-          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
-          "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
-        },
-        "mime-types": {
-          "version": "2.1.27",
-          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
-          "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
-          "requires": {
-            "mime-db": "1.44.0"
-          }
         }
       }
     },
     "ipfs-http-server": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/ipfs-http-server/-/ipfs-http-server-0.1.0.tgz",
-      "integrity": "sha512-742vjnIoLgbiTGRVIHHHDkC8FYOJeGrK9pBrtT1Dtktr5cRCO9uPq/j0svdRoF9bPGxdWp1ux1neDAGQ08qApw==",
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/ipfs-http-server/-/ipfs-http-server-0.1.4.tgz",
+      "integrity": "sha512-EyGqwvYpOJHIW6eJ5te2UjjMA073JwabL7oNfCvITFb5ZcRKd76+ox0TDSHlkKUeWN8JP7T/00wYRj+8km2Oyg==",
       "requires": {
         "@hapi/boom": "^9.1.0",
         "@hapi/content": "^5.0.2",
@@ -10262,8 +9642,8 @@
         "dlv": "^1.1.3",
         "err-code": "^2.0.3",
         "hapi-pino": "^8.3.0",
-        "ipfs-core-utils": "^0.5.0",
-        "ipfs-http-gateway": "^0.1.0",
+        "ipfs-core-utils": "^0.5.4",
+        "ipfs-http-gateway": "^0.1.4",
         "ipfs-unixfs": "^2.0.3",
         "ipld-dag-pb": "^0.20.0",
         "it-all": "^1.0.4",
@@ -10292,9 +9672,9 @@
       }
     },
     "ipfs-repo": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npmjs.org/ipfs-repo/-/ipfs-repo-6.0.3.tgz",
-      "integrity": "sha512-98dAkXAbX0JDGg2ML+h3usEZbQzghF/sCfAM/1Knh/VLdC7xcy34MqZQl+LyRTQEz872iUgk/TqqjkX2Sr2j2A==",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/ipfs-repo/-/ipfs-repo-7.0.0.tgz",
+      "integrity": "sha512-crTbJiiRpuTytWWZ5SCLmKn1fDsoK5maVSBDfKCy0MWkbrRA0GN1+cQ2Dx8PtxDIRY+bBsicSIE4gH/aZvsPuw==",
       "requires": {
         "bignumber.js": "^9.0.0",
         "bytes": "^3.1.0",
@@ -10306,8 +9686,8 @@
         "err-code": "^2.0.0",
         "interface-datastore": "^2.0.0",
         "ipfs-repo-migrations": "^5.0.3",
-        "ipfs-utils": "^2.3.1",
-        "ipld-block": "^0.10.0",
+        "ipfs-utils": "^4.0.0",
+        "ipld-block": "^0.11.0",
         "it-map": "^1.0.2",
         "it-pushable": "^1.4.0",
         "just-safe-get": "^2.0.0",
@@ -10319,12 +9699,13 @@
         "uint8arrays": "^1.0.0"
       },
       "dependencies": {
-        "any-signal": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-1.2.0.tgz",
-          "integrity": "sha512-Cl08k4xItix3jvu4cxO/dt2rQ6iUAjO66pTyRMub+WL1VXeAyZydCpD8GqWTPKfdL28U0R0UucmQVsUsBnvCmQ==",
+        "buffer": {
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+          "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
           "requires": {
-            "abort-controller": "^3.0.0"
+            "base64-js": "^1.3.1",
+            "ieee754": "^1.2.1"
           }
         },
         "fs-extra": {
@@ -10338,33 +9719,65 @@
             "universalify": "^1.0.0"
           }
         },
+        "ieee754": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+          "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+        },
         "ipfs-utils": {
-          "version": "2.4.0",
-          "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-2.4.0.tgz",
-          "integrity": "sha512-0RH8rMIEhrXyrbh87V8SQC6E6/5EJs+YionqZGAXnVoTzkpFhxC3x3FlsxwZ9s72yaieGP1Mx1tRYgfCFM/mJg==",
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-4.0.1.tgz",
+          "integrity": "sha512-6mg+S1sbjj+Ff+uoHOhVeC4myfV2tb2sHcdYwfpJ4ZcBo9WfdxSMnWFLiC5bIqByyJuN/g5aWgz3ozjKDzND1Q==",
           "requires": {
+            "@achingbrain/electron-fetch": "^1.7.2",
             "abort-controller": "^3.0.0",
-            "any-signal": "^1.1.0",
-            "buffer": "^5.6.0",
+            "any-signal": "^2.1.0",
+            "buffer": "^6.0.1",
             "err-code": "^2.0.0",
             "fs-extra": "^9.0.1",
             "is-electron": "^2.2.0",
-            "iso-url": "^0.4.7",
-            "it-glob": "0.0.8",
-            "it-to-stream": "^0.1.2",
+            "iso-url": "^1.0.0",
+            "it-glob": "0.0.10",
             "merge-options": "^2.0.0",
             "nanoid": "^3.1.3",
+            "native-abort-controller": "0.0.3",
+            "native-fetch": "^2.0.0",
             "node-fetch": "^2.6.0",
             "stream-to-it": "^0.2.0"
           }
         },
+        "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=="
+        },
+        "iso-url": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.0.0.tgz",
+          "integrity": "sha512-n/MsHgKOoHcFrhsxfbM3aaSdUujoFrrZ3537p3RW80AL7axL36acCseoMwIW4tNOl0n0SnkzNyVh4bREwmHoPQ=="
+        },
         "jsonfile": {
-          "version": "6.0.1",
-          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
-          "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+          "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
           "requires": {
             "graceful-fs": "^4.1.6",
-            "universalify": "^1.0.0"
+            "universalify": "^2.0.0"
+          },
+          "dependencies": {
+            "universalify": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+              "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
+            }
+          }
+        },
+        "sort-keys": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.1.0.tgz",
+          "integrity": "sha512-/sRdxzkkPFUYiCrTr/2t+104nDc9AgDmEpeVYuvOWYQe3Djk1GWO6lVw3Vx2jfh1SsR0eehhd1nvFYlzt5e99w==",
+          "requires": {
+            "is-plain-obj": "^2.0.0"
           }
         },
         "universalify": {
@@ -10394,174 +9807,89 @@
         "protons": "^2.0.0",
         "uint8arrays": "^1.0.0",
         "varint": "^5.0.0"
+      },
+      "dependencies": {
+        "varint": {
+          "version": "5.0.2",
+          "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz",
+          "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow=="
+        }
       }
     },
     "ipfs-unixfs": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-2.0.3.tgz",
-      "integrity": "sha512-WpzG/VTqWBPh1cYW3CXk2naElYO3xU0rJnL3SBHbviZ6ZeHRadxR5k0v3/yxPuygs2AwBhaLqBNlV6uB6OCiQw==",
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-2.0.4.tgz",
+      "integrity": "sha512-b8dL8DZSwv0G3WTy8XnH1+Vzj/UydNI4yK/7/j3Ywyx+3yAQW566bdgaW1zvEFWTT3tBK1h3iJrRNHRs3CnBJA==",
       "requires": {
         "err-code": "^2.0.0",
         "protons": "^2.0.0"
       }
     },
     "ipfs-unixfs-exporter": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/ipfs-unixfs-exporter/-/ipfs-unixfs-exporter-3.0.4.tgz",
-      "integrity": "sha512-e5rA97JeLaaCBOsuG62MJ2UJZQ3xgd8MoJpNotO37VDXRuE/X0/ny6N8AIxikZ8kHkNmCbclW+B5yQHcmqtRvA==",
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/ipfs-unixfs-exporter/-/ipfs-unixfs-exporter-3.0.7.tgz",
+      "integrity": "sha512-ZYpE8SVLcvxDVb9+aKwthf7a4gRFSHqbEJaVrvVOpeXKSG66WTrI0KQR14sIk0v4SYOaUSWrWVXsSjUbONrVHg==",
       "requires": {
         "cids": "^1.0.0",
         "err-code": "^2.0.0",
         "hamt-sharding": "^1.0.0",
-        "ipfs-unixfs": "^2.0.3",
-        "ipfs-utils": "^3.0.0",
+        "ipfs-unixfs": "^2.0.4",
+        "ipfs-utils": "^5.0.0",
         "it-last": "^1.0.1",
         "multihashing-async": "^2.0.0"
-      },
-      "dependencies": {
-        "any-signal": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-1.2.0.tgz",
-          "integrity": "sha512-Cl08k4xItix3jvu4cxO/dt2rQ6iUAjO66pTyRMub+WL1VXeAyZydCpD8GqWTPKfdL28U0R0UucmQVsUsBnvCmQ==",
-          "requires": {
-            "abort-controller": "^3.0.0"
-          }
-        },
-        "fs-extra": {
-          "version": "9.0.1",
-          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
-          "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
-          "requires": {
-            "at-least-node": "^1.0.0",
-            "graceful-fs": "^4.2.0",
-            "jsonfile": "^6.0.1",
-            "universalify": "^1.0.0"
-          }
-        },
-        "ipfs-utils": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-3.0.0.tgz",
-          "integrity": "sha512-qahDc+fghrM57sbySr2TeWjaVR/RH/YEB/hvdAjiTbjESeD87qZawrXwj+19Q2LtGmFGusKNLo5wExeuI5ZfDQ==",
-          "requires": {
-            "abort-controller": "^3.0.0",
-            "any-signal": "^1.1.0",
-            "buffer": "^5.6.0",
-            "err-code": "^2.0.0",
-            "fs-extra": "^9.0.1",
-            "is-electron": "^2.2.0",
-            "iso-url": "^0.4.7",
-            "it-glob": "0.0.8",
-            "merge-options": "^2.0.0",
-            "nanoid": "^3.1.3",
-            "node-fetch": "^2.6.0",
-            "stream-to-it": "^0.2.0"
-          }
-        },
-        "jsonfile": {
-          "version": "6.0.1",
-          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
-          "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
-          "requires": {
-            "graceful-fs": "^4.1.6",
-            "universalify": "^1.0.0"
-          }
-        },
-        "universalify": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
-          "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug=="
-        }
       }
     },
     "ipfs-unixfs-importer": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/ipfs-unixfs-importer/-/ipfs-unixfs-importer-3.0.4.tgz",
-      "integrity": "sha512-2Lz1WSrmmMxBZzk99Uh1o76OZMWzkzgvSpcZcG8AdzpBDdjtsGWWED9FBuU31INT2dZk9Yszm8qxX3a8iYcXJg==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/ipfs-unixfs-importer/-/ipfs-unixfs-importer-5.0.0.tgz",
+      "integrity": "sha512-bvdnCXwwCj72w/FQ7o6XcvrcbCUgXrruK0UZOfhl/mf44Nv0DWyn1Y4hQF/u63rJvYLQdAMlqniAAtFQpHQhcg==",
       "requires": {
         "bl": "^4.0.0",
         "err-code": "^2.0.0",
         "hamt-sharding": "^1.0.0",
-        "ipfs-unixfs": "^2.0.3",
-        "ipfs-utils": "^3.0.0",
+        "ipfs-unixfs": "^2.0.4",
+        "ipfs-utils": "^5.0.0",
         "ipld-dag-pb": "^0.20.0",
         "it-all": "^1.0.1",
         "it-batch": "^1.0.3",
         "it-first": "^1.0.1",
         "it-parallel-batch": "^1.0.3",
-        "merge-options": "^2.0.0",
+        "merge-options": "^3.0.3",
         "multihashing-async": "^2.0.0",
         "rabin-wasm": "^0.1.1",
         "uint8arrays": "^1.1.0"
       },
       "dependencies": {
-        "any-signal": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-1.2.0.tgz",
-          "integrity": "sha512-Cl08k4xItix3jvu4cxO/dt2rQ6iUAjO66pTyRMub+WL1VXeAyZydCpD8GqWTPKfdL28U0R0UucmQVsUsBnvCmQ==",
-          "requires": {
-            "abort-controller": "^3.0.0"
-          }
-        },
-        "fs-extra": {
-          "version": "9.0.1",
-          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
-          "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
-          "requires": {
-            "at-least-node": "^1.0.0",
-            "graceful-fs": "^4.2.0",
-            "jsonfile": "^6.0.1",
-            "universalify": "^1.0.0"
-          }
-        },
-        "ipfs-utils": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-3.0.0.tgz",
-          "integrity": "sha512-qahDc+fghrM57sbySr2TeWjaVR/RH/YEB/hvdAjiTbjESeD87qZawrXwj+19Q2LtGmFGusKNLo5wExeuI5ZfDQ==",
-          "requires": {
-            "abort-controller": "^3.0.0",
-            "any-signal": "^1.1.0",
-            "buffer": "^5.6.0",
-            "err-code": "^2.0.0",
-            "fs-extra": "^9.0.1",
-            "is-electron": "^2.2.0",
-            "iso-url": "^0.4.7",
-            "it-glob": "0.0.8",
-            "merge-options": "^2.0.0",
-            "nanoid": "^3.1.3",
-            "node-fetch": "^2.6.0",
-            "stream-to-it": "^0.2.0"
-          }
+        "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=="
         },
-        "jsonfile": {
-          "version": "6.0.1",
-          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
-          "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
+        "merge-options": {
+          "version": "3.0.4",
+          "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz",
+          "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==",
           "requires": {
-            "graceful-fs": "^4.1.6",
-            "universalify": "^1.0.0"
+            "is-plain-obj": "^2.1.0"
           }
-        },
-        "universalify": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
-          "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug=="
         }
       }
     },
     "ipfs-utils": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-4.0.0.tgz",
-      "integrity": "sha512-HVeDUm4K4fYb44O1y2l4sNvDuzIB3+K6ZqYj45Bv3oqGmpBkm+ELq2Sssghpwk5b4ppsfOzSUoupMFdlg+Fk7w==",
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-5.0.1.tgz",
+      "integrity": "sha512-28KZPgO4Uf5duT2ORLAYfboUp98iUshDD7yRAfbNxNAR8Dtidfn6o20rZfoXnkri2zKBVIPlJkuCPmPJB+6erg==",
       "requires": {
-        "@achingbrain/electron-fetch": "^1.7.2",
         "abort-controller": "^3.0.0",
         "any-signal": "^2.1.0",
-        "buffer": "^5.6.0",
+        "buffer": "^6.0.1",
+        "electron-fetch": "^1.7.2",
         "err-code": "^2.0.0",
         "fs-extra": "^9.0.1",
         "is-electron": "^2.2.0",
-        "iso-url": "^0.4.7",
-        "it-glob": "0.0.8",
+        "iso-url": "^1.0.0",
+        "it-glob": "0.0.10",
+        "it-to-stream": "^0.1.2",
         "merge-options": "^2.0.0",
         "nanoid": "^3.1.3",
         "native-abort-controller": "0.0.3",
@@ -10570,6 +9898,15 @@
         "stream-to-it": "^0.2.0"
       },
       "dependencies": {
+        "buffer": {
+          "version": "6.0.3",
+          "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+          "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+          "requires": {
+            "base64-js": "^1.3.1",
+            "ieee754": "^1.2.1"
+          }
+        },
         "fs-extra": {
           "version": "9.0.1",
           "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
@@ -10581,13 +9918,30 @@
             "universalify": "^1.0.0"
           }
         },
+        "ieee754": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+          "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+        },
+        "iso-url": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/iso-url/-/iso-url-1.0.0.tgz",
+          "integrity": "sha512-n/MsHgKOoHcFrhsxfbM3aaSdUujoFrrZ3537p3RW80AL7axL36acCseoMwIW4tNOl0n0SnkzNyVh4bREwmHoPQ=="
+        },
         "jsonfile": {
-          "version": "6.0.1",
-          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
-          "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+          "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
           "requires": {
             "graceful-fs": "^4.1.6",
-            "universalify": "^1.0.0"
+            "universalify": "^2.0.0"
+          },
+          "dependencies": {
+            "universalify": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+              "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
+            }
           }
         },
         "universalify": {
@@ -10598,12 +9952,12 @@
       }
     },
     "ipld": {
-      "version": "0.27.3",
-      "resolved": "https://registry.npmjs.org/ipld/-/ipld-0.27.3.tgz",
-      "integrity": "sha512-t+8AHfXTIq3clj9cIxYUqPECBpmtiyfbB9HkeP87sc4ue1V8PmmLfMwRjlrJx7JjWoO1swYGvC3SLSIE/5LiNA==",
+      "version": "0.28.0",
+      "resolved": "https://registry.npmjs.org/ipld/-/ipld-0.28.0.tgz",
+      "integrity": "sha512-lERRFJb17Phi3x06sSirFgCkmSw8lNqOwn2CiBexu0Amo6ICTXULuSZcDeM1AN4+fSzebQgEc8bBIV4zW7dv0A==",
       "requires": {
         "cids": "^1.0.0",
-        "ipld-block": "^0.10.0",
+        "ipld-block": "^0.11.0",
         "ipld-dag-cbor": "^0.17.0",
         "ipld-dag-pb": "^0.20.0",
         "ipld-raw": "^6.0.0",
@@ -10612,27 +9966,12 @@
         "typical": "^6.0.0"
       }
     },
-    "ipld-bitcoin": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/ipld-bitcoin/-/ipld-bitcoin-0.4.0.tgz",
-      "integrity": "sha512-SRcNRMvdeIKlCCMymqas5ZX9tVjAZ/cid2LPd0vWrLtwc1r4liWvHAxbaU/fJa8Xo6neYWuS/XIqaE/yzMAhRw==",
-      "requires": {
-        "bitcoinjs-lib": "^5.0.0",
-        "buffer": "^5.6.0",
-        "cids": "^1.0.0",
-        "multicodec": "^2.0.0",
-        "multihashes": "^3.0.0",
-        "multihashing-async": "^2.0.0",
-        "uint8arrays": "^1.0.0"
-      }
-    },
     "ipld-block": {
-      "version": "0.10.1",
-      "resolved": "https://registry.npmjs.org/ipld-block/-/ipld-block-0.10.1.tgz",
-      "integrity": "sha512-lPMfW9tA2hVZw9hdO/YSppTxFmA0+5zxcefBOlCTOn+12RLyy+pdepKMbQw8u0KESFu3pYVmabNRWuFGcgHLLw==",
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/ipld-block/-/ipld-block-0.11.0.tgz",
+      "integrity": "sha512-Kk56OOPmlWAjXfBJXvx2jX5RA6R9qUrcc2JXwF7Y4IL9mlmxcxTNkgcsJYR78DbyMllQbi7yreghjGjtCTYKaw==",
       "requires": {
-        "cids": "^1.0.0",
-        "class-is": "^1.1.0"
+        "cids": "^1.0.0"
       }
     },
     "ipld-dag-cbor": {
@@ -10664,37 +10003,6 @@
         "uint8arrays": "^1.0.0"
       }
     },
-    "ipld-ethereum": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ipld-ethereum/-/ipld-ethereum-5.0.1.tgz",
-      "integrity": "sha512-M0n4z4y0LwsBKIvQev8xHOfxwjwR+jl6ot8z2ujScE6MX+inhojw2/vjvoWIk4N7oleNf3sg4ZxBzdttulvPTA==",
-      "requires": {
-        "buffer": "^5.6.0",
-        "cids": "^1.0.0",
-        "ethereumjs-account": "^3.0.0",
-        "ethereumjs-block": "^2.2.1",
-        "ethereumjs-tx": "^2.1.1",
-        "merkle-patricia-tree": "^3.0.0",
-        "multicodec": "^2.0.0",
-        "multihashes": "^3.0.1",
-        "multihashing-async": "^2.0.0",
-        "rlp": "^2.2.4"
-      }
-    },
-    "ipld-git": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/ipld-git/-/ipld-git-0.6.1.tgz",
-      "integrity": "sha512-HjKjmMX8vIEMk+isMBaU0/g+xi6LZOQHQ7oFaQ15wUUYLWe5rwkpdr8/3GqHEt3hKdEeWDCX2FqrmQsT9lrQFA==",
-      "requires": {
-        "buffer": "^5.6.0",
-        "cids": "^1.0.0",
-        "multicodec": "^2.0.0",
-        "multihashing-async": "^2.0.1",
-        "smart-buffer": "^4.1.0",
-        "strftime": "^0.10.0",
-        "uint8arrays": "^1.0.0"
-      }
-    },
     "ipld-raw": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/ipld-raw/-/ipld-raw-6.0.0.tgz",
@@ -10705,19 +10013,6 @@
         "multihashing-async": "^2.0.0"
       }
     },
-    "ipld-zcash": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/ipld-zcash/-/ipld-zcash-0.5.0.tgz",
-      "integrity": "sha512-nBeyZ/g/hvP3FQl9IODe6mW+UoO10hQMb3k9elcAuwfromljE/rozoDMiMYagZAm03dkSHsk/YSeEWdWqRKaPQ==",
-      "requires": {
-        "buffer": "^5.6.0",
-        "cids": "^1.0.0",
-        "multicodec": "^2.0.0",
-        "multihashes": "^3.0.1",
-        "multihashing-async": "^2.0.0",
-        "zcash-block": "^2.0.0"
-      }
-    },
     "ipns": {
       "version": "0.8.0",
       "resolved": "https://registry.npmjs.org/ipns/-/ipns-0.8.0.tgz",
@@ -10770,7 +10065,8 @@
     "is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
     },
     "is-binary-path": {
       "version": "2.1.0",
@@ -10901,11 +10197,6 @@
       "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
       "dev": true
     },
-    "is-finite": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
-      "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w=="
-    },
     "is-fn": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz",
@@ -10925,11 +10216,6 @@
         "is-extglob": "^2.1.1"
       }
     },
-    "is-hex-prefixed": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz",
-      "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ="
-    },
     "is-installed-globally": {
       "version": "0.3.2",
       "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz",
@@ -10937,6 +10223,13 @@
       "requires": {
         "global-dirs": "^2.0.1",
         "is-path-inside": "^3.0.1"
+      },
+      "dependencies": {
+        "is-path-inside": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
+          "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg=="
+        }
       }
     },
     "is-ip": {
@@ -10945,6 +10238,13 @@
       "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==",
       "requires": {
         "ip-regex": "^4.0.0"
+      },
+      "dependencies": {
+        "ip-regex": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.2.0.tgz",
+          "integrity": "sha512-n5cDDeTWWRwK1EBoWwRti+8nP4NbytBBY0pldmnIkq6Z55KNFmWofh4rl9dPZpj+U/nVq7gweR3ylrvMt4YZ5A=="
+        }
       }
     },
     "is-ipfs": {
@@ -11015,28 +10315,22 @@
       "dev": true,
       "requires": {
         "is-path-inside": "^2.1.0"
-      },
-      "dependencies": {
-        "is-path-inside": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
-          "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
-          "dev": true,
-          "requires": {
-            "path-is-inside": "^1.0.2"
-          }
-        }
       }
     },
     "is-path-inside": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz",
-      "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg=="
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz",
+      "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==",
+      "dev": true,
+      "requires": {
+        "path-is-inside": "^1.0.2"
+      }
     },
     "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=="
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+      "dev": true
     },
     "is-plain-object": {
       "version": "2.0.4",
@@ -11091,11 +10385,6 @@
       "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
       "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
     },
-    "is-utf8": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
-      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI="
-    },
     "is-windows": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
@@ -11123,11 +10412,6 @@
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
       "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
     },
-    "ismobilejs": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/ismobilejs/-/ismobilejs-1.1.1.tgz",
-      "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw=="
-    },
     "iso-constants": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/iso-constants/-/iso-constants-0.1.2.tgz",
@@ -11168,7 +10452,8 @@
     "isstream": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
-      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+      "dev": true
     },
     "it-all": {
       "version": "1.0.4",
@@ -11208,23 +10493,45 @@
       "integrity": "sha512-L5ZB5k3Ol5ouAzLHo6fOCtByOy2lNjteNJpZLkE+VgmRt0MbC1ibmBW1AbOt6WzDx/QXFG5C8EEvY2nTXHg+Hw=="
     },
     "it-glob": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.8.tgz",
-      "integrity": "sha512-PmIAgb64aJPM6wwT1UTlNDAJnNgdGrvr0vRr3AYCngcUuq1KaAovuz0dQAmUkaXudDG3EQzc7OttuLW9DaL3YQ==",
+      "version": "0.0.10",
+      "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.10.tgz",
+      "integrity": "sha512-p1PR15djgPV7pxdLOW9j4WcJdla8+91rJdUU2hU2Jm68vkxpIEXK55VHBeH8Lvqh2vqLtM83t8q4BuJxue6niA==",
       "requires": {
-        "fs-extra": "^8.1.0",
+        "fs-extra": "^9.0.1",
         "minimatch": "^3.0.4"
       },
       "dependencies": {
         "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==",
+          "version": "9.0.1",
+          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
+          "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
           "requires": {
+            "at-least-node": "^1.0.0",
             "graceful-fs": "^4.2.0",
-            "jsonfile": "^4.0.0",
-            "universalify": "^0.1.0"
+            "jsonfile": "^6.0.1",
+            "universalify": "^1.0.0"
           }
+        },
+        "jsonfile": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+          "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+          "requires": {
+            "graceful-fs": "^4.1.6",
+            "universalify": "^2.0.0"
+          },
+          "dependencies": {
+            "universalify": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+              "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
+            }
+          }
+        },
+        "universalify": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
+          "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug=="
         }
       }
     },
@@ -11265,6 +10572,13 @@
         "bl": "^4.0.2",
         "buffer": "^5.5.0",
         "varint": "^5.0.0"
+      },
+      "dependencies": {
+        "varint": {
+          "version": "5.0.2",
+          "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz",
+          "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow=="
+        }
       }
     },
     "it-map": {
@@ -11309,16 +10623,16 @@
       },
       "dependencies": {
         "is-buffer": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
-          "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=="
+          "version": "2.0.5",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+          "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
         }
       }
     },
     "it-peekable": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-0.0.1.tgz",
-      "integrity": "sha512-fd0JzbNldseeq+FFWthbqYB991UpKNyjPG6LqFhIOmJviCxSompMyoopKIXvLPLY+fBhhv2CT5PT31O/lEnTHw=="
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-1.0.1.tgz",
+      "integrity": "sha512-civpIsgG1N+nYXNhm4Qzb9S89QZOfn4M6wVpH9IIilkJ9UFcDElWQuO1qmjXkdm3M5yg5fk+blW0aSCmu4SGlA=="
     },
     "it-pipe": {
       "version": "1.1.0",
@@ -11363,14 +10677,6 @@
         "p-defer": "^3.0.0"
       }
     },
-    "it-to-buffer": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/it-to-buffer/-/it-to-buffer-1.0.4.tgz",
-      "integrity": "sha512-wycpGeAdQ8WH8eSBkMHN/HMNiQ0Y88XEXo6s6LGJbQZjf9K7ppVzUfCXn7OnxFfUPN0HTWZr+uhthwtrwMTTfw==",
-      "requires": {
-        "buffer": "^5.5.0"
-      }
-    },
     "it-to-stream": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/it-to-stream/-/it-to-stream-0.1.2.tgz",
@@ -11408,9 +10714,9 @@
       },
       "dependencies": {
         "ws": {
-          "version": "7.3.1",
-          "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz",
-          "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA=="
+          "version": "7.4.1",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.1.tgz",
+          "integrity": "sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ=="
         }
       }
     },
@@ -11493,18 +10799,18 @@
       "integrity": "sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ=="
     },
     "js-message": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz",
-      "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=",
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz",
+      "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==",
       "dev": true
     },
     "js-queue": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.0.tgz",
-      "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz",
+      "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==",
       "dev": true,
       "requires": {
-        "easy-stack": "^1.0.0"
+        "easy-stack": "^1.0.1"
       }
     },
     "js-sha3": {
@@ -11531,7 +10837,8 @@
     "jsbn": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
-      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+      "dev": true
     },
     "jsesc": {
       "version": "2.5.2",
@@ -11559,7 +10866,8 @@
     "json-schema": {
       "version": "0.2.3",
       "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
-      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+      "dev": true
     },
     "json-schema-traverse": {
       "version": "0.4.1",
@@ -11575,7 +10883,8 @@
     "json-stringify-safe": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
-      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+      "dev": true
     },
     "json-text-sequence": {
       "version": "0.1.1",
@@ -11612,6 +10921,7 @@
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
       "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+      "dev": true,
       "requires": {
         "graceful-fs": "^4.1.6"
       }
@@ -11620,6 +10930,7 @@
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
       "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "dev": true,
       "requires": {
         "assert-plus": "1.0.0",
         "extsprintf": "1.3.0",
@@ -11655,15 +10966,6 @@
         "randombytes": "^2.0.3"
       }
     },
-    "keccak": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz",
-      "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==",
-      "requires": {
-        "node-addon-api": "^2.0.0",
-        "node-gyp-build": "^4.2.0"
-      }
-    },
     "keypair": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.1.tgz",
@@ -11689,14 +10991,6 @@
       "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
       "dev": true
     },
-    "klaw": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
-      "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
-      "requires": {
-        "graceful-fs": "^4.1.9"
-      }
-    },
     "latest-version": {
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
@@ -11802,94 +11096,6 @@
         }
       }
     },
-    "level-mem": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-3.0.1.tgz",
-      "integrity": "sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg==",
-      "requires": {
-        "level-packager": "~4.0.0",
-        "memdown": "~3.0.0"
-      },
-      "dependencies": {
-        "abstract-leveldown": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz",
-          "integrity": "sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==",
-          "requires": {
-            "xtend": "~4.0.0"
-          }
-        },
-        "deferred-leveldown": {
-          "version": "4.0.2",
-          "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz",
-          "integrity": "sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww==",
-          "requires": {
-            "abstract-leveldown": "~5.0.0",
-            "inherits": "^2.0.3"
-          }
-        },
-        "encoding-down": {
-          "version": "5.0.4",
-          "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-5.0.4.tgz",
-          "integrity": "sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw==",
-          "requires": {
-            "abstract-leveldown": "^5.0.0",
-            "inherits": "^2.0.3",
-            "level-codec": "^9.0.0",
-            "level-errors": "^2.0.0",
-            "xtend": "^4.0.1"
-          }
-        },
-        "level-iterator-stream": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz",
-          "integrity": "sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g==",
-          "requires": {
-            "inherits": "^2.0.1",
-            "readable-stream": "^2.3.6",
-            "xtend": "^4.0.0"
-          }
-        },
-        "level-packager": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-4.0.1.tgz",
-          "integrity": "sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q==",
-          "requires": {
-            "encoding-down": "~5.0.0",
-            "levelup": "^3.0.0"
-          }
-        },
-        "levelup": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/levelup/-/levelup-3.1.1.tgz",
-          "integrity": "sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg==",
-          "requires": {
-            "deferred-leveldown": "~4.0.0",
-            "level-errors": "~2.0.0",
-            "level-iterator-stream": "~3.0.0",
-            "xtend": "~4.0.0"
-          }
-        },
-        "memdown": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/memdown/-/memdown-3.0.0.tgz",
-          "integrity": "sha512-tbV02LfZMWLcHcq4tw++NuqMO+FZX8tNJEiD2aNRm48ZZusVg5N8NART+dmBkepJVye986oixErf7jfXboMGMA==",
-          "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",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
-        }
-      }
-    },
     "level-packager": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz",
@@ -11915,46 +11121,6 @@
         "end-stream": "~0.1.0"
       }
     },
-    "level-ws": {
-      "version": "0.0.0",
-      "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz",
-      "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=",
-      "requires": {
-        "readable-stream": "~1.0.15",
-        "xtend": "~2.1.1"
-      },
-      "dependencies": {
-        "object-keys": {
-          "version": "0.4.0",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
-          "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY="
-        },
-        "readable-stream": {
-          "version": "1.0.34",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
-          "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.1",
-            "isarray": "0.0.1",
-            "string_decoder": "~0.10.x"
-          }
-        },
-        "string_decoder": {
-          "version": "0.10.31",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
-        },
-        "xtend": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
-          "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
-          "requires": {
-            "object-keys": "~0.4.0"
-          }
-        }
-      }
-    },
     "leveldown": {
       "version": "5.6.0",
       "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz",
@@ -12012,9 +11178,9 @@
       }
     },
     "libp2p": {
-      "version": "0.29.2",
-      "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.29.2.tgz",
-      "integrity": "sha512-figd1NEBHNMpRCztxH4ZJl4flu+lMiFPMbNTkkoDES6FSZ0+wI7C72z579jh63eN124rsxpFRZaPYmpbKXi9CQ==",
+      "version": "0.29.4",
+      "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.29.4.tgz",
+      "integrity": "sha512-RACD3rvhgBTcLDtILwN8lE2z3GV5OCR1Se/wQ9UPYArSImsoikKjGQMvW0vZl9W3adUqmJOUs7CJWTUvdTAOpw==",
       "requires": {
         "abort-controller": "^3.0.0",
         "aggregate-error": "^3.0.1",
@@ -12039,7 +11205,7 @@
         "mafmt": "^8.0.0",
         "merge-options": "^2.0.0",
         "moving-average": "^1.0.0",
-        "multiaddr": "^8.0.0",
+        "multiaddr": "^8.1.0",
         "multicodec": "^2.0.0",
         "multistream-select": "^1.0.0",
         "mutable-proxy": "^1.0.0",
@@ -12096,13 +11262,54 @@
             "stream-to-it": "^0.2.0"
           }
         },
+        "it-glob": {
+          "version": "0.0.8",
+          "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-0.0.8.tgz",
+          "integrity": "sha512-PmIAgb64aJPM6wwT1UTlNDAJnNgdGrvr0vRr3AYCngcUuq1KaAovuz0dQAmUkaXudDG3EQzc7OttuLW9DaL3YQ==",
+          "requires": {
+            "fs-extra": "^8.1.0",
+            "minimatch": "^3.0.4"
+          },
+          "dependencies": {
+            "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==",
+              "requires": {
+                "graceful-fs": "^4.2.0",
+                "jsonfile": "^4.0.0",
+                "universalify": "^0.1.0"
+              }
+            },
+            "jsonfile": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+              "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+              "requires": {
+                "graceful-fs": "^4.1.6"
+              }
+            },
+            "universalify": {
+              "version": "0.1.2",
+              "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+              "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+            }
+          }
+        },
         "jsonfile": {
-          "version": "6.0.1",
-          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
-          "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+          "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
           "requires": {
             "graceful-fs": "^4.1.6",
-            "universalify": "^1.0.0"
+            "universalify": "^2.0.0"
+          },
+          "dependencies": {
+            "universalify": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+              "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
+            }
           }
         },
         "libp2p-interfaces": {
@@ -12139,18 +11346,20 @@
             "uint8arrays": "^1.1.0"
           }
         },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "requires": {
-            "p-try": "^2.0.0"
-          }
+        "node-forge": {
+          "version": "0.9.2",
+          "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.2.tgz",
+          "integrity": "sha512-naKSScof4Wn+aoHU6HBsifh92Zeicm1GDQKd1vp3Y/kOi8ub0DozCa9KpvYNCXslFHYRmLNiqRopGdTGwNLpNw=="
         },
         "universalify": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
           "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug=="
+        },
+        "varint": {
+          "version": "5.0.2",
+          "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz",
+          "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow=="
         }
       }
     },
@@ -12183,12 +11392,19 @@
         "secp256k1": "^4.0.0",
         "uint8arrays": "^1.1.0",
         "ursa-optional": "^0.10.1"
+      },
+      "dependencies": {
+        "node-forge": {
+          "version": "0.9.2",
+          "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.2.tgz",
+          "integrity": "sha512-naKSScof4Wn+aoHU6HBsifh92Zeicm1GDQKd1vp3Y/kOi8ub0DozCa9KpvYNCXslFHYRmLNiqRopGdTGwNLpNw=="
+        }
       }
     },
     "libp2p-delegated-content-routing": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/libp2p-delegated-content-routing/-/libp2p-delegated-content-routing-0.8.0.tgz",
-      "integrity": "sha512-E5Wc5RZnohe9EEa5DMuhJgrTmWYDBuLihZCVpBeiFEzzeqJUDZwbu6jwyMEf7e1AzYlmWIGz6VvCkn0RnYR7UA==",
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/libp2p-delegated-content-routing/-/libp2p-delegated-content-routing-0.8.2.tgz",
+      "integrity": "sha512-3xfrNaX31VB+sj7/u5ZGjhSzbm7l5jCCzlYktEpQyET7JMI8d1ef8FAP3DiWEhbiSfivMMqlfCzfPEMsLxZG7g==",
       "requires": {
         "debug": "^4.1.1",
         "it-all": "^1.0.0",
@@ -12198,9 +11414,9 @@
       }
     },
     "libp2p-delegated-peer-routing": {
-      "version": "0.8.0",
-      "resolved": "https://registry.npmjs.org/libp2p-delegated-peer-routing/-/libp2p-delegated-peer-routing-0.8.0.tgz",
-      "integrity": "sha512-kqbC+P2c+XaQWMtQmQiRV0eQUWVW/T1P6ckbuKf3Tw3KZBkOmsLeAJ5ByG2/vFVzUUAuZiW46T1y2qOoq84Wsg==",
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/libp2p-delegated-peer-routing/-/libp2p-delegated-peer-routing-0.8.2.tgz",
+      "integrity": "sha512-q49zSTE7wpagt3FDY6S2e2Rr59kPoTMJAwlPeenZ1ajJLbKXRP26RfraK8RaUUw7mHw0BPo47VQcH7ieDkSO+A==",
       "requires": {
         "cids": "^1.0.0",
         "debug": "^4.1.1",
@@ -12253,21 +11469,13 @@
             "streaming-iterables": "^5.0.2",
             "uint8arrays": "^1.1.0"
           }
-        },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "requires": {
-            "p-try": "^2.0.0"
-          }
         }
       }
     },
     "libp2p-gossipsub": {
-      "version": "0.6.4",
-      "resolved": "https://registry.npmjs.org/libp2p-gossipsub/-/libp2p-gossipsub-0.6.4.tgz",
-      "integrity": "sha512-zCS2Ze0ZgxcpL0jkkfV6SJM8sV3SfeOjfMH02G7OrVQYksFKXH//F3ZbksWjUeoAggdpP9+a66IWPBkj16CfCA==",
+      "version": "0.6.6",
+      "resolved": "https://registry.npmjs.org/libp2p-gossipsub/-/libp2p-gossipsub-0.6.6.tgz",
+      "integrity": "sha512-oW/d7Y099RmxJ8KKWSlzuh3giuKb94d/VpKCxTqUJlsuA3SHjiOiKCO3oadrK5pkYgFMBXxYEnbZ84tft3MtRQ==",
       "requires": {
         "@types/debug": "^4.1.5",
         "debug": "^4.1.1",
@@ -12314,59 +11522,48 @@
             "streaming-iterables": "^5.0.2",
             "uint8arrays": "^1.1.0"
           }
-        },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "requires": {
-            "p-try": "^2.0.0"
-          }
         }
       }
     },
     "libp2p-interfaces": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-0.4.1.tgz",
-      "integrity": "sha512-LvoK21WtoRxmdLFWGGKMomK4SLXSqcyntoCQ254IOao/EOjis0Za09THENjK+pL1Lk84D1tXLwwK+8pT19EWDw==",
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-0.7.2.tgz",
+      "integrity": "sha512-uI4vPiwdi9pKScLoAvwMqXiEjUtUACavtqZEvdm36T1PcmzsfDbGDKGCkGoDENQ/kztsggfb/9PoEAiNw3CQxQ==",
       "requires": {
         "abort-controller": "^3.0.0",
         "abortable-iterator": "^3.0.0",
-        "buffer": "^5.6.0",
         "chai": "^4.2.0",
         "chai-checkmark": "^1.0.1",
         "class-is": "^1.1.0",
+        "debug": "^4.1.1",
         "delay": "^4.3.0",
         "detect-node": "^2.0.4",
         "dirty-chai": "^2.0.1",
         "err-code": "^2.0.0",
         "it-goodbye": "^2.0.1",
+        "it-length-prefixed": "^3.1.0",
         "it-pair": "^1.0.0",
         "it-pipe": "^1.1.0",
+        "it-pushable": "^1.4.0",
+        "libp2p-crypto": "^0.18.0",
         "libp2p-tcp": "^0.15.0",
         "multiaddr": "^8.0.0",
+        "multibase": "^3.0.0",
+        "multihashes": "^3.0.1",
         "p-defer": "^3.0.0",
         "p-limit": "^2.3.0",
         "p-wait-for": "^3.1.0",
         "peer-id": "^0.14.0",
-        "sinon": "^9.0.2",
-        "streaming-iterables": "^5.0.2"
-      },
-      "dependencies": {
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        }
+        "protons": "^2.0.0",
+        "sinon": "^9.0.2",
+        "streaming-iterables": "^5.0.2",
+        "uint8arrays": "^1.1.0"
       }
     },
     "libp2p-kad-dht": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/libp2p-kad-dht/-/libp2p-kad-dht-0.20.1.tgz",
-      "integrity": "sha512-khffe6L6O6oU53LO8BrI3bULH4i6FLibvFEyV+7FAPXnFYhTKHa9TsIifkL/MEAfLI0hI9QN4NwMf0DpOLMvDA==",
+      "version": "0.20.4",
+      "resolved": "https://registry.npmjs.org/libp2p-kad-dht/-/libp2p-kad-dht-0.20.4.tgz",
+      "integrity": "sha512-7v4+3bdcoGUyR/8Y5G/Ok9UyhuqghpXFZq5VpW3oph5WtR348snTaBTPkI/8xkQmBxvLIAMxuomp7cMrQaTUyw==",
       "requires": {
         "abort-controller": "^3.0.0",
         "async": "^2.6.2",
@@ -12397,6 +11594,49 @@
         "uint8arrays": "^1.1.0",
         "varint": "^5.0.0",
         "xor-distance": "^2.0.0"
+      },
+      "dependencies": {
+        "libp2p-interfaces": {
+          "version": "0.4.1",
+          "resolved": "https://registry.npmjs.org/libp2p-interfaces/-/libp2p-interfaces-0.4.1.tgz",
+          "integrity": "sha512-LvoK21WtoRxmdLFWGGKMomK4SLXSqcyntoCQ254IOao/EOjis0Za09THENjK+pL1Lk84D1tXLwwK+8pT19EWDw==",
+          "requires": {
+            "abort-controller": "^3.0.0",
+            "abortable-iterator": "^3.0.0",
+            "buffer": "^5.6.0",
+            "chai": "^4.2.0",
+            "chai-checkmark": "^1.0.1",
+            "class-is": "^1.1.0",
+            "delay": "^4.3.0",
+            "detect-node": "^2.0.4",
+            "dirty-chai": "^2.0.1",
+            "err-code": "^2.0.0",
+            "it-goodbye": "^2.0.1",
+            "it-pair": "^1.0.0",
+            "it-pipe": "^1.1.0",
+            "libp2p-tcp": "^0.15.0",
+            "multiaddr": "^8.0.0",
+            "p-defer": "^3.0.0",
+            "p-limit": "^2.3.0",
+            "p-wait-for": "^3.1.0",
+            "peer-id": "^0.14.0",
+            "sinon": "^9.0.2",
+            "streaming-iterables": "^5.0.2"
+          }
+        },
+        "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==",
+          "requires": {
+            "aggregate-error": "^3.0.0"
+          }
+        },
+        "varint": {
+          "version": "5.0.2",
+          "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz",
+          "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow=="
+        }
       }
     },
     "libp2p-mdns": {
@@ -12408,6 +11648,26 @@
         "multiaddr": "^8.0.0",
         "multicast-dns": "^7.2.0",
         "peer-id": "^0.14.0"
+      },
+      "dependencies": {
+        "dns-packet": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-4.2.0.tgz",
+          "integrity": "sha512-bn1AKpfkFbm0MIioOMHZ5qJzl2uypdBwI4nYNsqvhjsegBhcKJUlCrMPWLx6JEezRjxZmxhtIz/FkBEur2l8Cw==",
+          "requires": {
+            "ip": "^1.1.5",
+            "safe-buffer": "^5.1.1"
+          }
+        },
+        "multicast-dns": {
+          "version": "7.2.2",
+          "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.2.tgz",
+          "integrity": "sha512-XqSMeO8EWV/nOXOpPV8ztIpNweVfE1dSpz6SQvDPp71HD74lMXjt4m/mWB1YBMG0kHtOodxRWc5WOb/UNN1A5g==",
+          "requires": {
+            "dns-packet": "^4.0.0",
+            "thunky": "^1.0.2"
+          }
+        }
       }
     },
     "libp2p-mplex": {
@@ -12423,6 +11683,13 @@
         "it-pipe": "^1.0.1",
         "it-pushable": "^1.3.1",
         "varint": "^5.0.0"
+      },
+      "dependencies": {
+        "varint": {
+          "version": "5.0.2",
+          "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz",
+          "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow=="
+        }
       }
     },
     "libp2p-noise": {
@@ -12472,9 +11739,9 @@
       }
     },
     "libp2p-utils": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npmjs.org/libp2p-utils/-/libp2p-utils-0.2.1.tgz",
-      "integrity": "sha512-oaPUhYZrg3iW8+V7/PJsMHbLsFiOaNKM+D3WzNkne8mP7CCM4+0B4TIid5nEvrUT8Z432Nb64nFaqie/Wif5GA==",
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/libp2p-utils/-/libp2p-utils-0.2.3.tgz",
+      "integrity": "sha512-9BoMCgvJF7LJ+JVMaHtqfCqhZN4i/sx0DrY6lf9U0Rq9uUgQ9qTai2O9LXcfr1LOS3OMMeRLsKk25MMgsf7W3w==",
       "requires": {
         "abortable-iterator": "^3.0.0",
         "debug": "^4.2.0",
@@ -12482,13 +11749,13 @@
         "ip-address": "^6.1.0",
         "is-loopback-addr": "^1.0.0",
         "multiaddr": "^8.0.0",
-        "private-ip": "^1.0.5"
+        "private-ip": "^2.1.1"
       },
       "dependencies": {
         "debug": {
-          "version": "4.2.0",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
-          "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+          "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
           "requires": {
             "ms": "2.1.2"
           }
@@ -12526,84 +11793,45 @@
       }
     },
     "libp2p-webrtc-star": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/libp2p-webrtc-star/-/libp2p-webrtc-star-0.20.1.tgz",
-      "integrity": "sha512-VQNL24A3rN1/9U0fTO8MqUx3+6d99iz/HvPI3p+IzHb6MgBe7er+rgbvRep7uheZ2894IxiJI848Vs0ZNypn2w==",
+      "version": "0.20.5",
+      "resolved": "https://registry.npmjs.org/libp2p-webrtc-star/-/libp2p-webrtc-star-0.20.5.tgz",
+      "integrity": "sha512-Tny1+q0EY192WgrkNCV7360ifI3RXjMoao91qwLhNwx7ArsqVMzrZvBnK3MTMmYQaGE1W0n/CLlw/Nn344iv2Q==",
       "requires": {
         "@hapi/hapi": "^20.0.0",
-        "@hapi/inert": "^6.0.2",
+        "@hapi/inert": "^6.0.3",
         "abortable-iterator": "^3.0.0",
         "class-is": "^1.1.0",
-        "debug": "^4.1.1",
-        "err-code": "^2.0.0",
-        "ipfs-utils": "^3.0.0",
-        "it-pipe": "^1.0.1",
-        "libp2p-utils": "^0.2.0",
+        "debug": "^4.2.0",
+        "err-code": "^2.0.3",
+        "ipfs-utils": "^5.0.0",
+        "it-pipe": "^1.1.0",
+        "libp2p-utils": "^0.2.1",
         "libp2p-webrtc-peer": "^10.0.1",
         "mafmt": "^8.0.0",
         "menoetius": "0.0.2",
-        "minimist": "^1.2.0",
+        "minimist": "^1.2.5",
         "multiaddr": "^8.0.0",
         "p-defer": "^3.0.0",
-        "peer-id": "^0.14.0",
+        "peer-id": "^0.14.2",
         "prom-client": "^12.0.0",
         "socket.io": "^2.3.0",
         "socket.io-client": "^2.3.0",
         "stream-to-it": "^0.2.2",
-        "streaming-iterables": "^5.0.2"
+        "streaming-iterables": "^5.0.3"
       },
       "dependencies": {
-        "any-signal": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-1.2.0.tgz",
-          "integrity": "sha512-Cl08k4xItix3jvu4cxO/dt2rQ6iUAjO66pTyRMub+WL1VXeAyZydCpD8GqWTPKfdL28U0R0UucmQVsUsBnvCmQ==",
-          "requires": {
-            "abort-controller": "^3.0.0"
-          }
-        },
-        "fs-extra": {
-          "version": "9.0.1",
-          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
-          "integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
-          "requires": {
-            "at-least-node": "^1.0.0",
-            "graceful-fs": "^4.2.0",
-            "jsonfile": "^6.0.1",
-            "universalify": "^1.0.0"
-          }
-        },
-        "ipfs-utils": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/ipfs-utils/-/ipfs-utils-3.0.0.tgz",
-          "integrity": "sha512-qahDc+fghrM57sbySr2TeWjaVR/RH/YEB/hvdAjiTbjESeD87qZawrXwj+19Q2LtGmFGusKNLo5wExeuI5ZfDQ==",
-          "requires": {
-            "abort-controller": "^3.0.0",
-            "any-signal": "^1.1.0",
-            "buffer": "^5.6.0",
-            "err-code": "^2.0.0",
-            "fs-extra": "^9.0.1",
-            "is-electron": "^2.2.0",
-            "iso-url": "^0.4.7",
-            "it-glob": "0.0.8",
-            "merge-options": "^2.0.0",
-            "nanoid": "^3.1.3",
-            "node-fetch": "^2.6.0",
-            "stream-to-it": "^0.2.0"
-          }
-        },
-        "jsonfile": {
-          "version": "6.0.1",
-          "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
-          "integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
+        "debug": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+          "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
           "requires": {
-            "graceful-fs": "^4.1.6",
-            "universalify": "^1.0.0"
+            "ms": "2.1.2"
           }
         },
-        "universalify": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
-          "integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug=="
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
         }
       }
     },
@@ -12630,33 +11858,6 @@
       "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
       "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": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
-      "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": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-          "requires": {
-            "error-ex": "^1.2.0"
-          }
-        },
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
-        }
-      }
-    },
     "loader-fs-cache": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz",
@@ -12742,18 +11943,19 @@
       "integrity": "sha512-uxKD2HIj042/HBx77NBcmEPsD+hxCgAtjEWlYNScuUjIsh/62Uyu39GOR68TBR68v+jqDL9zfftCWoUo4y03sQ=="
     },
     "locate-path": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+      "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": "^4.1.0"
+        "p-locate": "^3.0.0",
+        "path-exists": "^3.0.0"
       }
     },
     "lodash": {
       "version": "4.17.20",
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
-      "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
-      "dev": true
+      "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
     },
     "lodash.defaultsdeep": {
       "version": "4.6.1",
@@ -12846,15 +12048,6 @@
       "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
       "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
     },
-    "loud-rejection": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
-      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
-      "requires": {
-        "currently-unhandled": "^0.4.1",
-        "signal-exit": "^3.0.0"
-      }
-    },
     "lower-case": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
@@ -12889,18 +12082,13 @@
       }
     },
     "make-dir": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
-      "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+      "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+      "dev": true,
       "requires": {
-        "semver": "^6.0.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
-        }
+        "pify": "^4.0.1",
+        "semver": "^5.6.0"
       }
     },
     "map-cache": {
@@ -12909,11 +12097,6 @@
       "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
       "dev": true
     },
-    "map-obj": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
-      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0="
-    },
     "map-visit": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
@@ -12924,14 +12107,15 @@
       }
     },
     "marked": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.2.tgz",
-      "integrity": "sha512-5jjKHVl/FPo0Z6ocP3zYhKiJLzkwJAw4CZoLjv57FkvbUuwOX4LIBBGGcXjAY6ATcd1q9B8UTj5T9Umauj0QYQ=="
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.7.tgz",
+      "integrity": "sha512-No11hFYcXr/zkBvL6qFmAp1z6BKY3zqLMHny/JN/ey+al7qwCM2+CMBL9BOgqMxZU36fz4cCWfn2poWIf7QRXA=="
     },
     "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,
       "requires": {
         "hash-base": "^3.0.0",
         "inherits": "^2.0.1",
@@ -12950,34 +12134,6 @@
       "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
       "dev": true
     },
-    "memdown": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz",
-      "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=",
-      "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",
-          "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz",
-          "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==",
-          "requires": {
-            "xtend": "~4.0.0"
-          }
-        },
-        "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=="
-        }
-      }
-    },
     "memory-fs": {
       "version": "0.4.1",
       "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
@@ -13006,23 +12162,6 @@
         }
       }
     },
-    "meow": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
-      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
-      "requires": {
-        "camelcase-keys": "^2.0.0",
-        "decamelize": "^1.1.2",
-        "loud-rejection": "^1.0.0",
-        "map-obj": "^1.0.1",
-        "minimist": "^1.1.3",
-        "normalize-package-data": "^2.3.4",
-        "object-assign": "^4.0.1",
-        "read-pkg-up": "^1.0.1",
-        "redent": "^1.0.0",
-        "trim-newlines": "^1.0.0"
-      }
-    },
     "merge-descriptors": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@@ -13033,134 +12172,45 @@
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-2.0.0.tgz",
       "integrity": "sha512-S7xYIeWHl2ZUKF7SDeBhGg6rfv5bKxVBdk95s/I7wVF8d+hjLSztJ/B271cnUiF6CAFduEQ5Zn3HYwAjT16DlQ==",
-      "requires": {
-        "is-plain-obj": "^2.0.0"
-      }
-    },
-    "merge-source-map": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
-      "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
-      "dev": true,
-      "requires": {
-        "source-map": "^0.6.1"
-      },
-      "dependencies": {
-        "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
-        }
-      }
-    },
-    "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=="
-    },
-    "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-lib": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npmjs.org/merkle-lib/-/merkle-lib-2.0.10.tgz",
-      "integrity": "sha1-grjbrnXieneFOItz+ddyXQ9vMyY="
-    },
-    "merkle-patricia-tree": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz",
-      "integrity": "sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ==",
-      "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",
-          "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz",
-          "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==",
-          "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": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
-        },
-        "level-ws": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-1.0.0.tgz",
-          "integrity": "sha512-RXEfCmkd6WWFlArh3X8ONvQPm8jNpfA0s/36M4QzLqrLEIt1iJE9WBHLZ5vZJK6haMjJPJGJCQWfjMNnRcq/9Q==",
-          "requires": {
-            "inherits": "^2.0.3",
-            "readable-stream": "^2.2.8",
-            "xtend": "^4.0.1"
-          },
-          "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==",
-              "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=="
-            }
-          }
-        },
-        "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==",
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        },
-        "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==",
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          },
-          "dependencies": {
-            "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=="
-            }
-          }
+      "requires": {
+        "is-plain-obj": "^2.0.0"
+      },
+      "dependencies": {
+        "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=="
+        }
+      }
+    },
+    "merge-source-map": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
+      "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
+      "dev": true,
+      "requires": {
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "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
         }
       }
     },
+    "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=="
+    },
+    "merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "dev": true
+    },
     "methods": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
@@ -13192,9 +12242,18 @@
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
       "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+      "dev": true,
       "requires": {
         "bn.js": "^4.0.0",
         "brorand": "^1.0.1"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+          "dev": true
+        }
       }
     },
     "mime": {
@@ -13204,22 +12263,23 @@
       "dev": true
     },
     "mime-db": {
-      "version": "1.43.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
-      "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
+      "version": "1.44.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+      "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
     },
     "mime-types": {
-      "version": "2.1.26",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
-      "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
+      "version": "2.1.27",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+      "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
       "requires": {
-        "mime-db": "1.43.0"
+        "mime-db": "1.44.0"
       }
     },
     "mimic-fn": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
-      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+      "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+      "dev": true
     },
     "mimic-response": {
       "version": "1.0.1",
@@ -13238,12 +12298,6 @@
         "webpack-sources": "^1.1.0"
       },
       "dependencies": {
-        "is-plain-obj": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
-          "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
-          "dev": true
-        },
         "normalize-url": {
           "version": "1.9.1",
           "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
@@ -13266,23 +12320,9 @@
             "ajv-errors": "^1.0.0",
             "ajv-keywords": "^3.1.0"
           }
-        },
-        "sort-keys": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
-          "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
-          "dev": true,
-          "requires": {
-            "is-plain-obj": "^1.0.0"
-          }
         }
       }
     },
-    "mini-signals": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/mini-signals/-/mini-signals-1.2.0.tgz",
-      "integrity": "sha1-RbCAE8X65RokqhqTXNMXye1yHXQ="
-    },
     "minimalistic-assert": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@@ -13405,6 +12445,7 @@
       "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,
       "requires": {
         "minimist": "^1.2.5"
       }
@@ -13451,9 +12492,9 @@
       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
     },
     "multiaddr": {
-      "version": "8.1.1",
-      "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-8.1.1.tgz",
-      "integrity": "sha512-Dyur7rWX44MlgKIqVA2dYPOZx/UwG60PVSffJ5S17uo6Pu31lftJXShMEfPtUDGHnyALAOWOuC3X/iPhDtw4Vg==",
+      "version": "8.1.2",
+      "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-8.1.2.tgz",
+      "integrity": "sha512-r13IzW8+Sv9zab9Gt8RPMIN2WkptIPq99EpAzg4IbJ/zTELhiEwXWr9bAmEatSCI4j/LSA6ESJzvz95JZ+ZYXQ==",
       "requires": {
         "cids": "^1.0.0",
         "class-is": "^1.1.0",
@@ -13463,6 +12504,13 @@
         "multibase": "^3.0.0",
         "uint8arrays": "^1.1.0",
         "varint": "^5.0.0"
+      },
+      "dependencies": {
+        "varint": {
+          "version": "5.0.2",
+          "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz",
+          "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow=="
+        }
       }
     },
     "multiaddr-to-uri": {
@@ -13474,20 +12522,21 @@
       }
     },
     "multibase": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/multibase/-/multibase-3.0.1.tgz",
-      "integrity": "sha512-MRU5WpnSg81/vYO977MweoeUAxBdXl7+F5Af2Es+X6Vcgfk/g/EjIqXTgm3kb+xO3m1Kzr+aIV14oRX7nv5Z9w==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/multibase/-/multibase-3.1.0.tgz",
+      "integrity": "sha512-Z+pThrpbS7ckQ2DwW5mPiwCGe1a94f8DWi/OxmbyeRednVOyUKmLSE+60kL/WHFYwWnaD1OakXGk3PYI1NkMFw==",
       "requires": {
         "@multiformats/base-x": "^4.0.1",
-        "web-encoding": "^1.0.2"
+        "web-encoding": "^1.0.4"
       }
     },
     "multicast-dns": {
-      "version": "7.2.2",
-      "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.2.tgz",
-      "integrity": "sha512-XqSMeO8EWV/nOXOpPV8ztIpNweVfE1dSpz6SQvDPp71HD74lMXjt4m/mWB1YBMG0kHtOodxRWc5WOb/UNN1A5g==",
+      "version": "6.2.3",
+      "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+      "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+      "dev": true,
       "requires": {
-        "dns-packet": "^4.0.0",
+        "dns-packet": "^1.3.1",
         "thunky": "^1.0.2"
       }
     },
@@ -13498,65 +12547,22 @@
       "dev": true
     },
     "multicodec": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-2.0.1.tgz",
-      "integrity": "sha512-YDYeWn9iGa76hOHAyyZa0kbt3tr5FLg1ZXUHrZUJltjnxxdbTIbHnxWLd2zTcMOjdT3QyO+Xs4bQgJUcC2RWUA==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-2.1.0.tgz",
+      "integrity": "sha512-7AYpK/avswOWvnqQ9/jOkQCS7Fp4aKxw5ojvn5gyK2VQTZz3YVXeLMzoIZDBy745JSfJMXkTS0ptnHci5Mt1mA==",
       "requires": {
-        "uint8arrays": "1.0.0",
-        "varint": "^5.0.0"
-      },
-      "dependencies": {
-        "uint8arrays": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-1.0.0.tgz",
-          "integrity": "sha512-14tqEVujDREW7YwonSZZwLvo7aFDfX7b6ubvM/U7XvZol+CC/LbhaX/550VlWmhddAL9Wou1sxp0Of3tGqXigg==",
-          "requires": {
-            "multibase": "^3.0.0",
-            "web-encoding": "^1.0.2"
-          }
-        }
+        "uint8arrays": "1.1.0",
+        "varint": "^6.0.0"
       }
     },
     "multihashes": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-3.0.1.tgz",
-      "integrity": "sha512-fFY67WOtb0359IjDZxaCU3gJILlkwkFbxbwrK9Bej5+NqNaYztzLOj8/NgMNMg/InxmhK+Uu8S/U4EcqsHzB7Q==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-3.1.0.tgz",
+      "integrity": "sha512-snU+w6aZy5bTrrqIHW3wkT0MfHmxcpOsaVNJt0NzUnseksbjFDVUZjSmhDMAVOVnIdLMS7xHjo55pKlBIGmC3g==",
       "requires": {
-        "multibase": "^3.0.0",
+        "multibase": "^3.1.0",
         "uint8arrays": "^1.0.0",
-        "varint": "^5.0.0"
-      }
-    },
-    "multihashing": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/multihashing/-/multihashing-0.3.3.tgz",
-      "integrity": "sha512-jXVWf5uqnZUhc1mLFPWOssuOpkj/A/vVLKrtEscD1PzSLobXYocBy9Gqa/Aw4229/heGnl0RBHU3cD53MbHUig==",
-      "requires": {
-        "blakejs": "^1.1.0",
-        "js-sha3": "~0.8.0",
-        "multihashes": "~0.4.14",
-        "webcrypto": "~0.1.1"
-      },
-      "dependencies": {
-        "multibase": {
-          "version": "0.7.0",
-          "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz",
-          "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==",
-          "requires": {
-            "base-x": "^3.0.8",
-            "buffer": "^5.5.0"
-          }
-        },
-        "multihashes": {
-          "version": "0.4.21",
-          "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz",
-          "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==",
-          "requires": {
-            "buffer": "^5.5.0",
-            "multibase": "^0.7.0",
-            "varint": "^5.0.0"
-          }
-        }
+        "varint": "^6.0.0"
       }
     },
     "multihashing-async": {
@@ -13616,14 +12622,14 @@
       }
     },
     "nan": {
-      "version": "2.14.1",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz",
-      "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw=="
+      "version": "2.14.2",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
+      "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
     },
     "nanoid": {
-      "version": "3.1.16",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.16.tgz",
-      "integrity": "sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w=="
+      "version": "3.1.20",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
+      "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw=="
     },
     "nanomatch": {
       "version": "1.2.13",
@@ -13671,36 +12677,6 @@
       "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
       "dev": true
     },
-    "ndjson": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-1.5.0.tgz",
-      "integrity": "sha1-rmA7NrE0vOw0e0UkIrC/mNWDLsg=",
-      "requires": {
-        "json-stringify-safe": "^5.0.1",
-        "minimist": "^1.2.0",
-        "split2": "^2.1.0",
-        "through2": "^2.0.3"
-      },
-      "dependencies": {
-        "split2": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz",
-          "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==",
-          "requires": {
-            "through2": "^2.0.2"
-          }
-        },
-        "through2": {
-          "version": "2.0.5",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
-          "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
-          "requires": {
-            "readable-stream": "~2.3.6",
-            "xtend": "~4.0.1"
-          }
-        }
-      }
-    },
     "negotiator": {
       "version": "0.6.2",
       "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
@@ -13712,6 +12688,11 @@
       "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
       "dev": true
     },
+    "netmask": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz",
+      "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU="
+    },
     "nice-try": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
@@ -13760,9 +12741,10 @@
       "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
     },
     "node-forge": {
-      "version": "0.9.2",
-      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.2.tgz",
-      "integrity": "sha512-naKSScof4Wn+aoHU6HBsifh92Zeicm1GDQKd1vp3Y/kOi8ub0DozCa9KpvYNCXslFHYRmLNiqRopGdTGwNLpNw=="
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
+      "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
+      "dev": true
     },
     "node-gyp-build": {
       "version": "4.2.3",
@@ -13770,14 +12752,14 @@
       "integrity": "sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg=="
     },
     "node-ipc": {
-      "version": "9.1.1",
-      "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz",
-      "integrity": "sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w==",
+      "version": "9.1.3",
+      "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.3.tgz",
+      "integrity": "sha512-8RS4RZyS/KMKKYG8mrje+cLxwATe9dBCuOiqKFSWND4oOuKytfuKCiR9yinvhoXF/nGdX/WnbywaUee+9U87zA==",
       "dev": true,
       "requires": {
         "event-pubsub": "4.3.0",
-        "js-message": "1.0.5",
-        "js-queue": "2.0.0"
+        "js-message": "1.0.7",
+        "js-queue": "2.0.2"
       }
     },
     "node-libs-browser": {
@@ -13837,9 +12819,9 @@
       }
     },
     "node-releases": {
-      "version": "1.1.64",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.64.tgz",
-      "integrity": "sha512-Iec8O9166/x2HRMJyLLLWkd0sFFLrFNy+Xf+JQfSQsdBJzPcHpNl3JQ9gD4j+aJxmCa25jNsIbM4bmACtSbkSg==",
+      "version": "1.1.67",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz",
+      "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==",
       "dev": true
     },
     "nofilter": {
@@ -13851,6 +12833,7 @@
       "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",
@@ -13902,64 +12885,23 @@
         "boolbase": "~1.0.0"
       }
     },
-    "nugget": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz",
-      "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=",
-      "requires": {
-        "debug": "^2.1.3",
-        "minimist": "^1.1.0",
-        "pretty-bytes": "^1.0.2",
-        "progress-stream": "^1.1.0",
-        "request": "^2.45.0",
-        "single-line-log": "^1.1.2",
-        "throttleit": "0.0.2"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "get-stdin": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
-          "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
-        },
-        "pretty-bytes": {
-          "version": "1.0.4",
-          "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
-          "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
-          "requires": {
-            "get-stdin": "^4.0.1",
-            "meow": "^3.1.0"
-          }
-        }
-      }
-    },
     "num2fraction": {
       "version": "1.2.2",
       "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
       "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
       "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": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
-    },
     "oauth-sign": {
       "version": "0.9.0",
       "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
-      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+      "dev": true
     },
     "object-assign": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
-      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+      "dev": true
     },
     "object-component": {
       "version": "0.0.3",
@@ -14017,6 +12959,28 @@
       "requires": {
         "define-properties": "^1.1.3",
         "es-abstract": "^1.18.0-next.1"
+      },
+      "dependencies": {
+        "es-abstract": {
+          "version": "1.18.0-next.1",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+          "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+          "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"
+          }
+        }
       }
     },
     "object-keys": {
@@ -14034,13 +12998,13 @@
       }
     },
     "object.assign": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz",
-      "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==",
+      "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",
-        "es-abstract": "^1.18.0-next.0",
         "has-symbols": "^1.0.1",
         "object-keys": "^1.1.1"
       }
@@ -14053,27 +13017,6 @@
       "requires": {
         "define-properties": "^1.1.3",
         "es-abstract": "^1.17.0-next.1"
-      },
-      "dependencies": {
-        "es-abstract": {
-          "version": "1.17.7",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
-          "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
-          "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"
-          }
-        }
       }
     },
     "object.pick": {
@@ -14095,27 +13038,6 @@
         "es-abstract": "^1.17.0-next.1",
         "function-bind": "^1.1.1",
         "has": "^1.0.3"
-      },
-      "dependencies": {
-        "es-abstract": {
-          "version": "1.17.7",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
-          "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
-          "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"
-          }
-        }
       }
     },
     "observable-webworkers": {
@@ -14153,11 +13075,12 @@
       }
     },
     "onetime": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
-      "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+      "dev": true,
       "requires": {
-        "mimic-fn": "^2.1.0"
+        "mimic-fn": "^1.0.0"
       }
     },
     "open": {
@@ -14304,25 +13227,27 @@
       "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
     },
     "p-limit": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz",
-      "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
       "requires": {
         "p-try": "^2.0.0"
       }
     },
     "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==",
+      "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.2.0"
+        "p-limit": "^2.0.0"
       }
     },
     "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==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+      "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+      "dev": true,
       "requires": {
         "aggregate-error": "^3.0.0"
       }
@@ -14382,6 +13307,16 @@
       "integrity": "sha512-/Z7mcs8Liie8E7IHI9SBtmkHVW/GjLroQ94ALoAMIG20mqFMuh56/3WYhtOTqX9ccRSOxgaCkFC94Bat1Ofskg==",
       "requires": {
         "p-map": "^4.0.0"
+      },
+      "dependencies": {
+        "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==",
+          "requires": {
+            "aggregate-error": "^3.0.0"
+          }
+        }
       }
     },
     "p-try": {
@@ -14467,6 +13402,7 @@
       "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",
@@ -14497,11 +13433,6 @@
         "lines-and-columns": "^1.1.6"
       }
     },
-    "parse-uri": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/parse-uri/-/parse-uri-1.0.3.tgz",
-      "integrity": "sha512-upMnGxNcm+45So85HoguwZTVZI9u11i36DdxJfGF2HYWS2eh3TIx7+/tTi7qrEq15qzGkVhsKjesau+kCk48pA=="
-    },
     "parse5": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
@@ -14566,7 +13497,8 @@
     "path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true
     },
     "path-is-inside": {
       "version": "1.0.2",
@@ -14582,7 +13514,8 @@
     "path-parse": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+      "dev": true
     },
     "path-to-regexp": {
       "version": "0.1.7",
@@ -14616,6 +13549,7 @@
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
       "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
+      "dev": true,
       "requires": {
         "create-hash": "^1.1.2",
         "create-hmac": "^1.1.4",
@@ -14651,15 +13585,11 @@
         "asn1.js": "^5.0.1"
       }
     },
-    "pend": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
-      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
-    },
     "performance-now": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
-      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+      "dev": true
     },
     "picomatch": {
       "version": "2.2.2",
@@ -14677,20 +13607,22 @@
     "pinkie": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
-      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+      "dev": true
     },
     "pinkie-promise": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
       "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "dev": true,
       "requires": {
         "pinkie": "^2.0.0"
       }
     },
     "pino": {
-      "version": "6.7.0",
-      "resolved": "https://registry.npmjs.org/pino/-/pino-6.7.0.tgz",
-      "integrity": "sha512-vPXJ4P9rWCwzlTJt+f0Ni4THc3DWyt8iDDCO4edQ8narTu6hnpzdXu8FqeSJCGndl1W6lfbYQUQihUO54y66Lw==",
+      "version": "6.8.0",
+      "resolved": "https://registry.npmjs.org/pino/-/pino-6.8.0.tgz",
+      "integrity": "sha512-nxq+6Jr7m0cMjYFBoTRw3bco14omZ/SQCheAHz9GVwdkbUrzKhgT+gSI/ql2Mnsca0QQKgpB/ACWhjxE4JsX3Q==",
       "requires": {
         "fast-redact": "^3.0.0",
         "fast-safe-stringify": "^2.0.7",
@@ -14778,47 +13710,6 @@
       "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz",
       "integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg=="
     },
-    "pixi.js": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/pixi.js/-/pixi.js-5.3.3.tgz",
-      "integrity": "sha512-uFQOXXyPMAVVayDebSFBS1AFfPT6QYNuz9Vu11yI2/k1DAef/rbYoJpSMM6SeB6dezDJPtIAaXXNxdaYzbe+kg==",
-      "requires": {
-        "@pixi/accessibility": "5.3.3",
-        "@pixi/app": "5.3.3",
-        "@pixi/constants": "5.3.3",
-        "@pixi/core": "5.3.3",
-        "@pixi/display": "5.3.3",
-        "@pixi/extract": "5.3.3",
-        "@pixi/filter-alpha": "5.3.3",
-        "@pixi/filter-blur": "5.3.3",
-        "@pixi/filter-color-matrix": "5.3.3",
-        "@pixi/filter-displacement": "5.3.3",
-        "@pixi/filter-fxaa": "5.3.3",
-        "@pixi/filter-noise": "5.3.3",
-        "@pixi/graphics": "5.3.3",
-        "@pixi/interaction": "5.3.3",
-        "@pixi/loaders": "5.3.3",
-        "@pixi/math": "5.3.3",
-        "@pixi/mesh": "5.3.3",
-        "@pixi/mesh-extras": "5.3.3",
-        "@pixi/mixin-cache-as-bitmap": "5.3.3",
-        "@pixi/mixin-get-child-by-name": "5.3.3",
-        "@pixi/mixin-get-global-position": "5.3.3",
-        "@pixi/particles": "5.3.3",
-        "@pixi/polyfill": "5.3.3",
-        "@pixi/prepare": "5.3.3",
-        "@pixi/runner": "5.3.3",
-        "@pixi/settings": "5.3.3",
-        "@pixi/sprite": "5.3.3",
-        "@pixi/sprite-animated": "5.3.3",
-        "@pixi/sprite-tiling": "5.3.3",
-        "@pixi/spritesheet": "5.3.3",
-        "@pixi/text": "5.3.3",
-        "@pixi/text-bitmap": "5.3.3",
-        "@pixi/ticker": "5.3.3",
-        "@pixi/utils": "5.3.3"
-      }
-    },
     "pkg-dir": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
@@ -14826,36 +13717,6 @@
       "dev": true,
       "requires": {
         "find-up": "^3.0.0"
-      },
-      "dependencies": {
-        "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"
-          }
-        },
-        "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-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"
-          }
-        }
       }
     },
     "pnp-webpack-plugin": {
@@ -14879,9 +13740,9 @@
       },
       "dependencies": {
         "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "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"
@@ -15567,9 +14428,9 @@
       "dev": true
     },
     "prettier": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz",
-      "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
+      "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==",
       "dev": true
     },
     "prettier-linter-helpers": {
@@ -15597,9 +14458,13 @@
       }
     },
     "private-ip": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/private-ip/-/private-ip-1.0.5.tgz",
-      "integrity": "sha1-ItAYP7oJ0OwaKk4PRv63cVY9FEk="
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/private-ip/-/private-ip-2.1.1.tgz",
+      "integrity": "sha512-csxTtREJ7254nnUF14hjOrnd/vZH78vTS5opec6IDVZRwY3omKDcNL/r+vfxFZnCRsrBWVA8B0Q95lgMGrFuZQ==",
+      "requires": {
+        "is-ip": "^3.1.0",
+        "netmask": "^1.0.6"
+      }
     },
     "process": {
       "version": "0.11.10",
@@ -15617,55 +14482,6 @@
       "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
       "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
     },
-    "progress-stream": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz",
-      "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=",
-      "requires": {
-        "speedometer": "~0.1.2",
-        "through2": "~0.2.3"
-      },
-      "dependencies": {
-        "object-keys": {
-          "version": "0.4.0",
-          "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
-          "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY="
-        },
-        "readable-stream": {
-          "version": "1.1.14",
-          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
-          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.1",
-            "isarray": "0.0.1",
-            "string_decoder": "~0.10.x"
-          }
-        },
-        "string_decoder": {
-          "version": "0.10.31",
-          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
-          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
-        },
-        "through2": {
-          "version": "0.2.3",
-          "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
-          "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
-          "requires": {
-            "readable-stream": "~1.1.9",
-            "xtend": "~2.1.1"
-          }
-        },
-        "xtend": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
-          "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
-          "requires": {
-            "object-keys": "~0.4.0"
-          }
-        }
-      }
-    },
     "prom-client": {
       "version": "12.0.0",
       "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-12.0.0.tgz",
@@ -15715,9 +14531,9 @@
       }
     },
     "protobufjs": {
-      "version": "6.10.1",
-      "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.1.tgz",
-      "integrity": "sha512-pb8kTchL+1Ceg4lFd5XUpK8PdWacbvV5SK2ULH2ebrYtl4GjJmS24m6CKME67jzV53tbJxHlnNOSqQHbTsR9JQ==",
+      "version": "6.10.2",
+      "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.2.tgz",
+      "integrity": "sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ==",
       "requires": {
         "@protobufjs/aspromise": "^1.1.2",
         "@protobufjs/base64": "^1.1.2",
@@ -15732,6 +14548,13 @@
         "@types/long": "^4.0.1",
         "@types/node": "^13.7.0",
         "long": "^4.0.0"
+      },
+      "dependencies": {
+        "@types/node": {
+          "version": "13.13.36",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.36.tgz",
+          "integrity": "sha512-ctzZJ+XsmHQwe3xp07gFUq4JxBaRSYzKHPgblR76//UanGST7vfFNF0+ty5eEbgTqsENopzoDK090xlha9dccQ=="
+        }
       }
     },
     "protocol-buffers-schema": {
@@ -15748,6 +14571,13 @@
         "signed-varint": "^2.0.1",
         "uint8arrays": "^1.0.0",
         "varint": "^5.0.0"
+      },
+      "dependencies": {
+        "varint": {
+          "version": "5.0.2",
+          "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz",
+          "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow=="
+        }
       }
     },
     "proxy-addr": {
@@ -15768,7 +14598,8 @@
     "pseudomap": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "dev": true
     },
     "psl": {
       "version": "1.8.0",
@@ -15779,6 +14610,7 @@
       "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",
@@ -15786,6 +14618,14 @@
         "parse-asn1": "^5.0.0",
         "randombytes": "^2.0.1",
         "safe-buffer": "^5.1.2"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+          "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+          "dev": true
+        }
       }
     },
     "pump": {
@@ -15833,14 +14673,6 @@
         "escape-goat": "^2.0.0"
       }
     },
-    "pushdata-bitcoin": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/pushdata-bitcoin/-/pushdata-bitcoin-1.0.1.tgz",
-      "integrity": "sha1-FZMdPNlnreUiBvUjqnMxrvfUOvc=",
-      "requires": {
-        "bitcoin-ops": "^1.3.0"
-      }
-    },
     "q": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
@@ -15850,7 +14682,8 @@
     "qs": {
       "version": "6.5.2",
       "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
-      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+      "dev": true
     },
     "query-string": {
       "version": "4.3.4",
@@ -15865,7 +14698,8 @@
     "querystring": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
-      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=",
+      "dev": true
     },
     "querystring-es3": {
       "version": "0.2.1",
@@ -15880,9 +14714,9 @@
       "dev": true
     },
     "queue-microtask": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.0.tgz",
-      "integrity": "sha512-J95OVUiS4b8qqmpqhCodN8yPpHG2mpZUPQ8tDGyIY0VhM+kBHszOuvsMJVGNQ1OH2BnTFbqz45i+2jGpDw9H0w=="
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz",
+      "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg=="
     },
     "quick-format-unescaped": {
       "version": "4.0.1",
@@ -15926,6 +14760,7 @@
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
       "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+      "dev": true,
       "requires": {
         "randombytes": "^2.0.5",
         "safe-buffer": "^5.1.0"
@@ -15987,59 +14822,6 @@
         }
       }
     },
-    "read-pkg-up": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
-      "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-      "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": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-          "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": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "requires": {
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "path-type": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
-          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-          "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": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
-        },
-        "read-pkg": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
-          "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-          "requires": {
-            "load-json-file": "^1.0.0",
-            "normalize-package-data": "^2.3.2",
-            "path-type": "^1.0.0"
-          }
-        }
-      }
-    },
     "readable-stream": {
       "version": "2.3.7",
       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
@@ -16089,42 +14871,25 @@
         "picomatch": "^2.2.1"
       }
     },
-    "redent": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
-      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+    "receptacle": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/receptacle/-/receptacle-1.3.2.tgz",
+      "integrity": "sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A==",
       "requires": {
-        "indent-string": "^2.1.0",
-        "strip-indent": "^1.0.1"
+        "ms": "^2.1.1"
       },
       "dependencies": {
-        "get-stdin": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
-          "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4="
-        },
-        "indent-string": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
-          "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
-          "requires": {
-            "repeating": "^2.0.0"
-          }
-        },
-        "strip-indent": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
-          "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
-          "requires": {
-            "get-stdin": "^4.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=="
         }
       }
     },
     "regenerate": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz",
-      "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==",
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+      "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
       "dev": true
     },
     "regenerate-unicode-properties": {
@@ -16169,27 +14934,6 @@
       "requires": {
         "define-properties": "^1.1.3",
         "es-abstract": "^1.17.0-next.1"
-      },
-      "dependencies": {
-        "es-abstract": {
-          "version": "1.17.7",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
-          "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
-          "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"
-          }
-        }
       }
     },
     "regexpp": {
@@ -16213,9 +14957,9 @@
       }
     },
     "registry-auth-token": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz",
-      "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz",
+      "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==",
       "requires": {
         "rc": "^1.2.8"
       }
@@ -16338,18 +15082,11 @@
       "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
       "dev": true
     },
-    "repeating": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
-      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
-      "requires": {
-        "is-finite": "^1.0.0"
-      }
-    },
     "request": {
       "version": "2.88.2",
       "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
       "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+      "dev": true,
       "requires": {
         "aws-sign2": "~0.7.0",
         "aws4": "^1.8.0",
@@ -16373,20 +15110,11 @@
         "uuid": "^3.3.2"
       },
       "dependencies": {
-        "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==",
-          "requires": {
-            "asynckit": "^0.4.0",
-            "combined-stream": "^1.0.6",
-            "mime-types": "^2.1.12"
-          }
-        },
         "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,
           "requires": {
             "psl": "^1.1.28",
             "punycode": "^2.1.1"
@@ -16419,6 +15147,7 @@
       "version": "1.15.1",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
       "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
+      "dev": true,
       "requires": {
         "path-parse": "^1.0.6"
       }
@@ -16444,15 +15173,6 @@
       "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
       "dev": true
     },
-    "resource-loader": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/resource-loader/-/resource-loader-3.0.1.tgz",
-      "integrity": "sha512-fBuCRbEHdLCI1eglzQhUv9Rrdcmqkydr1r6uHE2cYHvRBrcLXeSmbE/qI/urFt8rPr/IGxir3BUwM5kUK8XoyA==",
-      "requires": {
-        "mini-signals": "^1.2.0",
-        "parse-uri": "^1.0.0"
-      }
-    },
     "responselike": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
@@ -16469,23 +15189,6 @@
       "requires": {
         "onetime": "^2.0.0",
         "signal-exit": "^3.0.2"
-      },
-      "dependencies": {
-        "mimic-fn": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
-          "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
-          "dev": true
-        },
-        "onetime": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
-          "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
-          "dev": true,
-          "requires": {
-            "mimic-fn": "^1.0.0"
-          }
-        }
       }
     },
     "ret": {
@@ -16520,6 +15223,7 @@
       "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"
       }
@@ -16528,19 +15232,12 @@
       "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.6",
-      "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz",
-      "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==",
-      "requires": {
-        "bn.js": "^4.11.1"
-      }
-    },
     "run": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/run/-/run-1.4.0.tgz",
@@ -16617,11 +15314,6 @@
         "ajv-keywords": "^3.5.2"
       }
     },
-    "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.2",
       "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.2.tgz",
@@ -16645,25 +15337,13 @@
       "dev": true,
       "requires": {
         "node-forge": "^0.10.0"
-      },
-      "dependencies": {
-        "node-forge": {
-          "version": "0.10.0",
-          "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz",
-          "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==",
-          "dev": true
-        }
       }
     },
-    "semaphore": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz",
-      "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA=="
-    },
     "semver": {
       "version": "5.7.1",
       "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+      "dev": true
     },
     "semver-diff": {
       "version": "3.1.1",
@@ -16839,7 +15519,8 @@
     "setimmediate": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
-      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=",
+      "dev": true
     },
     "setprototypeof": {
       "version": "1.1.1",
@@ -16851,6 +15532,7 @@
       "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": {
         "inherits": "^2.0.1",
         "safe-buffer": "^5.0.1"
@@ -16860,6 +15542,7 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
       "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "dev": true,
       "requires": {
         "shebang-regex": "^1.0.0"
       }
@@ -16867,7 +15550,8 @@
     "shebang-regex": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+      "dev": true
     },
     "shell-quote": {
       "version": "1.7.2",
@@ -16891,9 +15575,9 @@
       }
     },
     "signal-exit": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
-      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+      "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
     },
     "signed-varint": {
       "version": "2.0.1",
@@ -16901,6 +15585,13 @@
       "integrity": "sha1-UKmYnafJjCxh2tEZvJdHDvhSgSk=",
       "requires": {
         "varint": "~5.0.0"
+      },
+      "dependencies": {
+        "varint": {
+          "version": "5.0.2",
+          "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz",
+          "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow=="
+        }
       }
     },
     "simple-swizzle": {
@@ -16920,56 +15611,15 @@
         }
       }
     },
-    "single-line-log": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
-      "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=",
-      "requires": {
-        "string-width": "^1.0.1"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
-        },
-        "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": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
-          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-          "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        }
-      }
-    },
     "sinon": {
-      "version": "9.2.1",
-      "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.1.tgz",
-      "integrity": "sha512-naPfsamB5KEE1aiioaoqJ6MEhdUs/2vtI5w1hPAXX/UwvoPjXcwh1m5HiKx0HGgKR8lQSoFIgY5jM6KK8VrS9w==",
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.2.tgz",
+      "integrity": "sha512-9Owi+RisvCZpB0bdOVFfL314I6I4YoRlz6Isi4+fr8q8YQsDPoCe5UnmNtKHRThX3negz2bXHWIuiPa42vM8EQ==",
       "requires": {
         "@sinonjs/commons": "^1.8.1",
         "@sinonjs/fake-timers": "^6.0.1",
         "@sinonjs/formatio": "^5.0.1",
-        "@sinonjs/samsam": "^5.2.0",
+        "@sinonjs/samsam": "^5.3.0",
         "diff": "^4.0.2",
         "nise": "^4.0.4",
         "supports-color": "^7.1.0"
@@ -16997,21 +15647,42 @@
       "dev": true
     },
     "slice-ansi": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
-      "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+      "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
       "dev": true,
       "requires": {
-        "ansi-styles": "^3.2.0",
-        "astral-regex": "^1.0.0",
-        "is-fullwidth-code-point": "^2.0.0"
+        "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,
+          "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,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "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
+        }
       }
     },
-    "smart-buffer": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz",
-      "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw=="
-    },
     "snapdragon": {
       "version": "0.8.2",
       "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
@@ -17146,6 +15817,11 @@
           "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
           "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
         },
+        "component-emitter": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+          "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+        },
         "isarray": {
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
@@ -17224,11 +15900,6 @@
         "to-array": "0.1.4"
       },
       "dependencies": {
-        "component-emitter": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
-          "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
-        },
         "debug": {
           "version": "3.1.0",
           "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
@@ -17274,6 +15945,11 @@
         "isarray": "2.0.1"
       },
       "dependencies": {
+        "component-emitter": {
+          "version": "1.2.1",
+          "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+          "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY="
+        },
         "isarray": {
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
@@ -17307,9 +15983,9 @@
       },
       "dependencies": {
         "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
-          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "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"
@@ -17342,13 +16018,19 @@
       }
     },
     "sort-keys": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-4.1.0.tgz",
-      "integrity": "sha512-/sRdxzkkPFUYiCrTr/2t+104nDc9AgDmEpeVYuvOWYQe3Djk1GWO6lVw3Vx2jfh1SsR0eehhd1nvFYlzt5e99w==",
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+      "dev": true,
       "requires": {
-        "is-plain-obj": "^2.0.0"
+        "is-plain-obj": "^1.0.0"
       }
     },
+    "sortablejs": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.10.2.tgz",
+      "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A=="
+    },
     "source-list-map": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
@@ -17412,6 +16094,7 @@
       "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"
@@ -17420,12 +16103,14 @@
     "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=="
+      "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"
@@ -17434,7 +16119,8 @@
     "spdx-license-ids": {
       "version": "3.0.6",
       "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz",
-      "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw=="
+      "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==",
+      "dev": true
     },
     "spdy": {
       "version": "4.0.2",
@@ -17476,11 +16162,6 @@
         }
       }
     },
-    "speedometer": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
-      "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0="
-    },
     "split-string": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
@@ -17520,6 +16201,7 @@
       "version": "1.16.1",
       "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
       "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+      "dev": true,
       "requires": {
         "asn1": "~0.2.3",
         "assert-plus": "^1.0.0",
@@ -17631,11 +16313,6 @@
       "resolved": "https://registry.npmjs.org/streaming-iterables/-/streaming-iterables-5.0.3.tgz",
       "integrity": "sha512-1AgrKjHTvaaK+iA+N3BuTXQWVb7Adyb6+v8yIW3SCTwlBVYEbm76mF8Mf0/IVo+DOk7hoeELOURBKTCMhe/qow=="
     },
-    "strftime": {
-      "version": "0.10.0",
-      "resolved": "https://registry.npmjs.org/strftime/-/strftime-0.10.0.tgz",
-      "integrity": "sha1-s/D6QZKVICpaKJ9ta+n0kJphcZM="
-    },
     "strict-uri-encode": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
@@ -17667,6 +16344,28 @@
       "requires": {
         "define-properties": "^1.1.3",
         "es-abstract": "^1.18.0-next.1"
+      },
+      "dependencies": {
+        "es-abstract": {
+          "version": "1.18.0-next.1",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+          "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+          "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"
+          }
+        }
       }
     },
     "string.prototype.trimstart": {
@@ -17677,6 +16376,28 @@
       "requires": {
         "define-properties": "^1.1.3",
         "es-abstract": "^1.18.0-next.1"
+      },
+      "dependencies": {
+        "es-abstract": {
+          "version": "1.18.0-next.1",
+          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
+          "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
+          "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"
+          }
+        }
       }
     },
     "string_decoder": {
@@ -17702,14 +16423,6 @@
         }
       }
     },
-    "strip-bom": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
-      "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-      "requires": {
-        "is-utf8": "^0.2.0"
-      }
-    },
     "strip-eof": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
@@ -17721,14 +16434,6 @@
       "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
       "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="
     },
-    "strip-hex-prefix": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz",
-      "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=",
-      "requires": {
-        "is-hex-prefixed": "1.0.0"
-      }
-    },
     "strip-indent": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
@@ -17774,25 +16479,6 @@
         }
       }
     },
-    "sumchecker": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz",
-      "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=",
-      "requires": {
-        "debug": "^2.2.0",
-        "es6-promise": "^4.0.5"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
-          "requires": {
-            "ms": "2.0.0"
-          }
-        }
-      }
-    },
     "supports-color": {
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -17829,43 +16515,15 @@
       }
     },
     "table": {
-      "version": "5.4.6",
-      "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
-      "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
+      "version": "6.0.4",
+      "resolved": "https://registry.npmjs.org/table/-/table-6.0.4.tgz",
+      "integrity": "sha512-sBT4xRLdALd+NFBvwOz8bw4b15htyythha+q+DVZqy2RS08PPC8O2sZFgJYEY7bJvbCFKccs+WIZ/cd+xxTWCw==",
       "dev": true,
       "requires": {
-        "ajv": "^6.10.2",
-        "lodash": "^4.17.14",
-        "slice-ansi": "^2.1.0",
-        "string-width": "^3.0.0"
-      },
-      "dependencies": {
-        "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
-        },
-        "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"
-          }
-        }
+        "ajv": "^6.12.4",
+        "lodash": "^4.17.20",
+        "slice-ansi": "^4.0.0",
+        "string-width": "^4.2.0"
       }
     },
     "tapable": {
@@ -17977,11 +16635,6 @@
         "neo-async": "^2.6.0"
       }
     },
-    "throttleit": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
-      "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8="
-    },
     "through": {
       "version": "2.3.8",
       "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -18020,9 +16673,9 @@
       }
     },
     "timers-browserify": {
-      "version": "2.0.11",
-      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
-      "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
+      "version": "2.0.12",
+      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
+      "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
       "dev": true,
       "requires": {
         "setimmediate": "^1.0.4"
@@ -18044,18 +16697,6 @@
       "resolved": "https://registry.npmjs.org/tiny-each-async/-/tiny-each-async-2.0.3.tgz",
       "integrity": "sha1-jru/1tYpXxNwAD+7NxYq/loKUdE="
     },
-    "tiny-secp256k1": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-1.1.5.tgz",
-      "integrity": "sha512-duE2hSLSQIpHGzmK48OgRrGTi+4OTkXLC6aa86uOYQ6LLCYZSarVKIAvEtY7MoXjoL6bOXMSerEGMzrvW4SkDw==",
-      "requires": {
-        "bindings": "^1.3.0",
-        "bn.js": "^4.11.8",
-        "create-hmac": "^1.1.7",
-        "elliptic": "^6.4.0",
-        "nan": "^2.13.2"
-      }
-    },
     "tmp": {
       "version": "0.0.33",
       "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -18160,11 +16801,6 @@
         "universalify": "^0.1.2"
       }
     },
-    "trim-newlines": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
-      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM="
-    },
     "truncate-utf8-bytes": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
@@ -18201,6 +16837,7 @@
       "version": "0.6.0",
       "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
       "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "dev": true,
       "requires": {
         "safe-buffer": "^5.0.1"
       }
@@ -18208,7 +16845,8 @@
     "tweetnacl": {
       "version": "0.14.5",
       "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
-      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+      "dev": true
     },
     "type-check": {
       "version": "0.4.0",
@@ -18242,7 +16880,8 @@
     "typedarray": {
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
-      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+      "dev": true
     },
     "typedarray-to-buffer": {
       "version": "3.1.5",
@@ -18252,11 +16891,6 @@
         "is-typedarray": "^1.0.0"
       }
     },
-    "typeforce": {
-      "version": "1.18.0",
-      "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz",
-      "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g=="
-    },
     "typical": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/typical/-/typical-6.0.1.tgz",
@@ -18443,9 +17077,9 @@
       "dev": true
     },
     "update-notifier": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.0.tgz",
-      "integrity": "sha512-8tqsiVrMv7aZsKNSjqA6DdBLKJpZG1hRpkj1RbOJu1PgyP69OX+EInAnP1EK/ShX5YdPFgwWdk19oquZ0HTM8g==",
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.1.tgz",
+      "integrity": "sha512-BuVpRdlwxeIOvmc32AGYvO1KVdPlsmqSh8KDDBxS6kDE5VR7R8OMP1d8MdhaVBvxl4H3551k9akXr0Y1iIB2Wg==",
       "requires": {
         "boxen": "^4.2.0",
         "chalk": "^4.1.0",
@@ -18453,11 +17087,11 @@
         "has-yarn": "^2.1.0",
         "import-lazy": "^2.1.0",
         "is-ci": "^2.0.0",
-        "is-installed-globally": "^0.3.1",
+        "is-installed-globally": "^0.3.2",
         "is-npm": "^5.0.0",
         "is-yarn-global": "^0.3.0",
-        "latest-version": "^5.0.0",
-        "pupa": "^2.0.1",
+        "latest-version": "^5.1.0",
+        "pupa": "^2.1.1",
         "semver": "^7.3.2",
         "semver-diff": "^3.1.1",
         "xdg-basedir": "^4.0.0"
@@ -18506,10 +17140,21 @@
             "ci-info": "^2.0.0"
           }
         },
+        "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==",
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
         "semver": {
-          "version": "7.3.2",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
-          "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ=="
+          "version": "7.3.4",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
+          "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
         },
         "supports-color": {
           "version": "7.2.0",
@@ -18518,6 +17163,11 @@
           "requires": {
             "has-flag": "^4.0.0"
           }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
         }
       }
     },
@@ -18554,6 +17204,7 @@
       "version": "0.11.0",
       "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
       "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+      "dev": true,
       "requires": {
         "punycode": "1.3.2",
         "querystring": "0.2.0"
@@ -18562,7 +17213,8 @@
         "punycode": {
           "version": "1.3.2",
           "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
-          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=",
+          "dev": true
         }
       }
     },
@@ -18603,12 +17255,12 @@
       }
     },
     "ursa-optional": {
-      "version": "0.10.1",
-      "resolved": "https://registry.npmjs.org/ursa-optional/-/ursa-optional-0.10.1.tgz",
-      "integrity": "sha512-/pgpBXVJut57dHNrdGF+1/qXi+5B7JrlmZDWPSyoivEcbwFWRZJBJGkWb6ivknMBA3bnFA7lqsb6iHiFfp79QQ==",
+      "version": "0.10.2",
+      "resolved": "https://registry.npmjs.org/ursa-optional/-/ursa-optional-0.10.2.tgz",
+      "integrity": "sha512-TKdwuLboBn7M34RcvVTuQyhvrA8gYKapuVdm0nBP0mnBc7oECOfUQZrY91cefL3/nm64ZyrejSRrhTVdX7NG/A==",
       "requires": {
         "bindings": "^1.5.0",
-        "nan": "^2.14.0"
+        "nan": "^2.14.2"
       }
     },
     "use": {
@@ -18654,27 +17306,6 @@
         "es-abstract": "^1.17.2",
         "has-symbols": "^1.0.1",
         "object.getownpropertydescriptors": "^2.1.0"
-      },
-      "dependencies": {
-        "es-abstract": {
-          "version": "1.17.7",
-          "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
-          "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
-          "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"
-          }
-        }
       }
     },
     "utila": {
@@ -18692,7 +17323,8 @@
     "uuid": {
       "version": "3.4.0",
       "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+      "dev": true
     },
     "v8-compile-cache": {
       "version": "2.2.0",
@@ -18704,15 +17336,16 @@
       "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=="
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz",
+      "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg=="
     },
     "varint-decoder": {
       "version": "1.0.0",
@@ -18720,14 +17353,13 @@
       "integrity": "sha512-JkOvdztASWGUAsXshCFHrB9f6AgR2Q8W08CEyJ+43b1qtFocmI8Sp1R/M0E/hDOY2FzVIqk63tOYLgDYWuJ7IQ==",
       "requires": {
         "varint": "^5.0.0"
-      }
-    },
-    "varuint-bitcoin": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz",
-      "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==",
-      "requires": {
-        "safe-buffer": "^5.1.1"
+      },
+      "dependencies": {
+        "varint": {
+          "version": "5.0.2",
+          "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz",
+          "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow=="
+        }
       }
     },
     "vary": {
@@ -18746,6 +17378,7 @@
       "version": "1.10.0",
       "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
       "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "dev": true,
       "requires": {
         "assert-plus": "^1.0.0",
         "core-util-is": "1.0.2",
@@ -18764,9 +17397,9 @@
       "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg=="
     },
     "vue-draggable-resizable": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/vue-draggable-resizable/-/vue-draggable-resizable-2.2.0.tgz",
-      "integrity": "sha512-KjVyzg0OtLsyVhnwD/6NozJkLMD3li41QB/aJIJUr3VS75Gn32UPOWidLvhwsbkwNQcKajXW9QCV1aTrN6MY8w=="
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/vue-draggable-resizable/-/vue-draggable-resizable-2.3.0.tgz",
+      "integrity": "sha512-77CLRj1TPwB30pwsjOf3pkd1UzYanCdKXbqhILJ0Oo5QQl50lvBfyQCXxMFzwWwTc3sbBbQH3FfWSV+BkoSElA=="
     },
     "vue-emoji-picker": {
       "version": "1.0.1",
@@ -18774,15 +17407,15 @@
       "integrity": "sha512-phisHAaSg+7xnpi7xlOxFGD46npaQXCLit2T6nAHMlEcFNT1ZUqu/NO3P5FDp6RgjP7o4ueduktnxk9ul0IS9Q=="
     },
     "vue-eslint-parser": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.0.0.tgz",
-      "integrity": "sha512-yR0dLxsTT7JfD2YQo9BhnQ6bUTLsZouuzt9SKRP7XNaZJV459gvlsJo4vT2nhZ/2dH9j3c53bIx9dnqU2prM9g==",
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.3.0.tgz",
+      "integrity": "sha512-n5PJKZbyspD0+8LnaZgpEvNCrjQx1DyDHw8JdWwoxhhC+yRip4TAvSDpXGf9SWX6b0umeB5aR61gwUo6NVvFxw==",
       "dev": true,
       "requires": {
         "debug": "^4.1.1",
         "eslint-scope": "^5.0.0",
         "eslint-visitor-keys": "^1.1.0",
-        "espree": "^6.1.2",
+        "espree": "^6.2.1",
         "esquery": "^1.0.1",
         "lodash": "^4.17.15"
       },
@@ -18797,12 +17430,6 @@
             "acorn-jsx": "^5.2.0",
             "eslint-visitor-keys": "^1.1.0"
           }
-        },
-        "lodash": {
-          "version": "4.17.20",
-          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
-          "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
-          "dev": true
         }
       }
     },
@@ -18813,9 +17440,9 @@
       "dev": true
     },
     "vue-loader": {
-      "version": "15.9.3",
-      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.3.tgz",
-      "integrity": "sha512-Y67VnGGgVLH5Voostx8JBZgPQTlDQeOVBLOEsjc2cXbCYBKexSKEpOA56x0YZofoDOTszrLnIShyOX1p9uCEHA==",
+      "version": "15.9.5",
+      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.5.tgz",
+      "integrity": "sha512-oeMOs2b5o5gRqkxfds10bCx6JeXYTwivRgbb8hzOrcThD2z1+GqEKE3EX9A2SGbsYDf4rXwRg6D5n1w0jO5SwA==",
       "dev": true,
       "requires": {
         "@vue/component-compiler-utils": "^3.1.0",
@@ -18834,9 +17461,9 @@
       }
     },
     "vue-loader-v16": {
-      "version": "npm:vue-loader@16.0.0-beta.8",
-      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.8.tgz",
-      "integrity": "sha512-oouKUQWWHbSihqSD7mhymGPX1OQ4hedzAHyvm8RdyHh6m3oIvoRF+NM45i/bhNOlo8jCnuJhaSUf/6oDjv978g==",
+      "version": "npm:vue-loader@16.0.0-rc.2",
+      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-rc.2.tgz",
+      "integrity": "sha512-cz8GK4dgIf1UTC+do80pGvh8BHcCRHLIQVHV9ONVQ8wtoqS9t/+H02rKcQP+TVNg7khgLyQV2+8eHUq7/AFq3g==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -18908,9 +17535,9 @@
       }
     },
     "vue-router": {
-      "version": "3.4.8",
-      "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.8.tgz",
-      "integrity": "sha512-3BsR84AqarcmweXjItxw3jwQsiYNssYg090yi4rlzTnCJxmHtkyCvhNz9Z7qRSOkmiV485KkUCReTp5AjNY4wg=="
+      "version": "3.4.9",
+      "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.4.9.tgz",
+      "integrity": "sha512-CGAKWN44RqXW06oC+u4mPgHLQQi2t6vLD/JbGRDAXm0YpMv0bgpKuU5bBd7AvMgfTz9kXVRIWKHqRwGEb8xFkA=="
     },
     "vue-style-loader": {
       "version": "4.1.2",
@@ -18930,6 +17557,11 @@
         }
       }
     },
+    "vue-swatches": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/vue-swatches/-/vue-swatches-2.1.0.tgz",
+      "integrity": "sha512-JbSomg1penZvgHL24blA3PDgji7LPVGGSFlMo7F+jYVcxooemadI3gkMwFJVIPMikG5g160Mq+Lbph/lqFjzzw=="
+    },
     "vue-template-compiler": {
       "version": "2.6.12",
       "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz",
@@ -18946,10 +17578,18 @@
       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
       "dev": true
     },
+    "vuedraggable": {
+      "version": "2.24.3",
+      "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-2.24.3.tgz",
+      "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==",
+      "requires": {
+        "sortablejs": "1.10.2"
+      }
+    },
     "vuex": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.5.1.tgz",
-      "integrity": "sha512-w7oJzmHQs0FM9LXodfskhw9wgKBiaB+totOdb8sNzbTB2KDCEEwEs29NzBZFh/lmEK1t5tDmM1vtsO7ubG1DFw=="
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.6.0.tgz",
+      "integrity": "sha512-W74OO2vCJPs9/YjNjW8lLbj+jzT24waTo2KShI8jLvJW8OaIkgb3wuAMA7D+ZiUxDOx3ubwSZTaJBip9G8a3aQ=="
     },
     "vuvuzela": {
       "version": "1.0.3",
@@ -18957,21 +17597,21 @@
       "integrity": "sha1-O+FF5YJxxzylUnndhR8SpoIRSws="
     },
     "watchpack": {
-      "version": "1.7.4",
-      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz",
-      "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==",
+      "version": "1.7.5",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
+      "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
       "dev": true,
       "requires": {
         "chokidar": "^3.4.1",
         "graceful-fs": "^4.1.2",
         "neo-async": "^2.5.0",
-        "watchpack-chokidar2": "^2.0.0"
+        "watchpack-chokidar2": "^2.0.1"
       }
     },
     "watchpack-chokidar2": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz",
-      "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
+      "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -19106,18 +17746,9 @@
       }
     },
     "web-encoding": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.0.4.tgz",
-      "integrity": "sha512-DcXs2lbVPzuJmn2kuDEwul2oZg7p4YMa5J2f0YzsOBHaAnBYGPNUB/rJ74DTjTKpw7F0+lSsVM8sFHE2UyBixg=="
-    },
-    "webcrypto": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/webcrypto/-/webcrypto-0.1.1.tgz",
-      "integrity": "sha512-BAvoatS38TbHdyt42ECLroi27NmDh5iea5l5rHC6nZTZjlbJlndrT0FoIiEq7fmPHpmNtP0lMFKVMEKZQFIrGA==",
-      "requires": {
-        "crypto-browserify": "^3.10.0",
-        "detect-node": "^2.0.3"
-      }
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.0.6.tgz",
+      "integrity": "sha512-26wEnRPEFAc5d5lmH1Q/DuvWEYsRF1D2alX2jlKpdmqv7cj+BbANL7Xlcl9r4s72Eg9kItZa9RWVbBMC9dMv4w=="
     },
     "webpack": {
       "version": "4.44.2",
@@ -19297,6 +17928,12 @@
           "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
           "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
+        },
         "chokidar": {
           "version": "2.1.8",
           "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
@@ -19351,15 +17988,6 @@
           "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"
-          }
-        },
         "fsevents": {
           "version": "1.2.13",
           "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
@@ -19407,25 +18035,6 @@
             "binary-extensions": "^1.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,
-          "requires": {
-            "p-locate": "^3.0.0",
-            "path-exists": "^3.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"
-          }
-        },
         "readdirp": {
           "version": "2.2.1",
           "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
@@ -19614,6 +18223,7 @@
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
       "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
       "requires": {
         "isexe": "^2.0.0"
       }
@@ -19631,14 +18241,6 @@
         "string-width": "^4.0.0"
       }
     },
-    "wif": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz",
-      "integrity": "sha1-CNP1IFbGZnkplyb63g1DKudLRwQ=",
-      "requires": {
-        "bs58check": "<3.0.0"
-      }
-    },
     "word-wrap": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
@@ -19665,11 +18267,10 @@
       },
       "dependencies": {
         "ansi-styles": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
-          "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
           "requires": {
-            "@types/color-name": "^1.1.1",
             "color-convert": "^2.0.1"
           }
         },
@@ -19688,15 +18289,6 @@
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
     },
-    "write": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
-      "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
-      "dev": true,
-      "requires": {
-        "mkdirp": "^0.5.1"
-      }
-    },
     "write-file-atomic": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
@@ -19769,9 +18361,9 @@
       "dev": true
     },
     "yargs": {
-      "version": "15.3.1",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz",
-      "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==",
+      "version": "15.4.1",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+      "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
       "requires": {
         "cliui": "^6.0.0",
         "decamelize": "^1.2.0",
@@ -19783,7 +18375,39 @@
         "string-width": "^4.2.0",
         "which-module": "^2.0.0",
         "y18n": "^4.0.0",
-        "yargs-parser": "^18.1.1"
+        "yargs-parser": "^18.1.2"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+          "requires": {
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "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==",
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "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=="
+        }
       }
     },
     "yargs-parser": {
@@ -19793,15 +18417,13 @@
       "requires": {
         "camelcase": "^5.0.0",
         "decamelize": "^1.2.0"
-      }
-    },
-    "yauzl": {
-      "version": "2.10.0",
-      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
-      "requires": {
-        "buffer-crc32": "~0.2.3",
-        "fd-slicer": "~1.1.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+          "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+        }
       }
     },
     "yeast": {
@@ -19876,14 +18498,6 @@
           "dev": true
         }
       }
-    },
-    "zcash-block": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/zcash-block/-/zcash-block-2.0.0.tgz",
-      "integrity": "sha512-I6pv5b+eGE8CJFmltR+ILHnGcnBO8olV78VicQIaWulMhkomlwDmaMeMshJRLPcnd0FBs58QQVcVNBOT9ojH6Q==",
-      "requires": {
-        "multihashing": "~0.3.3"
-      }
     }
   }
 }
diff --git a/app/package.json b/app/package.json
index 5a24f4cb370418f84e9b8eafcfc0edc61947c442..212b8d78fd4e275777bcc603cb4731a530966c23 100644
--- a/app/package.json
+++ b/app/package.json
@@ -1,6 +1,6 @@
 {
   "name": "nodenogg.in",
-  "version": "0.1.35",
+  "version": "0.1.47",
   "private": true,
   "scripts": {
     "serve": "vue-cli-service serve",
@@ -9,30 +9,31 @@
     "lint:fix": "vue-cli-service lint --fix"
   },
   "dependencies": {
-    "core-js": "^3.6.5",
+    "core-js": "^3.8.1",
     "file-loader": "^6.2.0",
-    "ipfs": "^0.51.0",
-    "marked": "^1.2.2",
-    "pixi.js": "^5.3.3",
+    "ipfs": "^0.52.3",
+    "marked": "^1.2.7",
     "pouchdb": "^7.2.2",
     "vue": "^2.6.12",
-    "vue-draggable-resizable": "^2.2.0",
+    "vue-draggable-resizable": "^2.3.0",
     "vue-emoji-picker": "^1.0.1",
-    "vue-router": "^3.4.8",
-    "vuex": "^3.5.1"
+    "vue-router": "^3.4.9",
+    "vue-swatches": "^2.1.0",
+    "vuedraggable": "^2.24.3",
+    "vuex": "^3.6.0"
   },
   "devDependencies": {
-    "@vue/cli-plugin-babel": "^4.5.8",
-    "@vue/cli-plugin-eslint": "^4.5.8",
-    "@vue/cli-plugin-router": "^4.5.8",
-    "@vue/cli-plugin-vuex": "^4.5.8",
-    "@vue/cli-service": "^4.5.8",
+    "@vue/cli-plugin-babel": "^4.5.9",
+    "@vue/cli-plugin-eslint": "^4.5.9",
+    "@vue/cli-plugin-router": "^4.5.9",
+    "@vue/cli-plugin-vuex": "^4.5.9",
+    "@vue/cli-service": "^4.5.9",
     "@vue/eslint-config-prettier": "^6.0.0",
     "babel-eslint": "^10.0.3",
-    "eslint": "^7.12.1",
-    "eslint-plugin-prettier": "^3.1.4",
-    "eslint-plugin-vue": "^7.0.0",
-    "prettier": "^2.1.2",
+    "eslint": "^7.16.0",
+    "eslint-plugin-prettier": "^3.3.0",
+    "eslint-plugin-vue": "^7.3.0",
+    "prettier": "^2.2.1",
     "vue-template-compiler": "^2.6.12"
   }
 }
diff --git a/app/src/App.vue b/app/src/App.vue
index d6dc96eb99b715de647cd615f89a5ed905455234..d9bc854943cb20ce29e82758065cb25bb2bfb5d2 100644
--- a/app/src/App.vue
+++ b/app/src/App.vue
@@ -1,7 +1,10 @@
 <template>
   <div id="app">
     <navigation />
+
     <router-view />
+    <!-- <router-view v-if="this.window.width < 600" name="this.name" />
+    <router-view v-else to="/organise" /> -->
   </div>
 </template>
 
@@ -11,12 +14,30 @@ import Navigation from './components/Navigation'
 export default {
   data: function () {
     return {
+      // name: '',
+      // window: {
+      //   width: 0,
+      //   height: 0,
+      // },
       routes: routes.filter((route) => !!route.name),
     }
   },
   components: {
     navigation: Navigation,
   },
+  // mounted() {
+  //   window.addEventListener('resize', this.handleResize)
+  //   this.handleResize()
+  //   this.name = routes[1].name
+  // },
+  // destroyed() {
+  //   window.removeEventListener('resize', this.handleResize)
+  // },
+  // methods: {
+  //   handleResize() {
+  //     this.window.width = window.innerWidth
+  //   },
+  // },
 }
 </script>
 <style>
diff --git a/app/src/components/CardsLayer.vue b/app/src/components/CardsLayer.vue
index 16e4a98b406f6704e46124b6f8f240dd998390d5..b0f9d105a08d8955de2ea5edb3cd51420d20b03d 100644
--- a/app/src/components/CardsLayer.vue
+++ b/app/src/components/CardsLayer.vue
@@ -1,97 +1,316 @@
 <template>
   <div>
-    <div v-for="(value, index) in configPositions" v-bind:key="index">
-      <div class="nodes" v-if="nodeid == value.node_id && deleted == false">
-        <form>
-          <div v-if="value.read_mode == false">
-            <div v-for="value in $options.myArray" v-bind:key="value.node_id">
+    <draggable
+      id="dragger"
+      class="grid"
+      name="grid"
+      @start="drag = true"
+      @end="drag = false"
+      @update="nodePositionIndex"
+    >
+      <div v-for="(value, index) in configPositions" v-bind:key="index">
+        <div v-for="(nodes, index) in $options.myArray" v-bind:key="index">
+          <form
+            class="nodes cell"
+            :style="{
+              backgroundColor: nodes.color,
+            }"
+            v-if="nodes.node_id == value.node_id"
+          >
+            <template v-if="nodes.read_mode == false">
               <textarea
-                v-if="nodeid == value.node_id"
                 @focus="editTrue(true)"
                 @blur="editTrue(false)"
                 autofocus
-                v-model="value.node_text"
+                v-focus
+                v-model="nodes.node_text"
                 @input="editNode"
-                :id="nodeid"
+                :id="nodes.node_id"
                 ref="nodetext"
                 placeholder="Type your thoughts and ideas here! (auto saved every keystroke)"
               ></textarea>
+            </template>
+            <template v-else>
+              <p
+                :id="nodes.node_id"
+                :inner-html.prop="nodes.node_text | marked"
+              ></p>
+            </template>
+            <div class="btn-row">
+              <SvgButton
+                buttonClass="nodes"
+                @click.prevent="deleteFlag(nodes.node_id), updateNodes()"
+              />
+              <SvgButton2
+                buttonClass="nodes"
+                @click.prevent="
+                  readFlag(nodes.node_id, nodes.read_mode), updateNodes()
+                "
+              />
+              <v-swatches
+                v-model="color"
+                @input="chooseColor(color, nodes.node_id)"
+                :swatches="swatches"
+                :shapes="shapes"
+                show-border
+                show-fallback
+                fallback-input-type="color"
+              >
+                <SvgButton3 buttonClass="nodes" @click.prevent slot="trigger" />
+              </v-swatches>
             </div>
-            <p class="info">*markdown supported &amp; autosaves</p>
-          </div>
-          <div class="readmode" v-if="value.read_mode && deleted == false">
-            <p :id="nodeid" :inner-html.prop="nodetext | marked"></p>
-          </div>
-          <div class="allemoji">
-            <div
-              class="eachemoji"
-              v-for="(emojis, index) in configEmoji"
-              :key="index"
-            >
-              <p v-if="nodeid == emojis.node_id">
-                {{ emojis.emoji_text }}
-              </p>
+
+            <div class="allemoji">
+              <div
+                class="eachemoji"
+                v-for="(emojis, index) in configEmoji"
+                :key="index"
+              >
+                <template v-if="emojis.node_id == nodes.node_id">{{
+                  emojis.emoji_text
+                }}</template>
+              </div>
             </div>
-          </div>
+          </form>
+        </div>
+      </div>
 
-          <div class="btn-row">
-            <SvgButton buttonClass="nodes" @click.prevent="deleteFlag()" />
-            <div v-if="value.read_mode == true && deleted == false">
-              <SvgButton2 buttonClass="nodes" @click.prevent="readFlag()" />
+      <div
+        v-for="(othernodes, index) in othernodes_filtered"
+        v-bind:key="index.nodeid"
+      >
+        <div
+          class="othernodes cell"
+          :style="{
+            backgroundColor: othernodes.color,
+          }"
+        >
+          <p :inner-html.prop="othernodes.node_text | marked"></p>
 
-              <!-- <BaseButton class="read" buttonClass="action" @click="readFlag()"
-                >Edit Mode
-              </BaseButton> -->
-            </div>
-            <div v-else>
-              <SvgButton2 buttonClass="nodes" @click.prevent="readFlag()" />
+          <div class="eeee">
+            <input :value="othernodes.node_id" name="id" readonly hidden />
+            <input
+              id="emojifield"
+              class="regular-input"
+              v-model="input"
+              readonly
+            />
+
+            <emoji-picker @emoji="append" :search="search">
+              <div
+                class="emoji-invoker"
+                slot="emoji-invoker"
+                slot-scope="{ events: { click: clickEvent } }"
+                @click.stop="clickEvent"
+              >
+                <svg
+                  height="24"
+                  viewBox="0 0 24 24"
+                  width="24"
+                  xmlns="http://www.w3.org/2000/svg"
+                >
+                  <path d="M0 0h24v24H0z" fill="none" />
+                  <path
+                    d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z"
+                  />
+                </svg>
+              </div>
+              <div slot="emoji-picker" slot-scope="{ emojis, insert, display }">
+                <div
+                  class="emoji-picker"
+                  :style="{ top: display.y + 'px', left: display.x + 'px' }"
+                >
+                  <div class="emoji-picker__search">
+                    <input type="text" v-model="search" />
+                  </div>
+                  <div>
+                    <div
+                      v-for="(emojiGroup, category) in emojis"
+                      :key="category"
+                    >
+                      <h5>{{ category }}</h5>
+                      <div class="emojis">
+                        <span
+                          v-for="(emoji, emojiName) in emojiGroup"
+                          :key="emojiName"
+                          @click="insert(emoji), sentReact(othernodes.node_id)"
+                          :title="emojiName"
+                          >{{ emoji }}</span
+                        >
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </emoji-picker>
+
+            <div class="allemoji">
+              <div
+                class="eachemoji"
+                v-for="(emojis, index) in configEmoji"
+                :key="index"
+              >
+                <p v-if="othernodes.node_id == emojis.node_id">
+                  {{ emojis.emoji_text }}
+                </p>
+              </div>
             </div>
           </div>
-        </form>
+        </div>
       </div>
-    </div>
+    </draggable>
   </div>
 </template>
 
 <script>
 import { mapState } from 'vuex'
 import marked from 'marked'
+import draggable from 'vuedraggable'
+import EmojiPicker from 'vue-emoji-picker'
 import SvgButton from '@/components/SvgButton'
 import SvgButton2 from '@/components/SvgButton2'
+import SvgButton3 from '@/components/SvgButton3'
+import VSwatches from 'vue-swatches'
+import 'vue-swatches/dist/vue-swatches.css'
+
 var readmode
+var nodeid
+//var nodesort
+var emojitext
 
 export default {
   name: 'CardsLayer',
 
+  props: {
+    added: Boolean,
+  },
   data: function () {
     return {
+      color: '#9bc2d8',
+      shapes: 'circles',
+      // swatches: [{ color: '#F493A7', showBorder: true }],
+      swatches: [
+        ['#EB5757', '#F2994A', '#F2C94C'],
+        ['#219653', '#27AE60', '#6FCF97'],
+        ['#2F80ED', '#2D9CDB', '#56CCF2'],
+        ['#9B51E0', '#BB6BD9', '#E9B7FC'],
+      ],
       localreadmode: false,
+      myArray: null,
+      update: false,
+      input: '',
+      search: '',
+      orders: this.configPositions,
     }
   },
 
-  props: {
-    nodeid: String,
-    nodetext: String,
-    deleted: Boolean,
-  },
-
   filters: {
     marked: marked,
   },
+  computed: {
+    ...mapState({
+      otherNodes: (state) => state.otherNodes,
+      myNodes: (state) => state.myNodes,
+      configPositions: (state) => state.configPositions,
+      configEmoji: (state) => state.configEmoji,
+    }),
+
+    nodes_filtered: function () {
+      return this.myNodes.filter((nodes) => {
+        return nodes.deleted == false
+      })
+    },
+    othernodes_filtered: function () {
+      return this.otherNodes.filter((othernodes) => {
+        return othernodes.deleted == false
+      })
+    },
+  },
 
-  computed: mapState({
-    myNodes: (state) => state.myNodes,
-    configPositions: (state) => state.configPositions,
-    configEmoji: (state) => state.configEmoji,
-  }),
+  // this is to stop sync chasing bug
 
-  myArray: null,
-  created() {
-    this.$options.myArray = this.myNodes
-    this.readFlag
+  mounted() {
+    //access the custom option using $options
+    const unwatch = this.$watch('nodes_filtered', (value) => {
+      this.$options.myArray = this.nodes_filtered
+
+      this.$forceUpdate()
+      // ignore falsy values
+      if (!value) return
+
+      // stop watching when nodes_filtered[] is not empty
+      if (value && value.length) unwatch()
+
+      // process value here
+    })
+  },
+
+  watch: {
+    added: {
+      deep: true,
+
+      handler() {
+        setTimeout(this.loadData, 200)
+      },
+    },
+    update: {
+      deep: true,
+
+      handler() {
+        setTimeout(this.loadData, 200)
+      },
+    },
   },
 
   methods: {
+    nodePositionIndex() {
+      // var i
+      // var j
+      // var dragger = document.getElementById('dragger')
+      // // console.log(dragger.childNodes.length)
+      // for (i = 0; i < dragger.childNodes.length; i++) {
+      //   var count = i
+      //   for (j = 0; j < Object.keys(this.configPositions).length; j++) {
+      //     if (dragger.childNodes[i].firstChild != 'undefined') {
+      //       if (
+      //         dragger.childNodes[i].firstChild[0].id ==
+      //         this.configPositions[j].node_id
+      //       ) {
+      //         nodeid = this.configPositions[j].node_id
+      //         nodesort = count
+      //         this.$store.dispatch('sortNode', { nodeid, nodesort })
+      //       }
+      //     }
+      //     //  console.log(nodesort)
+      //   }
+      // }
+    },
+    chooseColor(color, nodeid) {
+      this.$store.dispatch('colorNode', { nodeid, color })
+      this.$options.myArray = this.nodes_filtered
+    },
+
+    append(emoji) {
+      this.input += emoji
+    },
+    sentReact(e) {
+      emojitext = this.input
+      nodeid = e
+
+      this.$store.dispatch('addEmoji', {
+        nodeid,
+        emojitext,
+      })
+
+      this.input = ''
+    },
+    updateNodes() {
+      this.update = !this.update
+    },
+    loadData() {
+      this.$options.myArray = this.nodes_filtered
+      this.$forceUpdate()
+    },
     editNode(e) {
       var nodeid = e.target.id
       var nodetext = e.target.value
@@ -99,53 +318,72 @@ export default {
     },
 
     editTrue(e) {
-      this.$emit('editTrue', e)
+      this.$emit('edit-true', e)
     },
 
     deleteFlag(e) {
-      e = this.nodeid
       if (confirm('Confirm discard?')) {
         this.$store.dispatch('deleteFlag', { e })
       } else {
         // nothing happens
       }
     },
-    readFlag(e) {
-      e = this.nodeid
-
-      var i
-      for (i = 0; i < Object.keys(this.configPositions).length; i++) {
-        if (this.configPositions[i].node_id == this.nodeid) {
-          this.localreadmode = this.configPositions[i].read_mode
-        }
-      }
+    readFlag(e, f) {
+      readmode = f
+      readmode = !readmode
+      this.$store.dispatch('readFlag', { e, readmode })
 
-      if (this.localreadmode == true) {
-        readmode = false
-        this.$store.dispatch('readFlag', { e, readmode })
+      if (readmode == true) {
         this.mode = 'Read'
       } else {
-        readmode = true
-        this.$store.dispatch('readFlag', { e, readmode })
         this.mode = 'Edit'
       }
     },
-    // setFocus() {
-    //   this.$refs.nodetext.focus()
-    // },
   },
   components: {
     SvgButton,
     SvgButton2,
+    SvgButton3,
+    VSwatches,
+    EmojiPicker,
+    draggable,
   },
 }
 </script>
 
 <style lang="css" scoped>
+/* .grid {
+  display: flex;
+  flex-wrap: wrap;
+} */
+
+.grid {
+  display: grid;
+  /* grid-template-columns: repeat(3, 350px); */
+  /* grid-template-rows: repeat(3, 350px); */
+  grid-gap: 0.2em;
+}
+
+.grid-move {
+  transition: all 0.3s;
+}
+
 .nodes {
+  padding: 0.5em 0.5em;
   min-width: 343px;
-  max-width: 343px;
+  /* max-width: 343px; */
   border: 2px dashed black;
+  /* background-color: rgb(155, 194, 216); */
+  margin-top: 1em;
+  margin-left: 0.5em;
+  margin-right: 0.5em;
+}
+
+.othernodes {
+  padding: 0.5em 0.5em;
+  min-width: 343px;
+  /* max-width: 343px; */
+  border: 2px solid black;
   background-color: rgb(155, 194, 216);
   margin-top: 1em;
   margin-left: 0.5em;
@@ -179,8 +417,7 @@ textarea {
   display: flex;
   justify-content: center;
   flex-wrap: wrap;
-  padding: 0 15px;
-  border-radius: 4px;
+  padding: 0 25px;
 }
 
 .allemoji {
@@ -195,9 +432,116 @@ textarea {
   margin: 0em;
 }
 
+input {
+  display: none;
+}
+
+.allemoji {
+  font-size: 2em;
+  display: grid;
+  grid-template-columns: repeat(auto-fill, minmax(0, auto));
+
+  /* float: left; */
+}
+
+.eachemoji p {
+  margin: 0em;
+}
+
+.emoji-invoker {
+  top: -0.5rem;
+  right: 0.5rem;
+  width: 1.5rem;
+  height: 2.5rem;
+  /* transform: scale(1.6); */
+  /* margin: 0em 0em 1em 0em; */
+  /* border-radius: 50%; */
+  cursor: pointer;
+  transition: all 0.8s;
+}
+.emoji-invoker:hover > svg {
+  fill: #84949b;
+
+  /* transform: scale(1.5); */
+}
+.emoji-invoker > svg {
+  fill: #b1c6d0;
+  margin-top: 10px;
+  margin-left: 0.2em;
+  transform: scale(1.5);
+}
+
+.emoji-picker {
+  transform: scale(1.2);
+  z-index: 1;
+  font-family: Montserrat;
+  border: 1px solid #ccc;
+  width: 18rem;
+  height: 20rem;
+  overflow: scroll;
+  padding: 1rem;
+  box-sizing: border-box;
+  border-radius: 0.5rem;
+  background: #fff;
+  box-shadow: 1px 1px 8px #c7dbe6;
+  margin-top: 3em;
+}
+.emoji-picker__search {
+  display: flex;
+}
+.emoji-picker__search > input {
+  flex: 1;
+  border-radius: 10rem;
+  border: 1px solid #ccc;
+  padding: 0.5rem 1rem;
+  outline: none;
+}
+.emoji-picker h5 {
+  margin-top: 0;
+  margin-bottom: 0;
+  color: #b1b1b1;
+  text-transform: uppercase;
+  font-size: 0.8rem;
+  cursor: default;
+}
+.emoji-picker .emojis {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+}
+.emoji-picker .emojis:after {
+  content: '';
+  flex: auto;
+}
+.emoji-picker .emojis span {
+  padding: 0.2rem;
+  cursor: pointer;
+  border-radius: 5px;
+}
+.emoji-picker .emojis span:hover {
+  background: #ececec;
+  cursor: pointer;
+}
+
 @media only screen and (max-width: 600px) {
   .readmode >>> a {
     font-size: 2em;
+    word-break: break-all;
+    padding-right: 0.5em;
+  }
+}
+
+@media (min-width: 700px) {
+  .grid {
+    grid-template-columns: repeat(2, 1fr);
+  }
+}
+
+@media (min-width: 1100px) {
+  .grid {
+    grid-template-columns: repeat(3, 1fr);
+    margin: 0 auto;
+    max-width: 1100px;
   }
 }
 </style>
diff --git a/app/src/components/CardsLayerOld.vue b/app/src/components/CardsLayerOld.vue
new file mode 100644
index 0000000000000000000000000000000000000000..df9bd254de869c92ea3822146a9ccf0cbc134de4
--- /dev/null
+++ b/app/src/components/CardsLayerOld.vue
@@ -0,0 +1,235 @@
+<template>
+  <div class="grid">
+    <div v-for="(nodes, index) in $options.myArray" v-bind:key="index">
+      <form class="nodes">
+        <template v-if="nodes.read_mode == false">
+          <textarea
+            @focus="editTrue(true)"
+            @blur="editTrue(false)"
+            autofocus
+            v-model="nodes.node_text"
+            @input="editNode"
+            :id="nodes.node_id"
+            ref="nodetext"
+            placeholder="Type your thoughts and ideas here! (auto saved every keystroke)"
+          ></textarea>
+        </template>
+        <template v-else>
+          <p
+            :id="nodes.node_id"
+            :inner-html.prop="nodes.node_text | marked"
+          ></p>
+        </template>
+        <div class="btn-row">
+          <SvgButton
+            buttonClass="nodes"
+            @click.prevent="deleteFlag(nodes.node_id), updateNodes()"
+          />
+          <SvgButton2
+            buttonClass="nodes"
+            @click.prevent="
+              readFlag(nodes.node_id, nodes.read_mode), updateNodes()
+            "
+          />
+        </div>
+
+        <div class="allemoji">
+          <div
+            class="eachemoji"
+            v-for="(emojis, index) in configEmoji"
+            :key="index"
+          >
+            <template v-if="emojis.node_id == nodes.node_id">{{
+              emojis.emoji_text
+            }}</template>
+          </div>
+        </div>
+      </form>
+    </div>
+  </div>
+</template>
+
+<script>
+import { mapState } from 'vuex'
+import marked from 'marked'
+
+import SvgButton from '@/components/SvgButton'
+import SvgButton2 from '@/components/SvgButton2'
+var readmode
+
+export default {
+  name: 'CardsLayer',
+
+  props: {
+    added: Boolean,
+  },
+  data: function () {
+    return {
+      localreadmode: false,
+      myArray: null,
+      update: false,
+    }
+  },
+
+  filters: {
+    marked: marked,
+  },
+  computed: {
+    ...mapState({
+      myNodes: (state) => state.myNodes,
+      configPositions: (state) => state.configPositions,
+      configEmoji: (state) => state.configEmoji,
+    }),
+
+    nodes_filtered: function () {
+      return this.myNodes.filter((nodes) => {
+        return nodes.deleted == false
+      })
+    },
+  },
+
+  // this is to stop sync chasing bug
+
+  mounted() {
+    //access the custom option using $options
+    const unwatch = this.$watch('nodes_filtered', (value) => {
+      this.$options.myArray = this.nodes_filtered
+
+      this.$forceUpdate()
+      // ignore falsy values
+      if (!value) return
+
+      // stop watching when nodes_filtered[] is not empty
+      if (value && value.length) unwatch()
+
+      // process value here
+    })
+  },
+
+  watch: {
+    added: {
+      deep: true,
+
+      handler() {
+        setTimeout(this.loadData, 200)
+      },
+    },
+    update: {
+      deep: true,
+
+      handler() {
+        setTimeout(this.loadData, 200)
+      },
+    },
+  },
+
+  methods: {
+    updateNodes() {
+      this.update = !this.update
+    },
+    loadData() {
+      this.$options.myArray = this.nodes_filtered
+      this.$forceUpdate()
+    },
+    editNode(e) {
+      var nodeid = e.target.id
+      var nodetext = e.target.value
+      this.$store.dispatch('editNode', { nodeid, nodetext })
+    },
+
+    editTrue(e) {
+      this.$emit('edit-true', e)
+    },
+
+    deleteFlag(e) {
+      if (confirm('Confirm discard?')) {
+        this.$store.dispatch('deleteFlag', { e })
+      } else {
+        // nothing happens
+      }
+    },
+    readFlag(e, f) {
+      readmode = f
+      readmode = !readmode
+      this.$store.dispatch('readFlag', { e, readmode })
+
+      if (readmode == true) {
+        this.mode = 'Read'
+      } else {
+        this.mode = 'Edit'
+      }
+    },
+  },
+  components: {
+    SvgButton,
+    SvgButton2,
+  },
+}
+</script>
+
+<style lang="css" scoped>
+.grid {
+  display: flex;
+  flex-wrap: wrap;
+}
+.nodes {
+  min-width: 343px;
+  max-width: 343px;
+  border: 2px dashed black;
+  background-color: rgb(155, 194, 216);
+  margin-top: 1em;
+  margin-left: 0.5em;
+  margin-right: 0.5em;
+}
+
+.readmode {
+  margin-top: 1em;
+  margin-left: 1em;
+  padding-right: 1em;
+}
+
+textarea {
+  width: 100%;
+  height: 175px;
+  resize: none;
+  font-size: 18px;
+  box-sizing: border-box;
+  font-family: 'Inter var', Helvetica, sans-serif;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+
+  border: none;
+  outline: none;
+  background-color: rgb(187, 227, 255);
+  scrollbar-color: yellow rgb(187, 227, 255);
+}
+.btn-row {
+  position: relative;
+  margin-bottom: 5px;
+  display: flex;
+  justify-content: center;
+  flex-wrap: wrap;
+  padding: 0 15px;
+  border-radius: 4px;
+}
+
+.allemoji {
+  font-size: 2em;
+  display: grid;
+  grid-template-columns: repeat(auto-fill, minmax(0, auto));
+
+  /* float: left; */
+}
+
+.eachemoji p {
+  margin: 0em;
+}
+
+@media only screen and (max-width: 600px) {
+  .readmode >>> a {
+    font-size: 2em;
+    word-break: break-all;
+    padding-right: 0.5em;
+  }
+}
+</style>
diff --git a/app/src/components/ConnectionsLayer.vue b/app/src/components/ConnectionsLayer.vue
index 2addb63c675feb4d4a8d584b56b107ed31ca3086..f801d947ecdd1250d454856524021e63f8fa9d47 100644
--- a/app/src/components/ConnectionsLayer.vue
+++ b/app/src/components/ConnectionsLayer.vue
@@ -1,12 +1,84 @@
 <template>
-  <div class="connections">
-    <canvas ref="pixi" id="pixi"></canvas>
+  <div>
+    <!-- view box same width as canvas -->
+    <!-- falls off edge -->
+    <svg id="connections" viewBox="0 0 2000 2000">
+      <g v-for="(value, index) in positions_filtered" v-bind:key="index">
+        <!-- still empty divs -->
+        <g v-for="(nodes, index) in nodes_filtered" v-bind:key="index">
+          <template v-if="toolmode == 'connect'">
+            <circle
+              v-if="nodes.node_id == value.node_id"
+              :cx="value.x_pos + value.width"
+              :cy="value.y_pos + value.height / 4"
+              r="15"
+              width="30"
+              height="30"
+              @mousedown.prevent="
+                buttonPress(nodes.node_id, value.x_pos, value.y_pos)
+              "
+              @mouseup.prevent="
+                buttonUp(nodes.node_id, value.x_pos, value.y_pos)
+              "
+            />
+          </template>
+          <g v-for="(lines, index) in configConnections" v-bind:key="index">
+            <line
+              v-if="lines.start_id == value.node_id"
+              :x1="lines.x_pos_start + value.width"
+              :y1="lines.y_pos_start + value.height / 4"
+              :x2="lines.x_pos_end"
+              :y2="lines.y_pos_end + value.height / 4"
+              style="stroke: rgb(255, 0, 0); stroke-width: 5"
+            />
+          </g>
+        </g>
+      </g>
+
+      <g
+        v-for="(others, index) in otherpositions_filtered"
+        v-bind:key="'o' + index"
+      >
+        <g v-for="(othernodes, index) in otherNodes" v-bind:key="index">
+          <template v-if="toolmode == 'connect'">
+            <circle
+              v-if="othernodes.node_id == others.node_id"
+              :cx="others.x_pos + others.width"
+              :cy="others.y_pos + others.height / 4"
+              r="15"
+              width="30"
+              height="30"
+              @mousedown.prevent="
+                buttonPress(othernodes.node_id, others.x_pos, others.y_pos)
+              "
+              @mouseup.prevent="
+                buttonUp(othernodes.node_id, others.x_pos, others.y_pos)
+              "
+            />
+          </template>
+
+          <g
+            v-for="(otherlines, index) in configConnections"
+            v-bind:key="index"
+          >
+            <line
+              v-if="otherlines.start_id == others.node_id"
+              :x1="otherlines.x_pos_start + others.width"
+              :y1="otherlines.y_pos_start + others.height / 4"
+              :x2="otherlines.x_pos_end"
+              :y2="otherlines.y_pos_end + others.height / 4"
+              style="stroke: rgb(255, 0, 0); stroke-width: 5"
+            />
+          </g>
+        </g>
+      </g>
+    </svg>
   </div>
 </template>
 
 <script>
 import { mapState } from 'vuex'
-import * as PIXI from 'pixi.js'
+
 //var initialMoveTo
 //var id
 var fromnode
@@ -15,296 +87,151 @@ var xposstart
 var yposstart
 var xposend
 var yposend
-var endState = false
+var connectmode = false
+let newLine
+
+let drawing = false
 
 export default {
   name: 'ConnectionsLayer',
 
   data() {
     return {
-      //  localtoolstate: this.toolmode,
+      id: Number,
+      x: Number,
+      y: Number,
     }
   },
-  computed: mapState({
-    configConnections: (state) => state.configConnections,
-    configPositions: (state) => state.configPositions,
-    myNodes: (state) => state.myNodes,
-    otherNodes: (state) => state.otherNodes,
-    toolmode: (state) => state.ui.mode,
-    // connectionstate: (state) => state.connectionstate,
-  }),
+  computed: {
+    ...mapState({
+      configConnections: (state) => state.configConnections,
+      configPositions: (state) => state.configPositions,
+      myNodes: (state) => state.myNodes,
+      otherNodes: (state) => state.otherNodes,
+      toolmode: (state) => state.ui.mode,
+      // connectionstate: (state) => state.connectionstate,
+    }),
+
+    nodes_filtered: function () {
+      return this.myNodes.filter((nodes) => {
+        return nodes.deleted == false
+      })
+    },
 
-  watch: {
-    configConnections: {
-      deep: true,
+    positions_filtered: function () {
+      return this.configPositions.filter((positions) => {
+        return this.myNodes.some((node) => {
+          return positions.node_id == node.node_id
+        })
+      })
+    },
 
-      handler() {
-        this.connectionsDraw()
-      },
+    otherpositions_filtered: function () {
+      return this.configPositions.filter((otherpositions) => {
+        return this.otherNodes.some((node) => {
+          return otherpositions.node_id == node.node_id
+        })
+      })
     },
+  },
+
+  watch: {
     toolmode: {
       handler() {
         this.toolState()
       },
     },
   },
-
   methods: {
     toolState() {
       if (this.toolmode == 'connect') {
-        this.buttonsDraw()
+        connectmode = true
       } else {
-        this.connectionsDraw()
+        connectmode = false
       }
     },
+    // this should only fire if toolmode = connect
+    buttonPress(id, x, y) {
+      if (connectmode == true) {
+        drawing = true
+        this.id = id
+        this.x = x
+        this.y = y
+
+        newLine = document.createElementNS('http://www.w3.org/2000/svg', 'line')
+
+        const pt = document.getElementById('connections').createSVGPoint()
+        pt.x = event.clientX
+        pt.y = event.clientY
+        const svgP = pt.matrixTransform(
+          document.getElementById('connections').getScreenCTM().inverse()
+        )
 
-    makeConnection(id, xpos, ypos) {
-      if (endState == false) {
-        fromnode = id
-        xposstart = xpos
-        yposstart = ypos
-
-        //count = 1
-        // this.$store.dispatch('connectionState', true)
-      } else if (endState == true) {
-        tonode = id
-        xposend = xpos
-        yposend = ypos
+        newLine.setAttribute('stroke', 'red')
+        newLine.setAttribute('stroke-width', '5')
+        newLine.setAttribute('x1', svgP.x)
+        newLine.setAttribute('y1', svgP.y)
+        newLine.setAttribute('x2', svgP.x)
+        newLine.setAttribute('y2', svgP.y)
 
-        // count = 0
-        //  this.$store.dispatch('connectionState', false)
-        // console.log(fromnode, tonode, xposstart, yposstart, xposend, yposend)
-        this.$store.dispatch('makeConnect', {
-          fromnode,
-          tonode,
-          xposstart,
-          yposstart,
-          xposend,
-          yposend,
-        })
-        endState = false
+        document.getElementById('connections').appendChild(newLine)
       }
     },
-    buttonsDraw() {
-      var i
-      var j
-      //var n = 1
-      var ref = this
-      var buttonMap = {}
-      var buttonMapOther = {}
-
-      this.canvas = this.$refs.pixi
-      const stage = this.PIXIApp.stage
-      //const allButtons = new PIXI.Container()
-
-      for (i = 0; i < Object.keys(this.myNodes).length; i++) {
-        buttonMap[i] = new PIXI.Graphics()
-        // console.log(buttonMap[i])
-        for (j = 0; j < Object.keys(this.configPositions).length; j++) {
-          if (
-            this.configPositions[j].node_id == this.myNodes[i].node_id &&
-            this.myNodes[i].deleted == false
-          ) {
-            buttonMap[i].name = this.myNodes[i].node_id
-            // console.log(button_one.name)
-            buttonMap[i].lineStyle(1)
-            buttonMap[i].beginFill(0xcab6ff, 1)
-            // x, y, radius
-
-            buttonMap[i].drawCircle(
-              this.configPositions[j].x_pos + this.configPositions[j].width,
-              this.configPositions[j].y_pos +
-                this.configPositions[j].height / 2,
-              15
-            )
-            buttonMap[i].endFill()
-            // names it the last one only?
-          }
-          //  allButtons.addChild(buttonMap[i])
-          //  stage.addChild(allButtons)
-          stage.addChild(buttonMap[i])
-          // Opt-in to interactivity
-          buttonMap[i].interactive = true
-          // Shows hand cursor
-          buttonMap[i].buttonMode = true
-        }
-
-        buttonMap[i]
-          .on('pointerdown', onDragStart)
-          .on('pointerdown', start)
-          .on('pointerup', onDragEnd)
-          .on('pointerup', finish)
-          .on('pointerupoutside', onDragEndOutside)
-          .on('pointermove', onDragMove)
-      }
-
-      for (i = 0; i < Object.keys(this.otherNodes).length; i++) {
-        buttonMapOther[i] = new PIXI.Graphics()
-        // console.log(buttonMap[i])
-        for (j = 0; j < Object.keys(this.configPositions).length; j++) {
-          if (this.configPositions[j].node_id == this.otherNodes[i].node_id) {
-            buttonMapOther[i].name = this.otherNodes[i].node_id
-            // console.log(button_one.name)
-            buttonMapOther[i].lineStyle(1)
-            buttonMapOther[i].beginFill(0xcab6ff, 1)
-            // x, y, radius
-
-            buttonMapOther[i].drawCircle(
-              this.configPositions[j].x_pos + this.configPositions[j].width,
-              this.configPositions[j].y_pos +
-                this.configPositions[j].height / 2,
-              15
-            )
-            buttonMapOther[i].endFill()
-            // names it the last one only?
-          }
-          stage.addChild(buttonMapOther[i])
-
-          // Opt-in to interactivity
-          buttonMapOther[i].interactive = true
-          // Shows hand cursor
-          buttonMapOther[i].buttonMode = true
-        }
-
-        buttonMapOther[i]
-          .on('pointerdown', onDragStart)
-          .on('pointerdown', start)
-          .on('pointerup', finish)
-          .on('pointerup', onDragEnd)
-          .on('pointerupoutside', onDragEndOutside)
-          .on('pointermove', onDragMove)
-      }
-
-      let line = new PIXI.Graphics()
-      var initialMoveTo
-      let lines = []
-
-      function start(event) {
-        // console.log(this.getChildByName)
-        this.id = this.name
-        ref.makeConnection(this.id, event.data.global.x, event.data.global.y)
-      }
-
-      function finish(event) {
-        this.id = this.name
-        if (this.id != fromnode) {
-          endState = true
-          ref.makeConnection(this.id, event.data.global.x, event.data.global.y)
-        } else {
-          endState = false
-        }
-      }
-
-      function onDragStart(event) {
-        this.dragging = true
-        // returns on the last one in the loop
-        // console.log(button_one.name)
-        let mouseX = event.data.global.x
-        let mouseY = event.data.global.y
 
-        initialMoveTo = [mouseX, mouseY]
-
-        line.lineStyle(8, 0xcab6ff)
-        line.moveTo(mouseX, mouseY)
-
-        lines = [line].concat(lines)
-
-        stage.addChild(line)
-      }
-
-      function onDragEnd() {
-        //endState = true
-        this.dragging = false
-        stage.removeChild(line)
-      }
-
-      function onDragEndOutside() {
-        stage.removeChild(line)
-        // console.log('outside')
-        // console.log(this.name)
-        // console.log(fromnode)
-        // if (this.name != fromnode) {
-        //   console.log('diff')
-        //   endState = true
-        //   this.dragging = false
-        //   stage.removeChild(line)
-        //   this.finish()
-        // }
-        // } else {
-        //   endState = false
-        //   this.dragging = false
-        //   stage.removeChild(line)
-        // }
-      }
-
-      function onDragMove(event) {
-        if (this.dragging) {
-          let mouseX = event.data.global.x
-          let mouseY = event.data.global.y
-          lines[0].clear()
-          lines[0].lineStyle(8, 0xcab6ff)
-          lines[0].moveTo(initialMoveTo[0], initialMoveTo[1])
-          lines[0].lineTo(mouseX, mouseY)
-        }
-      }
+    buttonUp(id, x, y) {
+      drawing = false
+      document.getElementById('connections').removeChild(newLine)
+      fromnode = this.id
+      xposstart = this.x
+      yposstart = this.y
+      tonode = id
+      xposend = x
+      yposend = y
+
+      this.$store.dispatch('makeConnect', {
+        fromnode,
+        tonode,
+        xposstart,
+        yposstart,
+        xposend,
+        yposend,
+      })
     },
+  },
+}
 
-    connectionsDraw() {
-      var i
-      //  var j
-      this.canvas = this.$refs.pixi
-      const stage = this.PIXIApp.stage
-      let graphics = new PIXI.Graphics()
-      //let line = new PIXI.Graphics()
-
-      graphics.lineStyle(8, 0xcab6ff)
-      // move the lines to start and end pos based on if to_node == node_id
-      // or from_id == node_id
-      //start_id == node_id
-      // this will put them in the same place as buttons
-
-      //     for (i = 0; i < Object.keys(this.otherNodes).length; i++) {
-
-      // for (j = 0; j < Object.keys(this.configPositions).length; j++) {
-      //   if (this.configConnections[j].start_id == this.otherNodes[i].node_id) {
-
-      // for (j = 0; j < Object.keys(this.otherNodes).length; j++) {
-      for (i = 0; i < Object.keys(this.configConnections).length; i++) {
-        //start
-
-        graphics.moveTo(
-          this.configConnections[i].x_pos_start,
-          this.configConnections[i].y_pos_start
-        )
+function onMouseMove() {
+  //Add code here
+  if (drawing) {
+    // const pt = document.getElementById('connections').createSVGPoint()
+    // pt.x = event.clientX
+    // pt.y = event.clientY
+    // const svgP = pt.matrixTransform(
+    //   document.getElementById('connections').getScreenCTM().inverse()
+    // )
+
+    newLine.setAttribute('x2', event.clientX)
+    newLine.setAttribute('y2', event.clientY)
+  }
+}
+function onMouseUp() {
+  if (drawing) {
+    document.getElementById('connections').removeChild(newLine)
+  }
+}
 
-        //end
-        graphics.lineTo(
-          this.configConnections[i].x_pos_end,
-          this.configConnections[i].y_pos_end
-        )
-      }
-      //  }
-      for (var l = stage.children.length - 1; l >= 0; l--) {
-        stage.removeChild(stage.children[l])
-      }
+function setup() {
+  document.addEventListener('mousemove', onMouseMove)
+  document.addEventListener('mouseup', onMouseUp)
+}
 
-      stage.addChild(graphics)
-      if (this.toolmode == 'connect') {
-        this.buttonsDraw()
-      }
-    },
-  },
-  mounted() {
-    const canvas = this.$refs.pixi
-    this.PIXIApp = new PIXI.Application({
-      width: 3000,
-      height: 3000,
-      antialias: true,
-      transparent: true,
-      view: canvas,
-    })
+window.onload = () => setup()
+</script>
 
-    this.connectionsDraw()
-  },
+<style scoped>
+circle {
+  fill: rgb(187, 227, 255);
+  stroke: black;
+  stroke-width: 2;
 }
-</script>
+</style>
diff --git a/app/src/components/DiscardLayer.vue b/app/src/components/DiscardLayer.vue
index 05e59db7bceae799802f7426c3dac19dd4142843..95c91a4ad0777865675253f08cb26d76ab2efbce 100644
--- a/app/src/components/DiscardLayer.vue
+++ b/app/src/components/DiscardLayer.vue
@@ -15,7 +15,6 @@
             </p>
           </div>
         </div>
-
         <div class="btn-row">
           <BaseButton buttonClass="danger" @click="restoreNode(nodeid)"
             >Restore</BaseButton
diff --git a/app/src/components/ListLayer.vue b/app/src/components/ListLayer.vue
index afc9d8e5d1f0c54d9cf0b2858d895f1a646f2618..a7623d0232c39381df125a9f9c00e8350e955881 100644
--- a/app/src/components/ListLayer.vue
+++ b/app/src/components/ListLayer.vue
@@ -1,62 +1,69 @@
 <template>
   <div>
-    <div v-for="(value, index) in configPositions" v-bind:key="index">
-      <div v-if="nodeid == value.node_id && deleted == false">
-        <form class="nodes">
-          <div v-if="value.read_mode == false">
-            <div v-for="value in $options.myArray" v-bind:key="value.node_id">
-              <textarea
-                v-if="nodeid == value.node_id"
-                @focus="editTrue(true)"
-                @blur="editTrue(false)"
-                autofocus
-                v-model="value.node_text"
-                @input="editNode"
-                :id="nodeid"
-                ref="nodetext"
-                placeholder="Type your thoughts and ideas here! (auto saved every keystroke)"
-              ></textarea>
-            </div>
-            <p class="info">*markdown supported &amp; autosaves</p>
-          </div>
-          <div class="readmode" v-if="value.read_mode && deleted == false">
-            <p :id="nodeid" :inner-html.prop="nodetext | marked"></p>
-          </div>
+    <div v-for="(nodes, index) in $options.myArray" v-bind:key="index">
+      <form
+        class="nodes"
+        :style="{
+          backgroundColor: nodes.color,
+        }"
+      >
+        <template v-if="nodes.read_mode == false">
+          <textarea
+            @focus="editTrue(true)"
+            @blur="editTrue(false)"
+            autofocus
+            v-model="nodes.node_text"
+            @input="editNode"
+            :id="nodes.node_id"
+            v-focus
+            ref="textentry"
+            placeholder="Type your thoughts and ideas here! (auto saved every keystroke)"
+          ></textarea>
+          <p class="info">*markdown supported &amp; autosaves</p>
+        </template>
+        <template v-else>
+          <p
+            :id="nodes.node_id"
+            :inner-html.prop="nodes.node_text | marked"
+          ></p>
+        </template>
 
-          <div class="allemoji">
-            <div
-              class="eachemoji"
-              v-for="(emojis, index) in configEmoji"
-              :key="index"
-            >
-              <p v-if="nodeid == emojis.node_id">
-                {{ emojis.emoji_text }}
-              </p>
-            </div>
-          </div>
+        <div class="btn-row">
+          <SvgButton
+            buttonClass="nodes"
+            @click.prevent="deleteFlag(nodes.node_id), updateNodes()"
+          />
+          <SvgButton2
+            buttonClass="nodes"
+            @click.prevent="
+              readFlag(nodes.node_id, nodes.read_mode), updateNodes()
+            "
+          />
+          <v-swatches
+            v-model="color"
+            @input="chooseColor(color, nodes.node_id)"
+            :swatches="swatches"
+            :shapes="shapes"
+            show-border
+            show-fallback
+            fallback-input-type="color"
+          >
+            <SvgButton3 buttonClass="nodes" @click.prevent slot="trigger" />
+          </v-swatches>
+        </div>
 
-          <div class="btn-row">
-            <!-- <BaseButton buttonClass="danger" @click="deleteFlag()"
-              >Discard</BaseButton
-            > -->
-            <SvgButton buttonClass="nodes" @click.prevent="deleteFlag()" />
-            <div v-if="value.read_mode == true && deleted == false">
-              <SvgButton2 buttonClass="nodes" @click.prevent="readFlag()" />
-
-              <!-- <BaseButton class="read" buttonClass="action" @click="readFlag()"
-                >Edit Mode
-              </BaseButton> -->
-            </div>
-            <div v-else>
-              <SvgButton2 buttonClass="nodes" @click.prevent="readFlag()" />
-
-              <!-- <BaseButton class="read" buttonClass="action" @click="readFlag()"
-                >Read Mode</BaseButton
-              > -->
-            </div>
+        <div class="allemoji">
+          <div
+            class="eachemoji"
+            v-for="(emojis, index) in configEmoji"
+            :key="index"
+          >
+            <template v-if="emojis.node_id == nodes.node_id">{{
+              emojis.emoji_text
+            }}</template>
           </div>
-        </form>
-      </div>
+        </div>
+      </form>
     </div>
   </div>
 </template>
@@ -66,40 +73,100 @@ import { mapState } from 'vuex'
 import marked from 'marked'
 import SvgButton from '@/components/SvgButton'
 import SvgButton2 from '@/components/SvgButton2'
+import SvgButton3 from '@/components/SvgButton3'
+import VSwatches from 'vue-swatches'
+import 'vue-swatches/dist/vue-swatches.css'
 
 var readmode
 export default {
   name: 'ListLayer',
 
+  props: {
+    added: Boolean,
+  },
+
   data: function () {
     return {
+      color: '#9bc2d8',
+      shapes: 'circles',
+      // swatches: [{ color: '#F493A7', showBorder: true }],
+      swatches: [
+        ['#EB5757', '#F2994A', '#F2C94C'],
+        ['#219653', '#27AE60', '#6FCF97'],
+        ['#2F80ED', '#2D9CDB', '#56CCF2'],
+        ['#9B51E0', '#BB6BD9', '#E9B7FC'],
+      ],
       localreadmode: false,
+      myArray: null,
+      update: false,
     }
   },
 
-  props: {
-    nodeid: String,
-    nodetext: String,
-    deleted: Boolean,
-  },
-
   filters: {
     marked: marked,
   },
 
-  computed: mapState({
-    myNodes: (state) => state.myNodes,
-    configPositions: (state) => state.configPositions,
-    configEmoji: (state) => state.configEmoji,
-  }),
+  computed: {
+    ...mapState({
+      myNodes: (state) => state.myNodes,
+      configPositions: (state) => state.configPositions,
+      configEmoji: (state) => state.configEmoji,
+      // toolmode: (state) => state.ui.mode,
+    }),
+
+    nodes_filtered: function () {
+      return this.myNodes.filter((nodes) => {
+        return nodes.deleted == false
+      })
+    },
+  },
+
+  mounted() {
+    setTimeout(this.loadData, 500)
+
+    const unwatch = this.$watch('nodes_filtered', (value) => {
+      this.$options.myArray = this.nodes_filtered
+      this.$forceUpdate()
+      // this.focusInput()
+      // ignore falsy values
+      if (!value) return
+
+      // stop watching when nodes_filtered[] is not empty
+      if (value && value.length) unwatch()
+
+      // process value here
+    })
+  },
+
+  watch: {
+    added: {
+      deep: true,
 
-  myArray: null,
-  created() {
-    this.$options.myArray = this.myNodes
-    this.readFlag
+      handler() {
+        setTimeout(this.loadData, 200)
+      },
+    },
+    update: {
+      deep: true,
+
+      handler() {
+        setTimeout(this.loadData, 200)
+      },
+    },
   },
 
   methods: {
+    chooseColor(color, nodeid) {
+      this.$store.dispatch('colorNode', { nodeid, color })
+      this.$options.myArray = this.nodes_filtered
+    },
+    updateNodes() {
+      this.update = !this.update
+    },
+    loadData() {
+      this.$options.myArray = this.nodes_filtered
+      this.$forceUpdate()
+    },
     editNode(e) {
       var nodeid = e.target.id
       var nodetext = e.target.value
@@ -107,35 +174,24 @@ export default {
     },
 
     editTrue(e) {
-      this.$emit('editTrue', e)
+      this.$emit('edit-true', e)
     },
 
     deleteFlag(e) {
-      e = this.nodeid
       if (confirm('Confirm discard?')) {
         this.$store.dispatch('deleteFlag', { e })
       } else {
         // nothing happens
       }
     },
+    readFlag(e, f) {
+      readmode = f
+      readmode = !readmode
+      this.$store.dispatch('readFlag', { e, readmode })
 
-    readFlag(e) {
-      e = this.nodeid
-
-      var i
-      for (i = 0; i < Object.keys(this.configPositions).length; i++) {
-        if (this.configPositions[i].node_id == this.nodeid) {
-          this.localreadmode = this.configPositions[i].read_mode
-        }
-      }
-
-      if (this.localreadmode == true) {
-        readmode = false
-        this.$store.dispatch('readFlag', { e, readmode })
+      if (readmode == true) {
         this.mode = 'Read'
       } else {
-        readmode = true
-        this.$store.dispatch('readFlag', { e, readmode })
         this.mode = 'Edit'
       }
     },
@@ -143,6 +199,8 @@ export default {
   components: {
     SvgButton,
     SvgButton2,
+    SvgButton3,
+    VSwatches,
   },
 }
 </script>
@@ -170,7 +228,6 @@ textarea {
   font-family: 'Inter var', Helvetica, sans-serif;
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;
-
   border: none;
   outline: none;
   background-color: rgb(187, 227, 255);
@@ -201,6 +258,8 @@ textarea {
 @media only screen and (max-width: 600px) {
   .readmode >>> a {
     font-size: 2em;
+    word-break: break-all;
+    padding-right: 0.5em;
   }
 }
 </style>
diff --git a/app/src/components/ModesCard.vue b/app/src/components/ModesCard.vue
index 3404884b80e7f6f3028d5a0af3b18e7eee91161e..837ae03fbb489cb5ebf843c2127e637331a0dbeb 100644
--- a/app/src/components/ModesCard.vue
+++ b/app/src/components/ModesCard.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div v-show="tipsplease" class="nodes welcome">
+    <div v-show="showtipsstate" class="nodes welcome">
       <img src="https://alpha.nodenogg.in/files/collect.png" />
 
       <p>
@@ -101,7 +101,7 @@ import SvgButton from '@/components/SvgButton'
 export default {
   data: function () {
     return {
-      tipsplease: true,
+      // showtipsstate: null,
     }
   },
 
@@ -113,13 +113,13 @@ export default {
   },
 
   computed: mapState({
-    hidetipsstate: (state) => state.hidetipsstate,
+    showtipsstate: (state) => state.showtipsstate,
   }),
 
   methods: {
     hideTips() {
-      this.tipsplease = false
-      //  this.hidetipsstate = false
+      var e = false
+      this.$store.dispatch('showTipsstate', e)
     },
   },
   components: {
diff --git a/app/src/components/ModesCardorg.vue b/app/src/components/ModesCardorg.vue
index 11fbaae021693d17fd5c5516632a045fdf9e5078..ad17bd4afeba8b89234aa720757edaea370a4637 100644
--- a/app/src/components/ModesCardorg.vue
+++ b/app/src/components/ModesCardorg.vue
@@ -1,5 +1,5 @@
 <template>
-  <div v-show="tipsplease">
+  <div v-show="showtipsstate">
     <draggable
       class="innernode"
       :w="450"
@@ -169,7 +169,7 @@
         <SvgButton @click="hideTips()" />
       </div>
     </draggable>
-    <div v-show="!tipsplease"></div>
+    <div v-show="!showtipsstate"></div>
   </div>
 </template>
 
@@ -182,7 +182,7 @@ import draggable from '@/experimental/Draggable'
 export default {
   data: function () {
     return {
-      tipsplease: true,
+      // showtipsstate: true,
     }
   },
 
@@ -194,14 +194,14 @@ export default {
   },
 
   computed: mapState({
-    hidetipsstate: (state) => state.hidetipsstate,
+    showtipsstate: (state) => state.showtipsstate,
     scale: (state) => state.ui.scale,
   }),
 
   methods: {
     hideTips() {
-      this.tipsplease = false
-      //  this.hidetipsstate = false
+      var e = false
+      this.$store.dispatch('showTipsstate', e)
     },
   },
   components: {
diff --git a/app/src/components/Navigation.vue b/app/src/components/Navigation.vue
index e14f17d7b5d25f2b42fe0143f50867f313aec6ed..971eada1d98b985af98d3e2171d88290dbabf915 100644
--- a/app/src/components/Navigation.vue
+++ b/app/src/components/Navigation.vue
@@ -1,8 +1,10 @@
 <template>
   <nav class="navigation">
-    <router-link v-for="route in routes" :key="route.name" :to="route.path">{{
-      route.name
-    }}</router-link>
+    <router-link v-for="route in routes" :key="route.name" :to="route.path">
+      <div v-if="route.path != '/nitpicky'">
+        {{ route.name }}
+      </div></router-link
+    >
   </nav>
 </template>
 
diff --git a/app/src/components/NodesLayer.vue b/app/src/components/NodesLayer.vue
index d797b704dea62c2b95740a50c10e15152270d236..377cdb3ab4b75030895f31006cfce00e553adba6 100644
--- a/app/src/components/NodesLayer.vue
+++ b/app/src/components/NodesLayer.vue
@@ -1,175 +1,170 @@
 <template>
   <div ref="nodes" class="node">
-    <div v-for="(value, index) in configPositions" v-bind:key="index">
-      <div v-if="toolmode == 'move'">
-        <draggable
-          class="innernode"
-          v-if="nodeid == value.node_id && deleted == false"
-          :w="value.width"
-          :h="value.height"
-          :x="value.x_pos"
-          :y="value.y_pos"
-          :z="value.z_index"
-          :scale="scale"
-          :draggable="false"
-          :resizable="false"
-          style="border: 2px dashed black; background-color: rgb(155, 194, 216)"
-          :min-width="200"
-          :min-height="220"
-        >
-          <form>
-            <div v-if="value.read_mode == false">
-              <div v-for="value in $options.myArray" v-bind:key="value.node_id">
+    <div v-if="toolmode == 'move'">
+      <div v-for="(value, index) in $options.positionsArray" v-bind:key="index">
+        <div v-for="(nodes, index) in $options.myArray" v-bind:key="index">
+          <draggable
+            class="innernode"
+            v-if="nodes.node_id == value.node_id"
+            :w="value.width"
+            :h="value.height"
+            :x="value.x_pos"
+            :y="value.y_pos"
+            :z="value.z_index"
+            :scale="scale"
+            @activated="onActivated(nodes.node_id, value.z_index)"
+            :draggable="false"
+            :resizable="false"
+            @dragging="onDrag"
+            @resizing="onResize"
+            @dragstop="onDragstop"
+            @resizestop="onResizestop"
+            :drag-cancel="'.drag-cancel'"
+            :style="{
+              border: border,
+              backgroundColor: nodes.color,
+            }"
+            ref="node"
+          >
+            <form class="nodes">
+              <template v-if="nodes.read_mode == false">
                 <textarea
-                  v-if="nodeid == value.node_id"
                   @focus="editTrue(true)"
                   @blur="editTrue(false)"
-                  v-model="value.node_text"
                   autofocus
+                  v-model="nodes.node_text"
+                  v-focus
                   @input="editNode"
-                  :id="nodeid"
-                  class="drag-cancel"
-                  ref="nodetext"
+                  :id="nodes.node_id"
                   placeholder="Type your thoughts and ideas here! (auto saved every keystroke)"
                 ></textarea>
-              </div>
-              <p class="info">*markdown supported &amp; autosaves</p>
-            </div>
-            <div v-if="value.read_mode == true">
-              <p
-                class="read"
-                :id="nodeid"
-                :inner-html.prop="nodetext | marked"
-              ></p>
-            </div>
-
-            <!-- <h3>Reactions</h3> -->
-
-            <div class="allemoji">
-              <div
-                class="eachemoji"
-                v-for="(emojis, index) in configEmoji"
-                :key="index"
-              >
-                <p v-if="nodeid == emojis.node_id">
-                  {{ emojis.emoji_text }}
-                </p>
-              </div>
-            </div>
-
-            <div class="btn-row">
-              <!-- <BaseButton buttonClass="danger" @click="deleteFlag()"
-                >Delete</BaseButton
-              > -->
-              <!-- <div v-if="value.read_mode == true">
-                <BaseButton
-                  class="read"
-                  buttonClass="action"
-                  @click="readFlag()"
-                  >Edit Mode
-                </BaseButton>
-              </div>
-              <div v-else>
-                <BaseButton
-                  class="read"
-                  buttonClass="action"
-                  @click="readFlag()"
-                  >Read Mode</BaseButton
+                <p class="info">*markdown supported &amp; autosaves</p>
+              </template>
+              <template v-else>
+                <p
+                  :id="nodes.node_id"
+                  :inner-html.prop="nodes.node_text | marked"
+                ></p>
+              </template>
+              <template v-if="toolmode == 'select'">
+                <div class="btn-row">
+                  <SvgButton
+                    buttonClass="nodes"
+                    @click.prevent="deleteFlag(nodes.node_id)"
+                  />
+                  <SvgButton2
+                    buttonClass="nodes"
+                    @click.prevent="readFlag(nodes.node_id, nodes.read_mode)"
+                  />
+                </div>
+              </template>
+
+              <div class="allemoji">
+                <div
+                  class="eachemoji"
+                  v-for="(emojis, index) in configEmoji"
+                  :key="index"
                 >
-              </div> -->
-            </div>
-          </form>
-        </draggable>
+                  <template v-if="emojis.node_id == nodes.node_id">{{
+                    emojis.emoji_text
+                  }}</template>
+                </div>
+              </div>
+            </form>
+          </draggable>
+        </div>
       </div>
+    </div>
 
-      <!-- Same code as above when in any other mode other than move so you can drag nodes-->
-
-      <div v-else>
-        <draggable
-          class="innernode"
-          v-if="nodeid == value.node_id && deleted == false"
-          :w="value.width"
-          :h="value.height"
-          :x="value.x_pos"
-          :y="value.y_pos"
-          :z="value.z_index"
-          :scale="scale"
-          @activated="onActivated"
-          @dragging="onDrag"
-          @resizing="onResize"
-          @dragstop="onDragstop"
-          @resizestop="onResizestop"
-          :drag-cancel="'.drag-cancel'"
-          style="border: 2px dashed black; background-color: rgb(155, 194, 216)"
-          :min-width="200"
-          :min-height="220"
-        >
-          <form>
-            <div v-if="value.read_mode == false">
-              <div v-for="value in $options.myArray" v-bind:key="value.node_id">
-                <div v-if="nodeid == value.node_id">
-                  <textarea
-                    @focus="editTrue(true)"
-                    @blur="editTrue(false)"
-                    autofocus
-                    v-model="value.node_text"
-                    @input="editNode"
-                    :id="nodeid"
-                    class="drag-cancel"
-                    ref="nodetext"
-                    placeholder="Type your thoughts and ideas here! (auto saved every keystroke)"
+    <!-- IF NOT MOVE -->
+
+    <div v-if="toolmode != 'move'">
+      <div v-for="(value, index) in $options.positionsArray" v-bind:key="index">
+        <div v-for="(nodes, index) in $options.myArray" v-bind:key="index">
+          <draggable
+            class="innernode"
+            v-if="nodes.node_id == value.node_id"
+            :w="value.width"
+            :h="value.height"
+            :x="value.x_pos"
+            :y="value.y_pos"
+            :z="value.z_index"
+            :scale="scale"
+            @activated="onActivated(nodes.node_id, value.z_index)"
+            @dragging="onDrag"
+            @resizing="onResize"
+            @dragstop="onDragstop"
+            @resizestop="onResizestop"
+            :drag-cancel="'.drag-cancel'"
+            :style="{
+              border: border,
+              backgroundColor: nodes.color,
+            }"
+            ref="node"
+          >
+            <form class="nodes">
+              <template v-if="nodes.read_mode == false">
+                <textarea
+                  class="drag-cancel"
+                  @focus="editTrue(true)"
+                  @blur="editTrue(false)"
+                  autofocus
+                  v-focus
+                  v-model="nodes.node_text"
+                  @input="editNode"
+                  :id="nodes.node_id"
+                  placeholder="Type your thoughts and ideas here! (auto saved every keystroke)"
+                ></textarea>
+                <p class="info">*markdown supported &amp; autosaves</p>
+              </template>
+              <template v-else>
+                <p
+                  :id="nodes.node_id"
+                  :inner-html.prop="nodes.node_text | marked"
+                ></p>
+              </template>
+              <template v-if="toolmode == 'select'">
+                <div class="btn-row">
+                  <SvgButton
+                    buttonClass="nodes"
+                    @click.prevent="deleteFlag(nodes.node_id)"
+                  />
+                  <SvgButton2
+                    buttonClass="nodes"
+                    @click.prevent="readFlag(nodes.node_id, nodes.read_mode)"
+                  />
+                  <v-swatches
+                    v-model="color"
+                    @input="chooseColor(color, nodes.node_id)"
+                    :swatches="swatches"
+                    :shapes="shapes"
+                    show-border
+                    show-fallback
+                    fallback-input-type="color"
                   >
-                  </textarea>
+                    <SvgButton3
+                      buttonClass="nodes"
+                      @click.prevent
+                      slot="trigger"
+                    />
+                  </v-swatches>
+                </div>
+              </template>
+
+              <div class="allemoji">
+                <div
+                  class="eachemoji"
+                  v-for="(emojis, index) in configEmoji"
+                  :key="index"
+                >
+                  <template v-if="emojis.node_id == nodes.node_id">{{
+                    emojis.emoji_text
+                  }}</template>
                 </div>
               </div>
-              <p class="info">*markdown supported &amp; autosaves</p>
-            </div>
-            <div v-if="value.read_mode == true">
-              <p
-                class="read"
-                :id="nodeid"
-                :inner-html.prop="nodetext | marked"
-              ></p>
-            </div>
-
-            <!-- <h3>Reactions</h3> -->
-            <div class="allemoji">
-              <div
-                class="eachemoji"
-                v-for="(emojis, index) in configEmoji"
-                :key="index"
-              >
-                <p v-if="nodeid == emojis.node_id">
-                  {{ emojis.emoji_text }}
-                </p>
-              </div>
-            </div>
-            <div class="btn-row">
-              <!-- <BaseButton buttonClass="danger" @click="deleteFlag()"
-                >Discard</BaseButton
-              > -->
-              <SvgButton buttonClass="nodes" @click.prevent="deleteFlag()" />
-              <div v-if="value.read_mode == true">
-                <SvgButton2 buttonClass="nodes" @click.prevent="readFlag()" />
-                <!-- <BaseButton
-                  class="read"
-                  buttonClass="action"
-                  @click="readFlag()"
-                  >Edit Mode
-                </BaseButton> -->
-              </div>
-              <div v-else>
-                <SvgButton2 buttonClass="nodes" @click.prevent="readFlag()" />
-                <!-- <BaseButton
-                  class="read"
-                  buttonClass="action"
-                  @click="readFlag()"
-                  >Read Mode</BaseButton
-                > -->
-              </div>
-            </div>
-          </form>
-        </draggable>
+            </form>
+          </draggable>
+        </div>
       </div>
     </div>
   </div>
@@ -180,69 +175,166 @@ import { mapState } from 'vuex'
 import marked from 'marked'
 import SvgButton from '@/components/SvgButton'
 import SvgButton2 from '@/components/SvgButton2'
+import SvgButton3 from '@/components/SvgButton3'
 import draggable from '@/experimental/Draggable'
+import VSwatches from 'vue-swatches'
+import 'vue-swatches/dist/vue-swatches.css'
 
 var readmode
 
 export default {
   name: 'NodesLayer',
 
-  props: {
-    nodeid: String,
-    nodetext: String,
-    nodewidth: Number,
-    nodeheight: Number,
-    deleted: Boolean,
-  },
-
   data() {
     return {
+      border: '2px dashed black',
+      color: '#9bc2d8',
+      shapes: 'circles',
+
+      // swatches: [{ color: '#F493A7', showBorder: true }],
+      swatches: [
+        ['#EB5757', '#F2994A', '#F2C94C'],
+        ['#219653', '#27AE60', '#6FCF97'],
+        ['#2F80ED', '#2D9CDB', '#56CCF2'],
+        ['#9B51E0', '#BB6BD9', '#E9B7FC'],
+      ],
+
       pickupz: 1,
       localreadmode: false,
       mode: '',
-      // firstload: true,
+      nodeid: String,
+      myArray: null,
+      positionsArray: null,
     }
   },
 
+  props: {
+    added: Boolean,
+  },
+
   filters: {
     marked: marked,
   },
 
   // FIXME: how do we know how to focus on the newest node ?
   // FIXME: Tab between them would also be good
-  // var delay = 100
-  // var input
-  // mounted() {
-  //   setTimeout(this.setFocus, delay)
-  //   input = this.$refs.nodetext
-  //   // console.log(input)
-  // },
-  // method
-  // setFocus() {
-  //   this.$refs.nodetext.focus()
-  // },
-
-  computed: mapState({
-    scale: (state) => state.ui.scale,
-    myNodes: (state) => state.myNodes,
-    configPositions: (state) => state.configPositions,
-    configConnections: (state) => state.configConnections,
-    configEmoji: (state) => state.configEmoji,
-    toolmode: (state) => state.ui.mode,
-  }),
-  myArray: null,
-  created() {
-    //access the custom option using $options
-    this.$options.myArray = this.myNodes
+  watch: {
+    added: {
+      deep: true,
+
+      handler() {
+        setTimeout(this.loadData, 200)
+      },
+    },
+  },
+
+  computed: {
+    ...mapState({
+      scale: (state) => state.ui.scale,
+      myNodes: (state) => state.myNodes,
+      configPositions: (state) => state.configPositions,
+      configConnections: (state) => state.configConnections,
+      configEmoji: (state) => state.configEmoji,
+      toolmode: (state) => state.ui.mode,
+    }),
+
+    nodes_filtered: function () {
+      return this.myNodes.filter((nodes) => {
+        // backwards compatablity fix
+        if (nodes.color == undefined || '') {
+          nodes.color = '#A4C2D6'
+        }
+        return nodes.deleted == false
+      })
+    },
+    positions_filtered: function () {
+      return this.configPositions.filter((positions) => {
+        return this.myNodes.some((node) => {
+          return positions.node_id == node.node_id
+        })
+      })
+    },
+  },
+  // this is to stop sync chasing bug
+
+  mounted() {
+    setTimeout(this.loadData, 500)
+
+    const unwatch = this.$watch('nodes_filtered', (value) => {
+      this.$options.myArray = this.nodes_filtered
+      // this.$options.positionsArray = this.positions_filtered
+      this.$forceUpdate()
+      // ignore falsy values
+      if (!value) return
+
+      // stop watching when nodes_filtered[] is not empty
+      if (value && value.length) unwatch()
+
+      // process value here
+    })
+
+    const unwatchtwo = this.$watch('positions_filtered', (value) => {
+      // this.$options.myArray = this.nodes_filtered
+      this.$options.positionsArray = this.positions_filtered
+      this.$forceUpdate()
+      // ignore falsy values
+      if (!value) return
+
+      // stop watching when nodes_filtered[] is not empty
+      if (value && value.length) unwatchtwo()
+
+      // process value here
+    })
+  },
+
+  updated() {
+    this.$options.positionsArray = this.positions_filtered
+
+    if (this.toolmode == 'addNode') {
+      setTimeout(this.loadData, 300)
+      // this.$options.myArray = this.nodes_filtered
+      this.$store.commit('ui/setMode', 'select')
+    }
   },
 
   methods: {
-    onActivated() {
+    chooseColor(color, nodeid) {
+      this.$store.dispatch('colorNode', { nodeid, color })
+      this.$options.myArray = this.nodes_filtered
+    },
+
+    loadData() {
+      this.$options.myArray = this.nodes_filtered
+      this.$options.positionsArray = this.positions_filtered
+      this.$forceUpdate()
+    },
+
+    onActivated(id, zindex) {
+      this.zindex = zindex
+      this.nodeid = id
       var i
+      var zindexes = []
+
       for (i = 0; i < Object.keys(this.configPositions).length; i++) {
+        zindexes.push(this.configPositions[i].z_index)
         if (this.configPositions[i].node_id == this.nodeid) {
           this.width = this.configPositions[i].width
           this.height = this.configPositions[i].height
+          this.zindex = this.configPositions[i].z_index
+        }
+        // console.log(zindexes)
+      }
+      var topZ = Math.max(...zindexes)
+
+      for (i = 0; i < Object.keys(this.configPositions).length; i++) {
+        if (topZ > 2147483640) {
+          this.configPositions[i].z_index = 0
+        }
+
+        if (this.configPositions[i].node_id == this.nodeid) {
+          this.width = this.configPositions[i].width
+          this.height = this.configPositions[i].height
+          this.configPositions[i].z_index = topZ + 1
         }
       }
     },
@@ -252,19 +344,27 @@ export default {
       this.width = width
       this.height = height
     },
-    onResizestop(x, y, width, height, zindex) {
+    onResizestop(x, y, width, height) {
+      // var nodecontentHeight = document.getElementById(this.nodeid).clientHeight
+
       var localnodeid = this.nodeid
-      zindex = this.pickupz
+      var zindex
       var i
+
       for (i = 0; i < Object.keys(this.configPositions).length; i++) {
         if (this.configPositions[i].node_id == this.nodeid) {
           this.width = this.configPositions[i].width
           this.height = this.configPositions[i].height
-          this.pickupz = this.configPositions[i].z_index
+          zindex = this.configPositions[i].z_index
         }
       }
       this.width = width
       this.height = height
+
+      // if (nodecontentHeight > this.height) {
+      //   height = nodecontentHeight + 150
+      // }
+
       this.$store.dispatch('movePos', {
         localnodeid,
         x,
@@ -278,18 +378,24 @@ export default {
       this.localx = x
       this.localy = y
     },
-    onDragstop(x, y, width, height, zindex) {
+    onDragstop(x, y, width, height) {
+      var nodecontentHeight = document.getElementById(this.nodeid).clientHeight
+
       var localnodeid = this.nodeid
-      zindex = this.pickupz
+      var zindex
       width = this.width
       height = this.height
       var i
+
+      if (nodecontentHeight > this.height) {
+        this.height = nodecontentHeight + 150
+      }
       // FIXME: What is this for loop doing ??
       for (i = 0; i < Object.keys(this.configPositions).length; i++) {
         if (this.configPositions[i].node_id == this.nodeid) {
           this.localx = this.configPositions[i].x_pos
           this.localy = this.configPositions[i].y_pos
-          this.pickupz = this.configPositions[i].z_index
+          zindex = this.configPositions[i].z_index
         }
       }
       this.$store.dispatch('movePos', {
@@ -318,54 +424,13 @@ export default {
           })
         }
       }
+      this.$options.myArray = this.nodes_filtered
     },
 
     editTrue(e) {
-      this.$emit('editTrue', e)
-      // this.firstload = false
-      //  // console.log(e)
+      this.$emit('edit-true', e)
     },
 
-    // _.debounce(function(e) {
-    //             this.input = e.target.value;
-    //           }, 300)
-
-    // editNode(e) {
-    //   const el = e.target
-    //   const cursorPos = el.selectionStart
-    //   console.log(cursorPos)
-    //   var nodeid = e.target.id
-    //   var nodetext = e.target.value
-    //   this.$store.dispatch('editNode', { nodeid, nodetext })
-
-    //   this.$nextTick(() => {
-    //     e.target.selectionStart = e.target.selectionEnd = cursorPos
-    //   })
-
-    // this.$nextTick(() => {
-    //   el.setSelectionRange(cursorPos, cursorPos)
-    // })
-    //},
-
-    // editNode: lodash.debounce(function (e) {
-    //   var nodeid = e.target.id
-    //   var nodetext = e.target.value
-    //   this.$store.dispatch('editNode', { nodeid, nodetext })
-    // }, 600),
-
-    // editNode: lodash.debounce(function (e) {
-    //   const el = e.target
-    //   const cursorPos = el.selectionStart
-
-    //   var nodeid = e.target.id
-    //   var nodetext = e.target.value
-    //   this.$store.dispatch('editNode', { nodeid, nodetext })
-
-    //   this.$nextTick(() => {
-    //     el.setSelectionRange(cursorPos, cursorPos)
-    //   })
-    // }, 600),
-
     editNode(e) {
       var nodeid = e.target.id
       var nodetext = e.target.value
@@ -373,30 +438,22 @@ export default {
     },
 
     deleteFlag(e) {
-      e = this.nodeid
       if (confirm('Confirm discard?')) {
         this.$store.dispatch('deleteFlag', { e })
+        this.$options.myArray = this.nodes_filtered
       } else {
         // nothing happens
       }
     },
-    readFlag(e) {
-      e = this.nodeid
-
-      var i
-      for (i = 0; i < Object.keys(this.configPositions).length; i++) {
-        if (this.configPositions[i].node_id == this.nodeid) {
-          this.localreadmode = this.configPositions[i].read_mode
-        }
-      }
 
-      if (this.localreadmode == true) {
-        readmode = false
-        this.$store.dispatch('readFlag', { e, readmode })
+    readFlag(e, f) {
+      readmode = f
+      readmode = !readmode
+      this.$store.dispatch('readFlag', { e, readmode })
+      this.$options.myArray = this.nodes_filtered
+      if (readmode == true) {
         this.mode = 'Read'
       } else {
-        readmode = true
-        this.$store.dispatch('readFlag', { e, readmode })
         this.mode = 'Edit'
       }
     },
@@ -405,6 +462,8 @@ export default {
     draggable,
     SvgButton,
     SvgButton2,
+    SvgButton3,
+    VSwatches,
   },
 }
 </script>
@@ -417,6 +476,8 @@ export default {
 
 .vdr {
   padding: 0 0.5em;
+  min-width: 260px;
+  min-height: 265px;
 }
 
 .info {
diff --git a/app/src/components/OffLine.vue b/app/src/components/OffLine.vue
deleted file mode 100644
index f8c5b52e9491563527872fd0e36798fd1edc46f6..0000000000000000000000000000000000000000
--- a/app/src/components/OffLine.vue
+++ /dev/null
@@ -1,72 +0,0 @@
-// FIXME: Everything below is OLD code
-
-<template>
-  <div class="yourdata" name="anchorName">
-    <div v-for="value in myNodes" v-bind:key="value.node_id">
-      <textarea
-        v-if="nodeid == value.node_id"
-        @focus="editTrue(true)"
-        @blur="editTrue(false)"
-        autofocus
-        @input="editNode"
-        v-model="value.node_text"
-        :id="nodeid"
-        class="drag-cancel"
-        ref="nodetext"
-        placeholder="Idea goes here!"
-      ></textarea>
-    </div>
-
-    <div class="btn-row">
-      <BaseButton buttonClass="danger" @click="deleteFlag()">Delete</BaseButton>
-    </div>
-  </div>
-</template>
-
-<script>
-import { mapState } from 'vuex'
-
-export default {
-  name: 'OffLine',
-  computed: mapState({
-    myNodes: (state) => state.myNodes,
-  }),
-
-  props: {
-    nodeid: String,
-  },
-
-  methods: {
-    addDoc() {
-      this.$store.dispatch('addDoc')
-      this.$emit('editMode')
-    },
-    editTrue(e) {
-      this.$emit('editTrue', e)
-      //// console.log(e)
-    },
-
-    editNode(e) {
-      var nodeid = e.target.id
-      var nodetext = e.target.value
-      this.$store.dispatch('editNode', { nodeid, nodetext })
-    },
-
-    deleteFlag(e) {
-      e = this.nodeid
-      this.$store.dispatch('deleteFlag', { e })
-    },
-  },
-}
-</script>
-
-<style lang="css" scoped>
-h3 {
-  margin-top: 1em;
-}
-
-.data p {
-  white-space: pre-wrap;
-  line-height: 1em;
-}
-</style>
diff --git a/app/src/components/OnBoard.vue b/app/src/components/OnBoard.vue
index 499d97810ab31bf12bf002e1418b8afb419ae039..8ecd9e127a8eea10b5407fd295707d16fbf0e013 100644
--- a/app/src/components/OnBoard.vue
+++ b/app/src/components/OnBoard.vue
@@ -196,13 +196,31 @@ export default {
 
   methods: {
     createMicrocosm() {
-      this.$store.dispatch('createMicrocosm', this.localmicrocosm)
-      localStorage.setItem('mylastMicrocosm', this.localmicrocosm)
-      this.microcosm = true
+      var result
+      var str = this.localmicrocosm
+      var lower = str.toLowerCase()
+      var spaces = lower
+      lower = spaces.split(' ').join('')
+      result = lower.split('-').join('')
+
+      if (this.clientid != '') {
+        this.$store.dispatch('createMicrocosm', result)
+        localStorage.setItem('mylastMicrocosm', result)
+        this.microcosm = true
+      } else {
+        // console.log('name not set')
+      }
     },
     setClient() {
-      this.$store.dispatch('setClient', this.clientid),
-        localStorage.setItem('myNNClient', this.clientid)
+      var result
+      var str = this.clientid
+      var lower = str.toLowerCase()
+      var spaces = lower
+      lower = spaces.split(' ').join('')
+      result = lower.split('-').join('')
+
+      this.$store.dispatch('setClient', result),
+        localStorage.setItem('myNNClient', result)
       this.name = true
       this.focusInput()
     },
@@ -213,11 +231,17 @@ export default {
     },
 
     editTrue(e) {
-      this.$emit('editTrue', e)
+      // needs to be KebabCase now
+      //  this.$emit('my-event')
+      this.$emit('edit-true', e)
     },
 
     letsGo() {
-      this.$emit('clientAdded')
+      if (this.clientid != '') {
+        this.$emit('client-added')
+      } else {
+        //console.log('name not set ')
+      }
     },
 
     focusInput() {
@@ -225,7 +249,7 @@ export default {
     },
   },
   computed: mapState({
-        scale: (state) => state.ui.scale
+    scale: (state) => state.ui.scale,
   }),
   components: {
     draggable,
diff --git a/app/src/components/OtherCardslayer.vue b/app/src/components/OtherCardslayer.vue
index 91c510372a4d6e1d7768f5752a8e5ac2ee82703a..36b2859c02c4985c700dfcbb86e5e8a2769cc7fc 100644
--- a/app/src/components/OtherCardslayer.vue
+++ b/app/src/components/OtherCardslayer.vue
@@ -1,53 +1,150 @@
 <template>
-  <div>
-    <div v-if="deleted == false">
-      <div class="nodes">
-        <p :inner-html.prop="nodetext | marked"></p>
-
-        <div class="allemoji">
-          <div
-            class="eachemoji"
-            v-for="(emojis, index) in configEmoji"
-            :key="index"
-          >
-            <p v-if="nodeid == emojis.node_id">
-              {{ emojis.emoji_text }}
-            </p>
+  <div class="grid">
+   
+      <div v-for="(nodes, index) in othernodes_filtered" v-bind:key="index">
+        <div class="nodes">
+          <p :inner-html.prop="nodes.node_text | marked"></p>
+
+          <div class="eeee">
+            <input :value="nodes.node_id" name="id" readonly hidden />
+            <input
+              id="emojifield"
+              class="regular-input"
+              v-model="input"
+              readonly
+            />
+
+            <emoji-picker @emoji="append" :search="search">
+              <div
+                class="emoji-invoker"
+                slot="emoji-invoker"
+                slot-scope="{ events: { click: clickEvent } }"
+                @click.stop="clickEvent"
+              >
+                <svg
+                  height="24"
+                  viewBox="0 0 24 24"
+                  width="24"
+                  xmlns="http://www.w3.org/2000/svg"
+                >
+                  <path d="M0 0h24v24H0z" fill="none" />
+                  <path
+                    d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z"
+                  />
+                </svg>
+              </div>
+              <div slot="emoji-picker" slot-scope="{ emojis, insert, display }">
+                <div
+                  class="emoji-picker"
+                  :style="{ top: display.y + 'px', left: display.x + 'px' }"
+                >
+                  <div class="emoji-picker__search">
+                    <input type="text" v-model="search" />
+                  </div>
+                  <div>
+                    <div
+                      v-for="(emojiGroup, category) in emojis"
+                      :key="category"
+                    >
+                      <h5>{{ category }}</h5>
+                      <div class="emojis">
+                        <span
+                          v-for="(emoji, emojiName) in emojiGroup"
+                          :key="emojiName"
+                          @click="insert(emoji), sentReact(nodes.node_id)"
+                          :title="emojiName"
+                          >{{ emoji }}</span
+                        >
+                      </div>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </emoji-picker>
+
+            <div class="allemoji">
+              <div
+                class="eachemoji"
+                v-for="(emojis, index) in configEmoji"
+                :key="index"
+              >
+                <p v-if="nodes.node_id == emojis.node_id">
+                  {{ emojis.emoji_text }}
+                </p>
+              </div>
+            </div>
           </div>
         </div>
       </div>
-    </div>
+  
   </div>
 </template>
 
 <script>
 import { mapState } from 'vuex'
+
+import EmojiPicker from 'vue-emoji-picker'
 import marked from 'marked'
+
+var nodeid
+var emojitext
+
 export default {
   name: 'OtherCardslayer',
 
-  data: function () {
-    return {}
+  components: {
+    EmojiPicker,
+
   },
 
-  props: {
-    nodeid: String,
-    nodetext: String,
-    deleted: Boolean,
+  data: function () {
+    return {
+      input: '',
+      search: '',
+    }
   },
 
-  computed: mapState({
-    otherNodes: (state) => state.otherNodes,
-    configEmoji: (state) => state.configEmoji,
-  }),
+  computed: {
+    ...mapState({
+      otherNodes: (state) => state.otherNodes,
+      configEmoji: (state) => state.configEmoji,
+    }),
+
+    othernodes_filtered: function () {
+      return this.otherNodes.filter((nodes) => {
+        return nodes.deleted == false
+      })
+    },
+  },
 
   filters: {
     marked: marked,
   },
+
+  methods: {
+    append(emoji) {
+      this.input += emoji
+    },
+    sentReact(e) {
+      emojitext = this.input
+      nodeid = e
+
+      this.$store.dispatch('addEmoji', {
+        nodeid,
+        emojitext,
+      })
+
+      this.input = ''
+    },
+  },
 }
 </script>
 
 <style lang="css" scoped>
+.grid {
+  display: flex;
+  flex-wrap: wrap;
+}
 .nodes {
   min-width: 343px;
   max-width: 343px;
@@ -78,6 +175,10 @@ p {
   border-radius: 4px;
 }
 
+input {
+  display: none;
+}
+
 .allemoji {
   font-size: 2em;
   display: grid;
@@ -89,4 +190,87 @@ p {
 .eachemoji p {
   margin: 0em;
 }
+
+.emoji-invoker {
+  top: -0.5rem;
+  right: 0.5rem;
+  width: 1.5rem;
+  height: 2.5rem;
+  /* transform: scale(1.6); */
+  /* margin: 0em 0em 1em 0em; */
+  /* border-radius: 50%; */
+  cursor: pointer;
+  transition: all 0.8s;
+}
+.emoji-invoker:hover > svg {
+  fill: #84949b;
+
+  /* transform: scale(1.5); */
+}
+.emoji-invoker > svg {
+  fill: #b1c6d0;
+  margin-top: 10px;
+  margin-left: 0.2em;
+  transform: scale(1.5);
+}
+
+.emoji-picker {
+  transform: scale(1.2);
+  z-index: 1;
+  font-family: Montserrat;
+  border: 1px solid #ccc;
+  width: 18rem;
+  height: 20rem;
+  overflow: scroll;
+  padding: 1rem;
+  box-sizing: border-box;
+  border-radius: 0.5rem;
+  background: #fff;
+  box-shadow: 1px 1px 8px #c7dbe6;
+  margin-top: 3em;
+}
+.emoji-picker__search {
+  display: flex;
+}
+.emoji-picker__search > input {
+  flex: 1;
+  border-radius: 10rem;
+  border: 1px solid #ccc;
+  padding: 0.5rem 1rem;
+  outline: none;
+}
+.emoji-picker h5 {
+  margin-top: 0;
+  margin-bottom: 0;
+  color: #b1b1b1;
+  text-transform: uppercase;
+  font-size: 0.8rem;
+  cursor: default;
+}
+.emoji-picker .emojis {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+}
+.emoji-picker .emojis:after {
+  content: '';
+  flex: auto;
+}
+.emoji-picker .emojis span {
+  padding: 0.2rem;
+  cursor: pointer;
+  border-radius: 5px;
+}
+.emoji-picker .emojis span:hover {
+  background: #ececec;
+  cursor: pointer;
+}
+
+@media only screen and (max-width: 600px) {
+  .readmode >>> a {
+    font-size: 2em;
+    word-break: break-all;
+    padding-right: 0.5em;
+  }
+}
 </style>
diff --git a/app/src/components/OtherNodeslayer.vue b/app/src/components/OtherNodeslayer.vue
index 1da4fcc0bd3ba40f3ae8ed691f333cecc7260d56..89676ce40887689e527204956ce5ed98a8e208bc 100644
--- a/app/src/components/OtherNodeslayer.vue
+++ b/app/src/components/OtherNodeslayer.vue
@@ -1,211 +1,220 @@
 <template>
   <div ref="othernodes" class="node">
-    <div v-for="(value, index) in configPositions" v-bind:key="index">
-      <div v-if="toolmode == 'move'">
-        <!-- make draggable false as we are panning around -->
-        <draggable
-          v-if="nodeid == value.node_id && deleted == false"
-          :w="value.width"
-          :h="value.height"
-          :x="value.x_pos"
-          :y="value.y_pos"
-          :z="value.z_index"
-          :scale="scale"
-          @activated="onActivated"
-          @dragging="onDrag"
-          @resizing="onResize"
-          :draggable="false"
-          :resizable="false"
-          @dragstop="onDragstop"
-          @resizestop="onResizestop"
-          style="border: 2px solid black; background-color: rgb(205, 234, 255)"
-          :min-width="200"
-          :min-height="220"
-        >
-          <p class="read" :id="nodeid" :inner-html.prop="nodetext | marked"></p>
-          <!-- <h3>Reactions</h3> -->
-
-          <div class="react" v-if="nodeid != undefined">
-            <!-- <h2>React</h2> -->
-            <div class="eeee">
-              <input :value="nodeid" name="id" readonly hidden />
-              <input
-                id="emojifield"
-                class="regular-input"
-                v-model="input"
-                readonly
-              />
-              <div class="allemoji">
-                <div
-                  class="eachemoji"
-                  v-for="(emojis, index) in configEmoji"
-                  :key="index"
-                >
-                  <p v-if="nodeid == emojis.node_id">
-                    {{ emojis.emoji_text }}
-                  </p>
-                </div>
-              </div>
-              <emoji-picker @emoji="append" :search="search">
-                <div
-                  class="emoji-invoker"
-                  slot="emoji-invoker"
-                  slot-scope="{ events: { click: clickEvent } }"
-                  @click.stop="clickEvent"
-                >
-                  <svg
-                    height="24"
-                    viewBox="0 0 24 24"
-                    width="24"
-                    xmlns="http://www.w3.org/2000/svg"
+    <div v-if="toolmode == 'move'">
+      <div v-for="(value, index) in $options.positionsArray" v-bind:key="index">
+        <div v-for="(nodes, index) in othernodes_filtered" v-bind:key="index">
+          <draggable
+            v-if="nodes.node_id == value.node_id"
+            :w="value.width"
+            :h="value.height"
+            :x="value.x_pos"
+            :y="value.y_pos"
+            :z="value.z_index"
+            :scale="scale"
+            @activated="onActivated(nodes.node_id, value.z_index)"
+            :draggable="false"
+            :resizable="false"
+            @dragging="onDrag"
+            @resizing="onResize"
+            @dragstop="onDragstop"
+            @resizestop="onResizestop"
+            :style="{
+              border: border,
+              backgroundColor: nodes.color,
+            }"
+            :min-width="200"
+            :min-height="220"
+          >
+            <p
+              class="read"
+              :id="nodes.node_id"
+              :inner-html.prop="nodes.node_text | marked"
+            ></p>
+
+            <div class="react">
+              <div class="eeee">
+                <input :value="nodes.node_id" name="id" readonly hidden />
+                <input
+                  id="emojifield"
+                  class="regular-input"
+                  v-model="input"
+                  readonly
+                />
+
+                <emoji-picker @emoji="append" :search="search">
+                  <div
+                    class="emoji-invoker"
+                    slot="emoji-invoker"
+                    slot-scope="{ events: { click: clickEvent } }"
+                    @click.stop="clickEvent"
                   >
-                    <path d="M0 0h24v24H0z" fill="none" />
-                    <path
-                      d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z"
-                    />
-                  </svg>
-                </div>
-                <div
-                  slot="emoji-picker"
-                  slot-scope="{ emojis, insert, display }"
-                >
+                    <svg
+                      height="24"
+                      viewBox="0 0 24 24"
+                      width="24"
+                      xmlns="http://www.w3.org/2000/svg"
+                    >
+                      <path d="M0 0h24v24H0z" fill="none" />
+                      <path
+                        d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z"
+                      />
+                    </svg>
+                  </div>
                   <div
-                    class="emoji-picker"
-                    :style="{ top: display.y + 'px', left: display.x + 'px' }"
+                    slot="emoji-picker"
+                    slot-scope="{ emojis, insert, display }"
                   >
-                    <div class="emoji-picker__search">
-                      <input type="text" v-model="search" v-focus />
-                    </div>
-                    <div>
-                      <div
-                        v-for="(emojiGroup, category) in emojis"
-                        :key="category"
-                      >
-                        <h5>{{ category }}</h5>
-                        <div class="emojis">
-                          <span
-                            v-for="(emoji, emojiName) in emojiGroup"
-                            :key="emojiName"
-                            @click="insert(emoji)"
-                            :title="emojiName"
-                            >{{ emoji }}</span
-                          >
+                    <div
+                      class="emoji-picker"
+                      :style="{ top: display.y + 'px', left: display.x + 'px' }"
+                    >
+                      <div class="emoji-picker__search">
+                        <input type="text" v-model="search" />
+                      </div>
+                      <div>
+                        <div
+                          v-for="(emojiGroup, category) in emojis"
+                          :key="category"
+                        >
+                          <h5>{{ category }}</h5>
+                          <div class="emojis">
+                            <span
+                              v-for="(emoji, emojiName) in emojiGroup"
+                              :key="emojiName"
+                              @click="insert(emoji), sentReact(nodes.node_id)"
+                              :title="emojiName"
+                              >{{ emoji }}</span
+                            >
+                          </div>
                         </div>
                       </div>
                     </div>
                   </div>
+                </emoji-picker>
+                <div class="allemoji">
+                  <div
+                    class="eachemoji"
+                    v-for="(emojis, index) in configEmoji"
+                    :key="index"
+                  >
+                    <p v-if="nodes.node_id == emojis.node_id">
+                      {{ emojis.emoji_text }}
+                    </p>
+                  </div>
                 </div>
-              </emoji-picker>
-              <!-- <div class="btn-row">
-                <BaseButton buttonClass="action" @click="sentReact()"
-                  >Send Reaction</BaseButton
-                >
-              </div> -->
+              </div>
             </div>
-          </div>
-        </draggable>
+          </draggable>
+        </div>
       </div>
+    </div>
 
-      <div v-else>
-        <draggable
-          v-if="nodeid == value.node_id && deleted == false"
-          :w="value.width"
-          :h="value.height"
-          :x="value.x_pos"
-          :y="value.y_pos"
-          :z="value.z_index"
-          :scale="scale"
-          @activated="onActivated"
-          @dragging="onDrag"
-          @resizing="onResize"
-          @dragstop="onDragstop"
-          @resizestop="onResizestop"
-          style="border: 2px solid black; background-color: rgb(205, 234, 255)"
-          :min-width="200"
-          :min-height="220"
-        >
-          <p class="read" :id="nodeid" :inner-html.prop="nodetext | marked"></p>
-          <!-- <h3>Reactions</h3> -->
-          <div class="allemoji">
-            <div
-              class="eachemoji"
-              v-for="(emojis, index) in configEmoji"
-              :key="index"
-            >
-              <p v-if="nodeid == emojis.node_id">
-                {{ emojis.emoji_text }}
-              </p>
-            </div>
-          </div>
-          <div class="react" v-if="nodeid != undefined">
-            <!-- <h2>React</h2> -->
-            <div class="eeee">
-              <input :value="nodeid" name="id" readonly hidden />
-              <input
-                id="emojifield"
-                class="regular-input"
-                v-model="input"
-                readonly
-              />
-
-              <emoji-picker @emoji="append" :search="search">
-                <div
-                  class="emoji-invoker"
-                  slot="emoji-invoker"
-                  slot-scope="{ events: { click: clickEvent } }"
-                  @click.stop="clickEvent"
-                >
-                  <svg
-                    height="24"
-                    viewBox="0 0 24 24"
-                    width="24"
-                    xmlns="http://www.w3.org/2000/svg"
+    <!--  IF NOT MOVE tool  -->
+
+    <div v-if="toolmode != 'move'">
+      <div v-for="(value, index) in $options.positionsArray" v-bind:key="index">
+        <div v-for="(nodes, index) in othernodes_filtered" v-bind:key="index">
+          <draggable
+            v-if="nodes.node_id == value.node_id"
+            :w="value.width"
+            :h="value.height"
+            :x="value.x_pos"
+            :y="value.y_pos"
+            :z="value.z_index"
+            :scale="scale"
+            @activated="onActivated(nodes.node_id, value.z_index)"
+            @dragging="onDrag"
+            @resizing="onResize"
+            @dragstop="onDragstop"
+            @resizestop="onResizestop"
+            :style="{
+              border: border,
+              backgroundColor: nodes.color,
+            }"
+            :min-width="200"
+            :min-height="220"
+          >
+            <p
+              class="read"
+              :id="nodes.node_id"
+              :inner-html.prop="nodes.node_text | marked"
+            ></p>
+
+            <div class="react">
+              <div class="eeee">
+                <input :value="nodes.node_id" name="id" readonly hidden />
+                <input
+                  id="emojifield"
+                  class="regular-input"
+                  v-model="input"
+                  readonly
+                />
+
+                <emoji-picker @emoji="append" :search="search">
+                  <div
+                    class="emoji-invoker"
+                    slot="emoji-invoker"
+                    slot-scope="{ events: { click: clickEvent } }"
+                    @click.stop="clickEvent"
                   >
-                    <path d="M0 0h24v24H0z" fill="none" />
-                    <path
-                      d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z"
-                    />
-                  </svg>
-                </div>
-                <div
-                  slot="emoji-picker"
-                  slot-scope="{ emojis, insert, display }"
-                >
+                    <svg
+                      height="24"
+                      viewBox="0 0 24 24"
+                      width="24"
+                      xmlns="http://www.w3.org/2000/svg"
+                    >
+                      <path d="M0 0h24v24H0z" fill="none" />
+                      <path
+                        d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm3.5-9c.83 0 1.5-.67 1.5-1.5S16.33 8 15.5 8 14 8.67 14 9.5s.67 1.5 1.5 1.5zm-7 0c.83 0 1.5-.67 1.5-1.5S9.33 8 8.5 8 7 8.67 7 9.5 7.67 11 8.5 11zm3.5 6.5c2.33 0 4.31-1.46 5.11-3.5H6.89c.8 2.04 2.78 3.5 5.11 3.5z"
+                      />
+                    </svg>
+                  </div>
                   <div
-                    class="emoji-picker"
-                    :style="{ top: display.y + 'px', left: display.x + 'px' }"
+                    slot="emoji-picker"
+                    slot-scope="{ emojis, insert, display }"
                   >
-                    <div class="emoji-picker__search">
-                      <input type="text" v-model="search" v-focus />
-                    </div>
-                    <div>
-                      <div
-                        v-for="(emojiGroup, category) in emojis"
-                        :key="category"
-                      >
-                        <h5>{{ category }}</h5>
-                        <div class="emojis">
-                          <span
-                            v-for="(emoji, emojiName) in emojiGroup"
-                            :key="emojiName"
-                            @click="insert(emoji), sentReact()"
-                            :title="emojiName"
-                            >{{ emoji }}</span
-                          >
+                    <div
+                      class="emoji-picker"
+                      :style="{ top: display.y + 'px', left: display.x + 'px' }"
+                    >
+                      <div class="emoji-picker__search">
+                        <input type="text" v-model="search" />
+                      </div>
+                      <div>
+                        <div
+                          v-for="(emojiGroup, category) in emojis"
+                          :key="category"
+                        >
+                          <h5>{{ category }}</h5>
+                          <div class="emojis">
+                            <span
+                              v-for="(emoji, emojiName) in emojiGroup"
+                              :key="emojiName"
+                              @click="insert(emoji), sentReact(nodes.node_id)"
+                              :title="emojiName"
+                              >{{ emoji }}</span
+                            >
+                          </div>
                         </div>
                       </div>
                     </div>
                   </div>
+                </emoji-picker>
+                <div class="allemoji">
+                  <div
+                    class="eachemoji"
+                    v-for="(emojis, index) in configEmoji"
+                    :key="index"
+                  >
+                    <p v-if="nodes.node_id == emojis.node_id">
+                      {{ emojis.emoji_text }}
+                    </p>
+                  </div>
                 </div>
-              </emoji-picker>
-              <!-- <div class="btn-row">
-                <BaseButton buttonClass="action" @click="sentReact()"
-                  >Send Reaction</BaseButton
-                >
-              </div> -->
+              </div>
             </div>
-          </div>
-        </draggable>
+          </draggable>
+        </div>
       </div>
     </div>
   </div>
@@ -224,19 +233,16 @@ export default {
     draggable,
     EmojiPicker,
   },
-  props: {
-    nodeid: String,
-    nodetext: String,
-    nodewidth: Number,
-    nodeheight: Number,
-    deleted: Boolean,
-  },
 
   data() {
     return {
+      border: '2px solid black',
+      color: '#CDEAFF',
       input: '',
       search: '',
       pickupz: 1,
+      nodeid: String,
+      positionsArray: null,
     }
   },
 
@@ -244,23 +250,99 @@ export default {
     marked: marked,
   },
 
-  mounted() {},
-  computed: mapState({
-    scale: (state) => state.ui.scale,
-    otherNodes: (state) => state.otherNodes,
-    configPositions: (state) => state.configPositions,
-    configConnections: (state) => state.configConnections,
-    configEmoji: (state) => state.configEmoji,
-    toolmode: (state) => state.ui.mode,
-  }),
+  computed: {
+    ...mapState({
+      scale: (state) => state.ui.scale,
+      otherNodes: (state) => state.otherNodes,
+      configPositions: (state) => state.configPositions,
+      configConnections: (state) => state.configConnections,
+      configEmoji: (state) => state.configEmoji,
+      toolmode: (state) => state.ui.mode,
+    }),
+
+    othernodes_filtered: function () {
+      return this.otherNodes.filter((nodes) => {
+        // backwards compatablity fix
+        if (nodes.color == undefined || '') {
+          nodes.color = '#A4C2D6'
+        }
+        return nodes.deleted == false
+      })
+    },
+
+    positions_filtered: function () {
+      return this.configPositions.filter((positions) => {
+        return this.otherNodes.find((node) => {
+          return positions.node_id == node.node_id
+        })
+      })
+    },
+  },
+
+  mounted() {
+    //access the custom option using $options
+    setTimeout(this.loadData, 500)
+
+    const unwatch = this.$watch('othernodes_filtered', (value) => {
+      this.$options.myArray = this.othernodes_filtered
+      // this.$options.positionsArray = this.positions_filtered
+      this.$forceUpdate()
+      // ignore falsy values
+      if (!value) return
+
+      // stop watching when nodes_filtered[] is not empty
+      if (value && value.length) unwatch()
+
+      // process value here
+    })
+
+    const unwatchtwo = this.$watch('positions_filtered', (value) => {
+      // this.$options.myArray = this.nodes_filtered
+      this.$options.positionsArray = this.positions_filtered
+      this.$forceUpdate()
+      // ignore falsy values
+      if (!value) return
+
+      // stop watching when nodes_filtered[] is not empty
+      if (value && value.length) unwatchtwo()
+
+      // process value here
+    })
+  },
+
+  updated() {
+    this.$options.positionsArray = this.positions_filtered
+  },
+
   methods: {
-    onActivated() {
+    loadData() {
+      this.$options.positionsArray = this.positions_filtered
+      this.$forceUpdate()
+    },
+    onActivated(id, zindex) {
+      this.zindex = zindex
+      this.nodeid = id
       var i
+      var zindexes = []
+      for (i = 0; i < Object.keys(this.configPositions).length; i++) {
+        zindexes.push(this.configPositions[i].z_index)
+        if (this.configPositions[i].node_id == this.nodeid) {
+          this.width = this.configPositions[i].width
+          this.height = this.configPositions[i].height
+          this.zindex = this.configPositions[i].z_index
+        }
+      }
+      var topZ = Math.max(...zindexes)
+
       for (i = 0; i < Object.keys(this.configPositions).length; i++) {
+        if (topZ > 2147483640) {
+          this.configPositions[i].z_index = 0
+        }
+
         if (this.configPositions[i].node_id == this.nodeid) {
           this.width = this.configPositions[i].width
           this.height = this.configPositions[i].height
-          this.pickupz = this.configPositions[i].z_index
+          this.configPositions[i].z_index = topZ + 1
         }
       }
     },
@@ -270,15 +352,15 @@ export default {
       this.width = width
       this.height = height
     },
-    onResizestop(x, y, width, height, zindex) {
+    onResizestop(x, y, width, height) {
       var localnodeid = this.nodeid
-      zindex = this.pickupz
+      var zindex
       var i
       for (i = 0; i < Object.keys(this.configPositions).length; i++) {
         if (this.configPositions[i].node_id == this.nodeid) {
           this.width = this.configPositions[i].width
           this.height = this.configPositions[i].height
-          this.pickupz = this.configPositions[i].z_index
+          zindex = this.configPositions[i].z_index
         }
       }
       this.width = width
@@ -296,9 +378,9 @@ export default {
       this.localx = x
       this.localy = y
     },
-    onDragstop(x, y, width, height, zindex) {
+    onDragstop(x, y, width, height) {
       var localnodeid = this.nodeid
-      zindex = this.pickupz
+      var zindex
       width = this.width
       height = this.height
       var i
@@ -306,7 +388,7 @@ export default {
         if (this.configPositions[i].node_id == this.nodeid) {
           this.localx = this.configPositions[i].x_pos
           this.localy = this.configPositions[i].y_pos
-          this.pickupz = this.configPositions[i].z_index
+          zindex = this.configPositions[i].z_index
         }
       }
       this.$store.dispatch('movePos', {
@@ -335,6 +417,7 @@ export default {
           })
         }
       }
+      this.$options.myArray = this.othernodes_filtered
     },
     append(emoji) {
       this.input += emoji
@@ -350,13 +433,13 @@ export default {
       this.input = ''
     },
   },
-  directives: {
-    focus: {
-      inserted(el) {
-        el.focus()
-      },
-    },
-  },
+  // directives: {
+  //   focus: {
+  //     inserted(el) {
+  //       el.focus()
+  //     },
+  //   },
+  // },
 }
 </script>
 
@@ -401,7 +484,7 @@ h3 {
   top: -0.5rem;
   right: 0.5rem;
   width: 1.5rem;
-  height: 1.5rem;
+  height: 2.5rem;
   /* transform: scale(1.6); */
   /* margin: 0em 0em 1em 0em; */
   /* border-radius: 50%; */
@@ -414,7 +497,7 @@ h3 {
   /* transform: scale(1.5); */
 }
 .emoji-invoker > svg {
-  fill: #b1c6d0;
+  fill: #4e4e4e;
   margin-top: 10px;
   margin-left: 0.2em;
   transform: scale(1.5);
@@ -448,7 +531,7 @@ h3 {
 .emoji-picker h5 {
   margin-top: 0;
   margin-bottom: 0;
-  color: #b1b1b1;
+  color: #5c5c5c;
   text-transform: uppercase;
   font-size: 0.8rem;
   cursor: default;
diff --git a/app/src/components/SvgButton.vue b/app/src/components/SvgButton.vue
index 5543dee6c310a59859a0a91ab331527e98be523b..c3c6694f0c58964aeef6b7372f08f9a14a1c599e 100644
--- a/app/src/components/SvgButton.vue
+++ b/app/src/components/SvgButton.vue
@@ -56,7 +56,7 @@ button {
 }
 
 button.nodes {
-  background-color: rgb(155, 194, 216);
+  background-color: rgba(255, 255, 255, 0);
 }
 
 .z {
diff --git a/app/src/components/SvgButton2.vue b/app/src/components/SvgButton2.vue
index 164bbfee99d050d4ce14e4f613b3c268e602bb0c..63343d53625d6aa2d0d1d80de0b806dcd1f4548b 100644
--- a/app/src/components/SvgButton2.vue
+++ b/app/src/components/SvgButton2.vue
@@ -38,7 +38,7 @@ button {
 }
 
 button.nodes {
-  background-color: rgb(155, 194, 216);
+  background-color: rgba(255, 255, 255, 0);
 }
 
 .a {
diff --git a/app/src/components/SvgButton3.vue b/app/src/components/SvgButton3.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2274cc096289f5ccfa626867663cebacbb12dc57
--- /dev/null
+++ b/app/src/components/SvgButton3.vue
@@ -0,0 +1,80 @@
+<template>
+  <div>
+    <button v-on="$listeners" class="button" :class="buttonClass">
+      <svg xmlns="http://www.w3.org/2000/svg" width="50" viewBox="0 0 194 178">
+        <g transform="translate(-1340.934 -573.185)">
+          <g transform="translate(16 57)">
+            <path
+              class="a"
+              d="M1370.346,606.448C1250.818,701.656,1237.2,715.157,1237.2,715.157l-12.18,28.185,32.968-8.841,132.15-102.707Z"
+              transform="translate(103 -49)"
+            />
+            <path
+              class="a"
+              d="M0,0H47a8,8,0,0,1,8,8V35a0,0,0,0,1,0,0H0a0,0,0,0,1,0,0V0A0,0,0,0,1,0,0Z"
+              transform="translate(1484.229 527.185) rotate(50)"
+            />
+          </g>
+          <path
+            class="b"
+            d="M1278.245,681.651c-43.206,34.469-41.047,33.506-41.047,33.506l-12.18,28.185,32.968-8.841,57.042-46.029Z"
+            transform="translate(122 -12)"
+          />
+          <path
+            class="c"
+            d="M1370.346,606.448C1250.818,701.656,1237.2,715.157,1237.2,715.157l36.986-31.527,41.706,6.236,42.508-33.315,31.739-24.758Z"
+            transform="translate(122 -12)"
+          />
+          <path
+            class="d"
+            d="M1370.346,606.448C1250.818,701.656,1237.2,715.157,1237.2,715.157l-12.18,28.185,32.968-8.841,132.15-102.707Z"
+            transform="translate(122 -12)"
+          />
+          <path
+            d="M10,0H46a9,9,0,0,1,9,9V35a0,0,0,0,1,0,0H0a0,0,0,0,1,0,0V10A10,10,0,0,1,10,0Z"
+            transform="translate(1498.229 573.185) rotate(50)"
+          />
+        </g>
+      </svg>
+    </button>
+  </div>
+</template>
+
+<script>
+export default {
+  props: {
+    buttonClass: {
+      type: String,
+    },
+  },
+}
+</script>
+
+<style lang="css" scoped>
+button {
+  background-color: #6fcf97;
+  touch-action: manipulation;
+  border: none;
+  outline: none;
+  cursor: pointer;
+}
+
+button.nodes {
+  background-color: rgba(255, 255, 255, 0);
+}
+
+.a {
+  fill: #4f4f4f;
+}
+.b {
+  fill: #2d9cdb;
+}
+.c {
+  fill: #fff;
+}
+.d {
+  fill: none;
+  stroke: #000;
+  stroke-width: 7px;
+}
+</style>
diff --git a/app/src/components/TipsLayer.vue b/app/src/components/TipsLayer.vue
index 25cefb91103e174592eab9555314a8d5ab61c493..32bdf51fc5088e11928c5974a11614c99bbeaff7 100644
--- a/app/src/components/TipsLayer.vue
+++ b/app/src/components/TipsLayer.vue
@@ -1,13 +1,13 @@
 <template>
   <div ref="nodes" class="node">
-    <div v-show="tipsplease">
+    <div v-show="showtipsstate">
       <draggable
         class="innernode"
         :w="250"
         :h="225"
         :x="540"
         :y="15"
-        :z="1"
+        :z="0"
         :scale="scale"
         :draggable="true"
         :resizable="false"
@@ -21,7 +21,7 @@
       </draggable>
     </div>
 
-    <div v-show="!tipsplease"></div>
+    <div v-show="!showtipsstate"></div>
   </div>
 </template>
 
@@ -35,10 +35,11 @@ export default {
     return {
       nodetext:
         '## Shortcuts 🐢 -> 🐰 \n **n** to create new nodes. </br> **c** create connections </br> **a** or **s** select &amp; move nodes. </br> **m** pan and zoom canvas',
-      tipsplease: true,
+      // showtipsstate: true,
     }
   },
   computed: mapState({
+    showtipsstate: (state) => state.showtipsstate,
     scale: (state) => state.ui.scale,
   }),
   filters: {
@@ -47,7 +48,8 @@ export default {
 
   methods: {
     hideTips() {
-      this.tipsplease = false
+      var e = false
+      this.$store.dispatch('showTipsstate', e)
     },
   },
   components: {
diff --git a/app/src/components/UploadLayer.vue b/app/src/components/UploadLayer.vue
index f08dec267651da2c087f906d5db0c1f3b56f6519..61bf9ada025851c187a8b12e1e84eccf3cd65982 100644
--- a/app/src/components/UploadLayer.vue
+++ b/app/src/components/UploadLayer.vue
@@ -1,30 +1,185 @@
 <template>
-  <div class="ipfsupload">
-    <form>
-      <input
-        id="file"
-        class="fileInput"
-        type="file"
-        name="fileInput"
-        ref="fileInput"
-        @change="onFileSelected"
-      />
-
-      <textarea id="ipfshash" v-model="copytext"></textarea>
-      <div class="btn-row">
-        <button v-on:click.prevent="copyDone()" id="copyme" hidden>Copy</button>
-      </div>
-    </form>
+  <div v-if="this.currentroute.name == 'Organise'">
+    <div class="ipfsupload dropORG" id="dropContainer">
+      <form>
+        <input
+          id="file"
+          class="fileInput"
+          type="file"
+          name="fileInput"
+          ref="fileInput"
+          @change="onFileSelected"
+        />
+        <!--  -->
+        <p>Drop media here to upload.</p>
+        <svg
+          class="icon"
+          xmlns="http://www.w3.org/2000/svg"
+          width="50"
+          height="50"
+        >
+          <g>
+            <circle cx="6.5" cy="30.5" r="5.5" fill="grey" />
+            <circle cx="40.5" cy="30.5" r="5.5" fill="grey" />
+            <circle cx="17.5" cy="27.5" r="8.5" fill="grey" />
+            <circle cx="28.5" cy="25.5" r="10.5" fill="grey" />
+            <rect
+              fill-rule="evenodd"
+              clip-rule="evenodd"
+              x="6"
+              y="31"
+              width="35"
+              height="5"
+              fill="grey"
+            />
+            <circle
+              cx="9.5"
+              cy="25.5"
+              r="4.5"
+              fill="white"
+              stroke="grey"
+              stroke-width="2"
+            />
+            <circle
+              cx="43.5"
+              cy="25.5"
+              r="4.5"
+              fill="white"
+              stroke="grey"
+              stroke-width="2"
+            />
+            <circle
+              cx="20.5"
+              cy="22.5"
+              r="7.5"
+              fill="white"
+              stroke="grey"
+              stroke-width="2"
+            />
+            <circle
+              cx="31.5"
+              cy="20.5"
+              r="9.5"
+              fill="white"
+              stroke="grey"
+              stroke-width="2"
+            />
+            <rect x="9" y="23" width="35" height="6" fill="white" />
+            <rect x="9" y="23" width="12" height="5" fill="white" />
+            <rect x="18" y="21" width="9" height="6" fill="white" />
+            <rect x="17" y="17" width="21" height="5" fill="white" />
+            <rect x="21" y="18" width="10" height="4" fill="white" />
+            <path
+              d="M30.5303 15.4697C30.2374 15.1768 29.7626 15.1768 29.4697 15.4697L24.6967 20.2426C24.4038 20.5355 24.4038 21.0104 24.6967 21.3033C24.9896 21.5962 25.4645 21.5962 25.7574 21.3033L30 17.0607L34.2426 21.3033C34.5355 21.5962 35.0104 21.5962 35.3033 21.3033C35.5962 21.0104 35.5962 20.5355 35.3033 20.2426L30.5303 15.4697ZM30.75 28L30.75 16L29.25 16L29.25 28L30.75 28Z"
+              fill="grey"
+            />
+          </g>
+        </svg>
+        <textarea id="ipfshash" v-model="copytext"></textarea>
+        <div class="btn-row">
+          <button v-on:click.prevent="copyDone()" id="copyme" hidden>
+            Copy
+          </button>
+        </div>
+      </form>
+    </div>
+  </div>
+  <div v-else>
+    <div class="ipfsupload dropList" id="dropContainer">
+      <form>
+        <input
+          id="file"
+          class="fileInput"
+          type="file"
+          name="fileInput"
+          ref="fileInput"
+          @change="onFileSelected"
+        />
+        <!--  -->
+        <p>Drop media here to upload.</p>
+        <svg
+          class="icon"
+          xmlns="http://www.w3.org/2000/svg"
+          width="50"
+          height="50"
+        >
+          <g>
+            <circle cx="6.5" cy="30.5" r="5.5" fill="grey" />
+            <circle cx="40.5" cy="30.5" r="5.5" fill="grey" />
+            <circle cx="17.5" cy="27.5" r="8.5" fill="grey" />
+            <circle cx="28.5" cy="25.5" r="10.5" fill="grey" />
+            <rect
+              fill-rule="evenodd"
+              clip-rule="evenodd"
+              x="6"
+              y="31"
+              width="35"
+              height="5"
+              fill="grey"
+            />
+            <circle
+              cx="9.5"
+              cy="25.5"
+              r="4.5"
+              fill="white"
+              stroke="grey"
+              stroke-width="2"
+            />
+            <circle
+              cx="43.5"
+              cy="25.5"
+              r="4.5"
+              fill="white"
+              stroke="grey"
+              stroke-width="2"
+            />
+            <circle
+              cx="20.5"
+              cy="22.5"
+              r="7.5"
+              fill="white"
+              stroke="grey"
+              stroke-width="2"
+            />
+            <circle
+              cx="31.5"
+              cy="20.5"
+              r="9.5"
+              fill="white"
+              stroke="grey"
+              stroke-width="2"
+            />
+            <rect x="9" y="23" width="35" height="6" fill="white" />
+            <rect x="9" y="23" width="12" height="5" fill="white" />
+            <rect x="18" y="21" width="9" height="6" fill="white" />
+            <rect x="17" y="17" width="21" height="5" fill="white" />
+            <rect x="21" y="18" width="10" height="4" fill="white" />
+            <path
+              d="M30.5303 15.4697C30.2374 15.1768 29.7626 15.1768 29.4697 15.4697L24.6967 20.2426C24.4038 20.5355 24.4038 21.0104 24.6967 21.3033C24.9896 21.5962 25.4645 21.5962 25.7574 21.3033L30 17.0607L34.2426 21.3033C34.5355 21.5962 35.0104 21.5962 35.3033 21.3033C35.5962 21.0104 35.5962 20.5355 35.3033 20.2426L30.5303 15.4697ZM30.75 28L30.75 16L29.25 16L29.25 28L30.75 28Z"
+              fill="grey"
+            />
+          </g>
+        </svg>
+        <textarea id="ipfshash" v-model="copytext"></textarea>
+        <div class="btn-row">
+          <button v-on:click.prevent="copyDone()" id="copyme" hidden>
+            Copy
+          </button>
+        </div>
+      </form>
+    </div>
   </div>
 </template>
 
 <script>
 import VueIpfs from 'ipfs'
+import Router from '@/router'
 const ipfs = VueIpfs.create()
 var node
 var output
 var path = 'ready'
 var copytext = ''
+let dropArea
 
 //const fileContents = []
 
@@ -38,6 +193,7 @@ export default {
   },
   data: function () {
     return {
+      currentroute: Router.currentRoute,
       status: 'Connecting to IPFS...',
       // id: '',
       // agentVersion: '',
@@ -48,8 +204,16 @@ export default {
       copytext: copytext,
     }
   },
+
+  // computed: {
+  //   ...mapState({
+  //     myNodes: (state) => state.myNodes,
+  //   }),
+  // },
+
   mounted: function () {
     this.getIpfsNodeInfo()
+    setTimeout(this.dropReady, 300)
   },
 
   watch: {
@@ -69,12 +233,77 @@ export default {
     },
   },
   methods: {
+    dropReady() {
+      dropArea = document.getElementById('dropContainer')
+      ;['dragenter', 'dragover', 'dragleave', 'drop'].forEach((eventName) => {
+        dropArea.addEventListener(eventName, this.preventDefaults, false)
+      })
+      ;['dragenter', 'dragover'].forEach((eventName) => {
+        dropArea.addEventListener(eventName, overState)
+      })
+      ;['dragleave', 'dragend', 'drop'].forEach((eventName) => {
+        dropArea.addEventListener(eventName, leaveState)
+      })
+      ;['dragenter', 'dragover'].forEach((eventName) => {
+        dropArea.addEventListener(eventName, overStateList)
+      })
+      ;['dragleave', 'dragend', 'drop'].forEach((eventName) => {
+        dropArea.addEventListener(eventName, leaveStateList)
+      })
+
+      dropArea.addEventListener('drop', this.handleDrop, false)
+
+      function overStateList() {
+        if (document.getElementsByClassName('dropList')[0] != undefined) {
+          document.getElementsByClassName('dropList')[0].className =
+            'ipfsupload dropList dragover'
+        }
+      }
+
+      function leaveStateList() {
+        if (document.getElementsByClassName('dropList')[0] != undefined) {
+          document.getElementsByClassName('dropList')[0].className =
+            'ipfsupload dropList'
+        }
+      }
+
+      function overState() {
+        if (document.getElementsByClassName('dropORG')[0] != undefined) {
+          document.getElementsByClassName('dropORG')[0].className =
+            'ipfsupload dropORG dragover'
+        }
+      }
+
+      function leaveState() {
+        if (document.getElementsByClassName('dropORG')[0] != undefined) {
+          document.getElementsByClassName('dropORG')[0].className =
+            'ipfsupload dropORG'
+        }
+      }
+    },
+    preventDefaults(e) {
+      e.preventDefault()
+      e.stopPropagation()
+    },
+
+    handleDrop(e) {
+      let dt = e.dataTransfer
+      let files = dt.files
+      this.handleFiles(files)
+    },
+
+    handleFiles(files) {
+      // console.log(files)
+      this.dropIPFS(files)
+
+      // ;[...files].forEach(this.dropIPFS(files))
+    },
+
     async getIpfsNodeInfo() {
       try {
         // Await for ipfs node instance.
         node = await ipfs
 
-        // console.log(node)
         // Call ipfs `id` method.
         // Returns the identity of the Peer.
         //  const { agentVersion, id } = await node.id()
@@ -97,7 +326,19 @@ export default {
     async saveIPFS() {
       try {
         this.fileContents = await node.add(this.selectedFile)
-        this.getIPFS()
+        this.getIPFS(this.selectedFile.type)
+      } catch (err) {
+        // Set error status text.
+        this.status = `Error: ${err}`
+        console.log(this.status)
+      }
+    },
+
+    async dropIPFS(files) {
+      try {
+        this.fileContents = await node.add(files)
+
+        this.getIPFS(files[0].type)
       } catch (err) {
         // Set error status text.
         this.status = `Error: ${err}`
@@ -105,12 +346,12 @@ export default {
       }
     },
 
-    async getIPFS() {
+    async getIPFS(type) {
       try {
         for await (const newfile of node.get(this.fileContents.path)) {
           // console.log(newfile.path)
           this.path = newfile.path
-          this.copyClipBoard(this.path)
+          this.copyClipBoard(this.path, type)
         }
       } catch (err) {
         // Set error status text.
@@ -119,15 +360,32 @@ export default {
       }
     },
 
-    copyClipBoard(e) {
-      this.copytext = '![](https://ipfs.io/ipfs/' + e + ')'
-      //this.copyready = true
-      // setTimeout(this.copyClick, 1000)
+    copyClipBoard(e, type) {
+      // console.log(type)
+      switch (true) {
+        case type.includes('image/'):
+          this.copytext = '![](https://cloudflare-ipfs.com/ipfs/' + e + ')'
+          break
+        case type.includes('audio/'):
+          this.copytext =
+            '<audio src="https://cloudflare-ipfs.com/ipfs/' +
+            e +
+            '" controls></audio>'
+          break
+        case type.includes('video/'):
+          this.copytext =
+            '<video src="https://ipfs.infura.io/ipfs/' +
+            e +
+            '" controls></video>'
+          break
+        default:
+          this.copytext = 'https://cloudflare-ipfs.com/ipfs/' + e
+      }
     },
 
-    // copyClick() {
-    //   document.getElementById('copyme').click()
-    // },
+    copyClick() {
+      document.getElementById('copyme').click()
+    },
 
     copyDone() {
       var copyHash = document.getElementById('ipfshash')
@@ -135,21 +393,60 @@ export default {
 
       copyHash.setSelectionRange(0, 99999) /*For mobile devices*/
       document.execCommand('copy')
-      this.$emit('uploadAdded')
-      this.$emit('copyDone')
+      // this.$emit('upload-added')
+      this.$emit('copy-done')
     },
   },
 }
 </script>
 
 <style lang="css" scoped>
+.icon {
+  margin-top: -1.5em;
+  margin-left: 4.5em;
+}
 .fileInput {
   display: none;
 }
 
+#dropContainer {
+  border: 1px solid rgb(180, 180, 180);
+  height: 100px;
+  margin: 1em;
+}
+
+.dropList {
+  padding: 1em;
+  background-color: white;
+}
+.dropORG {
+  margin: 0em;
+  position: fixed;
+  bottom: 0em;
+  left: 27em;
+  padding: 1em;
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  justify-content: space-between;
+  border: 1px solid rgb(180, 180, 180);
+  border-radius: 20px;
+  height: 100px;
+  background-color: white;
+  outline: 2px dashed rgb(180, 180, 180);
+  outline-offset: -10px;
+}
+
+.dragover {
+  outline: 2px dashed black;
+  outline-offset: -10px;
+  background-color: rgb(180, 180, 180);
+}
+
 textarea {
   position: absolute;
-  top: 0px;
+  top: 10px;
+  left: 0em;
   height: 0px;
   width: 0px;
   padding: 0px;
diff --git a/app/src/components/old/ConnectionsLayer.vue b/app/src/components/old/ConnectionsLayer.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2addb63c675feb4d4a8d584b56b107ed31ca3086
--- /dev/null
+++ b/app/src/components/old/ConnectionsLayer.vue
@@ -0,0 +1,310 @@
+<template>
+  <div class="connections">
+    <canvas ref="pixi" id="pixi"></canvas>
+  </div>
+</template>
+
+<script>
+import { mapState } from 'vuex'
+import * as PIXI from 'pixi.js'
+//var initialMoveTo
+//var id
+var fromnode
+var tonode
+var xposstart
+var yposstart
+var xposend
+var yposend
+var endState = false
+
+export default {
+  name: 'ConnectionsLayer',
+
+  data() {
+    return {
+      //  localtoolstate: this.toolmode,
+    }
+  },
+  computed: mapState({
+    configConnections: (state) => state.configConnections,
+    configPositions: (state) => state.configPositions,
+    myNodes: (state) => state.myNodes,
+    otherNodes: (state) => state.otherNodes,
+    toolmode: (state) => state.ui.mode,
+    // connectionstate: (state) => state.connectionstate,
+  }),
+
+  watch: {
+    configConnections: {
+      deep: true,
+
+      handler() {
+        this.connectionsDraw()
+      },
+    },
+    toolmode: {
+      handler() {
+        this.toolState()
+      },
+    },
+  },
+
+  methods: {
+    toolState() {
+      if (this.toolmode == 'connect') {
+        this.buttonsDraw()
+      } else {
+        this.connectionsDraw()
+      }
+    },
+
+    makeConnection(id, xpos, ypos) {
+      if (endState == false) {
+        fromnode = id
+        xposstart = xpos
+        yposstart = ypos
+
+        //count = 1
+        // this.$store.dispatch('connectionState', true)
+      } else if (endState == true) {
+        tonode = id
+        xposend = xpos
+        yposend = ypos
+
+        // count = 0
+        //  this.$store.dispatch('connectionState', false)
+        // console.log(fromnode, tonode, xposstart, yposstart, xposend, yposend)
+        this.$store.dispatch('makeConnect', {
+          fromnode,
+          tonode,
+          xposstart,
+          yposstart,
+          xposend,
+          yposend,
+        })
+        endState = false
+      }
+    },
+    buttonsDraw() {
+      var i
+      var j
+      //var n = 1
+      var ref = this
+      var buttonMap = {}
+      var buttonMapOther = {}
+
+      this.canvas = this.$refs.pixi
+      const stage = this.PIXIApp.stage
+      //const allButtons = new PIXI.Container()
+
+      for (i = 0; i < Object.keys(this.myNodes).length; i++) {
+        buttonMap[i] = new PIXI.Graphics()
+        // console.log(buttonMap[i])
+        for (j = 0; j < Object.keys(this.configPositions).length; j++) {
+          if (
+            this.configPositions[j].node_id == this.myNodes[i].node_id &&
+            this.myNodes[i].deleted == false
+          ) {
+            buttonMap[i].name = this.myNodes[i].node_id
+            // console.log(button_one.name)
+            buttonMap[i].lineStyle(1)
+            buttonMap[i].beginFill(0xcab6ff, 1)
+            // x, y, radius
+
+            buttonMap[i].drawCircle(
+              this.configPositions[j].x_pos + this.configPositions[j].width,
+              this.configPositions[j].y_pos +
+                this.configPositions[j].height / 2,
+              15
+            )
+            buttonMap[i].endFill()
+            // names it the last one only?
+          }
+          //  allButtons.addChild(buttonMap[i])
+          //  stage.addChild(allButtons)
+          stage.addChild(buttonMap[i])
+          // Opt-in to interactivity
+          buttonMap[i].interactive = true
+          // Shows hand cursor
+          buttonMap[i].buttonMode = true
+        }
+
+        buttonMap[i]
+          .on('pointerdown', onDragStart)
+          .on('pointerdown', start)
+          .on('pointerup', onDragEnd)
+          .on('pointerup', finish)
+          .on('pointerupoutside', onDragEndOutside)
+          .on('pointermove', onDragMove)
+      }
+
+      for (i = 0; i < Object.keys(this.otherNodes).length; i++) {
+        buttonMapOther[i] = new PIXI.Graphics()
+        // console.log(buttonMap[i])
+        for (j = 0; j < Object.keys(this.configPositions).length; j++) {
+          if (this.configPositions[j].node_id == this.otherNodes[i].node_id) {
+            buttonMapOther[i].name = this.otherNodes[i].node_id
+            // console.log(button_one.name)
+            buttonMapOther[i].lineStyle(1)
+            buttonMapOther[i].beginFill(0xcab6ff, 1)
+            // x, y, radius
+
+            buttonMapOther[i].drawCircle(
+              this.configPositions[j].x_pos + this.configPositions[j].width,
+              this.configPositions[j].y_pos +
+                this.configPositions[j].height / 2,
+              15
+            )
+            buttonMapOther[i].endFill()
+            // names it the last one only?
+          }
+          stage.addChild(buttonMapOther[i])
+
+          // Opt-in to interactivity
+          buttonMapOther[i].interactive = true
+          // Shows hand cursor
+          buttonMapOther[i].buttonMode = true
+        }
+
+        buttonMapOther[i]
+          .on('pointerdown', onDragStart)
+          .on('pointerdown', start)
+          .on('pointerup', finish)
+          .on('pointerup', onDragEnd)
+          .on('pointerupoutside', onDragEndOutside)
+          .on('pointermove', onDragMove)
+      }
+
+      let line = new PIXI.Graphics()
+      var initialMoveTo
+      let lines = []
+
+      function start(event) {
+        // console.log(this.getChildByName)
+        this.id = this.name
+        ref.makeConnection(this.id, event.data.global.x, event.data.global.y)
+      }
+
+      function finish(event) {
+        this.id = this.name
+        if (this.id != fromnode) {
+          endState = true
+          ref.makeConnection(this.id, event.data.global.x, event.data.global.y)
+        } else {
+          endState = false
+        }
+      }
+
+      function onDragStart(event) {
+        this.dragging = true
+        // returns on the last one in the loop
+        // console.log(button_one.name)
+        let mouseX = event.data.global.x
+        let mouseY = event.data.global.y
+
+        initialMoveTo = [mouseX, mouseY]
+
+        line.lineStyle(8, 0xcab6ff)
+        line.moveTo(mouseX, mouseY)
+
+        lines = [line].concat(lines)
+
+        stage.addChild(line)
+      }
+
+      function onDragEnd() {
+        //endState = true
+        this.dragging = false
+        stage.removeChild(line)
+      }
+
+      function onDragEndOutside() {
+        stage.removeChild(line)
+        // console.log('outside')
+        // console.log(this.name)
+        // console.log(fromnode)
+        // if (this.name != fromnode) {
+        //   console.log('diff')
+        //   endState = true
+        //   this.dragging = false
+        //   stage.removeChild(line)
+        //   this.finish()
+        // }
+        // } else {
+        //   endState = false
+        //   this.dragging = false
+        //   stage.removeChild(line)
+        // }
+      }
+
+      function onDragMove(event) {
+        if (this.dragging) {
+          let mouseX = event.data.global.x
+          let mouseY = event.data.global.y
+          lines[0].clear()
+          lines[0].lineStyle(8, 0xcab6ff)
+          lines[0].moveTo(initialMoveTo[0], initialMoveTo[1])
+          lines[0].lineTo(mouseX, mouseY)
+        }
+      }
+    },
+
+    connectionsDraw() {
+      var i
+      //  var j
+      this.canvas = this.$refs.pixi
+      const stage = this.PIXIApp.stage
+      let graphics = new PIXI.Graphics()
+      //let line = new PIXI.Graphics()
+
+      graphics.lineStyle(8, 0xcab6ff)
+      // move the lines to start and end pos based on if to_node == node_id
+      // or from_id == node_id
+      //start_id == node_id
+      // this will put them in the same place as buttons
+
+      //     for (i = 0; i < Object.keys(this.otherNodes).length; i++) {
+
+      // for (j = 0; j < Object.keys(this.configPositions).length; j++) {
+      //   if (this.configConnections[j].start_id == this.otherNodes[i].node_id) {
+
+      // for (j = 0; j < Object.keys(this.otherNodes).length; j++) {
+      for (i = 0; i < Object.keys(this.configConnections).length; i++) {
+        //start
+
+        graphics.moveTo(
+          this.configConnections[i].x_pos_start,
+          this.configConnections[i].y_pos_start
+        )
+
+        //end
+        graphics.lineTo(
+          this.configConnections[i].x_pos_end,
+          this.configConnections[i].y_pos_end
+        )
+      }
+      //  }
+      for (var l = stage.children.length - 1; l >= 0; l--) {
+        stage.removeChild(stage.children[l])
+      }
+
+      stage.addChild(graphics)
+      if (this.toolmode == 'connect') {
+        this.buttonsDraw()
+      }
+    },
+  },
+  mounted() {
+    const canvas = this.$refs.pixi
+    this.PIXIApp = new PIXI.Application({
+      width: 3000,
+      height: 3000,
+      antialias: true,
+      transparent: true,
+      view: canvas,
+    })
+
+    this.connectionsDraw()
+  },
+}
+</script>
diff --git a/app/src/components/old/ControlsLayer.vue b/app/src/components/old/ControlsLayer.vue
index 4bdbb4cdb714dccead61e865cd953b01f9aac304..2bbe134fcf9a99e73de74b4b47af59eab01ddf10 100644
--- a/app/src/components/old/ControlsLayer.vue
+++ b/app/src/components/old/ControlsLayer.vue
@@ -54,7 +54,7 @@ export default {
     },
     listView() {
       // FIXME: add action here to toggle visiblity
-      this.$emit('listView')
+      this.$emit('list-view')
     },
     exportStorage: function () {
       // Save local indexeddb document-store to JSON file
@@ -92,7 +92,7 @@ export default {
       } else {
         // handle offline status
         // console.log('offline')
-        ref.$emit('offlineTriggered')
+        ref.$emit('offline-triggered')
       }
     },
     isReachable: function (url) {
diff --git a/app/src/components/old/OffLine.vue b/app/src/components/old/OffLine.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c8b0803ed65105a88f20e60855caee55f62399b3
--- /dev/null
+++ b/app/src/components/old/OffLine.vue
@@ -0,0 +1,100 @@
+// FIXME: Everything below is OLD code
+
+<template>
+  <div class="yourdata" name="anchorName">
+    <div v-for="(nodes, index) in $options.myArray" v-bind:key="index">
+      <textarea
+        @focus="editTrue(true)"
+        @blur="editTrue(false)"
+        autofocus
+        @input="editNode"
+        v-model="nodes.node_text"
+        :id="nodes.node_id"
+        class="drag-cancel"
+        ref="nodetext"
+        placeholder="Type your thoughts and ideas here! (will sync to couchdb when back online)"
+      ></textarea>
+    </div>
+
+    <div class="btn-row">
+      <BaseButton
+        buttonClass="danger"
+        @click.prevent="deleteFlag(nodes.node_id)"
+        >Discard</BaseButton
+      >
+    </div>
+  </div>
+</template>
+
+<script>
+import { mapState } from 'vuex'
+
+export default {
+  name: 'OffLine',
+
+  data() {
+    return {
+      nodeid: String,
+      myArray: null,
+    }
+  },
+  computed: {
+    ...mapState({
+      myNodes: (state) => state.myNodes,
+    }),
+
+    nodes_filtered: function () {
+      return this.myNodes.filter((nodes) => {
+        return nodes.deleted == false
+      })
+    },
+  },
+
+  mounted() {
+    setTimeout(this.loadData, 500)
+  },
+
+  methods: {
+    loadData() {
+      this.$options.myArray = this.nodes_filtered
+      // this.$options.positionsArray = this.positions_filtered
+      this.$forceUpdate()
+    },
+    // addNode() {
+    //   // console.log('add called')
+    //   this.$store.dispatch('addNode')
+    //   this.added = !this.added
+    // },
+    editTrue(e) {
+      this.$emit('edit-true', e)
+      //// console.log(e)
+    },
+
+    editNode(e) {
+      var nodeid = e.target.id
+      var nodetext = e.target.value
+      this.$store.dispatch('editNode', { nodeid, nodetext })
+    },
+
+    deleteFlag(e) {
+      if (confirm('Confirm discard?')) {
+        this.$store.dispatch('deleteFlag', { e })
+        this.$options.myArray = this.nodes_filtered
+      } else {
+        // nothing happens
+      }
+    },
+  },
+}
+</script>
+
+<style lang="css" scoped>
+h3 {
+  margin-top: 1em;
+}
+
+.data p {
+  white-space: pre-wrap;
+  line-height: 1em;
+}
+</style>
diff --git a/app/src/components/old/OnBoard-old.vue b/app/src/components/old/OnBoard-old.vue
index 208565734055f9c0cc3e9fa93403e0e765c7f55a..ac5594d3e2316bab88cf92d0b3cf275899ceb1d6 100644
--- a/app/src/components/old/OnBoard-old.vue
+++ b/app/src/components/old/OnBoard-old.vue
@@ -106,7 +106,7 @@ export default {
     },
 
     letsGo() {
-      this.$emit('clientAdded')
+      this.$emit('client-added')
       // this.$emit('readyMode')
     },
     setFocus() {
diff --git a/app/src/experimental/ModeToolbar.vue b/app/src/experimental/ModeToolbar.vue
index 08c71cd0ec0f23e822671a3cce658f08a317da24..d345bf1a5e10dd60f59066a8e074d128fa79051b 100644
--- a/app/src/experimental/ModeToolbar.vue
+++ b/app/src/experimental/ModeToolbar.vue
@@ -12,20 +12,17 @@
       />
     </button>
 
-    <p>{{ clientid }} / {{ microcosm }}</p>
+    <!-- <p>{{ clientid }} / {{ microcosm }}</p> -->
   </nav>
 </template>
 
 <script>
-var serverUrl = 'https://nodenogg.in'
 import { mapState, mapGetters } from 'vuex'
 
 import * as allModes from '@/experimental/modes'
 
 export default {
   mounted() {
-    window.addEventListener('online', this.handleConnection)
-    window.addEventListener('offline', this.handleConnection)
     this.clientid = localStorage.myNNClient
     this.microcosm = localStorage.mylastMicrocosm
   },
@@ -49,24 +46,25 @@ export default {
         }
       }
       if (mode == 'addNode') {
-        this.$store.dispatch('addNode')
+        this.$emit('add-node')
+        // this.$store.dispatch('addNode')
       }
       if (mode == 'upload') {
-        this.$emit('uploadAdded')
+        this.$emit('upload-added')
       }
       if (mode == 'copy') {
-        this.$emit('copyDone')
+        this.$emit('copy-done')
 
         alert(
           'Now all you need to do is paste into a new node to display your media'
         )
       }
       if (mode == 'draw') {
-        this.$emit('drawOn')
+        this.$emit('draw-on')
         // console.log(mode)
       }
       if (mode != 'draw') {
-        this.$emit('drawOff')
+        this.$emit('draw-off')
         //console.log(mode)
       }
     },
@@ -82,38 +80,6 @@ export default {
         process.env.VUE_APP_HTTP + '://' + process.env.VUE_APP_URL + '/'
       )
     },
-
-    handleConnection: function () {
-      var ref = this
-      if (navigator.onLine) {
-        this.isReachable(this.getServerUrl()).then(function (online) {
-          if (online) {
-            // handle online status
-            console.log('online')
-            location.reload()
-          } else {
-            console.log('no connectivity')
-          }
-        })
-      } else {
-        // handle offline status
-        console.log('offline')
-        ref.$emit('offlineTriggered')
-      }
-    },
-    isReachable: function (url) {
-      // This should pick up a CORS error but it doesnt seem to //
-      return fetch(url, { method: 'HEAD', mode: 'no-cors' })
-        .then(function (resp) {
-          return resp && (resp.ok || resp.type === 'opaque')
-        })
-        .catch(function (err) {
-          console.warn('[conn test failure]:', err)
-        })
-    },
-    getServerUrl: function () {
-      return serverUrl || window.location.origin
-    },
   },
   data() {
     return {
diff --git a/app/src/experimental/uiStore.js b/app/src/experimental/uiStore.js
index 9d4a81ac61caec88a2aecf47185f27bc52913958..d3d7b7659434bb832b73499898262ffe00075843 100644
--- a/app/src/experimental/uiStore.js
+++ b/app/src/experimental/uiStore.js
@@ -18,6 +18,7 @@ const store = {
       nodes: [],
     },
     mode: 'select',
+
     scale: 1,
     translation: {
       x: 0,
diff --git a/app/src/main.js b/app/src/main.js
index c554968c7b97471887d03525aa0a3a4a18b544ee..db32d0b022ccdb632ba6b5db0bf1ed546a4ff345 100644
--- a/app/src/main.js
+++ b/app/src/main.js
@@ -17,6 +17,15 @@ Vue.component('Icon', Icon)
 
 Vue.config.productionTip = false
 
+// Register a global custom directive called `v-focus`
+Vue.directive('focus', {
+  // When the bound element is inserted into the DOM...
+  inserted: function (el) {
+    // Focus the element
+    el.focus()
+  },
+})
+
 new Vue({
   router,
   store,
diff --git a/app/src/router/index.js b/app/src/router/index.js
index 8489e75d4d6113242f2ad9b468076b7fcc823bd7..069ce11e292c7e6808f833316d99681546d9d2ed 100644
--- a/app/src/router/index.js
+++ b/app/src/router/index.js
@@ -1,12 +1,13 @@
 import Vue from 'vue'
 import VueRouter from 'vue-router'
-import List from '../views/List.vue'
+import Collect from '../views/Collect.vue'
 import Organise from '../views/Organise.vue'
 import Cards from '../views/Cards.vue'
 import Discarded from '../views/Discarded.vue'
 import Leave from '../views/Leave.vue'
 import About from '../views/About.vue'
 import NotFound from '../views/NotFound.vue'
+import NitPicky from '../views/NitPicky.vue'
 //import store from '../store'
 // import Oldhome from '../views/Oldhome'
 //import Test from '../views/Test'
@@ -17,7 +18,7 @@ export const routes = [
   {
     path: '/',
     name: 'Collect',
-    component: List,
+    component: Collect,
   },
   {
     path: '/organise',
@@ -46,6 +47,11 @@ export const routes = [
     name: 'About',
     component: About,
   },
+  {
+    path: '/nitpicky',
+    name: 'NitPicky',
+    component: NitPicky,
+  },
 
   {
     // catches 404 errors
@@ -57,7 +63,7 @@ export const routes = [
   // dynamic segement `:microcosm` is added to the path
   {
     path: '/microcosm/:microcosm',
-    component: List,
+    component: Collect,
   },
 ]
 
diff --git a/app/src/store/index.js b/app/src/store/index.js
index ab652eb207ad2ed5ca9df9a0bf06529bdff1d15c..1bdc2bafed4fd5f31d9c755be21f1b32bc4bf43a 100644
--- a/app/src/store/index.js
+++ b/app/src/store/index.js
@@ -40,7 +40,7 @@ var remote =
 const store = new Vuex.Store({
   state: {
     shortcutstate: false,
-    hidetipsstate: true,
+    showtipsstate: true,
     //  connectionstate: false,
     version: process.env.VUE_APP_VERSION,
     localnodeid: '',
@@ -69,6 +69,18 @@ const store = new Vuex.Store({
     configEmoji: [
       //{}
     ],
+    configRemote: [
+      // {
+      // protocol: 'https://',
+      // couchusername: 'something',
+      // couchpassword: 'passcouch',
+      // couchurl: 'domain.com',
+      // },
+      //{ https://,
+      // couchusername
+      // couchpassword
+      // couchURL}
+    ],
   },
   mutations: {
     CREATE_MICROCOSM(state, doc) {
@@ -82,16 +94,31 @@ const store = new Vuex.Store({
         } else {
           microcosm = doc
         }
+
         pouchdb = new PouchDB(microcosm)
-        remote =
-          process.env.VUE_APP_COUCH_HTTP +
-          '://' +
-          process.env.VUE_APP_COUCH_USER +
-          ':' +
-          process.env.VUE_APP_COUCH_PASS +
-          process.env.VUE_APP_COUCH_URL +
-          microcosm +
-          '/'
+        if (state.configRemote && state.configRemote.length > 0) {
+          remote =
+            state.configRemote[0].protocol +
+            state.configRemote[0].couchusername +
+            ':' +
+            state.configRemote[0].couchpassword +
+            '@' +
+            state.configRemote[0].couchurl +
+            '/' +
+            microcosm +
+            '/'
+        } else {
+          remote =
+            process.env.VUE_APP_COUCH_HTTP +
+            '://' +
+            process.env.VUE_APP_COUCH_USER +
+            ':' +
+            process.env.VUE_APP_COUCH_PASS +
+            process.env.VUE_APP_COUCH_URL +
+            microcosm +
+            '/'
+        }
+
         store.dispatch('syncDB')
       })
     },
@@ -136,6 +163,7 @@ const store = new Vuex.Store({
               node_id: state.allNodes[i].doc.nodes[j].node_id,
               node_text: state.allNodes[i].doc.nodes[j].node_text,
               deleted: state.allNodes[i].doc.nodes[j].deleted,
+              color: state.allNodes[i].doc.nodes[j].color,
             }
 
             state.otherNodes.push(newNode)
@@ -183,10 +211,10 @@ const store = new Vuex.Store({
               nodes: [
                 {
                   // FIXME: these values are here as GET_ALL_NODES cant hunt a blank
-                  // this shouldnt need to be here though
+                  // this shouldn't need to be here though
                   node_id: startup,
                   node_text:
-                    '## Welcome \n This node was automatically by the system as a workaround for an iOS and URL routing bug, just ignore for now please \n ## 🤦🏻‍♂️',
+                    '## Welcome \n This node was automatically created by the system as a workaround for an iOS and URL routing bug, just ignore for now please \n ## 🤦🏻‍♂️',
                   node_owner: state.myclient,
                   content_type: 'sheet',
                   // NOTE: the first node is also hidden due to a position not being created
@@ -386,96 +414,131 @@ const store = new Vuex.Store({
       state.shortcutstate = e
     },
 
-    // CONNECTION_STATE(state, e) {
-    //   state.connectionstate = e
-    // },
+    SHOWTIPS_STATE(state, e) {
+      state.showtipsstate = e
+    },
+
+    UPDATE_REMOTE(state, e) {
+      state.configRemote = [
+        {
+          protocol: e.protocol,
+          couchusername: e.couchusername,
+          couchpassword: e.couchpassword,
+          couchurl: e.couchurl,
+        },
+      ]
+    },
+
+    ADD_NODE(state) {
+      var i
+      var zindex
+      var totalNodes = []
+      for (i = 0; i < Object.keys(state.allNodes).length; i++) {
+        if (
+          state.allNodes[i].id != state.global_pos_name &&
+          state.allNodes[i].id != state.global_emoji_name &&
+          state.allNodes[i].id != state.global_con_name //&&
+          //
+        ) {
+          // console.log(state.allNodes[i].doc.nodes.length)
+          totalNodes.push(state.allNodes[i].doc.nodes.length)
+        }
+      }
+      const reducer = (accumulator, currentValue) => accumulator + currentValue
+      if (totalNodes && totalNodes.length > 0) {
+        zindex = totalNodes.reduce(reducer)
+      } else {
+        zindex = 1
+      }
 
-    ADD_NODE(state, e) {
       var uniqueid =
         Math.random().toString(36).substring(2, 15) +
         Math.random().toString(36).substring(2, 15)
       state.localnodeid = uniqueid
-
-      pouchdb.get(state.myclient).then(function (doc) {
-        if (e == undefined) {
+      if (state.microcosm == 'firstvisit') {
+        console.log('not allowed on this microcosm')
+      } else {
+        pouchdb.get(state.myclient).then(function (doc) {
           doc.nodes.push({
             node_id: uniqueid,
             node_text: '',
             node_owner: state.myclient,
             content_type: 'sheet',
             deleted: false,
-            attachment_name: e,
+            read_mode: false,
+            color: '#9bc2d8',
           })
-        }
 
-        return pouchdb
-          .put({
-            _id: state.myclient,
-            _rev: doc._rev,
-            _attachments: doc._attachments,
-            nodes: doc.nodes,
-          })
-          .then(function () {
-            return pouchdb.get(state.myclient).then(function (doc) {
-              state.myNodes = doc.nodes
-              var end = Object.keys(state.myNodes).length - 1
-              const newNode = {
-                nodeid: state.myNodes[end].id,
-                nodetext: state.myNodes[end].text,
-                //  content_type: state.notes[end].content_type
+          return pouchdb
+            .put({
+              _id: state.myclient,
+              _rev: doc._rev,
+              _attachments: doc._attachments,
+              nodes: doc.nodes,
+            })
+            .then(function () {
+              return pouchdb.get(state.myclient).then(function (doc) {
+                state.myNodes = doc.nodes
+                var end = Object.keys(state.myNodes).length - 1
+                const newNode = {
+                  nodeid: state.myNodes[end].id,
+                  nodetext: state.myNodes[end].text,
+                  //  content_type: state.notes[end].content_type
+                }
+                state.activeNode = newNode
+              })
+            })
+            .catch(function (err) {
+              if (err.status == 404) {
+                // pouchdb.put({  })
               }
-              state.activeNode = newNode
             })
-          })
-          .catch(function (err) {
-            if (err.status == 404) {
-              // pouchdb.put({  })
+        })
+        pouchdb.get(state.global_pos_name).then(function (doc) {
+          //console.log(doc.positions[doc.positions.length - 1].z_index)
+          var i
+          localxpos = 50
+          localypos = 50
+          for (i = 0; i < Object.keys(doc.positions).length; i++) {
+            if (doc.positions[i].x_pos == 50) {
+              localxpos = 70
+              localypos = 70
+            }
+            if (doc.positions[i].x_pos == 70) {
+              localxpos = 90
+              localypos = 90
+            }
+            if (doc.positions[i].x_pos == 90) {
+              localxpos = 110
+              localypos = 110
+            }
+            if (doc.positions[i].x_pos == 110) {
+              localxpos = 50
+              localypos = 50
             }
-          })
-      })
-      pouchdb.get(state.global_pos_name).then(function (doc) {
-        //console.log(doc.positions[doc.positions.length - 1].z_index)
-        var i
-        localxpos = 50
-        localypos = 50
-        for (i = 0; i < Object.keys(doc.positions).length; i++) {
-          if (doc.positions[i].x_pos == 50) {
-            localxpos = 70
-            localypos = 70
-          }
-          if (doc.positions[i].x_pos == 70) {
-            localxpos = 90
-            localypos = 90
-          }
-          if (doc.positions[i].x_pos == 90) {
-            localxpos = 110
-            localypos = 110
-          }
-          if (doc.positions[i].x_pos == 110) {
-            localxpos = 50
-            localypos = 50
           }
-        }
 
-        doc.positions.push({
-          node_id: uniqueid,
-          x_pos: localxpos,
-          y_pos: localypos,
-          width: 200,
-          height: 370,
-          z_index: 10,
-          read_mode: false,
-        })
-        return pouchdb
-          .put({
-            _id: state.global_pos_name,
-            _rev: doc._rev,
-            positions: doc.positions,
-          })
-          .catch(function (err) {
-            console.log(err)
+          doc.positions.push({
+            node_id: uniqueid,
+            x_pos: localxpos,
+            y_pos: localypos,
+            width: 200,
+            height: 370,
+            z_index: zindex,
+            read_mode: false,
+            node_sort: 0,
           })
-      })
+          return pouchdb
+            .put({
+              _id: state.global_pos_name,
+              _rev: doc._rev,
+              positions: doc.positions,
+            })
+            .catch(function (err) {
+              console.log(err)
+            })
+        })
+      }
     },
 
     EDIT_NODE(state, e) {
@@ -512,6 +575,40 @@ const store = new Vuex.Store({
         })
     },
 
+    COLOR_NODE(state, e) {
+      //   console.log(e)
+      var i
+      for (i = 0; i < Object.keys(state.myNodes).length; i++) {
+        if (e.nodeid == state.myNodes[i].node_id) {
+          state.myNodes[i].color = e.color
+        }
+      }
+      pouchdb
+        .get(state.myclient)
+        .then(function (doc) {
+          // put the store into pouchdb
+
+          return pouchdb.bulkDocs([
+            {
+              _id: state.myclient,
+              _rev: doc._rev,
+              _attachments: doc._attachments,
+              nodes: state.myNodes,
+            },
+          ])
+        })
+        .then(function () {
+          return pouchdb.get(state.myclient).then(function (doc) {
+            state.myNodes = doc.nodes
+          })
+        })
+        .catch(function (err) {
+          if (err.status == 404) {
+            // pouchdb.put({  })
+          }
+        })
+    },
+
     DELETE_FLAG(state, e) {
       var i
       for (i = 0; i < Object.keys(state.myNodes).length; i++) {
@@ -545,7 +642,7 @@ const store = new Vuex.Store({
     },
 
     RESTORE_NODE(state, e) {
-      console.log(e)
+      // console.log(e)
       var i
       for (i = 0; i < Object.keys(state.myNodes).length; i++) {
         if (e.e == state.myNodes[i].node_id) {
@@ -578,6 +675,70 @@ const store = new Vuex.Store({
     },
 
     READ_FLAG(state, e) {
+      var i
+      for (i = 0; i < Object.keys(state.myNodes).length; i++) {
+        if (e.e == state.myNodes[i].node_id) {
+          state.myNodes[i].read_mode = e.readmode
+        }
+      }
+      pouchdb
+        .get(state.myclient)
+        .then(function (doc) {
+          // put the store into pouchdb
+          return pouchdb.bulkDocs([
+            {
+              _id: state.myclient,
+              _rev: doc._rev,
+              _attachments: doc._attachments,
+              nodes: state.myNodes,
+            },
+          ])
+        })
+        .then(function () {
+          return pouchdb.get(state.myclient).then(function (doc) {
+            state.myNodes = doc.nodes
+          })
+        })
+        .catch(function (err) {
+          if (err.status == 404) {
+            // pouchdb.put({  })
+          }
+        })
+    },
+
+    SORT_NODE(state, e) {
+      var i
+      for (i = 0; i < Object.keys(state.configPositions).length; i++) {
+        if (e.nodeid == state.configPositions[i].node_id) {
+          state.configPositions[i].node_sort = e.nodesort
+        }
+      }
+      pouchdb
+        .get(state.global_pos_name)
+        .then(function (doc) {
+          //  // console.log(doc)
+          // put the store into pouchdb
+          return pouchdb.bulkDocs([
+            {
+              _id: state.global_pos_name,
+              _rev: doc._rev,
+              positions: state.configPositions,
+            },
+          ])
+        })
+        .then(function () {
+          return pouchdb.get(state.global_pos_name).then(function (doc) {
+            state.configPositions = doc.positions
+          })
+        })
+        .catch(function (err) {
+          if (err.status == 404) {
+            // pouchdb.put({  })
+          }
+        })
+    },
+
+    LEGACY_READ_FLAG(state, e) {
       var i
       // console.log(e.e)
       for (i = 0; i < Object.keys(state.configPositions).length; i++) {
@@ -713,6 +874,9 @@ const store = new Vuex.Store({
       commit('MOVE_POS', nodeid, xpos, ypos, width, height, zindex)
     },
 
+    sortNode: ({ commit }, e) => {
+      commit('SORT_NODE', e)
+    },
     updateConnect: ({ commit }, fromnode, xposstart, yposstart) => {
       commit('UPDATE_CONNECT', fromnode, xposstart, yposstart)
     },
@@ -720,6 +884,11 @@ const store = new Vuex.Store({
       commit('UPDATE_CONNECT_TWO', tonode, xposend, yposend)
     },
 
+    legacyreadFlag: ({ commit }, e) => {
+      // var text = e.target.value
+      commit('LEGACY_READ_FLAG', e)
+    },
+
     readFlag: ({ commit }, e) => {
       // var text = e.target.value
       commit('READ_FLAG', e)
@@ -731,6 +900,22 @@ const store = new Vuex.Store({
       commit('EDIT_NODE', { nodeid, nodetext })
     },
 
+    colorNode: ({ commit }, { nodeid, color }) => {
+      commit('COLOR_NODE', { nodeid, color })
+    },
+
+    updateRemote: (
+      { commit },
+      { protocol, couchusername, couchpassword, couchurl }
+    ) => {
+      commit('UPDATE_REMOTE', {
+        protocol,
+        couchusername,
+        couchpassword,
+        couchurl,
+      })
+    },
+
     makeConnect: (
       { commit },
       { fromnode, tonode, xposstart, yposstart, yposend, xposend }
@@ -748,6 +933,10 @@ const store = new Vuex.Store({
       commit('SHORTCUT_STATE', e)
     },
 
+    showTipsstate: ({ commit }, e) => {
+      commit('SHOWTIPS_STATE', e)
+    },
+
     // connectionState: ({ commit }, e) => {
     //   commit('CONNECTION_STATE', e)
     // },
diff --git a/app/src/views/About.vue b/app/src/views/About.vue
index dd6f338d8ad17b9559e50f865bf9da514df37f57..4c958dafd77a962ff1a9ae75eca0228f976937e8 100644
--- a/app/src/views/About.vue
+++ b/app/src/views/About.vue
@@ -7,9 +7,10 @@
       concepts
     </p>
     <p>
-      Made by Adam Procter and Toby Milner-Gulland.
+      Made by Adam Procter.
       <em>
-        (+ many helpers (Mathew Parker, im looking at you) &amp;
+        (+ many helpers (Toby Milner-Gulland &amp; Mathew Parker, I'm looking at
+        you) &amp;
         <a href="https://patreon.com/procterbot">supporters</a>)
       </em>
     </p>
diff --git a/app/src/views/Cards.vue b/app/src/views/Cards.vue
index 1f248ce9d51539b66d55d00e93d8670350bc88fb..74de959beade158c721dd477b1e5a3f73a6dee55 100644
--- a/app/src/views/Cards.vue
+++ b/app/src/views/Cards.vue
@@ -2,78 +2,63 @@
   <div id="listwrapper">
     <div v-if="clientset">
       <h1 class="mobile">All nodes - card view</h1>
+      <h2 class="danger">Positions not saved</h2>
+      <CardsLayer @edit-true="(e) => editTrue(e)" :added="added" />
 
-      <div class="grid">
-        <CardsLayer
-          @editTrue="(e) => editTrue(e)"
-          v-for="value in myNodes"
-          v-bind:key="value.node_id"
-          v-bind:nodeid="value.node_id"
-          v-bind:nodetext="value.node_text"
-          v-bind:deleted="value.deleted"
-        />
-
-        <OtherCardslayer
-          v-for="value in otherNodes"
-          v-bind:key="value.node_id"
-          v-bind:nodeid="value.node_id"
-          v-bind:nodetext="value.node_text"
-          v-bind:deleted="value.deleted"
-        />
-      </div>
+      <!-- <OtherCardslayer /> -->
 
-      <div class="btn-row">
-        <!-- <BaseButton class="new" buttonClass="action" @click="addNode()"
+      <!-- <BaseButton class="new" buttonClass="action" @click="addNode()"
             >Create Node</BaseButton
           > -->
 
-        <svg
-          xmlns="http://www.w3.org/2000/svg"
-          width="80"
-          viewBox="0 0 143 106"
-          class="icon"
-          @click="addNode()"
-        >
-          <g transform="translate(-1345 -843)">
-            <g class="a" transform="translate(1345 865)">
-              <rect class="d" width="127" height="84" />
-              <rect class="e" x="0.5" y="0.5" width="126" height="83" />
-            </g>
-            <g class="b" transform="translate(1361 843)">
-              <rect class="d" width="127" height="84" />
-              <rect class="e" x="3.5" y="3.5" width="120" height="77" />
-            </g>
-            <line class="c" x2="41" transform="translate(1406.5 884.5)" />
-            <line class="c" y2="41" transform="translate(1426.5 863.5)" />
+      <svg
+        xmlns="http://www.w3.org/2000/svg"
+        width="80"
+        viewBox="0 0 143 106"
+        class="icon"
+        @click="addNode()"
+      >
+        <g transform="translate(-1345 -843)">
+          <g class="a" transform="translate(1345 865)">
+            <rect class="d" width="127" height="84" />
+            <rect class="e" x="0.5" y="0.5" width="126" height="83" />
+          </g>
+          <g class="b" transform="translate(1361 843)">
+            <rect class="d" width="127" height="84" />
+            <rect class="e" x="3.5" y="3.5" width="120" height="77" />
           </g>
-        </svg>
-
-        <UploadLayer
-          v-bind:uploadready="uploadready"
-          v-bind:copyready="copyready"
-          @uploadAdded="uploadAdded()"
-          @copyDone="copyDone()"
-        />
+          <line class="c" x2="41" transform="translate(1406.5 884.5)" />
+          <line class="c" y2="41" transform="translate(1426.5 863.5)" />
+        </g>
+      </svg>
+      <div class="btn-row">
+        <BaseButton class="new" buttonClass="action" @click="uploadAdded()"
+          >Upload</BaseButton
+        >
+        <BaseButton class="new" buttonClass="action" @click="copyDone()"
+          >Get Upload</BaseButton
+        >
       </div>
-      <BaseButton class="new" buttonClass="action" @click="uploadAdded()"
-        >Upload</BaseButton
-      >
-      <BaseButton class="new" buttonClass="action" @click="copyDone()"
-        >Get Upload</BaseButton
-      >
+      <UploadLayer
+        v-bind:uploadready="uploadready"
+        v-bind:copyready="copyready"
+        @upload-added="uploadAdded()"
+        @copy-done="copyDone()"
+      />
     </div>
 
     <div v-else>
-      <OnBoard @clientAdded="clientAdded()" @editTrue="(e) => editTrue(e)" />
+      <OnBoard @client-added="clientAdded()" @edit-true="(e) => editTrue(e)" />
     </div>
   </div>
 </template>
 
 <script>
 import CardsLayer from '@/components/CardsLayer'
-import OtherCardslayer from '@/components/OtherCardslayer'
+// import OtherCardslayer from '@/components/OtherCardslayer'
 import OnBoard from '@/components/OnBoard'
 import UploadLayer from '@/components/UploadLayer'
+
 import { mapState } from 'vuex'
 
 import { shortcutsMixin } from '@/components/mixins/shortcutsMixin.js'
@@ -87,15 +72,10 @@ export default {
       clientset: false,
       uploadready: false,
       copyready: false,
+      added: true,
     }
   },
 
-  props: {
-    nodeid: String,
-    nodetext: String,
-    deleted: Boolean,
-  },
-
   computed: {
     ...mapState({
       myNodes: (state) => state.myNodes,
@@ -129,6 +109,7 @@ export default {
 
     addNode() {
       this.$store.dispatch('addNode')
+      this.added = !this.added
     },
 
     editTrue(e) {
@@ -148,7 +129,7 @@ export default {
   },
   components: {
     CardsLayer,
-    OtherCardslayer,
+    // OtherCardslayer,
     UploadLayer,
     OnBoard,
   },
@@ -156,11 +137,9 @@ export default {
 </script>
 
 <style lang="css" scoped>
-.grid {
-  display: flex;
-  flex-wrap: wrap;
+.danger {
+  color: red;
 }
-
 .mobile {
   margin-left: 1em;
   font-size: 1em;
@@ -169,6 +148,10 @@ export default {
   margin-bottom: 1em;
 }
 
+.btn-row {
+  margin-left: 1em;
+}
+
 .example {
   width: 30px;
 }
diff --git a/app/src/views/List.vue b/app/src/views/Collect.vue
similarity index 84%
rename from app/src/views/List.vue
rename to app/src/views/Collect.vue
index 47f7aa9209bf6931049f4516a8c714749b2d26a8..702557f0598728eb9303745d06b3acd103568989 100644
--- a/app/src/views/List.vue
+++ b/app/src/views/Collect.vue
@@ -3,19 +3,8 @@
     <div v-if="clientset">
       <div id="listwrapper">
         <ModesCard />
-        <ListLayer
-          @editTrue="(e) => editTrue(e)"
-          v-for="value in myNodes"
-          v-bind:key="value.node_id"
-          v-bind:nodeid="value.node_id"
-          v-bind:nodetext="value.node_text"
-          v-bind:deleted="value.deleted"
-        />
+        <ListLayer @edit-true="(e) => editTrue(e)" :added="added" />
         <div class="btn-row">
-          <!-- <BaseButton class="new" buttonClass="action" @click="addNode()"
-            >Create Node</BaseButton
-          > -->
-
           <svg
             xmlns="http://www.w3.org/2000/svg"
             width="80"
@@ -47,8 +36,8 @@
         <UploadLayer
           v-bind:uploadready="uploadready"
           v-bind:copyready="copyready"
-          @uploadAdded="uploadAdded()"
-          @copyDone="copyDone()"
+          @upload-added="uploadAdded()"
+          @copy-done="copyDone()"
         />
       </div>
     </div>
@@ -60,7 +49,7 @@
         v-bind:nodetext="value.node_text"
         v-bind:deleted="value.deleted"
       />
-      <OnBoard @clientAdded="clientAdded()" @editTrue="(e) => editTrue(e)" />
+      <OnBoard @client-added="clientAdded()" @edit-true="(e) => editTrue(e)" />
     </div>
   </div>
 </template>
@@ -77,7 +66,7 @@ import { mapState } from 'vuex'
 import { shortcutsMixin } from '@/components/mixins/shortcutsMixin.js'
 
 export default {
-  name: 'List',
+  name: 'Collect',
 
   mixins: [shortcutsMixin],
   data: function () {
@@ -85,15 +74,10 @@ export default {
       clientset: false,
       uploadready: false,
       copyready: false,
+      added: true,
     }
   },
 
-  props: {
-    nodeid: String,
-    nodetext: String,
-    deleted: Boolean,
-  },
-
   computed: {
     ...mapState({
       myNodes: (state) => state.myNodes,
@@ -110,8 +94,7 @@ export default {
   },
 
   mounted() {
-    var e = false
-    this.$store.dispatch('shortcutState', e)
+    setTimeout(this.loadShortcut, 1000)
   },
 
   beforeDestroy() {
@@ -121,12 +104,19 @@ export default {
   },
 
   methods: {
+    loadShortcut() {
+      var e = false
+      this.$store.dispatch('shortcutState', e)
+    },
+
     clientAdded() {
       this.clientset = !this.clientset
     },
 
     addNode() {
+      // console.log('add called')
       this.$store.dispatch('addNode')
+      this.added = !this.added
     },
 
     editTrue(e) {
diff --git a/app/src/views/Discarded.vue b/app/src/views/Discarded.vue
index 9c357b05caf43e939a779ccc230046971c1c4a5d..41271bfe5cb2f95ae6ddbc19f7143aeb8e6af422 100644
--- a/app/src/views/Discarded.vue
+++ b/app/src/views/Discarded.vue
@@ -13,7 +13,7 @@
     </div>
 
     <div v-else>
-      <OnBoard @clientAdded="clientAdded()" @editTrue="(e) => editTrue(e)" />
+      <OnBoard @client-added="clientAdded()" @edit-true="(e) => editTrue(e)" />
     </div>
   </div>
 </template>
diff --git a/app/src/views/NitPicky.vue b/app/src/views/NitPicky.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ae544c35462ae4cc6aa74e83d2d7278daff82592
--- /dev/null
+++ b/app/src/views/NitPicky.vue
@@ -0,0 +1,84 @@
+<template>
+  <div>
+    <h1>Admin</h1>
+    <p>Access to some objects to test redirect of CouchDB and credentails</p>
+
+    <div v-for="(value, index) in configRemote" v-bind:key="index">
+      {{ value.protocol }}{{ value.couchusername }}:{{ value.couchpassword }}@{{
+        value.couchurl
+      }}
+    </div>
+    <form>
+      <input
+        type="text"
+        v-model="protocol"
+        placeholder="https://"
+        autocorrect="off"
+        autocapitalize="none"
+      />
+      <input
+        type="text"
+        v-model="couchusername"
+        placeholder="couch admin username"
+        autocorrect="off"
+        autocapitalize="none"
+      />
+      <input
+        type="text"
+        v-model="couchpassword"
+        placeholder="couch admin password"
+        autocorrect="off"
+        autocapitalize="none"
+      />
+      <input
+        type="text"
+        v-model="couchurl"
+        placeholder="youcouch.com"
+        autocorrect="off"
+        autocapitalize="none"
+      />
+
+      <button
+        @click.prevent="
+          updateRemote(protocol, couchusername, couchpassword, couchurl)
+        "
+      >
+        Change Credentials
+      </button>
+    </form>
+  </div>
+</template>
+
+<script>
+import { mapState } from 'vuex'
+
+export default {
+  name: 'NitPicky',
+
+  data: function () {
+    return {
+      protocol: '',
+      couchusername: '',
+      couchpassword: '',
+      couchurl: '',
+    }
+  },
+  computed: mapState({
+    configRemote: (state) => state.configRemote,
+  }),
+
+  methods: {
+    updateRemote(protocol, couchusername, couchpassword, couchurl) {
+      // console.log(protocol, couchusername, couchpassword, couchurl)
+      this.$store.dispatch('updateRemote', {
+        protocol,
+        couchusername,
+        couchpassword,
+        couchurl,
+      })
+    },
+  },
+}
+</script>
+
+<style lang="css" scoped></style>
diff --git a/app/src/views/Organise.vue b/app/src/views/Organise.vue
index 8755e6dd1a6b4ce274b3ed33279d59b795ef6532..0df4a9eec5b683ccee82d841435af4145a34388d 100644
--- a/app/src/views/Organise.vue
+++ b/app/src/views/Organise.vue
@@ -1,101 +1,48 @@
 <template>
   <div>
-    <div class="offline" v-if="clientset && offline">
-      <div ref="container" class="wrapper" v-bind:style="modeContainerStyle">
-        <h2>Offline</h2>
-        <p>
-          nodenogg.in appears to be offline, which means you cant see other data
-          at this stage, as it maybe out of date. Once you reconnect. Your data
-          will sync and the main views will reappear. This maybe down to you or
-          maybe us. If you think it's us let us know.
-        </p>
-        <OffLine
-          v-for="value in myNodes"
-          v-bind:key="value.node_id"
-          v-bind:nodeid="value.node_id"
-          v-bind:nodetext="value.node_text"
-          @editTrue="(e) => editTrue(e)"
-        />
-        <ModeToolbar
-          @offlineTriggered="offlineTriggered()"
-          @onlineTriggered="onlineTriggered()"
-        />
-        <ViewToolbar />
-
-        <!-- <OnBoard v-else @clientAdded="clientAdded()" /> -->
-      </div>
-    </div>
-
-    <div class="online" v-else>
-      <div ref="container" class="wrapper" v-bind:style="modeContainerStyle">
-        <PanZoomContainer
-          v-bind:width="width"
-          v-bind:height="height"
-          v-bind:scale="scale"
-          v-bind:translation="translation"
-        >
-          <div v-if="clientset">
-            <OtherNodeslayer
-              v-for="value in otherNodes"
-              v-bind:key="value.node_id"
-              v-bind:nodeid="value.node_id"
-              v-bind:nodetext="value.node_text"
-              v-bind:deleted="value.deleted"
-            />
-            <NodesLayer
-              @editTrue="(e) => editTrue(e)"
-              v-for="value in myNodes"
-              v-bind:key="value.node_id"
-              v-bind:nodeid="value.node_id"
-              v-bind:nodetext="value.node_text"
-              v-bind:deleted="value.deleted"
-            />
-            <TipsLayer />
-            <ModeCardorg />
-            <ConnectionsLayer />
-          </div>
-
-          <div v-else>
-            <OtherNodeslayer
-              v-for="value in otherNodes"
-              v-bind:key="value.node_id"
-              v-bind:nodeid="value.node_id"
-              v-bind:nodetext="value.node_text"
-              v-bind:deleted="value.deleted"
-            />
-            <NodesLayer
-              @editTrue="(e) => editTrue(e)"
-              v-for="value in myNodes"
-              v-bind:key="value.node_id"
-              v-bind:nodeid="value.node_id"
-              v-bind:nodetext="value.node_text"
-              v-bind:deleted="value.deleted"
-            />
-            <OnBoard
-              @clientAdded="clientAdded()"
-              @editTrue="(e) => editTrue(e)"
-            />
-            <ConnectionsLayer />
-          </div>
-          <ScribbleLayer v-bind:drawready="drawready"></ScribbleLayer>
-        </PanZoomContainer>
-        <!-- <ToolBar /> -->
-        <ModeToolbar
-          @offlineTriggered="offlineTriggered()"
-          @onlineTriggered="onlineTriggered()"
-          @uploadAdded="uploadAdded()"
-          @copyDone="copyDone()"
-          @drawOn="drawOn()"
-          @drawOff="drawOff()"
-        />
-        <ViewToolbar />
-        <UploadLayer
-          v-bind:uploadready="uploadready"
-          v-bind:copyready="copyready"
-          @uploadAdded="uploadAdded()"
-          @copyDone="copyDone()"
-        />
-      </div>
+    <div ref="container" class="wrapper" v-bind:style="modeContainerStyle">
+      <PanZoomContainer
+        v-bind:width="width"
+        v-bind:height="height"
+        v-bind:scale="scale"
+        v-bind:translation="translation"
+      >
+        <div v-if="clientset">
+          <OtherNodeslayer />
+          <NodesLayer @edit-true="(e) => editTrue(e)" :added="added" />
+          <TipsLayer />
+          <ModeCardorg />
+          <ConnectionsLayer />
+        </div>
+
+        <div v-else>
+          <OtherNodeslayer />
+          <NodesLayer @edit-true="(e) => editTrue(e)" :added="added" />
+          <OnBoard
+            @client-added="clientAdded()"
+            @edit-true="(e) => editTrue(e)"
+          />
+          <ConnectionsLayer />
+        </div>
+        <!-- <ScribbleLayer v-bind:drawready="drawready"></ScribbleLayer> -->
+      </PanZoomContainer>
+      <!-- <ToolBar /> -->
+
+      <ModeToolbar
+        @upload-added="uploadAdded()"
+        @copy-done="copyDone()"
+        @draw-on="drawOn()"
+        @draw-off="drawOff()"
+        @add-node="addNode()"
+      />
+      <ViewToolbar />
+      <UploadLayer
+        class="orgupload"
+        v-bind:uploadready="uploadready"
+        v-bind:copyready="copyready"
+        @upload-added="uploadAdded()"
+        @copy-done="copyDone()"
+      />
     </div>
   </div>
 </template>
@@ -104,10 +51,9 @@
 import PanZoomContainer from '@/experimental/PanZoomContainer'
 import ConnectionsLayer from '@/components/ConnectionsLayer'
 import NodesLayer from '@/components/NodesLayer'
-import OffLine from '@/components/OffLine'
 
 // import ToolBar from '@/components/ToolBar'
-import ScribbleLayer from '@/components/ScribbleLayer'
+//import ScribbleLayer from '@/components/ScribbleLayer'
 import UploadLayer from '@/components/UploadLayer'
 import OtherNodeslayer from '@/components/OtherNodeslayer.vue'
 import OnBoard from '@/components/OnBoard.vue'
@@ -120,7 +66,7 @@ import { shortcutsMixin } from '@/components/mixins/shortcutsMixin.js'
 import { mapGetters, mapState } from 'vuex'
 
 export default {
-  name: 'Home',
+  name: 'Organise',
   mixins: [shortcutsMixin],
   data: function () {
     return {
@@ -130,10 +76,12 @@ export default {
       height: 2000,
       clientset: false,
       // listview: false,
-      offline: false,
+      added: true,
+
       uploadready: false,
       copyready: false,
       drawready: false,
+
       // shortcutstate: false,
     }
   },
@@ -162,9 +110,9 @@ export default {
     }),
   },
   mounted() {
-    var e = false
     window.addEventListener('resize', this.handleResize)
     this.handleResize()
+    var e = false
     this.$store.dispatch('shortcutState', e)
   },
 
@@ -218,17 +166,11 @@ export default {
     // This is here to support the shortcuts
     addNode() {
       this.$store.dispatch('addNode')
+      this.added = !this.added
     },
     selectMode(mode) {
       this.$store.commit('ui/setMode', mode)
     },
-
-    offlineTriggered() {
-      this.offline = true
-    },
-    onlineTriggered() {
-      this.offline = false
-    },
   },
   components: {
     ModeToolbar,
@@ -241,9 +183,9 @@ export default {
     ConnectionsLayer,
     OnBoard,
     // ToolBar,
-    OffLine,
+
     UploadLayer,
-    ScribbleLayer,
+    // ScribbleLayer,
     TipsLayer,
     ModeCardorg,
   },
@@ -257,4 +199,29 @@ export default {
   margin: 0px;
   position: relative;
 }
+.orgupload {
+}
+
+.a {
+  fill: #333;
+  stroke: #707070;
+}
+.b {
+  fill: #fff;
+  stroke: #333;
+}
+.b,
+.c {
+  stroke-width: 7px;
+}
+.c,
+.e {
+  fill: none;
+}
+.c {
+  stroke: #2d9cdb;
+}
+.d {
+  stroke: none;
+}
 </style>