Repository: honeycombio/beeline-nodejs
Pull request #452 (2021-09-20 07:00:27)

Bump fastify from 3.21.0 to 3.21.3
Bumps [fastify](https://github.com/fastify/fastify) from 3.21.0 to 3.21.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/fastify/fastify/releases">fastify's releases</a>.</em></p>
<blockquote>
<h2>v3.21.3</h2>
<h2>What's Changed</h2>
<ul>
<li>docs: link logo to the website by <a href="https://github.com/DRoet"><code>@​DRoet</code></a> in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3322">fastify/fastify#3322</a></li>
<li>docs: grammar, spelling, and readability fixes by <a href="https://github.com/Fdawgs"><code>@​Fdawgs</code></a> in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3321">fastify/fastify#3321</a></li>
<li>fix: check existence by <a href="https://github.com/climba03003"><code>@​climba03003</code></a> in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3324">fastify/fastify#3324</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/fastify/fastify/compare/v3.21.2...v3.21.3">https://github.com/fastify/fastify/compare/v3.21.2...v3.21.3</a></p>
<h2>v3.21.2</h2>
<h2>What's Changed</h2>
<ul>
<li>Enforce the same shapes by <a href="https://github.com/mcollina"><code>@​mcollina</code></a> in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3317">fastify/fastify#3317</a></li>
<li>chore(benchmark): use tagged version to comment PR by <a href="https://github.com/RafaelGSS"><code>@​RafaelGSS</code></a> in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3320">fastify/fastify#3320</a></li>
<li>fix: reply object not marked as sent for stream payloads by <a href="https://github.com/adrian-branescu"><code>@​adrian-branescu</code></a> in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3318">fastify/fastify#3318</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/adrian-branescu"><code>@​adrian-branescu</code></a> made their first contribution in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3318">fastify/fastify#3318</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/fastify/fastify/compare/v3.21.1...v3.21.2">https://github.com/fastify/fastify/compare/v3.21.1...v3.21.2</a></p>
<h2>v3.21.1</h2>
<h2>What's Changed</h2>
<ul>
<li>add nginx to Recommendations by <a href="https://github.com/mhf-ir"><code>@​mhf-ir</code></a> in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3298">fastify/fastify#3298</a></li>
<li>Add relative links in Readme by <a href="https://github.com/Nazeeh21"><code>@​Nazeeh21</code></a> in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3250">fastify/fastify#3250</a></li>
<li>fix: check serialized payload by <a href="https://github.com/Eomm"><code>@​Eomm</code></a> in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3308">fastify/fastify#3308</a></li>
<li><code>FastifyInstance#setErrorHandler</code> supports async handlers by <a href="https://github.com/AnnikaCodes"><code>@​AnnikaCodes</code></a> in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3309">fastify/fastify#3309</a></li>
<li>docs: update fastify-websocket description by <a href="https://github.com/DRoet"><code>@​DRoet</code></a> in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3311">fastify/fastify#3311</a></li>
<li>close() returns a Promise, not a PromiseLike by <a href="https://github.com/mcollina"><code>@​mcollina</code></a> in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3312">fastify/fastify#3312</a></li>
<li>Doc - Schema validators per validation types by <a href="https://github.com/alainrk"><code>@​alainrk</code></a> in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3310">fastify/fastify#3310</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/mhf-ir"><code>@​mhf-ir</code></a> made their first contribution in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3298">fastify/fastify#3298</a></li>
<li><a href="https://github.com/Nazeeh21"><code>@​Nazeeh21</code></a> made their first contribution in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3250">fastify/fastify#3250</a></li>
<li><a href="https://github.com/AnnikaCodes"><code>@​AnnikaCodes</code></a> made their first contribution in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3309">fastify/fastify#3309</a></li>
<li><a href="https://github.com/DRoet"><code>@​DRoet</code></a> made their first contribution in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3311">fastify/fastify#3311</a></li>
<li><a href="https://github.com/alainrk"><code>@​alainrk</code></a> made their first contribution in <a href="https://github-redirect.dependabot.com/fastify/fastify/pull/3310">fastify/fastify#3310</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/fastify/fastify/compare/v3.21.0...v3.21.1">https://github.com/fastify/fastify/compare/v3.21.0...v3.21.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/fastify/fastify/commit/ce6270608be0dd56de629be0df149f94c5df95ba"><code>ce62706</code></a> Bumped 3.21.3</li>
<li><a href="https://github.com/fastify/fastify/commit/567609b8282e581a44346fe21b98b6f23b86809a"><code>567609b</code></a> fix: check existence (<a href="https://github-redirect.dependabot.com/fastify/fastify/issues/3324">#3324</a>)</li>
<li><a href="https://github.com/fastify/fastify/commit/f515fc1b67c5a70e078e45cb351f0611f3b35885"><code>f515fc1</code></a> docs: grammar, spelling, and readability fixes (<a href="https://github-redirect.dependabot.com/fastify/fastify/issues/3321">#3321</a>)</li>
<li><a href="https://github.com/fastify/fastify/commit/f2122415dc31b55de888b2c9bfd7f3f5462765d8"><code>f212241</code></a> docs: link logo to the website (<a href="https://github-redirect.dependabot.com/fastify/fastify/issues/3322">#3322</a>)</li>
<li><a href="https://github.com/fastify/fastify/commit/f624eb27b686b689dd2c943248d270bdf41de09b"><code>f624eb2</code></a> Bumped v3.21.2</li>
<li><a href="https://github.com/fastify/fastify/commit/27f7125e7fb670e103d0ecead2c3eaaeb3fc59f3"><code>27f7125</code></a> fix: reply object not marked as sent for stream payloads (<a href="https://github-redirect.dependabot.com/fastify/fastify/issues/3318">#3318</a>)</li>
<li><a href="https://github.com/fastify/fastify/commit/b35de00cb6d36212d6e8a17c8dbea84f4eba2016"><code>b35de00</code></a> chore(benchmark): use tagged version to comment PR (<a href="https://github-redirect.dependabot.com/fastify/fastify/issues/3320">#3320</a>)</li>
<li><a href="https://github.com/fastify/fastify/commit/e77bfa26809e08e82a5f3180572ccd4d4c4d771a"><code>e77bfa2</code></a> Enforce the same shapes (<a href="https://github-redirect.dependabot.com/fastify/fastify/issues/3317">#3317</a>)</li>
<li><a href="https://github.com/fastify/fastify/commit/11cdc231510011efe64af8fe57836ab2b5a7c3aa"><code>11cdc23</code></a> Bumped v3.21.1</li>
<li><a href="https://github.com/fastify/fastify/commit/cdfe80e040a9c3f959d43cc51e7964959fd5213b"><code>cdfe80e</code></a> docs: add example custom validator for parameters (<a href="https://github-redirect.dependabot.com/fastify/fastify/issues/3310">#3310</a>)</li>
<li>Additional commits viewable in <a href="https://github.com/fastify/fastify/compare/v3.21.0...v3.21.3">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=fastify&package-manager=npm_and_yarn&previous-version=3.21.0&new-version=3.21.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>


Patch:
diff --git a/lib/api/libhoney.js b/lib/api/libhoney.js
index 5083b08..675b671 100644
--- a/lib/api/libhoney.js
+++ b/lib/api/libhoney.js
@@ -290,7 +290,7 @@ module.exports = class LibhoneyEventAPI {
       // valid, since we can end up in our instrumentation outside of requests we're tracking
       return;
     }
-    Object.assign(context.stack[0].payload, map);
+    Object.assign(context.stack[context.stack.length - 1].payload, map);
   }
 
   /**
@@ -302,7 +302,7 @@ module.exports = class LibhoneyEventAPI {
       // valid, since we can end up in our instrumentation outside of requests we're tracking
       return;
     }
-    delete context.stack[0].payload[key];
+    delete context.stack[context.stack.length - 1].payload[key];
   }
 
   addTraceContext(map) {
diff --git a/lib/api/mock.js b/lib/api/mock.js
index 5a528ec..27424df 100644
--- a/lib/api/mock.js
+++ b/lib/api/mock.js
@@ -85,7 +85,7 @@ module.exports = class MockEventAPI {
     if (!context || context.stack.length === 0) {
       return;
     }
-    Object.assign(context.stack[0], map);
+    Object.assign(context.stack[context.stack.length - 1], map);
   }
 
   /**
@@ -93,7 +93,7 @@ module.exports = class MockEventAPI {
    */
   removeContext(key) {
     let context = tracker.getTracked();
-    delete context.stack[0].payload[key];
+    delete context.stack[context.stack.length - 1].payload[key];
   }
 
   addTraceContext(map) {
diff --git a/lib/instrumentation/trace-util.js b/lib/instrumentation/trace-util.js
index f640a37..d884ce4 100644
--- a/lib/instrumentation/trace-util.js
+++ b/lib/instrumentation/trace-util.js
@@ -59,9 +59,7 @@ exports.getTraceContext = (traceIdSource, req) => {
   const { honeycomb, aws } = api;
   if (typeof traceIdSource === "undefined" || typeof traceIdSource === "string") {
     let headers =
-      typeof traceIdSource === "undefined"
-        ? [honeycomb.TRACE_HTTP_HEADER, "X-Request-ID", aws.TRACE_HTTP_HEADER]
-        : [traceIdSource];
+      typeof traceIdSource === "undefined" ? [honeycomb.TRACE_HTTP_HEADER] : [traceIdSource];
     let valueAndHeader = getValueFromHeaders(req.headers, headers);
 
     if (!valueAndHeader) {
diff --git a/package-lock.json b/package-lock.json
index 3ffa1c4..0710d87 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -6,7 +6,7 @@
   "packages": {
     "": {
       "name": "honeycomb-beeline",
-      "version": "2.8.0",
+      "version": "2.8.1",
       "license": "Apache-2.0",
       "dependencies": {
         "@opentelemetry/api": "^1.0.2",
@@ -220,19 +220,19 @@
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz",
-      "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==",
+      "version": "7.15.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz",
+      "integrity": "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==",
       "dev": true,
       "dependencies": {
         "@babel/helper-module-imports": "^7.15.4",
         "@babel/helper-replace-supers": "^7.15.4",
         "@babel/helper-simple-access": "^7.15.4",
         "@babel/helper-split-export-declaration": "^7.15.4",
-        "@babel/helper-validator-identifier": "^7.14.9",
+        "@babel/helper-validator-identifier": "^7.15.7",
         "@babel/template": "^7.15.4",
         "@babel/traverse": "^7.15.4",
-        "@babel/types": "^7.15.4"
+        "@babel/types": "^7.15.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -299,9 +299,9 @@
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.14.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
-      "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==",
+      "version": "7.15.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
+      "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
@@ -351,9 +351,9 @@
       "dev": true
     },
     "node_modules/@babel/parser": {
-      "version": "7.15.6",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz",
-      "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==",
+      "version": "7.15.7",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz",
+      "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==",
       "dev": true,
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -661,16 +661,16 @@
       }
     },
     "node_modules/@jest/console": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.1.tgz",
-      "integrity": "sha512-VpQJRsWSeAem0zpBjeRtDbcD6DlbNoK11dNYt+PSQ+DDORh9q2/xyEpErfwgnLjWX0EKkSZmTGx/iH9Inzs6vQ==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.0.tgz",
+      "integrity": "sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw==",
       "dev": true,
       "dependencies": {
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "chalk": "^4.0.0",
-        "jest-message-util": "^27.1.1",
-        "jest-util": "^27.1.1",
+        "jest-message-util": "^27.2.0",
+        "jest-util": "^27.2.0",
         "slash": "^3.0.0"
       },
       "engines": {
@@ -742,15 +742,15 @@
       }
     },
     "node_modules/@jest/core": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.1.1.tgz",
-      "integrity": "sha512-oCkKeTgI0emznKcLoq5OCD0PhxCijA4l7ejDnWW3d5bgSi+zfVaLybVqa+EQOxpNejQWtTna7tmsAXjMN9N43Q==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.0.tgz",
+      "integrity": "sha512-E/2NHhq+VMo18DpKkoty8Sjey8Kps5Cqa88A8NP757s6JjYqPdioMuyUBhDiIOGCdQByEp0ou3jskkTszMS0nw==",
       "dev": true,
       "dependencies": {
-        "@jest/console": "^27.1.1",
-        "@jest/reporters": "^27.1.1",
-        "@jest/test-result": "^27.1.1",
-        "@jest/transform": "^27.1.1",
+        "@jest/console": "^27.2.0",
+        "@jest/reporters": "^27.2.0",
+        "@jest/test-result": "^27.2.0",
+        "@jest/transform": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "ansi-escapes": "^4.2.1",
@@ -759,18 +759,18 @@
         "exit": "^0.1.2",
         "graceful-fs": "^4.2.4",
         "jest-changed-files": "^27.1.1",
-        "jest-config": "^27.1.1",
-        "jest-haste-map": "^27.1.1",
-        "jest-message-util": "^27.1.1",
+        "jest-config": "^27.2.0",
+        "jest-haste-map": "^27.2.0",
+        "jest-message-util": "^27.2.0",
         "jest-regex-util": "^27.0.6",
-        "jest-resolve": "^27.1.1",
-        "jest-resolve-dependencies": "^27.1.1",
-        "jest-runner": "^27.1.1",
-        "jest-runtime": "^27.1.1",
-        "jest-snapshot": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "jest-validate": "^27.1.1",
-        "jest-watcher": "^27.1.1",
+        "jest-resolve": "^27.2.0",
+        "jest-resolve-dependencies": "^27.2.0",
+        "jest-runner": "^27.2.0",
+        "jest-runtime": "^27.2.0",
+        "jest-snapshot": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "jest-validate": "^27.2.0",
+        "jest-watcher": "^27.2.0",
         "micromatch": "^4.0.4",
         "p-each-series": "^2.1.0",
         "rimraf": "^3.0.0",
@@ -854,12 +854,12 @@
       }
     },
     "node_modules/@jest/environment": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.1.tgz",
-      "integrity": "sha512-+y882/ZdxhyqF5RzxIrNIANjHj991WH7jifdcplzMDosDUOyCACFYUyVTBGbSTocbU+s1cesroRzkwi8hZ9SHg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.0.tgz",
+      "integrity": "sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ==",
       "dev": true,
       "dependencies": {
-        "@jest/fake-timers": "^27.1.1",
+        "@jest/fake-timers": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "jest-mock": "^27.1.1"
@@ -869,46 +869,46 @@
       }
     },
     "node_modules/@jest/fake-timers": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.1.tgz",
-      "integrity": "sha512-u8TJ5VlsVYTsGFatoyIae2l25pku4Bu15QCPTx2Gs5z+R//Ee3tHN85462Vc9yGVcdDvgADbqNkhOLxbEwPjMQ==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.0.tgz",
+      "integrity": "sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w==",
       "dev": true,
       "dependencies": {
         "@jest/types": "^27.1.1",
         "@sinonjs/fake-timers": "^7.0.2",
         "@types/node": "*",
-        "jest-message-util": "^27.1.1",
+        "jest-message-util": "^27.2.0",
         "jest-mock": "^27.1.1",
-        "jest-util": "^27.1.1"
+        "jest-util": "^27.2.0"
       },
       "engines": {
         "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
       }
     },
     "node_modules/@jest/globals": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.1.tgz",
-      "integrity": "sha512-Q3JcTPmY+DAEHnr4MpnBV3mwy50EGrTC6oSDTNnW7FNGGacTJAfpWNk02D7xv422T1OzK2A2BKx+26xJOvHkyw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.0.tgz",
+      "integrity": "sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg==",
       "dev": true,
       "dependencies": {
-        "@jest/environment": "^27.1.1",
+        "@jest/environment": "^27.2.0",
         "@jest/types": "^27.1.1",
-        "expect": "^27.1.1"
+        "expect": "^27.2.0"
       },
       "engines": {
         "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
       }
     },
     "node_modules/@jest/reporters": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.1.1.tgz",
-      "integrity": "sha512-cEERs62n1P4Pqox9HWyNOEkP57G95aK2mBjB6D8Ruz1Yc98fKH53b58rlVEnsY5nLmkLNZk65fxNi9C0Yds/8w==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.0.tgz",
+      "integrity": "sha512-7wfkE3iRTLaT0F51h1mnxH3nQVwDCdbfgXiLuCcNkF1FnxXLH9utHqkSLIiwOTV1AtmiE0YagHbOvx4rnMP/GA==",
       "dev": true,
       "dependencies": {
         "@bcoe/v8-coverage": "^0.2.3",
-        "@jest/console": "^27.1.1",
-        "@jest/test-result": "^27.1.1",
-        "@jest/transform": "^27.1.1",
+        "@jest/console": "^27.2.0",
+        "@jest/test-result": "^27.2.0",
+        "@jest/transform": "^27.2.0",
         "@jest/types": "^27.1.1",
         "chalk": "^4.0.0",
         "collect-v8-coverage": "^1.0.0",
@@ -920,10 +920,10 @@
         "istanbul-lib-report": "^3.0.0",
         "istanbul-lib-source-maps": "^4.0.0",
         "istanbul-reports": "^3.0.2",
-        "jest-haste-map": "^27.1.1",
-        "jest-resolve": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "jest-worker": "^27.1.1",
+        "jest-haste-map": "^27.2.0",
+        "jest-resolve": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "jest-worker": "^27.2.0",
         "slash": "^3.0.0",
         "source-map": "^0.6.0",
         "string-length": "^4.0.1",
@@ -1021,12 +1021,12 @@
       }
     },
     "node_modules/@jest/test-result": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.1.tgz",
-      "integrity": "sha512-8vy75A0Jtfz9DqXFUkjC5Co/wRla+D7qRFdShUY8SbPqBS3GBx3tpba7sGKFos8mQrdbe39n+c1zgVKtarfy6A==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.0.tgz",
+      "integrity": "sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA==",
       "dev": true,
       "dependencies": {
-        "@jest/console": "^27.1.1",
+        "@jest/console": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/istanbul-lib-coverage": "^2.0.0",
         "collect-v8-coverage": "^1.0.0"
@@ -1036,24 +1036,24 @@
       }
     },
     "node_modules/@jest/test-sequencer": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.1.1.tgz",
-      "integrity": "sha512-l8zD3EdeixvwmLNlJoMX3hhj8iIze95okj4sqmBzOq/zW8gZLElUveH4bpKEMuR+Nweazjlwc7L6g4C26M/y6Q==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.0.tgz",
+      "integrity": "sha512-PrqarcpzOU1KSAK7aPwfL8nnpaqTMwPe7JBPnaOYRDSe/C6AoJiL5Kbnonqf1+DregxZIRAoDg69R9/DXMGqXA==",
       "dev": true,
       "dependencies": {
-        "@jest/test-result": "^27.1.1",
+        "@jest/test-result": "^27.2.0",
         "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.1.1",
-        "jest-runtime": "^27.1.1"
+        "jest-haste-map": "^27.2.0",
+        "jest-runtime": "^27.2.0"
       },
       "engines": {
         "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
       }
     },
     "node_modules/@jest/transform": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.1.tgz",
-      "integrity": "sha512-qM19Eu75U6Jc5zosXXVnq900Nl9JDpoGaZ4Mg6wZs7oqbu3heYSMOZS19DlwjlhWdfNRjF4UeAgkrCJCK3fEXg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.0.tgz",
+      "integrity": "sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg==",
       "dev": true,
       "dependencies": {
         "@babel/core": "^7.1.0",
@@ -1063,9 +1063,9 @@
         "convert-source-map": "^1.4.0",
         "fast-json-stable-stringify": "^2.0.0",
         "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.1.1",
+        "jest-haste-map": "^27.2.0",
         "jest-regex-util": "^27.0.6",
-        "jest-util": "^27.1.1",
+        "jest-util": "^27.2.0",
         "micromatch": "^4.0.4",
         "pirates": "^4.0.1",
         "slash": "^3.0.0",
@@ -1352,9 +1352,9 @@
       }
     },
     "node_modules/@types/node": {
-      "version": "16.9.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz",
-      "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g=="
+      "version": "16.9.4",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.4.tgz",
+      "integrity": "sha512-KDazLNYAGIuJugdbULwFZULF9qQ13yNWEBFnfVpqlpgAAo6H/qnM9RjBgh0A0kmHf3XxAKLdN5mTIng9iUvVLA=="
     },
     "node_modules/@types/parse-json": {
       "version": "4.0.0",
@@ -1613,9 +1613,9 @@
       }
     },
     "node_modules/ast-types/node_modules/tslib": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
-      "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A=="
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+      "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
     },
     "node_modules/astral-regex": {
       "version": "2.0.0",
@@ -1653,16 +1653,16 @@
       }
     },
     "node_modules/babel-jest": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.1.1.tgz",
-      "integrity": "sha512-JA+dzJl4n2RBvWQEnph6HJaTHrsIPiXGQYatt/D8nR4UpX9UG4GaDzykVVPQBbrdTebZREkRb6SOxyIXJRab6Q==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.0.tgz",
+      "integrity": "sha512-bS2p+KGGVVmWXBa8+i6SO/xzpiz2Q/2LnqLbQknPKefWXVZ67YIjA4iXup/jMOEZplga9PpWn+wrdb3UdDwRaA==",
       "dev": true,
       "dependencies": {
-        "@jest/transform": "^27.1.1",
+        "@jest/transform": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/babel__core": "^7.1.14",
         "babel-plugin-istanbul": "^6.0.0",
-        "babel-preset-jest": "^27.0.6",
+        "babel-preset-jest": "^27.2.0",
         "chalk": "^4.0.0",
         "graceful-fs": "^4.2.4",
         "slash": "^3.0.0"
@@ -1755,9 +1755,9 @@
       }
     },
     "node_modules/babel-plugin-jest-hoist": {
-      "version": "27.0.6",
-      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz",
-      "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz",
+      "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==",
       "dev": true,
       "dependencies": {
         "@babel/template": "^7.3.3",
@@ -1793,12 +1793,12 @@
       }
     },
     "node_modules/babel-preset-jest": {
-      "version": "27.0.6",
-      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz",
-      "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz",
+      "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==",
       "dev": true,
       "dependencies": {
-        "babel-plugin-jest-hoist": "^27.0.6",
+        "babel-plugin-jest-hoist": "^27.2.0",
         "babel-preset-current-node-syntax": "^1.0.0"
       },
       "engines": {
@@ -1979,9 +1979,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001257",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001257.tgz",
-      "integrity": "sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA==",
+      "version": "1.0.30001258",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001258.tgz",
+      "integrity": "sha512-RBByOG6xWXUp0CR2/WU2amXz3stjKpSl5J1xU49F1n2OxD//uBZO4wCKUiG+QMGf7CHGfDDcqoKriomoGVxTeA==",
       "dev": true,
       "funding": {
         "type": "opencollective",
@@ -2275,9 +2275,9 @@
       "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
     },
     "node_modules/core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
     },
     "node_modules/cosmiconfig": {
       "version": "7.0.0",
@@ -2403,13 +2403,14 @@
       }
     },
     "node_modules/degenerator": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz",
-      "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.1.tgz",
+      "integrity": "sha512-LFsIFEeLPlKvAKXu7j3ssIG6RT0TbI7/GhsqrI0DnHASEQjXQ0LUSYcjJteGgRGmZbl1TnMSxpNQIAiJ7Du5TQ==",
       "dependencies": {
         "ast-types": "^0.13.2",
         "escodegen": "^1.8.1",
-        "esprima": "^4.0.0"
+        "esprima": "^4.0.0",
+        "vm2": "^3.9.3"
       },
       "engines": {
         "node": ">= 6"
@@ -2495,9 +2496,9 @@
       "dev": true
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.3.836",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.836.tgz",
-      "integrity": "sha512-Ney3pHOJBWkG/AqYjrW0hr2AUCsao+2uvq9HUlRP8OlpSdk/zOHOUJP7eu0icDvePC9DlgffuelP4TnOJmMRUg==",
+      "version": "1.3.843",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.843.tgz",
+      "integrity": "sha512-OWEwAbzaVd1Lk9MohVw8LxMXFlnYd9oYTYxfX8KS++kLLjDfbovLOcEEXwRhG612dqGQ6+44SZvim0GXuBRiKg==",
       "dev": true
     },
     "node_modules/emittery": {
@@ -2958,16 +2959,16 @@
       }
     },
     "node_modules/expect": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.1.tgz",
-      "integrity": "sha512-JQAzp0CJoFFHF1RnOtrMUNMdsfx/Tl0+FhRzVl8q0fa23N+JyWdPXwb3T5rkHCvyo9uttnK7lVdKCBl1b/9EDw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.0.tgz",
+      "integrity": "sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ==",
       "dev": true,
       "dependencies": {
         "@jest/types": "^27.1.1",
         "ansi-styles": "^5.0.0",
         "jest-get-type": "^27.0.6",
-        "jest-matcher-utils": "^27.1.1",
-        "jest-message-util": "^27.1.1",
+        "jest-matcher-utils": "^27.2.0",
+        "jest-message-util": "^27.2.0",
         "jest-regex-util": "^27.0.6"
       },
       "engines": {
@@ -3104,9 +3105,9 @@
       "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag=="
     },
     "node_modules/fastify": {
-      "version": "3.21.0",
-      "resolved": "https://registry.npmjs.org/fastify/-/fastify-3.21.0.tgz",
-      "integrity": "sha512-hc9p0meCV8PXIQzg8BwXekhCmJm5LHfeJi7U3mKQTMu7pQT24CL756jUxM9sOLEbBpQoD82PejVPW2lfLiXJsw==",
+      "version": "3.21.3",
+      "resolved": "https://registry.npmjs.org/fastify/-/fastify-3.21.3.tgz",
+      "integrity": "sha512-4PuuCCcGZpcD9ERc8x6H7GHElcHQxHVouyANAVw/Nd9h07X63QQJ2EpHeQtuiDCjcs0pf9wKb6KIul3qCYh+1g==",
       "dev": true,
       "dependencies": {
         "@fastify/ajv-compiler": "^1.0.0",
@@ -3368,11 +3369,6 @@
         "node": ">=0.8.0"
       }
     },
-    "node_modules/ftp/node_modules/isarray": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-      "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
-    },
     "node_modules/ftp/node_modules/readable-stream": {
       "version": "1.1.14",
       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
@@ -3898,6 +3894,11 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/isarray": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+      "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+    },
     "node_modules/isexe": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -4000,14 +4001,14 @@
       }
     },
     "node_modules/jest": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.1.tgz",
-      "integrity": "sha512-LFTEZOhoZNR/2DQM3OCaK5xC6c55c1OWhYh0njRsoHX0qd6x4nkcgenkSH0JKjsAGMTmmJAoL7/oqYHMfwhruA==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.0.tgz",
+      "integrity": "sha512-oUqVXyvh5YwEWl263KWdPUAqEzBFzGHdFLQ05hUnITr1tH+9SscEI9A/GH9eBClA+Nw1ct+KNuuOV6wlnmBPcg==",
       "dev": true,
       "dependencies": {
-        "@jest/core": "^27.1.1",
+        "@jest/core": "^27.2.0",
         "import-local": "^3.0.2",
-        "jest-cli": "^27.1.1"
+        "jest-cli": "^27.2.0"
       },
       "bin": {
         "jest": "bin/jest.js"
@@ -4039,27 +4040,27 @@
       }
     },
     "node_modules/jest-circus": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.1.1.tgz",
-      "integrity": "sha512-Xed1ApiMFu/yzqGMBToHr8sp2gkX/ARZf4nXoGrHJrXrTUdVIWiVYheayfcOaPdQvQEE/uyBLgW7I7YBLIrAXQ==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.0.tgz",
+      "integrity": "sha512-WwENhaZwOARB1nmcboYPSv/PwHBUGRpA4MEgszjr9DLCl97MYw0qZprBwLb7rNzvMwfIvNGG7pefQ5rxyBlzIA==",
       "dev": true,
       "dependencies": {
-        "@jest/environment": "^27.1.1",
-        "@jest/test-result": "^27.1.1",
+        "@jest/environment": "^27.2.0",
+        "@jest/test-result": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "chalk": "^4.0.0",
         "co": "^4.6.0",
         "dedent": "^0.7.0",
-        "expect": "^27.1.1",
+        "expect": "^27.2.0",
         "is-generator-fn": "^2.0.0",
-        "jest-each": "^27.1.1",
-        "jest-matcher-utils": "^27.1.1",
-        "jest-message-util": "^27.1.1",
-        "jest-runtime": "^27.1.1",
-        "jest-snapshot": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "pretty-format": "^27.1.1",
+        "jest-each": "^27.2.0",
+        "jest-matcher-utils": "^27.2.0",
+        "jest-message-util": "^27.2.0",
+        "jest-runtime": "^27.2.0",
+        "jest-snapshot": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "pretty-format": "^27.2.0",
         "slash": "^3.0.0",
         "stack-utils": "^2.0.3",
         "throat": "^6.0.1"
@@ -4133,21 +4134,21 @@
       }
     },
     "node_modules/jest-cli": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.1.1.tgz",
-      "integrity": "sha512-LCjfEYp9D3bcOeVUUpEol9Y1ijZYMWVqflSmtw/wX+6Fb7zP4IlO14/6s9v1pxsoM4Pn46+M2zABgKuQjyDpTw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.0.tgz",
+      "integrity": "sha512-bq1X/B/b1kT9y1zIFMEW3GFRX1HEhFybiqKdbxM+j11XMMYSbU9WezfyWIhrSOmPT+iODLATVjfsCnbQs7cfIA==",
       "dev": true,
       "dependencies": {
-        "@jest/core": "^27.1.1",
-        "@jest/test-result": "^27.1.1",
+        "@jest/core": "^27.2.0",
+        "@jest/test-result": "^27.2.0",
         "@jest/types": "^27.1.1",
         "chalk": "^4.0.0",
         "exit": "^0.1.2",
         "graceful-fs": "^4.2.4",
         "import-local": "^3.0.2",
-        "jest-config": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "jest-validate": "^27.1.1",
+        "jest-config": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "jest-validate": "^27.2.0",
         "prompts": "^2.0.1",
         "yargs": "^16.0.3"
       },
@@ -4231,32 +4232,32 @@
       }
     },
     "node_modules/jest-config": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.1.1.tgz",
-      "integrity": "sha512-2iSd5zoJV4MsWPcLCGwUVUY/j6pZXm4Qd3rnbCtrd9EHNTg458iHw8PZztPQXfxKBKJxLfBk7tbZqYF8MGtxJA==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.0.tgz",
+      "integrity": "sha512-Z1romHpxeNwLxQtouQ4xt07bY6HSFGKTo0xJcvOK3u6uJHveA4LB2P+ty9ArBLpTh3AqqPxsyw9l9GMnWBYS9A==",
       "dev": true,
       "dependencies": {
         "@babel/core": "^7.1.0",
-        "@jest/test-sequencer": "^27.1.1",
+        "@jest/test-sequencer": "^27.2.0",
         "@jest/types": "^27.1.1",
-        "babel-jest": "^27.1.1",
+        "babel-jest": "^27.2.0",
         "chalk": "^4.0.0",
         "deepmerge": "^4.2.2",
         "glob": "^7.1.1",
         "graceful-fs": "^4.2.4",
         "is-ci": "^3.0.0",
-        "jest-circus": "^27.1.1",
-        "jest-environment-jsdom": "^27.1.1",
-        "jest-environment-node": "^27.1.1",
+        "jest-circus": "^27.2.0",
+        "jest-environment-jsdom": "^27.2.0",
+        "jest-environment-node": "^27.2.0",
         "jest-get-type": "^27.0.6",
-        "jest-jasmine2": "^27.1.1",
+        "jest-jasmine2": "^27.2.0",
         "jest-regex-util": "^27.0.6",
-        "jest-resolve": "^27.1.1",
-        "jest-runner": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "jest-validate": "^27.1.1",
+        "jest-resolve": "^27.2.0",
+        "jest-runner": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "jest-validate": "^27.2.0",
         "micromatch": "^4.0.4",
-        "pretty-format": "^27.1.1"
+        "pretty-format": "^27.2.0"
       },
       "engines": {
         "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -4335,15 +4336,15 @@
       }
     },
     "node_modules/jest-diff": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.1.tgz",
-      "integrity": "sha512-m/6n5158rqEriTazqHtBpOa2B/gGgXJijX6nsEgZfbJ/3pxQcdpVXBe+FP39b1dxWHyLVVmuVXddmAwtqFO4Lg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.0.tgz",
+      "integrity": "sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw==",
       "dev": true,
       "dependencies": {
         "chalk": "^4.0.0",
         "diff-sequences": "^27.0.6",
         "jest-get-type": "^27.0.6",
-        "pretty-format": "^27.1.1"
+        "pretty-format": "^27.2.0"
       },
       "engines": {
         "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -4426,16 +4427,16 @@
       }
     },
     "node_modules/jest-each": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.1.tgz",
-      "integrity": "sha512-r6hOsTLavUBb1xN0uDa89jdDeBmJ+K49fWpbyxeGRA2pLY46PlC4z551/cWNQzrj+IUa5/gSRsCIV/01HdNPug==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.0.tgz",
+      "integrity": "sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA==",
       "dev": true,
       "dependencies": {
         "@jest/types": "^27.1.1",
         "chalk": "^4.0.0",
         "jest-get-type": "^27.0.6",
-        "jest-util": "^27.1.1",
-        "pretty-format": "^27.1.1"
+        "jest-util": "^27.2.0",
+        "pretty-format": "^27.2.0"
       },
       "engines": {
         "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -4506,17 +4507,17 @@
       }
     },
     "node_modules/jest-environment-jsdom": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.1.1.tgz",
-      "integrity": "sha512-6vOnoZ6IaExuw7FvnuJhA1qFYv1DDSnN0sQowzolNwxQp7bG1YhLxj2YU1sVXAYA3IR3MbH2mbnJUsLUWfyfzw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.0.tgz",
+      "integrity": "sha512-wNQJi6Rd/AkUWqTc4gWhuTIFPo7tlMK0RPZXeM6AqRHZA3D3vwvTa9ktAktyVyWYmUoXdYstOfyYMG3w4jt7eA==",
       "dev": true,
       "dependencies": {
-        "@jest/environment": "^27.1.1",
-        "@jest/fake-timers": "^27.1.1",
+        "@jest/environment": "^27.2.0",
+        "@jest/fake-timers": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "jest-mock": "^27.1.1",
-        "jest-util": "^27.1.1",
+        "jest-util": "^27.2.0",
         "jsdom": "^16.6.0"
       },
       "engines": {
@@ -4524,17 +4525,17 @@
       }
     },
     "node_modules/jest-environment-node": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.1.1.tgz",
-      "integrity": "sha512-OEGeZh0PwzngNIYWYgWrvTcLygopV8OJbC9HNb0j70VBKgEIsdZkYhwcFnaURX83OHACMqf1pa9Tv5Pw5jemrg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.0.tgz",
+      "integrity": "sha512-WbW+vdM4u88iy6Q3ftUEQOSgMPtSgjm3qixYYK2AKEuqmFO2zmACTw1vFUB0qI/QN88X6hA6ZkVKIdIWWzz+yg==",
       "dev": true,
       "dependencies": {
-        "@jest/environment": "^27.1.1",
-        "@jest/fake-timers": "^27.1.1",
+        "@jest/environment": "^27.2.0",
+        "@jest/fake-timers": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "jest-mock": "^27.1.1",
-        "jest-util": "^27.1.1"
+        "jest-util": "^27.2.0"
       },
       "engines": {
         "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -4550,9 +4551,9 @@
       }
     },
     "node_modules/jest-haste-map": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.1.tgz",
-      "integrity": "sha512-NGLYVAdh5C8Ezg5QBFzrNeYsfxptDBPlhvZNaicLiZX77F/rS27a9M6u9ripWAaaD54xnWdZNZpEkdjD5Eo5aQ==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.0.tgz",
+      "integrity": "sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q==",
       "dev": true,
       "dependencies": {
         "@jest/types": "^27.1.1",
@@ -4563,8 +4564,8 @@
         "graceful-fs": "^4.2.4",
         "jest-regex-util": "^27.0.6",
         "jest-serializer": "^27.0.6",
-        "jest-util": "^27.1.1",
-        "jest-worker": "^27.1.1",
+        "jest-util": "^27.2.0",
+        "jest-worker": "^27.2.0",
         "micromatch": "^4.0.4",
         "walker": "^1.0.7"
       },
@@ -4585,28 +4586,28 @@
       }
     },
     "node_modules/jest-jasmine2": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.1.1.tgz",
-      "integrity": "sha512-0LAzUmcmvQwjIdJt0cXUVX4G5qjVXE8ELt6nbMNDzv2yAs2hYCCUtQq+Eje70GwAysWCGcS64QeYj5VPHYVxPg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.0.tgz",
+      "integrity": "sha512-NcPzZBk6IkDW3Z2V8orGueheGJJYfT5P0zI/vTO/Jp+R9KluUdgFrgwfvZ0A34Kw6HKgiWFILZmh3oQ/eS+UxA==",
       "dev": true,
       "dependencies": {
         "@babel/traverse": "^7.1.0",
-        "@jest/environment": "^27.1.1",
+        "@jest/environment": "^27.2.0",
         "@jest/source-map": "^27.0.6",
-        "@jest/test-result": "^27.1.1",
+        "@jest/test-result": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "chalk": "^4.0.0",
         "co": "^4.6.0",
-        "expect": "^27.1.1",
+        "expect": "^27.2.0",
         "is-generator-fn": "^2.0.0",
-        "jest-each": "^27.1.1",
-        "jest-matcher-utils": "^27.1.1",
-        "jest-message-util": "^27.1.1",
-        "jest-runtime": "^27.1.1",
-        "jest-snapshot": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "pretty-format": "^27.1.1",
+        "jest-each": "^27.2.0",
+        "jest-matcher-utils": "^27.2.0",
+        "jest-message-util": "^27.2.0",
+        "jest-runtime": "^27.2.0",
+        "jest-snapshot": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "pretty-format": "^27.2.0",
         "throat": "^6.0.1"
       },
       "engines": {
@@ -4678,28 +4679,28 @@
       }
     },
     "node_modules/jest-leak-detector": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.1.1.tgz",
-      "integrity": "sha512-gwSgzmqShoeEsEVpgObymQPrM9P6557jt1EsFW5aCeJ46Cme0EdjYU7xr6llQZ5GpWDl56eOstUaPXiZOfiTKw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.0.tgz",
+      "integrity": "sha512-e91BIEmbZw5+MHkB4Hnrq7S86coTxUMCkz4n7DLmQYvl9pEKmRx9H/JFH87bBqbIU5B2Ju1soKxRWX6/eGFGpA==",
       "dev": true,
       "dependencies": {
         "jest-get-type": "^27.0.6",
-        "pretty-format": "^27.1.1"
+        "pretty-format": "^27.2.0"
       },
       "engines": {
         "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
       }
     },
     "node_modules/jest-matcher-utils": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.1.tgz",
-      "integrity": "sha512-Q1a10w9Y4sh0wegkdP6reQOa/Dtz7nAvDqBgrat1ItZAUvk4jzXAqyhXPu/ZuEtDaXaNKpdRPRQA8bvkOh2Eaw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz",
+      "integrity": "sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw==",
       "dev": true,
       "dependencies": {
         "chalk": "^4.0.0",
-        "jest-diff": "^27.1.1",
+        "jest-diff": "^27.2.0",
         "jest-get-type": "^27.0.6",
-        "pretty-format": "^27.1.1"
+        "pretty-format": "^27.2.0"
       },
       "engines": {
         "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -4770,9 +4771,9 @@
       }
     },
     "node_modules/jest-message-util": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.1.tgz",
-      "integrity": "sha512-b697BOJV93+AVGvzLRtVZ0cTVRbd59OaWnbB2D75GRaIMc4I+Z9W0wHxbfjW01JWO+TqqW4yevT0aN7Fd0XWng==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.0.tgz",
+      "integrity": "sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w==",
       "dev": true,
       "dependencies": {
         "@babel/code-frame": "^7.12.13",
@@ -4781,7 +4782,7 @@
         "chalk": "^4.0.0",
         "graceful-fs": "^4.2.4",
         "micromatch": "^4.0.4",
-        "pretty-format": "^27.1.1",
+        "pretty-format": "^27.2.0",
         "slash": "^3.0.0",
         "stack-utils": "^2.0.3"
       },
@@ -4893,19 +4894,19 @@
       }
     },
     "node_modules/jest-resolve": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.1.tgz",
-      "integrity": "sha512-M41YFmWhvDVstwe7XuV21zynOiBLJB5Sk0GrIsYYgTkjfEWNLVXDjAyq1W7PHseaYNOxIc0nOGq/r5iwcZNC1A==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.0.tgz",
+      "integrity": "sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw==",
       "dev": true,
       "dependencies": {
         "@jest/types": "^27.1.1",
         "chalk": "^4.0.0",
         "escalade": "^3.1.1",
         "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.1.1",
+        "jest-haste-map": "^27.2.0",
         "jest-pnp-resolver": "^1.2.2",
-        "jest-util": "^27.1.1",
-        "jest-validate": "^27.1.1",
+        "jest-util": "^27.2.0",
+        "jest-validate": "^27.2.0",
         "resolve": "^1.20.0",
         "slash": "^3.0.0"
       },
@@ -4914,14 +4915,14 @@
       }
     },
     "node_modules/jest-resolve-dependencies": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.1.tgz",
-      "integrity": "sha512-sYZR+uBjFDCo4VhYeazZf/T+ryYItvdLKu9vHatqkUqHGjDMrdEPOykiqC2iEpaCFTS+3iL/21CYiJuKdRbniw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.0.tgz",
+      "integrity": "sha512-EY5jc/Y0oxn+oVEEldTidmmdVoZaknKPyDORA012JUdqPyqPL+lNdRyI3pGti0RCydds6coaw6xt4JQY54dKsg==",
       "dev": true,
       "dependencies": {
         "@jest/types": "^27.1.1",
         "jest-regex-util": "^27.0.6",
-        "jest-snapshot": "^27.1.1"
+        "jest-snapshot": "^27.2.0"
       },
       "engines": {
         "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -4992,15 +4993,15 @@
       }
     },
     "node_modules/jest-runner": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.1.1.tgz",
-      "integrity": "sha512-lP3MBNQhg75/sQtVkC8dsAQZumvy3lHK/YIwYPfEyqGIX1qEcnYIRxP89q0ZgC5ngvi1vN2P5UFHszQxguWdng==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.0.tgz",
+      "integrity": "sha512-Cl+BHpduIc0cIVTjwoyx0pQk4Br8gn+wkr35PmKCmzEdOUnQ2wN7QVXA8vXnMQXSlFkN/+KWnk20TAVBmhgrww==",
       "dev": true,
       "dependencies": {
-        "@jest/console": "^27.1.1",
-        "@jest/environment": "^27.1.1",
-        "@jest/test-result": "^27.1.1",
-        "@jest/transform": "^27.1.1",
+        "@jest/console": "^27.2.0",
+        "@jest/environment": "^27.2.0",
+        "@jest/test-result": "^27.2.0",
+        "@jest/transform": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "chalk": "^4.0.0",
@@ -5008,15 +5009,15 @@
         "exit": "^0.1.2",
         "graceful-fs": "^4.2.4",
         "jest-docblock": "^27.0.6",
-        "jest-environment-jsdom": "^27.1.1",
-        "jest-environment-node": "^27.1.1",
-        "jest-haste-map": "^27.1.1",
-        "jest-leak-detector": "^27.1.1",
-        "jest-message-util": "^27.1.1",
-        "jest-resolve": "^27.1.1",
-        "jest-runtime": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "jest-worker": "^27.1.1",
+        "jest-environment-jsdom": "^27.2.0",
+        "jest-environment-node": "^27.2.0",
+        "jest-haste-map": "^27.2.0",
+        "jest-leak-detector": "^27.2.0",
+        "jest-message-util": "^27.2.0",
+        "jest-resolve": "^27.2.0",
+        "jest-runtime": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "jest-worker": "^27.2.0",
         "source-map-support": "^0.5.6",
         "throat": "^6.0.1"
       },
@@ -5089,18 +5090,18 @@
       }
     },
     "node_modules/jest-runtime": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.1.tgz",
-      "integrity": "sha512-FEwy+tSzmsvuKaQpyYsUyk31KG5vMmA2r2BSTHgv0yNfcooQdm2Ke91LM9Ud8D3xz8CLDHJWAI24haMFTwrsPg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.0.tgz",
+      "integrity": "sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ==",
       "dev": true,
       "dependencies": {
-        "@jest/console": "^27.1.1",
-        "@jest/environment": "^27.1.1",
-        "@jest/fake-timers": "^27.1.1",
-        "@jest/globals": "^27.1.1",
+        "@jest/console": "^27.2.0",
+        "@jest/environment": "^27.2.0",
+        "@jest/fake-timers": "^27.2.0",
+        "@jest/globals": "^27.2.0",
         "@jest/source-map": "^27.0.6",
-        "@jest/test-result": "^27.1.1",
-        "@jest/transform": "^27.1.1",
+        "@jest/test-result": "^27.2.0",
+        "@jest/transform": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/yargs": "^16.0.0",
         "chalk": "^4.0.0",
@@ -5110,14 +5111,14 @@
         "exit": "^0.1.2",
         "glob": "^7.1.3",
         "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.1.1",
-        "jest-message-util": "^27.1.1",
+        "jest-haste-map": "^27.2.0",
+        "jest-message-util": "^27.2.0",
         "jest-mock": "^27.1.1",
         "jest-regex-util": "^27.0.6",
-        "jest-resolve": "^27.1.1",
-        "jest-snapshot": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "jest-validate": "^27.1.1",
+        "jest-resolve": "^27.2.0",
+        "jest-snapshot": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "jest-validate": "^27.2.0",
         "slash": "^3.0.0",
         "strip-bom": "^4.0.0",
         "yargs": "^16.0.3"
@@ -5204,9 +5205,9 @@
       }
     },
     "node_modules/jest-snapshot": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.1.tgz",
-      "integrity": "sha512-Wi3QGiuRFo3lU+EbQmZnBOks0CJyAMPHvYoG7iJk00Do10jeOyuOEO0Jfoaoun8+8TDv+Nzl7Aswir/IK9+1jg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.0.tgz",
+      "integrity": "sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ==",
       "dev": true,
       "dependencies": {
         "@babel/core": "^7.7.2",
@@ -5215,23 +5216,23 @@
         "@babel/plugin-syntax-typescript": "^7.7.2",
         "@babel/traverse": "^7.7.2",
         "@babel/types": "^7.0.0",
-        "@jest/transform": "^27.1.1",
+        "@jest/transform": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/babel__traverse": "^7.0.4",
         "@types/prettier": "^2.1.5",
         "babel-preset-current-node-syntax": "^1.0.0",
         "chalk": "^4.0.0",
-        "expect": "^27.1.1",
+        "expect": "^27.2.0",
         "graceful-fs": "^4.2.4",
-        "jest-diff": "^27.1.1",
+        "jest-diff": "^27.2.0",
         "jest-get-type": "^27.0.6",
-        "jest-haste-map": "^27.1.1",
-        "jest-matcher-utils": "^27.1.1",
-        "jest-message-util": "^27.1.1",
-        "jest-resolve": "^27.1.1",
-        "jest-util": "^27.1.1",
+        "jest-haste-map": "^27.2.0",
+        "jest-matcher-utils": "^27.2.0",
+        "jest-message-util": "^27.2.0",
+        "jest-resolve": "^27.2.0",
+        "jest-util": "^27.2.0",
         "natural-compare": "^1.4.0",
-        "pretty-format": "^27.1.1",
+        "pretty-format": "^27.2.0",
         "semver": "^7.3.2"
       },
       "engines": {
@@ -5303,9 +5304,9 @@
       }
     },
     "node_modules/jest-util": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.1.tgz",
-      "integrity": "sha512-zf9nEbrASWn2mC/L91nNb0K+GkhFvi4MP6XJG2HqnHzHvLYcs7ou/In68xYU1i1dSkJlrWcYfWXQE8nVR+nbOA==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.0.tgz",
+      "integrity": "sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A==",
       "dev": true,
       "dependencies": {
         "@jest/types": "^27.1.1",
@@ -5384,9 +5385,9 @@
       }
     },
     "node_modules/jest-validate": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.1.tgz",
-      "integrity": "sha512-N5Er5FKav/8m2dJwn7BGnZwnoD1BSc8jx5T+diG2OvyeugvZDhPeAt5DrNaGkkaKCrSUvuE7A5E4uHyT7Vj0Mw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.0.tgz",
+      "integrity": "sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ==",
       "dev": true,
       "dependencies": {
         "@jest/types": "^27.1.1",
@@ -5394,7 +5395,7 @@
         "chalk": "^4.0.0",
         "jest-get-type": "^27.0.6",
         "leven": "^3.1.0",
-        "pretty-format": "^27.1.1"
+        "pretty-format": "^27.2.0"
       },
       "engines": {
         "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -5477,17 +5478,17 @@
       }
     },
     "node_modules/jest-watcher": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.1.1.tgz",
-      "integrity": "sha512-XQzyHbxziDe+lZM6Dzs40fEt4q9akOGwitJnxQasJ9WG0bv3JGiRlsBgjw13znGapeMtFaEsyhL0Cl04IbaoWQ==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.0.tgz",
+      "integrity": "sha512-SjRWhnr+qO8aBsrcnYIyF+qRxNZk6MZH8TIDgvi+VlsyrvOyqg0d+Rm/v9KHiTtC9mGGeFi9BFqgavyWib6xLg==",
       "dev": true,
       "dependencies": {
-        "@jest/test-result": "^27.1.1",
+        "@jest/test-result": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "ansi-escapes": "^4.2.1",
         "chalk": "^4.0.0",
-        "jest-util": "^27.1.1",
+        "jest-util": "^27.2.0",
         "string-length": "^4.0.1"
       },
       "engines": {
@@ -5559,9 +5560,9 @@
       }
     },
     "node_modules/jest-worker": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.1.tgz",
-      "integrity": "sha512-XJKCL7tu+362IUYTWvw8+3S75U7qMiYiRU6u5yqscB48bTvzwN6i8L/7wVTXiFLwkRsxARNM7TISnTvcgv9hxA==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.0.tgz",
+      "integrity": "sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA==",
       "dev": true,
       "dependencies": {
         "@types/node": "*",
@@ -5753,7 +5754,7 @@
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
       "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
-      "dependencies": {
+      "optionalDependencies": {
         "graceful-fs": "^4.1.6"
       }
     },
@@ -5788,12 +5789,12 @@
       }
     },
     "node_modules/libhoney": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/libhoney/-/libhoney-2.3.2.tgz",
-      "integrity": "sha512-GH/RUiiBQJykBzzMc7KZF3u+uAMkkTEkFBjfcHErnGl+SZ0vmRH3a4QNt5138BPVoYTvCAjncjIQWz3YUOUWRA==",
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/libhoney/-/libhoney-2.3.3.tgz",
+      "integrity": "sha512-WfujgzJjIxN4ZwRwX7iO1LFvzB9x+M7MGEN+FsPrCjTti+cA3CMYR400ElqRO84/ZwEphjiJrO+yqvVceu4N6Q==",
       "dependencies": {
         "superagent": "^6.1.0",
-        "superagent-proxy": "^2.0.0",
+        "superagent-proxy": "^3.0.0",
         "urljoin": "^0.1.5"
       },
       "engines": {
@@ -6330,9 +6331,9 @@
       }
     },
     "node_modules/netmask": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz",
-      "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
+      "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
       "engines": {
         "node": ">= 0.4.0"
       }
@@ -6531,9 +6532,9 @@
       }
     },
     "node_modules/pac-proxy-agent": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz",
-      "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz",
+      "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==",
       "dependencies": {
         "@tootallnate/once": "1",
         "agent-base": "6",
@@ -6541,25 +6542,25 @@
         "get-uri": "3",
         "http-proxy-agent": "^4.0.1",
         "https-proxy-agent": "5",
-        "pac-resolver": "^4.1.0",
+        "pac-resolver": "^5.0.0",
         "raw-body": "^2.2.0",
         "socks-proxy-agent": "5"
       },
       "engines": {
-        "node": ">= 6"
+        "node": ">= 8"
       }
     },
     "node_modules/pac-resolver": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.1.0.tgz",
-      "integrity": "sha512-d6lf2IrZJJ7ooVHr7BfwSjRO1yKSJMaiiWYSHcrxSIUtZrCa4KKGwcztdkZ/E9LFleJfjoi1yl+XLR7AX24nbQ==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.0.tgz",
+      "integrity": "sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==",
       "dependencies": {
-        "degenerator": "^2.2.0",
+        "degenerator": "^3.0.1",
         "ip": "^1.1.5",
-        "netmask": "^1.0.6"
+        "netmask": "^2.0.1"
       },
       "engines": {
-        "node": ">= 6"
+        "node": ">= 8"
       }
     },
     "node_modules/packet-reader": {
@@ -6873,9 +6874,9 @@
       }
     },
     "node_modules/prettier": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz",
-      "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz",
+      "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==",
       "dev": true,
       "bin": {
         "prettier": "bin-prettier.js"
@@ -6885,9 +6886,9 @@
       }
     },
     "node_modules/pretty-format": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.1.tgz",
-      "integrity": "sha512-zdBi/xlstKJL42UH7goQti5Hip/B415w1Mfj+WWWYMBylAYtKESnXGUtVVcMVid9ReVjypCotUV6CEevYPHv2g==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.0.tgz",
+      "integrity": "sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA==",
       "dev": true,
       "dependencies": {
         "@jest/types": "^27.1.1",
@@ -6947,21 +6948,21 @@
       }
     },
     "node_modules/proxy-agent": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz",
-      "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz",
+      "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==",
       "dependencies": {
         "agent-base": "^6.0.0",
         "debug": "4",
         "http-proxy-agent": "^4.0.0",
         "https-proxy-agent": "^5.0.0",
         "lru-cache": "^5.1.1",
-        "pac-proxy-agent": "^4.1.0",
+        "pac-proxy-agent": "^5.0.0",
         "proxy-from-env": "^1.0.0",
         "socks-proxy-agent": "^5.0.0"
       },
       "engines": {
-        "node": ">=6"
+        "node": ">= 8"
       }
     },
     "node_modules/proxy-from-env": {
@@ -7491,18 +7492,18 @@
       }
     },
     "node_modules/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==",
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+      "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
       "engines": {
         "node": ">= 6.0.0",
         "npm": ">= 3.0.0"
       }
     },
     "node_modules/socks": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.0.tgz",
-      "integrity": "sha512-mNmr9owlinMplev0Wd7UHFlqI4ofnBnNzFuzrm63PPaHgbkqCFe4T5LzwKmtQ/f2tX0NTpcdVLyD/FHxFBstYw==",
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz",
+      "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==",
       "dependencies": {
         "ip": "^1.1.5",
         "smart-buffer": "^4.1.0"
@@ -7513,11 +7514,11 @@
       }
     },
     "node_modules/socks-proxy-agent": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz",
-      "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==",
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==",
       "dependencies": {
-        "agent-base": "6",
+        "agent-base": "^6.0.2",
         "debug": "4",
         "socks": "^2.3.3"
       },
@@ -7570,9 +7571,9 @@
       "dev": true
     },
     "node_modules/stack-utils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz",
-      "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==",
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
+      "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
       "dev": true,
       "dependencies": {
         "escape-string-regexp": "^2.0.0"
@@ -7745,30 +7746,20 @@
       }
     },
     "node_modules/superagent-proxy": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/superagent-proxy/-/superagent-proxy-2.1.0.tgz",
-      "integrity": "sha512-DnarpKN6Xn8e3pYlFV4Yvsj9yxLY4q5FIsUe5JvN7vjzP+YCfzXv03dTkZSD2yzrSadsNYHf0IgOUJwKjX457A==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/superagent-proxy/-/superagent-proxy-3.0.0.tgz",
+      "integrity": "sha512-wAlRInOeDFyd9pyonrkJspdRAxdLrcsZ6aSnS+8+nu4x1aXbz6FWSTT9M6Ibze+eG60szlL7JA8wEIV7bPWuyQ==",
       "dependencies": {
-        "debug": "^3.1.0",
-        "proxy-agent": "^4.0.0"
+        "debug": "^4.3.2",
+        "proxy-agent": "^5.0.0"
       },
       "engines": {
         "node": ">=6"
+      },
+      "peerDependencies": {
+        "superagent": ">= 0.15.4 || 1 || 2 || 3"
       }
     },
-    "node_modules/superagent-proxy/node_modules/debug": {
-      "version": "3.2.7",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-      "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-      "dependencies": {
-        "ms": "^2.1.1"
-      }
-    },
-    "node_modules/superagent-proxy/node_modules/ms": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
-    },
     "node_modules/superagent/node_modules/mime": {
       "version": "2.5.2",
       "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
@@ -8172,6 +8163,17 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/vm2": {
+      "version": "3.9.3",
+      "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.3.tgz",
+      "integrity": "sha512-smLS+18RjXYMl9joyJxMNI9l4w7biW8ilSDaVRvFBDwOH8P0BK1ognFQTpg0wyQ6wIKLTblHJvROW692L/E53Q==",
+      "bin": {
+        "vm2": "bin/vm2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      }
+    },
     "node_modules/w3c-hr-time": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
@@ -8406,7 +8408,10 @@
     "node_modules/xregexp": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz",
-      "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM="
+      "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=",
+      "engines": {
+        "node": "*"
+      }
     },
     "node_modules/xtend": {
       "version": "4.0.2",
@@ -8608,19 +8613,19 @@
       }
     },
     "@babel/helper-module-transforms": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz",
-      "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==",
+      "version": "7.15.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.7.tgz",
+      "integrity": "sha512-ZNqjjQG/AuFfekFTY+7nY4RgBSklgTu970c7Rj3m/JOhIu5KPBUuTA9AY6zaKcUvk4g6EbDXdBnhi35FAssdSw==",
       "dev": true,
       "requires": {
         "@babel/helper-module-imports": "^7.15.4",
         "@babel/helper-replace-supers": "^7.15.4",
         "@babel/helper-simple-access": "^7.15.4",
         "@babel/helper-split-export-declaration": "^7.15.4",
-        "@babel/helper-validator-identifier": "^7.14.9",
+        "@babel/helper-validator-identifier": "^7.15.7",
         "@babel/template": "^7.15.4",
         "@babel/traverse": "^7.15.4",
-        "@babel/types": "^7.15.4"
+        "@babel/types": "^7.15.6"
       }
     },
     "@babel/helper-optimise-call-expression": {
@@ -8669,9 +8674,9 @@
       }
     },
     "@babel/helper-validator-identifier": {
-      "version": "7.14.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
-      "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==",
+      "version": "7.15.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
+      "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==",
       "dev": true
     },
     "@babel/helper-validator-option": {
@@ -8711,9 +8716,9 @@
       }
     },
     "@babel/parser": {
-      "version": "7.15.6",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.6.tgz",
-      "integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==",
+      "version": "7.15.7",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.7.tgz",
+      "integrity": "sha512-rycZXvQ+xS9QyIcJ9HXeDWf1uxqlbVFAUq0Rq0dbc50Zb/+wUe/ehyfzGfm9KZZF0kBejYgxltBXocP+gKdL2g==",
       "dev": true
     },
     "@babel/plugin-syntax-async-generators": {
@@ -8948,16 +8953,16 @@
       "dev": true
     },
     "@jest/console": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.1.1.tgz",
-      "integrity": "sha512-VpQJRsWSeAem0zpBjeRtDbcD6DlbNoK11dNYt+PSQ+DDORh9q2/xyEpErfwgnLjWX0EKkSZmTGx/iH9Inzs6vQ==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.0.tgz",
+      "integrity": "sha512-35z+RqsK2CCgNxn+lWyK8X4KkaDtfL4BggT7oeZ0JffIiAiEYFYPo5B67V50ZubqDS1ehBrdCR2jduFnIrZOYw==",
       "dev": true,
       "requires": {
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "chalk": "^4.0.0",
-        "jest-message-util": "^27.1.1",
-        "jest-util": "^27.1.1",
+        "jest-message-util": "^27.2.0",
+        "jest-util": "^27.2.0",
         "slash": "^3.0.0"
       },
       "dependencies": {
@@ -9007,15 +9012,15 @@
       }
     },
     "@jest/core": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.1.1.tgz",
-      "integrity": "sha512-oCkKeTgI0emznKcLoq5OCD0PhxCijA4l7ejDnWW3d5bgSi+zfVaLybVqa+EQOxpNejQWtTna7tmsAXjMN9N43Q==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.0.tgz",
+      "integrity": "sha512-E/2NHhq+VMo18DpKkoty8Sjey8Kps5Cqa88A8NP757s6JjYqPdioMuyUBhDiIOGCdQByEp0ou3jskkTszMS0nw==",
       "dev": true,
       "requires": {
-        "@jest/console": "^27.1.1",
-        "@jest/reporters": "^27.1.1",
-        "@jest/test-result": "^27.1.1",
-        "@jest/transform": "^27.1.1",
+        "@jest/console": "^27.2.0",
+        "@jest/reporters": "^27.2.0",
+        "@jest/test-result": "^27.2.0",
+        "@jest/transform": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "ansi-escapes": "^4.2.1",
@@ -9024,18 +9029,18 @@
         "exit": "^0.1.2",
         "graceful-fs": "^4.2.4",
         "jest-changed-files": "^27.1.1",
-        "jest-config": "^27.1.1",
-        "jest-haste-map": "^27.1.1",
-        "jest-message-util": "^27.1.1",
+        "jest-config": "^27.2.0",
+        "jest-haste-map": "^27.2.0",
+        "jest-message-util": "^27.2.0",
         "jest-regex-util": "^27.0.6",
-        "jest-resolve": "^27.1.1",
-        "jest-resolve-dependencies": "^27.1.1",
-        "jest-runner": "^27.1.1",
-        "jest-runtime": "^27.1.1",
-        "jest-snapshot": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "jest-validate": "^27.1.1",
-        "jest-watcher": "^27.1.1",
+        "jest-resolve": "^27.2.0",
+        "jest-resolve-dependencies": "^27.2.0",
+        "jest-runner": "^27.2.0",
+        "jest-runtime": "^27.2.0",
+        "jest-snapshot": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "jest-validate": "^27.2.0",
+        "jest-watcher": "^27.2.0",
         "micromatch": "^4.0.4",
         "p-each-series": "^2.1.0",
         "rimraf": "^3.0.0",
@@ -9089,52 +9094,52 @@
       }
     },
     "@jest/environment": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.1.1.tgz",
-      "integrity": "sha512-+y882/ZdxhyqF5RzxIrNIANjHj991WH7jifdcplzMDosDUOyCACFYUyVTBGbSTocbU+s1cesroRzkwi8hZ9SHg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.0.tgz",
+      "integrity": "sha512-iPWmQI0wRIYSZX3wKu4FXHK4eIqkfq6n1DCDJS+v3uby7SOXrHvX4eiTBuEdSvtDRMTIH2kjrSkjHf/F9JIYyQ==",
       "dev": true,
       "requires": {
-        "@jest/fake-timers": "^27.1.1",
+        "@jest/fake-timers": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "jest-mock": "^27.1.1"
       }
     },
     "@jest/fake-timers": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.1.1.tgz",
-      "integrity": "sha512-u8TJ5VlsVYTsGFatoyIae2l25pku4Bu15QCPTx2Gs5z+R//Ee3tHN85462Vc9yGVcdDvgADbqNkhOLxbEwPjMQ==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.0.tgz",
+      "integrity": "sha512-gSu3YHvQOoVaTWYGgHFB7IYFtcF2HBzX4l7s47VcjvkUgL4/FBnE20x7TNLa3W6ABERtGd5gStSwsA8bcn+c4w==",
       "dev": true,
       "requires": {
         "@jest/types": "^27.1.1",
         "@sinonjs/fake-timers": "^7.0.2",
         "@types/node": "*",
-        "jest-message-util": "^27.1.1",
+        "jest-message-util": "^27.2.0",
         "jest-mock": "^27.1.1",
-        "jest-util": "^27.1.1"
+        "jest-util": "^27.2.0"
       }
     },
     "@jest/globals": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.1.1.tgz",
-      "integrity": "sha512-Q3JcTPmY+DAEHnr4MpnBV3mwy50EGrTC6oSDTNnW7FNGGacTJAfpWNk02D7xv422T1OzK2A2BKx+26xJOvHkyw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.0.tgz",
+      "integrity": "sha512-raqk9Gf9WC3hlBa57rmRmJfRl9hom2b+qEE/ifheMtwn5USH5VZxzrHHOZg0Zsd/qC2WJ8UtyTwHKQAnNlDMdg==",
       "dev": true,
       "requires": {
-        "@jest/environment": "^27.1.1",
+        "@jest/environment": "^27.2.0",
         "@jest/types": "^27.1.1",
-        "expect": "^27.1.1"
+        "expect": "^27.2.0"
       }
     },
     "@jest/reporters": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.1.1.tgz",
-      "integrity": "sha512-cEERs62n1P4Pqox9HWyNOEkP57G95aK2mBjB6D8Ruz1Yc98fKH53b58rlVEnsY5nLmkLNZk65fxNi9C0Yds/8w==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.0.tgz",
+      "integrity": "sha512-7wfkE3iRTLaT0F51h1mnxH3nQVwDCdbfgXiLuCcNkF1FnxXLH9utHqkSLIiwOTV1AtmiE0YagHbOvx4rnMP/GA==",
       "dev": true,
       "requires": {
         "@bcoe/v8-coverage": "^0.2.3",
-        "@jest/console": "^27.1.1",
-        "@jest/test-result": "^27.1.1",
-        "@jest/transform": "^27.1.1",
+        "@jest/console": "^27.2.0",
+        "@jest/test-result": "^27.2.0",
+        "@jest/transform": "^27.2.0",
         "@jest/types": "^27.1.1",
         "chalk": "^4.0.0",
         "collect-v8-coverage": "^1.0.0",
@@ -9146,10 +9151,10 @@
         "istanbul-lib-report": "^3.0.0",
         "istanbul-lib-source-maps": "^4.0.0",
         "istanbul-reports": "^3.0.2",
-        "jest-haste-map": "^27.1.1",
-        "jest-resolve": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "jest-worker": "^27.1.1",
+        "jest-haste-map": "^27.2.0",
+        "jest-resolve": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "jest-worker": "^27.2.0",
         "slash": "^3.0.0",
         "source-map": "^0.6.0",
         "string-length": "^4.0.1",
@@ -9214,33 +9219,33 @@
       }
     },
     "@jest/test-result": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.1.1.tgz",
-      "integrity": "sha512-8vy75A0Jtfz9DqXFUkjC5Co/wRla+D7qRFdShUY8SbPqBS3GBx3tpba7sGKFos8mQrdbe39n+c1zgVKtarfy6A==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.0.tgz",
+      "integrity": "sha512-JPPqn8h0RGr4HyeY1Km+FivDIjTFzDROU46iAvzVjD42ooGwYoqYO/MQTilhfajdz6jpVnnphFrKZI5OYrBONA==",
       "dev": true,
       "requires": {
-        "@jest/console": "^27.1.1",
+        "@jest/console": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/istanbul-lib-coverage": "^2.0.0",
         "collect-v8-coverage": "^1.0.0"
       }
     },
     "@jest/test-sequencer": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.1.1.tgz",
-      "integrity": "sha512-l8zD3EdeixvwmLNlJoMX3hhj8iIze95okj4sqmBzOq/zW8gZLElUveH4bpKEMuR+Nweazjlwc7L6g4C26M/y6Q==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.0.tgz",
+      "integrity": "sha512-PrqarcpzOU1KSAK7aPwfL8nnpaqTMwPe7JBPnaOYRDSe/C6AoJiL5Kbnonqf1+DregxZIRAoDg69R9/DXMGqXA==",
       "dev": true,
       "requires": {
-        "@jest/test-result": "^27.1.1",
+        "@jest/test-result": "^27.2.0",
         "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.1.1",
-        "jest-runtime": "^27.1.1"
+        "jest-haste-map": "^27.2.0",
+        "jest-runtime": "^27.2.0"
       }
     },
     "@jest/transform": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.1.1.tgz",
-      "integrity": "sha512-qM19Eu75U6Jc5zosXXVnq900Nl9JDpoGaZ4Mg6wZs7oqbu3heYSMOZS19DlwjlhWdfNRjF4UeAgkrCJCK3fEXg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.0.tgz",
+      "integrity": "sha512-Q8Q/8xXIZYllk1AF7Ou5sV3egOZsdY/Wlv09CSbcexBRcC1Qt6lVZ7jRFAZtbHsEEzvOCyFEC4PcrwKwyjXtCg==",
       "dev": true,
       "requires": {
         "@babel/core": "^7.1.0",
@@ -9250,9 +9255,9 @@
         "convert-source-map": "^1.4.0",
         "fast-json-stable-stringify": "^2.0.0",
         "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.1.1",
+        "jest-haste-map": "^27.2.0",
         "jest-regex-util": "^27.0.6",
-        "jest-util": "^27.1.1",
+        "jest-util": "^27.2.0",
         "micromatch": "^4.0.4",
         "pirates": "^4.0.1",
         "slash": "^3.0.0",
@@ -9480,9 +9485,9 @@
       }
     },
     "@types/node": {
-      "version": "16.9.1",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz",
-      "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g=="
+      "version": "16.9.4",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.4.tgz",
+      "integrity": "sha512-KDazLNYAGIuJugdbULwFZULF9qQ13yNWEBFnfVpqlpgAAo6H/qnM9RjBgh0A0kmHf3XxAKLdN5mTIng9iUvVLA=="
     },
     "@types/parse-json": {
       "version": "4.0.0",
@@ -9692,9 +9697,9 @@
       },
       "dependencies": {
         "tslib": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
-          "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A=="
+          "version": "2.3.1",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
+          "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
         }
       }
     },
@@ -9728,16 +9733,16 @@
       }
     },
     "babel-jest": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.1.1.tgz",
-      "integrity": "sha512-JA+dzJl4n2RBvWQEnph6HJaTHrsIPiXGQYatt/D8nR4UpX9UG4GaDzykVVPQBbrdTebZREkRb6SOxyIXJRab6Q==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.0.tgz",
+      "integrity": "sha512-bS2p+KGGVVmWXBa8+i6SO/xzpiz2Q/2LnqLbQknPKefWXVZ67YIjA4iXup/jMOEZplga9PpWn+wrdb3UdDwRaA==",
       "dev": true,
       "requires": {
-        "@jest/transform": "^27.1.1",
+        "@jest/transform": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/babel__core": "^7.1.14",
         "babel-plugin-istanbul": "^6.0.0",
-        "babel-preset-jest": "^27.0.6",
+        "babel-preset-jest": "^27.2.0",
         "chalk": "^4.0.0",
         "graceful-fs": "^4.2.4",
         "slash": "^3.0.0"
@@ -9802,9 +9807,9 @@
       }
     },
     "babel-plugin-jest-hoist": {
-      "version": "27.0.6",
-      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.6.tgz",
-      "integrity": "sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz",
+      "integrity": "sha512-TOux9khNKdi64mW+0OIhcmbAn75tTlzKhxmiNXevQaPbrBYK7YKjP1jl6NHTJ6XR5UgUrJbCnWlKVnJn29dfjw==",
       "dev": true,
       "requires": {
         "@babel/template": "^7.3.3",
@@ -9834,12 +9839,12 @@
       }
     },
     "babel-preset-jest": {
-      "version": "27.0.6",
-      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.6.tgz",
-      "integrity": "sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.2.0.tgz",
+      "integrity": "sha512-z7MgQ3peBwN5L5aCqBKnF6iqdlvZvFUQynEhu0J+X9nHLU72jO3iY331lcYrg+AssJ8q7xsv5/3AICzVmJ/wvg==",
       "dev": true,
       "requires": {
-        "babel-plugin-jest-hoist": "^27.0.6",
+        "babel-plugin-jest-hoist": "^27.2.0",
         "babel-preset-current-node-syntax": "^1.0.0"
       }
     },
@@ -9982,9 +9987,9 @@
       "dev": true
     },
     "caniuse-lite": {
-      "version": "1.0.30001257",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001257.tgz",
-      "integrity": "sha512-JN49KplOgHSXpIsVSF+LUyhD8PUp6xPpAXeRrrcBh4KBeP7W864jHn6RvzJgDlrReyeVjMFJL3PLpPvKIxlIHA==",
+      "version": "1.0.30001258",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001258.tgz",
+      "integrity": "sha512-RBByOG6xWXUp0CR2/WU2amXz3stjKpSl5J1xU49F1n2OxD//uBZO4wCKUiG+QMGf7CHGfDDcqoKriomoGVxTeA==",
       "dev": true
     },
     "chalk": {
@@ -10214,9 +10219,9 @@
       "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
     },
     "core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
     },
     "cosmiconfig": {
       "version": "7.0.0",
@@ -10320,13 +10325,14 @@
       "dev": true
     },
     "degenerator": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-2.2.0.tgz",
-      "integrity": "sha512-aiQcQowF01RxFI4ZLFMpzyotbQonhNpBao6dkI8JPk5a+hmSjR5ErHp2CQySmQe8os3VBqLCIh87nDBgZXvsmg==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.1.tgz",
+      "integrity": "sha512-LFsIFEeLPlKvAKXu7j3ssIG6RT0TbI7/GhsqrI0DnHASEQjXQ0LUSYcjJteGgRGmZbl1TnMSxpNQIAiJ7Du5TQ==",
       "requires": {
         "ast-types": "^0.13.2",
         "escodegen": "^1.8.1",
-        "esprima": "^4.0.0"
+        "esprima": "^4.0.0",
+        "vm2": "^3.9.3"
       }
     },
     "delayed-stream": {
@@ -10390,9 +10396,9 @@
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.3.836",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.836.tgz",
-      "integrity": "sha512-Ney3pHOJBWkG/AqYjrW0hr2AUCsao+2uvq9HUlRP8OlpSdk/zOHOUJP7eu0icDvePC9DlgffuelP4TnOJmMRUg==",
+      "version": "1.3.843",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.843.tgz",
+      "integrity": "sha512-OWEwAbzaVd1Lk9MohVw8LxMXFlnYd9oYTYxfX8KS++kLLjDfbovLOcEEXwRhG612dqGQ6+44SZvim0GXuBRiKg==",
       "dev": true
     },
     "emittery": {
@@ -10739,16 +10745,16 @@
       "dev": true
     },
     "expect": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/expect/-/expect-27.1.1.tgz",
-      "integrity": "sha512-JQAzp0CJoFFHF1RnOtrMUNMdsfx/Tl0+FhRzVl8q0fa23N+JyWdPXwb3T5rkHCvyo9uttnK7lVdKCBl1b/9EDw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.0.tgz",
+      "integrity": "sha512-oOTbawMQv7AK1FZURbPTgGSzmhxkjFzoARSvDjOMnOpeWuYQx1tP6rXu9MIX5mrACmyCAM7fSNP8IJO2f1p0CQ==",
       "dev": true,
       "requires": {
         "@jest/types": "^27.1.1",
         "ansi-styles": "^5.0.0",
         "jest-get-type": "^27.0.6",
-        "jest-matcher-utils": "^27.1.1",
-        "jest-message-util": "^27.1.1",
+        "jest-matcher-utils": "^27.2.0",
+        "jest-message-util": "^27.2.0",
         "jest-regex-util": "^27.0.6"
       },
       "dependencies": {
@@ -10868,9 +10874,9 @@
       "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag=="
     },
     "fastify": {
-      "version": "3.21.0",
-      "resolved": "https://registry.npmjs.org/fastify/-/fastify-3.21.0.tgz",
-      "integrity": "sha512-hc9p0meCV8PXIQzg8BwXekhCmJm5LHfeJi7U3mKQTMu7pQT24CL756jUxM9sOLEbBpQoD82PejVPW2lfLiXJsw==",
+      "version": "3.21.3",
+      "resolved": "https://registry.npmjs.org/fastify/-/fastify-3.21.3.tgz",
+      "integrity": "sha512-4PuuCCcGZpcD9ERc8x6H7GHElcHQxHVouyANAVw/Nd9h07X63QQJ2EpHeQtuiDCjcs0pf9wKb6KIul3qCYh+1g==",
       "dev": true,
       "requires": {
         "@fastify/ajv-compiler": "^1.0.0",
@@ -11082,11 +11088,6 @@
         "xregexp": "2.0.0"
       },
       "dependencies": {
-        "isarray": {
-          "version": "0.0.1",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
-          "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
-        },
         "readable-stream": {
           "version": "1.1.14",
           "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
@@ -11478,6 +11479,11 @@
       "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
       "dev": true
     },
+    "isarray": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+      "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+    },
     "isexe": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -11560,14 +11566,14 @@
       }
     },
     "jest": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest/-/jest-27.1.1.tgz",
-      "integrity": "sha512-LFTEZOhoZNR/2DQM3OCaK5xC6c55c1OWhYh0njRsoHX0qd6x4nkcgenkSH0JKjsAGMTmmJAoL7/oqYHMfwhruA==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.0.tgz",
+      "integrity": "sha512-oUqVXyvh5YwEWl263KWdPUAqEzBFzGHdFLQ05hUnITr1tH+9SscEI9A/GH9eBClA+Nw1ct+KNuuOV6wlnmBPcg==",
       "dev": true,
       "requires": {
-        "@jest/core": "^27.1.1",
+        "@jest/core": "^27.2.0",
         "import-local": "^3.0.2",
-        "jest-cli": "^27.1.1"
+        "jest-cli": "^27.2.0"
       }
     },
     "jest-changed-files": {
@@ -11582,27 +11588,27 @@
       }
     },
     "jest-circus": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.1.1.tgz",
-      "integrity": "sha512-Xed1ApiMFu/yzqGMBToHr8sp2gkX/ARZf4nXoGrHJrXrTUdVIWiVYheayfcOaPdQvQEE/uyBLgW7I7YBLIrAXQ==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.0.tgz",
+      "integrity": "sha512-WwENhaZwOARB1nmcboYPSv/PwHBUGRpA4MEgszjr9DLCl97MYw0qZprBwLb7rNzvMwfIvNGG7pefQ5rxyBlzIA==",
       "dev": true,
       "requires": {
-        "@jest/environment": "^27.1.1",
-        "@jest/test-result": "^27.1.1",
+        "@jest/environment": "^27.2.0",
+        "@jest/test-result": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "chalk": "^4.0.0",
         "co": "^4.6.0",
         "dedent": "^0.7.0",
-        "expect": "^27.1.1",
+        "expect": "^27.2.0",
         "is-generator-fn": "^2.0.0",
-        "jest-each": "^27.1.1",
-        "jest-matcher-utils": "^27.1.1",
-        "jest-message-util": "^27.1.1",
-        "jest-runtime": "^27.1.1",
-        "jest-snapshot": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "pretty-format": "^27.1.1",
+        "jest-each": "^27.2.0",
+        "jest-matcher-utils": "^27.2.0",
+        "jest-message-util": "^27.2.0",
+        "jest-runtime": "^27.2.0",
+        "jest-snapshot": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "pretty-format": "^27.2.0",
         "slash": "^3.0.0",
         "stack-utils": "^2.0.3",
         "throat": "^6.0.1"
@@ -11654,21 +11660,21 @@
       }
     },
     "jest-cli": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.1.1.tgz",
-      "integrity": "sha512-LCjfEYp9D3bcOeVUUpEol9Y1ijZYMWVqflSmtw/wX+6Fb7zP4IlO14/6s9v1pxsoM4Pn46+M2zABgKuQjyDpTw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.0.tgz",
+      "integrity": "sha512-bq1X/B/b1kT9y1zIFMEW3GFRX1HEhFybiqKdbxM+j11XMMYSbU9WezfyWIhrSOmPT+iODLATVjfsCnbQs7cfIA==",
       "dev": true,
       "requires": {
-        "@jest/core": "^27.1.1",
-        "@jest/test-result": "^27.1.1",
+        "@jest/core": "^27.2.0",
+        "@jest/test-result": "^27.2.0",
         "@jest/types": "^27.1.1",
         "chalk": "^4.0.0",
         "exit": "^0.1.2",
         "graceful-fs": "^4.2.4",
         "import-local": "^3.0.2",
-        "jest-config": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "jest-validate": "^27.1.1",
+        "jest-config": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "jest-validate": "^27.2.0",
         "prompts": "^2.0.1",
         "yargs": "^16.0.3"
       },
@@ -11719,32 +11725,32 @@
       }
     },
     "jest-config": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.1.1.tgz",
-      "integrity": "sha512-2iSd5zoJV4MsWPcLCGwUVUY/j6pZXm4Qd3rnbCtrd9EHNTg458iHw8PZztPQXfxKBKJxLfBk7tbZqYF8MGtxJA==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.0.tgz",
+      "integrity": "sha512-Z1romHpxeNwLxQtouQ4xt07bY6HSFGKTo0xJcvOK3u6uJHveA4LB2P+ty9ArBLpTh3AqqPxsyw9l9GMnWBYS9A==",
       "dev": true,
       "requires": {
         "@babel/core": "^7.1.0",
-        "@jest/test-sequencer": "^27.1.1",
+        "@jest/test-sequencer": "^27.2.0",
         "@jest/types": "^27.1.1",
-        "babel-jest": "^27.1.1",
+        "babel-jest": "^27.2.0",
         "chalk": "^4.0.0",
         "deepmerge": "^4.2.2",
         "glob": "^7.1.1",
         "graceful-fs": "^4.2.4",
         "is-ci": "^3.0.0",
-        "jest-circus": "^27.1.1",
-        "jest-environment-jsdom": "^27.1.1",
-        "jest-environment-node": "^27.1.1",
+        "jest-circus": "^27.2.0",
+        "jest-environment-jsdom": "^27.2.0",
+        "jest-environment-node": "^27.2.0",
         "jest-get-type": "^27.0.6",
-        "jest-jasmine2": "^27.1.1",
+        "jest-jasmine2": "^27.2.0",
         "jest-regex-util": "^27.0.6",
-        "jest-resolve": "^27.1.1",
-        "jest-runner": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "jest-validate": "^27.1.1",
+        "jest-resolve": "^27.2.0",
+        "jest-runner": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "jest-validate": "^27.2.0",
         "micromatch": "^4.0.4",
-        "pretty-format": "^27.1.1"
+        "pretty-format": "^27.2.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -11793,15 +11799,15 @@
       }
     },
     "jest-diff": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.1.1.tgz",
-      "integrity": "sha512-m/6n5158rqEriTazqHtBpOa2B/gGgXJijX6nsEgZfbJ/3pxQcdpVXBe+FP39b1dxWHyLVVmuVXddmAwtqFO4Lg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.0.tgz",
+      "integrity": "sha512-QSO9WC6btFYWtRJ3Hac0sRrkspf7B01mGrrQEiCW6TobtViJ9RWL0EmOs/WnBsZDsI/Y2IoSHZA2x6offu0sYw==",
       "dev": true,
       "requires": {
         "chalk": "^4.0.0",
         "diff-sequences": "^27.0.6",
         "jest-get-type": "^27.0.6",
-        "pretty-format": "^27.1.1"
+        "pretty-format": "^27.2.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -11859,16 +11865,16 @@
       }
     },
     "jest-each": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.1.1.tgz",
-      "integrity": "sha512-r6hOsTLavUBb1xN0uDa89jdDeBmJ+K49fWpbyxeGRA2pLY46PlC4z551/cWNQzrj+IUa5/gSRsCIV/01HdNPug==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.0.tgz",
+      "integrity": "sha512-biDmmUQjg+HZOB7MfY2RHSFL3j418nMoC3TK3pGAj880fQQSxvQe1y2Wy23JJJNUlk6YXiGU0yWy86Le1HBPmA==",
       "dev": true,
       "requires": {
         "@jest/types": "^27.1.1",
         "chalk": "^4.0.0",
         "jest-get-type": "^27.0.6",
-        "jest-util": "^27.1.1",
-        "pretty-format": "^27.1.1"
+        "jest-util": "^27.2.0",
+        "pretty-format": "^27.2.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -11917,32 +11923,32 @@
       }
     },
     "jest-environment-jsdom": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.1.1.tgz",
-      "integrity": "sha512-6vOnoZ6IaExuw7FvnuJhA1qFYv1DDSnN0sQowzolNwxQp7bG1YhLxj2YU1sVXAYA3IR3MbH2mbnJUsLUWfyfzw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.0.tgz",
+      "integrity": "sha512-wNQJi6Rd/AkUWqTc4gWhuTIFPo7tlMK0RPZXeM6AqRHZA3D3vwvTa9ktAktyVyWYmUoXdYstOfyYMG3w4jt7eA==",
       "dev": true,
       "requires": {
-        "@jest/environment": "^27.1.1",
-        "@jest/fake-timers": "^27.1.1",
+        "@jest/environment": "^27.2.0",
+        "@jest/fake-timers": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "jest-mock": "^27.1.1",
-        "jest-util": "^27.1.1",
+        "jest-util": "^27.2.0",
         "jsdom": "^16.6.0"
       }
     },
     "jest-environment-node": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.1.1.tgz",
-      "integrity": "sha512-OEGeZh0PwzngNIYWYgWrvTcLygopV8OJbC9HNb0j70VBKgEIsdZkYhwcFnaURX83OHACMqf1pa9Tv5Pw5jemrg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.0.tgz",
+      "integrity": "sha512-WbW+vdM4u88iy6Q3ftUEQOSgMPtSgjm3qixYYK2AKEuqmFO2zmACTw1vFUB0qI/QN88X6hA6ZkVKIdIWWzz+yg==",
       "dev": true,
       "requires": {
-        "@jest/environment": "^27.1.1",
-        "@jest/fake-timers": "^27.1.1",
+        "@jest/environment": "^27.2.0",
+        "@jest/fake-timers": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "jest-mock": "^27.1.1",
-        "jest-util": "^27.1.1"
+        "jest-util": "^27.2.0"
       }
     },
     "jest-get-type": {
@@ -11952,9 +11958,9 @@
       "dev": true
     },
     "jest-haste-map": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.1.1.tgz",
-      "integrity": "sha512-NGLYVAdh5C8Ezg5QBFzrNeYsfxptDBPlhvZNaicLiZX77F/rS27a9M6u9ripWAaaD54xnWdZNZpEkdjD5Eo5aQ==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.0.tgz",
+      "integrity": "sha512-laFet7QkNlWjwZtMGHCucLvF8o9PAh2cgePRck1+uadSM4E4XH9J4gnx4do+a6do8ZV5XHNEAXEkIoNg5XUH2Q==",
       "dev": true,
       "requires": {
         "@jest/types": "^27.1.1",
@@ -11966,8 +11972,8 @@
         "graceful-fs": "^4.2.4",
         "jest-regex-util": "^27.0.6",
         "jest-serializer": "^27.0.6",
-        "jest-util": "^27.1.1",
-        "jest-worker": "^27.1.1",
+        "jest-util": "^27.2.0",
+        "jest-worker": "^27.2.0",
         "micromatch": "^4.0.4",
         "walker": "^1.0.7"
       }
@@ -11979,28 +11985,28 @@
       "dev": true
     },
     "jest-jasmine2": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.1.1.tgz",
-      "integrity": "sha512-0LAzUmcmvQwjIdJt0cXUVX4G5qjVXE8ELt6nbMNDzv2yAs2hYCCUtQq+Eje70GwAysWCGcS64QeYj5VPHYVxPg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.0.tgz",
+      "integrity": "sha512-NcPzZBk6IkDW3Z2V8orGueheGJJYfT5P0zI/vTO/Jp+R9KluUdgFrgwfvZ0A34Kw6HKgiWFILZmh3oQ/eS+UxA==",
       "dev": true,
       "requires": {
         "@babel/traverse": "^7.1.0",
-        "@jest/environment": "^27.1.1",
+        "@jest/environment": "^27.2.0",
         "@jest/source-map": "^27.0.6",
-        "@jest/test-result": "^27.1.1",
+        "@jest/test-result": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "chalk": "^4.0.0",
         "co": "^4.6.0",
-        "expect": "^27.1.1",
+        "expect": "^27.2.0",
         "is-generator-fn": "^2.0.0",
-        "jest-each": "^27.1.1",
-        "jest-matcher-utils": "^27.1.1",
-        "jest-message-util": "^27.1.1",
-        "jest-runtime": "^27.1.1",
-        "jest-snapshot": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "pretty-format": "^27.1.1",
+        "jest-each": "^27.2.0",
+        "jest-matcher-utils": "^27.2.0",
+        "jest-message-util": "^27.2.0",
+        "jest-runtime": "^27.2.0",
+        "jest-snapshot": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "pretty-format": "^27.2.0",
         "throat": "^6.0.1"
       },
       "dependencies": {
@@ -12050,25 +12056,25 @@
       }
     },
     "jest-leak-detector": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.1.1.tgz",
-      "integrity": "sha512-gwSgzmqShoeEsEVpgObymQPrM9P6557jt1EsFW5aCeJ46Cme0EdjYU7xr6llQZ5GpWDl56eOstUaPXiZOfiTKw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.0.tgz",
+      "integrity": "sha512-e91BIEmbZw5+MHkB4Hnrq7S86coTxUMCkz4n7DLmQYvl9pEKmRx9H/JFH87bBqbIU5B2Ju1soKxRWX6/eGFGpA==",
       "dev": true,
       "requires": {
         "jest-get-type": "^27.0.6",
-        "pretty-format": "^27.1.1"
+        "pretty-format": "^27.2.0"
       }
     },
     "jest-matcher-utils": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.1.1.tgz",
-      "integrity": "sha512-Q1a10w9Y4sh0wegkdP6reQOa/Dtz7nAvDqBgrat1ItZAUvk4jzXAqyhXPu/ZuEtDaXaNKpdRPRQA8bvkOh2Eaw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.0.tgz",
+      "integrity": "sha512-F+LG3iTwJ0gPjxBX6HCyrARFXq6jjiqhwBQeskkJQgSLeF1j6ui1RTV08SR7O51XTUhtc8zqpDj8iCG4RGmdKw==",
       "dev": true,
       "requires": {
         "chalk": "^4.0.0",
-        "jest-diff": "^27.1.1",
+        "jest-diff": "^27.2.0",
         "jest-get-type": "^27.0.6",
-        "pretty-format": "^27.1.1"
+        "pretty-format": "^27.2.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -12117,9 +12123,9 @@
       }
     },
     "jest-message-util": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.1.1.tgz",
-      "integrity": "sha512-b697BOJV93+AVGvzLRtVZ0cTVRbd59OaWnbB2D75GRaIMc4I+Z9W0wHxbfjW01JWO+TqqW4yevT0aN7Fd0XWng==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.0.tgz",
+      "integrity": "sha512-y+sfT/94CiP8rKXgwCOzO1mUazIEdEhrLjuiu+RKmCP+8O/TJTSne9dqQRbFIHBtlR2+q7cddJlWGir8UATu5w==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.12.13",
@@ -12128,7 +12134,7 @@
         "chalk": "^4.0.0",
         "graceful-fs": "^4.2.4",
         "micromatch": "^4.0.4",
-        "pretty-format": "^27.1.1",
+        "pretty-format": "^27.2.0",
         "slash": "^3.0.0",
         "stack-utils": "^2.0.3"
       },
@@ -12202,19 +12208,19 @@
       "dev": true
     },
     "jest-resolve": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.1.1.tgz",
-      "integrity": "sha512-M41YFmWhvDVstwe7XuV21zynOiBLJB5Sk0GrIsYYgTkjfEWNLVXDjAyq1W7PHseaYNOxIc0nOGq/r5iwcZNC1A==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.0.tgz",
+      "integrity": "sha512-v09p9Ib/VtpHM6Cz+i9lEAv1Z/M5NVxsyghRHRMEUOqwPQs3zwTdwp1xS3O/k5LocjKiGS0OTaJoBSpjbM2Jlw==",
       "dev": true,
       "requires": {
         "@jest/types": "^27.1.1",
         "chalk": "^4.0.0",
         "escalade": "^3.1.1",
         "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.1.1",
+        "jest-haste-map": "^27.2.0",
         "jest-pnp-resolver": "^1.2.2",
-        "jest-util": "^27.1.1",
-        "jest-validate": "^27.1.1",
+        "jest-util": "^27.2.0",
+        "jest-validate": "^27.2.0",
         "resolve": "^1.20.0",
         "slash": "^3.0.0"
       },
@@ -12265,26 +12271,26 @@
       }
     },
     "jest-resolve-dependencies": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.1.1.tgz",
-      "integrity": "sha512-sYZR+uBjFDCo4VhYeazZf/T+ryYItvdLKu9vHatqkUqHGjDMrdEPOykiqC2iEpaCFTS+3iL/21CYiJuKdRbniw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.0.tgz",
+      "integrity": "sha512-EY5jc/Y0oxn+oVEEldTidmmdVoZaknKPyDORA012JUdqPyqPL+lNdRyI3pGti0RCydds6coaw6xt4JQY54dKsg==",
       "dev": true,
       "requires": {
         "@jest/types": "^27.1.1",
         "jest-regex-util": "^27.0.6",
-        "jest-snapshot": "^27.1.1"
+        "jest-snapshot": "^27.2.0"
       }
     },
     "jest-runner": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.1.1.tgz",
-      "integrity": "sha512-lP3MBNQhg75/sQtVkC8dsAQZumvy3lHK/YIwYPfEyqGIX1qEcnYIRxP89q0ZgC5ngvi1vN2P5UFHszQxguWdng==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.0.tgz",
+      "integrity": "sha512-Cl+BHpduIc0cIVTjwoyx0pQk4Br8gn+wkr35PmKCmzEdOUnQ2wN7QVXA8vXnMQXSlFkN/+KWnk20TAVBmhgrww==",
       "dev": true,
       "requires": {
-        "@jest/console": "^27.1.1",
-        "@jest/environment": "^27.1.1",
-        "@jest/test-result": "^27.1.1",
-        "@jest/transform": "^27.1.1",
+        "@jest/console": "^27.2.0",
+        "@jest/environment": "^27.2.0",
+        "@jest/test-result": "^27.2.0",
+        "@jest/transform": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "chalk": "^4.0.0",
@@ -12292,15 +12298,15 @@
         "exit": "^0.1.2",
         "graceful-fs": "^4.2.4",
         "jest-docblock": "^27.0.6",
-        "jest-environment-jsdom": "^27.1.1",
-        "jest-environment-node": "^27.1.1",
-        "jest-haste-map": "^27.1.1",
-        "jest-leak-detector": "^27.1.1",
-        "jest-message-util": "^27.1.1",
-        "jest-resolve": "^27.1.1",
-        "jest-runtime": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "jest-worker": "^27.1.1",
+        "jest-environment-jsdom": "^27.2.0",
+        "jest-environment-node": "^27.2.0",
+        "jest-haste-map": "^27.2.0",
+        "jest-leak-detector": "^27.2.0",
+        "jest-message-util": "^27.2.0",
+        "jest-resolve": "^27.2.0",
+        "jest-runtime": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "jest-worker": "^27.2.0",
         "source-map-support": "^0.5.6",
         "throat": "^6.0.1"
       },
@@ -12351,18 +12357,18 @@
       }
     },
     "jest-runtime": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.1.1.tgz",
-      "integrity": "sha512-FEwy+tSzmsvuKaQpyYsUyk31KG5vMmA2r2BSTHgv0yNfcooQdm2Ke91LM9Ud8D3xz8CLDHJWAI24haMFTwrsPg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.0.tgz",
+      "integrity": "sha512-6gRE9AVVX49hgBbWQ9PcNDeM4upMUXzTpBs0kmbrjyotyUyIJixLPsYjpeTFwAA07PVLDei1iAm2chmWycdGdQ==",
       "dev": true,
       "requires": {
-        "@jest/console": "^27.1.1",
-        "@jest/environment": "^27.1.1",
-        "@jest/fake-timers": "^27.1.1",
-        "@jest/globals": "^27.1.1",
+        "@jest/console": "^27.2.0",
+        "@jest/environment": "^27.2.0",
+        "@jest/fake-timers": "^27.2.0",
+        "@jest/globals": "^27.2.0",
         "@jest/source-map": "^27.0.6",
-        "@jest/test-result": "^27.1.1",
-        "@jest/transform": "^27.1.1",
+        "@jest/test-result": "^27.2.0",
+        "@jest/transform": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/yargs": "^16.0.0",
         "chalk": "^4.0.0",
@@ -12372,14 +12378,14 @@
         "exit": "^0.1.2",
         "glob": "^7.1.3",
         "graceful-fs": "^4.2.4",
-        "jest-haste-map": "^27.1.1",
-        "jest-message-util": "^27.1.1",
+        "jest-haste-map": "^27.2.0",
+        "jest-message-util": "^27.2.0",
         "jest-mock": "^27.1.1",
         "jest-regex-util": "^27.0.6",
-        "jest-resolve": "^27.1.1",
-        "jest-snapshot": "^27.1.1",
-        "jest-util": "^27.1.1",
-        "jest-validate": "^27.1.1",
+        "jest-resolve": "^27.2.0",
+        "jest-snapshot": "^27.2.0",
+        "jest-util": "^27.2.0",
+        "jest-validate": "^27.2.0",
         "slash": "^3.0.0",
         "strip-bom": "^4.0.0",
         "yargs": "^16.0.3"
@@ -12441,9 +12447,9 @@
       }
     },
     "jest-snapshot": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.1.1.tgz",
-      "integrity": "sha512-Wi3QGiuRFo3lU+EbQmZnBOks0CJyAMPHvYoG7iJk00Do10jeOyuOEO0Jfoaoun8+8TDv+Nzl7Aswir/IK9+1jg==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.0.tgz",
+      "integrity": "sha512-MukJvy3KEqemCT2FoT3Gum37CQqso/62PKTfIzWmZVTsLsuyxQmJd2PI5KPcBYFqLlA8LgZLHM8ZlazkVt8LsQ==",
       "dev": true,
       "requires": {
         "@babel/core": "^7.7.2",
@@ -12452,23 +12458,23 @@
         "@babel/plugin-syntax-typescript": "^7.7.2",
         "@babel/traverse": "^7.7.2",
         "@babel/types": "^7.0.0",
-        "@jest/transform": "^27.1.1",
+        "@jest/transform": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/babel__traverse": "^7.0.4",
         "@types/prettier": "^2.1.5",
         "babel-preset-current-node-syntax": "^1.0.0",
         "chalk": "^4.0.0",
-        "expect": "^27.1.1",
+        "expect": "^27.2.0",
         "graceful-fs": "^4.2.4",
-        "jest-diff": "^27.1.1",
+        "jest-diff": "^27.2.0",
         "jest-get-type": "^27.0.6",
-        "jest-haste-map": "^27.1.1",
-        "jest-matcher-utils": "^27.1.1",
-        "jest-message-util": "^27.1.1",
-        "jest-resolve": "^27.1.1",
-        "jest-util": "^27.1.1",
+        "jest-haste-map": "^27.2.0",
+        "jest-matcher-utils": "^27.2.0",
+        "jest-message-util": "^27.2.0",
+        "jest-resolve": "^27.2.0",
+        "jest-util": "^27.2.0",
         "natural-compare": "^1.4.0",
-        "pretty-format": "^27.1.1",
+        "pretty-format": "^27.2.0",
         "semver": "^7.3.2"
       },
       "dependencies": {
@@ -12518,9 +12524,9 @@
       }
     },
     "jest-util": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.1.1.tgz",
-      "integrity": "sha512-zf9nEbrASWn2mC/L91nNb0K+GkhFvi4MP6XJG2HqnHzHvLYcs7ou/In68xYU1i1dSkJlrWcYfWXQE8nVR+nbOA==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.0.tgz",
+      "integrity": "sha512-T5ZJCNeFpqcLBpx+Hl9r9KoxBCUqeWlJ1Htli+vryigZVJ1vuLB9j35grEBASp4R13KFkV7jM52bBGnArpJN6A==",
       "dev": true,
       "requires": {
         "@jest/types": "^27.1.1",
@@ -12577,9 +12583,9 @@
       }
     },
     "jest-validate": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.1.1.tgz",
-      "integrity": "sha512-N5Er5FKav/8m2dJwn7BGnZwnoD1BSc8jx5T+diG2OvyeugvZDhPeAt5DrNaGkkaKCrSUvuE7A5E4uHyT7Vj0Mw==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.0.tgz",
+      "integrity": "sha512-uIEZGkFKk3+4liA81Xu0maG5aGDyPLdp+4ed244c+Ql0k3aLWQYcMbaMLXOIFcb83LPHzYzqQ8hwNnIxTqfAGQ==",
       "dev": true,
       "requires": {
         "@jest/types": "^27.1.1",
@@ -12587,7 +12593,7 @@
         "chalk": "^4.0.0",
         "jest-get-type": "^27.0.6",
         "leven": "^3.1.0",
-        "pretty-format": "^27.1.1"
+        "pretty-format": "^27.2.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -12642,17 +12648,17 @@
       }
     },
     "jest-watcher": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.1.1.tgz",
-      "integrity": "sha512-XQzyHbxziDe+lZM6Dzs40fEt4q9akOGwitJnxQasJ9WG0bv3JGiRlsBgjw13znGapeMtFaEsyhL0Cl04IbaoWQ==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.0.tgz",
+      "integrity": "sha512-SjRWhnr+qO8aBsrcnYIyF+qRxNZk6MZH8TIDgvi+VlsyrvOyqg0d+Rm/v9KHiTtC9mGGeFi9BFqgavyWib6xLg==",
       "dev": true,
       "requires": {
-        "@jest/test-result": "^27.1.1",
+        "@jest/test-result": "^27.2.0",
         "@jest/types": "^27.1.1",
         "@types/node": "*",
         "ansi-escapes": "^4.2.1",
         "chalk": "^4.0.0",
-        "jest-util": "^27.1.1",
+        "jest-util": "^27.2.0",
         "string-length": "^4.0.1"
       },
       "dependencies": {
@@ -12702,9 +12708,9 @@
       }
     },
     "jest-worker": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.1.1.tgz",
-      "integrity": "sha512-XJKCL7tu+362IUYTWvw8+3S75U7qMiYiRU6u5yqscB48bTvzwN6i8L/7wVTXiFLwkRsxARNM7TISnTvcgv9hxA==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.0.tgz",
+      "integrity": "sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA==",
       "dev": true,
       "requires": {
         "@types/node": "*",
@@ -12870,12 +12876,12 @@
       }
     },
     "libhoney": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/libhoney/-/libhoney-2.3.2.tgz",
-      "integrity": "sha512-GH/RUiiBQJykBzzMc7KZF3u+uAMkkTEkFBjfcHErnGl+SZ0vmRH3a4QNt5138BPVoYTvCAjncjIQWz3YUOUWRA==",
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/libhoney/-/libhoney-2.3.3.tgz",
+      "integrity": "sha512-WfujgzJjIxN4ZwRwX7iO1LFvzB9x+M7MGEN+FsPrCjTti+cA3CMYR400ElqRO84/ZwEphjiJrO+yqvVceu4N6Q==",
       "requires": {
         "superagent": "^6.1.0",
-        "superagent-proxy": "^2.0.0",
+        "superagent-proxy": "^3.0.0",
         "urljoin": "^0.1.5"
       }
     },
@@ -13279,9 +13285,9 @@
       "dev": true
     },
     "netmask": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz",
-      "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU="
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
+      "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="
     },
     "node-int64": {
       "version": "0.4.0",
@@ -13425,9 +13431,9 @@
       "dev": true
     },
     "pac-proxy-agent": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-4.1.0.tgz",
-      "integrity": "sha512-ejNgYm2HTXSIYX9eFlkvqFp8hyJ374uDf0Zq5YUAifiSh1D6fo+iBivQZirGvVv8dCYUsLhmLBRhlAYvBKI5+Q==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz",
+      "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==",
       "requires": {
         "@tootallnate/once": "1",
         "agent-base": "6",
@@ -13435,19 +13441,19 @@
         "get-uri": "3",
         "http-proxy-agent": "^4.0.1",
         "https-proxy-agent": "5",
-        "pac-resolver": "^4.1.0",
+        "pac-resolver": "^5.0.0",
         "raw-body": "^2.2.0",
         "socks-proxy-agent": "5"
       }
     },
     "pac-resolver": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-4.1.0.tgz",
-      "integrity": "sha512-d6lf2IrZJJ7ooVHr7BfwSjRO1yKSJMaiiWYSHcrxSIUtZrCa4KKGwcztdkZ/E9LFleJfjoi1yl+XLR7AX24nbQ==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.0.tgz",
+      "integrity": "sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==",
       "requires": {
-        "degenerator": "^2.2.0",
+        "degenerator": "^3.0.1",
         "ip": "^1.1.5",
-        "netmask": "^1.0.6"
+        "netmask": "^2.0.1"
       }
     },
     "packet-reader": {
@@ -13689,15 +13695,15 @@
       "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
     },
     "prettier": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.0.tgz",
-      "integrity": "sha512-DsEPLY1dE5HF3BxCRBmD4uYZ+5DCbvatnolqTqcxEgKVZnL2kUfyu7b8pPQ5+hTBkdhU9SLUmK0/pHb07RE4WQ==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz",
+      "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==",
       "dev": true
     },
     "pretty-format": {
-      "version": "27.1.1",
-      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.1.1.tgz",
-      "integrity": "sha512-zdBi/xlstKJL42UH7goQti5Hip/B415w1Mfj+WWWYMBylAYtKESnXGUtVVcMVid9ReVjypCotUV6CEevYPHv2g==",
+      "version": "27.2.0",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.0.tgz",
+      "integrity": "sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA==",
       "dev": true,
       "requires": {
         "@jest/types": "^27.1.1",
@@ -13741,16 +13747,16 @@
       }
     },
     "proxy-agent": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-4.0.1.tgz",
-      "integrity": "sha512-ODnQnW2jc/FUVwHHuaZEfN5otg/fMbvMxz9nMSUQfJ9JU7q2SZvSULSsjLloVgJOiv9yhc8GlNMKc4GkFmcVEA==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz",
+      "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==",
       "requires": {
         "agent-base": "^6.0.0",
         "debug": "4",
         "http-proxy-agent": "^4.0.0",
         "https-proxy-agent": "^5.0.0",
         "lru-cache": "^5.1.1",
-        "pac-proxy-agent": "^4.1.0",
+        "pac-proxy-agent": "^5.0.0",
         "proxy-from-env": "^1.0.0",
         "socks-proxy-agent": "^5.0.0"
       }
@@ -14189,25 +14195,25 @@
       }
     },
     "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=="
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+      "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
     },
     "socks": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.0.tgz",
-      "integrity": "sha512-mNmr9owlinMplev0Wd7UHFlqI4ofnBnNzFuzrm63PPaHgbkqCFe4T5LzwKmtQ/f2tX0NTpcdVLyD/FHxFBstYw==",
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz",
+      "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==",
       "requires": {
         "ip": "^1.1.5",
         "smart-buffer": "^4.1.0"
       }
     },
     "socks-proxy-agent": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz",
-      "integrity": "sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA==",
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==",
       "requires": {
-        "agent-base": "6",
+        "agent-base": "^6.0.2",
         "debug": "4",
         "socks": "^2.3.3"
       }
@@ -14254,9 +14260,9 @@
       "dev": true
     },
     "stack-utils": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz",
-      "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==",
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz",
+      "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==",
       "dev": true,
       "requires": {
         "escape-string-regexp": "^2.0.0"
@@ -14387,27 +14393,12 @@
       }
     },
     "superagent-proxy": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/superagent-proxy/-/superagent-proxy-2.1.0.tgz",
-      "integrity": "sha512-DnarpKN6Xn8e3pYlFV4Yvsj9yxLY4q5FIsUe5JvN7vjzP+YCfzXv03dTkZSD2yzrSadsNYHf0IgOUJwKjX457A==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/superagent-proxy/-/superagent-proxy-3.0.0.tgz",
+      "integrity": "sha512-wAlRInOeDFyd9pyonrkJspdRAxdLrcsZ6aSnS+8+nu4x1aXbz6FWSTT9M6Ibze+eG60szlL7JA8wEIV7bPWuyQ==",
       "requires": {
-        "debug": "^3.1.0",
-        "proxy-agent": "^4.0.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "3.2.7",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
-          "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.3",
-          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
-          "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
-        }
+        "debug": "^4.3.2",
+        "proxy-agent": "^5.0.0"
       }
     },
     "supertest": {
@@ -14728,6 +14719,11 @@
       "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
       "dev": true
     },
+    "vm2": {
+      "version": "3.9.3",
+      "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.3.tgz",
+      "integrity": "sha512-smLS+18RjXYMl9joyJxMNI9l4w7biW8ilSDaVRvFBDwOH8P0BK1ognFQTpg0wyQ6wIKLTblHJvROW692L/E53Q=="
+    },
     "w3c-hr-time": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",


Test patch:
diff --git a/lib/api/index.test.js b/lib/api/index.test.js
index b7d4e0f..b4f4b2a 100644
--- a/lib/api/index.test.js
+++ b/lib/api/index.test.js
@@ -648,6 +648,76 @@ test("async spans share custom context", () => {
   expect(asyncData["app.custom"]).toBe("value");
 });
 
+test("addContext works on the current span", () => {
+  const honey = api._apiForTesting().honey;
+
+  let parentSpan = api.startTrace({ name: "parent" });
+  api.addContext({ field: "a" });
+
+  let childSpan = api.startSpan({ name: "child" });
+  api.addContext({ field: "b" });
+
+  let grandchildSpan = api.startSpan({ name: "grandchild" });
+  api.addContext({ field: "c" });
+
+  api.finishSpan(grandchildSpan);
+  api.finishSpan(childSpan);
+  api.finishTrace(parentSpan);
+
+  expect(honey.transmission.events.length).toBe(3);
+
+  let parentEvent = honey.transmission.events[2].postData;
+  let childEvent = honey.transmission.events[1].postData;
+  let grandchildEvent = honey.transmission.events[0].postData;
+
+  expect(parentEvent["name"]).toBe("parent");
+  expect(childEvent["name"]).toBe("child");
+  expect(grandchildEvent["name"]).toBe("grandchild");
+
+  expect(parentEvent["field"]).toBe("a");
+  expect(childEvent["field"]).toBe("b");
+  expect(grandchildEvent["field"]).toBe("c");
+});
+
+test("removeContext works on the current span", () => {
+  const honey = api._apiForTesting().honey;
+
+  let parentSpan = api.startTrace({ name: "parent" });
+  api.addContext({ a: 1, b: 2 });
+  api.removeContext("b");
+
+  let childSpan = api.startSpan({ name: "child" });
+  api.addContext({ b: 2, c: 3 });
+  api.removeContext("c");
+
+  let grandchildSpan = api.startSpan({ name: "grandchild" });
+  api.addContext({ c: 3, d: 4 });
+  api.removeContext("d");
+
+  api.finishSpan(grandchildSpan);
+  api.finishSpan(childSpan);
+  api.finishTrace(parentSpan);
+
+  expect(honey.transmission.events.length).toBe(3);
+
+  let parentEvent = honey.transmission.events[2].postData;
+  let childEvent = honey.transmission.events[1].postData;
+  let grandchildEvent = honey.transmission.events[0].postData;
+
+  expect(parentEvent["name"]).toBe("parent");
+  expect(childEvent["name"]).toBe("child");
+  expect(grandchildEvent["name"]).toBe("grandchild");
+
+  expect(parentEvent["a"]).toBe(1);
+  expect(parentEvent["b"]).toBeUndefined();
+
+  expect(childEvent["b"]).toBe(2);
+  expect(childEvent["c"]).toBeUndefined();
+
+  expect(grandchildEvent["c"]).toBe(3);
+  expect(grandchildEvent["d"]).toBeUndefined();
+});
+
 describe("presend hook", () => {
   it("calls the presend hook function if provided", () => {
     const mockPresendHook = jest.fn();