chore(deps): yarn cache changes
diff --git a/.pnp.js b/.pnp.js
index e690741..760087f 100755
--- a/.pnp.js
+++ b/.pnp.js
@@ -42,18 +42,13 @@
         [null, {
           "packageLocation": "./",
           "packageDependencies": [
-            ["@antora/asciidoc-loader", "npm:3.0.0-alpha.1"],
-            ["@antora/cli", "npm:3.0.0-alpha.1"],
-            ["@antora/content-aggregator", "npm:3.0.0-alpha.1"],
-            ["@antora/content-classifier", "npm:3.0.0-alpha.1"],
-            ["@antora/document-converter", "npm:3.0.0-alpha.1"],
-            ["@antora/playbook-builder", "npm:3.0.0-alpha.1"],
-            ["@antora/site-generator-default", "npm:3.0.0-alpha.1"],
-            ["@antora/site-mapper", "npm:3.0.0-alpha.1"],
-            ["@antora/xref-validator", "https://gitlab.com/antora/xref-validator.git#commit=19bfaf88fc7dd39552cfd8b3ac41c55d6d8f9edd"],
+            ["@antora/cli", "npm:3.0.0-alpha.9"],
+            ["@antora/playbook-builder", "npm:3.0.0-alpha.9"],
+            ["@antora/site-generator-default", "npm:3.0.0-alpha.9"],
+            ["@antora/site-mapper", "npm:3.0.0-alpha.9"],
             ["@deadlinks/cargo-deadlinks", "github-release:deadlinks/cargo-deadlinks:0.8.0/deadlinks-linux"],
             ["@djencks/asciidoctor-antora-indexer", "npm:0.0.6"],
-            ["@djencks/asciidoctor-jsonpath", "npm:0.0.1"],
+            ["@djencks/asciidoctor-jsonpath", "npm:0.0.4"],
             ["@oclif/errors", "npm:1.3.4"],
             ["antora-ui-camel", "workspace:antora-ui-camel"],
             ["del", "npm:6.0.0"],
@@ -66,6 +61,7 @@
             ["netlify-cli", "npm:2.69.11"],
             ["npm-run-all", "npm:4.1.5"],
             ["opal-runtime", "npm:1.0.11"],
+            ["pino-pretty", "npm:5.1.3"],
             ["toml", "npm:3.0.0"]
           ],
           "linkType": "SOFT",
@@ -221,42 +217,49 @@
         }]
       ]],
       ["@antora/asciidoc-loader", [
-        ["npm:3.0.0-alpha.1", {
-          "packageLocation": "./.yarn/cache/@antora-asciidoc-loader-npm-3.0.0-alpha.1-702afd7c51-6aac46da81.zip/node_modules/@antora/asciidoc-loader/",
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-asciidoc-loader-npm-3.0.0-alpha.9-39bd100709-de20a2db05.zip/node_modules/@antora/asciidoc-loader/",
           "packageDependencies": [
-            ["@antora/asciidoc-loader", "npm:3.0.0-alpha.1"],
-            ["asciidoctor.js", "npm:1.5.9"],
-            ["opal-runtime", "npm:1.0.11"]
+            ["@antora/asciidoc-loader", "npm:3.0.0-alpha.9"],
+            ["@antora/logger", "npm:3.0.0-alpha.9"],
+            ["@antora/user-require-helper", "npm:2.0.0"],
+            ["@asciidoctor/core", "npm:2.2.5"]
           ],
           "linkType": "HARD",
         }]
       ]],
       ["@antora/cli", [
-        ["npm:3.0.0-alpha.1", {
-          "packageLocation": "./.yarn/cache/@antora-cli-npm-3.0.0-alpha.1-1c0aa456f2-ebb9731dae.zip/node_modules/@antora/cli/",
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-cli-npm-3.0.0-alpha.9-eb1976c89e-20efdb6945.zip/node_modules/@antora/cli/",
           "packageDependencies": [
-            ["@antora/cli", "npm:3.0.0-alpha.1"],
-            ["@antora/playbook-builder", "npm:3.0.0-alpha.1"],
-            ["commander", "npm:6.1.0"]
+            ["@antora/cli", "npm:3.0.0-alpha.9"],
+            ["@antora/logger", "npm:3.0.0-alpha.9"],
+            ["@antora/playbook-builder", "npm:3.0.0-alpha.9"],
+            ["@antora/user-require-helper", "npm:2.0.0"],
+            ["commander", "npm:7.2.0"]
           ],
           "linkType": "HARD",
         }]
       ]],
       ["@antora/content-aggregator", [
-        ["npm:3.0.0-alpha.1", {
-          "packageLocation": "./.yarn/cache/@antora-content-aggregator-npm-3.0.0-alpha.1-d9804fca38-b056cafcc6.zip/node_modules/@antora/content-aggregator/",
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-content-aggregator-npm-3.0.0-alpha.9-8208cc5339-df0c07c16e.zip/node_modules/@antora/content-aggregator/",
           "packageDependencies": [
-            ["@antora/content-aggregator", "npm:3.0.0-alpha.1"],
-            ["@antora/expand-path-helper", "npm:1.0.0"],
+            ["@antora/content-aggregator", "npm:3.0.0-alpha.9"],
+            ["@antora/expand-path-helper", "npm:2.0.0"],
+            ["@antora/user-require-helper", "npm:2.0.0"],
             ["braces", "npm:3.0.2"],
             ["cache-directory", "npm:2.0.0"],
             ["camelcase-keys", "npm:6.2.2"],
-            ["isomorphic-git", "npm:0.78.5"],
-            ["js-yaml", "npm:3.14.1"],
-            ["matcher", "npm:3.0.0"],
-            ["multi-progress", "virtual:d9804fca38c6eb61f2670eba60dde34bcc14c9905dd84a6c9318d503fc014df2902ea7b0a8327aa05f2d1d503d7c3d39641949eb2937531eaa53bf18299218a2#npm:3.0.0"],
-            ["picomatch", "npm:2.2.2"],
+            ["hpagent", "npm:0.1.2"],
+            ["isomorphic-git", "npm:1.10.0"],
+            ["js-yaml", "npm:4.1.0"],
+            ["matcher", "npm:4.0.0"],
+            ["multi-progress", "virtual:8208cc5339f9a0ffc27ea8fa80bc139486e6d7181d99b6c1493d25383a9773fb79da66cac253dbfb96f458350734cca67ab8dc91536898f447ca1c73f68728bf#npm:4.0.0"],
+            ["picomatch", "npm:2.3.0"],
             ["progress", "npm:2.0.3"],
+            ["should-proxy", "npm:1.0.4"],
+            ["simple-get", "npm:4.0.0"],
             ["vinyl", "npm:2.2.1"],
             ["vinyl-fs", "npm:3.0.3"]
           ],
@@ -264,10 +267,11 @@
         }]
       ]],
       ["@antora/content-classifier", [
-        ["npm:3.0.0-alpha.1", {
-          "packageLocation": "./.yarn/cache/@antora-content-classifier-npm-3.0.0-alpha.1-8a759f4f7f-616d47e236.zip/node_modules/@antora/content-classifier/",
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-content-classifier-npm-3.0.0-alpha.9-9693505f14-f7c0f636c1.zip/node_modules/@antora/content-classifier/",
           "packageDependencies": [
-            ["@antora/content-classifier", "npm:3.0.0-alpha.1"],
+            ["@antora/content-classifier", "npm:3.0.0-alpha.9"],
+            ["@antora/logger", "npm:3.0.0-alpha.9"],
             ["mime-types", "npm:2.1.26"],
             ["vinyl", "npm:2.2.1"]
           ],
@@ -275,39 +279,53 @@
         }]
       ]],
       ["@antora/document-converter", [
-        ["npm:3.0.0-alpha.1", {
-          "packageLocation": "./.yarn/cache/@antora-document-converter-npm-3.0.0-alpha.1-21f2880495-7242e9f581.zip/node_modules/@antora/document-converter/",
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-document-converter-npm-3.0.0-alpha.9-d095751a33-f3d24466e4.zip/node_modules/@antora/document-converter/",
           "packageDependencies": [
-            ["@antora/document-converter", "npm:3.0.0-alpha.1"],
-            ["@antora/asciidoc-loader", "npm:3.0.0-alpha.1"]
+            ["@antora/document-converter", "npm:3.0.0-alpha.9"],
+            ["@antora/asciidoc-loader", "npm:3.0.0-alpha.9"]
           ],
           "linkType": "HARD",
         }]
       ]],
       ["@antora/expand-path-helper", [
-        ["npm:1.0.0", {
-          "packageLocation": "./.yarn/cache/@antora-expand-path-helper-npm-1.0.0-e5108ac24e-7d6aea07f4.zip/node_modules/@antora/expand-path-helper/",
+        ["npm:2.0.0", {
+          "packageLocation": "./.yarn/cache/@antora-expand-path-helper-npm-2.0.0-6eb9f548f1-c1b6ef89e6.zip/node_modules/@antora/expand-path-helper/",
           "packageDependencies": [
-            ["@antora/expand-path-helper", "npm:1.0.0"]
+            ["@antora/expand-path-helper", "npm:2.0.0"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
+      ["@antora/logger", [
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-logger-npm-3.0.0-alpha.9-9aa78cf144-f14b81190a.zip/node_modules/@antora/logger/",
+          "packageDependencies": [
+            ["@antora/logger", "npm:3.0.0-alpha.9"],
+            ["@antora/expand-path-helper", "npm:2.0.0"],
+            ["pino", "npm:6.13.2"],
+            ["pino-pretty", "npm:6.0.0"],
+            ["sonic-boom", "npm:2.1.0"]
           ],
           "linkType": "HARD",
         }]
       ]],
       ["@antora/navigation-builder", [
-        ["npm:3.0.0-alpha.1", {
-          "packageLocation": "./.yarn/cache/@antora-navigation-builder-npm-3.0.0-alpha.1-eddb0496a5-5bcfd7cb42.zip/node_modules/@antora/navigation-builder/",
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-navigation-builder-npm-3.0.0-alpha.9-b1ce47f034-6650ee0f07.zip/node_modules/@antora/navigation-builder/",
           "packageDependencies": [
-            ["@antora/navigation-builder", "npm:3.0.0-alpha.1"],
-            ["@antora/asciidoc-loader", "npm:3.0.0-alpha.1"]
+            ["@antora/navigation-builder", "npm:3.0.0-alpha.9"],
+            ["@antora/asciidoc-loader", "npm:3.0.0-alpha.9"]
           ],
           "linkType": "HARD",
         }]
       ]],
       ["@antora/page-composer", [
-        ["npm:3.0.0-alpha.1", {
-          "packageLocation": "./.yarn/cache/@antora-page-composer-npm-3.0.0-alpha.1-afa9f00b81-0ce1453252.zip/node_modules/@antora/page-composer/",
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-page-composer-npm-3.0.0-alpha.9-28dc4141c7-b3b367e7c8.zip/node_modules/@antora/page-composer/",
           "packageDependencies": [
-            ["@antora/page-composer", "npm:3.0.0-alpha.1"],
+            ["@antora/page-composer", "npm:3.0.0-alpha.9"],
+            ["@antora/logger", "npm:3.0.0-alpha.9"],
             ["handlebars", "npm:4.7.5"],
             ["require-from-string", "npm:2.0.2"]
           ],
@@ -315,68 +333,71 @@
         }]
       ]],
       ["@antora/playbook-builder", [
-        ["npm:3.0.0-alpha.1", {
-          "packageLocation": "./.yarn/cache/@antora-playbook-builder-npm-3.0.0-alpha.1-2b5b2a2bb0-28aa8151bf.zip/node_modules/@antora/playbook-builder/",
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-playbook-builder-npm-3.0.0-alpha.9-e8a1037536-7e74daf632.zip/node_modules/@antora/playbook-builder/",
           "packageDependencies": [
-            ["@antora/playbook-builder", "npm:3.0.0-alpha.1"],
+            ["@antora/playbook-builder", "npm:3.0.0-alpha.9"],
+            ["@antora/logger", "npm:3.0.0-alpha.9"],
             ["@iarna/toml", "npm:2.2.3"],
             ["camelcase-keys", "npm:6.2.2"],
-            ["convict", "npm:6.0.0"],
-            ["js-yaml", "npm:3.14.1"],
-            ["json5", "npm:2.1.3"]
+            ["convict", "npm:6.1.0"],
+            ["js-yaml", "npm:4.1.0"],
+            ["json5", "npm:2.2.0"]
           ],
           "linkType": "HARD",
         }]
       ]],
       ["@antora/redirect-producer", [
-        ["npm:3.0.0-alpha.1", {
-          "packageLocation": "./.yarn/cache/@antora-redirect-producer-npm-3.0.0-alpha.1-97be36bbff-5913d7d804.zip/node_modules/@antora/redirect-producer/",
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-redirect-producer-npm-3.0.0-alpha.9-06dbbbbeda-11906505e3.zip/node_modules/@antora/redirect-producer/",
           "packageDependencies": [
-            ["@antora/redirect-producer", "npm:3.0.0-alpha.1"],
-            ["@antora/asciidoc-loader", "npm:3.0.0-alpha.1"],
+            ["@antora/redirect-producer", "npm:3.0.0-alpha.9"],
+            ["@antora/asciidoc-loader", "npm:3.0.0-alpha.9"],
             ["vinyl", "npm:2.2.1"]
           ],
           "linkType": "HARD",
         }]
       ]],
       ["@antora/site-generator-default", [
-        ["npm:3.0.0-alpha.1", {
-          "packageLocation": "./.yarn/cache/@antora-site-generator-default-npm-3.0.0-alpha.1-4687bd0709-9c517b4c19.zip/node_modules/@antora/site-generator-default/",
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-site-generator-default-npm-3.0.0-alpha.9-30140d24cc-b0ee477650.zip/node_modules/@antora/site-generator-default/",
           "packageDependencies": [
-            ["@antora/site-generator-default", "npm:3.0.0-alpha.1"],
-            ["@antora/asciidoc-loader", "npm:3.0.0-alpha.1"],
-            ["@antora/content-aggregator", "npm:3.0.0-alpha.1"],
-            ["@antora/content-classifier", "npm:3.0.0-alpha.1"],
-            ["@antora/document-converter", "npm:3.0.0-alpha.1"],
-            ["@antora/navigation-builder", "npm:3.0.0-alpha.1"],
-            ["@antora/page-composer", "npm:3.0.0-alpha.1"],
-            ["@antora/playbook-builder", "npm:3.0.0-alpha.1"],
-            ["@antora/redirect-producer", "npm:3.0.0-alpha.1"],
-            ["@antora/site-mapper", "npm:3.0.0-alpha.1"],
-            ["@antora/site-publisher", "npm:3.0.0-alpha.1"],
-            ["@antora/ui-loader", "npm:3.0.0-alpha.1"]
+            ["@antora/site-generator-default", "npm:3.0.0-alpha.9"],
+            ["@antora/asciidoc-loader", "npm:3.0.0-alpha.9"],
+            ["@antora/content-aggregator", "npm:3.0.0-alpha.9"],
+            ["@antora/content-classifier", "npm:3.0.0-alpha.9"],
+            ["@antora/document-converter", "npm:3.0.0-alpha.9"],
+            ["@antora/navigation-builder", "npm:3.0.0-alpha.9"],
+            ["@antora/page-composer", "npm:3.0.0-alpha.9"],
+            ["@antora/playbook-builder", "npm:3.0.0-alpha.9"],
+            ["@antora/redirect-producer", "npm:3.0.0-alpha.9"],
+            ["@antora/site-mapper", "npm:3.0.0-alpha.9"],
+            ["@antora/site-publisher", "npm:3.0.0-alpha.9"],
+            ["@antora/ui-loader", "npm:3.0.0-alpha.9"],
+            ["@antora/user-require-helper", "npm:2.0.0"]
           ],
           "linkType": "HARD",
         }]
       ]],
       ["@antora/site-mapper", [
-        ["npm:3.0.0-alpha.1", {
-          "packageLocation": "./.yarn/cache/@antora-site-mapper-npm-3.0.0-alpha.1-0d5e3ff0a2-a0a4857b34.zip/node_modules/@antora/site-mapper/",
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-site-mapper-npm-3.0.0-alpha.9-6edc224373-7d15e9c5c4.zip/node_modules/@antora/site-mapper/",
           "packageDependencies": [
-            ["@antora/site-mapper", "npm:3.0.0-alpha.1"],
-            ["@antora/content-classifier", "npm:3.0.0-alpha.1"],
+            ["@antora/site-mapper", "npm:3.0.0-alpha.9"],
+            ["@antora/content-classifier", "npm:3.0.0-alpha.9"],
             ["vinyl", "npm:2.2.1"]
           ],
           "linkType": "HARD",
         }]
       ]],
       ["@antora/site-publisher", [
-        ["npm:3.0.0-alpha.1", {
-          "packageLocation": "./.yarn/cache/@antora-site-publisher-npm-3.0.0-alpha.1-6578cdbeb8-76b9ad8dab.zip/node_modules/@antora/site-publisher/",
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-site-publisher-npm-3.0.0-alpha.9-58e41a2f06-71d10e41e5.zip/node_modules/@antora/site-publisher/",
           "packageDependencies": [
-            ["@antora/site-publisher", "npm:3.0.0-alpha.1"],
-            ["@antora/expand-path-helper", "npm:1.0.0"],
-            ["gulp-vinyl-zip", "npm:2.2.0"],
+            ["@antora/site-publisher", "npm:3.0.0-alpha.9"],
+            ["@antora/expand-path-helper", "npm:2.0.0"],
+            ["@antora/user-require-helper", "npm:2.0.0"],
+            ["gulp-vinyl-zip", "npm:2.5.0"],
             ["vinyl", "npm:2.2.1"],
             ["vinyl-fs", "npm:3.0.3"]
           ],
@@ -384,38 +405,43 @@
         }]
       ]],
       ["@antora/ui-loader", [
-        ["npm:3.0.0-alpha.1", {
-          "packageLocation": "./.yarn/cache/@antora-ui-loader-npm-3.0.0-alpha.1-4469e2dfe8-eae6028e6f.zip/node_modules/@antora/ui-loader/",
+        ["npm:3.0.0-alpha.9", {
+          "packageLocation": "./.yarn/cache/@antora-ui-loader-npm-3.0.0-alpha.9-953f68744d-a09c08a867.zip/node_modules/@antora/ui-loader/",
           "packageDependencies": [
-            ["@antora/ui-loader", "npm:3.0.0-alpha.1"],
-            ["@antora/expand-path-helper", "npm:1.0.0"],
-            ["bl", "npm:4.0.3"],
+            ["@antora/ui-loader", "npm:3.0.0-alpha.9"],
+            ["@antora/expand-path-helper", "npm:2.0.0"],
             ["cache-directory", "npm:2.0.0"],
             ["camelcase-keys", "npm:6.2.2"],
-            ["got", "npm:11.7.0"],
-            ["gulp-vinyl-zip", "npm:2.2.0"],
-            ["js-yaml", "npm:3.14.1"],
+            ["gulp-vinyl-zip", "npm:2.5.0"],
+            ["hpagent", "npm:0.1.2"],
+            ["js-yaml", "npm:4.1.0"],
             ["minimatch-all", "npm:1.1.0"],
+            ["should-proxy", "npm:1.0.4"],
+            ["simple-concat", "npm:1.0.1"],
+            ["simple-get", "npm:4.0.0"],
             ["vinyl", "npm:2.2.1"],
             ["vinyl-fs", "npm:3.0.3"]
           ],
           "linkType": "HARD",
         }]
       ]],
-      ["@antora/xref-validator", [
-        ["https://gitlab.com/antora/xref-validator.git#commit=19bfaf88fc7dd39552cfd8b3ac41c55d6d8f9edd", {
-          "packageLocation": "./.yarn/cache/@antora-xref-validator-https-1130667dd0-cac4639845.zip/node_modules/@antora/xref-validator/",
+      ["@antora/user-require-helper", [
+        ["npm:2.0.0", {
+          "packageLocation": "./.yarn/cache/@antora-user-require-helper-npm-2.0.0-3539a91475-8b2080b8d3.zip/node_modules/@antora/user-require-helper/",
           "packageDependencies": [
-            ["@antora/xref-validator", "https://gitlab.com/antora/xref-validator.git#commit=19bfaf88fc7dd39552cfd8b3ac41c55d6d8f9edd"],
-            ["@antora/asciidoc-loader", "npm:3.0.0-alpha.1"],
-            ["@antora/content-aggregator", "npm:3.0.0-alpha.1"],
-            ["@antora/content-classifier", "npm:3.0.0-alpha.1"],
-            ["@antora/document-converter", "npm:3.0.0-alpha.1"],
-            ["@antora/expand-path-helper", "npm:1.0.0"],
-            ["@antora/playbook-builder", "npm:3.0.0-alpha.1"],
-            ["cache-directory", "npm:2.0.0"],
-            ["got", "npm:11.7.0"],
-            ["node-gzip", "npm:1.1.2"]
+            ["@antora/user-require-helper", "npm:2.0.0"],
+            ["@antora/expand-path-helper", "npm:2.0.0"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
+      ["@asciidoctor/core", [
+        ["npm:2.2.5", {
+          "packageLocation": "./.yarn/cache/@asciidoctor-core-npm-2.2.5-1744f2e2b7-36efd6f631.zip/node_modules/@asciidoctor/core/",
+          "packageDependencies": [
+            ["@asciidoctor/core", "npm:2.2.5"],
+            ["asciidoctor-opal-runtime", "npm:0.3.3"],
+            ["unxhr", "npm:1.0.1"]
           ],
           "linkType": "HARD",
         }]
@@ -2452,17 +2478,30 @@
         }]
       ]],
       ["@djencks/asciidoctor-jsonpath", [
-        ["npm:0.0.1", {
-          "packageLocation": "./.yarn/cache/@djencks-asciidoctor-jsonpath-npm-0.0.1-6ad9bf8c33-55493d1df5.zip/node_modules/@djencks/asciidoctor-jsonpath/",
+        ["npm:0.0.4", {
+          "packageLocation": "./.yarn/cache/@djencks-asciidoctor-jsonpath-npm-0.0.4-daa788a548-ba33c6567c.zip/node_modules/@djencks/asciidoctor-jsonpath/",
           "packageDependencies": [
-            ["@djencks/asciidoctor-jsonpath", "npm:0.0.1"],
+            ["@djencks/asciidoctor-jsonpath", "npm:0.0.4"],
+            ["@antora/user-require-helper", "npm:2.0.0"],
+            ["@iarna/toml", "npm:2.2.5"],
             ["esprima", "npm:4.0.1"],
-            ["jsonpath", "npm:1.0.2"],
+            ["js-yaml", "npm:4.1.0"],
+            ["json5", "npm:2.2.0"],
+            ["jsonpath", "npm:1.1.1"],
             ["static-eval", "npm:2.1.0"]
           ],
           "linkType": "HARD",
         }]
       ]],
+      ["@hapi/bourne", [
+        ["npm:2.0.0", {
+          "packageLocation": "./.yarn/cache/@hapi-bourne-npm-2.0.0-8eeda7e0a2-97a3e6d44c.zip/node_modules/@hapi/bourne/",
+          "packageDependencies": [
+            ["@hapi/bourne", "npm:2.0.0"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["@html-validate/stylish", [
         ["npm:1.0.1", {
           "packageLocation": "./.yarn/cache/@html-validate-stylish-npm-1.0.1-00b8a50327-4502536b2d.zip/node_modules/@html-validate/stylish/",
@@ -2481,6 +2520,13 @@
             ["@iarna/toml", "npm:2.2.3"]
           ],
           "linkType": "HARD",
+        }],
+        ["npm:2.2.5", {
+          "packageLocation": "./.yarn/cache/@iarna-toml-npm-2.2.5-6da1399e8e-929a8516a2.zip/node_modules/@iarna/toml/",
+          "packageDependencies": [
+            ["@iarna/toml", "npm:2.2.5"]
+          ],
+          "linkType": "HARD",
         }]
       ]],
       ["@jest/types", [
@@ -3369,13 +3415,6 @@
           ],
           "linkType": "HARD",
         }],
-        ["npm:3.1.2", {
-          "packageLocation": "./.yarn/cache/@sindresorhus-is-npm-3.1.2-bcdc8ac1e4-da0047761e.zip/node_modules/@sindresorhus/is/",
-          "packageDependencies": [
-            ["@sindresorhus/is", "npm:3.1.2"]
-          ],
-          "linkType": "HARD",
-        }],
         ["npm:4.0.1", {
           "packageLocation": "./.yarn/cache/@sindresorhus-is-npm-4.0.1-30716423e5-16908ae19a.zip/node_modules/@sindresorhus/is/",
           "packageDependencies": [
@@ -4376,18 +4415,13 @@
           "packageLocation": "./",
           "packageDependencies": [
             ["apache-camel-website", "workspace:."],
-            ["@antora/asciidoc-loader", "npm:3.0.0-alpha.1"],
-            ["@antora/cli", "npm:3.0.0-alpha.1"],
-            ["@antora/content-aggregator", "npm:3.0.0-alpha.1"],
-            ["@antora/content-classifier", "npm:3.0.0-alpha.1"],
-            ["@antora/document-converter", "npm:3.0.0-alpha.1"],
-            ["@antora/playbook-builder", "npm:3.0.0-alpha.1"],
-            ["@antora/site-generator-default", "npm:3.0.0-alpha.1"],
-            ["@antora/site-mapper", "npm:3.0.0-alpha.1"],
-            ["@antora/xref-validator", "https://gitlab.com/antora/xref-validator.git#commit=19bfaf88fc7dd39552cfd8b3ac41c55d6d8f9edd"],
+            ["@antora/cli", "npm:3.0.0-alpha.9"],
+            ["@antora/playbook-builder", "npm:3.0.0-alpha.9"],
+            ["@antora/site-generator-default", "npm:3.0.0-alpha.9"],
+            ["@antora/site-mapper", "npm:3.0.0-alpha.9"],
             ["@deadlinks/cargo-deadlinks", "github-release:deadlinks/cargo-deadlinks:0.8.0/deadlinks-linux"],
             ["@djencks/asciidoctor-antora-indexer", "npm:0.0.6"],
-            ["@djencks/asciidoctor-jsonpath", "npm:0.0.1"],
+            ["@djencks/asciidoctor-jsonpath", "npm:0.0.4"],
             ["@oclif/errors", "npm:1.3.4"],
             ["antora-ui-camel", "workspace:antora-ui-camel"],
             ["del", "npm:6.0.0"],
@@ -4400,6 +4434,7 @@
             ["netlify-cli", "npm:2.69.11"],
             ["npm-run-all", "npm:4.1.5"],
             ["opal-runtime", "npm:1.0.11"],
+            ["pino-pretty", "npm:5.1.3"],
             ["toml", "npm:3.0.0"]
           ],
           "linkType": "SOFT",
@@ -4506,6 +4541,26 @@
             ["sprintf-js", "npm:1.0.3"]
           ],
           "linkType": "HARD",
+        }],
+        ["npm:2.0.1", {
+          "packageLocation": "./.yarn/cache/argparse-npm-2.0.1-faff7999e6-160b7a25d2.zip/node_modules/argparse/",
+          "packageDependencies": [
+            ["argparse", "npm:2.0.1"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
+      ["args", [
+        ["npm:5.0.1", {
+          "packageLocation": "./.yarn/cache/args-npm-5.0.1-cd7b0f9dcc-2c322bff70.zip/node_modules/args/",
+          "packageDependencies": [
+            ["args", "npm:5.0.1"],
+            ["camelcase", "npm:5.0.0"],
+            ["chalk", "npm:2.4.2"],
+            ["leven", "npm:2.1.0"],
+            ["mri", "npm:1.1.4"]
+          ],
+          "linkType": "HARD",
         }]
       ]],
       ["arr-diff", [
@@ -4757,6 +4812,17 @@
           "linkType": "HARD",
         }]
       ]],
+      ["asciidoctor-opal-runtime", [
+        ["npm:0.3.3", {
+          "packageLocation": "./.yarn/cache/asciidoctor-opal-runtime-npm-0.3.3-e88f7cb75f-508d892b1c.zip/node_modules/asciidoctor-opal-runtime/",
+          "packageDependencies": [
+            ["asciidoctor-opal-runtime", "npm:0.3.3"],
+            ["glob", "npm:7.1.3"],
+            ["unxhr", "npm:1.0.1"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["asciidoctor.js", [
         ["npm:1.5.9", {
           "packageLocation": "./.yarn/cache/asciidoctor.js-npm-1.5.9-57059645fb-b6ee00bf4d.zip/node_modules/asciidoctor.js/",
@@ -4923,6 +4989,15 @@
           "linkType": "HARD",
         }]
       ]],
+      ["atomic-sleep", [
+        ["npm:1.0.0", {
+          "packageLocation": "./.yarn/cache/atomic-sleep-npm-1.0.0-17d8a762a3-2c6fa68caf.zip/node_modules/atomic-sleep/",
+          "packageDependencies": [
+            ["atomic-sleep", "npm:1.0.0"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["autoprefixer", [
         ["npm:9.7.6", {
           "packageLocation": "./.yarn/cache/autoprefixer-npm-9.7.6-ef4a4974ff-fee0546d1f.zip/node_modules/autoprefixer/",
@@ -5058,13 +5133,6 @@
         }]
       ]],
       ["base64-js", [
-        ["npm:0.0.2", {
-          "packageLocation": "./.yarn/cache/base64-js-npm-0.0.2-10894add71-b716ef61b9.zip/node_modules/base64-js/",
-          "packageDependencies": [
-            ["base64-js", "npm:0.0.2"]
-          ],
-          "linkType": "HARD",
-        }],
         ["npm:1.5.1", {
           "packageLocation": "./.yarn/cache/base64-js-npm-1.5.1-b2f7275641-c1b41a26dd.zip/node_modules/base64-js/",
           "packageDependencies": [
@@ -5276,17 +5344,6 @@
           "linkType": "HARD",
         }]
       ]],
-      ["bops", [
-        ["npm:0.0.7", {
-          "packageLocation": "./.yarn/cache/bops-npm-0.0.7-1d117ccbd6-8d499cd473.zip/node_modules/bops/",
-          "packageDependencies": [
-            ["bops", "npm:0.0.7"],
-            ["base64-js", "npm:0.0.2"],
-            ["to-utf8", "npm:0.0.1"]
-          ],
-          "linkType": "HARD",
-        }]
-      ]],
       ["boxen", [
         ["npm:4.2.0", {
           "packageLocation": "./.yarn/cache/boxen-npm-4.2.0-471e88ddba-667b291d22.zip/node_modules/boxen/",
@@ -5917,6 +5974,13 @@
           ],
           "linkType": "HARD",
         }],
+        ["npm:5.0.0", {
+          "packageLocation": "./.yarn/cache/camelcase-npm-5.0.0-c808398846-73567fa11f.zip/node_modules/camelcase/",
+          "packageDependencies": [
+            ["camelcase", "npm:5.0.0"]
+          ],
+          "linkType": "HARD",
+        }],
         ["npm:5.3.1", {
           "packageLocation": "./.yarn/cache/camelcase-npm-5.3.1-5db8af62c5-6a3350c4ea.zip/node_modules/camelcase/",
           "packageDependencies": [
@@ -6643,6 +6707,13 @@
             ["colorette", "npm:1.2.1"]
           ],
           "linkType": "HARD",
+        }],
+        ["npm:1.4.0", {
+          "packageLocation": "./.yarn/cache/colorette-npm-1.4.0-7e94b44dc3-7ef8e1ca16.zip/node_modules/colorette/",
+          "packageDependencies": [
+            ["colorette", "npm:1.4.0"]
+          ],
+          "linkType": "HARD",
         }]
       ]],
       ["colors", [
@@ -6734,19 +6805,19 @@
           ],
           "linkType": "HARD",
         }],
-        ["npm:6.1.0", {
-          "packageLocation": "./.yarn/cache/commander-npm-6.1.0-126b786d0f-ef1e310c3f.zip/node_modules/commander/",
-          "packageDependencies": [
-            ["commander", "npm:6.1.0"]
-          ],
-          "linkType": "HARD",
-        }],
         ["npm:6.2.1", {
           "packageLocation": "./.yarn/cache/commander-npm-6.2.1-d5b635f237-47856aae6f.zip/node_modules/commander/",
           "packageDependencies": [
             ["commander", "npm:6.2.1"]
           ],
           "linkType": "HARD",
+        }],
+        ["npm:7.2.0", {
+          "packageLocation": "./.yarn/cache/commander-npm-7.2.0-19178180f8-bdc0eca5e2.zip/node_modules/commander/",
+          "packageDependencies": [
+            ["commander", "npm:7.2.0"]
+          ],
+          "linkType": "HARD",
         }]
       ]],
       ["common-path-prefix", [
@@ -6989,10 +7060,10 @@
         }]
       ]],
       ["convict", [
-        ["npm:6.0.0", {
-          "packageLocation": "./.yarn/cache/convict-npm-6.0.0-88e8bdbf48-6fc69e1058.zip/node_modules/convict/",
+        ["npm:6.1.0", {
+          "packageLocation": "./.yarn/cache/convict-npm-6.1.0-3c39748d83-dce4843743.zip/node_modules/convict/",
           "packageDependencies": [
-            ["convict", "npm:6.0.0"],
+            ["convict", "npm:6.1.0"],
             ["lodash.clonedeep", "npm:4.5.0"],
             ["yargs-parser", "npm:18.1.3"]
           ],
@@ -7575,6 +7646,15 @@
           "linkType": "HARD",
         }]
       ]],
+      ["dateformat", [
+        ["npm:4.5.1", {
+          "packageLocation": "./.yarn/cache/dateformat-npm-4.5.1-ee0ca75464-d5d08fd36f.zip/node_modules/dateformat/",
+          "packageDependencies": [
+            ["dateformat", "npm:4.5.1"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["debug", [
         ["npm:2.6.9", {
           "packageLocation": "./.yarn/cache/debug-npm-2.6.9-7d4cb597dc-559f44f98c.zip/node_modules/debug/",
@@ -9716,6 +9796,15 @@
           "linkType": "HARD",
         }]
       ]],
+      ["fast-redact", [
+        ["npm:3.0.2", {
+          "packageLocation": "./.yarn/cache/fast-redact-npm-3.0.2-98d6f1d433-afb8b397dc.zip/node_modules/fast-redact/",
+          "packageDependencies": [
+            ["fast-redact", "npm:3.0.2"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["fast-safe-stringify", [
         ["npm:2.0.7", {
           "packageLocation": "./.yarn/cache/fast-safe-stringify-npm-2.0.7-4c71091538-7bd2254326.zip/node_modules/fast-safe-stringify/",
@@ -9723,6 +9812,13 @@
             ["fast-safe-stringify", "npm:2.0.7"]
           ],
           "linkType": "HARD",
+        }],
+        ["npm:2.1.1", {
+          "packageLocation": "./.yarn/cache/fast-safe-stringify-npm-2.1.1-7ce89033ca-79c9940151.zip/node_modules/fast-safe-stringify/",
+          "packageDependencies": [
+            ["fast-safe-stringify", "npm:2.1.1"]
+          ],
+          "linkType": "HARD",
         }]
       ]],
       ["fast-stringify", [
@@ -9734,6 +9830,15 @@
           "linkType": "HARD",
         }]
       ]],
+      ["fastify-warning", [
+        ["npm:0.2.0", {
+          "packageLocation": "./.yarn/cache/fastify-warning-npm-0.2.0-f9c53563fc-17b9e2ffdf.zip/node_modules/fastify-warning/",
+          "packageDependencies": [
+            ["fastify-warning", "npm:0.2.0"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["fastq", [
         ["npm:1.9.0", {
           "packageLocation": "./.yarn/cache/fastq-npm-1.9.0-11e58b198d-e9b46ea899.zip/node_modules/fastq/",
@@ -10061,6 +10166,15 @@
           "linkType": "HARD",
         }]
       ]],
+      ["flatstr", [
+        ["npm:1.0.12", {
+          "packageLocation": "./.yarn/cache/flatstr-npm-1.0.12-4311d37d16-2803767f91.zip/node_modules/flatstr/",
+          "packageDependencies": [
+            ["flatstr", "npm:1.0.12"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["flatted", [
         ["npm:2.0.1", {
           "packageLocation": "./.yarn/cache/flatted-npm-2.0.1-a100b7c783-dd5140cc40.zip/node_modules/flatted/",
@@ -10583,17 +10697,6 @@
           "linkType": "HARD",
         }]
       ]],
-      ["git-apply-delta", [
-        ["npm:0.0.7", {
-          "packageLocation": "./.yarn/cache/git-apply-delta-npm-0.0.7-6258250fd3-ab9c5cc994.zip/node_modules/git-apply-delta/",
-          "packageDependencies": [
-            ["git-apply-delta", "npm:0.0.7"],
-            ["bops", "npm:0.0.7"],
-            ["varint", "npm:0.0.3"]
-          ],
-          "linkType": "HARD",
-        }]
-      ]],
       ["git-repo-info", [
         ["npm:2.1.1", {
           "packageLocation": "./.yarn/cache/git-repo-info-npm-2.1.1-26bbdf1ee7-468d7f74fe.zip/node_modules/git-repo-info/",
@@ -10626,6 +10729,19 @@
           ],
           "linkType": "HARD",
         }],
+        ["npm:7.1.3", {
+          "packageLocation": "./.yarn/cache/glob-npm-7.1.3-c65cc4bde2-d9d1460afd.zip/node_modules/glob/",
+          "packageDependencies": [
+            ["glob", "npm:7.1.3"],
+            ["fs.realpath", "npm:1.0.0"],
+            ["inflight", "npm:1.0.6"],
+            ["inherits", "npm:2.0.4"],
+            ["minimatch", "npm:3.0.4"],
+            ["once", "npm:1.4.0"],
+            ["path-is-absolute", "npm:1.0.1"]
+          ],
+          "linkType": "HARD",
+        }],
         ["npm:7.1.6", {
           "packageLocation": "./.yarn/cache/glob-npm-7.1.6-1ce3a5189a-789977b524.zip/node_modules/glob/",
           "packageDependencies": [
@@ -10785,15 +10901,6 @@
           "linkType": "HARD",
         }]
       ]],
-      ["globalyzer", [
-        ["npm:0.1.4", {
-          "packageLocation": "./.yarn/cache/globalyzer-npm-0.1.4-d6bb9fc6f1-31b1ffae74.zip/node_modules/globalyzer/",
-          "packageDependencies": [
-            ["globalyzer", "npm:0.1.4"]
-          ],
-          "linkType": "HARD",
-        }]
-      ]],
       ["globby", [
         ["npm:10.0.2", {
           "packageLocation": "./.yarn/cache/globby-npm-10.0.2-9b274c88d3-53924c2b46.zip/node_modules/globby/",
@@ -10848,15 +10955,6 @@
           "linkType": "HARD",
         }]
       ]],
-      ["globrex", [
-        ["npm:0.1.2", {
-          "packageLocation": "./.yarn/cache/globrex-npm-0.1.2-ddda94f2d0-78825a08ab.zip/node_modules/globrex/",
-          "packageDependencies": [
-            ["globrex", "npm:0.1.2"]
-          ],
-          "linkType": "HARD",
-        }]
-      ]],
       ["glogg", [
         ["npm:1.0.2", {
           "packageLocation": "./.yarn/cache/glogg-npm-1.0.2-03050846f9-f4769ac030.zip/node_modules/glogg/",
@@ -10878,24 +10976,6 @@
         }]
       ]],
       ["got", [
-        ["npm:11.7.0", {
-          "packageLocation": "./.yarn/cache/got-npm-11.7.0-cacb9b44fc-780b4b1d33.zip/node_modules/got/",
-          "packageDependencies": [
-            ["got", "npm:11.7.0"],
-            ["@sindresorhus/is", "npm:3.1.2"],
-            ["@szmarczak/http-timer", "npm:4.0.5"],
-            ["@types/cacheable-request", "npm:6.0.1"],
-            ["@types/responselike", "npm:1.0.0"],
-            ["cacheable-lookup", "npm:5.0.3"],
-            ["cacheable-request", "npm:7.0.1"],
-            ["decompress-response", "npm:6.0.0"],
-            ["http2-wrapper", "npm:1.0.0-beta.5.2"],
-            ["lowercase-keys", "npm:2.0.0"],
-            ["p-cancelable", "npm:2.0.0"],
-            ["responselike", "npm:2.0.0"]
-          ],
-          "linkType": "HARD",
-        }],
         ["npm:11.8.2", {
           "packageLocation": "./.yarn/cache/got-npm-11.8.2-c1eb105458-6415f98ec2.zip/node_modules/got/",
           "packageDependencies": [
@@ -11271,6 +11351,20 @@
             ["yazl", "npm:2.5.1"]
           ],
           "linkType": "HARD",
+        }],
+        ["npm:2.5.0", {
+          "packageLocation": "./.yarn/cache/gulp-vinyl-zip-npm-2.5.0-05871c0178-2744a6b750.zip/node_modules/gulp-vinyl-zip/",
+          "packageDependencies": [
+            ["gulp-vinyl-zip", "npm:2.5.0"],
+            ["queue", "npm:4.5.1"],
+            ["through", "npm:2.3.8"],
+            ["through2", "npm:2.0.5"],
+            ["vinyl", "npm:2.2.1"],
+            ["vinyl-fs", "npm:3.0.3"],
+            ["yauzl", "npm:2.10.0"],
+            ["yazl", "npm:2.5.1"]
+          ],
+          "linkType": "HARD",
         }]
       ]],
       ["gulplog", [
@@ -11639,6 +11733,15 @@
           "linkType": "HARD",
         }]
       ]],
+      ["hpagent", [
+        ["npm:0.1.2", {
+          "packageLocation": "./.yarn/cache/hpagent-npm-0.1.2-f4fe59bad9-a94ce21d48.zip/node_modules/hpagent/",
+          "packageDependencies": [
+            ["hpagent", "npm:0.1.2"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["hsl-regex", [
         ["npm:1.0.0", {
           "packageLocation": "./.yarn/cache/hsl-regex-npm-1.0.0-49e975d55c-b04a50c6c7.zip/node_modules/hsl-regex/",
@@ -13307,19 +13410,15 @@
         }]
       ]],
       ["isomorphic-git", [
-        ["npm:0.78.5", {
-          "packageLocation": "./.yarn/cache/isomorphic-git-npm-0.78.5-1cd8475cda-a250410f10.zip/node_modules/isomorphic-git/",
+        ["npm:1.10.0", {
+          "packageLocation": "./.yarn/cache/isomorphic-git-npm-1.10.0-a7769cd2ba-f53bef67dc.zip/node_modules/isomorphic-git/",
           "packageDependencies": [
-            ["isomorphic-git", "npm:0.78.5"],
+            ["isomorphic-git", "npm:1.10.0"],
             ["async-lock", "npm:1.2.2"],
             ["clean-git-ref", "npm:2.0.1"],
             ["crc-32", "npm:1.2.0"],
             ["diff3", "npm:0.0.3"],
-            ["git-apply-delta", "npm:0.0.7"],
-            ["globalyzer", "npm:0.1.4"],
-            ["globrex", "npm:0.1.2"],
             ["ignore", "npm:5.1.8"],
-            ["marky", "npm:1.2.1"],
             ["minimisted", "npm:2.0.0"],
             ["pako", "npm:1.0.11"],
             ["pify", "npm:4.0.1"],
@@ -13395,6 +13494,15 @@
           "linkType": "HARD",
         }]
       ]],
+      ["joycon", [
+        ["npm:3.0.1", {
+          "packageLocation": "./.yarn/cache/joycon-npm-3.0.1-1489fed95a-db64c93cf0.zip/node_modules/joycon/",
+          "packageDependencies": [
+            ["joycon", "npm:3.0.1"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["jpegtran-bin", [
         ["npm:4.0.0", {
           "packageLocation": "./.yarn/unplugged/jpegtran-bin-npm-4.0.0-c1e70a98c1/node_modules/jpegtran-bin/",
@@ -13443,6 +13551,14 @@
             ["esprima", "npm:4.0.1"]
           ],
           "linkType": "HARD",
+        }],
+        ["npm:4.1.0", {
+          "packageLocation": "./.yarn/cache/js-yaml-npm-4.1.0-3606f32312-8973cf4296.zip/node_modules/js-yaml/",
+          "packageDependencies": [
+            ["js-yaml", "npm:4.1.0"],
+            ["argparse", "npm:2.0.1"]
+          ],
+          "linkType": "HARD",
         }]
       ]],
       ["jsbn", [
@@ -13576,6 +13692,14 @@
             ["minimist", "npm:1.2.5"]
           ],
           "linkType": "HARD",
+        }],
+        ["npm:2.2.0", {
+          "packageLocation": "./.yarn/cache/json5-npm-2.2.0-da49dc7cb5-07b1f90c28.zip/node_modules/json5/",
+          "packageDependencies": [
+            ["json5", "npm:2.2.0"],
+            ["minimist", "npm:1.2.5"]
+          ],
+          "linkType": "HARD",
         }]
       ]],
       ["jsonfile", [
@@ -13607,13 +13731,13 @@
         }]
       ]],
       ["jsonpath", [
-        ["npm:1.0.2", {
-          "packageLocation": "./.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/",
+        ["npm:1.1.1", {
+          "packageLocation": "./.yarn/cache/jsonpath-npm-1.1.1-d88994ce7e-4741e517f4.zip/node_modules/jsonpath/",
           "packageDependencies": [
-            ["jsonpath", "npm:1.0.2"],
+            ["jsonpath", "npm:1.1.1"],
             ["esprima", "npm:1.2.2"],
             ["static-eval", "npm:2.0.2"],
-            ["underscore", "npm:1.7.0"]
+            ["underscore", "npm:1.12.1"]
           ],
           "linkType": "HARD",
         }]
@@ -13963,6 +14087,13 @@
         }]
       ]],
       ["leven", [
+        ["npm:2.1.0", {
+          "packageLocation": "./.yarn/cache/leven-npm-2.1.0-19f0a16606-fcd39dd4d7.zip/node_modules/leven/",
+          "packageDependencies": [
+            ["leven", "npm:2.1.0"]
+          ],
+          "linkType": "HARD",
+        }],
         ["npm:3.1.0", {
           "packageLocation": "./.yarn/cache/leven-npm-3.1.0-b7697736a3-6ebca75298.zip/node_modules/leven/",
           "packageDependencies": [
@@ -14690,15 +14821,6 @@
           "linkType": "HARD",
         }]
       ]],
-      ["marky", [
-        ["npm:1.2.1", {
-          "packageLocation": "./.yarn/cache/marky-npm-1.2.1-386354fb42-b830936558.zip/node_modules/marky/",
-          "packageDependencies": [
-            ["marky", "npm:1.2.1"]
-          ],
-          "linkType": "HARD",
-        }]
-      ]],
       ["matchdep", [
         ["npm:2.0.0", {
           "packageLocation": "./.yarn/cache/matchdep-npm-2.0.0-19deb4c755-df53c85b08.zip/node_modules/matchdep/",
@@ -14713,10 +14835,10 @@
         }]
       ]],
       ["matcher", [
-        ["npm:3.0.0", {
-          "packageLocation": "./.yarn/cache/matcher-npm-3.0.0-d32d29365e-4b54c0a8ed.zip/node_modules/matcher/",
+        ["npm:4.0.0", {
+          "packageLocation": "./.yarn/cache/matcher-npm-4.0.0-418060075c-457f90baba.zip/node_modules/matcher/",
           "packageDependencies": [
-            ["matcher", "npm:3.0.0"],
+            ["matcher", "npm:4.0.0"],
             ["escape-string-regexp", "npm:4.0.0"]
           ],
           "linkType": "HARD",
@@ -15289,6 +15411,15 @@
           "linkType": "HARD",
         }]
       ]],
+      ["mri", [
+        ["npm:1.1.4", {
+          "packageLocation": "./.yarn/cache/mri-npm-1.1.4-d22a399f26-5ea30a4f58.zip/node_modules/mri/",
+          "packageDependencies": [
+            ["mri", "npm:1.1.4"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["ms", [
         ["npm:2.0.0", {
           "packageLocation": "./.yarn/cache/ms-npm-2.0.0-9e1101a471-1a230340cc.zip/node_modules/ms/",
@@ -15313,17 +15444,17 @@
         }]
       ]],
       ["multi-progress", [
-        ["npm:3.0.0", {
-          "packageLocation": "./.yarn/cache/multi-progress-npm-3.0.0-66dc1fb6ae-416a5bb9ca.zip/node_modules/multi-progress/",
+        ["npm:4.0.0", {
+          "packageLocation": "./.yarn/cache/multi-progress-npm-4.0.0-e647cd6e59-18d1c57620.zip/node_modules/multi-progress/",
           "packageDependencies": [
-            ["multi-progress", "npm:3.0.0"]
+            ["multi-progress", "npm:4.0.0"]
           ],
           "linkType": "SOFT",
         }],
-        ["virtual:d9804fca38c6eb61f2670eba60dde34bcc14c9905dd84a6c9318d503fc014df2902ea7b0a8327aa05f2d1d503d7c3d39641949eb2937531eaa53bf18299218a2#npm:3.0.0", {
-          "packageLocation": "./.yarn/$$virtual/multi-progress-virtual-5b44a5c113/0/cache/multi-progress-npm-3.0.0-66dc1fb6ae-416a5bb9ca.zip/node_modules/multi-progress/",
+        ["virtual:8208cc5339f9a0ffc27ea8fa80bc139486e6d7181d99b6c1493d25383a9773fb79da66cac253dbfb96f458350734cca67ab8dc91536898f447ca1c73f68728bf#npm:4.0.0", {
+          "packageLocation": "./.yarn/$$virtual/multi-progress-virtual-e67ba0e1ec/0/cache/multi-progress-npm-4.0.0-e647cd6e59-18d1c57620.zip/node_modules/multi-progress/",
           "packageDependencies": [
-            ["multi-progress", "virtual:d9804fca38c6eb61f2670eba60dde34bcc14c9905dd84a6c9318d503fc014df2902ea7b0a8327aa05f2d1d503d7c3d39641949eb2937531eaa53bf18299218a2#npm:3.0.0"],
+            ["multi-progress", "virtual:8208cc5339f9a0ffc27ea8fa80bc139486e6d7181d99b6c1493d25383a9773fb79da66cac253dbfb96f458350734cca67ab8dc91536898f447ca1c73f68728bf#npm:4.0.0"],
             ["@types/progress", null],
             ["progress", "npm:2.0.3"]
           ],
@@ -15759,15 +15890,6 @@
           "linkType": "HARD",
         }]
       ]],
-      ["node-gzip", [
-        ["npm:1.1.2", {
-          "packageLocation": "./.yarn/cache/node-gzip-npm-1.1.2-b55f6ea514-161fb530c6.zip/node_modules/node-gzip/",
-          "packageDependencies": [
-            ["node-gzip", "npm:1.1.2"]
-          ],
-          "linkType": "HARD",
-        }]
-      ]],
       ["node-pre-gyp", [
         ["npm:0.16.0", {
           "packageLocation": "./.yarn/unplugged/node-pre-gyp-npm-0.16.0-54a79332bc/node_modules/node-pre-gyp/",
@@ -17148,6 +17270,13 @@
             ["picomatch", "npm:2.2.2"]
           ],
           "linkType": "HARD",
+        }],
+        ["npm:2.3.0", {
+          "packageLocation": "./.yarn/cache/picomatch-npm-2.3.0-5e60e6c82d-80113a0fb7.zip/node_modules/picomatch/",
+          "packageDependencies": [
+            ["picomatch", "npm:2.3.0"]
+          ],
+          "linkType": "HARD",
         }]
       ]],
       ["pidtree", [
@@ -17201,6 +17330,71 @@
           "linkType": "HARD",
         }]
       ]],
+      ["pino", [
+        ["npm:6.13.2", {
+          "packageLocation": "./.yarn/cache/pino-npm-6.13.2-60b212cb2e-bd490e31b1.zip/node_modules/pino/",
+          "packageDependencies": [
+            ["pino", "npm:6.13.2"],
+            ["fast-redact", "npm:3.0.2"],
+            ["fast-safe-stringify", "npm:2.1.1"],
+            ["fastify-warning", "npm:0.2.0"],
+            ["flatstr", "npm:1.0.12"],
+            ["pino-std-serializers", "npm:3.2.0"],
+            ["quick-format-unescaped", "npm:4.0.3"],
+            ["sonic-boom", "npm:1.4.1"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
+      ["pino-pretty", [
+        ["npm:5.1.3", {
+          "packageLocation": "./.yarn/cache/pino-pretty-npm-5.1.3-488a9c8f4f-838eeb2104.zip/node_modules/pino-pretty/",
+          "packageDependencies": [
+            ["pino-pretty", "npm:5.1.3"],
+            ["@hapi/bourne", "npm:2.0.0"],
+            ["args", "npm:5.0.1"],
+            ["chalk", "npm:4.1.0"],
+            ["dateformat", "npm:4.5.1"],
+            ["fast-safe-stringify", "npm:2.0.7"],
+            ["jmespath", "npm:0.15.0"],
+            ["joycon", "npm:3.0.1"],
+            ["pump", "npm:3.0.0"],
+            ["readable-stream", "npm:3.6.0"],
+            ["rfdc", "npm:1.3.0"],
+            ["split2", "npm:3.2.2"],
+            ["strip-json-comments", "npm:3.1.1"]
+          ],
+          "linkType": "HARD",
+        }],
+        ["npm:6.0.0", {
+          "packageLocation": "./.yarn/cache/pino-pretty-npm-6.0.0-97e1f1f254-865a5ee324.zip/node_modules/pino-pretty/",
+          "packageDependencies": [
+            ["pino-pretty", "npm:6.0.0"],
+            ["@hapi/bourne", "npm:2.0.0"],
+            ["args", "npm:5.0.1"],
+            ["colorette", "npm:1.4.0"],
+            ["dateformat", "npm:4.5.1"],
+            ["fast-safe-stringify", "npm:2.0.7"],
+            ["jmespath", "npm:0.15.0"],
+            ["joycon", "npm:3.0.1"],
+            ["pump", "npm:3.0.0"],
+            ["readable-stream", "npm:3.6.0"],
+            ["rfdc", "npm:1.3.0"],
+            ["split2", "npm:3.2.2"],
+            ["strip-json-comments", "npm:3.1.1"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
+      ["pino-std-serializers", [
+        ["npm:3.2.0", {
+          "packageLocation": "./.yarn/cache/pino-std-serializers-npm-3.2.0-9fd67503a4-fb386422f0.zip/node_modules/pino-std-serializers/",
+          "packageDependencies": [
+            ["pino-std-serializers", "npm:3.2.0"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["pkg-dir", [
         ["npm:2.0.0", {
           "packageLocation": "./.yarn/cache/pkg-dir-npm-2.0.0-2b4bf4abd1-f8ae3a1517.zip/node_modules/pkg-dir/",
@@ -18274,6 +18468,15 @@
           "linkType": "HARD",
         }]
       ]],
+      ["quick-format-unescaped", [
+        ["npm:4.0.3", {
+          "packageLocation": "./.yarn/cache/quick-format-unescaped-npm-4.0.3-5c9b4670f7-08bbbe4937.zip/node_modules/quick-format-unescaped/",
+          "packageDependencies": [
+            ["quick-format-unescaped", "npm:4.0.3"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["quick-lru", [
         ["npm:4.0.1", {
           "packageLocation": "./.yarn/cache/quick-lru-npm-4.0.1-ef8aa17c9c-91847e4b07.zip/node_modules/quick-lru/",
@@ -19142,6 +19345,15 @@
           "linkType": "HARD",
         }]
       ]],
+      ["rfdc", [
+        ["npm:1.3.0", {
+          "packageLocation": "./.yarn/cache/rfdc-npm-1.3.0-272f288ad8-34dd5c5acf.zip/node_modules/rfdc/",
+          "packageDependencies": [
+            ["rfdc", "npm:1.3.0"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["rgb-regex", [
         ["npm:1.0.1", {
           "packageLocation": "./.yarn/cache/rgb-regex-npm-1.0.1-c867413fad-7701e22ec4.zip/node_modules/rgb-regex/",
@@ -19653,6 +19865,15 @@
           "linkType": "HARD",
         }]
       ]],
+      ["should-proxy", [
+        ["npm:1.0.4", {
+          "packageLocation": "./.yarn/cache/should-proxy-npm-1.0.4-265b064fed-4787b9960e.zip/node_modules/should-proxy/",
+          "packageDependencies": [
+            ["should-proxy", "npm:1.0.4"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["side-channel", [
         ["npm:1.0.3", {
           "packageLocation": "./.yarn/cache/side-channel-npm-1.0.3-bd2d7f1fdd-e79a7a5dba.zip/node_modules/side-channel/",
@@ -19687,6 +19908,13 @@
             ["simple-concat", "npm:1.0.0"]
           ],
           "linkType": "HARD",
+        }],
+        ["npm:1.0.1", {
+          "packageLocation": "./.yarn/cache/simple-concat-npm-1.0.1-48df70de29-4623960448.zip/node_modules/simple-concat/",
+          "packageDependencies": [
+            ["simple-concat", "npm:1.0.1"]
+          ],
+          "linkType": "HARD",
         }]
       ]],
       ["simple-get", [
@@ -19699,6 +19927,16 @@
             ["simple-concat", "npm:1.0.0"]
           ],
           "linkType": "HARD",
+        }],
+        ["npm:4.0.0", {
+          "packageLocation": "./.yarn/cache/simple-get-npm-4.0.0-14ed0bd6c2-91c007260d.zip/node_modules/simple-get/",
+          "packageDependencies": [
+            ["simple-get", "npm:4.0.0"],
+            ["decompress-response", "npm:6.0.0"],
+            ["once", "npm:1.4.0"],
+            ["simple-concat", "npm:1.0.0"]
+          ],
+          "linkType": "HARD",
         }]
       ]],
       ["simple-swizzle", [
@@ -19787,6 +20025,25 @@
           "linkType": "HARD",
         }]
       ]],
+      ["sonic-boom", [
+        ["npm:1.4.1", {
+          "packageLocation": "./.yarn/cache/sonic-boom-npm-1.4.1-e42b921f99-d681f4ef69.zip/node_modules/sonic-boom/",
+          "packageDependencies": [
+            ["sonic-boom", "npm:1.4.1"],
+            ["atomic-sleep", "npm:1.0.0"],
+            ["flatstr", "npm:1.0.12"]
+          ],
+          "linkType": "HARD",
+        }],
+        ["npm:2.1.0", {
+          "packageLocation": "./.yarn/cache/sonic-boom-npm-2.1.0-cd97469882-05429a8af9.zip/node_modules/sonic-boom/",
+          "packageDependencies": [
+            ["sonic-boom", "npm:2.1.0"],
+            ["atomic-sleep", "npm:1.0.0"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["sort-keys", [
         ["npm:1.1.2", {
           "packageLocation": "./.yarn/cache/sort-keys-npm-1.1.2-2ac0ab2d94-78d9165ed3.zip/node_modules/sort-keys/",
@@ -19966,6 +20223,14 @@
             ["through2", "npm:2.0.5"]
           ],
           "linkType": "HARD",
+        }],
+        ["npm:3.2.2", {
+          "packageLocation": "./.yarn/cache/split2-npm-3.2.2-4ccd21b4f7-04bf20af25.zip/node_modules/split2/",
+          "packageDependencies": [
+            ["split2", "npm:3.2.2"],
+            ["readable-stream", "npm:3.6.0"]
+          ],
+          "linkType": "HARD",
         }]
       ]],
       ["sprintf-js", [
@@ -21182,15 +21447,6 @@
           "linkType": "HARD",
         }]
       ]],
-      ["to-utf8", [
-        ["npm:0.0.1", {
-          "packageLocation": "./.yarn/cache/to-utf8-npm-0.0.1-388604da81-9a96b12e63.zip/node_modules/to-utf8/",
-          "packageDependencies": [
-            ["to-utf8", "npm:0.0.1"]
-          ],
-          "linkType": "HARD",
-        }]
-      ]],
       ["toidentifier", [
         ["npm:1.0.0", {
           "packageLocation": "./.yarn/cache/toidentifier-npm-1.0.0-5dad252f90-95720e8a0f.zip/node_modules/toidentifier/",
@@ -21575,10 +21831,10 @@
         }]
       ]],
       ["underscore", [
-        ["npm:1.7.0", {
-          "packageLocation": "./.yarn/cache/underscore-npm-1.7.0-7d19d583a5-ba1d3ceeb6.zip/node_modules/underscore/",
+        ["npm:1.12.1", {
+          "packageLocation": "./.yarn/cache/underscore-npm-1.12.1-f5ca0889f5-b53ae924fe.zip/node_modules/underscore/",
           "packageDependencies": [
-            ["underscore", "npm:1.7.0"]
+            ["underscore", "npm:1.12.1"]
           ],
           "linkType": "HARD",
         }]
@@ -21875,6 +22131,15 @@
           "linkType": "HARD",
         }]
       ]],
+      ["unxhr", [
+        ["npm:1.0.1", {
+          "packageLocation": "./.yarn/cache/unxhr-npm-1.0.1-a738451b6c-42c7e594e8.zip/node_modules/unxhr/",
+          "packageDependencies": [
+            ["unxhr", "npm:1.0.1"]
+          ],
+          "linkType": "HARD",
+        }]
+      ]],
       ["upath", [
         ["npm:1.2.0", {
           "packageLocation": "./.yarn/cache/upath-npm-1.2.0-ca00ec3398-ecb08ff3e7.zip/node_modules/upath/",
@@ -22136,15 +22401,6 @@
           "linkType": "HARD",
         }]
       ]],
-      ["varint", [
-        ["npm:0.0.3", {
-          "packageLocation": "./.yarn/cache/varint-npm-0.0.3-af21f18e3c-6048cb7573.zip/node_modules/varint/",
-          "packageDependencies": [
-            ["varint", "npm:0.0.3"]
-          ],
-          "linkType": "HARD",
-        }]
-      ]],
       ["vary", [
         ["npm:1.1.2", {
           "packageLocation": "./.yarn/cache/vary-npm-1.1.2-b49f70ae63-591f059f72.zip/node_modules/vary/",
diff --git a/.yarn/build-state.yml b/.yarn/build-state.yml
index 9f2903a..cc253c2 100644
--- a/.yarn/build-state.yml
+++ b/.yarn/build-state.yml
@@ -17,10 +17,6 @@
 "c1e70a98c194359902d396160440b8d6aafc026faec0b483b98d24dac1a2756f6ebdb0d5b12c609339320ad38e22580c8c8b6e70edfc9c5019a30d10094fd1fb":
   e808baf3f11f226fe81e9046a71a3f352709c37928ad41cf96424dad90b06c55a9e9bd520c73774881157c2287fca9275a3290dd782d3267818cacd413f81ea7
 
-# jsonpath@npm:1.0.2
-"15a9845dcac098aea0fce6305149a650048254230879c676eaa1f0c5c7d0a5e7f876de3520b3cdd4f066307a91b2809cc494aaab558fa55d7a4e34efae876ce0":
-  8f051ecb41b911853190b93b0f8c53a829f691cdc048b92994fc186b3ad4a38f1ea5423e3df7f92ef7e2e1229b635673384310dd2db577b01ff5a0a0a3fecc0c
-
 # netlify-cli@npm:2.69.11
 "1bef96be32000472bc703fad626b4a6fa1a569c541b606746eab97f205f992a1d2729de82f1bbe67078d23a08ea5cb3fa70a36b171b75e37e9595e42812a57db":
   9344e4b42d2d7dbc63e46f108ab126cb4e7c66ddde6da6386f5f012bcfe84b1cab60f58ced7c591df8a4ddfc9135bd746912a82bf62959f98cf0dd5ea252956d
diff --git a/.yarn/cache/@antora-asciidoc-loader-npm-3.0.0-alpha.1-702afd7c51-6aac46da81.zip b/.yarn/cache/@antora-asciidoc-loader-npm-3.0.0-alpha.1-702afd7c51-6aac46da81.zip
deleted file mode 100644
index 2a20f15..0000000
--- a/.yarn/cache/@antora-asciidoc-loader-npm-3.0.0-alpha.1-702afd7c51-6aac46da81.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/@antora-asciidoc-loader-npm-3.0.0-alpha.9-39bd100709-de20a2db05.zip b/.yarn/cache/@antora-asciidoc-loader-npm-3.0.0-alpha.9-39bd100709-de20a2db05.zip
new file mode 100644
index 0000000..0ff1cf2
--- /dev/null
+++ b/.yarn/cache/@antora-asciidoc-loader-npm-3.0.0-alpha.9-39bd100709-de20a2db05.zip
Binary files differ
diff --git a/.yarn/cache/@antora-cli-npm-3.0.0-alpha.1-1c0aa456f2-ebb9731dae.zip b/.yarn/cache/@antora-cli-npm-3.0.0-alpha.1-1c0aa456f2-ebb9731dae.zip
deleted file mode 100644
index f64ea00..0000000
--- a/.yarn/cache/@antora-cli-npm-3.0.0-alpha.1-1c0aa456f2-ebb9731dae.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/@antora-cli-npm-3.0.0-alpha.9-eb1976c89e-20efdb6945.zip b/.yarn/cache/@antora-cli-npm-3.0.0-alpha.9-eb1976c89e-20efdb6945.zip
new file mode 100644
index 0000000..a2f294c
--- /dev/null
+++ b/.yarn/cache/@antora-cli-npm-3.0.0-alpha.9-eb1976c89e-20efdb6945.zip
Binary files differ
diff --git a/.yarn/cache/@antora-content-aggregator-npm-3.0.0-alpha.1-d9804fca38-b056cafcc6.zip b/.yarn/cache/@antora-content-aggregator-npm-3.0.0-alpha.1-d9804fca38-b056cafcc6.zip
deleted file mode 100644
index 0c6bdba..0000000
--- a/.yarn/cache/@antora-content-aggregator-npm-3.0.0-alpha.1-d9804fca38-b056cafcc6.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/@antora-content-aggregator-npm-3.0.0-alpha.9-8208cc5339-df0c07c16e.zip b/.yarn/cache/@antora-content-aggregator-npm-3.0.0-alpha.9-8208cc5339-df0c07c16e.zip
new file mode 100644
index 0000000..d204cf9
--- /dev/null
+++ b/.yarn/cache/@antora-content-aggregator-npm-3.0.0-alpha.9-8208cc5339-df0c07c16e.zip
Binary files differ
diff --git a/.yarn/cache/@antora-content-classifier-npm-3.0.0-alpha.1-8a759f4f7f-616d47e236.zip b/.yarn/cache/@antora-content-classifier-npm-3.0.0-alpha.1-8a759f4f7f-616d47e236.zip
deleted file mode 100644
index 7418d00..0000000
--- a/.yarn/cache/@antora-content-classifier-npm-3.0.0-alpha.1-8a759f4f7f-616d47e236.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/@antora-content-classifier-npm-3.0.0-alpha.9-9693505f14-f7c0f636c1.zip b/.yarn/cache/@antora-content-classifier-npm-3.0.0-alpha.9-9693505f14-f7c0f636c1.zip
new file mode 100644
index 0000000..05cb6e8
--- /dev/null
+++ b/.yarn/cache/@antora-content-classifier-npm-3.0.0-alpha.9-9693505f14-f7c0f636c1.zip
Binary files differ
diff --git a/.yarn/cache/@antora-document-converter-npm-3.0.0-alpha.1-21f2880495-7242e9f581.zip b/.yarn/cache/@antora-document-converter-npm-3.0.0-alpha.9-d095751a33-f3d24466e4.zip
similarity index 79%
rename from .yarn/cache/@antora-document-converter-npm-3.0.0-alpha.1-21f2880495-7242e9f581.zip
rename to .yarn/cache/@antora-document-converter-npm-3.0.0-alpha.9-d095751a33-f3d24466e4.zip
index e356276..3038dda 100644
--- a/.yarn/cache/@antora-document-converter-npm-3.0.0-alpha.1-21f2880495-7242e9f581.zip
+++ b/.yarn/cache/@antora-document-converter-npm-3.0.0-alpha.9-d095751a33-f3d24466e4.zip
Binary files differ
diff --git a/.yarn/cache/@antora-expand-path-helper-npm-1.0.0-e5108ac24e-7d6aea07f4.zip b/.yarn/cache/@antora-expand-path-helper-npm-1.0.0-e5108ac24e-7d6aea07f4.zip
deleted file mode 100644
index 134f7ff..0000000
--- a/.yarn/cache/@antora-expand-path-helper-npm-1.0.0-e5108ac24e-7d6aea07f4.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/@antora-expand-path-helper-npm-2.0.0-6eb9f548f1-c1b6ef89e6.zip b/.yarn/cache/@antora-expand-path-helper-npm-2.0.0-6eb9f548f1-c1b6ef89e6.zip
new file mode 100644
index 0000000..5b0f1f4
--- /dev/null
+++ b/.yarn/cache/@antora-expand-path-helper-npm-2.0.0-6eb9f548f1-c1b6ef89e6.zip
Binary files differ
diff --git a/.yarn/cache/@antora-logger-npm-3.0.0-alpha.9-9aa78cf144-f14b81190a.zip b/.yarn/cache/@antora-logger-npm-3.0.0-alpha.9-9aa78cf144-f14b81190a.zip
new file mode 100644
index 0000000..9603a8a
--- /dev/null
+++ b/.yarn/cache/@antora-logger-npm-3.0.0-alpha.9-9aa78cf144-f14b81190a.zip
Binary files differ
diff --git a/.yarn/cache/@antora-navigation-builder-npm-3.0.0-alpha.1-eddb0496a5-5bcfd7cb42.zip b/.yarn/cache/@antora-navigation-builder-npm-3.0.0-alpha.9-b1ce47f034-6650ee0f07.zip
similarity index 79%
rename from .yarn/cache/@antora-navigation-builder-npm-3.0.0-alpha.1-eddb0496a5-5bcfd7cb42.zip
rename to .yarn/cache/@antora-navigation-builder-npm-3.0.0-alpha.9-b1ce47f034-6650ee0f07.zip
index fc771c3..fb98da8 100644
--- a/.yarn/cache/@antora-navigation-builder-npm-3.0.0-alpha.1-eddb0496a5-5bcfd7cb42.zip
+++ b/.yarn/cache/@antora-navigation-builder-npm-3.0.0-alpha.9-b1ce47f034-6650ee0f07.zip
Binary files differ
diff --git a/.yarn/cache/@antora-page-composer-npm-3.0.0-alpha.1-afa9f00b81-0ce1453252.zip b/.yarn/cache/@antora-page-composer-npm-3.0.0-alpha.1-afa9f00b81-0ce1453252.zip
deleted file mode 100644
index e305b53..0000000
--- a/.yarn/cache/@antora-page-composer-npm-3.0.0-alpha.1-afa9f00b81-0ce1453252.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/@antora-page-composer-npm-3.0.0-alpha.9-28dc4141c7-b3b367e7c8.zip b/.yarn/cache/@antora-page-composer-npm-3.0.0-alpha.9-28dc4141c7-b3b367e7c8.zip
new file mode 100644
index 0000000..f14c6f2
--- /dev/null
+++ b/.yarn/cache/@antora-page-composer-npm-3.0.0-alpha.9-28dc4141c7-b3b367e7c8.zip
Binary files differ
diff --git a/.yarn/cache/@antora-playbook-builder-npm-3.0.0-alpha.1-2b5b2a2bb0-28aa8151bf.zip b/.yarn/cache/@antora-playbook-builder-npm-3.0.0-alpha.1-2b5b2a2bb0-28aa8151bf.zip
deleted file mode 100644
index ce17606..0000000
--- a/.yarn/cache/@antora-playbook-builder-npm-3.0.0-alpha.1-2b5b2a2bb0-28aa8151bf.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/@antora-playbook-builder-npm-3.0.0-alpha.9-e8a1037536-7e74daf632.zip b/.yarn/cache/@antora-playbook-builder-npm-3.0.0-alpha.9-e8a1037536-7e74daf632.zip
new file mode 100644
index 0000000..b02a7a9
--- /dev/null
+++ b/.yarn/cache/@antora-playbook-builder-npm-3.0.0-alpha.9-e8a1037536-7e74daf632.zip
Binary files differ
diff --git a/.yarn/cache/@antora-redirect-producer-npm-3.0.0-alpha.1-97be36bbff-5913d7d804.zip b/.yarn/cache/@antora-redirect-producer-npm-3.0.0-alpha.9-06dbbbbeda-11906505e3.zip
similarity index 74%
rename from .yarn/cache/@antora-redirect-producer-npm-3.0.0-alpha.1-97be36bbff-5913d7d804.zip
rename to .yarn/cache/@antora-redirect-producer-npm-3.0.0-alpha.9-06dbbbbeda-11906505e3.zip
index 03003da..62c7a6a 100644
--- a/.yarn/cache/@antora-redirect-producer-npm-3.0.0-alpha.1-97be36bbff-5913d7d804.zip
+++ b/.yarn/cache/@antora-redirect-producer-npm-3.0.0-alpha.9-06dbbbbeda-11906505e3.zip
Binary files differ
diff --git a/.yarn/cache/@antora-site-generator-default-npm-3.0.0-alpha.1-4687bd0709-9c517b4c19.zip b/.yarn/cache/@antora-site-generator-default-npm-3.0.0-alpha.1-4687bd0709-9c517b4c19.zip
deleted file mode 100644
index 692b3c8..0000000
--- a/.yarn/cache/@antora-site-generator-default-npm-3.0.0-alpha.1-4687bd0709-9c517b4c19.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/@antora-site-generator-default-npm-3.0.0-alpha.9-30140d24cc-b0ee477650.zip b/.yarn/cache/@antora-site-generator-default-npm-3.0.0-alpha.9-30140d24cc-b0ee477650.zip
new file mode 100644
index 0000000..37cc37f
--- /dev/null
+++ b/.yarn/cache/@antora-site-generator-default-npm-3.0.0-alpha.9-30140d24cc-b0ee477650.zip
Binary files differ
diff --git a/.yarn/cache/@antora-site-mapper-npm-3.0.0-alpha.1-0d5e3ff0a2-a0a4857b34.zip b/.yarn/cache/@antora-site-mapper-npm-3.0.0-alpha.9-6edc224373-7d15e9c5c4.zip
similarity index 80%
rename from .yarn/cache/@antora-site-mapper-npm-3.0.0-alpha.1-0d5e3ff0a2-a0a4857b34.zip
rename to .yarn/cache/@antora-site-mapper-npm-3.0.0-alpha.9-6edc224373-7d15e9c5c4.zip
index 3d2e0d6..6a9b6f6 100644
--- a/.yarn/cache/@antora-site-mapper-npm-3.0.0-alpha.1-0d5e3ff0a2-a0a4857b34.zip
+++ b/.yarn/cache/@antora-site-mapper-npm-3.0.0-alpha.9-6edc224373-7d15e9c5c4.zip
Binary files differ
diff --git a/.yarn/cache/@antora-site-publisher-npm-3.0.0-alpha.1-6578cdbeb8-76b9ad8dab.zip b/.yarn/cache/@antora-site-publisher-npm-3.0.0-alpha.1-6578cdbeb8-76b9ad8dab.zip
deleted file mode 100644
index 8149a0a..0000000
--- a/.yarn/cache/@antora-site-publisher-npm-3.0.0-alpha.1-6578cdbeb8-76b9ad8dab.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/@antora-site-publisher-npm-3.0.0-alpha.9-58e41a2f06-71d10e41e5.zip b/.yarn/cache/@antora-site-publisher-npm-3.0.0-alpha.9-58e41a2f06-71d10e41e5.zip
new file mode 100644
index 0000000..9abab4f
--- /dev/null
+++ b/.yarn/cache/@antora-site-publisher-npm-3.0.0-alpha.9-58e41a2f06-71d10e41e5.zip
Binary files differ
diff --git a/.yarn/cache/@antora-ui-loader-npm-3.0.0-alpha.1-4469e2dfe8-eae6028e6f.zip b/.yarn/cache/@antora-ui-loader-npm-3.0.0-alpha.1-4469e2dfe8-eae6028e6f.zip
deleted file mode 100644
index 4b08440..0000000
--- a/.yarn/cache/@antora-ui-loader-npm-3.0.0-alpha.1-4469e2dfe8-eae6028e6f.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/@antora-ui-loader-npm-3.0.0-alpha.9-953f68744d-a09c08a867.zip b/.yarn/cache/@antora-ui-loader-npm-3.0.0-alpha.9-953f68744d-a09c08a867.zip
new file mode 100644
index 0000000..8edf45b
--- /dev/null
+++ b/.yarn/cache/@antora-ui-loader-npm-3.0.0-alpha.9-953f68744d-a09c08a867.zip
Binary files differ
diff --git a/.yarn/cache/@antora-user-require-helper-npm-2.0.0-3539a91475-8b2080b8d3.zip b/.yarn/cache/@antora-user-require-helper-npm-2.0.0-3539a91475-8b2080b8d3.zip
new file mode 100644
index 0000000..e1d04bb
--- /dev/null
+++ b/.yarn/cache/@antora-user-require-helper-npm-2.0.0-3539a91475-8b2080b8d3.zip
Binary files differ
diff --git a/.yarn/cache/@antora-xref-validator-https-1130667dd0-cac4639845.zip b/.yarn/cache/@antora-xref-validator-https-1130667dd0-cac4639845.zip
deleted file mode 100644
index b8c2328..0000000
--- a/.yarn/cache/@antora-xref-validator-https-1130667dd0-cac4639845.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/@asciidoctor-core-npm-2.2.5-1744f2e2b7-36efd6f631.zip b/.yarn/cache/@asciidoctor-core-npm-2.2.5-1744f2e2b7-36efd6f631.zip
new file mode 100644
index 0000000..5aa2a04
--- /dev/null
+++ b/.yarn/cache/@asciidoctor-core-npm-2.2.5-1744f2e2b7-36efd6f631.zip
Binary files differ
diff --git a/.yarn/cache/@djencks-asciidoctor-jsonpath-npm-0.0.1-6ad9bf8c33-55493d1df5.zip b/.yarn/cache/@djencks-asciidoctor-jsonpath-npm-0.0.1-6ad9bf8c33-55493d1df5.zip
deleted file mode 100644
index e6256c3..0000000
--- a/.yarn/cache/@djencks-asciidoctor-jsonpath-npm-0.0.1-6ad9bf8c33-55493d1df5.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/@djencks-asciidoctor-jsonpath-npm-0.0.4-daa788a548-ba33c6567c.zip b/.yarn/cache/@djencks-asciidoctor-jsonpath-npm-0.0.4-daa788a548-ba33c6567c.zip
new file mode 100644
index 0000000..0b91cdb
--- /dev/null
+++ b/.yarn/cache/@djencks-asciidoctor-jsonpath-npm-0.0.4-daa788a548-ba33c6567c.zip
Binary files differ
diff --git a/.yarn/cache/@hapi-bourne-npm-2.0.0-8eeda7e0a2-97a3e6d44c.zip b/.yarn/cache/@hapi-bourne-npm-2.0.0-8eeda7e0a2-97a3e6d44c.zip
new file mode 100644
index 0000000..42723b4
--- /dev/null
+++ b/.yarn/cache/@hapi-bourne-npm-2.0.0-8eeda7e0a2-97a3e6d44c.zip
Binary files differ
diff --git a/.yarn/cache/@iarna-toml-npm-2.2.5-6da1399e8e-929a8516a2.zip b/.yarn/cache/@iarna-toml-npm-2.2.5-6da1399e8e-929a8516a2.zip
new file mode 100644
index 0000000..bb0d8c9
--- /dev/null
+++ b/.yarn/cache/@iarna-toml-npm-2.2.5-6da1399e8e-929a8516a2.zip
Binary files differ
diff --git a/.yarn/cache/@sindresorhus-is-npm-3.1.2-bcdc8ac1e4-da0047761e.zip b/.yarn/cache/@sindresorhus-is-npm-3.1.2-bcdc8ac1e4-da0047761e.zip
deleted file mode 100644
index 49ce6f0..0000000
--- a/.yarn/cache/@sindresorhus-is-npm-3.1.2-bcdc8ac1e4-da0047761e.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/argparse-npm-2.0.1-faff7999e6-160b7a25d2.zip b/.yarn/cache/argparse-npm-2.0.1-faff7999e6-160b7a25d2.zip
new file mode 100644
index 0000000..02d76b1
--- /dev/null
+++ b/.yarn/cache/argparse-npm-2.0.1-faff7999e6-160b7a25d2.zip
Binary files differ
diff --git a/.yarn/cache/args-npm-5.0.1-cd7b0f9dcc-2c322bff70.zip b/.yarn/cache/args-npm-5.0.1-cd7b0f9dcc-2c322bff70.zip
new file mode 100644
index 0000000..ee524ef
--- /dev/null
+++ b/.yarn/cache/args-npm-5.0.1-cd7b0f9dcc-2c322bff70.zip
Binary files differ
diff --git a/.yarn/cache/asciidoctor-opal-runtime-npm-0.3.3-e88f7cb75f-508d892b1c.zip b/.yarn/cache/asciidoctor-opal-runtime-npm-0.3.3-e88f7cb75f-508d892b1c.zip
new file mode 100644
index 0000000..366ef0e
--- /dev/null
+++ b/.yarn/cache/asciidoctor-opal-runtime-npm-0.3.3-e88f7cb75f-508d892b1c.zip
Binary files differ
diff --git a/.yarn/cache/atomic-sleep-npm-1.0.0-17d8a762a3-2c6fa68caf.zip b/.yarn/cache/atomic-sleep-npm-1.0.0-17d8a762a3-2c6fa68caf.zip
new file mode 100644
index 0000000..d2693db
--- /dev/null
+++ b/.yarn/cache/atomic-sleep-npm-1.0.0-17d8a762a3-2c6fa68caf.zip
Binary files differ
diff --git a/.yarn/cache/base64-js-npm-0.0.2-10894add71-b716ef61b9.zip b/.yarn/cache/base64-js-npm-0.0.2-10894add71-b716ef61b9.zip
deleted file mode 100644
index 6ed0455..0000000
--- a/.yarn/cache/base64-js-npm-0.0.2-10894add71-b716ef61b9.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/bops-npm-0.0.7-1d117ccbd6-8d499cd473.zip b/.yarn/cache/bops-npm-0.0.7-1d117ccbd6-8d499cd473.zip
deleted file mode 100644
index 27ec505..0000000
--- a/.yarn/cache/bops-npm-0.0.7-1d117ccbd6-8d499cd473.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/camelcase-npm-5.0.0-c808398846-73567fa11f.zip b/.yarn/cache/camelcase-npm-5.0.0-c808398846-73567fa11f.zip
new file mode 100644
index 0000000..8973de7
--- /dev/null
+++ b/.yarn/cache/camelcase-npm-5.0.0-c808398846-73567fa11f.zip
Binary files differ
diff --git a/.yarn/cache/colorette-npm-1.4.0-7e94b44dc3-7ef8e1ca16.zip b/.yarn/cache/colorette-npm-1.4.0-7e94b44dc3-7ef8e1ca16.zip
new file mode 100644
index 0000000..02fa135
--- /dev/null
+++ b/.yarn/cache/colorette-npm-1.4.0-7e94b44dc3-7ef8e1ca16.zip
Binary files differ
diff --git a/.yarn/cache/commander-npm-6.1.0-126b786d0f-ef1e310c3f.zip b/.yarn/cache/commander-npm-6.1.0-126b786d0f-ef1e310c3f.zip
deleted file mode 100644
index 378333d..0000000
--- a/.yarn/cache/commander-npm-6.1.0-126b786d0f-ef1e310c3f.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/commander-npm-7.2.0-19178180f8-bdc0eca5e2.zip b/.yarn/cache/commander-npm-7.2.0-19178180f8-bdc0eca5e2.zip
new file mode 100644
index 0000000..343005e
--- /dev/null
+++ b/.yarn/cache/commander-npm-7.2.0-19178180f8-bdc0eca5e2.zip
Binary files differ
diff --git a/.yarn/cache/convict-npm-6.0.0-88e8bdbf48-6fc69e1058.zip b/.yarn/cache/convict-npm-6.0.0-88e8bdbf48-6fc69e1058.zip
deleted file mode 100644
index a9200a7..0000000
--- a/.yarn/cache/convict-npm-6.0.0-88e8bdbf48-6fc69e1058.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/convict-npm-6.1.0-3c39748d83-dce4843743.zip b/.yarn/cache/convict-npm-6.1.0-3c39748d83-dce4843743.zip
new file mode 100644
index 0000000..37d04c6
--- /dev/null
+++ b/.yarn/cache/convict-npm-6.1.0-3c39748d83-dce4843743.zip
Binary files differ
diff --git a/.yarn/cache/dateformat-npm-4.5.1-ee0ca75464-d5d08fd36f.zip b/.yarn/cache/dateformat-npm-4.5.1-ee0ca75464-d5d08fd36f.zip
new file mode 100644
index 0000000..cf76863
--- /dev/null
+++ b/.yarn/cache/dateformat-npm-4.5.1-ee0ca75464-d5d08fd36f.zip
Binary files differ
diff --git a/.yarn/cache/fast-redact-npm-3.0.2-98d6f1d433-afb8b397dc.zip b/.yarn/cache/fast-redact-npm-3.0.2-98d6f1d433-afb8b397dc.zip
new file mode 100644
index 0000000..f9660ab
--- /dev/null
+++ b/.yarn/cache/fast-redact-npm-3.0.2-98d6f1d433-afb8b397dc.zip
Binary files differ
diff --git a/.yarn/cache/fast-safe-stringify-npm-2.1.1-7ce89033ca-79c9940151.zip b/.yarn/cache/fast-safe-stringify-npm-2.1.1-7ce89033ca-79c9940151.zip
new file mode 100644
index 0000000..e3e472a
--- /dev/null
+++ b/.yarn/cache/fast-safe-stringify-npm-2.1.1-7ce89033ca-79c9940151.zip
Binary files differ
diff --git a/.yarn/cache/fastify-warning-npm-0.2.0-f9c53563fc-17b9e2ffdf.zip b/.yarn/cache/fastify-warning-npm-0.2.0-f9c53563fc-17b9e2ffdf.zip
new file mode 100644
index 0000000..e491891
--- /dev/null
+++ b/.yarn/cache/fastify-warning-npm-0.2.0-f9c53563fc-17b9e2ffdf.zip
Binary files differ
diff --git a/.yarn/cache/flatstr-npm-1.0.12-4311d37d16-2803767f91.zip b/.yarn/cache/flatstr-npm-1.0.12-4311d37d16-2803767f91.zip
new file mode 100644
index 0000000..69b1a02
--- /dev/null
+++ b/.yarn/cache/flatstr-npm-1.0.12-4311d37d16-2803767f91.zip
Binary files differ
diff --git a/.yarn/cache/git-apply-delta-npm-0.0.7-6258250fd3-ab9c5cc994.zip b/.yarn/cache/git-apply-delta-npm-0.0.7-6258250fd3-ab9c5cc994.zip
deleted file mode 100644
index 2e287e2..0000000
--- a/.yarn/cache/git-apply-delta-npm-0.0.7-6258250fd3-ab9c5cc994.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/glob-npm-7.1.3-c65cc4bde2-d9d1460afd.zip b/.yarn/cache/glob-npm-7.1.3-c65cc4bde2-d9d1460afd.zip
new file mode 100644
index 0000000..da206d9
--- /dev/null
+++ b/.yarn/cache/glob-npm-7.1.3-c65cc4bde2-d9d1460afd.zip
Binary files differ
diff --git a/.yarn/cache/globalyzer-npm-0.1.4-d6bb9fc6f1-31b1ffae74.zip b/.yarn/cache/globalyzer-npm-0.1.4-d6bb9fc6f1-31b1ffae74.zip
deleted file mode 100644
index 7e0312f..0000000
--- a/.yarn/cache/globalyzer-npm-0.1.4-d6bb9fc6f1-31b1ffae74.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/globrex-npm-0.1.2-ddda94f2d0-78825a08ab.zip b/.yarn/cache/globrex-npm-0.1.2-ddda94f2d0-78825a08ab.zip
deleted file mode 100644
index 5f1f16f..0000000
--- a/.yarn/cache/globrex-npm-0.1.2-ddda94f2d0-78825a08ab.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/got-npm-11.7.0-cacb9b44fc-780b4b1d33.zip b/.yarn/cache/got-npm-11.7.0-cacb9b44fc-780b4b1d33.zip
deleted file mode 100644
index fa684f2..0000000
--- a/.yarn/cache/got-npm-11.7.0-cacb9b44fc-780b4b1d33.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/gulp-vinyl-zip-npm-2.5.0-05871c0178-2744a6b750.zip b/.yarn/cache/gulp-vinyl-zip-npm-2.5.0-05871c0178-2744a6b750.zip
new file mode 100644
index 0000000..889cdd4
--- /dev/null
+++ b/.yarn/cache/gulp-vinyl-zip-npm-2.5.0-05871c0178-2744a6b750.zip
Binary files differ
diff --git a/.yarn/cache/hpagent-npm-0.1.2-f4fe59bad9-a94ce21d48.zip b/.yarn/cache/hpagent-npm-0.1.2-f4fe59bad9-a94ce21d48.zip
new file mode 100644
index 0000000..72164a3
--- /dev/null
+++ b/.yarn/cache/hpagent-npm-0.1.2-f4fe59bad9-a94ce21d48.zip
Binary files differ
diff --git a/.yarn/cache/isomorphic-git-npm-0.78.5-1cd8475cda-a250410f10.zip b/.yarn/cache/isomorphic-git-npm-0.78.5-1cd8475cda-a250410f10.zip
deleted file mode 100644
index 53d2501..0000000
--- a/.yarn/cache/isomorphic-git-npm-0.78.5-1cd8475cda-a250410f10.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/isomorphic-git-npm-1.10.0-a7769cd2ba-f53bef67dc.zip b/.yarn/cache/isomorphic-git-npm-1.10.0-a7769cd2ba-f53bef67dc.zip
new file mode 100644
index 0000000..f0ebf6a
--- /dev/null
+++ b/.yarn/cache/isomorphic-git-npm-1.10.0-a7769cd2ba-f53bef67dc.zip
Binary files differ
diff --git a/.yarn/cache/joycon-npm-3.0.1-1489fed95a-db64c93cf0.zip b/.yarn/cache/joycon-npm-3.0.1-1489fed95a-db64c93cf0.zip
new file mode 100644
index 0000000..a6bb7ed
--- /dev/null
+++ b/.yarn/cache/joycon-npm-3.0.1-1489fed95a-db64c93cf0.zip
Binary files differ
diff --git a/.yarn/cache/js-yaml-npm-4.1.0-3606f32312-8973cf4296.zip b/.yarn/cache/js-yaml-npm-4.1.0-3606f32312-8973cf4296.zip
new file mode 100644
index 0000000..f06e004
--- /dev/null
+++ b/.yarn/cache/js-yaml-npm-4.1.0-3606f32312-8973cf4296.zip
Binary files differ
diff --git a/.yarn/cache/json5-npm-2.2.0-da49dc7cb5-07b1f90c28.zip b/.yarn/cache/json5-npm-2.2.0-da49dc7cb5-07b1f90c28.zip
new file mode 100644
index 0000000..4163029
--- /dev/null
+++ b/.yarn/cache/json5-npm-2.2.0-da49dc7cb5-07b1f90c28.zip
Binary files differ
diff --git a/.yarn/cache/jsonpath-npm-1.0.2-15a9845dca-0f85de5b28.zip b/.yarn/cache/jsonpath-npm-1.0.2-15a9845dca-0f85de5b28.zip
deleted file mode 100644
index b47e78e..0000000
--- a/.yarn/cache/jsonpath-npm-1.0.2-15a9845dca-0f85de5b28.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/jsonpath-npm-1.1.1-d88994ce7e-4741e517f4.zip b/.yarn/cache/jsonpath-npm-1.1.1-d88994ce7e-4741e517f4.zip
new file mode 100644
index 0000000..4ea1861
--- /dev/null
+++ b/.yarn/cache/jsonpath-npm-1.1.1-d88994ce7e-4741e517f4.zip
Binary files differ
diff --git a/.yarn/cache/leven-npm-2.1.0-19f0a16606-fcd39dd4d7.zip b/.yarn/cache/leven-npm-2.1.0-19f0a16606-fcd39dd4d7.zip
new file mode 100644
index 0000000..3bc91ce
--- /dev/null
+++ b/.yarn/cache/leven-npm-2.1.0-19f0a16606-fcd39dd4d7.zip
Binary files differ
diff --git a/.yarn/cache/marky-npm-1.2.1-386354fb42-b830936558.zip b/.yarn/cache/marky-npm-1.2.1-386354fb42-b830936558.zip
deleted file mode 100644
index d087f08..0000000
--- a/.yarn/cache/marky-npm-1.2.1-386354fb42-b830936558.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/matcher-npm-3.0.0-d32d29365e-4b54c0a8ed.zip b/.yarn/cache/matcher-npm-3.0.0-d32d29365e-4b54c0a8ed.zip
deleted file mode 100644
index c0cad2b..0000000
--- a/.yarn/cache/matcher-npm-3.0.0-d32d29365e-4b54c0a8ed.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/matcher-npm-4.0.0-418060075c-457f90baba.zip b/.yarn/cache/matcher-npm-4.0.0-418060075c-457f90baba.zip
new file mode 100644
index 0000000..26fe78a
--- /dev/null
+++ b/.yarn/cache/matcher-npm-4.0.0-418060075c-457f90baba.zip
Binary files differ
diff --git a/.yarn/cache/mri-npm-1.1.4-d22a399f26-5ea30a4f58.zip b/.yarn/cache/mri-npm-1.1.4-d22a399f26-5ea30a4f58.zip
new file mode 100644
index 0000000..78302c6
--- /dev/null
+++ b/.yarn/cache/mri-npm-1.1.4-d22a399f26-5ea30a4f58.zip
Binary files differ
diff --git a/.yarn/cache/multi-progress-npm-3.0.0-66dc1fb6ae-416a5bb9ca.zip b/.yarn/cache/multi-progress-npm-3.0.0-66dc1fb6ae-416a5bb9ca.zip
deleted file mode 100644
index 87702be..0000000
--- a/.yarn/cache/multi-progress-npm-3.0.0-66dc1fb6ae-416a5bb9ca.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/multi-progress-npm-4.0.0-e647cd6e59-18d1c57620.zip b/.yarn/cache/multi-progress-npm-4.0.0-e647cd6e59-18d1c57620.zip
new file mode 100644
index 0000000..828153e
--- /dev/null
+++ b/.yarn/cache/multi-progress-npm-4.0.0-e647cd6e59-18d1c57620.zip
Binary files differ
diff --git a/.yarn/cache/node-gzip-npm-1.1.2-b55f6ea514-161fb530c6.zip b/.yarn/cache/node-gzip-npm-1.1.2-b55f6ea514-161fb530c6.zip
deleted file mode 100644
index bd2401d..0000000
--- a/.yarn/cache/node-gzip-npm-1.1.2-b55f6ea514-161fb530c6.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/picomatch-npm-2.3.0-5e60e6c82d-80113a0fb7.zip b/.yarn/cache/picomatch-npm-2.3.0-5e60e6c82d-80113a0fb7.zip
new file mode 100644
index 0000000..2bd0062
--- /dev/null
+++ b/.yarn/cache/picomatch-npm-2.3.0-5e60e6c82d-80113a0fb7.zip
Binary files differ
diff --git a/.yarn/cache/pino-npm-6.13.2-60b212cb2e-bd490e31b1.zip b/.yarn/cache/pino-npm-6.13.2-60b212cb2e-bd490e31b1.zip
new file mode 100644
index 0000000..80d431a
--- /dev/null
+++ b/.yarn/cache/pino-npm-6.13.2-60b212cb2e-bd490e31b1.zip
Binary files differ
diff --git a/.yarn/cache/pino-pretty-npm-5.1.3-488a9c8f4f-838eeb2104.zip b/.yarn/cache/pino-pretty-npm-5.1.3-488a9c8f4f-838eeb2104.zip
new file mode 100644
index 0000000..bfd5c54
--- /dev/null
+++ b/.yarn/cache/pino-pretty-npm-5.1.3-488a9c8f4f-838eeb2104.zip
Binary files differ
diff --git a/.yarn/cache/pino-pretty-npm-6.0.0-97e1f1f254-865a5ee324.zip b/.yarn/cache/pino-pretty-npm-6.0.0-97e1f1f254-865a5ee324.zip
new file mode 100644
index 0000000..75b350a
--- /dev/null
+++ b/.yarn/cache/pino-pretty-npm-6.0.0-97e1f1f254-865a5ee324.zip
Binary files differ
diff --git a/.yarn/cache/pino-std-serializers-npm-3.2.0-9fd67503a4-fb386422f0.zip b/.yarn/cache/pino-std-serializers-npm-3.2.0-9fd67503a4-fb386422f0.zip
new file mode 100644
index 0000000..ff0d83b
--- /dev/null
+++ b/.yarn/cache/pino-std-serializers-npm-3.2.0-9fd67503a4-fb386422f0.zip
Binary files differ
diff --git a/.yarn/cache/quick-format-unescaped-npm-4.0.3-5c9b4670f7-08bbbe4937.zip b/.yarn/cache/quick-format-unescaped-npm-4.0.3-5c9b4670f7-08bbbe4937.zip
new file mode 100644
index 0000000..43ac629
--- /dev/null
+++ b/.yarn/cache/quick-format-unescaped-npm-4.0.3-5c9b4670f7-08bbbe4937.zip
Binary files differ
diff --git a/.yarn/cache/rfdc-npm-1.3.0-272f288ad8-34dd5c5acf.zip b/.yarn/cache/rfdc-npm-1.3.0-272f288ad8-34dd5c5acf.zip
new file mode 100644
index 0000000..61fd75c
--- /dev/null
+++ b/.yarn/cache/rfdc-npm-1.3.0-272f288ad8-34dd5c5acf.zip
Binary files differ
diff --git a/.yarn/cache/should-proxy-npm-1.0.4-265b064fed-4787b9960e.zip b/.yarn/cache/should-proxy-npm-1.0.4-265b064fed-4787b9960e.zip
new file mode 100644
index 0000000..bf1d54a
--- /dev/null
+++ b/.yarn/cache/should-proxy-npm-1.0.4-265b064fed-4787b9960e.zip
Binary files differ
diff --git a/.yarn/cache/simple-concat-npm-1.0.1-48df70de29-4623960448.zip b/.yarn/cache/simple-concat-npm-1.0.1-48df70de29-4623960448.zip
new file mode 100644
index 0000000..61e9a50
--- /dev/null
+++ b/.yarn/cache/simple-concat-npm-1.0.1-48df70de29-4623960448.zip
Binary files differ
diff --git a/.yarn/cache/simple-get-npm-4.0.0-14ed0bd6c2-91c007260d.zip b/.yarn/cache/simple-get-npm-4.0.0-14ed0bd6c2-91c007260d.zip
new file mode 100644
index 0000000..f80643a
--- /dev/null
+++ b/.yarn/cache/simple-get-npm-4.0.0-14ed0bd6c2-91c007260d.zip
Binary files differ
diff --git a/.yarn/cache/sonic-boom-npm-1.4.1-e42b921f99-d681f4ef69.zip b/.yarn/cache/sonic-boom-npm-1.4.1-e42b921f99-d681f4ef69.zip
new file mode 100644
index 0000000..88fe0da
--- /dev/null
+++ b/.yarn/cache/sonic-boom-npm-1.4.1-e42b921f99-d681f4ef69.zip
Binary files differ
diff --git a/.yarn/cache/sonic-boom-npm-2.1.0-cd97469882-05429a8af9.zip b/.yarn/cache/sonic-boom-npm-2.1.0-cd97469882-05429a8af9.zip
new file mode 100644
index 0000000..7d2720b
--- /dev/null
+++ b/.yarn/cache/sonic-boom-npm-2.1.0-cd97469882-05429a8af9.zip
Binary files differ
diff --git a/.yarn/cache/split2-npm-3.2.2-4ccd21b4f7-04bf20af25.zip b/.yarn/cache/split2-npm-3.2.2-4ccd21b4f7-04bf20af25.zip
new file mode 100644
index 0000000..f031b26
--- /dev/null
+++ b/.yarn/cache/split2-npm-3.2.2-4ccd21b4f7-04bf20af25.zip
Binary files differ
diff --git a/.yarn/cache/to-utf8-npm-0.0.1-388604da81-9a96b12e63.zip b/.yarn/cache/to-utf8-npm-0.0.1-388604da81-9a96b12e63.zip
deleted file mode 100644
index b347001..0000000
--- a/.yarn/cache/to-utf8-npm-0.0.1-388604da81-9a96b12e63.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/underscore-npm-1.12.1-f5ca0889f5-b53ae924fe.zip b/.yarn/cache/underscore-npm-1.12.1-f5ca0889f5-b53ae924fe.zip
new file mode 100644
index 0000000..c5f474d
--- /dev/null
+++ b/.yarn/cache/underscore-npm-1.12.1-f5ca0889f5-b53ae924fe.zip
Binary files differ
diff --git a/.yarn/cache/underscore-npm-1.7.0-7d19d583a5-ba1d3ceeb6.zip b/.yarn/cache/underscore-npm-1.7.0-7d19d583a5-ba1d3ceeb6.zip
deleted file mode 100644
index af4726e..0000000
--- a/.yarn/cache/underscore-npm-1.7.0-7d19d583a5-ba1d3ceeb6.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/cache/unxhr-npm-1.0.1-a738451b6c-42c7e594e8.zip b/.yarn/cache/unxhr-npm-1.0.1-a738451b6c-42c7e594e8.zip
new file mode 100644
index 0000000..f4372ea
--- /dev/null
+++ b/.yarn/cache/unxhr-npm-1.0.1-a738451b6c-42c7e594e8.zip
Binary files differ
diff --git a/.yarn/cache/varint-npm-0.0.3-af21f18e3c-6048cb7573.zip b/.yarn/cache/varint-npm-0.0.3-af21f18e3c-6048cb7573.zip
deleted file mode 100644
index c9bdf5a..0000000
--- a/.yarn/cache/varint-npm-0.0.3-af21f18e3c-6048cb7573.zip
+++ /dev/null
Binary files differ
diff --git a/.yarn/unplugged/gifsicle-npm-4.0.1-47efba2323/node_modules/gifsicle/vendor/gifsicle b/.yarn/unplugged/gifsicle-npm-4.0.1-47efba2323/node_modules/gifsicle/vendor/gifsicle
deleted file mode 100755
index 00ce1dc..0000000
--- a/.yarn/unplugged/gifsicle-npm-4.0.1-47efba2323/node_modules/gifsicle/vendor/gifsicle
+++ /dev/null
Binary files differ
diff --git a/.yarn/unplugged/jpegtran-bin-npm-4.0.0-c1e70a98c1/node_modules/jpegtran-bin/vendor/jpegtran b/.yarn/unplugged/jpegtran-bin-npm-4.0.0-c1e70a98c1/node_modules/jpegtran-bin/vendor/jpegtran
deleted file mode 100755
index 3a499a1..0000000
--- a/.yarn/unplugged/jpegtran-bin-npm-4.0.0-c1e70a98c1/node_modules/jpegtran-bin/vendor/jpegtran
+++ /dev/null
Binary files differ
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.jscsrc b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.jscsrc
deleted file mode 100644
index 4f9e965..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.jscsrc
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-    "disallowSpacesInNamedFunctionExpression": {
-        "beforeOpeningRoundBrace": true
-    },
-    "disallowSpacesInFunctionExpression": {
-        "beforeOpeningRoundBrace": true
-    },
-    "disallowSpacesInAnonymousFunctionExpression": {
-        "beforeOpeningRoundBrace": true
-    },
-    "disallowSpacesInFunctionDeclaration": {
-        "beforeOpeningRoundBrace": true
-    },
-    "disallowEmptyBlocks": true,
-    "disallowSpacesInsideParentheses": true,
-    "disallowQuotedKeysInObjects": true,
-    "disallowSpaceAfterObjectKeys": true,
-    "disallowSpaceAfterPrefixUnaryOperators": true,
-    "disallowSpaceBeforePostfixUnaryOperators": true,
-    "disallowSpaceBeforeBinaryOperators": [
-        ","
-    ],
-    "disallowMixedSpacesAndTabs": true,
-    "disallowTrailingWhitespace": true,
-    "disallowTrailingComma": true,
-    "disallowYodaConditions": true,
-    "disallowKeywords": [ "with" ],
-    "disallowMultipleLineBreaks": true,
-    "requireSpaceBeforeBlockStatements": true,
-    "requireParenthesesAroundIIFE": true,
-    "requireSpacesInConditionalExpression": true,
-    "disallowMultipleVarDecl": true,
-    "requireBlocksOnNewline": 1,
-    "requireCommaBeforeLineBreak": true,
-    "requireSpaceBeforeBinaryOperators": true,
-    "requireSpaceAfterBinaryOperators": true,
-    "requireLineFeedAtFileEnd": true,
-    "requireCapitalizedConstructors": true,
-    "requireDotNotation": true,
-    "requireSpacesInForStatement": true,
-    "requireCurlyBraces": [
-        "do"
-    ],
-    "requireSpaceAfterKeywords": [
-        "if",
-        "else",
-        "for",
-        "while",
-        "do",
-        "switch",
-        "case",
-        "return",
-        "try",
-        "catch",
-        "typeof"
-    ],
-    "safeContextKeyword": "self",
-    "validateLineBreaks": "LF",
-    "validateIndentation": 2
-}
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.jshintrc b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.jshintrc
deleted file mode 100644
index b175c33..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.jshintrc
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "node": true,
-  "undef": true,
-  "unused": true,
-  "lastsemic": true,
-  "-W058": false,      /* don't require parentheses for no-arg constructors */
-  "-W054": false,      /* use Function constructor responsibly */
-  "-W033": false       /* let jscs deal with semicolons */
-}
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.npmignore b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.npmignore
deleted file mode 100644
index d5fe9d6..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-node_modules
-generated/aesprim-browser.js
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.ready b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.ready
deleted file mode 100644
index e69de29..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.ready
+++ /dev/null
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.travis.yml b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.travis.yml
deleted file mode 100644
index 6e5919d..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/.travis.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-language: node_js
-node_js:
-  - "0.10"
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/Dockerfile b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/Dockerfile
deleted file mode 100644
index 58b1abf..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/Dockerfile
+++ /dev/null
@@ -1 +0,0 @@
-FROM node:0.11-onbuild
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/Gruntfile.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/Gruntfile.js
deleted file mode 100644
index 527b04b..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/Gruntfile.js
+++ /dev/null
@@ -1,83 +0,0 @@
-var Browserify = require('browserify');
-var bresolve = require('browser-resolve');
-patchResolve();
-
-module.exports = function (grunt) {
-    grunt.initConfig({
-        pkg: grunt.file.readJSON('package.json'),
-        outputFolder: ".",
-
-        browserify: {
-            main: {
-                src: ['index.js'],
-                dest: '<%= outputFolder %>/<%= pkg.name %>.js',
-                options: {
-                    browserifyOptions: { standalone: '<%= pkg.name %>' },
-                    banner: '/*! <%= pkg.name %> <%= pkg.version %> */\n',
-                    alias: {
-                        "jsonpath": "./index.js"
-                    },
-                    require: [
-                        /**
-                         * When running in Node, we require('./aesprim') and that module takes care of monkey-patching esprima
-                         * using resolve, path finding, etc...
-                         * Anyways, Browserify doesn't support "resolve", so we need to trick the module. We'll actually be
-                         * returning a verbatim, non-modified "esprima" when the code runs require('./aesprim').
-                         * That is ok because we will modify the "esprima" source code right after the bundle process, via
-                         * the postBundleCB callback.
-                         */
-                        ["esprima", {expose: "./aesprim"}]
-                    ],
-                    ignore: [
-                        'file',
-                        'system',
-                        'source-map',
-                        'estraverse',
-                        'escodegen',
-                        'underscore',
-                        'reflect',
-                        'JSONSelect',
-                        './lib/aesprim.js'
-                        //'assert' //can't remove because of lib/index.js,
-                    ],
-                    postBundleCB: function(err, src, next) {
-                        /**
-                         * This is ugly, but we need to make "esprima" understand '@' as a valid character.
-                         * It's either this or bundle a copy of the library with those few bytes of changes.
-                         */
-                        src = src.toString("utf8").replace(/(function isIdentifierStart\(ch\) {\s+return)/m, '$1 (ch == 0x40) || ');
-                        next(err, new Buffer(src, "utf8"));
-                    }
-                }
-            }
-        },
-
-        uglify: {
-            options: {
-                banner: '/*! <%= pkg.name %> <%= pkg.version %> */\n'
-            },
-            build: {
-                src: '<%= outputFolder %>/<%= pkg.name %>.js',
-                dest: '<%= outputFolder %>/<%= pkg.name %>.min.js'
-            }
-        }
-
-    });
-
-    grunt.loadNpmTasks('grunt-browserify');
-    grunt.loadNpmTasks('grunt-contrib-uglify')
-    grunt.registerTask('default', ['browserify', 'uglify']);
-
-};
-
-function patchResolve() {
-  var _createDeps = Browserify.prototype._createDeps;
-  Browserify.prototype._createDeps = function() {
-    var returnValue = _createDeps.apply(this, arguments);
-    this._bresolve = function(id, opts, cb) {
-      opts.browser = 'alias';
-      return bresolve(id, opts, cb);
-    };
-    return returnValue;
-  }
-}
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/LICENSE b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/LICENSE
deleted file mode 100644
index 3393f80..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/LICENSE
+++ /dev/null
@@ -1,7 +0,0 @@
-Copyright (c) 2014-2016 David Chester <david@fmail.co.uk>
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/README.md b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/README.md
deleted file mode 100755
index 5a18bcd..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/README.md
+++ /dev/null
@@ -1,216 +0,0 @@
-[![Build Status](https://travis-ci.org/dchester/jsonpath.png?branch=master)](https://travis-ci.org/dchester/jsonpath)
-
-# jsonpath
-
-Query JavaScript objects with JSONPath expressions.  Robust / safe JSONPath engine for Node.js.
-
-
-## Query Example
-
-```javascript
-var cities = [
-  { name: "London", "population": 8615246 },
-  { name: "Berlin", "population": 3517424 },
-  { name: "Madrid", "population": 3165235 },
-  { name: "Rome",   "population": 2870528 }
-];
-
-var jp = require('jsonpath');
-var names = jp.query(cities, '$..name');
-
-// [ "London", "Berlin", "Madrid", "Rome" ]
-```
-
-## Install
-
-Install from npm:
-```bash
-$ npm install jsonpath
-```
-
-## JSONPath Syntax
-
-Here are syntax and examples adapted from [Stefan Goessner's original post](http://goessner.net/articles/JsonPath/) introducing JSONPath in 2007.
-
-JSONPath         | Description
------------------|------------
-`$`               | The root object/element
-`@`                | The current object/element
-`.`                | Child member operator
-`..`	         | Recursive descendant operator; JSONPath borrows this syntax from E4X
-`*`	         | Wildcard matching all objects/elements regardless their names
-`[]`	         | Subscript operator
-`[,]`	         | Union operator for alternate names or array indices as a set
-`[start:end:step]` | Array slice operator borrowed from ES4 / Python
-`?()`              | Applies a filter (script) expression via static evaluation
-`()`	         | Script expression via static evaluation 
-
-Given this sample data set, see example expressions below:
-
-```javascript
-{
-  "store": {
-    "book": [ 
-      {
-        "category": "reference",
-        "author": "Nigel Rees",
-        "title": "Sayings of the Century",
-        "price": 8.95
-      }, {
-        "category": "fiction",
-        "author": "Evelyn Waugh",
-        "title": "Sword of Honour",
-        "price": 12.99
-      }, {
-        "category": "fiction",
-        "author": "Herman Melville",
-        "title": "Moby Dick",
-        "isbn": "0-553-21311-3",
-        "price": 8.99
-      }, {
-         "category": "fiction",
-        "author": "J. R. R. Tolkien",
-        "title": "The Lord of the Rings",
-        "isbn": "0-395-19395-8",
-        "price": 22.99
-      }
-    ],
-    "bicycle": {
-      "color": "red",
-      "price": 19.95
-    }
-  }
-}
-```
-
-Example JSONPath expressions:
-
-JSONPath                      | Description
-------------------------------|------------
-`$.store.book[*].author`       | The authors of all books in the store
-`$..author`                     | All authors
-`$.store.*`                    | All things in store, which are some books and a red bicycle
-`$.store..price`                | The price of everything in the store
-`$..book[2]`                    | The third book
-`$..book[(@.length-1)]`         | The last book via script subscript
-`$..book[-1:]`                  | The last book via slice
-`$..book[0,1]`                  | The first two books via subscript union
-`$..book[:2]`                  | The first two books via subscript array slice
-`$..book[?(@.isbn)]`            | Filter all books with isbn number
-`$..book[?(@.price<10)]`        | Filter all books cheaper than 10
-`$..book[?(@.price==8.95)]`        | Filter all books that cost 8.95
-`$..book[?(@.price<30 && @.category=="fiction")]`        | Filter all fiction books cheaper than 30
-`$..*`                         | All members of JSON structure
-
-
-## Methods
-
-#### jp.query(obj, pathExpression[, count])
-
-Find elements in `obj` matching `pathExpression`.  Returns an array of elements that satisfy the provided JSONPath expression, or an empty array if none were matched.  Returns only first `count` elements if specified.
-
-```javascript
-var authors = jp.query(data, '$..author');
-// [ 'Nigel Rees', 'Evelyn Waugh', 'Herman Melville', 'J. R. R. Tolkien' ]
-```
-
-#### jp.paths(obj, pathExpression[, count])
-
-Find paths to elements in `obj` matching `pathExpression`.  Returns an array of element paths that satisfy the provided JSONPath expression. Each path is itself an array of keys representing the location within `obj` of the matching element.  Returns only first `count` paths if specified.
-
-
-```javascript
-var paths = jp.paths(data, '$..author');
-// [
-//   ['$', 'store', 'book', 0, 'author'] },
-//   ['$', 'store', 'book', 1, 'author'] },
-//   ['$', 'store', 'book', 2, 'author'] },
-//   ['$', 'store', 'book', 3, 'author'] }
-// ]
-```
-
-#### jp.nodes(obj, pathExpression[, count])
-
-Find elements and their corresponding paths in `obj` matching `pathExpression`.  Returns an array of node objects where each node has a `path` containing an array of keys representing the location within `obj`, and a `value` pointing to the matched element.  Returns only first `count` nodes if specified.
-
-```javascript
-var nodes = jp.nodes(data, '$..author');
-// [
-//   { path: ['$', 'store', 'book', 0, 'author'], value: 'Nigel Rees' },
-//   { path: ['$', 'store', 'book', 1, 'author'], value: 'Evelyn Waugh' },
-//   { path: ['$', 'store', 'book', 2, 'author'], value: 'Herman Melville' },
-//   { path: ['$', 'store', 'book', 3, 'author'], value: 'J. R. R. Tolkien' }
-// ]
-```
-
-#### jp.value(obj, pathExpression[, newValue])
-
-Returns the value of the first element matching `pathExpression`.  If `newValue` is provided, sets the value of the first matching element and returns the new value.
-
-#### jp.parent(obj, pathExpression)
-
-Returns the parent of the first matching element.
-
-#### jp.apply(obj, pathExpression, fn)
-
-Runs the supplied function `fn` on each matching element, and replaces each matching element with the return value from the function.  The function accepts the value of the matching element as its only parameter.  Returns matching nodes with their updated values.
-
-
-```javascript
-var nodes = jp.apply(data, '$..author', function(value) { return value.toUpperCase() });
-// [
-//   { path: ['$', 'store', 'book', 0, 'author'], value: 'NIGEL REES' },
-//   { path: ['$', 'store', 'book', 1, 'author'], value: 'EVELYN WAUGH' },
-//   { path: ['$', 'store', 'book', 2, 'author'], value: 'HERMAN MELVILLE' },
-//   { path: ['$', 'store', 'book', 3, 'author'], value: 'J. R. R. TOLKIEN' }
-// ]
-```
-
-#### jp.parse(pathExpression)
-
-Parse the provided JSONPath expression into path components and their associated operations.
-
-```javascript
-var path = jp.parse('$..author');
-// [
-//   { expression: { type: 'root', value: '$' } },
-//   { expression: { type: 'identifier', value: 'author' }, operation: 'member', scope: 'descendant' }
-// ]
-```
-
-#### jp.stringify(path)
-
-Returns a path expression in string form, given a path.  The supplied path may either be a flat array of keys, as returned by `jp.nodes` for example, or may alternatively be a fully parsed path expression in the form of an array of path components as returned by `jp.parse`.
-
-```javascript
-var pathExpression = jp.stringify(['$', 'store', 'book', 0, 'author']);
-// "$.store.book[0].author"
-```
-
-## Differences from Original Implementation
-
-This implementation aims to be compatible with Stefan Goessner's original implementation with a few notable exceptions described below.
-
-#### Evaluating Script Expressions
-
-Script expressions (i.e, `(...)` and `?(...)`) are statically evaluated via [static-eval](https://github.com/substack/static-eval) rather than using the underlying script engine directly.  That means both that the scope is limited to the instance variable (`@`), and only simple expressions (with no side effects) will be valid.  So for example, `?(@.length>10)` will be just fine to match arrays with more than ten elements, but `?(process.exit())` will not get evaluated since `process` would yield a `ReferenceError`.  This method is even safer than `vm.runInNewContext`, since the script engine itself is more limited and entirely distinct from the one running the application code.  See more details in the [implementation](https://github.com/substack/static-eval/blob/master/index.js) of the evaluator.
-
-#### Grammar
-
-This project uses a formal BNF [grammar](https://github.com/dchester/jsonpath/blob/master/lib/grammar.js) to parse JSONPath expressions, an attempt at reverse-engineering the intent of the original implementation, which parses via a series of creative regular expressions.  The original regex approach can sometimes be forgiving for better or for worse (e.g., `$['store]` => `$['store']`), and in other cases, can be just plain wrong (e.g. `[` => `$`). 
-
-#### Other Minor Differences
-
-As a result of using a real parser and static evaluation, there are some arguable bugs in the original library that have not been carried through here:
-
-- strings in subscripts may now be double-quoted
-- final `step` arguments in slice operators may now be negative
-- script expressions may now contain `.` and `@` characters not referring to instance variables
-- subscripts no longer act as character slices on string elements
-- non-ascii non-word characters are no-longer valid in member identifier names; use quoted subscript strings instead (e.g., `$['$']` instead of `$.$`)
-- unions now yield real unions with no duplicates rather than concatenated results
-
-## License
-
-[MIT](LICENSE)
-
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/bin/generate_parser.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/bin/generate_parser.js
deleted file mode 100644
index d4ef77e..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/bin/generate_parser.js
+++ /dev/null
@@ -1,8 +0,0 @@
-var JisonParser = require('jison').Parser;
-var grammar = require('../lib/grammar');
-
-var parser = new JisonParser(grammar);
-source = parser.generate()
-
-console.log(source)
-
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/fig.yml b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/fig.yml
deleted file mode 100644
index 97e0c5b..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/fig.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-test:
-  build: .
-  command: node /usr/src/app/node_modules/.bin/mocha -u tdd test/
-  volumes:
-    - .:/usr/src/app
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/generated/aesprim-browser.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/generated/aesprim-browser.js
deleted file mode 100644
index ebecbfd..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/generated/aesprim-browser.js
+++ /dev/null
@@ -1,3757 +0,0 @@
-/*
-  Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>
-  Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>
-  Copyright (C) 2013 Mathias Bynens <mathias@qiwi.be>
-  Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>
-  Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>
-  Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>
-  Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>
-  Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>
-  Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>
-  Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
-  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*jslint bitwise:true plusplus:true */
-/*global esprima:true, define:true, exports:true, window: true,
-throwErrorTolerant: true,
-throwError: true, generateStatement: true, peek: true,
-parseAssignmentExpression: true, parseBlock: true, parseExpression: true,
-parseFunctionDeclaration: true, parseFunctionExpression: true,
-parseFunctionSourceElements: true, parseVariableIdentifier: true,
-parseLeftHandSideExpression: true,
-parseUnaryExpression: true,
-parseStatement: true, parseSourceElement: true */
-
-(function (root, factory) {
-    'use strict';
-
-    // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,
-    // Rhino, and plain browser loading.
-
-    /* istanbul ignore next */
-    if (typeof define === 'function' && define.amd) {
-        define(['exports'], factory);
-    } else if (typeof exports !== 'undefined') {
-        factory(exports);
-    } else {
-        factory((root.esprima = {}));
-    }
-}(this, function (exports) {
-    'use strict';
-
-    var Token,
-        TokenName,
-        FnExprTokens,
-        Syntax,
-        PropertyKind,
-        Messages,
-        Regex,
-        SyntaxTreeDelegate,
-        source,
-        strict,
-        index,
-        lineNumber,
-        lineStart,
-        length,
-        delegate,
-        lookahead,
-        state,
-        extra;
-
-    Token = {
-        BooleanLiteral: 1,
-        EOF: 2,
-        Identifier: 3,
-        Keyword: 4,
-        NullLiteral: 5,
-        NumericLiteral: 6,
-        Punctuator: 7,
-        StringLiteral: 8,
-        RegularExpression: 9
-    };
-
-    TokenName = {};
-    TokenName[Token.BooleanLiteral] = 'Boolean';
-    TokenName[Token.EOF] = '<end>';
-    TokenName[Token.Identifier] = 'Identifier';
-    TokenName[Token.Keyword] = 'Keyword';
-    TokenName[Token.NullLiteral] = 'Null';
-    TokenName[Token.NumericLiteral] = 'Numeric';
-    TokenName[Token.Punctuator] = 'Punctuator';
-    TokenName[Token.StringLiteral] = 'String';
-    TokenName[Token.RegularExpression] = 'RegularExpression';
-
-    // A function following one of those tokens is an expression.
-    FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',
-                    'return', 'case', 'delete', 'throw', 'void',
-                    // assignment operators
-                    '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=',
-                    '&=', '|=', '^=', ',',
-                    // binary/unary operators
-                    '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&',
-                    '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',
-                    '<=', '<', '>', '!=', '!=='];
-
-    Syntax = {
-        AssignmentExpression: 'AssignmentExpression',
-        ArrayExpression: 'ArrayExpression',
-        BlockStatement: 'BlockStatement',
-        BinaryExpression: 'BinaryExpression',
-        BreakStatement: 'BreakStatement',
-        CallExpression: 'CallExpression',
-        CatchClause: 'CatchClause',
-        ConditionalExpression: 'ConditionalExpression',
-        ContinueStatement: 'ContinueStatement',
-        DoWhileStatement: 'DoWhileStatement',
-        DebuggerStatement: 'DebuggerStatement',
-        EmptyStatement: 'EmptyStatement',
-        ExpressionStatement: 'ExpressionStatement',
-        ForStatement: 'ForStatement',
-        ForInStatement: 'ForInStatement',
-        FunctionDeclaration: 'FunctionDeclaration',
-        FunctionExpression: 'FunctionExpression',
-        Identifier: 'Identifier',
-        IfStatement: 'IfStatement',
-        Literal: 'Literal',
-        LabeledStatement: 'LabeledStatement',
-        LogicalExpression: 'LogicalExpression',
-        MemberExpression: 'MemberExpression',
-        NewExpression: 'NewExpression',
-        ObjectExpression: 'ObjectExpression',
-        Program: 'Program',
-        Property: 'Property',
-        ReturnStatement: 'ReturnStatement',
-        SequenceExpression: 'SequenceExpression',
-        SwitchStatement: 'SwitchStatement',
-        SwitchCase: 'SwitchCase',
-        ThisExpression: 'ThisExpression',
-        ThrowStatement: 'ThrowStatement',
-        TryStatement: 'TryStatement',
-        UnaryExpression: 'UnaryExpression',
-        UpdateExpression: 'UpdateExpression',
-        VariableDeclaration: 'VariableDeclaration',
-        VariableDeclarator: 'VariableDeclarator',
-        WhileStatement: 'WhileStatement',
-        WithStatement: 'WithStatement'
-    };
-
-    PropertyKind = {
-        Data: 1,
-        Get: 2,
-        Set: 4
-    };
-
-    // Error messages should be identical to V8.
-    Messages = {
-        UnexpectedToken:  'Unexpected token %0',
-        UnexpectedNumber:  'Unexpected number',
-        UnexpectedString:  'Unexpected string',
-        UnexpectedIdentifier:  'Unexpected identifier',
-        UnexpectedReserved:  'Unexpected reserved word',
-        UnexpectedEOS:  'Unexpected end of input',
-        NewlineAfterThrow:  'Illegal newline after throw',
-        InvalidRegExp: 'Invalid regular expression',
-        UnterminatedRegExp:  'Invalid regular expression: missing /',
-        InvalidLHSInAssignment:  'Invalid left-hand side in assignment',
-        InvalidLHSInForIn:  'Invalid left-hand side in for-in',
-        MultipleDefaultsInSwitch: 'More than one default clause in switch statement',
-        NoCatchOrFinally:  'Missing catch or finally after try',
-        UnknownLabel: 'Undefined label \'%0\'',
-        Redeclaration: '%0 \'%1\' has already been declared',
-        IllegalContinue: 'Illegal continue statement',
-        IllegalBreak: 'Illegal break statement',
-        IllegalReturn: 'Illegal return statement',
-        StrictModeWith:  'Strict mode code may not include a with statement',
-        StrictCatchVariable:  'Catch variable may not be eval or arguments in strict mode',
-        StrictVarName:  'Variable name may not be eval or arguments in strict mode',
-        StrictParamName:  'Parameter name eval or arguments is not allowed in strict mode',
-        StrictParamDupe: 'Strict mode function may not have duplicate parameter names',
-        StrictFunctionName:  'Function name may not be eval or arguments in strict mode',
-        StrictOctalLiteral:  'Octal literals are not allowed in strict mode.',
-        StrictDelete:  'Delete of an unqualified identifier in strict mode.',
-        StrictDuplicateProperty:  'Duplicate data property in object literal not allowed in strict mode',
-        AccessorDataProperty:  'Object literal may not have data and accessor property with the same name',
-        AccessorGetSet:  'Object literal may not have multiple get/set accessors with the same name',
-        StrictLHSAssignment:  'Assignment to eval or arguments is not allowed in strict mode',
-        StrictLHSPostfix:  'Postfix increment/decrement may not have eval or arguments operand in strict mode',
-        StrictLHSPrefix:  'Prefix increment/decrement may not have eval or arguments operand in strict mode',
-        StrictReservedWord:  'Use of future reserved word in strict mode'
-    };
-
-    // See also tools/generate-unicode-regex.py.
-    Regex = {
-        NonAsciiIdentifierStart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]'),
-        NonAsciiIdentifierPart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]')
-    };
-
-    // Ensure the condition is true, otherwise throw an error.
-    // This is only to have a better contract semantic, i.e. another safety net
-    // to catch a logic error. The condition shall be fulfilled in normal case.
-    // Do NOT use this to enforce a certain condition on any user input.
-
-    function assert(condition, message) {
-        /* istanbul ignore if */
-        if (!condition) {
-            throw new Error('ASSERT: ' + message);
-        }
-    }
-
-    function isDecimalDigit(ch) {
-        return (ch >= 48 && ch <= 57);   // 0..9
-    }
-
-    function isHexDigit(ch) {
-        return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;
-    }
-
-    function isOctalDigit(ch) {
-        return '01234567'.indexOf(ch) >= 0;
-    }
-
-
-    // 7.2 White Space
-
-    function isWhiteSpace(ch) {
-        return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||
-            (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);
-    }
-
-    // 7.3 Line Terminators
-
-    function isLineTerminator(ch) {
-        return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);
-    }
-
-    // 7.6 Identifier Names and Identifiers
-
-    function isIdentifierStart(ch) {
-        return (ch == 0x40) ||  (ch === 0x24) || (ch === 0x5F) ||  // $ (dollar) and _ (underscore)
-            (ch >= 0x41 && ch <= 0x5A) ||         // A..Z
-            (ch >= 0x61 && ch <= 0x7A) ||         // a..z
-            (ch === 0x5C) ||                      // \ (backslash)
-            ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch)));
-    }
-
-    function isIdentifierPart(ch) {
-        return (ch === 0x24) || (ch === 0x5F) ||  // $ (dollar) and _ (underscore)
-            (ch >= 0x41 && ch <= 0x5A) ||         // A..Z
-            (ch >= 0x61 && ch <= 0x7A) ||         // a..z
-            (ch >= 0x30 && ch <= 0x39) ||         // 0..9
-            (ch === 0x5C) ||                      // \ (backslash)
-            ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch)));
-    }
-
-    // 7.6.1.2 Future Reserved Words
-
-    function isFutureReservedWord(id) {
-        switch (id) {
-        case 'class':
-        case 'enum':
-        case 'export':
-        case 'extends':
-        case 'import':
-        case 'super':
-            return true;
-        default:
-            return false;
-        }
-    }
-
-    function isStrictModeReservedWord(id) {
-        switch (id) {
-        case 'implements':
-        case 'interface':
-        case 'package':
-        case 'private':
-        case 'protected':
-        case 'public':
-        case 'static':
-        case 'yield':
-        case 'let':
-            return true;
-        default:
-            return false;
-        }
-    }
-
-    function isRestrictedWord(id) {
-        return id === 'eval' || id === 'arguments';
-    }
-
-    // 7.6.1.1 Keywords
-
-    function isKeyword(id) {
-        if (strict && isStrictModeReservedWord(id)) {
-            return true;
-        }
-
-        // 'const' is specialized as Keyword in V8.
-        // 'yield' and 'let' are for compatiblity with SpiderMonkey and ES.next.
-        // Some others are from future reserved words.
-
-        switch (id.length) {
-        case 2:
-            return (id === 'if') || (id === 'in') || (id === 'do');
-        case 3:
-            return (id === 'var') || (id === 'for') || (id === 'new') ||
-                (id === 'try') || (id === 'let');
-        case 4:
-            return (id === 'this') || (id === 'else') || (id === 'case') ||
-                (id === 'void') || (id === 'with') || (id === 'enum');
-        case 5:
-            return (id === 'while') || (id === 'break') || (id === 'catch') ||
-                (id === 'throw') || (id === 'const') || (id === 'yield') ||
-                (id === 'class') || (id === 'super');
-        case 6:
-            return (id === 'return') || (id === 'typeof') || (id === 'delete') ||
-                (id === 'switch') || (id === 'export') || (id === 'import');
-        case 7:
-            return (id === 'default') || (id === 'finally') || (id === 'extends');
-        case 8:
-            return (id === 'function') || (id === 'continue') || (id === 'debugger');
-        case 10:
-            return (id === 'instanceof');
-        default:
-            return false;
-        }
-    }
-
-    // 7.4 Comments
-
-    function addComment(type, value, start, end, loc) {
-        var comment, attacher;
-
-        assert(typeof start === 'number', 'Comment must have valid position');
-
-        // Because the way the actual token is scanned, often the comments
-        // (if any) are skipped twice during the lexical analysis.
-        // Thus, we need to skip adding a comment if the comment array already
-        // handled it.
-        if (state.lastCommentStart >= start) {
-            return;
-        }
-        state.lastCommentStart = start;
-
-        comment = {
-            type: type,
-            value: value
-        };
-        if (extra.range) {
-            comment.range = [start, end];
-        }
-        if (extra.loc) {
-            comment.loc = loc;
-        }
-        extra.comments.push(comment);
-        if (extra.attachComment) {
-            extra.leadingComments.push(comment);
-            extra.trailingComments.push(comment);
-        }
-    }
-
-    function skipSingleLineComment(offset) {
-        var start, loc, ch, comment;
-
-        start = index - offset;
-        loc = {
-            start: {
-                line: lineNumber,
-                column: index - lineStart - offset
-            }
-        };
-
-        while (index < length) {
-            ch = source.charCodeAt(index);
-            ++index;
-            if (isLineTerminator(ch)) {
-                if (extra.comments) {
-                    comment = source.slice(start + offset, index - 1);
-                    loc.end = {
-                        line: lineNumber,
-                        column: index - lineStart - 1
-                    };
-                    addComment('Line', comment, start, index - 1, loc);
-                }
-                if (ch === 13 && source.charCodeAt(index) === 10) {
-                    ++index;
-                }
-                ++lineNumber;
-                lineStart = index;
-                return;
-            }
-        }
-
-        if (extra.comments) {
-            comment = source.slice(start + offset, index);
-            loc.end = {
-                line: lineNumber,
-                column: index - lineStart
-            };
-            addComment('Line', comment, start, index, loc);
-        }
-    }
-
-    function skipMultiLineComment() {
-        var start, loc, ch, comment;
-
-        if (extra.comments) {
-            start = index - 2;
-            loc = {
-                start: {
-                    line: lineNumber,
-                    column: index - lineStart - 2
-                }
-            };
-        }
-
-        while (index < length) {
-            ch = source.charCodeAt(index);
-            if (isLineTerminator(ch)) {
-                if (ch === 0x0D && source.charCodeAt(index + 1) === 0x0A) {
-                    ++index;
-                }
-                ++lineNumber;
-                ++index;
-                lineStart = index;
-                if (index >= length) {
-                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-                }
-            } else if (ch === 0x2A) {
-                // Block comment ends with '*/'.
-                if (source.charCodeAt(index + 1) === 0x2F) {
-                    ++index;
-                    ++index;
-                    if (extra.comments) {
-                        comment = source.slice(start + 2, index - 2);
-                        loc.end = {
-                            line: lineNumber,
-                            column: index - lineStart
-                        };
-                        addComment('Block', comment, start, index, loc);
-                    }
-                    return;
-                }
-                ++index;
-            } else {
-                ++index;
-            }
-        }
-
-        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-    }
-
-    function skipComment() {
-        var ch, start;
-
-        start = (index === 0);
-        while (index < length) {
-            ch = source.charCodeAt(index);
-
-            if (isWhiteSpace(ch)) {
-                ++index;
-            } else if (isLineTerminator(ch)) {
-                ++index;
-                if (ch === 0x0D && source.charCodeAt(index) === 0x0A) {
-                    ++index;
-                }
-                ++lineNumber;
-                lineStart = index;
-                start = true;
-            } else if (ch === 0x2F) { // U+002F is '/'
-                ch = source.charCodeAt(index + 1);
-                if (ch === 0x2F) {
-                    ++index;
-                    ++index;
-                    skipSingleLineComment(2);
-                    start = true;
-                } else if (ch === 0x2A) {  // U+002A is '*'
-                    ++index;
-                    ++index;
-                    skipMultiLineComment();
-                } else {
-                    break;
-                }
-            } else if (start && ch === 0x2D) { // U+002D is '-'
-                // U+003E is '>'
-                if ((source.charCodeAt(index + 1) === 0x2D) && (source.charCodeAt(index + 2) === 0x3E)) {
-                    // '-->' is a single-line comment
-                    index += 3;
-                    skipSingleLineComment(3);
-                } else {
-                    break;
-                }
-            } else if (ch === 0x3C) { // U+003C is '<'
-                if (source.slice(index + 1, index + 4) === '!--') {
-                    ++index; // `<`
-                    ++index; // `!`
-                    ++index; // `-`
-                    ++index; // `-`
-                    skipSingleLineComment(4);
-                } else {
-                    break;
-                }
-            } else {
-                break;
-            }
-        }
-    }
-
-    function scanHexEscape(prefix) {
-        var i, len, ch, code = 0;
-
-        len = (prefix === 'u') ? 4 : 2;
-        for (i = 0; i < len; ++i) {
-            if (index < length && isHexDigit(source[index])) {
-                ch = source[index++];
-                code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());
-            } else {
-                return '';
-            }
-        }
-        return String.fromCharCode(code);
-    }
-
-    function getEscapedIdentifier() {
-        var ch, id;
-
-        ch = source.charCodeAt(index++);
-        id = String.fromCharCode(ch);
-
-        // '\u' (U+005C, U+0075) denotes an escaped character.
-        if (ch === 0x5C) {
-            if (source.charCodeAt(index) !== 0x75) {
-                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-            }
-            ++index;
-            ch = scanHexEscape('u');
-            if (!ch || ch === '\\' || !isIdentifierStart(ch.charCodeAt(0))) {
-                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-            }
-            id = ch;
-        }
-
-        while (index < length) {
-            ch = source.charCodeAt(index);
-            if (!isIdentifierPart(ch)) {
-                break;
-            }
-            ++index;
-            id += String.fromCharCode(ch);
-
-            // '\u' (U+005C, U+0075) denotes an escaped character.
-            if (ch === 0x5C) {
-                id = id.substr(0, id.length - 1);
-                if (source.charCodeAt(index) !== 0x75) {
-                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-                }
-                ++index;
-                ch = scanHexEscape('u');
-                if (!ch || ch === '\\' || !isIdentifierPart(ch.charCodeAt(0))) {
-                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-                }
-                id += ch;
-            }
-        }
-
-        return id;
-    }
-
-    function getIdentifier() {
-        var start, ch;
-
-        start = index++;
-        while (index < length) {
-            ch = source.charCodeAt(index);
-            if (ch === 0x5C) {
-                // Blackslash (U+005C) marks Unicode escape sequence.
-                index = start;
-                return getEscapedIdentifier();
-            }
-            if (isIdentifierPart(ch)) {
-                ++index;
-            } else {
-                break;
-            }
-        }
-
-        return source.slice(start, index);
-    }
-
-    function scanIdentifier() {
-        var start, id, type;
-
-        start = index;
-
-        // Backslash (U+005C) starts an escaped character.
-        id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier();
-
-        // There is no keyword or literal with only one character.
-        // Thus, it must be an identifier.
-        if (id.length === 1) {
-            type = Token.Identifier;
-        } else if (isKeyword(id)) {
-            type = Token.Keyword;
-        } else if (id === 'null') {
-            type = Token.NullLiteral;
-        } else if (id === 'true' || id === 'false') {
-            type = Token.BooleanLiteral;
-        } else {
-            type = Token.Identifier;
-        }
-
-        return {
-            type: type,
-            value: id,
-            lineNumber: lineNumber,
-            lineStart: lineStart,
-            start: start,
-            end: index
-        };
-    }
-
-
-    // 7.7 Punctuators
-
-    function scanPunctuator() {
-        var start = index,
-            code = source.charCodeAt(index),
-            code2,
-            ch1 = source[index],
-            ch2,
-            ch3,
-            ch4;
-
-        switch (code) {
-
-        // Check for most common single-character punctuators.
-        case 0x2E:  // . dot
-        case 0x28:  // ( open bracket
-        case 0x29:  // ) close bracket
-        case 0x3B:  // ; semicolon
-        case 0x2C:  // , comma
-        case 0x7B:  // { open curly brace
-        case 0x7D:  // } close curly brace
-        case 0x5B:  // [
-        case 0x5D:  // ]
-        case 0x3A:  // :
-        case 0x3F:  // ?
-        case 0x7E:  // ~
-            ++index;
-            if (extra.tokenize) {
-                if (code === 0x28) {
-                    extra.openParenToken = extra.tokens.length;
-                } else if (code === 0x7B) {
-                    extra.openCurlyToken = extra.tokens.length;
-                }
-            }
-            return {
-                type: Token.Punctuator,
-                value: String.fromCharCode(code),
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: start,
-                end: index
-            };
-
-        default:
-            code2 = source.charCodeAt(index + 1);
-
-            // '=' (U+003D) marks an assignment or comparison operator.
-            if (code2 === 0x3D) {
-                switch (code) {
-                case 0x2B:  // +
-                case 0x2D:  // -
-                case 0x2F:  // /
-                case 0x3C:  // <
-                case 0x3E:  // >
-                case 0x5E:  // ^
-                case 0x7C:  // |
-                case 0x25:  // %
-                case 0x26:  // &
-                case 0x2A:  // *
-                    index += 2;
-                    return {
-                        type: Token.Punctuator,
-                        value: String.fromCharCode(code) + String.fromCharCode(code2),
-                        lineNumber: lineNumber,
-                        lineStart: lineStart,
-                        start: start,
-                        end: index
-                    };
-
-                case 0x21: // !
-                case 0x3D: // =
-                    index += 2;
-
-                    // !== and ===
-                    if (source.charCodeAt(index) === 0x3D) {
-                        ++index;
-                    }
-                    return {
-                        type: Token.Punctuator,
-                        value: source.slice(start, index),
-                        lineNumber: lineNumber,
-                        lineStart: lineStart,
-                        start: start,
-                        end: index
-                    };
-                }
-            }
-        }
-
-        // 4-character punctuator: >>>=
-
-        ch4 = source.substr(index, 4);
-
-        if (ch4 === '>>>=') {
-            index += 4;
-            return {
-                type: Token.Punctuator,
-                value: ch4,
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: start,
-                end: index
-            };
-        }
-
-        // 3-character punctuators: === !== >>> <<= >>=
-
-        ch3 = ch4.substr(0, 3);
-
-        if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {
-            index += 3;
-            return {
-                type: Token.Punctuator,
-                value: ch3,
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: start,
-                end: index
-            };
-        }
-
-        // Other 2-character punctuators: ++ -- << >> && ||
-        ch2 = ch3.substr(0, 2);
-
-        if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') {
-            index += 2;
-            return {
-                type: Token.Punctuator,
-                value: ch2,
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: start,
-                end: index
-            };
-        }
-
-        // 1-character punctuators: < > = ! + - * % & | ^ /
-        if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {
-            ++index;
-            return {
-                type: Token.Punctuator,
-                value: ch1,
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: start,
-                end: index
-            };
-        }
-
-        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-    }
-
-    // 7.8.3 Numeric Literals
-
-    function scanHexLiteral(start) {
-        var number = '';
-
-        while (index < length) {
-            if (!isHexDigit(source[index])) {
-                break;
-            }
-            number += source[index++];
-        }
-
-        if (number.length === 0) {
-            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-        }
-
-        if (isIdentifierStart(source.charCodeAt(index))) {
-            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-        }
-
-        return {
-            type: Token.NumericLiteral,
-            value: parseInt('0x' + number, 16),
-            lineNumber: lineNumber,
-            lineStart: lineStart,
-            start: start,
-            end: index
-        };
-    }
-
-    function scanOctalLiteral(start) {
-        var number = '0' + source[index++];
-        while (index < length) {
-            if (!isOctalDigit(source[index])) {
-                break;
-            }
-            number += source[index++];
-        }
-
-        if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {
-            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-        }
-
-        return {
-            type: Token.NumericLiteral,
-            value: parseInt(number, 8),
-            octal: true,
-            lineNumber: lineNumber,
-            lineStart: lineStart,
-            start: start,
-            end: index
-        };
-    }
-
-    function scanNumericLiteral() {
-        var number, start, ch;
-
-        ch = source[index];
-        assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),
-            'Numeric literal must start with a decimal digit or a decimal point');
-
-        start = index;
-        number = '';
-        if (ch !== '.') {
-            number = source[index++];
-            ch = source[index];
-
-            // Hex number starts with '0x'.
-            // Octal number starts with '0'.
-            if (number === '0') {
-                if (ch === 'x' || ch === 'X') {
-                    ++index;
-                    return scanHexLiteral(start);
-                }
-                if (isOctalDigit(ch)) {
-                    return scanOctalLiteral(start);
-                }
-
-                // decimal number starts with '0' such as '09' is illegal.
-                if (ch && isDecimalDigit(ch.charCodeAt(0))) {
-                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-                }
-            }
-
-            while (isDecimalDigit(source.charCodeAt(index))) {
-                number += source[index++];
-            }
-            ch = source[index];
-        }
-
-        if (ch === '.') {
-            number += source[index++];
-            while (isDecimalDigit(source.charCodeAt(index))) {
-                number += source[index++];
-            }
-            ch = source[index];
-        }
-
-        if (ch === 'e' || ch === 'E') {
-            number += source[index++];
-
-            ch = source[index];
-            if (ch === '+' || ch === '-') {
-                number += source[index++];
-            }
-            if (isDecimalDigit(source.charCodeAt(index))) {
-                while (isDecimalDigit(source.charCodeAt(index))) {
-                    number += source[index++];
-                }
-            } else {
-                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-            }
-        }
-
-        if (isIdentifierStart(source.charCodeAt(index))) {
-            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-        }
-
-        return {
-            type: Token.NumericLiteral,
-            value: parseFloat(number),
-            lineNumber: lineNumber,
-            lineStart: lineStart,
-            start: start,
-            end: index
-        };
-    }
-
-    // 7.8.4 String Literals
-
-    function scanStringLiteral() {
-        var str = '', quote, start, ch, code, unescaped, restore, octal = false, startLineNumber, startLineStart;
-        startLineNumber = lineNumber;
-        startLineStart = lineStart;
-
-        quote = source[index];
-        assert((quote === '\'' || quote === '"'),
-            'String literal must starts with a quote');
-
-        start = index;
-        ++index;
-
-        while (index < length) {
-            ch = source[index++];
-
-            if (ch === quote) {
-                quote = '';
-                break;
-            } else if (ch === '\\') {
-                ch = source[index++];
-                if (!ch || !isLineTerminator(ch.charCodeAt(0))) {
-                    switch (ch) {
-                    case 'u':
-                    case 'x':
-                        restore = index;
-                        unescaped = scanHexEscape(ch);
-                        if (unescaped) {
-                            str += unescaped;
-                        } else {
-                            index = restore;
-                            str += ch;
-                        }
-                        break;
-                    case 'n':
-                        str += '\n';
-                        break;
-                    case 'r':
-                        str += '\r';
-                        break;
-                    case 't':
-                        str += '\t';
-                        break;
-                    case 'b':
-                        str += '\b';
-                        break;
-                    case 'f':
-                        str += '\f';
-                        break;
-                    case 'v':
-                        str += '\x0B';
-                        break;
-
-                    default:
-                        if (isOctalDigit(ch)) {
-                            code = '01234567'.indexOf(ch);
-
-                            // \0 is not octal escape sequence
-                            if (code !== 0) {
-                                octal = true;
-                            }
-
-                            if (index < length && isOctalDigit(source[index])) {
-                                octal = true;
-                                code = code * 8 + '01234567'.indexOf(source[index++]);
-
-                                // 3 digits are only allowed when string starts
-                                // with 0, 1, 2, 3
-                                if ('0123'.indexOf(ch) >= 0 &&
-                                        index < length &&
-                                        isOctalDigit(source[index])) {
-                                    code = code * 8 + '01234567'.indexOf(source[index++]);
-                                }
-                            }
-                            str += String.fromCharCode(code);
-                        } else {
-                            str += ch;
-                        }
-                        break;
-                    }
-                } else {
-                    ++lineNumber;
-                    if (ch ===  '\r' && source[index] === '\n') {
-                        ++index;
-                    }
-                    lineStart = index;
-                }
-            } else if (isLineTerminator(ch.charCodeAt(0))) {
-                break;
-            } else {
-                str += ch;
-            }
-        }
-
-        if (quote !== '') {
-            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-        }
-
-        return {
-            type: Token.StringLiteral,
-            value: str,
-            octal: octal,
-            startLineNumber: startLineNumber,
-            startLineStart: startLineStart,
-            lineNumber: lineNumber,
-            lineStart: lineStart,
-            start: start,
-            end: index
-        };
-    }
-
-    function testRegExp(pattern, flags) {
-        var value;
-        try {
-            value = new RegExp(pattern, flags);
-        } catch (e) {
-            throwError({}, Messages.InvalidRegExp);
-        }
-        return value;
-    }
-
-    function scanRegExpBody() {
-        var ch, str, classMarker, terminated, body;
-
-        ch = source[index];
-        assert(ch === '/', 'Regular expression literal must start with a slash');
-        str = source[index++];
-
-        classMarker = false;
-        terminated = false;
-        while (index < length) {
-            ch = source[index++];
-            str += ch;
-            if (ch === '\\') {
-                ch = source[index++];
-                // ECMA-262 7.8.5
-                if (isLineTerminator(ch.charCodeAt(0))) {
-                    throwError({}, Messages.UnterminatedRegExp);
-                }
-                str += ch;
-            } else if (isLineTerminator(ch.charCodeAt(0))) {
-                throwError({}, Messages.UnterminatedRegExp);
-            } else if (classMarker) {
-                if (ch === ']') {
-                    classMarker = false;
-                }
-            } else {
-                if (ch === '/') {
-                    terminated = true;
-                    break;
-                } else if (ch === '[') {
-                    classMarker = true;
-                }
-            }
-        }
-
-        if (!terminated) {
-            throwError({}, Messages.UnterminatedRegExp);
-        }
-
-        // Exclude leading and trailing slash.
-        body = str.substr(1, str.length - 2);
-        return {
-            value: body,
-            literal: str
-        };
-    }
-
-    function scanRegExpFlags() {
-        var ch, str, flags, restore;
-
-        str = '';
-        flags = '';
-        while (index < length) {
-            ch = source[index];
-            if (!isIdentifierPart(ch.charCodeAt(0))) {
-                break;
-            }
-
-            ++index;
-            if (ch === '\\' && index < length) {
-                ch = source[index];
-                if (ch === 'u') {
-                    ++index;
-                    restore = index;
-                    ch = scanHexEscape('u');
-                    if (ch) {
-                        flags += ch;
-                        for (str += '\\u'; restore < index; ++restore) {
-                            str += source[restore];
-                        }
-                    } else {
-                        index = restore;
-                        flags += 'u';
-                        str += '\\u';
-                    }
-                    throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL');
-                } else {
-                    str += '\\';
-                    throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL');
-                }
-            } else {
-                flags += ch;
-                str += ch;
-            }
-        }
-
-        return {
-            value: flags,
-            literal: str
-        };
-    }
-
-    function scanRegExp() {
-        var start, body, flags, pattern, value;
-
-        lookahead = null;
-        skipComment();
-        start = index;
-
-        body = scanRegExpBody();
-        flags = scanRegExpFlags();
-        value = testRegExp(body.value, flags.value);
-
-        if (extra.tokenize) {
-            return {
-                type: Token.RegularExpression,
-                value: value,
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: start,
-                end: index
-            };
-        }
-
-        return {
-            literal: body.literal + flags.literal,
-            value: value,
-            start: start,
-            end: index
-        };
-    }
-
-    function collectRegex() {
-        var pos, loc, regex, token;
-
-        skipComment();
-
-        pos = index;
-        loc = {
-            start: {
-                line: lineNumber,
-                column: index - lineStart
-            }
-        };
-
-        regex = scanRegExp();
-        loc.end = {
-            line: lineNumber,
-            column: index - lineStart
-        };
-
-        /* istanbul ignore next */
-        if (!extra.tokenize) {
-            // Pop the previous token, which is likely '/' or '/='
-            if (extra.tokens.length > 0) {
-                token = extra.tokens[extra.tokens.length - 1];
-                if (token.range[0] === pos && token.type === 'Punctuator') {
-                    if (token.value === '/' || token.value === '/=') {
-                        extra.tokens.pop();
-                    }
-                }
-            }
-
-            extra.tokens.push({
-                type: 'RegularExpression',
-                value: regex.literal,
-                range: [pos, index],
-                loc: loc
-            });
-        }
-
-        return regex;
-    }
-
-    function isIdentifierName(token) {
-        return token.type === Token.Identifier ||
-            token.type === Token.Keyword ||
-            token.type === Token.BooleanLiteral ||
-            token.type === Token.NullLiteral;
-    }
-
-    function advanceSlash() {
-        var prevToken,
-            checkToken;
-        // Using the following algorithm:
-        // https://github.com/mozilla/sweet.js/wiki/design
-        prevToken = extra.tokens[extra.tokens.length - 1];
-        if (!prevToken) {
-            // Nothing before that: it cannot be a division.
-            return collectRegex();
-        }
-        if (prevToken.type === 'Punctuator') {
-            if (prevToken.value === ']') {
-                return scanPunctuator();
-            }
-            if (prevToken.value === ')') {
-                checkToken = extra.tokens[extra.openParenToken - 1];
-                if (checkToken &&
-                        checkToken.type === 'Keyword' &&
-                        (checkToken.value === 'if' ||
-                         checkToken.value === 'while' ||
-                         checkToken.value === 'for' ||
-                         checkToken.value === 'with')) {
-                    return collectRegex();
-                }
-                return scanPunctuator();
-            }
-            if (prevToken.value === '}') {
-                // Dividing a function by anything makes little sense,
-                // but we have to check for that.
-                if (extra.tokens[extra.openCurlyToken - 3] &&
-                        extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') {
-                    // Anonymous function.
-                    checkToken = extra.tokens[extra.openCurlyToken - 4];
-                    if (!checkToken) {
-                        return scanPunctuator();
-                    }
-                } else if (extra.tokens[extra.openCurlyToken - 4] &&
-                        extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') {
-                    // Named function.
-                    checkToken = extra.tokens[extra.openCurlyToken - 5];
-                    if (!checkToken) {
-                        return collectRegex();
-                    }
-                } else {
-                    return scanPunctuator();
-                }
-                // checkToken determines whether the function is
-                // a declaration or an expression.
-                if (FnExprTokens.indexOf(checkToken.value) >= 0) {
-                    // It is an expression.
-                    return scanPunctuator();
-                }
-                // It is a declaration.
-                return collectRegex();
-            }
-            return collectRegex();
-        }
-        if (prevToken.type === 'Keyword') {
-            return collectRegex();
-        }
-        return scanPunctuator();
-    }
-
-    function advance() {
-        var ch;
-
-        skipComment();
-
-        if (index >= length) {
-            return {
-                type: Token.EOF,
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: index,
-                end: index
-            };
-        }
-
-        ch = source.charCodeAt(index);
-
-        if (isIdentifierStart(ch)) {
-            return scanIdentifier();
-        }
-
-        // Very common: ( and ) and ;
-        if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {
-            return scanPunctuator();
-        }
-
-        // String literal starts with single quote (U+0027) or double quote (U+0022).
-        if (ch === 0x27 || ch === 0x22) {
-            return scanStringLiteral();
-        }
-
-
-        // Dot (.) U+002E can also start a floating-point number, hence the need
-        // to check the next character.
-        if (ch === 0x2E) {
-            if (isDecimalDigit(source.charCodeAt(index + 1))) {
-                return scanNumericLiteral();
-            }
-            return scanPunctuator();
-        }
-
-        if (isDecimalDigit(ch)) {
-            return scanNumericLiteral();
-        }
-
-        // Slash (/) U+002F can also start a regex.
-        if (extra.tokenize && ch === 0x2F) {
-            return advanceSlash();
-        }
-
-        return scanPunctuator();
-    }
-
-    function collectToken() {
-        var loc, token, range, value;
-
-        skipComment();
-        loc = {
-            start: {
-                line: lineNumber,
-                column: index - lineStart
-            }
-        };
-
-        token = advance();
-        loc.end = {
-            line: lineNumber,
-            column: index - lineStart
-        };
-
-        if (token.type !== Token.EOF) {
-            value = source.slice(token.start, token.end);
-            extra.tokens.push({
-                type: TokenName[token.type],
-                value: value,
-                range: [token.start, token.end],
-                loc: loc
-            });
-        }
-
-        return token;
-    }
-
-    function lex() {
-        var token;
-
-        token = lookahead;
-        index = token.end;
-        lineNumber = token.lineNumber;
-        lineStart = token.lineStart;
-
-        lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();
-
-        index = token.end;
-        lineNumber = token.lineNumber;
-        lineStart = token.lineStart;
-
-        return token;
-    }
-
-    function peek() {
-        var pos, line, start;
-
-        pos = index;
-        line = lineNumber;
-        start = lineStart;
-        lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();
-        index = pos;
-        lineNumber = line;
-        lineStart = start;
-    }
-
-    function Position(line, column) {
-        this.line = line;
-        this.column = column;
-    }
-
-    function SourceLocation(startLine, startColumn, line, column) {
-        this.start = new Position(startLine, startColumn);
-        this.end = new Position(line, column);
-    }
-
-    SyntaxTreeDelegate = {
-
-        name: 'SyntaxTree',
-
-        processComment: function (node) {
-            var lastChild, trailingComments;
-
-            if (node.type === Syntax.Program) {
-                if (node.body.length > 0) {
-                    return;
-                }
-            }
-
-            if (extra.trailingComments.length > 0) {
-                if (extra.trailingComments[0].range[0] >= node.range[1]) {
-                    trailingComments = extra.trailingComments;
-                    extra.trailingComments = [];
-                } else {
-                    extra.trailingComments.length = 0;
-                }
-            } else {
-                if (extra.bottomRightStack.length > 0 &&
-                        extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments &&
-                        extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments[0].range[0] >= node.range[1]) {
-                    trailingComments = extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments;
-                    delete extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments;
-                }
-            }
-
-            // Eating the stack.
-            while (extra.bottomRightStack.length > 0 && extra.bottomRightStack[extra.bottomRightStack.length - 1].range[0] >= node.range[0]) {
-                lastChild = extra.bottomRightStack.pop();
-            }
-
-            if (lastChild) {
-                if (lastChild.leadingComments && lastChild.leadingComments[lastChild.leadingComments.length - 1].range[1] <= node.range[0]) {
-                    node.leadingComments = lastChild.leadingComments;
-                    delete lastChild.leadingComments;
-                }
-            } else if (extra.leadingComments.length > 0 && extra.leadingComments[extra.leadingComments.length - 1].range[1] <= node.range[0]) {
-                node.leadingComments = extra.leadingComments;
-                extra.leadingComments = [];
-            }
-
-
-            if (trailingComments) {
-                node.trailingComments = trailingComments;
-            }
-
-            extra.bottomRightStack.push(node);
-        },
-
-        markEnd: function (node, startToken) {
-            if (extra.range) {
-                node.range = [startToken.start, index];
-            }
-            if (extra.loc) {
-                node.loc = new SourceLocation(
-                    startToken.startLineNumber === undefined ?  startToken.lineNumber : startToken.startLineNumber,
-                    startToken.start - (startToken.startLineStart === undefined ?  startToken.lineStart : startToken.startLineStart),
-                    lineNumber,
-                    index - lineStart
-                );
-                this.postProcess(node);
-            }
-
-            if (extra.attachComment) {
-                this.processComment(node);
-            }
-            return node;
-        },
-
-        postProcess: function (node) {
-            if (extra.source) {
-                node.loc.source = extra.source;
-            }
-            return node;
-        },
-
-        createArrayExpression: function (elements) {
-            return {
-                type: Syntax.ArrayExpression,
-                elements: elements
-            };
-        },
-
-        createAssignmentExpression: function (operator, left, right) {
-            return {
-                type: Syntax.AssignmentExpression,
-                operator: operator,
-                left: left,
-                right: right
-            };
-        },
-
-        createBinaryExpression: function (operator, left, right) {
-            var type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression :
-                        Syntax.BinaryExpression;
-            return {
-                type: type,
-                operator: operator,
-                left: left,
-                right: right
-            };
-        },
-
-        createBlockStatement: function (body) {
-            return {
-                type: Syntax.BlockStatement,
-                body: body
-            };
-        },
-
-        createBreakStatement: function (label) {
-            return {
-                type: Syntax.BreakStatement,
-                label: label
-            };
-        },
-
-        createCallExpression: function (callee, args) {
-            return {
-                type: Syntax.CallExpression,
-                callee: callee,
-                'arguments': args
-            };
-        },
-
-        createCatchClause: function (param, body) {
-            return {
-                type: Syntax.CatchClause,
-                param: param,
-                body: body
-            };
-        },
-
-        createConditionalExpression: function (test, consequent, alternate) {
-            return {
-                type: Syntax.ConditionalExpression,
-                test: test,
-                consequent: consequent,
-                alternate: alternate
-            };
-        },
-
-        createContinueStatement: function (label) {
-            return {
-                type: Syntax.ContinueStatement,
-                label: label
-            };
-        },
-
-        createDebuggerStatement: function () {
-            return {
-                type: Syntax.DebuggerStatement
-            };
-        },
-
-        createDoWhileStatement: function (body, test) {
-            return {
-                type: Syntax.DoWhileStatement,
-                body: body,
-                test: test
-            };
-        },
-
-        createEmptyStatement: function () {
-            return {
-                type: Syntax.EmptyStatement
-            };
-        },
-
-        createExpressionStatement: function (expression) {
-            return {
-                type: Syntax.ExpressionStatement,
-                expression: expression
-            };
-        },
-
-        createForStatement: function (init, test, update, body) {
-            return {
-                type: Syntax.ForStatement,
-                init: init,
-                test: test,
-                update: update,
-                body: body
-            };
-        },
-
-        createForInStatement: function (left, right, body) {
-            return {
-                type: Syntax.ForInStatement,
-                left: left,
-                right: right,
-                body: body,
-                each: false
-            };
-        },
-
-        createFunctionDeclaration: function (id, params, defaults, body) {
-            return {
-                type: Syntax.FunctionDeclaration,
-                id: id,
-                params: params,
-                defaults: defaults,
-                body: body,
-                rest: null,
-                generator: false,
-                expression: false
-            };
-        },
-
-        createFunctionExpression: function (id, params, defaults, body) {
-            return {
-                type: Syntax.FunctionExpression,
-                id: id,
-                params: params,
-                defaults: defaults,
-                body: body,
-                rest: null,
-                generator: false,
-                expression: false
-            };
-        },
-
-        createIdentifier: function (name) {
-            return {
-                type: Syntax.Identifier,
-                name: name
-            };
-        },
-
-        createIfStatement: function (test, consequent, alternate) {
-            return {
-                type: Syntax.IfStatement,
-                test: test,
-                consequent: consequent,
-                alternate: alternate
-            };
-        },
-
-        createLabeledStatement: function (label, body) {
-            return {
-                type: Syntax.LabeledStatement,
-                label: label,
-                body: body
-            };
-        },
-
-        createLiteral: function (token) {
-            return {
-                type: Syntax.Literal,
-                value: token.value,
-                raw: source.slice(token.start, token.end)
-            };
-        },
-
-        createMemberExpression: function (accessor, object, property) {
-            return {
-                type: Syntax.MemberExpression,
-                computed: accessor === '[',
-                object: object,
-                property: property
-            };
-        },
-
-        createNewExpression: function (callee, args) {
-            return {
-                type: Syntax.NewExpression,
-                callee: callee,
-                'arguments': args
-            };
-        },
-
-        createObjectExpression: function (properties) {
-            return {
-                type: Syntax.ObjectExpression,
-                properties: properties
-            };
-        },
-
-        createPostfixExpression: function (operator, argument) {
-            return {
-                type: Syntax.UpdateExpression,
-                operator: operator,
-                argument: argument,
-                prefix: false
-            };
-        },
-
-        createProgram: function (body) {
-            return {
-                type: Syntax.Program,
-                body: body
-            };
-        },
-
-        createProperty: function (kind, key, value) {
-            return {
-                type: Syntax.Property,
-                key: key,
-                value: value,
-                kind: kind
-            };
-        },
-
-        createReturnStatement: function (argument) {
-            return {
-                type: Syntax.ReturnStatement,
-                argument: argument
-            };
-        },
-
-        createSequenceExpression: function (expressions) {
-            return {
-                type: Syntax.SequenceExpression,
-                expressions: expressions
-            };
-        },
-
-        createSwitchCase: function (test, consequent) {
-            return {
-                type: Syntax.SwitchCase,
-                test: test,
-                consequent: consequent
-            };
-        },
-
-        createSwitchStatement: function (discriminant, cases) {
-            return {
-                type: Syntax.SwitchStatement,
-                discriminant: discriminant,
-                cases: cases
-            };
-        },
-
-        createThisExpression: function () {
-            return {
-                type: Syntax.ThisExpression
-            };
-        },
-
-        createThrowStatement: function (argument) {
-            return {
-                type: Syntax.ThrowStatement,
-                argument: argument
-            };
-        },
-
-        createTryStatement: function (block, guardedHandlers, handlers, finalizer) {
-            return {
-                type: Syntax.TryStatement,
-                block: block,
-                guardedHandlers: guardedHandlers,
-                handlers: handlers,
-                finalizer: finalizer
-            };
-        },
-
-        createUnaryExpression: function (operator, argument) {
-            if (operator === '++' || operator === '--') {
-                return {
-                    type: Syntax.UpdateExpression,
-                    operator: operator,
-                    argument: argument,
-                    prefix: true
-                };
-            }
-            return {
-                type: Syntax.UnaryExpression,
-                operator: operator,
-                argument: argument,
-                prefix: true
-            };
-        },
-
-        createVariableDeclaration: function (declarations, kind) {
-            return {
-                type: Syntax.VariableDeclaration,
-                declarations: declarations,
-                kind: kind
-            };
-        },
-
-        createVariableDeclarator: function (id, init) {
-            return {
-                type: Syntax.VariableDeclarator,
-                id: id,
-                init: init
-            };
-        },
-
-        createWhileStatement: function (test, body) {
-            return {
-                type: Syntax.WhileStatement,
-                test: test,
-                body: body
-            };
-        },
-
-        createWithStatement: function (object, body) {
-            return {
-                type: Syntax.WithStatement,
-                object: object,
-                body: body
-            };
-        }
-    };
-
-    // Return true if there is a line terminator before the next token.
-
-    function peekLineTerminator() {
-        var pos, line, start, found;
-
-        pos = index;
-        line = lineNumber;
-        start = lineStart;
-        skipComment();
-        found = lineNumber !== line;
-        index = pos;
-        lineNumber = line;
-        lineStart = start;
-
-        return found;
-    }
-
-    // Throw an exception
-
-    function throwError(token, messageFormat) {
-        var error,
-            args = Array.prototype.slice.call(arguments, 2),
-            msg = messageFormat.replace(
-                /%(\d)/g,
-                function (whole, index) {
-                    assert(index < args.length, 'Message reference must be in range');
-                    return args[index];
-                }
-            );
-
-        if (typeof token.lineNumber === 'number') {
-            error = new Error('Line ' + token.lineNumber + ': ' + msg);
-            error.index = token.start;
-            error.lineNumber = token.lineNumber;
-            error.column = token.start - lineStart + 1;
-        } else {
-            error = new Error('Line ' + lineNumber + ': ' + msg);
-            error.index = index;
-            error.lineNumber = lineNumber;
-            error.column = index - lineStart + 1;
-        }
-
-        error.description = msg;
-        throw error;
-    }
-
-    function throwErrorTolerant() {
-        try {
-            throwError.apply(null, arguments);
-        } catch (e) {
-            if (extra.errors) {
-                extra.errors.push(e);
-            } else {
-                throw e;
-            }
-        }
-    }
-
-
-    // Throw an exception because of the token.
-
-    function throwUnexpected(token) {
-        if (token.type === Token.EOF) {
-            throwError(token, Messages.UnexpectedEOS);
-        }
-
-        if (token.type === Token.NumericLiteral) {
-            throwError(token, Messages.UnexpectedNumber);
-        }
-
-        if (token.type === Token.StringLiteral) {
-            throwError(token, Messages.UnexpectedString);
-        }
-
-        if (token.type === Token.Identifier) {
-            throwError(token, Messages.UnexpectedIdentifier);
-        }
-
-        if (token.type === Token.Keyword) {
-            if (isFutureReservedWord(token.value)) {
-                throwError(token, Messages.UnexpectedReserved);
-            } else if (strict && isStrictModeReservedWord(token.value)) {
-                throwErrorTolerant(token, Messages.StrictReservedWord);
-                return;
-            }
-            throwError(token, Messages.UnexpectedToken, token.value);
-        }
-
-        // BooleanLiteral, NullLiteral, or Punctuator.
-        throwError(token, Messages.UnexpectedToken, token.value);
-    }
-
-    // Expect the next token to match the specified punctuator.
-    // If not, an exception will be thrown.
-
-    function expect(value) {
-        var token = lex();
-        if (token.type !== Token.Punctuator || token.value !== value) {
-            throwUnexpected(token);
-        }
-    }
-
-    // Expect the next token to match the specified keyword.
-    // If not, an exception will be thrown.
-
-    function expectKeyword(keyword) {
-        var token = lex();
-        if (token.type !== Token.Keyword || token.value !== keyword) {
-            throwUnexpected(token);
-        }
-    }
-
-    // Return true if the next token matches the specified punctuator.
-
-    function match(value) {
-        return lookahead.type === Token.Punctuator && lookahead.value === value;
-    }
-
-    // Return true if the next token matches the specified keyword
-
-    function matchKeyword(keyword) {
-        return lookahead.type === Token.Keyword && lookahead.value === keyword;
-    }
-
-    // Return true if the next token is an assignment operator
-
-    function matchAssign() {
-        var op;
-
-        if (lookahead.type !== Token.Punctuator) {
-            return false;
-        }
-        op = lookahead.value;
-        return op === '=' ||
-            op === '*=' ||
-            op === '/=' ||
-            op === '%=' ||
-            op === '+=' ||
-            op === '-=' ||
-            op === '<<=' ||
-            op === '>>=' ||
-            op === '>>>=' ||
-            op === '&=' ||
-            op === '^=' ||
-            op === '|=';
-    }
-
-    function consumeSemicolon() {
-        var line;
-
-        // Catch the very common case first: immediately a semicolon (U+003B).
-        if (source.charCodeAt(index) === 0x3B || match(';')) {
-            lex();
-            return;
-        }
-
-        line = lineNumber;
-        skipComment();
-        if (lineNumber !== line) {
-            return;
-        }
-
-        if (lookahead.type !== Token.EOF && !match('}')) {
-            throwUnexpected(lookahead);
-        }
-    }
-
-    // Return true if provided expression is LeftHandSideExpression
-
-    function isLeftHandSide(expr) {
-        return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression;
-    }
-
-    // 11.1.4 Array Initialiser
-
-    function parseArrayInitialiser() {
-        var elements = [], startToken;
-
-        startToken = lookahead;
-        expect('[');
-
-        while (!match(']')) {
-            if (match(',')) {
-                lex();
-                elements.push(null);
-            } else {
-                elements.push(parseAssignmentExpression());
-
-                if (!match(']')) {
-                    expect(',');
-                }
-            }
-        }
-
-        lex();
-
-        return delegate.markEnd(delegate.createArrayExpression(elements), startToken);
-    }
-
-    // 11.1.5 Object Initialiser
-
-    function parsePropertyFunction(param, first) {
-        var previousStrict, body, startToken;
-
-        previousStrict = strict;
-        startToken = lookahead;
-        body = parseFunctionSourceElements();
-        if (first && strict && isRestrictedWord(param[0].name)) {
-            throwErrorTolerant(first, Messages.StrictParamName);
-        }
-        strict = previousStrict;
-        return delegate.markEnd(delegate.createFunctionExpression(null, param, [], body), startToken);
-    }
-
-    function parseObjectPropertyKey() {
-        var token, startToken;
-
-        startToken = lookahead;
-        token = lex();
-
-        // Note: This function is called only from parseObjectProperty(), where
-        // EOF and Punctuator tokens are already filtered out.
-
-        if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {
-            if (strict && token.octal) {
-                throwErrorTolerant(token, Messages.StrictOctalLiteral);
-            }
-            return delegate.markEnd(delegate.createLiteral(token), startToken);
-        }
-
-        return delegate.markEnd(delegate.createIdentifier(token.value), startToken);
-    }
-
-    function parseObjectProperty() {
-        var token, key, id, value, param, startToken;
-
-        token = lookahead;
-        startToken = lookahead;
-
-        if (token.type === Token.Identifier) {
-
-            id = parseObjectPropertyKey();
-
-            // Property Assignment: Getter and Setter.
-
-            if (token.value === 'get' && !match(':')) {
-                key = parseObjectPropertyKey();
-                expect('(');
-                expect(')');
-                value = parsePropertyFunction([]);
-                return delegate.markEnd(delegate.createProperty('get', key, value), startToken);
-            }
-            if (token.value === 'set' && !match(':')) {
-                key = parseObjectPropertyKey();
-                expect('(');
-                token = lookahead;
-                if (token.type !== Token.Identifier) {
-                    expect(')');
-                    throwErrorTolerant(token, Messages.UnexpectedToken, token.value);
-                    value = parsePropertyFunction([]);
-                } else {
-                    param = [ parseVariableIdentifier() ];
-                    expect(')');
-                    value = parsePropertyFunction(param, token);
-                }
-                return delegate.markEnd(delegate.createProperty('set', key, value), startToken);
-            }
-            expect(':');
-            value = parseAssignmentExpression();
-            return delegate.markEnd(delegate.createProperty('init', id, value), startToken);
-        }
-        if (token.type === Token.EOF || token.type === Token.Punctuator) {
-            throwUnexpected(token);
-        } else {
-            key = parseObjectPropertyKey();
-            expect(':');
-            value = parseAssignmentExpression();
-            return delegate.markEnd(delegate.createProperty('init', key, value), startToken);
-        }
-    }
-
-    function parseObjectInitialiser() {
-        var properties = [], property, name, key, kind, map = {}, toString = String, startToken;
-
-        startToken = lookahead;
-
-        expect('{');
-
-        while (!match('}')) {
-            property = parseObjectProperty();
-
-            if (property.key.type === Syntax.Identifier) {
-                name = property.key.name;
-            } else {
-                name = toString(property.key.value);
-            }
-            kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set;
-
-            key = '$' + name;
-            if (Object.prototype.hasOwnProperty.call(map, key)) {
-                if (map[key] === PropertyKind.Data) {
-                    if (strict && kind === PropertyKind.Data) {
-                        throwErrorTolerant({}, Messages.StrictDuplicateProperty);
-                    } else if (kind !== PropertyKind.Data) {
-                        throwErrorTolerant({}, Messages.AccessorDataProperty);
-                    }
-                } else {
-                    if (kind === PropertyKind.Data) {
-                        throwErrorTolerant({}, Messages.AccessorDataProperty);
-                    } else if (map[key] & kind) {
-                        throwErrorTolerant({}, Messages.AccessorGetSet);
-                    }
-                }
-                map[key] |= kind;
-            } else {
-                map[key] = kind;
-            }
-
-            properties.push(property);
-
-            if (!match('}')) {
-                expect(',');
-            }
-        }
-
-        expect('}');
-
-        return delegate.markEnd(delegate.createObjectExpression(properties), startToken);
-    }
-
-    // 11.1.6 The Grouping Operator
-
-    function parseGroupExpression() {
-        var expr;
-
-        expect('(');
-
-        expr = parseExpression();
-
-        expect(')');
-
-        return expr;
-    }
-
-
-    // 11.1 Primary Expressions
-
-    function parsePrimaryExpression() {
-        var type, token, expr, startToken;
-
-        if (match('(')) {
-            return parseGroupExpression();
-        }
-
-        if (match('[')) {
-            return parseArrayInitialiser();
-        }
-
-        if (match('{')) {
-            return parseObjectInitialiser();
-        }
-
-        type = lookahead.type;
-        startToken = lookahead;
-
-        if (type === Token.Identifier) {
-            expr =  delegate.createIdentifier(lex().value);
-        } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {
-            if (strict && lookahead.octal) {
-                throwErrorTolerant(lookahead, Messages.StrictOctalLiteral);
-            }
-            expr = delegate.createLiteral(lex());
-        } else if (type === Token.Keyword) {
-            if (matchKeyword('function')) {
-                return parseFunctionExpression();
-            }
-            if (matchKeyword('this')) {
-                lex();
-                expr = delegate.createThisExpression();
-            } else {
-                throwUnexpected(lex());
-            }
-        } else if (type === Token.BooleanLiteral) {
-            token = lex();
-            token.value = (token.value === 'true');
-            expr = delegate.createLiteral(token);
-        } else if (type === Token.NullLiteral) {
-            token = lex();
-            token.value = null;
-            expr = delegate.createLiteral(token);
-        } else if (match('/') || match('/=')) {
-            if (typeof extra.tokens !== 'undefined') {
-                expr = delegate.createLiteral(collectRegex());
-            } else {
-                expr = delegate.createLiteral(scanRegExp());
-            }
-            peek();
-        } else {
-            throwUnexpected(lex());
-        }
-
-        return delegate.markEnd(expr, startToken);
-    }
-
-    // 11.2 Left-Hand-Side Expressions
-
-    function parseArguments() {
-        var args = [];
-
-        expect('(');
-
-        if (!match(')')) {
-            while (index < length) {
-                args.push(parseAssignmentExpression());
-                if (match(')')) {
-                    break;
-                }
-                expect(',');
-            }
-        }
-
-        expect(')');
-
-        return args;
-    }
-
-    function parseNonComputedProperty() {
-        var token, startToken;
-
-        startToken = lookahead;
-        token = lex();
-
-        if (!isIdentifierName(token)) {
-            throwUnexpected(token);
-        }
-
-        return delegate.markEnd(delegate.createIdentifier(token.value), startToken);
-    }
-
-    function parseNonComputedMember() {
-        expect('.');
-
-        return parseNonComputedProperty();
-    }
-
-    function parseComputedMember() {
-        var expr;
-
-        expect('[');
-
-        expr = parseExpression();
-
-        expect(']');
-
-        return expr;
-    }
-
-    function parseNewExpression() {
-        var callee, args, startToken;
-
-        startToken = lookahead;
-        expectKeyword('new');
-        callee = parseLeftHandSideExpression();
-        args = match('(') ? parseArguments() : [];
-
-        return delegate.markEnd(delegate.createNewExpression(callee, args), startToken);
-    }
-
-    function parseLeftHandSideExpressionAllowCall() {
-        var previousAllowIn, expr, args, property, startToken;
-
-        startToken = lookahead;
-
-        previousAllowIn = state.allowIn;
-        state.allowIn = true;
-        expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();
-        state.allowIn = previousAllowIn;
-
-        for (;;) {
-            if (match('.')) {
-                property = parseNonComputedMember();
-                expr = delegate.createMemberExpression('.', expr, property);
-            } else if (match('(')) {
-                args = parseArguments();
-                expr = delegate.createCallExpression(expr, args);
-            } else if (match('[')) {
-                property = parseComputedMember();
-                expr = delegate.createMemberExpression('[', expr, property);
-            } else {
-                break;
-            }
-            delegate.markEnd(expr, startToken);
-        }
-
-        return expr;
-    }
-
-    function parseLeftHandSideExpression() {
-        var previousAllowIn, expr, property, startToken;
-
-        startToken = lookahead;
-
-        previousAllowIn = state.allowIn;
-        expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();
-        state.allowIn = previousAllowIn;
-
-        while (match('.') || match('[')) {
-            if (match('[')) {
-                property = parseComputedMember();
-                expr = delegate.createMemberExpression('[', expr, property);
-            } else {
-                property = parseNonComputedMember();
-                expr = delegate.createMemberExpression('.', expr, property);
-            }
-            delegate.markEnd(expr, startToken);
-        }
-
-        return expr;
-    }
-
-    // 11.3 Postfix Expressions
-
-    function parsePostfixExpression() {
-        var expr, token, startToken = lookahead;
-
-        expr = parseLeftHandSideExpressionAllowCall();
-
-        if (lookahead.type === Token.Punctuator) {
-            if ((match('++') || match('--')) && !peekLineTerminator()) {
-                // 11.3.1, 11.3.2
-                if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
-                    throwErrorTolerant({}, Messages.StrictLHSPostfix);
-                }
-
-                if (!isLeftHandSide(expr)) {
-                    throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
-                }
-
-                token = lex();
-                expr = delegate.markEnd(delegate.createPostfixExpression(token.value, expr), startToken);
-            }
-        }
-
-        return expr;
-    }
-
-    // 11.4 Unary Operators
-
-    function parseUnaryExpression() {
-        var token, expr, startToken;
-
-        if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {
-            expr = parsePostfixExpression();
-        } else if (match('++') || match('--')) {
-            startToken = lookahead;
-            token = lex();
-            expr = parseUnaryExpression();
-            // 11.4.4, 11.4.5
-            if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
-                throwErrorTolerant({}, Messages.StrictLHSPrefix);
-            }
-
-            if (!isLeftHandSide(expr)) {
-                throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
-            }
-
-            expr = delegate.createUnaryExpression(token.value, expr);
-            expr = delegate.markEnd(expr, startToken);
-        } else if (match('+') || match('-') || match('~') || match('!')) {
-            startToken = lookahead;
-            token = lex();
-            expr = parseUnaryExpression();
-            expr = delegate.createUnaryExpression(token.value, expr);
-            expr = delegate.markEnd(expr, startToken);
-        } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {
-            startToken = lookahead;
-            token = lex();
-            expr = parseUnaryExpression();
-            expr = delegate.createUnaryExpression(token.value, expr);
-            expr = delegate.markEnd(expr, startToken);
-            if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {
-                throwErrorTolerant({}, Messages.StrictDelete);
-            }
-        } else {
-            expr = parsePostfixExpression();
-        }
-
-        return expr;
-    }
-
-    function binaryPrecedence(token, allowIn) {
-        var prec = 0;
-
-        if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {
-            return 0;
-        }
-
-        switch (token.value) {
-        case '||':
-            prec = 1;
-            break;
-
-        case '&&':
-            prec = 2;
-            break;
-
-        case '|':
-            prec = 3;
-            break;
-
-        case '^':
-            prec = 4;
-            break;
-
-        case '&':
-            prec = 5;
-            break;
-
-        case '==':
-        case '!=':
-        case '===':
-        case '!==':
-            prec = 6;
-            break;
-
-        case '<':
-        case '>':
-        case '<=':
-        case '>=':
-        case 'instanceof':
-            prec = 7;
-            break;
-
-        case 'in':
-            prec = allowIn ? 7 : 0;
-            break;
-
-        case '<<':
-        case '>>':
-        case '>>>':
-            prec = 8;
-            break;
-
-        case '+':
-        case '-':
-            prec = 9;
-            break;
-
-        case '*':
-        case '/':
-        case '%':
-            prec = 11;
-            break;
-
-        default:
-            break;
-        }
-
-        return prec;
-    }
-
-    // 11.5 Multiplicative Operators
-    // 11.6 Additive Operators
-    // 11.7 Bitwise Shift Operators
-    // 11.8 Relational Operators
-    // 11.9 Equality Operators
-    // 11.10 Binary Bitwise Operators
-    // 11.11 Binary Logical Operators
-
-    function parseBinaryExpression() {
-        var marker, markers, expr, token, prec, stack, right, operator, left, i;
-
-        marker = lookahead;
-        left = parseUnaryExpression();
-
-        token = lookahead;
-        prec = binaryPrecedence(token, state.allowIn);
-        if (prec === 0) {
-            return left;
-        }
-        token.prec = prec;
-        lex();
-
-        markers = [marker, lookahead];
-        right = parseUnaryExpression();
-
-        stack = [left, token, right];
-
-        while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) {
-
-            // Reduce: make a binary expression from the three topmost entries.
-            while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {
-                right = stack.pop();
-                operator = stack.pop().value;
-                left = stack.pop();
-                expr = delegate.createBinaryExpression(operator, left, right);
-                markers.pop();
-                marker = markers[markers.length - 1];
-                delegate.markEnd(expr, marker);
-                stack.push(expr);
-            }
-
-            // Shift.
-            token = lex();
-            token.prec = prec;
-            stack.push(token);
-            markers.push(lookahead);
-            expr = parseUnaryExpression();
-            stack.push(expr);
-        }
-
-        // Final reduce to clean-up the stack.
-        i = stack.length - 1;
-        expr = stack[i];
-        markers.pop();
-        while (i > 1) {
-            expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);
-            i -= 2;
-            marker = markers.pop();
-            delegate.markEnd(expr, marker);
-        }
-
-        return expr;
-    }
-
-
-    // 11.12 Conditional Operator
-
-    function parseConditionalExpression() {
-        var expr, previousAllowIn, consequent, alternate, startToken;
-
-        startToken = lookahead;
-
-        expr = parseBinaryExpression();
-
-        if (match('?')) {
-            lex();
-            previousAllowIn = state.allowIn;
-            state.allowIn = true;
-            consequent = parseAssignmentExpression();
-            state.allowIn = previousAllowIn;
-            expect(':');
-            alternate = parseAssignmentExpression();
-
-            expr = delegate.createConditionalExpression(expr, consequent, alternate);
-            delegate.markEnd(expr, startToken);
-        }
-
-        return expr;
-    }
-
-    // 11.13 Assignment Operators
-
-    function parseAssignmentExpression() {
-        var token, left, right, node, startToken;
-
-        token = lookahead;
-        startToken = lookahead;
-
-        node = left = parseConditionalExpression();
-
-        if (matchAssign()) {
-            // LeftHandSideExpression
-            if (!isLeftHandSide(left)) {
-                throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
-            }
-
-            // 11.13.1
-            if (strict && left.type === Syntax.Identifier && isRestrictedWord(left.name)) {
-                throwErrorTolerant(token, Messages.StrictLHSAssignment);
-            }
-
-            token = lex();
-            right = parseAssignmentExpression();
-            node = delegate.markEnd(delegate.createAssignmentExpression(token.value, left, right), startToken);
-        }
-
-        return node;
-    }
-
-    // 11.14 Comma Operator
-
-    function parseExpression() {
-        var expr, startToken = lookahead;
-
-        expr = parseAssignmentExpression();
-
-        if (match(',')) {
-            expr = delegate.createSequenceExpression([ expr ]);
-
-            while (index < length) {
-                if (!match(',')) {
-                    break;
-                }
-                lex();
-                expr.expressions.push(parseAssignmentExpression());
-            }
-
-            delegate.markEnd(expr, startToken);
-        }
-
-        return expr;
-    }
-
-    // 12.1 Block
-
-    function parseStatementList() {
-        var list = [],
-            statement;
-
-        while (index < length) {
-            if (match('}')) {
-                break;
-            }
-            statement = parseSourceElement();
-            if (typeof statement === 'undefined') {
-                break;
-            }
-            list.push(statement);
-        }
-
-        return list;
-    }
-
-    function parseBlock() {
-        var block, startToken;
-
-        startToken = lookahead;
-        expect('{');
-
-        block = parseStatementList();
-
-        expect('}');
-
-        return delegate.markEnd(delegate.createBlockStatement(block), startToken);
-    }
-
-    // 12.2 Variable Statement
-
-    function parseVariableIdentifier() {
-        var token, startToken;
-
-        startToken = lookahead;
-        token = lex();
-
-        if (token.type !== Token.Identifier) {
-            throwUnexpected(token);
-        }
-
-        return delegate.markEnd(delegate.createIdentifier(token.value), startToken);
-    }
-
-    function parseVariableDeclaration(kind) {
-        var init = null, id, startToken;
-
-        startToken = lookahead;
-        id = parseVariableIdentifier();
-
-        // 12.2.1
-        if (strict && isRestrictedWord(id.name)) {
-            throwErrorTolerant({}, Messages.StrictVarName);
-        }
-
-        if (kind === 'const') {
-            expect('=');
-            init = parseAssignmentExpression();
-        } else if (match('=')) {
-            lex();
-            init = parseAssignmentExpression();
-        }
-
-        return delegate.markEnd(delegate.createVariableDeclarator(id, init), startToken);
-    }
-
-    function parseVariableDeclarationList(kind) {
-        var list = [];
-
-        do {
-            list.push(parseVariableDeclaration(kind));
-            if (!match(',')) {
-                break;
-            }
-            lex();
-        } while (index < length);
-
-        return list;
-    }
-
-    function parseVariableStatement() {
-        var declarations;
-
-        expectKeyword('var');
-
-        declarations = parseVariableDeclarationList();
-
-        consumeSemicolon();
-
-        return delegate.createVariableDeclaration(declarations, 'var');
-    }
-
-    // kind may be `const` or `let`
-    // Both are experimental and not in the specification yet.
-    // see http://wiki.ecmascript.org/doku.php?id=harmony:const
-    // and http://wiki.ecmascript.org/doku.php?id=harmony:let
-    function parseConstLetDeclaration(kind) {
-        var declarations, startToken;
-
-        startToken = lookahead;
-
-        expectKeyword(kind);
-
-        declarations = parseVariableDeclarationList(kind);
-
-        consumeSemicolon();
-
-        return delegate.markEnd(delegate.createVariableDeclaration(declarations, kind), startToken);
-    }
-
-    // 12.3 Empty Statement
-
-    function parseEmptyStatement() {
-        expect(';');
-        return delegate.createEmptyStatement();
-    }
-
-    // 12.4 Expression Statement
-
-    function parseExpressionStatement() {
-        var expr = parseExpression();
-        consumeSemicolon();
-        return delegate.createExpressionStatement(expr);
-    }
-
-    // 12.5 If statement
-
-    function parseIfStatement() {
-        var test, consequent, alternate;
-
-        expectKeyword('if');
-
-        expect('(');
-
-        test = parseExpression();
-
-        expect(')');
-
-        consequent = parseStatement();
-
-        if (matchKeyword('else')) {
-            lex();
-            alternate = parseStatement();
-        } else {
-            alternate = null;
-        }
-
-        return delegate.createIfStatement(test, consequent, alternate);
-    }
-
-    // 12.6 Iteration Statements
-
-    function parseDoWhileStatement() {
-        var body, test, oldInIteration;
-
-        expectKeyword('do');
-
-        oldInIteration = state.inIteration;
-        state.inIteration = true;
-
-        body = parseStatement();
-
-        state.inIteration = oldInIteration;
-
-        expectKeyword('while');
-
-        expect('(');
-
-        test = parseExpression();
-
-        expect(')');
-
-        if (match(';')) {
-            lex();
-        }
-
-        return delegate.createDoWhileStatement(body, test);
-    }
-
-    function parseWhileStatement() {
-        var test, body, oldInIteration;
-
-        expectKeyword('while');
-
-        expect('(');
-
-        test = parseExpression();
-
-        expect(')');
-
-        oldInIteration = state.inIteration;
-        state.inIteration = true;
-
-        body = parseStatement();
-
-        state.inIteration = oldInIteration;
-
-        return delegate.createWhileStatement(test, body);
-    }
-
-    function parseForVariableDeclaration() {
-        var token, declarations, startToken;
-
-        startToken = lookahead;
-        token = lex();
-        declarations = parseVariableDeclarationList();
-
-        return delegate.markEnd(delegate.createVariableDeclaration(declarations, token.value), startToken);
-    }
-
-    function parseForStatement() {
-        var init, test, update, left, right, body, oldInIteration;
-
-        init = test = update = null;
-
-        expectKeyword('for');
-
-        expect('(');
-
-        if (match(';')) {
-            lex();
-        } else {
-            if (matchKeyword('var') || matchKeyword('let')) {
-                state.allowIn = false;
-                init = parseForVariableDeclaration();
-                state.allowIn = true;
-
-                if (init.declarations.length === 1 && matchKeyword('in')) {
-                    lex();
-                    left = init;
-                    right = parseExpression();
-                    init = null;
-                }
-            } else {
-                state.allowIn = false;
-                init = parseExpression();
-                state.allowIn = true;
-
-                if (matchKeyword('in')) {
-                    // LeftHandSideExpression
-                    if (!isLeftHandSide(init)) {
-                        throwErrorTolerant({}, Messages.InvalidLHSInForIn);
-                    }
-
-                    lex();
-                    left = init;
-                    right = parseExpression();
-                    init = null;
-                }
-            }
-
-            if (typeof left === 'undefined') {
-                expect(';');
-            }
-        }
-
-        if (typeof left === 'undefined') {
-
-            if (!match(';')) {
-                test = parseExpression();
-            }
-            expect(';');
-
-            if (!match(')')) {
-                update = parseExpression();
-            }
-        }
-
-        expect(')');
-
-        oldInIteration = state.inIteration;
-        state.inIteration = true;
-
-        body = parseStatement();
-
-        state.inIteration = oldInIteration;
-
-        return (typeof left === 'undefined') ?
-                delegate.createForStatement(init, test, update, body) :
-                delegate.createForInStatement(left, right, body);
-    }
-
-    // 12.7 The continue statement
-
-    function parseContinueStatement() {
-        var label = null, key;
-
-        expectKeyword('continue');
-
-        // Optimize the most common form: 'continue;'.
-        if (source.charCodeAt(index) === 0x3B) {
-            lex();
-
-            if (!state.inIteration) {
-                throwError({}, Messages.IllegalContinue);
-            }
-
-            return delegate.createContinueStatement(null);
-        }
-
-        if (peekLineTerminator()) {
-            if (!state.inIteration) {
-                throwError({}, Messages.IllegalContinue);
-            }
-
-            return delegate.createContinueStatement(null);
-        }
-
-        if (lookahead.type === Token.Identifier) {
-            label = parseVariableIdentifier();
-
-            key = '$' + label.name;
-            if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
-                throwError({}, Messages.UnknownLabel, label.name);
-            }
-        }
-
-        consumeSemicolon();
-
-        if (label === null && !state.inIteration) {
-            throwError({}, Messages.IllegalContinue);
-        }
-
-        return delegate.createContinueStatement(label);
-    }
-
-    // 12.8 The break statement
-
-    function parseBreakStatement() {
-        var label = null, key;
-
-        expectKeyword('break');
-
-        // Catch the very common case first: immediately a semicolon (U+003B).
-        if (source.charCodeAt(index) === 0x3B) {
-            lex();
-
-            if (!(state.inIteration || state.inSwitch)) {
-                throwError({}, Messages.IllegalBreak);
-            }
-
-            return delegate.createBreakStatement(null);
-        }
-
-        if (peekLineTerminator()) {
-            if (!(state.inIteration || state.inSwitch)) {
-                throwError({}, Messages.IllegalBreak);
-            }
-
-            return delegate.createBreakStatement(null);
-        }
-
-        if (lookahead.type === Token.Identifier) {
-            label = parseVariableIdentifier();
-
-            key = '$' + label.name;
-            if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
-                throwError({}, Messages.UnknownLabel, label.name);
-            }
-        }
-
-        consumeSemicolon();
-
-        if (label === null && !(state.inIteration || state.inSwitch)) {
-            throwError({}, Messages.IllegalBreak);
-        }
-
-        return delegate.createBreakStatement(label);
-    }
-
-    // 12.9 The return statement
-
-    function parseReturnStatement() {
-        var argument = null;
-
-        expectKeyword('return');
-
-        if (!state.inFunctionBody) {
-            throwErrorTolerant({}, Messages.IllegalReturn);
-        }
-
-        // 'return' followed by a space and an identifier is very common.
-        if (source.charCodeAt(index) === 0x20) {
-            if (isIdentifierStart(source.charCodeAt(index + 1))) {
-                argument = parseExpression();
-                consumeSemicolon();
-                return delegate.createReturnStatement(argument);
-            }
-        }
-
-        if (peekLineTerminator()) {
-            return delegate.createReturnStatement(null);
-        }
-
-        if (!match(';')) {
-            if (!match('}') && lookahead.type !== Token.EOF) {
-                argument = parseExpression();
-            }
-        }
-
-        consumeSemicolon();
-
-        return delegate.createReturnStatement(argument);
-    }
-
-    // 12.10 The with statement
-
-    function parseWithStatement() {
-        var object, body;
-
-        if (strict) {
-            // TODO(ikarienator): Should we update the test cases instead?
-            skipComment();
-            throwErrorTolerant({}, Messages.StrictModeWith);
-        }
-
-        expectKeyword('with');
-
-        expect('(');
-
-        object = parseExpression();
-
-        expect(')');
-
-        body = parseStatement();
-
-        return delegate.createWithStatement(object, body);
-    }
-
-    // 12.10 The swith statement
-
-    function parseSwitchCase() {
-        var test, consequent = [], statement, startToken;
-
-        startToken = lookahead;
-        if (matchKeyword('default')) {
-            lex();
-            test = null;
-        } else {
-            expectKeyword('case');
-            test = parseExpression();
-        }
-        expect(':');
-
-        while (index < length) {
-            if (match('}') || matchKeyword('default') || matchKeyword('case')) {
-                break;
-            }
-            statement = parseStatement();
-            consequent.push(statement);
-        }
-
-        return delegate.markEnd(delegate.createSwitchCase(test, consequent), startToken);
-    }
-
-    function parseSwitchStatement() {
-        var discriminant, cases, clause, oldInSwitch, defaultFound;
-
-        expectKeyword('switch');
-
-        expect('(');
-
-        discriminant = parseExpression();
-
-        expect(')');
-
-        expect('{');
-
-        cases = [];
-
-        if (match('}')) {
-            lex();
-            return delegate.createSwitchStatement(discriminant, cases);
-        }
-
-        oldInSwitch = state.inSwitch;
-        state.inSwitch = true;
-        defaultFound = false;
-
-        while (index < length) {
-            if (match('}')) {
-                break;
-            }
-            clause = parseSwitchCase();
-            if (clause.test === null) {
-                if (defaultFound) {
-                    throwError({}, Messages.MultipleDefaultsInSwitch);
-                }
-                defaultFound = true;
-            }
-            cases.push(clause);
-        }
-
-        state.inSwitch = oldInSwitch;
-
-        expect('}');
-
-        return delegate.createSwitchStatement(discriminant, cases);
-    }
-
-    // 12.13 The throw statement
-
-    function parseThrowStatement() {
-        var argument;
-
-        expectKeyword('throw');
-
-        if (peekLineTerminator()) {
-            throwError({}, Messages.NewlineAfterThrow);
-        }
-
-        argument = parseExpression();
-
-        consumeSemicolon();
-
-        return delegate.createThrowStatement(argument);
-    }
-
-    // 12.14 The try statement
-
-    function parseCatchClause() {
-        var param, body, startToken;
-
-        startToken = lookahead;
-        expectKeyword('catch');
-
-        expect('(');
-        if (match(')')) {
-            throwUnexpected(lookahead);
-        }
-
-        param = parseVariableIdentifier();
-        // 12.14.1
-        if (strict && isRestrictedWord(param.name)) {
-            throwErrorTolerant({}, Messages.StrictCatchVariable);
-        }
-
-        expect(')');
-        body = parseBlock();
-        return delegate.markEnd(delegate.createCatchClause(param, body), startToken);
-    }
-
-    function parseTryStatement() {
-        var block, handlers = [], finalizer = null;
-
-        expectKeyword('try');
-
-        block = parseBlock();
-
-        if (matchKeyword('catch')) {
-            handlers.push(parseCatchClause());
-        }
-
-        if (matchKeyword('finally')) {
-            lex();
-            finalizer = parseBlock();
-        }
-
-        if (handlers.length === 0 && !finalizer) {
-            throwError({}, Messages.NoCatchOrFinally);
-        }
-
-        return delegate.createTryStatement(block, [], handlers, finalizer);
-    }
-
-    // 12.15 The debugger statement
-
-    function parseDebuggerStatement() {
-        expectKeyword('debugger');
-
-        consumeSemicolon();
-
-        return delegate.createDebuggerStatement();
-    }
-
-    // 12 Statements
-
-    function parseStatement() {
-        var type = lookahead.type,
-            expr,
-            labeledBody,
-            key,
-            startToken;
-
-        if (type === Token.EOF) {
-            throwUnexpected(lookahead);
-        }
-
-        if (type === Token.Punctuator && lookahead.value === '{') {
-            return parseBlock();
-        }
-
-        startToken = lookahead;
-
-        if (type === Token.Punctuator) {
-            switch (lookahead.value) {
-            case ';':
-                return delegate.markEnd(parseEmptyStatement(), startToken);
-            case '(':
-                return delegate.markEnd(parseExpressionStatement(), startToken);
-            default:
-                break;
-            }
-        }
-
-        if (type === Token.Keyword) {
-            switch (lookahead.value) {
-            case 'break':
-                return delegate.markEnd(parseBreakStatement(), startToken);
-            case 'continue':
-                return delegate.markEnd(parseContinueStatement(), startToken);
-            case 'debugger':
-                return delegate.markEnd(parseDebuggerStatement(), startToken);
-            case 'do':
-                return delegate.markEnd(parseDoWhileStatement(), startToken);
-            case 'for':
-                return delegate.markEnd(parseForStatement(), startToken);
-            case 'function':
-                return delegate.markEnd(parseFunctionDeclaration(), startToken);
-            case 'if':
-                return delegate.markEnd(parseIfStatement(), startToken);
-            case 'return':
-                return delegate.markEnd(parseReturnStatement(), startToken);
-            case 'switch':
-                return delegate.markEnd(parseSwitchStatement(), startToken);
-            case 'throw':
-                return delegate.markEnd(parseThrowStatement(), startToken);
-            case 'try':
-                return delegate.markEnd(parseTryStatement(), startToken);
-            case 'var':
-                return delegate.markEnd(parseVariableStatement(), startToken);
-            case 'while':
-                return delegate.markEnd(parseWhileStatement(), startToken);
-            case 'with':
-                return delegate.markEnd(parseWithStatement(), startToken);
-            default:
-                break;
-            }
-        }
-
-        expr = parseExpression();
-
-        // 12.12 Labelled Statements
-        if ((expr.type === Syntax.Identifier) && match(':')) {
-            lex();
-
-            key = '$' + expr.name;
-            if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
-                throwError({}, Messages.Redeclaration, 'Label', expr.name);
-            }
-
-            state.labelSet[key] = true;
-            labeledBody = parseStatement();
-            delete state.labelSet[key];
-            return delegate.markEnd(delegate.createLabeledStatement(expr, labeledBody), startToken);
-        }
-
-        consumeSemicolon();
-
-        return delegate.markEnd(delegate.createExpressionStatement(expr), startToken);
-    }
-
-    // 13 Function Definition
-
-    function parseFunctionSourceElements() {
-        var sourceElement, sourceElements = [], token, directive, firstRestricted,
-            oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, startToken;
-
-        startToken = lookahead;
-        expect('{');
-
-        while (index < length) {
-            if (lookahead.type !== Token.StringLiteral) {
-                break;
-            }
-            token = lookahead;
-
-            sourceElement = parseSourceElement();
-            sourceElements.push(sourceElement);
-            if (sourceElement.expression.type !== Syntax.Literal) {
-                // this is not directive
-                break;
-            }
-            directive = source.slice(token.start + 1, token.end - 1);
-            if (directive === 'use strict') {
-                strict = true;
-                if (firstRestricted) {
-                    throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);
-                }
-            } else {
-                if (!firstRestricted && token.octal) {
-                    firstRestricted = token;
-                }
-            }
-        }
-
-        oldLabelSet = state.labelSet;
-        oldInIteration = state.inIteration;
-        oldInSwitch = state.inSwitch;
-        oldInFunctionBody = state.inFunctionBody;
-
-        state.labelSet = {};
-        state.inIteration = false;
-        state.inSwitch = false;
-        state.inFunctionBody = true;
-
-        while (index < length) {
-            if (match('}')) {
-                break;
-            }
-            sourceElement = parseSourceElement();
-            if (typeof sourceElement === 'undefined') {
-                break;
-            }
-            sourceElements.push(sourceElement);
-        }
-
-        expect('}');
-
-        state.labelSet = oldLabelSet;
-        state.inIteration = oldInIteration;
-        state.inSwitch = oldInSwitch;
-        state.inFunctionBody = oldInFunctionBody;
-
-        return delegate.markEnd(delegate.createBlockStatement(sourceElements), startToken);
-    }
-
-    function parseParams(firstRestricted) {
-        var param, params = [], token, stricted, paramSet, key, message;
-        expect('(');
-
-        if (!match(')')) {
-            paramSet = {};
-            while (index < length) {
-                token = lookahead;
-                param = parseVariableIdentifier();
-                key = '$' + token.value;
-                if (strict) {
-                    if (isRestrictedWord(token.value)) {
-                        stricted = token;
-                        message = Messages.StrictParamName;
-                    }
-                    if (Object.prototype.hasOwnProperty.call(paramSet, key)) {
-                        stricted = token;
-                        message = Messages.StrictParamDupe;
-                    }
-                } else if (!firstRestricted) {
-                    if (isRestrictedWord(token.value)) {
-                        firstRestricted = token;
-                        message = Messages.StrictParamName;
-                    } else if (isStrictModeReservedWord(token.value)) {
-                        firstRestricted = token;
-                        message = Messages.StrictReservedWord;
-                    } else if (Object.prototype.hasOwnProperty.call(paramSet, key)) {
-                        firstRestricted = token;
-                        message = Messages.StrictParamDupe;
-                    }
-                }
-                params.push(param);
-                paramSet[key] = true;
-                if (match(')')) {
-                    break;
-                }
-                expect(',');
-            }
-        }
-
-        expect(')');
-
-        return {
-            params: params,
-            stricted: stricted,
-            firstRestricted: firstRestricted,
-            message: message
-        };
-    }
-
-    function parseFunctionDeclaration() {
-        var id, params = [], body, token, stricted, tmp, firstRestricted, message, previousStrict, startToken;
-
-        startToken = lookahead;
-
-        expectKeyword('function');
-        token = lookahead;
-        id = parseVariableIdentifier();
-        if (strict) {
-            if (isRestrictedWord(token.value)) {
-                throwErrorTolerant(token, Messages.StrictFunctionName);
-            }
-        } else {
-            if (isRestrictedWord(token.value)) {
-                firstRestricted = token;
-                message = Messages.StrictFunctionName;
-            } else if (isStrictModeReservedWord(token.value)) {
-                firstRestricted = token;
-                message = Messages.StrictReservedWord;
-            }
-        }
-
-        tmp = parseParams(firstRestricted);
-        params = tmp.params;
-        stricted = tmp.stricted;
-        firstRestricted = tmp.firstRestricted;
-        if (tmp.message) {
-            message = tmp.message;
-        }
-
-        previousStrict = strict;
-        body = parseFunctionSourceElements();
-        if (strict && firstRestricted) {
-            throwError(firstRestricted, message);
-        }
-        if (strict && stricted) {
-            throwErrorTolerant(stricted, message);
-        }
-        strict = previousStrict;
-
-        return delegate.markEnd(delegate.createFunctionDeclaration(id, params, [], body), startToken);
-    }
-
-    function parseFunctionExpression() {
-        var token, id = null, stricted, firstRestricted, message, tmp, params = [], body, previousStrict, startToken;
-
-        startToken = lookahead;
-        expectKeyword('function');
-
-        if (!match('(')) {
-            token = lookahead;
-            id = parseVariableIdentifier();
-            if (strict) {
-                if (isRestrictedWord(token.value)) {
-                    throwErrorTolerant(token, Messages.StrictFunctionName);
-                }
-            } else {
-                if (isRestrictedWord(token.value)) {
-                    firstRestricted = token;
-                    message = Messages.StrictFunctionName;
-                } else if (isStrictModeReservedWord(token.value)) {
-                    firstRestricted = token;
-                    message = Messages.StrictReservedWord;
-                }
-            }
-        }
-
-        tmp = parseParams(firstRestricted);
-        params = tmp.params;
-        stricted = tmp.stricted;
-        firstRestricted = tmp.firstRestricted;
-        if (tmp.message) {
-            message = tmp.message;
-        }
-
-        previousStrict = strict;
-        body = parseFunctionSourceElements();
-        if (strict && firstRestricted) {
-            throwError(firstRestricted, message);
-        }
-        if (strict && stricted) {
-            throwErrorTolerant(stricted, message);
-        }
-        strict = previousStrict;
-
-        return delegate.markEnd(delegate.createFunctionExpression(id, params, [], body), startToken);
-    }
-
-    // 14 Program
-
-    function parseSourceElement() {
-        if (lookahead.type === Token.Keyword) {
-            switch (lookahead.value) {
-            case 'const':
-            case 'let':
-                return parseConstLetDeclaration(lookahead.value);
-            case 'function':
-                return parseFunctionDeclaration();
-            default:
-                return parseStatement();
-            }
-        }
-
-        if (lookahead.type !== Token.EOF) {
-            return parseStatement();
-        }
-    }
-
-    function parseSourceElements() {
-        var sourceElement, sourceElements = [], token, directive, firstRestricted;
-
-        while (index < length) {
-            token = lookahead;
-            if (token.type !== Token.StringLiteral) {
-                break;
-            }
-
-            sourceElement = parseSourceElement();
-            sourceElements.push(sourceElement);
-            if (sourceElement.expression.type !== Syntax.Literal) {
-                // this is not directive
-                break;
-            }
-            directive = source.slice(token.start + 1, token.end - 1);
-            if (directive === 'use strict') {
-                strict = true;
-                if (firstRestricted) {
-                    throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);
-                }
-            } else {
-                if (!firstRestricted && token.octal) {
-                    firstRestricted = token;
-                }
-            }
-        }
-
-        while (index < length) {
-            sourceElement = parseSourceElement();
-            /* istanbul ignore if */
-            if (typeof sourceElement === 'undefined') {
-                break;
-            }
-            sourceElements.push(sourceElement);
-        }
-        return sourceElements;
-    }
-
-    function parseProgram() {
-        var body, startToken;
-
-        skipComment();
-        peek();
-        startToken = lookahead;
-        strict = false;
-
-        body = parseSourceElements();
-        return delegate.markEnd(delegate.createProgram(body), startToken);
-    }
-
-    function filterTokenLocation() {
-        var i, entry, token, tokens = [];
-
-        for (i = 0; i < extra.tokens.length; ++i) {
-            entry = extra.tokens[i];
-            token = {
-                type: entry.type,
-                value: entry.value
-            };
-            if (extra.range) {
-                token.range = entry.range;
-            }
-            if (extra.loc) {
-                token.loc = entry.loc;
-            }
-            tokens.push(token);
-        }
-
-        extra.tokens = tokens;
-    }
-
-    function tokenize(code, options) {
-        var toString,
-            token,
-            tokens;
-
-        toString = String;
-        if (typeof code !== 'string' && !(code instanceof String)) {
-            code = toString(code);
-        }
-
-        delegate = SyntaxTreeDelegate;
-        source = code;
-        index = 0;
-        lineNumber = (source.length > 0) ? 1 : 0;
-        lineStart = 0;
-        length = source.length;
-        lookahead = null;
-        state = {
-            allowIn: true,
-            labelSet: {},
-            inFunctionBody: false,
-            inIteration: false,
-            inSwitch: false,
-            lastCommentStart: -1
-        };
-
-        extra = {};
-
-        // Options matching.
-        options = options || {};
-
-        // Of course we collect tokens here.
-        options.tokens = true;
-        extra.tokens = [];
-        extra.tokenize = true;
-        // The following two fields are necessary to compute the Regex tokens.
-        extra.openParenToken = -1;
-        extra.openCurlyToken = -1;
-
-        extra.range = (typeof options.range === 'boolean') && options.range;
-        extra.loc = (typeof options.loc === 'boolean') && options.loc;
-
-        if (typeof options.comment === 'boolean' && options.comment) {
-            extra.comments = [];
-        }
-        if (typeof options.tolerant === 'boolean' && options.tolerant) {
-            extra.errors = [];
-        }
-
-        try {
-            peek();
-            if (lookahead.type === Token.EOF) {
-                return extra.tokens;
-            }
-
-            token = lex();
-            while (lookahead.type !== Token.EOF) {
-                try {
-                    token = lex();
-                } catch (lexError) {
-                    token = lookahead;
-                    if (extra.errors) {
-                        extra.errors.push(lexError);
-                        // We have to break on the first error
-                        // to avoid infinite loops.
-                        break;
-                    } else {
-                        throw lexError;
-                    }
-                }
-            }
-
-            filterTokenLocation();
-            tokens = extra.tokens;
-            if (typeof extra.comments !== 'undefined') {
-                tokens.comments = extra.comments;
-            }
-            if (typeof extra.errors !== 'undefined') {
-                tokens.errors = extra.errors;
-            }
-        } catch (e) {
-            throw e;
-        } finally {
-            extra = {};
-        }
-        return tokens;
-    }
-
-    function parse(code, options) {
-        var program, toString;
-
-        toString = String;
-        if (typeof code !== 'string' && !(code instanceof String)) {
-            code = toString(code);
-        }
-
-        delegate = SyntaxTreeDelegate;
-        source = code;
-        index = 0;
-        lineNumber = (source.length > 0) ? 1 : 0;
-        lineStart = 0;
-        length = source.length;
-        lookahead = null;
-        state = {
-            allowIn: true,
-            labelSet: {},
-            inFunctionBody: false,
-            inIteration: false,
-            inSwitch: false,
-            lastCommentStart: -1
-        };
-
-        extra = {};
-        if (typeof options !== 'undefined') {
-            extra.range = (typeof options.range === 'boolean') && options.range;
-            extra.loc = (typeof options.loc === 'boolean') && options.loc;
-            extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment;
-
-            if (extra.loc && options.source !== null && options.source !== undefined) {
-                extra.source = toString(options.source);
-            }
-
-            if (typeof options.tokens === 'boolean' && options.tokens) {
-                extra.tokens = [];
-            }
-            if (typeof options.comment === 'boolean' && options.comment) {
-                extra.comments = [];
-            }
-            if (typeof options.tolerant === 'boolean' && options.tolerant) {
-                extra.errors = [];
-            }
-            if (extra.attachComment) {
-                extra.range = true;
-                extra.comments = [];
-                extra.bottomRightStack = [];
-                extra.trailingComments = [];
-                extra.leadingComments = [];
-            }
-        }
-
-        try {
-            program = parseProgram();
-            if (typeof extra.comments !== 'undefined') {
-                program.comments = extra.comments;
-            }
-            if (typeof extra.tokens !== 'undefined') {
-                filterTokenLocation();
-                program.tokens = extra.tokens;
-            }
-            if (typeof extra.errors !== 'undefined') {
-                program.errors = extra.errors;
-            }
-        } catch (e) {
-            throw e;
-        } finally {
-            extra = {};
-        }
-
-        return program;
-    }
-
-    // Sync with *.json manifests.
-    exports.version = '1.2.2';
-
-    exports.tokenize = tokenize;
-
-    exports.parse = parse;
-
-    // Deep copy.
-   /* istanbul ignore next */
-    exports.Syntax = (function () {
-        var name, types = {};
-
-        if (typeof Object.create === 'function') {
-            types = Object.create(null);
-        }
-
-        for (name in Syntax) {
-            if (Syntax.hasOwnProperty(name)) {
-                types[name] = Syntax[name];
-            }
-        }
-
-        if (typeof Object.freeze === 'function') {
-            Object.freeze(types);
-        }
-
-        return types;
-    }());
-
-}));
-/* vim: set sw=4 ts=4 et tw=80 : */
-
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/generated/parser.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/generated/parser.js
deleted file mode 100644
index 02de9cc..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/generated/parser.js
+++ /dev/null
@@ -1,721 +0,0 @@
-/* parser generated by jison 0.4.13 */
-/*
-  Returns a Parser object of the following structure:
-
-  Parser: {
-    yy: {}
-  }
-
-  Parser.prototype: {
-    yy: {},
-    trace: function(),
-    symbols_: {associative list: name ==> number},
-    terminals_: {associative list: number ==> name},
-    productions_: [...],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),
-    table: [...],
-    defaultActions: {...},
-    parseError: function(str, hash),
-    parse: function(input),
-
-    lexer: {
-        EOF: 1,
-        parseError: function(str, hash),
-        setInput: function(input),
-        input: function(),
-        unput: function(str),
-        more: function(),
-        less: function(n),
-        pastInput: function(),
-        upcomingInput: function(),
-        showPosition: function(),
-        test_match: function(regex_match_array, rule_index),
-        next: function(),
-        lex: function(),
-        begin: function(condition),
-        popState: function(),
-        _currentRules: function(),
-        topState: function(),
-        pushState: function(condition),
-
-        options: {
-            ranges: boolean           (optional: true ==> token location info will include a .range[] member)
-            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)
-            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)
-        },
-
-        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),
-        rules: [...],
-        conditions: {associative list: name ==> set},
-    }
-  }
-
-
-  token location info (@$, _$, etc.): {
-    first_line: n,
-    last_line: n,
-    first_column: n,
-    last_column: n,
-    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)
-  }
-
-
-  the parseError function receives a 'hash' object with these members for lexer and parser errors: {
-    text:        (matched text)
-    token:       (the produced terminal token, if any)
-    line:        (yylineno)
-  }
-  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {
-    loc:         (yylloc)
-    expected:    (string describing the set of expected tokens)
-    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)
-  }
-*/
-var parser = (function(){
-var parser = {trace: function trace() { },
-yy: {},
-symbols_: {"error":2,"JSON_PATH":3,"DOLLAR":4,"PATH_COMPONENTS":5,"LEADING_CHILD_MEMBER_EXPRESSION":6,"PATH_COMPONENT":7,"MEMBER_COMPONENT":8,"SUBSCRIPT_COMPONENT":9,"CHILD_MEMBER_COMPONENT":10,"DESCENDANT_MEMBER_COMPONENT":11,"DOT":12,"MEMBER_EXPRESSION":13,"DOT_DOT":14,"STAR":15,"IDENTIFIER":16,"SCRIPT_EXPRESSION":17,"INTEGER":18,"END":19,"CHILD_SUBSCRIPT_COMPONENT":20,"DESCENDANT_SUBSCRIPT_COMPONENT":21,"[":22,"SUBSCRIPT":23,"]":24,"SUBSCRIPT_EXPRESSION":25,"SUBSCRIPT_EXPRESSION_LIST":26,"SUBSCRIPT_EXPRESSION_LISTABLE":27,",":28,"STRING_LITERAL":29,"ARRAY_SLICE":30,"FILTER_EXPRESSION":31,"QQ_STRING":32,"Q_STRING":33,"$accept":0,"$end":1},
-terminals_: {2:"error",4:"DOLLAR",12:"DOT",14:"DOT_DOT",15:"STAR",16:"IDENTIFIER",17:"SCRIPT_EXPRESSION",18:"INTEGER",19:"END",22:"[",24:"]",28:",",30:"ARRAY_SLICE",31:"FILTER_EXPRESSION",32:"QQ_STRING",33:"Q_STRING"},
-productions_: [0,[3,1],[3,2],[3,1],[3,2],[5,1],[5,2],[7,1],[7,1],[8,1],[8,1],[10,2],[6,1],[11,2],[13,1],[13,1],[13,1],[13,1],[13,1],[9,1],[9,1],[20,3],[21,4],[23,1],[23,1],[26,1],[26,3],[27,1],[27,1],[27,1],[25,1],[25,1],[25,1],[29,1],[29,1]],
-performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */
-/**/) {
-/* this == yyval */
-if (!yy.ast) {
-    yy.ast = _ast;
-    _ast.initialize();
-}
-
-var $0 = $$.length - 1;
-switch (yystate) {
-case 1:yy.ast.set({ expression: { type: "root", value: $$[$0] } }); yy.ast.unshift(); return yy.ast.yield()
-break;
-case 2:yy.ast.set({ expression: { type: "root", value: $$[$0-1] } }); yy.ast.unshift(); return yy.ast.yield()
-break;
-case 3:yy.ast.unshift(); return yy.ast.yield()
-break;
-case 4:yy.ast.set({ operation: "member", scope: "child", expression: { type: "identifier", value: $$[$0-1] }}); yy.ast.unshift(); return yy.ast.yield()
-break;
-case 5:
-break;
-case 6:
-break;
-case 7:yy.ast.set({ operation: "member" }); yy.ast.push()
-break;
-case 8:yy.ast.set({ operation: "subscript" }); yy.ast.push() 
-break;
-case 9:yy.ast.set({ scope: "child" })
-break;
-case 10:yy.ast.set({ scope: "descendant" })
-break;
-case 11:
-break;
-case 12:yy.ast.set({ scope: "child", operation: "member" })
-break;
-case 13:
-break;
-case 14:yy.ast.set({ expression: { type: "wildcard", value: $$[$0] } })
-break;
-case 15:yy.ast.set({ expression: { type: "identifier", value: $$[$0] } })
-break;
-case 16:yy.ast.set({ expression: { type: "script_expression", value: $$[$0] } })
-break;
-case 17:yy.ast.set({ expression: { type: "numeric_literal", value: parseInt($$[$0]) } })
-break;
-case 18:
-break;
-case 19:yy.ast.set({ scope: "child" })
-break;
-case 20:yy.ast.set({ scope: "descendant" })
-break;
-case 21:
-break;
-case 22:
-break;
-case 23:
-break;
-case 24:$$[$0].length > 1? yy.ast.set({ expression: { type: "union", value: $$[$0] } }) : this.$ = $$[$0]
-break;
-case 25:this.$ = [$$[$0]]
-break;
-case 26:this.$ = $$[$0-2].concat($$[$0])
-break;
-case 27:this.$ = { expression: { type: "numeric_literal", value: parseInt($$[$0]) } }; yy.ast.set(this.$)
-break;
-case 28:this.$ = { expression: { type: "string_literal", value: $$[$0] } }; yy.ast.set(this.$)
-break;
-case 29:this.$ = { expression: { type: "slice", value: $$[$0] } }; yy.ast.set(this.$)
-break;
-case 30:this.$ = { expression: { type: "wildcard", value: $$[$0] } }; yy.ast.set(this.$)
-break;
-case 31:this.$ = { expression: { type: "script_expression", value: $$[$0] } }; yy.ast.set(this.$)
-break;
-case 32:this.$ = { expression: { type: "filter_expression", value: $$[$0] } }; yy.ast.set(this.$)
-break;
-case 33:this.$ = $$[$0]
-break;
-case 34:this.$ = $$[$0]
-break;
-}
-},
-table: [{3:1,4:[1,2],6:3,13:4,15:[1,5],16:[1,6],17:[1,7],18:[1,8],19:[1,9]},{1:[3]},{1:[2,1],5:10,7:11,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,3],5:21,7:11,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,12],12:[2,12],14:[2,12],22:[2,12]},{1:[2,14],12:[2,14],14:[2,14],22:[2,14]},{1:[2,15],12:[2,15],14:[2,15],22:[2,15]},{1:[2,16],12:[2,16],14:[2,16],22:[2,16]},{1:[2,17],12:[2,17],14:[2,17],22:[2,17]},{1:[2,18],12:[2,18],14:[2,18],22:[2,18]},{1:[2,2],7:22,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,5],12:[2,5],14:[2,5],22:[2,5]},{1:[2,7],12:[2,7],14:[2,7],22:[2,7]},{1:[2,8],12:[2,8],14:[2,8],22:[2,8]},{1:[2,9],12:[2,9],14:[2,9],22:[2,9]},{1:[2,10],12:[2,10],14:[2,10],22:[2,10]},{1:[2,19],12:[2,19],14:[2,19],22:[2,19]},{1:[2,20],12:[2,20],14:[2,20],22:[2,20]},{13:23,15:[1,5],16:[1,6],17:[1,7],18:[1,8],19:[1,9]},{13:24,15:[1,5],16:[1,6],17:[1,7],18:[1,8],19:[1,9],22:[1,25]},{15:[1,29],17:[1,30],18:[1,33],23:26,25:27,26:28,27:32,29:34,30:[1,35],31:[1,31],32:[1,36],33:[1,37]},{1:[2,4],7:22,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,6],12:[2,6],14:[2,6],22:[2,6]},{1:[2,11],12:[2,11],14:[2,11],22:[2,11]},{1:[2,13],12:[2,13],14:[2,13],22:[2,13]},{15:[1,29],17:[1,30],18:[1,33],23:38,25:27,26:28,27:32,29:34,30:[1,35],31:[1,31],32:[1,36],33:[1,37]},{24:[1,39]},{24:[2,23]},{24:[2,24],28:[1,40]},{24:[2,30]},{24:[2,31]},{24:[2,32]},{24:[2,25],28:[2,25]},{24:[2,27],28:[2,27]},{24:[2,28],28:[2,28]},{24:[2,29],28:[2,29]},{24:[2,33],28:[2,33]},{24:[2,34],28:[2,34]},{24:[1,41]},{1:[2,21],12:[2,21],14:[2,21],22:[2,21]},{18:[1,33],27:42,29:34,30:[1,35],32:[1,36],33:[1,37]},{1:[2,22],12:[2,22],14:[2,22],22:[2,22]},{24:[2,26],28:[2,26]}],
-defaultActions: {27:[2,23],29:[2,30],30:[2,31],31:[2,32]},
-parseError: function parseError(str, hash) {
-    if (hash.recoverable) {
-        this.trace(str);
-    } else {
-        throw new Error(str);
-    }
-},
-parse: function parse(input) {
-    var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
-    var args = lstack.slice.call(arguments, 1);
-    this.lexer.setInput(input);
-    this.lexer.yy = this.yy;
-    this.yy.lexer = this.lexer;
-    this.yy.parser = this;
-    if (typeof this.lexer.yylloc == 'undefined') {
-        this.lexer.yylloc = {};
-    }
-    var yyloc = this.lexer.yylloc;
-    lstack.push(yyloc);
-    var ranges = this.lexer.options && this.lexer.options.ranges;
-    if (typeof this.yy.parseError === 'function') {
-        this.parseError = this.yy.parseError;
-    } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-    }
-    function popStack(n) {
-        stack.length = stack.length - 2 * n;
-        vstack.length = vstack.length - n;
-        lstack.length = lstack.length - n;
-    }
-    function lex() {
-        var token;
-        token = self.lexer.lex() || EOF;
-        if (typeof token !== 'number') {
-            token = self.symbols_[token] || token;
-        }
-        return token;
-    }
-    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
-    while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-            action = this.defaultActions[state];
-        } else {
-            if (symbol === null || typeof symbol == 'undefined') {
-                symbol = lex();
-            }
-            action = table[state] && table[state][symbol];
-        }
-                    if (typeof action === 'undefined' || !action.length || !action[0]) {
-                var errStr = '';
-                expected = [];
-                for (p in table[state]) {
-                    if (this.terminals_[p] && p > TERROR) {
-                        expected.push('\'' + this.terminals_[p] + '\'');
-                    }
-                }
-                if (this.lexer.showPosition) {
-                    errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + this.lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'';
-                } else {
-                    errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'');
-                }
-                this.parseError(errStr, {
-                    text: this.lexer.match,
-                    token: this.terminals_[symbol] || symbol,
-                    line: this.lexer.yylineno,
-                    loc: yyloc,
-                    expected: expected
-                });
-            }
-        if (action[0] instanceof Array && action.length > 1) {
-            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);
-        }
-        switch (action[0]) {
-        case 1:
-            stack.push(symbol);
-            vstack.push(this.lexer.yytext);
-            lstack.push(this.lexer.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            if (!preErrorSymbol) {
-                yyleng = this.lexer.yyleng;
-                yytext = this.lexer.yytext;
-                yylineno = this.lexer.yylineno;
-                yyloc = this.lexer.yylloc;
-                if (recovering > 0) {
-                    recovering--;
-                }
-            } else {
-                symbol = preErrorSymbol;
-                preErrorSymbol = null;
-            }
-            break;
-        case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-                first_line: lstack[lstack.length - (len || 1)].first_line,
-                last_line: lstack[lstack.length - 1].last_line,
-                first_column: lstack[lstack.length - (len || 1)].first_column,
-                last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-                yyval._$.range = [
-                    lstack[lstack.length - (len || 1)].range[0],
-                    lstack[lstack.length - 1].range[1]
-                ];
-            }
-            r = this.performAction.apply(yyval, [
-                yytext,
-                yyleng,
-                yylineno,
-                this.yy,
-                action[1],
-                vstack,
-                lstack
-            ].concat(args));
-            if (typeof r !== 'undefined') {
-                return r;
-            }
-            if (len) {
-                stack = stack.slice(0, -1 * len * 2);
-                vstack = vstack.slice(0, -1 * len);
-                lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-        case 3:
-            return true;
-        }
-    }
-    return true;
-}};
-var _ast = {
-
-  initialize: function() {
-    this._nodes = [];
-    this._node = {};
-    this._stash = [];
-  },
-
-  set: function(props) {
-    for (var k in props) this._node[k] = props[k];
-    return this._node;
-  },
-
-  node: function(obj) {
-    if (arguments.length) this._node = obj;
-    return this._node;
-  },
-
-  push: function() {
-    this._nodes.push(this._node);
-    this._node = {};
-  },
-
-  unshift: function() {
-    this._nodes.unshift(this._node);
-    this._node = {};
-  },
-
-  yield: function() {
-    var _nodes = this._nodes;
-    this.initialize();
-    return _nodes;
-  }
-};
-/* generated by jison-lex 0.2.1 */
-var lexer = (function(){
-var lexer = {
-
-EOF:1,
-
-parseError:function parseError(str, hash) {
-        if (this.yy.parser) {
-            this.yy.parser.parseError(str, hash);
-        } else {
-            throw new Error(str);
-        }
-    },
-
-// resets the lexer, sets new input
-setInput:function (input) {
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = '';
-        this.conditionStack = ['INITIAL'];
-        this.yylloc = {
-            first_line: 1,
-            first_column: 0,
-            last_line: 1,
-            last_column: 0
-        };
-        if (this.options.ranges) {
-            this.yylloc.range = [0,0];
-        }
-        this.offset = 0;
-        return this;
-    },
-
-// consumes and returns one char from the input
-input:function () {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-            this.yylineno++;
-            this.yylloc.last_line++;
-        } else {
-            this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-            this.yylloc.range[1]++;
-        }
-
-        this._input = this._input.slice(1);
-        return ch;
-    },
-
-// unshifts one char (or a string) into the input
-unput:function (ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);
-        //this.yyleng -= len;
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-
-        if (lines.length - 1) {
-            this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-
-        this.yylloc = {
-            first_line: this.yylloc.first_line,
-            last_line: this.yylineno + 1,
-            first_column: this.yylloc.first_column,
-            last_column: lines ?
-                (lines.length === oldLines.length ? this.yylloc.first_column : 0)
-                 + oldLines[oldLines.length - lines.length].length - lines[0].length :
-              this.yylloc.first_column - len
-        };
-
-        if (this.options.ranges) {
-            this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-    },
-
-// When called from action, caches matched text and appends it on next action
-more:function () {
-        this._more = true;
-        return this;
-    },
-
-// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-reject:function () {
-        if (this.options.backtrack_lexer) {
-            this._backtrack = true;
-        } else {
-            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), {
-                text: "",
-                token: null,
-                line: this.yylineno
-            });
-
-        }
-        return this;
-    },
-
-// retain first n characters of the match
-less:function (n) {
-        this.unput(this.match.slice(n));
-    },
-
-// displays already matched input, i.e. for error messages
-pastInput:function () {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
-    },
-
-// displays upcoming input, i.e. for error messages
-upcomingInput:function () {
-        var next = this.match;
-        if (next.length < 20) {
-            next += this._input.substr(0, 20-next.length);
-        }
-        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, "");
-    },
-
-// displays the character position where the lexing error occurred, i.e. for error messages
-showPosition:function () {
-        var pre = this.pastInput();
-        var c = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c + "^";
-    },
-
-// test the lexed token: return FALSE when not a match, otherwise return token
-test_match:function (match, indexed_rule) {
-        var token,
-            lines,
-            backup;
-
-        if (this.options.backtrack_lexer) {
-            // save context
-            backup = {
-                yylineno: this.yylineno,
-                yylloc: {
-                    first_line: this.yylloc.first_line,
-                    last_line: this.last_line,
-                    first_column: this.yylloc.first_column,
-                    last_column: this.yylloc.last_column
-                },
-                yytext: this.yytext,
-                match: this.match,
-                matches: this.matches,
-                matched: this.matched,
-                yyleng: this.yyleng,
-                offset: this.offset,
-                _more: this._more,
-                _input: this._input,
-                yy: this.yy,
-                conditionStack: this.conditionStack.slice(0),
-                done: this.done
-            };
-            if (this.options.ranges) {
-                backup.yylloc.range = this.yylloc.range.slice(0);
-            }
-        }
-
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-            this.yylineno += lines.length;
-        }
-        this.yylloc = {
-            first_line: this.yylloc.last_line,
-            last_line: this.yylineno + 1,
-            first_column: this.yylloc.last_column,
-            last_column: lines ?
-                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length :
-                         this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-            this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-            this.done = false;
-        }
-        if (token) {
-            return token;
-        } else if (this._backtrack) {
-            // recover context
-            for (var k in backup) {
-                this[k] = backup[k];
-            }
-            return false; // rule action called reject() implying the next rule should be tested instead.
-        }
-        return false;
-    },
-
-// return next match in input
-next:function () {
-        if (this.done) {
-            return this.EOF;
-        }
-        if (!this._input) {
-            this.done = true;
-        }
-
-        var token,
-            match,
-            tempMatch,
-            index;
-        if (!this._more) {
-            this.yytext = '';
-            this.match = '';
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-            tempMatch = this._input.match(this.rules[rules[i]]);
-            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-                match = tempMatch;
-                index = i;
-                if (this.options.backtrack_lexer) {
-                    token = this.test_match(tempMatch, rules[i]);
-                    if (token !== false) {
-                        return token;
-                    } else if (this._backtrack) {
-                        match = false;
-                        continue; // rule action called reject() implying a rule MISmatch.
-                    } else {
-                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
-                        return false;
-                    }
-                } else if (!this.options.flex) {
-                    break;
-                }
-            }
-        }
-        if (match) {
-            token = this.test_match(match, rules[index]);
-            if (token !== false) {
-                return token;
-            }
-            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
-            return false;
-        }
-        if (this._input === "") {
-            return this.EOF;
-        } else {
-            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), {
-                text: "",
-                token: null,
-                line: this.yylineno
-            });
-        }
-    },
-
-// return next match that has a token
-lex:function lex() {
-        var r = this.next();
-        if (r) {
-            return r;
-        } else {
-            return this.lex();
-        }
-    },
-
-// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-begin:function begin(condition) {
-        this.conditionStack.push(condition);
-    },
-
-// pop the previously active lexer condition state off the condition stack
-popState:function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-            return this.conditionStack.pop();
-        } else {
-            return this.conditionStack[0];
-        }
-    },
-
-// produce the lexer rule set which is active for the currently active lexer condition state
-_currentRules:function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-            return this.conditions["INITIAL"].rules;
-        }
-    },
-
-// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-topState:function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-            return this.conditionStack[n];
-        } else {
-            return "INITIAL";
-        }
-    },
-
-// alias for begin(condition)
-pushState:function pushState(condition) {
-        this.begin(condition);
-    },
-
-// return the number of states currently on the stack
-stateStackSize:function stateStackSize() {
-        return this.conditionStack.length;
-    },
-options: {},
-performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START
-/**/) {
-
-var YYSTATE=YY_START;
-switch($avoiding_name_collisions) {
-case 0:return 4
-break;
-case 1:return 14
-break;
-case 2:return 12
-break;
-case 3:return 15
-break;
-case 4:return 16
-break;
-case 5:return 22
-break;
-case 6:return 24
-break;
-case 7:return 28
-break;
-case 8:return 30
-break;
-case 9:return 18
-break;
-case 10:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 32;
-break;
-case 11:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 33;
-break;
-case 12:return 17
-break;
-case 13:return 31
-break;
-}
-},
-rules: [/^(?:\$)/,/^(?:\.\.)/,/^(?:\.)/,/^(?:\*)/,/^(?:[a-zA-Z_]+[a-zA-Z0-9_]*)/,/^(?:\[)/,/^(?:\])/,/^(?:,)/,/^(?:((-?(?:0|[1-9][0-9]*)))?\:((-?(?:0|[1-9][0-9]*)))?(\:((-?(?:0|[1-9][0-9]*)))?)?)/,/^(?:(-?(?:0|[1-9][0-9]*)))/,/^(?:"(?:\\["bfnrt/\\]|\\u[a-fA-F0-9]{4}|[^"\\])*")/,/^(?:'(?:\\['bfnrt/\\]|\\u[a-fA-F0-9]{4}|[^'\\])*')/,/^(?:\(.+?\)(?=\]))/,/^(?:\?\(.+?\)(?=\]))/],
-conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],"inclusive":true}}
-};
-return lexer;
-})();
-parser.lexer = lexer;
-function Parser () {
-  this.yy = {};
-}
-Parser.prototype = parser;parser.Parser = Parser;
-return new Parser;
-})();
-
-
-if (typeof require !== 'undefined' && typeof exports !== 'undefined') {
-exports.parser = parser;
-exports.Parser = parser.Parser;
-exports.parse = function () { return parser.parse.apply(parser, arguments); };
-exports.main = function commonjsMain(args) {
-    if (!args[1]) {
-        console.log('Usage: '+args[0]+' FILE');
-        process.exit(1);
-    }
-    var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8");
-    return exports.parser.parse(source);
-};
-if (typeof module !== 'undefined' && require.main === module) {
-  exports.main(process.argv.slice(1));
-}
-}
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/include/action.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/include/action.js
deleted file mode 100644
index f4a102e..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/include/action.js
+++ /dev/null
@@ -1,4 +0,0 @@
-if (!yy.ast) {
-    yy.ast = _ast;
-    _ast.initialize();
-}
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/include/module.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/include/module.js
deleted file mode 100644
index a1329e3..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/include/module.js
+++ /dev/null
@@ -1,34 +0,0 @@
-var _ast = {
-
-  initialize: function() {
-    this._nodes = [];
-    this._node = {};
-    this._stash = [];
-  },
-
-  set: function(props) {
-    for (var k in props) this._node[k] = props[k];
-    return this._node;
-  },
-
-  node: function(obj) {
-    if (arguments.length) this._node = obj;
-    return this._node;
-  },
-
-  push: function() {
-    this._nodes.push(this._node);
-    this._node = {};
-  },
-
-  unshift: function() {
-    this._nodes.unshift(this._node);
-    this._node = {};
-  },
-
-  yield: function() {
-    var _nodes = this._nodes;
-    this.initialize();
-    return _nodes;
-  }
-};
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/index.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/index.js
deleted file mode 100644
index b58e228..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/index.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('./lib/index');
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/jsonpath.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/jsonpath.js
deleted file mode 100644
index 5d88634..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/jsonpath.js
+++ /dev/null
@@ -1,6842 +0,0 @@
-/*! jsonpath 1.0.2 */
-
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.jsonpath = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"./aesprim":[function(require,module,exports){
-/*
-  Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>
-  Copyright (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>
-  Copyright (C) 2013 Mathias Bynens <mathias@qiwi.be>
-  Copyright (C) 2012 Ariya Hidayat <ariya.hidayat@gmail.com>
-  Copyright (C) 2012 Mathias Bynens <mathias@qiwi.be>
-  Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>
-  Copyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>
-  Copyright (C) 2012 Yusuke Suzuki <utatane.tea@gmail.com>
-  Copyright (C) 2012 Arpad Borsos <arpad.borsos@googlemail.com>
-  Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>
-
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-
-  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-  ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
-  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-/*jslint bitwise:true plusplus:true */
-/*global esprima:true, define:true, exports:true, window: true,
-throwErrorTolerant: true,
-throwError: true, generateStatement: true, peek: true,
-parseAssignmentExpression: true, parseBlock: true, parseExpression: true,
-parseFunctionDeclaration: true, parseFunctionExpression: true,
-parseFunctionSourceElements: true, parseVariableIdentifier: true,
-parseLeftHandSideExpression: true,
-parseUnaryExpression: true,
-parseStatement: true, parseSourceElement: true */
-
-(function (root, factory) {
-    'use strict';
-
-    // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js,
-    // Rhino, and plain browser loading.
-
-    /* istanbul ignore next */
-    if (typeof define === 'function' && define.amd) {
-        define(['exports'], factory);
-    } else if (typeof exports !== 'undefined') {
-        factory(exports);
-    } else {
-        factory((root.esprima = {}));
-    }
-}(this, function (exports) {
-    'use strict';
-
-    var Token,
-        TokenName,
-        FnExprTokens,
-        Syntax,
-        PropertyKind,
-        Messages,
-        Regex,
-        SyntaxTreeDelegate,
-        source,
-        strict,
-        index,
-        lineNumber,
-        lineStart,
-        length,
-        delegate,
-        lookahead,
-        state,
-        extra;
-
-    Token = {
-        BooleanLiteral: 1,
-        EOF: 2,
-        Identifier: 3,
-        Keyword: 4,
-        NullLiteral: 5,
-        NumericLiteral: 6,
-        Punctuator: 7,
-        StringLiteral: 8,
-        RegularExpression: 9
-    };
-
-    TokenName = {};
-    TokenName[Token.BooleanLiteral] = 'Boolean';
-    TokenName[Token.EOF] = '<end>';
-    TokenName[Token.Identifier] = 'Identifier';
-    TokenName[Token.Keyword] = 'Keyword';
-    TokenName[Token.NullLiteral] = 'Null';
-    TokenName[Token.NumericLiteral] = 'Numeric';
-    TokenName[Token.Punctuator] = 'Punctuator';
-    TokenName[Token.StringLiteral] = 'String';
-    TokenName[Token.RegularExpression] = 'RegularExpression';
-
-    // A function following one of those tokens is an expression.
-    FnExprTokens = ['(', '{', '[', 'in', 'typeof', 'instanceof', 'new',
-                    'return', 'case', 'delete', 'throw', 'void',
-                    // assignment operators
-                    '=', '+=', '-=', '*=', '/=', '%=', '<<=', '>>=', '>>>=',
-                    '&=', '|=', '^=', ',',
-                    // binary/unary operators
-                    '+', '-', '*', '/', '%', '++', '--', '<<', '>>', '>>>', '&',
-                    '|', '^', '!', '~', '&&', '||', '?', ':', '===', '==', '>=',
-                    '<=', '<', '>', '!=', '!=='];
-
-    Syntax = {
-        AssignmentExpression: 'AssignmentExpression',
-        ArrayExpression: 'ArrayExpression',
-        BlockStatement: 'BlockStatement',
-        BinaryExpression: 'BinaryExpression',
-        BreakStatement: 'BreakStatement',
-        CallExpression: 'CallExpression',
-        CatchClause: 'CatchClause',
-        ConditionalExpression: 'ConditionalExpression',
-        ContinueStatement: 'ContinueStatement',
-        DoWhileStatement: 'DoWhileStatement',
-        DebuggerStatement: 'DebuggerStatement',
-        EmptyStatement: 'EmptyStatement',
-        ExpressionStatement: 'ExpressionStatement',
-        ForStatement: 'ForStatement',
-        ForInStatement: 'ForInStatement',
-        FunctionDeclaration: 'FunctionDeclaration',
-        FunctionExpression: 'FunctionExpression',
-        Identifier: 'Identifier',
-        IfStatement: 'IfStatement',
-        Literal: 'Literal',
-        LabeledStatement: 'LabeledStatement',
-        LogicalExpression: 'LogicalExpression',
-        MemberExpression: 'MemberExpression',
-        NewExpression: 'NewExpression',
-        ObjectExpression: 'ObjectExpression',
-        Program: 'Program',
-        Property: 'Property',
-        ReturnStatement: 'ReturnStatement',
-        SequenceExpression: 'SequenceExpression',
-        SwitchStatement: 'SwitchStatement',
-        SwitchCase: 'SwitchCase',
-        ThisExpression: 'ThisExpression',
-        ThrowStatement: 'ThrowStatement',
-        TryStatement: 'TryStatement',
-        UnaryExpression: 'UnaryExpression',
-        UpdateExpression: 'UpdateExpression',
-        VariableDeclaration: 'VariableDeclaration',
-        VariableDeclarator: 'VariableDeclarator',
-        WhileStatement: 'WhileStatement',
-        WithStatement: 'WithStatement'
-    };
-
-    PropertyKind = {
-        Data: 1,
-        Get: 2,
-        Set: 4
-    };
-
-    // Error messages should be identical to V8.
-    Messages = {
-        UnexpectedToken:  'Unexpected token %0',
-        UnexpectedNumber:  'Unexpected number',
-        UnexpectedString:  'Unexpected string',
-        UnexpectedIdentifier:  'Unexpected identifier',
-        UnexpectedReserved:  'Unexpected reserved word',
-        UnexpectedEOS:  'Unexpected end of input',
-        NewlineAfterThrow:  'Illegal newline after throw',
-        InvalidRegExp: 'Invalid regular expression',
-        UnterminatedRegExp:  'Invalid regular expression: missing /',
-        InvalidLHSInAssignment:  'Invalid left-hand side in assignment',
-        InvalidLHSInForIn:  'Invalid left-hand side in for-in',
-        MultipleDefaultsInSwitch: 'More than one default clause in switch statement',
-        NoCatchOrFinally:  'Missing catch or finally after try',
-        UnknownLabel: 'Undefined label \'%0\'',
-        Redeclaration: '%0 \'%1\' has already been declared',
-        IllegalContinue: 'Illegal continue statement',
-        IllegalBreak: 'Illegal break statement',
-        IllegalReturn: 'Illegal return statement',
-        StrictModeWith:  'Strict mode code may not include a with statement',
-        StrictCatchVariable:  'Catch variable may not be eval or arguments in strict mode',
-        StrictVarName:  'Variable name may not be eval or arguments in strict mode',
-        StrictParamName:  'Parameter name eval or arguments is not allowed in strict mode',
-        StrictParamDupe: 'Strict mode function may not have duplicate parameter names',
-        StrictFunctionName:  'Function name may not be eval or arguments in strict mode',
-        StrictOctalLiteral:  'Octal literals are not allowed in strict mode.',
-        StrictDelete:  'Delete of an unqualified identifier in strict mode.',
-        StrictDuplicateProperty:  'Duplicate data property in object literal not allowed in strict mode',
-        AccessorDataProperty:  'Object literal may not have data and accessor property with the same name',
-        AccessorGetSet:  'Object literal may not have multiple get/set accessors with the same name',
-        StrictLHSAssignment:  'Assignment to eval or arguments is not allowed in strict mode',
-        StrictLHSPostfix:  'Postfix increment/decrement may not have eval or arguments operand in strict mode',
-        StrictLHSPrefix:  'Prefix increment/decrement may not have eval or arguments operand in strict mode',
-        StrictReservedWord:  'Use of future reserved word in strict mode'
-    };
-
-    // See also tools/generate-unicode-regex.py.
-    Regex = {
-        NonAsciiIdentifierStart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]'),
-        NonAsciiIdentifierPart: new RegExp('[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]')
-    };
-
-    // Ensure the condition is true, otherwise throw an error.
-    // This is only to have a better contract semantic, i.e. another safety net
-    // to catch a logic error. The condition shall be fulfilled in normal case.
-    // Do NOT use this to enforce a certain condition on any user input.
-
-    function assert(condition, message) {
-        /* istanbul ignore if */
-        if (!condition) {
-            throw new Error('ASSERT: ' + message);
-        }
-    }
-
-    function isDecimalDigit(ch) {
-        return (ch >= 48 && ch <= 57);   // 0..9
-    }
-
-    function isHexDigit(ch) {
-        return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;
-    }
-
-    function isOctalDigit(ch) {
-        return '01234567'.indexOf(ch) >= 0;
-    }
-
-
-    // 7.2 White Space
-
-    function isWhiteSpace(ch) {
-        return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||
-            (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);
-    }
-
-    // 7.3 Line Terminators
-
-    function isLineTerminator(ch) {
-        return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);
-    }
-
-    // 7.6 Identifier Names and Identifiers
-
-    function isIdentifierStart(ch) {
-        return (ch == 0x40) ||  (ch === 0x24) || (ch === 0x5F) ||  // $ (dollar) and _ (underscore)
-            (ch >= 0x41 && ch <= 0x5A) ||         // A..Z
-            (ch >= 0x61 && ch <= 0x7A) ||         // a..z
-            (ch === 0x5C) ||                      // \ (backslash)
-            ((ch >= 0x80) && Regex.NonAsciiIdentifierStart.test(String.fromCharCode(ch)));
-    }
-
-    function isIdentifierPart(ch) {
-        return (ch === 0x24) || (ch === 0x5F) ||  // $ (dollar) and _ (underscore)
-            (ch >= 0x41 && ch <= 0x5A) ||         // A..Z
-            (ch >= 0x61 && ch <= 0x7A) ||         // a..z
-            (ch >= 0x30 && ch <= 0x39) ||         // 0..9
-            (ch === 0x5C) ||                      // \ (backslash)
-            ((ch >= 0x80) && Regex.NonAsciiIdentifierPart.test(String.fromCharCode(ch)));
-    }
-
-    // 7.6.1.2 Future Reserved Words
-
-    function isFutureReservedWord(id) {
-        switch (id) {
-        case 'class':
-        case 'enum':
-        case 'export':
-        case 'extends':
-        case 'import':
-        case 'super':
-            return true;
-        default:
-            return false;
-        }
-    }
-
-    function isStrictModeReservedWord(id) {
-        switch (id) {
-        case 'implements':
-        case 'interface':
-        case 'package':
-        case 'private':
-        case 'protected':
-        case 'public':
-        case 'static':
-        case 'yield':
-        case 'let':
-            return true;
-        default:
-            return false;
-        }
-    }
-
-    function isRestrictedWord(id) {
-        return id === 'eval' || id === 'arguments';
-    }
-
-    // 7.6.1.1 Keywords
-
-    function isKeyword(id) {
-        if (strict && isStrictModeReservedWord(id)) {
-            return true;
-        }
-
-        // 'const' is specialized as Keyword in V8.
-        // 'yield' and 'let' are for compatiblity with SpiderMonkey and ES.next.
-        // Some others are from future reserved words.
-
-        switch (id.length) {
-        case 2:
-            return (id === 'if') || (id === 'in') || (id === 'do');
-        case 3:
-            return (id === 'var') || (id === 'for') || (id === 'new') ||
-                (id === 'try') || (id === 'let');
-        case 4:
-            return (id === 'this') || (id === 'else') || (id === 'case') ||
-                (id === 'void') || (id === 'with') || (id === 'enum');
-        case 5:
-            return (id === 'while') || (id === 'break') || (id === 'catch') ||
-                (id === 'throw') || (id === 'const') || (id === 'yield') ||
-                (id === 'class') || (id === 'super');
-        case 6:
-            return (id === 'return') || (id === 'typeof') || (id === 'delete') ||
-                (id === 'switch') || (id === 'export') || (id === 'import');
-        case 7:
-            return (id === 'default') || (id === 'finally') || (id === 'extends');
-        case 8:
-            return (id === 'function') || (id === 'continue') || (id === 'debugger');
-        case 10:
-            return (id === 'instanceof');
-        default:
-            return false;
-        }
-    }
-
-    // 7.4 Comments
-
-    function addComment(type, value, start, end, loc) {
-        var comment, attacher;
-
-        assert(typeof start === 'number', 'Comment must have valid position');
-
-        // Because the way the actual token is scanned, often the comments
-        // (if any) are skipped twice during the lexical analysis.
-        // Thus, we need to skip adding a comment if the comment array already
-        // handled it.
-        if (state.lastCommentStart >= start) {
-            return;
-        }
-        state.lastCommentStart = start;
-
-        comment = {
-            type: type,
-            value: value
-        };
-        if (extra.range) {
-            comment.range = [start, end];
-        }
-        if (extra.loc) {
-            comment.loc = loc;
-        }
-        extra.comments.push(comment);
-        if (extra.attachComment) {
-            extra.leadingComments.push(comment);
-            extra.trailingComments.push(comment);
-        }
-    }
-
-    function skipSingleLineComment(offset) {
-        var start, loc, ch, comment;
-
-        start = index - offset;
-        loc = {
-            start: {
-                line: lineNumber,
-                column: index - lineStart - offset
-            }
-        };
-
-        while (index < length) {
-            ch = source.charCodeAt(index);
-            ++index;
-            if (isLineTerminator(ch)) {
-                if (extra.comments) {
-                    comment = source.slice(start + offset, index - 1);
-                    loc.end = {
-                        line: lineNumber,
-                        column: index - lineStart - 1
-                    };
-                    addComment('Line', comment, start, index - 1, loc);
-                }
-                if (ch === 13 && source.charCodeAt(index) === 10) {
-                    ++index;
-                }
-                ++lineNumber;
-                lineStart = index;
-                return;
-            }
-        }
-
-        if (extra.comments) {
-            comment = source.slice(start + offset, index);
-            loc.end = {
-                line: lineNumber,
-                column: index - lineStart
-            };
-            addComment('Line', comment, start, index, loc);
-        }
-    }
-
-    function skipMultiLineComment() {
-        var start, loc, ch, comment;
-
-        if (extra.comments) {
-            start = index - 2;
-            loc = {
-                start: {
-                    line: lineNumber,
-                    column: index - lineStart - 2
-                }
-            };
-        }
-
-        while (index < length) {
-            ch = source.charCodeAt(index);
-            if (isLineTerminator(ch)) {
-                if (ch === 0x0D && source.charCodeAt(index + 1) === 0x0A) {
-                    ++index;
-                }
-                ++lineNumber;
-                ++index;
-                lineStart = index;
-                if (index >= length) {
-                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-                }
-            } else if (ch === 0x2A) {
-                // Block comment ends with '*/'.
-                if (source.charCodeAt(index + 1) === 0x2F) {
-                    ++index;
-                    ++index;
-                    if (extra.comments) {
-                        comment = source.slice(start + 2, index - 2);
-                        loc.end = {
-                            line: lineNumber,
-                            column: index - lineStart
-                        };
-                        addComment('Block', comment, start, index, loc);
-                    }
-                    return;
-                }
-                ++index;
-            } else {
-                ++index;
-            }
-        }
-
-        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-    }
-
-    function skipComment() {
-        var ch, start;
-
-        start = (index === 0);
-        while (index < length) {
-            ch = source.charCodeAt(index);
-
-            if (isWhiteSpace(ch)) {
-                ++index;
-            } else if (isLineTerminator(ch)) {
-                ++index;
-                if (ch === 0x0D && source.charCodeAt(index) === 0x0A) {
-                    ++index;
-                }
-                ++lineNumber;
-                lineStart = index;
-                start = true;
-            } else if (ch === 0x2F) { // U+002F is '/'
-                ch = source.charCodeAt(index + 1);
-                if (ch === 0x2F) {
-                    ++index;
-                    ++index;
-                    skipSingleLineComment(2);
-                    start = true;
-                } else if (ch === 0x2A) {  // U+002A is '*'
-                    ++index;
-                    ++index;
-                    skipMultiLineComment();
-                } else {
-                    break;
-                }
-            } else if (start && ch === 0x2D) { // U+002D is '-'
-                // U+003E is '>'
-                if ((source.charCodeAt(index + 1) === 0x2D) && (source.charCodeAt(index + 2) === 0x3E)) {
-                    // '-->' is a single-line comment
-                    index += 3;
-                    skipSingleLineComment(3);
-                } else {
-                    break;
-                }
-            } else if (ch === 0x3C) { // U+003C is '<'
-                if (source.slice(index + 1, index + 4) === '!--') {
-                    ++index; // `<`
-                    ++index; // `!`
-                    ++index; // `-`
-                    ++index; // `-`
-                    skipSingleLineComment(4);
-                } else {
-                    break;
-                }
-            } else {
-                break;
-            }
-        }
-    }
-
-    function scanHexEscape(prefix) {
-        var i, len, ch, code = 0;
-
-        len = (prefix === 'u') ? 4 : 2;
-        for (i = 0; i < len; ++i) {
-            if (index < length && isHexDigit(source[index])) {
-                ch = source[index++];
-                code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());
-            } else {
-                return '';
-            }
-        }
-        return String.fromCharCode(code);
-    }
-
-    function getEscapedIdentifier() {
-        var ch, id;
-
-        ch = source.charCodeAt(index++);
-        id = String.fromCharCode(ch);
-
-        // '\u' (U+005C, U+0075) denotes an escaped character.
-        if (ch === 0x5C) {
-            if (source.charCodeAt(index) !== 0x75) {
-                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-            }
-            ++index;
-            ch = scanHexEscape('u');
-            if (!ch || ch === '\\' || !isIdentifierStart(ch.charCodeAt(0))) {
-                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-            }
-            id = ch;
-        }
-
-        while (index < length) {
-            ch = source.charCodeAt(index);
-            if (!isIdentifierPart(ch)) {
-                break;
-            }
-            ++index;
-            id += String.fromCharCode(ch);
-
-            // '\u' (U+005C, U+0075) denotes an escaped character.
-            if (ch === 0x5C) {
-                id = id.substr(0, id.length - 1);
-                if (source.charCodeAt(index) !== 0x75) {
-                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-                }
-                ++index;
-                ch = scanHexEscape('u');
-                if (!ch || ch === '\\' || !isIdentifierPart(ch.charCodeAt(0))) {
-                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-                }
-                id += ch;
-            }
-        }
-
-        return id;
-    }
-
-    function getIdentifier() {
-        var start, ch;
-
-        start = index++;
-        while (index < length) {
-            ch = source.charCodeAt(index);
-            if (ch === 0x5C) {
-                // Blackslash (U+005C) marks Unicode escape sequence.
-                index = start;
-                return getEscapedIdentifier();
-            }
-            if (isIdentifierPart(ch)) {
-                ++index;
-            } else {
-                break;
-            }
-        }
-
-        return source.slice(start, index);
-    }
-
-    function scanIdentifier() {
-        var start, id, type;
-
-        start = index;
-
-        // Backslash (U+005C) starts an escaped character.
-        id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier();
-
-        // There is no keyword or literal with only one character.
-        // Thus, it must be an identifier.
-        if (id.length === 1) {
-            type = Token.Identifier;
-        } else if (isKeyword(id)) {
-            type = Token.Keyword;
-        } else if (id === 'null') {
-            type = Token.NullLiteral;
-        } else if (id === 'true' || id === 'false') {
-            type = Token.BooleanLiteral;
-        } else {
-            type = Token.Identifier;
-        }
-
-        return {
-            type: type,
-            value: id,
-            lineNumber: lineNumber,
-            lineStart: lineStart,
-            start: start,
-            end: index
-        };
-    }
-
-
-    // 7.7 Punctuators
-
-    function scanPunctuator() {
-        var start = index,
-            code = source.charCodeAt(index),
-            code2,
-            ch1 = source[index],
-            ch2,
-            ch3,
-            ch4;
-
-        switch (code) {
-
-        // Check for most common single-character punctuators.
-        case 0x2E:  // . dot
-        case 0x28:  // ( open bracket
-        case 0x29:  // ) close bracket
-        case 0x3B:  // ; semicolon
-        case 0x2C:  // , comma
-        case 0x7B:  // { open curly brace
-        case 0x7D:  // } close curly brace
-        case 0x5B:  // [
-        case 0x5D:  // ]
-        case 0x3A:  // :
-        case 0x3F:  // ?
-        case 0x7E:  // ~
-            ++index;
-            if (extra.tokenize) {
-                if (code === 0x28) {
-                    extra.openParenToken = extra.tokens.length;
-                } else if (code === 0x7B) {
-                    extra.openCurlyToken = extra.tokens.length;
-                }
-            }
-            return {
-                type: Token.Punctuator,
-                value: String.fromCharCode(code),
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: start,
-                end: index
-            };
-
-        default:
-            code2 = source.charCodeAt(index + 1);
-
-            // '=' (U+003D) marks an assignment or comparison operator.
-            if (code2 === 0x3D) {
-                switch (code) {
-                case 0x2B:  // +
-                case 0x2D:  // -
-                case 0x2F:  // /
-                case 0x3C:  // <
-                case 0x3E:  // >
-                case 0x5E:  // ^
-                case 0x7C:  // |
-                case 0x25:  // %
-                case 0x26:  // &
-                case 0x2A:  // *
-                    index += 2;
-                    return {
-                        type: Token.Punctuator,
-                        value: String.fromCharCode(code) + String.fromCharCode(code2),
-                        lineNumber: lineNumber,
-                        lineStart: lineStart,
-                        start: start,
-                        end: index
-                    };
-
-                case 0x21: // !
-                case 0x3D: // =
-                    index += 2;
-
-                    // !== and ===
-                    if (source.charCodeAt(index) === 0x3D) {
-                        ++index;
-                    }
-                    return {
-                        type: Token.Punctuator,
-                        value: source.slice(start, index),
-                        lineNumber: lineNumber,
-                        lineStart: lineStart,
-                        start: start,
-                        end: index
-                    };
-                }
-            }
-        }
-
-        // 4-character punctuator: >>>=
-
-        ch4 = source.substr(index, 4);
-
-        if (ch4 === '>>>=') {
-            index += 4;
-            return {
-                type: Token.Punctuator,
-                value: ch4,
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: start,
-                end: index
-            };
-        }
-
-        // 3-character punctuators: === !== >>> <<= >>=
-
-        ch3 = ch4.substr(0, 3);
-
-        if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {
-            index += 3;
-            return {
-                type: Token.Punctuator,
-                value: ch3,
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: start,
-                end: index
-            };
-        }
-
-        // Other 2-character punctuators: ++ -- << >> && ||
-        ch2 = ch3.substr(0, 2);
-
-        if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') {
-            index += 2;
-            return {
-                type: Token.Punctuator,
-                value: ch2,
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: start,
-                end: index
-            };
-        }
-
-        // 1-character punctuators: < > = ! + - * % & | ^ /
-        if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {
-            ++index;
-            return {
-                type: Token.Punctuator,
-                value: ch1,
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: start,
-                end: index
-            };
-        }
-
-        throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-    }
-
-    // 7.8.3 Numeric Literals
-
-    function scanHexLiteral(start) {
-        var number = '';
-
-        while (index < length) {
-            if (!isHexDigit(source[index])) {
-                break;
-            }
-            number += source[index++];
-        }
-
-        if (number.length === 0) {
-            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-        }
-
-        if (isIdentifierStart(source.charCodeAt(index))) {
-            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-        }
-
-        return {
-            type: Token.NumericLiteral,
-            value: parseInt('0x' + number, 16),
-            lineNumber: lineNumber,
-            lineStart: lineStart,
-            start: start,
-            end: index
-        };
-    }
-
-    function scanOctalLiteral(start) {
-        var number = '0' + source[index++];
-        while (index < length) {
-            if (!isOctalDigit(source[index])) {
-                break;
-            }
-            number += source[index++];
-        }
-
-        if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {
-            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-        }
-
-        return {
-            type: Token.NumericLiteral,
-            value: parseInt(number, 8),
-            octal: true,
-            lineNumber: lineNumber,
-            lineStart: lineStart,
-            start: start,
-            end: index
-        };
-    }
-
-    function scanNumericLiteral() {
-        var number, start, ch;
-
-        ch = source[index];
-        assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),
-            'Numeric literal must start with a decimal digit or a decimal point');
-
-        start = index;
-        number = '';
-        if (ch !== '.') {
-            number = source[index++];
-            ch = source[index];
-
-            // Hex number starts with '0x'.
-            // Octal number starts with '0'.
-            if (number === '0') {
-                if (ch === 'x' || ch === 'X') {
-                    ++index;
-                    return scanHexLiteral(start);
-                }
-                if (isOctalDigit(ch)) {
-                    return scanOctalLiteral(start);
-                }
-
-                // decimal number starts with '0' such as '09' is illegal.
-                if (ch && isDecimalDigit(ch.charCodeAt(0))) {
-                    throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-                }
-            }
-
-            while (isDecimalDigit(source.charCodeAt(index))) {
-                number += source[index++];
-            }
-            ch = source[index];
-        }
-
-        if (ch === '.') {
-            number += source[index++];
-            while (isDecimalDigit(source.charCodeAt(index))) {
-                number += source[index++];
-            }
-            ch = source[index];
-        }
-
-        if (ch === 'e' || ch === 'E') {
-            number += source[index++];
-
-            ch = source[index];
-            if (ch === '+' || ch === '-') {
-                number += source[index++];
-            }
-            if (isDecimalDigit(source.charCodeAt(index))) {
-                while (isDecimalDigit(source.charCodeAt(index))) {
-                    number += source[index++];
-                }
-            } else {
-                throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-            }
-        }
-
-        if (isIdentifierStart(source.charCodeAt(index))) {
-            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-        }
-
-        return {
-            type: Token.NumericLiteral,
-            value: parseFloat(number),
-            lineNumber: lineNumber,
-            lineStart: lineStart,
-            start: start,
-            end: index
-        };
-    }
-
-    // 7.8.4 String Literals
-
-    function scanStringLiteral() {
-        var str = '', quote, start, ch, code, unescaped, restore, octal = false, startLineNumber, startLineStart;
-        startLineNumber = lineNumber;
-        startLineStart = lineStart;
-
-        quote = source[index];
-        assert((quote === '\'' || quote === '"'),
-            'String literal must starts with a quote');
-
-        start = index;
-        ++index;
-
-        while (index < length) {
-            ch = source[index++];
-
-            if (ch === quote) {
-                quote = '';
-                break;
-            } else if (ch === '\\') {
-                ch = source[index++];
-                if (!ch || !isLineTerminator(ch.charCodeAt(0))) {
-                    switch (ch) {
-                    case 'u':
-                    case 'x':
-                        restore = index;
-                        unescaped = scanHexEscape(ch);
-                        if (unescaped) {
-                            str += unescaped;
-                        } else {
-                            index = restore;
-                            str += ch;
-                        }
-                        break;
-                    case 'n':
-                        str += '\n';
-                        break;
-                    case 'r':
-                        str += '\r';
-                        break;
-                    case 't':
-                        str += '\t';
-                        break;
-                    case 'b':
-                        str += '\b';
-                        break;
-                    case 'f':
-                        str += '\f';
-                        break;
-                    case 'v':
-                        str += '\x0B';
-                        break;
-
-                    default:
-                        if (isOctalDigit(ch)) {
-                            code = '01234567'.indexOf(ch);
-
-                            // \0 is not octal escape sequence
-                            if (code !== 0) {
-                                octal = true;
-                            }
-
-                            if (index < length && isOctalDigit(source[index])) {
-                                octal = true;
-                                code = code * 8 + '01234567'.indexOf(source[index++]);
-
-                                // 3 digits are only allowed when string starts
-                                // with 0, 1, 2, 3
-                                if ('0123'.indexOf(ch) >= 0 &&
-                                        index < length &&
-                                        isOctalDigit(source[index])) {
-                                    code = code * 8 + '01234567'.indexOf(source[index++]);
-                                }
-                            }
-                            str += String.fromCharCode(code);
-                        } else {
-                            str += ch;
-                        }
-                        break;
-                    }
-                } else {
-                    ++lineNumber;
-                    if (ch ===  '\r' && source[index] === '\n') {
-                        ++index;
-                    }
-                    lineStart = index;
-                }
-            } else if (isLineTerminator(ch.charCodeAt(0))) {
-                break;
-            } else {
-                str += ch;
-            }
-        }
-
-        if (quote !== '') {
-            throwError({}, Messages.UnexpectedToken, 'ILLEGAL');
-        }
-
-        return {
-            type: Token.StringLiteral,
-            value: str,
-            octal: octal,
-            startLineNumber: startLineNumber,
-            startLineStart: startLineStart,
-            lineNumber: lineNumber,
-            lineStart: lineStart,
-            start: start,
-            end: index
-        };
-    }
-
-    function testRegExp(pattern, flags) {
-        var value;
-        try {
-            value = new RegExp(pattern, flags);
-        } catch (e) {
-            throwError({}, Messages.InvalidRegExp);
-        }
-        return value;
-    }
-
-    function scanRegExpBody() {
-        var ch, str, classMarker, terminated, body;
-
-        ch = source[index];
-        assert(ch === '/', 'Regular expression literal must start with a slash');
-        str = source[index++];
-
-        classMarker = false;
-        terminated = false;
-        while (index < length) {
-            ch = source[index++];
-            str += ch;
-            if (ch === '\\') {
-                ch = source[index++];
-                // ECMA-262 7.8.5
-                if (isLineTerminator(ch.charCodeAt(0))) {
-                    throwError({}, Messages.UnterminatedRegExp);
-                }
-                str += ch;
-            } else if (isLineTerminator(ch.charCodeAt(0))) {
-                throwError({}, Messages.UnterminatedRegExp);
-            } else if (classMarker) {
-                if (ch === ']') {
-                    classMarker = false;
-                }
-            } else {
-                if (ch === '/') {
-                    terminated = true;
-                    break;
-                } else if (ch === '[') {
-                    classMarker = true;
-                }
-            }
-        }
-
-        if (!terminated) {
-            throwError({}, Messages.UnterminatedRegExp);
-        }
-
-        // Exclude leading and trailing slash.
-        body = str.substr(1, str.length - 2);
-        return {
-            value: body,
-            literal: str
-        };
-    }
-
-    function scanRegExpFlags() {
-        var ch, str, flags, restore;
-
-        str = '';
-        flags = '';
-        while (index < length) {
-            ch = source[index];
-            if (!isIdentifierPart(ch.charCodeAt(0))) {
-                break;
-            }
-
-            ++index;
-            if (ch === '\\' && index < length) {
-                ch = source[index];
-                if (ch === 'u') {
-                    ++index;
-                    restore = index;
-                    ch = scanHexEscape('u');
-                    if (ch) {
-                        flags += ch;
-                        for (str += '\\u'; restore < index; ++restore) {
-                            str += source[restore];
-                        }
-                    } else {
-                        index = restore;
-                        flags += 'u';
-                        str += '\\u';
-                    }
-                    throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL');
-                } else {
-                    str += '\\';
-                    throwErrorTolerant({}, Messages.UnexpectedToken, 'ILLEGAL');
-                }
-            } else {
-                flags += ch;
-                str += ch;
-            }
-        }
-
-        return {
-            value: flags,
-            literal: str
-        };
-    }
-
-    function scanRegExp() {
-        var start, body, flags, pattern, value;
-
-        lookahead = null;
-        skipComment();
-        start = index;
-
-        body = scanRegExpBody();
-        flags = scanRegExpFlags();
-        value = testRegExp(body.value, flags.value);
-
-        if (extra.tokenize) {
-            return {
-                type: Token.RegularExpression,
-                value: value,
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: start,
-                end: index
-            };
-        }
-
-        return {
-            literal: body.literal + flags.literal,
-            value: value,
-            start: start,
-            end: index
-        };
-    }
-
-    function collectRegex() {
-        var pos, loc, regex, token;
-
-        skipComment();
-
-        pos = index;
-        loc = {
-            start: {
-                line: lineNumber,
-                column: index - lineStart
-            }
-        };
-
-        regex = scanRegExp();
-        loc.end = {
-            line: lineNumber,
-            column: index - lineStart
-        };
-
-        /* istanbul ignore next */
-        if (!extra.tokenize) {
-            // Pop the previous token, which is likely '/' or '/='
-            if (extra.tokens.length > 0) {
-                token = extra.tokens[extra.tokens.length - 1];
-                if (token.range[0] === pos && token.type === 'Punctuator') {
-                    if (token.value === '/' || token.value === '/=') {
-                        extra.tokens.pop();
-                    }
-                }
-            }
-
-            extra.tokens.push({
-                type: 'RegularExpression',
-                value: regex.literal,
-                range: [pos, index],
-                loc: loc
-            });
-        }
-
-        return regex;
-    }
-
-    function isIdentifierName(token) {
-        return token.type === Token.Identifier ||
-            token.type === Token.Keyword ||
-            token.type === Token.BooleanLiteral ||
-            token.type === Token.NullLiteral;
-    }
-
-    function advanceSlash() {
-        var prevToken,
-            checkToken;
-        // Using the following algorithm:
-        // https://github.com/mozilla/sweet.js/wiki/design
-        prevToken = extra.tokens[extra.tokens.length - 1];
-        if (!prevToken) {
-            // Nothing before that: it cannot be a division.
-            return collectRegex();
-        }
-        if (prevToken.type === 'Punctuator') {
-            if (prevToken.value === ']') {
-                return scanPunctuator();
-            }
-            if (prevToken.value === ')') {
-                checkToken = extra.tokens[extra.openParenToken - 1];
-                if (checkToken &&
-                        checkToken.type === 'Keyword' &&
-                        (checkToken.value === 'if' ||
-                         checkToken.value === 'while' ||
-                         checkToken.value === 'for' ||
-                         checkToken.value === 'with')) {
-                    return collectRegex();
-                }
-                return scanPunctuator();
-            }
-            if (prevToken.value === '}') {
-                // Dividing a function by anything makes little sense,
-                // but we have to check for that.
-                if (extra.tokens[extra.openCurlyToken - 3] &&
-                        extra.tokens[extra.openCurlyToken - 3].type === 'Keyword') {
-                    // Anonymous function.
-                    checkToken = extra.tokens[extra.openCurlyToken - 4];
-                    if (!checkToken) {
-                        return scanPunctuator();
-                    }
-                } else if (extra.tokens[extra.openCurlyToken - 4] &&
-                        extra.tokens[extra.openCurlyToken - 4].type === 'Keyword') {
-                    // Named function.
-                    checkToken = extra.tokens[extra.openCurlyToken - 5];
-                    if (!checkToken) {
-                        return collectRegex();
-                    }
-                } else {
-                    return scanPunctuator();
-                }
-                // checkToken determines whether the function is
-                // a declaration or an expression.
-                if (FnExprTokens.indexOf(checkToken.value) >= 0) {
-                    // It is an expression.
-                    return scanPunctuator();
-                }
-                // It is a declaration.
-                return collectRegex();
-            }
-            return collectRegex();
-        }
-        if (prevToken.type === 'Keyword') {
-            return collectRegex();
-        }
-        return scanPunctuator();
-    }
-
-    function advance() {
-        var ch;
-
-        skipComment();
-
-        if (index >= length) {
-            return {
-                type: Token.EOF,
-                lineNumber: lineNumber,
-                lineStart: lineStart,
-                start: index,
-                end: index
-            };
-        }
-
-        ch = source.charCodeAt(index);
-
-        if (isIdentifierStart(ch)) {
-            return scanIdentifier();
-        }
-
-        // Very common: ( and ) and ;
-        if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {
-            return scanPunctuator();
-        }
-
-        // String literal starts with single quote (U+0027) or double quote (U+0022).
-        if (ch === 0x27 || ch === 0x22) {
-            return scanStringLiteral();
-        }
-
-
-        // Dot (.) U+002E can also start a floating-point number, hence the need
-        // to check the next character.
-        if (ch === 0x2E) {
-            if (isDecimalDigit(source.charCodeAt(index + 1))) {
-                return scanNumericLiteral();
-            }
-            return scanPunctuator();
-        }
-
-        if (isDecimalDigit(ch)) {
-            return scanNumericLiteral();
-        }
-
-        // Slash (/) U+002F can also start a regex.
-        if (extra.tokenize && ch === 0x2F) {
-            return advanceSlash();
-        }
-
-        return scanPunctuator();
-    }
-
-    function collectToken() {
-        var loc, token, range, value;
-
-        skipComment();
-        loc = {
-            start: {
-                line: lineNumber,
-                column: index - lineStart
-            }
-        };
-
-        token = advance();
-        loc.end = {
-            line: lineNumber,
-            column: index - lineStart
-        };
-
-        if (token.type !== Token.EOF) {
-            value = source.slice(token.start, token.end);
-            extra.tokens.push({
-                type: TokenName[token.type],
-                value: value,
-                range: [token.start, token.end],
-                loc: loc
-            });
-        }
-
-        return token;
-    }
-
-    function lex() {
-        var token;
-
-        token = lookahead;
-        index = token.end;
-        lineNumber = token.lineNumber;
-        lineStart = token.lineStart;
-
-        lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();
-
-        index = token.end;
-        lineNumber = token.lineNumber;
-        lineStart = token.lineStart;
-
-        return token;
-    }
-
-    function peek() {
-        var pos, line, start;
-
-        pos = index;
-        line = lineNumber;
-        start = lineStart;
-        lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance();
-        index = pos;
-        lineNumber = line;
-        lineStart = start;
-    }
-
-    function Position(line, column) {
-        this.line = line;
-        this.column = column;
-    }
-
-    function SourceLocation(startLine, startColumn, line, column) {
-        this.start = new Position(startLine, startColumn);
-        this.end = new Position(line, column);
-    }
-
-    SyntaxTreeDelegate = {
-
-        name: 'SyntaxTree',
-
-        processComment: function (node) {
-            var lastChild, trailingComments;
-
-            if (node.type === Syntax.Program) {
-                if (node.body.length > 0) {
-                    return;
-                }
-            }
-
-            if (extra.trailingComments.length > 0) {
-                if (extra.trailingComments[0].range[0] >= node.range[1]) {
-                    trailingComments = extra.trailingComments;
-                    extra.trailingComments = [];
-                } else {
-                    extra.trailingComments.length = 0;
-                }
-            } else {
-                if (extra.bottomRightStack.length > 0 &&
-                        extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments &&
-                        extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments[0].range[0] >= node.range[1]) {
-                    trailingComments = extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments;
-                    delete extra.bottomRightStack[extra.bottomRightStack.length - 1].trailingComments;
-                }
-            }
-
-            // Eating the stack.
-            while (extra.bottomRightStack.length > 0 && extra.bottomRightStack[extra.bottomRightStack.length - 1].range[0] >= node.range[0]) {
-                lastChild = extra.bottomRightStack.pop();
-            }
-
-            if (lastChild) {
-                if (lastChild.leadingComments && lastChild.leadingComments[lastChild.leadingComments.length - 1].range[1] <= node.range[0]) {
-                    node.leadingComments = lastChild.leadingComments;
-                    delete lastChild.leadingComments;
-                }
-            } else if (extra.leadingComments.length > 0 && extra.leadingComments[extra.leadingComments.length - 1].range[1] <= node.range[0]) {
-                node.leadingComments = extra.leadingComments;
-                extra.leadingComments = [];
-            }
-
-
-            if (trailingComments) {
-                node.trailingComments = trailingComments;
-            }
-
-            extra.bottomRightStack.push(node);
-        },
-
-        markEnd: function (node, startToken) {
-            if (extra.range) {
-                node.range = [startToken.start, index];
-            }
-            if (extra.loc) {
-                node.loc = new SourceLocation(
-                    startToken.startLineNumber === undefined ?  startToken.lineNumber : startToken.startLineNumber,
-                    startToken.start - (startToken.startLineStart === undefined ?  startToken.lineStart : startToken.startLineStart),
-                    lineNumber,
-                    index - lineStart
-                );
-                this.postProcess(node);
-            }
-
-            if (extra.attachComment) {
-                this.processComment(node);
-            }
-            return node;
-        },
-
-        postProcess: function (node) {
-            if (extra.source) {
-                node.loc.source = extra.source;
-            }
-            return node;
-        },
-
-        createArrayExpression: function (elements) {
-            return {
-                type: Syntax.ArrayExpression,
-                elements: elements
-            };
-        },
-
-        createAssignmentExpression: function (operator, left, right) {
-            return {
-                type: Syntax.AssignmentExpression,
-                operator: operator,
-                left: left,
-                right: right
-            };
-        },
-
-        createBinaryExpression: function (operator, left, right) {
-            var type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression :
-                        Syntax.BinaryExpression;
-            return {
-                type: type,
-                operator: operator,
-                left: left,
-                right: right
-            };
-        },
-
-        createBlockStatement: function (body) {
-            return {
-                type: Syntax.BlockStatement,
-                body: body
-            };
-        },
-
-        createBreakStatement: function (label) {
-            return {
-                type: Syntax.BreakStatement,
-                label: label
-            };
-        },
-
-        createCallExpression: function (callee, args) {
-            return {
-                type: Syntax.CallExpression,
-                callee: callee,
-                'arguments': args
-            };
-        },
-
-        createCatchClause: function (param, body) {
-            return {
-                type: Syntax.CatchClause,
-                param: param,
-                body: body
-            };
-        },
-
-        createConditionalExpression: function (test, consequent, alternate) {
-            return {
-                type: Syntax.ConditionalExpression,
-                test: test,
-                consequent: consequent,
-                alternate: alternate
-            };
-        },
-
-        createContinueStatement: function (label) {
-            return {
-                type: Syntax.ContinueStatement,
-                label: label
-            };
-        },
-
-        createDebuggerStatement: function () {
-            return {
-                type: Syntax.DebuggerStatement
-            };
-        },
-
-        createDoWhileStatement: function (body, test) {
-            return {
-                type: Syntax.DoWhileStatement,
-                body: body,
-                test: test
-            };
-        },
-
-        createEmptyStatement: function () {
-            return {
-                type: Syntax.EmptyStatement
-            };
-        },
-
-        createExpressionStatement: function (expression) {
-            return {
-                type: Syntax.ExpressionStatement,
-                expression: expression
-            };
-        },
-
-        createForStatement: function (init, test, update, body) {
-            return {
-                type: Syntax.ForStatement,
-                init: init,
-                test: test,
-                update: update,
-                body: body
-            };
-        },
-
-        createForInStatement: function (left, right, body) {
-            return {
-                type: Syntax.ForInStatement,
-                left: left,
-                right: right,
-                body: body,
-                each: false
-            };
-        },
-
-        createFunctionDeclaration: function (id, params, defaults, body) {
-            return {
-                type: Syntax.FunctionDeclaration,
-                id: id,
-                params: params,
-                defaults: defaults,
-                body: body,
-                rest: null,
-                generator: false,
-                expression: false
-            };
-        },
-
-        createFunctionExpression: function (id, params, defaults, body) {
-            return {
-                type: Syntax.FunctionExpression,
-                id: id,
-                params: params,
-                defaults: defaults,
-                body: body,
-                rest: null,
-                generator: false,
-                expression: false
-            };
-        },
-
-        createIdentifier: function (name) {
-            return {
-                type: Syntax.Identifier,
-                name: name
-            };
-        },
-
-        createIfStatement: function (test, consequent, alternate) {
-            return {
-                type: Syntax.IfStatement,
-                test: test,
-                consequent: consequent,
-                alternate: alternate
-            };
-        },
-
-        createLabeledStatement: function (label, body) {
-            return {
-                type: Syntax.LabeledStatement,
-                label: label,
-                body: body
-            };
-        },
-
-        createLiteral: function (token) {
-            return {
-                type: Syntax.Literal,
-                value: token.value,
-                raw: source.slice(token.start, token.end)
-            };
-        },
-
-        createMemberExpression: function (accessor, object, property) {
-            return {
-                type: Syntax.MemberExpression,
-                computed: accessor === '[',
-                object: object,
-                property: property
-            };
-        },
-
-        createNewExpression: function (callee, args) {
-            return {
-                type: Syntax.NewExpression,
-                callee: callee,
-                'arguments': args
-            };
-        },
-
-        createObjectExpression: function (properties) {
-            return {
-                type: Syntax.ObjectExpression,
-                properties: properties
-            };
-        },
-
-        createPostfixExpression: function (operator, argument) {
-            return {
-                type: Syntax.UpdateExpression,
-                operator: operator,
-                argument: argument,
-                prefix: false
-            };
-        },
-
-        createProgram: function (body) {
-            return {
-                type: Syntax.Program,
-                body: body
-            };
-        },
-
-        createProperty: function (kind, key, value) {
-            return {
-                type: Syntax.Property,
-                key: key,
-                value: value,
-                kind: kind
-            };
-        },
-
-        createReturnStatement: function (argument) {
-            return {
-                type: Syntax.ReturnStatement,
-                argument: argument
-            };
-        },
-
-        createSequenceExpression: function (expressions) {
-            return {
-                type: Syntax.SequenceExpression,
-                expressions: expressions
-            };
-        },
-
-        createSwitchCase: function (test, consequent) {
-            return {
-                type: Syntax.SwitchCase,
-                test: test,
-                consequent: consequent
-            };
-        },
-
-        createSwitchStatement: function (discriminant, cases) {
-            return {
-                type: Syntax.SwitchStatement,
-                discriminant: discriminant,
-                cases: cases
-            };
-        },
-
-        createThisExpression: function () {
-            return {
-                type: Syntax.ThisExpression
-            };
-        },
-
-        createThrowStatement: function (argument) {
-            return {
-                type: Syntax.ThrowStatement,
-                argument: argument
-            };
-        },
-
-        createTryStatement: function (block, guardedHandlers, handlers, finalizer) {
-            return {
-                type: Syntax.TryStatement,
-                block: block,
-                guardedHandlers: guardedHandlers,
-                handlers: handlers,
-                finalizer: finalizer
-            };
-        },
-
-        createUnaryExpression: function (operator, argument) {
-            if (operator === '++' || operator === '--') {
-                return {
-                    type: Syntax.UpdateExpression,
-                    operator: operator,
-                    argument: argument,
-                    prefix: true
-                };
-            }
-            return {
-                type: Syntax.UnaryExpression,
-                operator: operator,
-                argument: argument,
-                prefix: true
-            };
-        },
-
-        createVariableDeclaration: function (declarations, kind) {
-            return {
-                type: Syntax.VariableDeclaration,
-                declarations: declarations,
-                kind: kind
-            };
-        },
-
-        createVariableDeclarator: function (id, init) {
-            return {
-                type: Syntax.VariableDeclarator,
-                id: id,
-                init: init
-            };
-        },
-
-        createWhileStatement: function (test, body) {
-            return {
-                type: Syntax.WhileStatement,
-                test: test,
-                body: body
-            };
-        },
-
-        createWithStatement: function (object, body) {
-            return {
-                type: Syntax.WithStatement,
-                object: object,
-                body: body
-            };
-        }
-    };
-
-    // Return true if there is a line terminator before the next token.
-
-    function peekLineTerminator() {
-        var pos, line, start, found;
-
-        pos = index;
-        line = lineNumber;
-        start = lineStart;
-        skipComment();
-        found = lineNumber !== line;
-        index = pos;
-        lineNumber = line;
-        lineStart = start;
-
-        return found;
-    }
-
-    // Throw an exception
-
-    function throwError(token, messageFormat) {
-        var error,
-            args = Array.prototype.slice.call(arguments, 2),
-            msg = messageFormat.replace(
-                /%(\d)/g,
-                function (whole, index) {
-                    assert(index < args.length, 'Message reference must be in range');
-                    return args[index];
-                }
-            );
-
-        if (typeof token.lineNumber === 'number') {
-            error = new Error('Line ' + token.lineNumber + ': ' + msg);
-            error.index = token.start;
-            error.lineNumber = token.lineNumber;
-            error.column = token.start - lineStart + 1;
-        } else {
-            error = new Error('Line ' + lineNumber + ': ' + msg);
-            error.index = index;
-            error.lineNumber = lineNumber;
-            error.column = index - lineStart + 1;
-        }
-
-        error.description = msg;
-        throw error;
-    }
-
-    function throwErrorTolerant() {
-        try {
-            throwError.apply(null, arguments);
-        } catch (e) {
-            if (extra.errors) {
-                extra.errors.push(e);
-            } else {
-                throw e;
-            }
-        }
-    }
-
-
-    // Throw an exception because of the token.
-
-    function throwUnexpected(token) {
-        if (token.type === Token.EOF) {
-            throwError(token, Messages.UnexpectedEOS);
-        }
-
-        if (token.type === Token.NumericLiteral) {
-            throwError(token, Messages.UnexpectedNumber);
-        }
-
-        if (token.type === Token.StringLiteral) {
-            throwError(token, Messages.UnexpectedString);
-        }
-
-        if (token.type === Token.Identifier) {
-            throwError(token, Messages.UnexpectedIdentifier);
-        }
-
-        if (token.type === Token.Keyword) {
-            if (isFutureReservedWord(token.value)) {
-                throwError(token, Messages.UnexpectedReserved);
-            } else if (strict && isStrictModeReservedWord(token.value)) {
-                throwErrorTolerant(token, Messages.StrictReservedWord);
-                return;
-            }
-            throwError(token, Messages.UnexpectedToken, token.value);
-        }
-
-        // BooleanLiteral, NullLiteral, or Punctuator.
-        throwError(token, Messages.UnexpectedToken, token.value);
-    }
-
-    // Expect the next token to match the specified punctuator.
-    // If not, an exception will be thrown.
-
-    function expect(value) {
-        var token = lex();
-        if (token.type !== Token.Punctuator || token.value !== value) {
-            throwUnexpected(token);
-        }
-    }
-
-    // Expect the next token to match the specified keyword.
-    // If not, an exception will be thrown.
-
-    function expectKeyword(keyword) {
-        var token = lex();
-        if (token.type !== Token.Keyword || token.value !== keyword) {
-            throwUnexpected(token);
-        }
-    }
-
-    // Return true if the next token matches the specified punctuator.
-
-    function match(value) {
-        return lookahead.type === Token.Punctuator && lookahead.value === value;
-    }
-
-    // Return true if the next token matches the specified keyword
-
-    function matchKeyword(keyword) {
-        return lookahead.type === Token.Keyword && lookahead.value === keyword;
-    }
-
-    // Return true if the next token is an assignment operator
-
-    function matchAssign() {
-        var op;
-
-        if (lookahead.type !== Token.Punctuator) {
-            return false;
-        }
-        op = lookahead.value;
-        return op === '=' ||
-            op === '*=' ||
-            op === '/=' ||
-            op === '%=' ||
-            op === '+=' ||
-            op === '-=' ||
-            op === '<<=' ||
-            op === '>>=' ||
-            op === '>>>=' ||
-            op === '&=' ||
-            op === '^=' ||
-            op === '|=';
-    }
-
-    function consumeSemicolon() {
-        var line;
-
-        // Catch the very common case first: immediately a semicolon (U+003B).
-        if (source.charCodeAt(index) === 0x3B || match(';')) {
-            lex();
-            return;
-        }
-
-        line = lineNumber;
-        skipComment();
-        if (lineNumber !== line) {
-            return;
-        }
-
-        if (lookahead.type !== Token.EOF && !match('}')) {
-            throwUnexpected(lookahead);
-        }
-    }
-
-    // Return true if provided expression is LeftHandSideExpression
-
-    function isLeftHandSide(expr) {
-        return expr.type === Syntax.Identifier || expr.type === Syntax.MemberExpression;
-    }
-
-    // 11.1.4 Array Initialiser
-
-    function parseArrayInitialiser() {
-        var elements = [], startToken;
-
-        startToken = lookahead;
-        expect('[');
-
-        while (!match(']')) {
-            if (match(',')) {
-                lex();
-                elements.push(null);
-            } else {
-                elements.push(parseAssignmentExpression());
-
-                if (!match(']')) {
-                    expect(',');
-                }
-            }
-        }
-
-        lex();
-
-        return delegate.markEnd(delegate.createArrayExpression(elements), startToken);
-    }
-
-    // 11.1.5 Object Initialiser
-
-    function parsePropertyFunction(param, first) {
-        var previousStrict, body, startToken;
-
-        previousStrict = strict;
-        startToken = lookahead;
-        body = parseFunctionSourceElements();
-        if (first && strict && isRestrictedWord(param[0].name)) {
-            throwErrorTolerant(first, Messages.StrictParamName);
-        }
-        strict = previousStrict;
-        return delegate.markEnd(delegate.createFunctionExpression(null, param, [], body), startToken);
-    }
-
-    function parseObjectPropertyKey() {
-        var token, startToken;
-
-        startToken = lookahead;
-        token = lex();
-
-        // Note: This function is called only from parseObjectProperty(), where
-        // EOF and Punctuator tokens are already filtered out.
-
-        if (token.type === Token.StringLiteral || token.type === Token.NumericLiteral) {
-            if (strict && token.octal) {
-                throwErrorTolerant(token, Messages.StrictOctalLiteral);
-            }
-            return delegate.markEnd(delegate.createLiteral(token), startToken);
-        }
-
-        return delegate.markEnd(delegate.createIdentifier(token.value), startToken);
-    }
-
-    function parseObjectProperty() {
-        var token, key, id, value, param, startToken;
-
-        token = lookahead;
-        startToken = lookahead;
-
-        if (token.type === Token.Identifier) {
-
-            id = parseObjectPropertyKey();
-
-            // Property Assignment: Getter and Setter.
-
-            if (token.value === 'get' && !match(':')) {
-                key = parseObjectPropertyKey();
-                expect('(');
-                expect(')');
-                value = parsePropertyFunction([]);
-                return delegate.markEnd(delegate.createProperty('get', key, value), startToken);
-            }
-            if (token.value === 'set' && !match(':')) {
-                key = parseObjectPropertyKey();
-                expect('(');
-                token = lookahead;
-                if (token.type !== Token.Identifier) {
-                    expect(')');
-                    throwErrorTolerant(token, Messages.UnexpectedToken, token.value);
-                    value = parsePropertyFunction([]);
-                } else {
-                    param = [ parseVariableIdentifier() ];
-                    expect(')');
-                    value = parsePropertyFunction(param, token);
-                }
-                return delegate.markEnd(delegate.createProperty('set', key, value), startToken);
-            }
-            expect(':');
-            value = parseAssignmentExpression();
-            return delegate.markEnd(delegate.createProperty('init', id, value), startToken);
-        }
-        if (token.type === Token.EOF || token.type === Token.Punctuator) {
-            throwUnexpected(token);
-        } else {
-            key = parseObjectPropertyKey();
-            expect(':');
-            value = parseAssignmentExpression();
-            return delegate.markEnd(delegate.createProperty('init', key, value), startToken);
-        }
-    }
-
-    function parseObjectInitialiser() {
-        var properties = [], property, name, key, kind, map = {}, toString = String, startToken;
-
-        startToken = lookahead;
-
-        expect('{');
-
-        while (!match('}')) {
-            property = parseObjectProperty();
-
-            if (property.key.type === Syntax.Identifier) {
-                name = property.key.name;
-            } else {
-                name = toString(property.key.value);
-            }
-            kind = (property.kind === 'init') ? PropertyKind.Data : (property.kind === 'get') ? PropertyKind.Get : PropertyKind.Set;
-
-            key = '$' + name;
-            if (Object.prototype.hasOwnProperty.call(map, key)) {
-                if (map[key] === PropertyKind.Data) {
-                    if (strict && kind === PropertyKind.Data) {
-                        throwErrorTolerant({}, Messages.StrictDuplicateProperty);
-                    } else if (kind !== PropertyKind.Data) {
-                        throwErrorTolerant({}, Messages.AccessorDataProperty);
-                    }
-                } else {
-                    if (kind === PropertyKind.Data) {
-                        throwErrorTolerant({}, Messages.AccessorDataProperty);
-                    } else if (map[key] & kind) {
-                        throwErrorTolerant({}, Messages.AccessorGetSet);
-                    }
-                }
-                map[key] |= kind;
-            } else {
-                map[key] = kind;
-            }
-
-            properties.push(property);
-
-            if (!match('}')) {
-                expect(',');
-            }
-        }
-
-        expect('}');
-
-        return delegate.markEnd(delegate.createObjectExpression(properties), startToken);
-    }
-
-    // 11.1.6 The Grouping Operator
-
-    function parseGroupExpression() {
-        var expr;
-
-        expect('(');
-
-        expr = parseExpression();
-
-        expect(')');
-
-        return expr;
-    }
-
-
-    // 11.1 Primary Expressions
-
-    function parsePrimaryExpression() {
-        var type, token, expr, startToken;
-
-        if (match('(')) {
-            return parseGroupExpression();
-        }
-
-        if (match('[')) {
-            return parseArrayInitialiser();
-        }
-
-        if (match('{')) {
-            return parseObjectInitialiser();
-        }
-
-        type = lookahead.type;
-        startToken = lookahead;
-
-        if (type === Token.Identifier) {
-            expr =  delegate.createIdentifier(lex().value);
-        } else if (type === Token.StringLiteral || type === Token.NumericLiteral) {
-            if (strict && lookahead.octal) {
-                throwErrorTolerant(lookahead, Messages.StrictOctalLiteral);
-            }
-            expr = delegate.createLiteral(lex());
-        } else if (type === Token.Keyword) {
-            if (matchKeyword('function')) {
-                return parseFunctionExpression();
-            }
-            if (matchKeyword('this')) {
-                lex();
-                expr = delegate.createThisExpression();
-            } else {
-                throwUnexpected(lex());
-            }
-        } else if (type === Token.BooleanLiteral) {
-            token = lex();
-            token.value = (token.value === 'true');
-            expr = delegate.createLiteral(token);
-        } else if (type === Token.NullLiteral) {
-            token = lex();
-            token.value = null;
-            expr = delegate.createLiteral(token);
-        } else if (match('/') || match('/=')) {
-            if (typeof extra.tokens !== 'undefined') {
-                expr = delegate.createLiteral(collectRegex());
-            } else {
-                expr = delegate.createLiteral(scanRegExp());
-            }
-            peek();
-        } else {
-            throwUnexpected(lex());
-        }
-
-        return delegate.markEnd(expr, startToken);
-    }
-
-    // 11.2 Left-Hand-Side Expressions
-
-    function parseArguments() {
-        var args = [];
-
-        expect('(');
-
-        if (!match(')')) {
-            while (index < length) {
-                args.push(parseAssignmentExpression());
-                if (match(')')) {
-                    break;
-                }
-                expect(',');
-            }
-        }
-
-        expect(')');
-
-        return args;
-    }
-
-    function parseNonComputedProperty() {
-        var token, startToken;
-
-        startToken = lookahead;
-        token = lex();
-
-        if (!isIdentifierName(token)) {
-            throwUnexpected(token);
-        }
-
-        return delegate.markEnd(delegate.createIdentifier(token.value), startToken);
-    }
-
-    function parseNonComputedMember() {
-        expect('.');
-
-        return parseNonComputedProperty();
-    }
-
-    function parseComputedMember() {
-        var expr;
-
-        expect('[');
-
-        expr = parseExpression();
-
-        expect(']');
-
-        return expr;
-    }
-
-    function parseNewExpression() {
-        var callee, args, startToken;
-
-        startToken = lookahead;
-        expectKeyword('new');
-        callee = parseLeftHandSideExpression();
-        args = match('(') ? parseArguments() : [];
-
-        return delegate.markEnd(delegate.createNewExpression(callee, args), startToken);
-    }
-
-    function parseLeftHandSideExpressionAllowCall() {
-        var previousAllowIn, expr, args, property, startToken;
-
-        startToken = lookahead;
-
-        previousAllowIn = state.allowIn;
-        state.allowIn = true;
-        expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();
-        state.allowIn = previousAllowIn;
-
-        for (;;) {
-            if (match('.')) {
-                property = parseNonComputedMember();
-                expr = delegate.createMemberExpression('.', expr, property);
-            } else if (match('(')) {
-                args = parseArguments();
-                expr = delegate.createCallExpression(expr, args);
-            } else if (match('[')) {
-                property = parseComputedMember();
-                expr = delegate.createMemberExpression('[', expr, property);
-            } else {
-                break;
-            }
-            delegate.markEnd(expr, startToken);
-        }
-
-        return expr;
-    }
-
-    function parseLeftHandSideExpression() {
-        var previousAllowIn, expr, property, startToken;
-
-        startToken = lookahead;
-
-        previousAllowIn = state.allowIn;
-        expr = matchKeyword('new') ? parseNewExpression() : parsePrimaryExpression();
-        state.allowIn = previousAllowIn;
-
-        while (match('.') || match('[')) {
-            if (match('[')) {
-                property = parseComputedMember();
-                expr = delegate.createMemberExpression('[', expr, property);
-            } else {
-                property = parseNonComputedMember();
-                expr = delegate.createMemberExpression('.', expr, property);
-            }
-            delegate.markEnd(expr, startToken);
-        }
-
-        return expr;
-    }
-
-    // 11.3 Postfix Expressions
-
-    function parsePostfixExpression() {
-        var expr, token, startToken = lookahead;
-
-        expr = parseLeftHandSideExpressionAllowCall();
-
-        if (lookahead.type === Token.Punctuator) {
-            if ((match('++') || match('--')) && !peekLineTerminator()) {
-                // 11.3.1, 11.3.2
-                if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
-                    throwErrorTolerant({}, Messages.StrictLHSPostfix);
-                }
-
-                if (!isLeftHandSide(expr)) {
-                    throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
-                }
-
-                token = lex();
-                expr = delegate.markEnd(delegate.createPostfixExpression(token.value, expr), startToken);
-            }
-        }
-
-        return expr;
-    }
-
-    // 11.4 Unary Operators
-
-    function parseUnaryExpression() {
-        var token, expr, startToken;
-
-        if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {
-            expr = parsePostfixExpression();
-        } else if (match('++') || match('--')) {
-            startToken = lookahead;
-            token = lex();
-            expr = parseUnaryExpression();
-            // 11.4.4, 11.4.5
-            if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) {
-                throwErrorTolerant({}, Messages.StrictLHSPrefix);
-            }
-
-            if (!isLeftHandSide(expr)) {
-                throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
-            }
-
-            expr = delegate.createUnaryExpression(token.value, expr);
-            expr = delegate.markEnd(expr, startToken);
-        } else if (match('+') || match('-') || match('~') || match('!')) {
-            startToken = lookahead;
-            token = lex();
-            expr = parseUnaryExpression();
-            expr = delegate.createUnaryExpression(token.value, expr);
-            expr = delegate.markEnd(expr, startToken);
-        } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {
-            startToken = lookahead;
-            token = lex();
-            expr = parseUnaryExpression();
-            expr = delegate.createUnaryExpression(token.value, expr);
-            expr = delegate.markEnd(expr, startToken);
-            if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) {
-                throwErrorTolerant({}, Messages.StrictDelete);
-            }
-        } else {
-            expr = parsePostfixExpression();
-        }
-
-        return expr;
-    }
-
-    function binaryPrecedence(token, allowIn) {
-        var prec = 0;
-
-        if (token.type !== Token.Punctuator && token.type !== Token.Keyword) {
-            return 0;
-        }
-
-        switch (token.value) {
-        case '||':
-            prec = 1;
-            break;
-
-        case '&&':
-            prec = 2;
-            break;
-
-        case '|':
-            prec = 3;
-            break;
-
-        case '^':
-            prec = 4;
-            break;
-
-        case '&':
-            prec = 5;
-            break;
-
-        case '==':
-        case '!=':
-        case '===':
-        case '!==':
-            prec = 6;
-            break;
-
-        case '<':
-        case '>':
-        case '<=':
-        case '>=':
-        case 'instanceof':
-            prec = 7;
-            break;
-
-        case 'in':
-            prec = allowIn ? 7 : 0;
-            break;
-
-        case '<<':
-        case '>>':
-        case '>>>':
-            prec = 8;
-            break;
-
-        case '+':
-        case '-':
-            prec = 9;
-            break;
-
-        case '*':
-        case '/':
-        case '%':
-            prec = 11;
-            break;
-
-        default:
-            break;
-        }
-
-        return prec;
-    }
-
-    // 11.5 Multiplicative Operators
-    // 11.6 Additive Operators
-    // 11.7 Bitwise Shift Operators
-    // 11.8 Relational Operators
-    // 11.9 Equality Operators
-    // 11.10 Binary Bitwise Operators
-    // 11.11 Binary Logical Operators
-
-    function parseBinaryExpression() {
-        var marker, markers, expr, token, prec, stack, right, operator, left, i;
-
-        marker = lookahead;
-        left = parseUnaryExpression();
-
-        token = lookahead;
-        prec = binaryPrecedence(token, state.allowIn);
-        if (prec === 0) {
-            return left;
-        }
-        token.prec = prec;
-        lex();
-
-        markers = [marker, lookahead];
-        right = parseUnaryExpression();
-
-        stack = [left, token, right];
-
-        while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) {
-
-            // Reduce: make a binary expression from the three topmost entries.
-            while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {
-                right = stack.pop();
-                operator = stack.pop().value;
-                left = stack.pop();
-                expr = delegate.createBinaryExpression(operator, left, right);
-                markers.pop();
-                marker = markers[markers.length - 1];
-                delegate.markEnd(expr, marker);
-                stack.push(expr);
-            }
-
-            // Shift.
-            token = lex();
-            token.prec = prec;
-            stack.push(token);
-            markers.push(lookahead);
-            expr = parseUnaryExpression();
-            stack.push(expr);
-        }
-
-        // Final reduce to clean-up the stack.
-        i = stack.length - 1;
-        expr = stack[i];
-        markers.pop();
-        while (i > 1) {
-            expr = delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);
-            i -= 2;
-            marker = markers.pop();
-            delegate.markEnd(expr, marker);
-        }
-
-        return expr;
-    }
-
-
-    // 11.12 Conditional Operator
-
-    function parseConditionalExpression() {
-        var expr, previousAllowIn, consequent, alternate, startToken;
-
-        startToken = lookahead;
-
-        expr = parseBinaryExpression();
-
-        if (match('?')) {
-            lex();
-            previousAllowIn = state.allowIn;
-            state.allowIn = true;
-            consequent = parseAssignmentExpression();
-            state.allowIn = previousAllowIn;
-            expect(':');
-            alternate = parseAssignmentExpression();
-
-            expr = delegate.createConditionalExpression(expr, consequent, alternate);
-            delegate.markEnd(expr, startToken);
-        }
-
-        return expr;
-    }
-
-    // 11.13 Assignment Operators
-
-    function parseAssignmentExpression() {
-        var token, left, right, node, startToken;
-
-        token = lookahead;
-        startToken = lookahead;
-
-        node = left = parseConditionalExpression();
-
-        if (matchAssign()) {
-            // LeftHandSideExpression
-            if (!isLeftHandSide(left)) {
-                throwErrorTolerant({}, Messages.InvalidLHSInAssignment);
-            }
-
-            // 11.13.1
-            if (strict && left.type === Syntax.Identifier && isRestrictedWord(left.name)) {
-                throwErrorTolerant(token, Messages.StrictLHSAssignment);
-            }
-
-            token = lex();
-            right = parseAssignmentExpression();
-            node = delegate.markEnd(delegate.createAssignmentExpression(token.value, left, right), startToken);
-        }
-
-        return node;
-    }
-
-    // 11.14 Comma Operator
-
-    function parseExpression() {
-        var expr, startToken = lookahead;
-
-        expr = parseAssignmentExpression();
-
-        if (match(',')) {
-            expr = delegate.createSequenceExpression([ expr ]);
-
-            while (index < length) {
-                if (!match(',')) {
-                    break;
-                }
-                lex();
-                expr.expressions.push(parseAssignmentExpression());
-            }
-
-            delegate.markEnd(expr, startToken);
-        }
-
-        return expr;
-    }
-
-    // 12.1 Block
-
-    function parseStatementList() {
-        var list = [],
-            statement;
-
-        while (index < length) {
-            if (match('}')) {
-                break;
-            }
-            statement = parseSourceElement();
-            if (typeof statement === 'undefined') {
-                break;
-            }
-            list.push(statement);
-        }
-
-        return list;
-    }
-
-    function parseBlock() {
-        var block, startToken;
-
-        startToken = lookahead;
-        expect('{');
-
-        block = parseStatementList();
-
-        expect('}');
-
-        return delegate.markEnd(delegate.createBlockStatement(block), startToken);
-    }
-
-    // 12.2 Variable Statement
-
-    function parseVariableIdentifier() {
-        var token, startToken;
-
-        startToken = lookahead;
-        token = lex();
-
-        if (token.type !== Token.Identifier) {
-            throwUnexpected(token);
-        }
-
-        return delegate.markEnd(delegate.createIdentifier(token.value), startToken);
-    }
-
-    function parseVariableDeclaration(kind) {
-        var init = null, id, startToken;
-
-        startToken = lookahead;
-        id = parseVariableIdentifier();
-
-        // 12.2.1
-        if (strict && isRestrictedWord(id.name)) {
-            throwErrorTolerant({}, Messages.StrictVarName);
-        }
-
-        if (kind === 'const') {
-            expect('=');
-            init = parseAssignmentExpression();
-        } else if (match('=')) {
-            lex();
-            init = parseAssignmentExpression();
-        }
-
-        return delegate.markEnd(delegate.createVariableDeclarator(id, init), startToken);
-    }
-
-    function parseVariableDeclarationList(kind) {
-        var list = [];
-
-        do {
-            list.push(parseVariableDeclaration(kind));
-            if (!match(',')) {
-                break;
-            }
-            lex();
-        } while (index < length);
-
-        return list;
-    }
-
-    function parseVariableStatement() {
-        var declarations;
-
-        expectKeyword('var');
-
-        declarations = parseVariableDeclarationList();
-
-        consumeSemicolon();
-
-        return delegate.createVariableDeclaration(declarations, 'var');
-    }
-
-    // kind may be `const` or `let`
-    // Both are experimental and not in the specification yet.
-    // see http://wiki.ecmascript.org/doku.php?id=harmony:const
-    // and http://wiki.ecmascript.org/doku.php?id=harmony:let
-    function parseConstLetDeclaration(kind) {
-        var declarations, startToken;
-
-        startToken = lookahead;
-
-        expectKeyword(kind);
-
-        declarations = parseVariableDeclarationList(kind);
-
-        consumeSemicolon();
-
-        return delegate.markEnd(delegate.createVariableDeclaration(declarations, kind), startToken);
-    }
-
-    // 12.3 Empty Statement
-
-    function parseEmptyStatement() {
-        expect(';');
-        return delegate.createEmptyStatement();
-    }
-
-    // 12.4 Expression Statement
-
-    function parseExpressionStatement() {
-        var expr = parseExpression();
-        consumeSemicolon();
-        return delegate.createExpressionStatement(expr);
-    }
-
-    // 12.5 If statement
-
-    function parseIfStatement() {
-        var test, consequent, alternate;
-
-        expectKeyword('if');
-
-        expect('(');
-
-        test = parseExpression();
-
-        expect(')');
-
-        consequent = parseStatement();
-
-        if (matchKeyword('else')) {
-            lex();
-            alternate = parseStatement();
-        } else {
-            alternate = null;
-        }
-
-        return delegate.createIfStatement(test, consequent, alternate);
-    }
-
-    // 12.6 Iteration Statements
-
-    function parseDoWhileStatement() {
-        var body, test, oldInIteration;
-
-        expectKeyword('do');
-
-        oldInIteration = state.inIteration;
-        state.inIteration = true;
-
-        body = parseStatement();
-
-        state.inIteration = oldInIteration;
-
-        expectKeyword('while');
-
-        expect('(');
-
-        test = parseExpression();
-
-        expect(')');
-
-        if (match(';')) {
-            lex();
-        }
-
-        return delegate.createDoWhileStatement(body, test);
-    }
-
-    function parseWhileStatement() {
-        var test, body, oldInIteration;
-
-        expectKeyword('while');
-
-        expect('(');
-
-        test = parseExpression();
-
-        expect(')');
-
-        oldInIteration = state.inIteration;
-        state.inIteration = true;
-
-        body = parseStatement();
-
-        state.inIteration = oldInIteration;
-
-        return delegate.createWhileStatement(test, body);
-    }
-
-    function parseForVariableDeclaration() {
-        var token, declarations, startToken;
-
-        startToken = lookahead;
-        token = lex();
-        declarations = parseVariableDeclarationList();
-
-        return delegate.markEnd(delegate.createVariableDeclaration(declarations, token.value), startToken);
-    }
-
-    function parseForStatement() {
-        var init, test, update, left, right, body, oldInIteration;
-
-        init = test = update = null;
-
-        expectKeyword('for');
-
-        expect('(');
-
-        if (match(';')) {
-            lex();
-        } else {
-            if (matchKeyword('var') || matchKeyword('let')) {
-                state.allowIn = false;
-                init = parseForVariableDeclaration();
-                state.allowIn = true;
-
-                if (init.declarations.length === 1 && matchKeyword('in')) {
-                    lex();
-                    left = init;
-                    right = parseExpression();
-                    init = null;
-                }
-            } else {
-                state.allowIn = false;
-                init = parseExpression();
-                state.allowIn = true;
-
-                if (matchKeyword('in')) {
-                    // LeftHandSideExpression
-                    if (!isLeftHandSide(init)) {
-                        throwErrorTolerant({}, Messages.InvalidLHSInForIn);
-                    }
-
-                    lex();
-                    left = init;
-                    right = parseExpression();
-                    init = null;
-                }
-            }
-
-            if (typeof left === 'undefined') {
-                expect(';');
-            }
-        }
-
-        if (typeof left === 'undefined') {
-
-            if (!match(';')) {
-                test = parseExpression();
-            }
-            expect(';');
-
-            if (!match(')')) {
-                update = parseExpression();
-            }
-        }
-
-        expect(')');
-
-        oldInIteration = state.inIteration;
-        state.inIteration = true;
-
-        body = parseStatement();
-
-        state.inIteration = oldInIteration;
-
-        return (typeof left === 'undefined') ?
-                delegate.createForStatement(init, test, update, body) :
-                delegate.createForInStatement(left, right, body);
-    }
-
-    // 12.7 The continue statement
-
-    function parseContinueStatement() {
-        var label = null, key;
-
-        expectKeyword('continue');
-
-        // Optimize the most common form: 'continue;'.
-        if (source.charCodeAt(index) === 0x3B) {
-            lex();
-
-            if (!state.inIteration) {
-                throwError({}, Messages.IllegalContinue);
-            }
-
-            return delegate.createContinueStatement(null);
-        }
-
-        if (peekLineTerminator()) {
-            if (!state.inIteration) {
-                throwError({}, Messages.IllegalContinue);
-            }
-
-            return delegate.createContinueStatement(null);
-        }
-
-        if (lookahead.type === Token.Identifier) {
-            label = parseVariableIdentifier();
-
-            key = '$' + label.name;
-            if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
-                throwError({}, Messages.UnknownLabel, label.name);
-            }
-        }
-
-        consumeSemicolon();
-
-        if (label === null && !state.inIteration) {
-            throwError({}, Messages.IllegalContinue);
-        }
-
-        return delegate.createContinueStatement(label);
-    }
-
-    // 12.8 The break statement
-
-    function parseBreakStatement() {
-        var label = null, key;
-
-        expectKeyword('break');
-
-        // Catch the very common case first: immediately a semicolon (U+003B).
-        if (source.charCodeAt(index) === 0x3B) {
-            lex();
-
-            if (!(state.inIteration || state.inSwitch)) {
-                throwError({}, Messages.IllegalBreak);
-            }
-
-            return delegate.createBreakStatement(null);
-        }
-
-        if (peekLineTerminator()) {
-            if (!(state.inIteration || state.inSwitch)) {
-                throwError({}, Messages.IllegalBreak);
-            }
-
-            return delegate.createBreakStatement(null);
-        }
-
-        if (lookahead.type === Token.Identifier) {
-            label = parseVariableIdentifier();
-
-            key = '$' + label.name;
-            if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
-                throwError({}, Messages.UnknownLabel, label.name);
-            }
-        }
-
-        consumeSemicolon();
-
-        if (label === null && !(state.inIteration || state.inSwitch)) {
-            throwError({}, Messages.IllegalBreak);
-        }
-
-        return delegate.createBreakStatement(label);
-    }
-
-    // 12.9 The return statement
-
-    function parseReturnStatement() {
-        var argument = null;
-
-        expectKeyword('return');
-
-        if (!state.inFunctionBody) {
-            throwErrorTolerant({}, Messages.IllegalReturn);
-        }
-
-        // 'return' followed by a space and an identifier is very common.
-        if (source.charCodeAt(index) === 0x20) {
-            if (isIdentifierStart(source.charCodeAt(index + 1))) {
-                argument = parseExpression();
-                consumeSemicolon();
-                return delegate.createReturnStatement(argument);
-            }
-        }
-
-        if (peekLineTerminator()) {
-            return delegate.createReturnStatement(null);
-        }
-
-        if (!match(';')) {
-            if (!match('}') && lookahead.type !== Token.EOF) {
-                argument = parseExpression();
-            }
-        }
-
-        consumeSemicolon();
-
-        return delegate.createReturnStatement(argument);
-    }
-
-    // 12.10 The with statement
-
-    function parseWithStatement() {
-        var object, body;
-
-        if (strict) {
-            // TODO(ikarienator): Should we update the test cases instead?
-            skipComment();
-            throwErrorTolerant({}, Messages.StrictModeWith);
-        }
-
-        expectKeyword('with');
-
-        expect('(');
-
-        object = parseExpression();
-
-        expect(')');
-
-        body = parseStatement();
-
-        return delegate.createWithStatement(object, body);
-    }
-
-    // 12.10 The swith statement
-
-    function parseSwitchCase() {
-        var test, consequent = [], statement, startToken;
-
-        startToken = lookahead;
-        if (matchKeyword('default')) {
-            lex();
-            test = null;
-        } else {
-            expectKeyword('case');
-            test = parseExpression();
-        }
-        expect(':');
-
-        while (index < length) {
-            if (match('}') || matchKeyword('default') || matchKeyword('case')) {
-                break;
-            }
-            statement = parseStatement();
-            consequent.push(statement);
-        }
-
-        return delegate.markEnd(delegate.createSwitchCase(test, consequent), startToken);
-    }
-
-    function parseSwitchStatement() {
-        var discriminant, cases, clause, oldInSwitch, defaultFound;
-
-        expectKeyword('switch');
-
-        expect('(');
-
-        discriminant = parseExpression();
-
-        expect(')');
-
-        expect('{');
-
-        cases = [];
-
-        if (match('}')) {
-            lex();
-            return delegate.createSwitchStatement(discriminant, cases);
-        }
-
-        oldInSwitch = state.inSwitch;
-        state.inSwitch = true;
-        defaultFound = false;
-
-        while (index < length) {
-            if (match('}')) {
-                break;
-            }
-            clause = parseSwitchCase();
-            if (clause.test === null) {
-                if (defaultFound) {
-                    throwError({}, Messages.MultipleDefaultsInSwitch);
-                }
-                defaultFound = true;
-            }
-            cases.push(clause);
-        }
-
-        state.inSwitch = oldInSwitch;
-
-        expect('}');
-
-        return delegate.createSwitchStatement(discriminant, cases);
-    }
-
-    // 12.13 The throw statement
-
-    function parseThrowStatement() {
-        var argument;
-
-        expectKeyword('throw');
-
-        if (peekLineTerminator()) {
-            throwError({}, Messages.NewlineAfterThrow);
-        }
-
-        argument = parseExpression();
-
-        consumeSemicolon();
-
-        return delegate.createThrowStatement(argument);
-    }
-
-    // 12.14 The try statement
-
-    function parseCatchClause() {
-        var param, body, startToken;
-
-        startToken = lookahead;
-        expectKeyword('catch');
-
-        expect('(');
-        if (match(')')) {
-            throwUnexpected(lookahead);
-        }
-
-        param = parseVariableIdentifier();
-        // 12.14.1
-        if (strict && isRestrictedWord(param.name)) {
-            throwErrorTolerant({}, Messages.StrictCatchVariable);
-        }
-
-        expect(')');
-        body = parseBlock();
-        return delegate.markEnd(delegate.createCatchClause(param, body), startToken);
-    }
-
-    function parseTryStatement() {
-        var block, handlers = [], finalizer = null;
-
-        expectKeyword('try');
-
-        block = parseBlock();
-
-        if (matchKeyword('catch')) {
-            handlers.push(parseCatchClause());
-        }
-
-        if (matchKeyword('finally')) {
-            lex();
-            finalizer = parseBlock();
-        }
-
-        if (handlers.length === 0 && !finalizer) {
-            throwError({}, Messages.NoCatchOrFinally);
-        }
-
-        return delegate.createTryStatement(block, [], handlers, finalizer);
-    }
-
-    // 12.15 The debugger statement
-
-    function parseDebuggerStatement() {
-        expectKeyword('debugger');
-
-        consumeSemicolon();
-
-        return delegate.createDebuggerStatement();
-    }
-
-    // 12 Statements
-
-    function parseStatement() {
-        var type = lookahead.type,
-            expr,
-            labeledBody,
-            key,
-            startToken;
-
-        if (type === Token.EOF) {
-            throwUnexpected(lookahead);
-        }
-
-        if (type === Token.Punctuator && lookahead.value === '{') {
-            return parseBlock();
-        }
-
-        startToken = lookahead;
-
-        if (type === Token.Punctuator) {
-            switch (lookahead.value) {
-            case ';':
-                return delegate.markEnd(parseEmptyStatement(), startToken);
-            case '(':
-                return delegate.markEnd(parseExpressionStatement(), startToken);
-            default:
-                break;
-            }
-        }
-
-        if (type === Token.Keyword) {
-            switch (lookahead.value) {
-            case 'break':
-                return delegate.markEnd(parseBreakStatement(), startToken);
-            case 'continue':
-                return delegate.markEnd(parseContinueStatement(), startToken);
-            case 'debugger':
-                return delegate.markEnd(parseDebuggerStatement(), startToken);
-            case 'do':
-                return delegate.markEnd(parseDoWhileStatement(), startToken);
-            case 'for':
-                return delegate.markEnd(parseForStatement(), startToken);
-            case 'function':
-                return delegate.markEnd(parseFunctionDeclaration(), startToken);
-            case 'if':
-                return delegate.markEnd(parseIfStatement(), startToken);
-            case 'return':
-                return delegate.markEnd(parseReturnStatement(), startToken);
-            case 'switch':
-                return delegate.markEnd(parseSwitchStatement(), startToken);
-            case 'throw':
-                return delegate.markEnd(parseThrowStatement(), startToken);
-            case 'try':
-                return delegate.markEnd(parseTryStatement(), startToken);
-            case 'var':
-                return delegate.markEnd(parseVariableStatement(), startToken);
-            case 'while':
-                return delegate.markEnd(parseWhileStatement(), startToken);
-            case 'with':
-                return delegate.markEnd(parseWithStatement(), startToken);
-            default:
-                break;
-            }
-        }
-
-        expr = parseExpression();
-
-        // 12.12 Labelled Statements
-        if ((expr.type === Syntax.Identifier) && match(':')) {
-            lex();
-
-            key = '$' + expr.name;
-            if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) {
-                throwError({}, Messages.Redeclaration, 'Label', expr.name);
-            }
-
-            state.labelSet[key] = true;
-            labeledBody = parseStatement();
-            delete state.labelSet[key];
-            return delegate.markEnd(delegate.createLabeledStatement(expr, labeledBody), startToken);
-        }
-
-        consumeSemicolon();
-
-        return delegate.markEnd(delegate.createExpressionStatement(expr), startToken);
-    }
-
-    // 13 Function Definition
-
-    function parseFunctionSourceElements() {
-        var sourceElement, sourceElements = [], token, directive, firstRestricted,
-            oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, startToken;
-
-        startToken = lookahead;
-        expect('{');
-
-        while (index < length) {
-            if (lookahead.type !== Token.StringLiteral) {
-                break;
-            }
-            token = lookahead;
-
-            sourceElement = parseSourceElement();
-            sourceElements.push(sourceElement);
-            if (sourceElement.expression.type !== Syntax.Literal) {
-                // this is not directive
-                break;
-            }
-            directive = source.slice(token.start + 1, token.end - 1);
-            if (directive === 'use strict') {
-                strict = true;
-                if (firstRestricted) {
-                    throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);
-                }
-            } else {
-                if (!firstRestricted && token.octal) {
-                    firstRestricted = token;
-                }
-            }
-        }
-
-        oldLabelSet = state.labelSet;
-        oldInIteration = state.inIteration;
-        oldInSwitch = state.inSwitch;
-        oldInFunctionBody = state.inFunctionBody;
-
-        state.labelSet = {};
-        state.inIteration = false;
-        state.inSwitch = false;
-        state.inFunctionBody = true;
-
-        while (index < length) {
-            if (match('}')) {
-                break;
-            }
-            sourceElement = parseSourceElement();
-            if (typeof sourceElement === 'undefined') {
-                break;
-            }
-            sourceElements.push(sourceElement);
-        }
-
-        expect('}');
-
-        state.labelSet = oldLabelSet;
-        state.inIteration = oldInIteration;
-        state.inSwitch = oldInSwitch;
-        state.inFunctionBody = oldInFunctionBody;
-
-        return delegate.markEnd(delegate.createBlockStatement(sourceElements), startToken);
-    }
-
-    function parseParams(firstRestricted) {
-        var param, params = [], token, stricted, paramSet, key, message;
-        expect('(');
-
-        if (!match(')')) {
-            paramSet = {};
-            while (index < length) {
-                token = lookahead;
-                param = parseVariableIdentifier();
-                key = '$' + token.value;
-                if (strict) {
-                    if (isRestrictedWord(token.value)) {
-                        stricted = token;
-                        message = Messages.StrictParamName;
-                    }
-                    if (Object.prototype.hasOwnProperty.call(paramSet, key)) {
-                        stricted = token;
-                        message = Messages.StrictParamDupe;
-                    }
-                } else if (!firstRestricted) {
-                    if (isRestrictedWord(token.value)) {
-                        firstRestricted = token;
-                        message = Messages.StrictParamName;
-                    } else if (isStrictModeReservedWord(token.value)) {
-                        firstRestricted = token;
-                        message = Messages.StrictReservedWord;
-                    } else if (Object.prototype.hasOwnProperty.call(paramSet, key)) {
-                        firstRestricted = token;
-                        message = Messages.StrictParamDupe;
-                    }
-                }
-                params.push(param);
-                paramSet[key] = true;
-                if (match(')')) {
-                    break;
-                }
-                expect(',');
-            }
-        }
-
-        expect(')');
-
-        return {
-            params: params,
-            stricted: stricted,
-            firstRestricted: firstRestricted,
-            message: message
-        };
-    }
-
-    function parseFunctionDeclaration() {
-        var id, params = [], body, token, stricted, tmp, firstRestricted, message, previousStrict, startToken;
-
-        startToken = lookahead;
-
-        expectKeyword('function');
-        token = lookahead;
-        id = parseVariableIdentifier();
-        if (strict) {
-            if (isRestrictedWord(token.value)) {
-                throwErrorTolerant(token, Messages.StrictFunctionName);
-            }
-        } else {
-            if (isRestrictedWord(token.value)) {
-                firstRestricted = token;
-                message = Messages.StrictFunctionName;
-            } else if (isStrictModeReservedWord(token.value)) {
-                firstRestricted = token;
-                message = Messages.StrictReservedWord;
-            }
-        }
-
-        tmp = parseParams(firstRestricted);
-        params = tmp.params;
-        stricted = tmp.stricted;
-        firstRestricted = tmp.firstRestricted;
-        if (tmp.message) {
-            message = tmp.message;
-        }
-
-        previousStrict = strict;
-        body = parseFunctionSourceElements();
-        if (strict && firstRestricted) {
-            throwError(firstRestricted, message);
-        }
-        if (strict && stricted) {
-            throwErrorTolerant(stricted, message);
-        }
-        strict = previousStrict;
-
-        return delegate.markEnd(delegate.createFunctionDeclaration(id, params, [], body), startToken);
-    }
-
-    function parseFunctionExpression() {
-        var token, id = null, stricted, firstRestricted, message, tmp, params = [], body, previousStrict, startToken;
-
-        startToken = lookahead;
-        expectKeyword('function');
-
-        if (!match('(')) {
-            token = lookahead;
-            id = parseVariableIdentifier();
-            if (strict) {
-                if (isRestrictedWord(token.value)) {
-                    throwErrorTolerant(token, Messages.StrictFunctionName);
-                }
-            } else {
-                if (isRestrictedWord(token.value)) {
-                    firstRestricted = token;
-                    message = Messages.StrictFunctionName;
-                } else if (isStrictModeReservedWord(token.value)) {
-                    firstRestricted = token;
-                    message = Messages.StrictReservedWord;
-                }
-            }
-        }
-
-        tmp = parseParams(firstRestricted);
-        params = tmp.params;
-        stricted = tmp.stricted;
-        firstRestricted = tmp.firstRestricted;
-        if (tmp.message) {
-            message = tmp.message;
-        }
-
-        previousStrict = strict;
-        body = parseFunctionSourceElements();
-        if (strict && firstRestricted) {
-            throwError(firstRestricted, message);
-        }
-        if (strict && stricted) {
-            throwErrorTolerant(stricted, message);
-        }
-        strict = previousStrict;
-
-        return delegate.markEnd(delegate.createFunctionExpression(id, params, [], body), startToken);
-    }
-
-    // 14 Program
-
-    function parseSourceElement() {
-        if (lookahead.type === Token.Keyword) {
-            switch (lookahead.value) {
-            case 'const':
-            case 'let':
-                return parseConstLetDeclaration(lookahead.value);
-            case 'function':
-                return parseFunctionDeclaration();
-            default:
-                return parseStatement();
-            }
-        }
-
-        if (lookahead.type !== Token.EOF) {
-            return parseStatement();
-        }
-    }
-
-    function parseSourceElements() {
-        var sourceElement, sourceElements = [], token, directive, firstRestricted;
-
-        while (index < length) {
-            token = lookahead;
-            if (token.type !== Token.StringLiteral) {
-                break;
-            }
-
-            sourceElement = parseSourceElement();
-            sourceElements.push(sourceElement);
-            if (sourceElement.expression.type !== Syntax.Literal) {
-                // this is not directive
-                break;
-            }
-            directive = source.slice(token.start + 1, token.end - 1);
-            if (directive === 'use strict') {
-                strict = true;
-                if (firstRestricted) {
-                    throwErrorTolerant(firstRestricted, Messages.StrictOctalLiteral);
-                }
-            } else {
-                if (!firstRestricted && token.octal) {
-                    firstRestricted = token;
-                }
-            }
-        }
-
-        while (index < length) {
-            sourceElement = parseSourceElement();
-            /* istanbul ignore if */
-            if (typeof sourceElement === 'undefined') {
-                break;
-            }
-            sourceElements.push(sourceElement);
-        }
-        return sourceElements;
-    }
-
-    function parseProgram() {
-        var body, startToken;
-
-        skipComment();
-        peek();
-        startToken = lookahead;
-        strict = false;
-
-        body = parseSourceElements();
-        return delegate.markEnd(delegate.createProgram(body), startToken);
-    }
-
-    function filterTokenLocation() {
-        var i, entry, token, tokens = [];
-
-        for (i = 0; i < extra.tokens.length; ++i) {
-            entry = extra.tokens[i];
-            token = {
-                type: entry.type,
-                value: entry.value
-            };
-            if (extra.range) {
-                token.range = entry.range;
-            }
-            if (extra.loc) {
-                token.loc = entry.loc;
-            }
-            tokens.push(token);
-        }
-
-        extra.tokens = tokens;
-    }
-
-    function tokenize(code, options) {
-        var toString,
-            token,
-            tokens;
-
-        toString = String;
-        if (typeof code !== 'string' && !(code instanceof String)) {
-            code = toString(code);
-        }
-
-        delegate = SyntaxTreeDelegate;
-        source = code;
-        index = 0;
-        lineNumber = (source.length > 0) ? 1 : 0;
-        lineStart = 0;
-        length = source.length;
-        lookahead = null;
-        state = {
-            allowIn: true,
-            labelSet: {},
-            inFunctionBody: false,
-            inIteration: false,
-            inSwitch: false,
-            lastCommentStart: -1
-        };
-
-        extra = {};
-
-        // Options matching.
-        options = options || {};
-
-        // Of course we collect tokens here.
-        options.tokens = true;
-        extra.tokens = [];
-        extra.tokenize = true;
-        // The following two fields are necessary to compute the Regex tokens.
-        extra.openParenToken = -1;
-        extra.openCurlyToken = -1;
-
-        extra.range = (typeof options.range === 'boolean') && options.range;
-        extra.loc = (typeof options.loc === 'boolean') && options.loc;
-
-        if (typeof options.comment === 'boolean' && options.comment) {
-            extra.comments = [];
-        }
-        if (typeof options.tolerant === 'boolean' && options.tolerant) {
-            extra.errors = [];
-        }
-
-        try {
-            peek();
-            if (lookahead.type === Token.EOF) {
-                return extra.tokens;
-            }
-
-            token = lex();
-            while (lookahead.type !== Token.EOF) {
-                try {
-                    token = lex();
-                } catch (lexError) {
-                    token = lookahead;
-                    if (extra.errors) {
-                        extra.errors.push(lexError);
-                        // We have to break on the first error
-                        // to avoid infinite loops.
-                        break;
-                    } else {
-                        throw lexError;
-                    }
-                }
-            }
-
-            filterTokenLocation();
-            tokens = extra.tokens;
-            if (typeof extra.comments !== 'undefined') {
-                tokens.comments = extra.comments;
-            }
-            if (typeof extra.errors !== 'undefined') {
-                tokens.errors = extra.errors;
-            }
-        } catch (e) {
-            throw e;
-        } finally {
-            extra = {};
-        }
-        return tokens;
-    }
-
-    function parse(code, options) {
-        var program, toString;
-
-        toString = String;
-        if (typeof code !== 'string' && !(code instanceof String)) {
-            code = toString(code);
-        }
-
-        delegate = SyntaxTreeDelegate;
-        source = code;
-        index = 0;
-        lineNumber = (source.length > 0) ? 1 : 0;
-        lineStart = 0;
-        length = source.length;
-        lookahead = null;
-        state = {
-            allowIn: true,
-            labelSet: {},
-            inFunctionBody: false,
-            inIteration: false,
-            inSwitch: false,
-            lastCommentStart: -1
-        };
-
-        extra = {};
-        if (typeof options !== 'undefined') {
-            extra.range = (typeof options.range === 'boolean') && options.range;
-            extra.loc = (typeof options.loc === 'boolean') && options.loc;
-            extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment;
-
-            if (extra.loc && options.source !== null && options.source !== undefined) {
-                extra.source = toString(options.source);
-            }
-
-            if (typeof options.tokens === 'boolean' && options.tokens) {
-                extra.tokens = [];
-            }
-            if (typeof options.comment === 'boolean' && options.comment) {
-                extra.comments = [];
-            }
-            if (typeof options.tolerant === 'boolean' && options.tolerant) {
-                extra.errors = [];
-            }
-            if (extra.attachComment) {
-                extra.range = true;
-                extra.comments = [];
-                extra.bottomRightStack = [];
-                extra.trailingComments = [];
-                extra.leadingComments = [];
-            }
-        }
-
-        try {
-            program = parseProgram();
-            if (typeof extra.comments !== 'undefined') {
-                program.comments = extra.comments;
-            }
-            if (typeof extra.tokens !== 'undefined') {
-                filterTokenLocation();
-                program.tokens = extra.tokens;
-            }
-            if (typeof extra.errors !== 'undefined') {
-                program.errors = extra.errors;
-            }
-        } catch (e) {
-            throw e;
-        } finally {
-            extra = {};
-        }
-
-        return program;
-    }
-
-    // Sync with *.json manifests.
-    exports.version = '1.2.2';
-
-    exports.tokenize = tokenize;
-
-    exports.parse = parse;
-
-    // Deep copy.
-   /* istanbul ignore next */
-    exports.Syntax = (function () {
-        var name, types = {};
-
-        if (typeof Object.create === 'function') {
-            types = Object.create(null);
-        }
-
-        for (name in Syntax) {
-            if (Syntax.hasOwnProperty(name)) {
-                types[name] = Syntax[name];
-            }
-        }
-
-        if (typeof Object.freeze === 'function') {
-            Object.freeze(types);
-        }
-
-        return types;
-    }());
-
-}));
-/* vim: set sw=4 ts=4 et tw=80 : */
-
-},{}],1:[function(require,module,exports){
-(function (process){
-/* parser generated by jison 0.4.13 */
-/*
-  Returns a Parser object of the following structure:
-
-  Parser: {
-    yy: {}
-  }
-
-  Parser.prototype: {
-    yy: {},
-    trace: function(),
-    symbols_: {associative list: name ==> number},
-    terminals_: {associative list: number ==> name},
-    productions_: [...],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),
-    table: [...],
-    defaultActions: {...},
-    parseError: function(str, hash),
-    parse: function(input),
-
-    lexer: {
-        EOF: 1,
-        parseError: function(str, hash),
-        setInput: function(input),
-        input: function(),
-        unput: function(str),
-        more: function(),
-        less: function(n),
-        pastInput: function(),
-        upcomingInput: function(),
-        showPosition: function(),
-        test_match: function(regex_match_array, rule_index),
-        next: function(),
-        lex: function(),
-        begin: function(condition),
-        popState: function(),
-        _currentRules: function(),
-        topState: function(),
-        pushState: function(condition),
-
-        options: {
-            ranges: boolean           (optional: true ==> token location info will include a .range[] member)
-            flex: boolean             (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)
-            backtrack_lexer: boolean  (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)
-        },
-
-        performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),
-        rules: [...],
-        conditions: {associative list: name ==> set},
-    }
-  }
-
-
-  token location info (@$, _$, etc.): {
-    first_line: n,
-    last_line: n,
-    first_column: n,
-    last_column: n,
-    range: [start_number, end_number]       (where the numbers are indexes into the input string, regular zero-based)
-  }
-
-
-  the parseError function receives a 'hash' object with these members for lexer and parser errors: {
-    text:        (matched text)
-    token:       (the produced terminal token, if any)
-    line:        (yylineno)
-  }
-  while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {
-    loc:         (yylloc)
-    expected:    (string describing the set of expected tokens)
-    recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)
-  }
-*/
-var parser = (function(){
-var parser = {trace: function trace() { },
-yy: {},
-symbols_: {"error":2,"JSON_PATH":3,"DOLLAR":4,"PATH_COMPONENTS":5,"LEADING_CHILD_MEMBER_EXPRESSION":6,"PATH_COMPONENT":7,"MEMBER_COMPONENT":8,"SUBSCRIPT_COMPONENT":9,"CHILD_MEMBER_COMPONENT":10,"DESCENDANT_MEMBER_COMPONENT":11,"DOT":12,"MEMBER_EXPRESSION":13,"DOT_DOT":14,"STAR":15,"IDENTIFIER":16,"SCRIPT_EXPRESSION":17,"INTEGER":18,"END":19,"CHILD_SUBSCRIPT_COMPONENT":20,"DESCENDANT_SUBSCRIPT_COMPONENT":21,"[":22,"SUBSCRIPT":23,"]":24,"SUBSCRIPT_EXPRESSION":25,"SUBSCRIPT_EXPRESSION_LIST":26,"SUBSCRIPT_EXPRESSION_LISTABLE":27,",":28,"STRING_LITERAL":29,"ARRAY_SLICE":30,"FILTER_EXPRESSION":31,"QQ_STRING":32,"Q_STRING":33,"$accept":0,"$end":1},
-terminals_: {2:"error",4:"DOLLAR",12:"DOT",14:"DOT_DOT",15:"STAR",16:"IDENTIFIER",17:"SCRIPT_EXPRESSION",18:"INTEGER",19:"END",22:"[",24:"]",28:",",30:"ARRAY_SLICE",31:"FILTER_EXPRESSION",32:"QQ_STRING",33:"Q_STRING"},
-productions_: [0,[3,1],[3,2],[3,1],[3,2],[5,1],[5,2],[7,1],[7,1],[8,1],[8,1],[10,2],[6,1],[11,2],[13,1],[13,1],[13,1],[13,1],[13,1],[9,1],[9,1],[20,3],[21,4],[23,1],[23,1],[26,1],[26,3],[27,1],[27,1],[27,1],[25,1],[25,1],[25,1],[29,1],[29,1]],
-performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */
-/**/) {
-/* this == yyval */
-if (!yy.ast) {
-    yy.ast = _ast;
-    _ast.initialize();
-}
-
-var $0 = $$.length - 1;
-switch (yystate) {
-case 1:yy.ast.set({ expression: { type: "root", value: $$[$0] } }); yy.ast.unshift(); return yy.ast.yield()
-break;
-case 2:yy.ast.set({ expression: { type: "root", value: $$[$0-1] } }); yy.ast.unshift(); return yy.ast.yield()
-break;
-case 3:yy.ast.unshift(); return yy.ast.yield()
-break;
-case 4:yy.ast.set({ operation: "member", scope: "child", expression: { type: "identifier", value: $$[$0-1] }}); yy.ast.unshift(); return yy.ast.yield()
-break;
-case 5:
-break;
-case 6:
-break;
-case 7:yy.ast.set({ operation: "member" }); yy.ast.push()
-break;
-case 8:yy.ast.set({ operation: "subscript" }); yy.ast.push() 
-break;
-case 9:yy.ast.set({ scope: "child" })
-break;
-case 10:yy.ast.set({ scope: "descendant" })
-break;
-case 11:
-break;
-case 12:yy.ast.set({ scope: "child", operation: "member" })
-break;
-case 13:
-break;
-case 14:yy.ast.set({ expression: { type: "wildcard", value: $$[$0] } })
-break;
-case 15:yy.ast.set({ expression: { type: "identifier", value: $$[$0] } })
-break;
-case 16:yy.ast.set({ expression: { type: "script_expression", value: $$[$0] } })
-break;
-case 17:yy.ast.set({ expression: { type: "numeric_literal", value: parseInt($$[$0]) } })
-break;
-case 18:
-break;
-case 19:yy.ast.set({ scope: "child" })
-break;
-case 20:yy.ast.set({ scope: "descendant" })
-break;
-case 21:
-break;
-case 22:
-break;
-case 23:
-break;
-case 24:$$[$0].length > 1? yy.ast.set({ expression: { type: "union", value: $$[$0] } }) : this.$ = $$[$0]
-break;
-case 25:this.$ = [$$[$0]]
-break;
-case 26:this.$ = $$[$0-2].concat($$[$0])
-break;
-case 27:this.$ = { expression: { type: "numeric_literal", value: parseInt($$[$0]) } }; yy.ast.set(this.$)
-break;
-case 28:this.$ = { expression: { type: "string_literal", value: $$[$0] } }; yy.ast.set(this.$)
-break;
-case 29:this.$ = { expression: { type: "slice", value: $$[$0] } }; yy.ast.set(this.$)
-break;
-case 30:this.$ = { expression: { type: "wildcard", value: $$[$0] } }; yy.ast.set(this.$)
-break;
-case 31:this.$ = { expression: { type: "script_expression", value: $$[$0] } }; yy.ast.set(this.$)
-break;
-case 32:this.$ = { expression: { type: "filter_expression", value: $$[$0] } }; yy.ast.set(this.$)
-break;
-case 33:this.$ = $$[$0]
-break;
-case 34:this.$ = $$[$0]
-break;
-}
-},
-table: [{3:1,4:[1,2],6:3,13:4,15:[1,5],16:[1,6],17:[1,7],18:[1,8],19:[1,9]},{1:[3]},{1:[2,1],5:10,7:11,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,3],5:21,7:11,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,12],12:[2,12],14:[2,12],22:[2,12]},{1:[2,14],12:[2,14],14:[2,14],22:[2,14]},{1:[2,15],12:[2,15],14:[2,15],22:[2,15]},{1:[2,16],12:[2,16],14:[2,16],22:[2,16]},{1:[2,17],12:[2,17],14:[2,17],22:[2,17]},{1:[2,18],12:[2,18],14:[2,18],22:[2,18]},{1:[2,2],7:22,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,5],12:[2,5],14:[2,5],22:[2,5]},{1:[2,7],12:[2,7],14:[2,7],22:[2,7]},{1:[2,8],12:[2,8],14:[2,8],22:[2,8]},{1:[2,9],12:[2,9],14:[2,9],22:[2,9]},{1:[2,10],12:[2,10],14:[2,10],22:[2,10]},{1:[2,19],12:[2,19],14:[2,19],22:[2,19]},{1:[2,20],12:[2,20],14:[2,20],22:[2,20]},{13:23,15:[1,5],16:[1,6],17:[1,7],18:[1,8],19:[1,9]},{13:24,15:[1,5],16:[1,6],17:[1,7],18:[1,8],19:[1,9],22:[1,25]},{15:[1,29],17:[1,30],18:[1,33],23:26,25:27,26:28,27:32,29:34,30:[1,35],31:[1,31],32:[1,36],33:[1,37]},{1:[2,4],7:22,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,6],12:[2,6],14:[2,6],22:[2,6]},{1:[2,11],12:[2,11],14:[2,11],22:[2,11]},{1:[2,13],12:[2,13],14:[2,13],22:[2,13]},{15:[1,29],17:[1,30],18:[1,33],23:38,25:27,26:28,27:32,29:34,30:[1,35],31:[1,31],32:[1,36],33:[1,37]},{24:[1,39]},{24:[2,23]},{24:[2,24],28:[1,40]},{24:[2,30]},{24:[2,31]},{24:[2,32]},{24:[2,25],28:[2,25]},{24:[2,27],28:[2,27]},{24:[2,28],28:[2,28]},{24:[2,29],28:[2,29]},{24:[2,33],28:[2,33]},{24:[2,34],28:[2,34]},{24:[1,41]},{1:[2,21],12:[2,21],14:[2,21],22:[2,21]},{18:[1,33],27:42,29:34,30:[1,35],32:[1,36],33:[1,37]},{1:[2,22],12:[2,22],14:[2,22],22:[2,22]},{24:[2,26],28:[2,26]}],
-defaultActions: {27:[2,23],29:[2,30],30:[2,31],31:[2,32]},
-parseError: function parseError(str, hash) {
-    if (hash.recoverable) {
-        this.trace(str);
-    } else {
-        throw new Error(str);
-    }
-},
-parse: function parse(input) {
-    var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;
-    var args = lstack.slice.call(arguments, 1);
-    this.lexer.setInput(input);
-    this.lexer.yy = this.yy;
-    this.yy.lexer = this.lexer;
-    this.yy.parser = this;
-    if (typeof this.lexer.yylloc == 'undefined') {
-        this.lexer.yylloc = {};
-    }
-    var yyloc = this.lexer.yylloc;
-    lstack.push(yyloc);
-    var ranges = this.lexer.options && this.lexer.options.ranges;
-    if (typeof this.yy.parseError === 'function') {
-        this.parseError = this.yy.parseError;
-    } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-    }
-    function popStack(n) {
-        stack.length = stack.length - 2 * n;
-        vstack.length = vstack.length - n;
-        lstack.length = lstack.length - n;
-    }
-    function lex() {
-        var token;
-        token = self.lexer.lex() || EOF;
-        if (typeof token !== 'number') {
-            token = self.symbols_[token] || token;
-        }
-        return token;
-    }
-    var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;
-    while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-            action = this.defaultActions[state];
-        } else {
-            if (symbol === null || typeof symbol == 'undefined') {
-                symbol = lex();
-            }
-            action = table[state] && table[state][symbol];
-        }
-                    if (typeof action === 'undefined' || !action.length || !action[0]) {
-                var errStr = '';
-                expected = [];
-                for (p in table[state]) {
-                    if (this.terminals_[p] && p > TERROR) {
-                        expected.push('\'' + this.terminals_[p] + '\'');
-                    }
-                }
-                if (this.lexer.showPosition) {
-                    errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + this.lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\'';
-                } else {
-                    errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\'');
-                }
-                this.parseError(errStr, {
-                    text: this.lexer.match,
-                    token: this.terminals_[symbol] || symbol,
-                    line: this.lexer.yylineno,
-                    loc: yyloc,
-                    expected: expected
-                });
-            }
-        if (action[0] instanceof Array && action.length > 1) {
-            throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);
-        }
-        switch (action[0]) {
-        case 1:
-            stack.push(symbol);
-            vstack.push(this.lexer.yytext);
-            lstack.push(this.lexer.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            if (!preErrorSymbol) {
-                yyleng = this.lexer.yyleng;
-                yytext = this.lexer.yytext;
-                yylineno = this.lexer.yylineno;
-                yyloc = this.lexer.yylloc;
-                if (recovering > 0) {
-                    recovering--;
-                }
-            } else {
-                symbol = preErrorSymbol;
-                preErrorSymbol = null;
-            }
-            break;
-        case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-                first_line: lstack[lstack.length - (len || 1)].first_line,
-                last_line: lstack[lstack.length - 1].last_line,
-                first_column: lstack[lstack.length - (len || 1)].first_column,
-                last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-                yyval._$.range = [
-                    lstack[lstack.length - (len || 1)].range[0],
-                    lstack[lstack.length - 1].range[1]
-                ];
-            }
-            r = this.performAction.apply(yyval, [
-                yytext,
-                yyleng,
-                yylineno,
-                this.yy,
-                action[1],
-                vstack,
-                lstack
-            ].concat(args));
-            if (typeof r !== 'undefined') {
-                return r;
-            }
-            if (len) {
-                stack = stack.slice(0, -1 * len * 2);
-                vstack = vstack.slice(0, -1 * len);
-                lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-        case 3:
-            return true;
-        }
-    }
-    return true;
-}};
-var _ast = {
-
-  initialize: function() {
-    this._nodes = [];
-    this._node = {};
-    this._stash = [];
-  },
-
-  set: function(props) {
-    for (var k in props) this._node[k] = props[k];
-    return this._node;
-  },
-
-  node: function(obj) {
-    if (arguments.length) this._node = obj;
-    return this._node;
-  },
-
-  push: function() {
-    this._nodes.push(this._node);
-    this._node = {};
-  },
-
-  unshift: function() {
-    this._nodes.unshift(this._node);
-    this._node = {};
-  },
-
-  yield: function() {
-    var _nodes = this._nodes;
-    this.initialize();
-    return _nodes;
-  }
-};
-/* generated by jison-lex 0.2.1 */
-var lexer = (function(){
-var lexer = {
-
-EOF:1,
-
-parseError:function parseError(str, hash) {
-        if (this.yy.parser) {
-            this.yy.parser.parseError(str, hash);
-        } else {
-            throw new Error(str);
-        }
-    },
-
-// resets the lexer, sets new input
-setInput:function (input) {
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = '';
-        this.conditionStack = ['INITIAL'];
-        this.yylloc = {
-            first_line: 1,
-            first_column: 0,
-            last_line: 1,
-            last_column: 0
-        };
-        if (this.options.ranges) {
-            this.yylloc.range = [0,0];
-        }
-        this.offset = 0;
-        return this;
-    },
-
-// consumes and returns one char from the input
-input:function () {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-            this.yylineno++;
-            this.yylloc.last_line++;
-        } else {
-            this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-            this.yylloc.range[1]++;
-        }
-
-        this._input = this._input.slice(1);
-        return ch;
-    },
-
-// unshifts one char (or a string) into the input
-unput:function (ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);
-        //this.yyleng -= len;
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-
-        if (lines.length - 1) {
-            this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-
-        this.yylloc = {
-            first_line: this.yylloc.first_line,
-            last_line: this.yylineno + 1,
-            first_column: this.yylloc.first_column,
-            last_column: lines ?
-                (lines.length === oldLines.length ? this.yylloc.first_column : 0)
-                 + oldLines[oldLines.length - lines.length].length - lines[0].length :
-              this.yylloc.first_column - len
-        };
-
-        if (this.options.ranges) {
-            this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-    },
-
-// When called from action, caches matched text and appends it on next action
-more:function () {
-        this._more = true;
-        return this;
-    },
-
-// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-reject:function () {
-        if (this.options.backtrack_lexer) {
-            this._backtrack = true;
-        } else {
-            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n' + this.showPosition(), {
-                text: "",
-                token: null,
-                line: this.yylineno
-            });
-
-        }
-        return this;
-    },
-
-// retain first n characters of the match
-less:function (n) {
-        this.unput(this.match.slice(n));
-    },
-
-// displays already matched input, i.e. for error messages
-pastInput:function () {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, "");
-    },
-
-// displays upcoming input, i.e. for error messages
-upcomingInput:function () {
-        var next = this.match;
-        if (next.length < 20) {
-            next += this._input.substr(0, 20-next.length);
-        }
-        return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\n/g, "");
-    },
-
-// displays the character position where the lexing error occurred, i.e. for error messages
-showPosition:function () {
-        var pre = this.pastInput();
-        var c = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c + "^";
-    },
-
-// test the lexed token: return FALSE when not a match, otherwise return token
-test_match:function (match, indexed_rule) {
-        var token,
-            lines,
-            backup;
-
-        if (this.options.backtrack_lexer) {
-            // save context
-            backup = {
-                yylineno: this.yylineno,
-                yylloc: {
-                    first_line: this.yylloc.first_line,
-                    last_line: this.last_line,
-                    first_column: this.yylloc.first_column,
-                    last_column: this.yylloc.last_column
-                },
-                yytext: this.yytext,
-                match: this.match,
-                matches: this.matches,
-                matched: this.matched,
-                yyleng: this.yyleng,
-                offset: this.offset,
-                _more: this._more,
-                _input: this._input,
-                yy: this.yy,
-                conditionStack: this.conditionStack.slice(0),
-                done: this.done
-            };
-            if (this.options.ranges) {
-                backup.yylloc.range = this.yylloc.range.slice(0);
-            }
-        }
-
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-            this.yylineno += lines.length;
-        }
-        this.yylloc = {
-            first_line: this.yylloc.last_line,
-            last_line: this.yylineno + 1,
-            first_column: this.yylloc.last_column,
-            last_column: lines ?
-                         lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length :
-                         this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-            this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-            this.done = false;
-        }
-        if (token) {
-            return token;
-        } else if (this._backtrack) {
-            // recover context
-            for (var k in backup) {
-                this[k] = backup[k];
-            }
-            return false; // rule action called reject() implying the next rule should be tested instead.
-        }
-        return false;
-    },
-
-// return next match in input
-next:function () {
-        if (this.done) {
-            return this.EOF;
-        }
-        if (!this._input) {
-            this.done = true;
-        }
-
-        var token,
-            match,
-            tempMatch,
-            index;
-        if (!this._more) {
-            this.yytext = '';
-            this.match = '';
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-            tempMatch = this._input.match(this.rules[rules[i]]);
-            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-                match = tempMatch;
-                index = i;
-                if (this.options.backtrack_lexer) {
-                    token = this.test_match(tempMatch, rules[i]);
-                    if (token !== false) {
-                        return token;
-                    } else if (this._backtrack) {
-                        match = false;
-                        continue; // rule action called reject() implying a rule MISmatch.
-                    } else {
-                        // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
-                        return false;
-                    }
-                } else if (!this.options.flex) {
-                    break;
-                }
-            }
-        }
-        if (match) {
-            token = this.test_match(match, rules[index]);
-            if (token !== false) {
-                return token;
-            }
-            // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
-            return false;
-        }
-        if (this._input === "") {
-            return this.EOF;
-        } else {
-            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), {
-                text: "",
-                token: null,
-                line: this.yylineno
-            });
-        }
-    },
-
-// return next match that has a token
-lex:function lex() {
-        var r = this.next();
-        if (r) {
-            return r;
-        } else {
-            return this.lex();
-        }
-    },
-
-// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-begin:function begin(condition) {
-        this.conditionStack.push(condition);
-    },
-
-// pop the previously active lexer condition state off the condition stack
-popState:function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-            return this.conditionStack.pop();
-        } else {
-            return this.conditionStack[0];
-        }
-    },
-
-// produce the lexer rule set which is active for the currently active lexer condition state
-_currentRules:function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-            return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-            return this.conditions["INITIAL"].rules;
-        }
-    },
-
-// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-topState:function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-            return this.conditionStack[n];
-        } else {
-            return "INITIAL";
-        }
-    },
-
-// alias for begin(condition)
-pushState:function pushState(condition) {
-        this.begin(condition);
-    },
-
-// return the number of states currently on the stack
-stateStackSize:function stateStackSize() {
-        return this.conditionStack.length;
-    },
-options: {},
-performAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START
-/**/) {
-
-var YYSTATE=YY_START;
-switch($avoiding_name_collisions) {
-case 0:return 4
-break;
-case 1:return 14
-break;
-case 2:return 12
-break;
-case 3:return 15
-break;
-case 4:return 16
-break;
-case 5:return 22
-break;
-case 6:return 24
-break;
-case 7:return 28
-break;
-case 8:return 30
-break;
-case 9:return 18
-break;
-case 10:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 32;
-break;
-case 11:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 33;
-break;
-case 12:return 17
-break;
-case 13:return 31
-break;
-}
-},
-rules: [/^(?:\$)/,/^(?:\.\.)/,/^(?:\.)/,/^(?:\*)/,/^(?:[a-zA-Z_]+[a-zA-Z0-9_]*)/,/^(?:\[)/,/^(?:\])/,/^(?:,)/,/^(?:((-?(?:0|[1-9][0-9]*)))?\:((-?(?:0|[1-9][0-9]*)))?(\:((-?(?:0|[1-9][0-9]*)))?)?)/,/^(?:(-?(?:0|[1-9][0-9]*)))/,/^(?:"(?:\\["bfnrt/\\]|\\u[a-fA-F0-9]{4}|[^"\\])*")/,/^(?:'(?:\\['bfnrt/\\]|\\u[a-fA-F0-9]{4}|[^'\\])*')/,/^(?:\(.+?\)(?=\]))/,/^(?:\?\(.+?\)(?=\]))/],
-conditions: {"INITIAL":{"rules":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],"inclusive":true}}
-};
-return lexer;
-})();
-parser.lexer = lexer;
-function Parser () {
-  this.yy = {};
-}
-Parser.prototype = parser;parser.Parser = Parser;
-return new Parser;
-})();
-
-
-if (typeof require !== 'undefined' && typeof exports !== 'undefined') {
-exports.parser = parser;
-exports.Parser = parser.Parser;
-exports.parse = function () { return parser.parse.apply(parser, arguments); };
-exports.main = function commonjsMain(args) {
-    if (!args[1]) {
-        console.log('Usage: '+args[0]+' FILE');
-        process.exit(1);
-    }
-    var source = require('fs').readFileSync(require('path').normalize(args[1]), "utf8");
-    return exports.parser.parse(source);
-};
-if (typeof module !== 'undefined' && require.main === module) {
-  exports.main(process.argv.slice(1));
-}
-}
-
-}).call(this,require('_process'))
-},{"_process":14,"fs":12,"path":13}],2:[function(require,module,exports){
-module.exports = {
-  identifier: "[a-zA-Z_]+[a-zA-Z0-9_]*",
-  integer: "-?(?:0|[1-9][0-9]*)",
-  qq_string: "\"(?:\\\\[\"bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\"\\\\])*\"",
-  q_string: "'(?:\\\\[\'bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\'\\\\])*'"
-};
-
-},{}],3:[function(require,module,exports){
-var dict = require('./dict');
-var fs = require('fs');
-var grammar = {
-
-    lex: {
-
-        macros: {
-            esc: "\\\\",
-            int: dict.integer
-        },
-
-        rules: [
-            ["\\$", "return 'DOLLAR'"],
-            ["\\.\\.", "return 'DOT_DOT'"],
-            ["\\.", "return 'DOT'"],
-            ["\\*", "return 'STAR'"],
-            [dict.identifier, "return 'IDENTIFIER'"],
-            ["\\[", "return '['"],
-            ["\\]", "return ']'"],
-            [",", "return ','"],
-            ["({int})?\\:({int})?(\\:({int})?)?", "return 'ARRAY_SLICE'"],
-            ["{int}", "return 'INTEGER'"],
-            [dict.qq_string, "yytext = yytext.substr(1,yyleng-2); return 'QQ_STRING';"],
-            [dict.q_string, "yytext = yytext.substr(1,yyleng-2); return 'Q_STRING';"],
-            ["\\(.+?\\)(?=\\])", "return 'SCRIPT_EXPRESSION'"],
-            ["\\?\\(.+?\\)(?=\\])", "return 'FILTER_EXPRESSION'"]
-        ]
-    },
-
-    start: "JSON_PATH",
-
-    bnf: {
-
-        JSON_PATH: [
-                [ 'DOLLAR',                 'yy.ast.set({ expression: { type: "root", value: $1 } }); yy.ast.unshift(); return yy.ast.yield()' ],
-                [ 'DOLLAR PATH_COMPONENTS', 'yy.ast.set({ expression: { type: "root", value: $1 } }); yy.ast.unshift(); return yy.ast.yield()' ],
-                [ 'LEADING_CHILD_MEMBER_EXPRESSION',                 'yy.ast.unshift(); return yy.ast.yield()' ],
-                [ 'LEADING_CHILD_MEMBER_EXPRESSION PATH_COMPONENTS', 'yy.ast.set({ operation: "member", scope: "child", expression: { type: "identifier", value: $1 }}); yy.ast.unshift(); return yy.ast.yield()' ] ],
-
-        PATH_COMPONENTS: [
-                [ 'PATH_COMPONENT',                 '' ],
-                [ 'PATH_COMPONENTS PATH_COMPONENT', '' ] ],
-
-        PATH_COMPONENT: [
-                [ 'MEMBER_COMPONENT',    'yy.ast.set({ operation: "member" }); yy.ast.push()' ],
-                [ 'SUBSCRIPT_COMPONENT', 'yy.ast.set({ operation: "subscript" }); yy.ast.push() ' ] ],
-
-        MEMBER_COMPONENT: [
-                [ 'CHILD_MEMBER_COMPONENT',      'yy.ast.set({ scope: "child" })' ],
-                [ 'DESCENDANT_MEMBER_COMPONENT', 'yy.ast.set({ scope: "descendant" })' ] ],
-
-        CHILD_MEMBER_COMPONENT: [
-                [ 'DOT MEMBER_EXPRESSION', '' ] ],
-
-        LEADING_CHILD_MEMBER_EXPRESSION: [
-                [ 'MEMBER_EXPRESSION', 'yy.ast.set({ scope: "child", operation: "member" })' ] ],
-
-        DESCENDANT_MEMBER_COMPONENT: [
-                [ 'DOT_DOT MEMBER_EXPRESSION', '' ] ],
-
-        MEMBER_EXPRESSION: [
-                [ 'STAR',              'yy.ast.set({ expression: { type: "wildcard", value: $1 } })' ],
-                [ 'IDENTIFIER',        'yy.ast.set({ expression: { type: "identifier", value: $1 } })' ],
-                [ 'SCRIPT_EXPRESSION', 'yy.ast.set({ expression: { type: "script_expression", value: $1 } })' ],
-                [ 'INTEGER',           'yy.ast.set({ expression: { type: "numeric_literal", value: parseInt($1) } })' ],
-                [ 'END',               '' ] ],
-
-        SUBSCRIPT_COMPONENT: [
-                [ 'CHILD_SUBSCRIPT_COMPONENT',      'yy.ast.set({ scope: "child" })' ],
-                [ 'DESCENDANT_SUBSCRIPT_COMPONENT', 'yy.ast.set({ scope: "descendant" })' ] ],
-
-        CHILD_SUBSCRIPT_COMPONENT: [
-                [ '[ SUBSCRIPT ]', '' ] ],
-
-        DESCENDANT_SUBSCRIPT_COMPONENT: [
-                [ 'DOT_DOT [ SUBSCRIPT ]', '' ] ],
-
-        SUBSCRIPT: [
-                [ 'SUBSCRIPT_EXPRESSION', '' ],
-                [ 'SUBSCRIPT_EXPRESSION_LIST', '$1.length > 1? yy.ast.set({ expression: { type: "union", value: $1 } }) : $$ = $1' ] ],
-
-        SUBSCRIPT_EXPRESSION_LIST: [
-                [ 'SUBSCRIPT_EXPRESSION_LISTABLE', '$$ = [$1]'],
-                [ 'SUBSCRIPT_EXPRESSION_LIST , SUBSCRIPT_EXPRESSION_LISTABLE', '$$ = $1.concat($3)' ] ],
-
-        SUBSCRIPT_EXPRESSION_LISTABLE: [
-                [ 'INTEGER',           '$$ = { expression: { type: "numeric_literal", value: parseInt($1) } }; yy.ast.set($$)' ],
-                [ 'STRING_LITERAL',    '$$ = { expression: { type: "string_literal", value: $1 } }; yy.ast.set($$)' ],
-                [ 'ARRAY_SLICE',       '$$ = { expression: { type: "slice", value: $1 } }; yy.ast.set($$)' ] ],
-
-        SUBSCRIPT_EXPRESSION: [
-                [ 'STAR',              '$$ = { expression: { type: "wildcard", value: $1 } }; yy.ast.set($$)' ],
-                [ 'SCRIPT_EXPRESSION', '$$ = { expression: { type: "script_expression", value: $1 } }; yy.ast.set($$)' ],
-                [ 'FILTER_EXPRESSION', '$$ = { expression: { type: "filter_expression", value: $1 } }; yy.ast.set($$)' ] ],
-
-        STRING_LITERAL: [
-                [ 'QQ_STRING', "$$ = $1" ],
-                [ 'Q_STRING',  "$$ = $1" ] ]
-    }
-};
-if (fs.readFileSync) {
-  grammar.moduleInclude = fs.readFileSync(require.resolve("../include/module.js"));
-  grammar.actionInclude = fs.readFileSync(require.resolve("../include/action.js"));
-}
-
-module.exports = grammar;
-
-},{"./dict":2,"fs":12}],4:[function(require,module,exports){
-var aesprim = require('./aesprim');
-var slice = require('./slice');
-var _evaluate = require('static-eval');
-var _uniq = require('underscore').uniq;
-
-var Handlers = function() {
-  return this.initialize.apply(this, arguments);
-}
-
-Handlers.prototype.initialize = function() {
-  this.traverse = traverser(true);
-  this.descend = traverser();
-}
-
-Handlers.prototype.keys = Object.keys;
-
-Handlers.prototype.resolve = function(component) {
-
-  var key = [ component.operation, component.scope, component.expression.type ].join('-');
-  var method = this._fns[key];
-
-  if (!method) throw new Error("couldn't resolve key: " + key);
-  return method.bind(this);
-};
-
-Handlers.prototype.register = function(key, handler) {
-
-  if (!handler instanceof Function) {
-    throw new Error("handler must be a function");
-  }
-
-  this._fns[key] = handler;
-};
-
-Handlers.prototype._fns = {
-
-  'member-child-identifier': function(component, partial) {
-    var key = component.expression.value;
-    var value = partial.value;
-    if (value instanceof Object && key in value) {
-      return [ { value: value[key], path: partial.path.concat(key) } ]
-    }
-  },
-
-  'member-descendant-identifier':
-    _traverse(function(key, value, ref) { return key == ref }),
-
-  'subscript-child-numeric_literal':
-    _descend(function(key, value, ref) { return key === ref }),
-
-  'member-child-numeric_literal':
-    _descend(function(key, value, ref) { return String(key) === String(ref) }),
-
-  'subscript-descendant-numeric_literal':
-    _traverse(function(key, value, ref) { return key === ref }),
-
-  'member-child-wildcard':
-    _descend(function() { return true }),
-
-  'member-descendant-wildcard':
-    _traverse(function() { return true }),
-
-  'subscript-descendant-wildcard':
-    _traverse(function() { return true }),
-
-  'subscript-child-wildcard':
-    _descend(function() { return true }),
-
-  'subscript-child-slice': function(component, partial) {
-    if (is_array(partial.value)) {
-      var args = component.expression.value.split(':').map(_parse_nullable_int);
-      var values = partial.value.map(function(v, i) { return { value: v, path: partial.path.concat(i) } });
-      return slice.apply(null, [values].concat(args));
-    }
-  },
-
-  'subscript-child-union': function(component, partial) {
-    var results = [];
-    component.expression.value.forEach(function(component) {
-      var _component = { operation: 'subscript', scope: 'child', expression: component.expression };
-      var handler = this.resolve(_component);
-      var _results = handler(_component, partial);
-      if (_results) {
-        results = results.concat(_results);
-      }
-    }, this);
-
-    return unique(results);
-  },
-
-  'subscript-descendant-union': function(component, partial, count) {
-
-    var jp = require('..');
-    var self = this;
-
-    var results = [];
-    var nodes = jp.nodes(partial, '$..*').slice(1);
-
-    nodes.forEach(function(node) {
-      if (results.length >= count) return;
-      component.expression.value.forEach(function(component) {
-        var _component = { operation: 'subscript', scope: 'child', expression: component.expression };
-        var handler = self.resolve(_component);
-        var _results = handler(_component, node);
-        results = results.concat(_results);
-      });
-    });
-
-    return unique(results);
-  },
-
-  'subscript-child-filter_expression': function(component, partial, count) {
-
-    // slice out the expression from ?(expression)
-    var src = component.expression.value.slice(2, -1);
-    var ast = aesprim.parse(src).body[0].expression;
-
-    var passable = function(key, value) {
-      return evaluate(ast, { '@': value });
-    }
-
-    return this.descend(partial, null, passable, count);
-
-  },
-
-  'subscript-descendant-filter_expression': function(component, partial, count) {
-
-    // slice out the expression from ?(expression)
-    var src = component.expression.value.slice(2, -1);
-    var ast = aesprim.parse(src).body[0].expression;
-
-    var passable = function(key, value) {
-      return evaluate(ast, { '@': value });
-    }
-
-    return this.traverse(partial, null, passable, count);
-  },
-
-  'subscript-child-script_expression': function(component, partial) {
-    var exp = component.expression.value.slice(1, -1);
-    return eval_recurse(partial, exp, '$[{{value}}]');
-  },
-
-  'member-child-script_expression': function(component, partial) {
-    var exp = component.expression.value.slice(1, -1);
-    return eval_recurse(partial, exp, '$.{{value}}');
-  },
-
-  'member-descendant-script_expression': function(component, partial) {
-    var exp = component.expression.value.slice(1, -1);
-    return eval_recurse(partial, exp, '$..value');
-  }
-};
-
-Handlers.prototype._fns['subscript-child-string_literal'] =
-	Handlers.prototype._fns['member-child-identifier'];
-
-Handlers.prototype._fns['member-descendant-numeric_literal'] =
-    Handlers.prototype._fns['subscript-descendant-string_literal'] =
-    Handlers.prototype._fns['member-descendant-identifier'];
-
-function eval_recurse(partial, src, template) {
-
-  var jp = require('./index');
-  var ast = aesprim.parse(src).body[0].expression;
-  var value = evaluate(ast, { '@': partial.value });
-  var path = template.replace(/\{\{\s*value\s*\}\}/g, value);
-
-  var results = jp.nodes(partial.value, path);
-  results.forEach(function(r) {
-    r.path = partial.path.concat(r.path.slice(1));
-  });
-
-  return results;
-}
-
-function is_array(val) {
-  return Array.isArray(val);
-}
-
-function is_object(val) {
-  // is this a non-array, non-null object?
-  return val && !(val instanceof Array) && val instanceof Object;
-}
-
-function traverser(recurse) {
-
-  return function(partial, ref, passable, count) {
-
-    var value = partial.value;
-    var path = partial.path;
-
-    var results = [];
-
-    var descend = function(value, path) {
-
-      if (is_array(value)) {
-        value.forEach(function(element, index) {
-          if (results.length >= count) { return }
-          if (passable(index, element, ref)) {
-            results.push({ path: path.concat(index), value: element });
-          }
-        });
-        value.forEach(function(element, index) {
-          if (results.length >= count) { return }
-          if (recurse) {
-            descend(element, path.concat(index));
-          }
-        });
-      } else if (is_object(value)) {
-        this.keys(value).forEach(function(k) {
-          if (results.length >= count) { return }
-          if (passable(k, value[k], ref)) {
-            results.push({ path: path.concat(k), value: value[k] });
-          }
-        })
-        this.keys(value).forEach(function(k) {
-          if (results.length >= count) { return }
-          if (recurse) {
-            descend(value[k], path.concat(k));
-          }
-        });
-      }
-    }.bind(this);
-    descend(value, path);
-    return results;
-  }
-}
-
-function _descend(passable) {
-  return function(component, partial, count) {
-    return this.descend(partial, component.expression.value, passable, count);
-  }
-}
-
-function _traverse(passable) {
-  return function(component, partial, count) {
-    return this.traverse(partial, component.expression.value, passable, count);
-  }
-}
-
-function evaluate() {
-  try { return _evaluate.apply(this, arguments) }
-  catch (e) { }
-}
-
-function unique(results) {
-  results = results.filter(function(d) { return d })
-  return _uniq(
-    results,
-    function(r) { return r.path.map(function(c) { return String(c).replace('-', '--') }).join('-') }
-  );
-}
-
-function _parse_nullable_int(val) {
-  var sval = String(val);
-  return sval.match(/^-?[0-9]+$/) ? parseInt(sval) : null;
-}
-
-module.exports = Handlers;
-
-},{"..":"jsonpath","./aesprim":"./aesprim","./index":5,"./slice":7,"static-eval":15,"underscore":12}],5:[function(require,module,exports){
-var assert = require('assert');
-var dict = require('./dict');
-var Parser = require('./parser');
-var Handlers = require('./handlers');
-
-var JSONPath = function() {
-  this.initialize.apply(this, arguments);
-};
-
-JSONPath.prototype.initialize = function() {
-  this.parser = new Parser();
-  this.handlers = new Handlers();
-};
-
-JSONPath.prototype.parse = function(string) {
-  assert.ok(_is_string(string), "we need a path");
-  return this.parser.parse(string);
-};
-
-JSONPath.prototype.parent = function(obj, string) {
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(string, "we need a path");
-
-  var node = this.nodes(obj, string)[0];
-  var key = node.path.pop(); /* jshint unused:false */
-  return this.value(obj, node.path);
-}
-
-JSONPath.prototype.apply = function(obj, string, fn) {
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(string, "we need a path");
-  assert.equal(typeof fn, "function", "fn needs to be function")
-
-  var nodes = this.nodes(obj, string).sort(function(a, b) {
-    // sort nodes so we apply from the bottom up
-    return b.path.length - a.path.length;
-  });
-
-  nodes.forEach(function(node) {
-    var key = node.path.pop();
-    var parent = this.value(obj, this.stringify(node.path));
-    var val = node.value = fn.call(obj, parent[key]);
-    parent[key] = val;
-  }, this);
-
-  return nodes;
-}
-
-JSONPath.prototype.value = function(obj, path, value) {
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(path, "we need a path");
-
-  if (arguments.length >= 3) {
-    var node = this.nodes(obj, path).shift();
-    if (!node) return this._vivify(obj, path, value);
-    var key = node.path.slice(-1).shift();
-    var parent = this.parent(obj, this.stringify(node.path));
-    parent[key] = value;
-  }
-  return this.query(obj, this.stringify(path), 1).shift();
-}
-
-JSONPath.prototype._vivify = function(obj, string, value) {
-
-  var self = this;
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(string, "we need a path");
-
-  var path = this.parser.parse(string)
-    .map(function(component) { return component.expression.value });
-
-  var setValue = function(path, value) {
-    var key = path.pop();
-    var node = self.value(obj, path);
-    if (!node) {
-      setValue(path.concat(), typeof key === 'string' ? {} : []);
-      node = self.value(obj, path);
-    }
-    node[key] = value;
-  }
-  setValue(path, value);
-  return this.query(obj, string)[0];
-}
-
-JSONPath.prototype.query = function(obj, string, count) {
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(_is_string(string), "we need a path");
-
-  var results = this.nodes(obj, string, count)
-    .map(function(r) { return r.value });
-
-  return results;
-};
-
-JSONPath.prototype.paths = function(obj, string, count) {
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(string, "we need a path");
-
-  var results = this.nodes(obj, string, count)
-    .map(function(r) { return r.path });
-
-  return results;
-};
-
-JSONPath.prototype.nodes = function(obj, string, count) {
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(string, "we need a path");
-
-  if (count === 0) return [];
-
-  var path = this.parser.parse(string);
-  var handlers = this.handlers;
-
-  var partials = [ { path: ['$'], value: obj } ];
-  var matches = [];
-
-  if (path.length && path[0].expression.type == 'root') path.shift();
-
-  if (!path.length) return partials;
-
-  path.forEach(function(component, index) {
-
-    if (matches.length >= count) return;
-    var handler = handlers.resolve(component);
-    var _partials = [];
-
-    partials.forEach(function(p) {
-
-      if (matches.length >= count) return;
-      var results = handler(component, p, count);
-
-      if (index == path.length - 1) {
-        // if we're through the components we're done
-        matches = matches.concat(results || []);
-      } else {
-        // otherwise accumulate and carry on through
-        _partials = _partials.concat(results || []);
-      }
-    });
-
-    partials = _partials;
-
-  });
-
-  return count ? matches.slice(0, count) : matches;
-};
-
-JSONPath.prototype.stringify = function(path) {
-
-  assert.ok(path, "we need a path");
-
-  var string = '$';
-
-  var templates = {
-    'descendant-member': '..{{value}}',
-    'child-member': '.{{value}}',
-    'descendant-subscript': '..[{{value}}]',
-    'child-subscript': '[{{value}}]'
-  };
-
-  path = this._normalize(path);
-
-  path.forEach(function(component) {
-
-    if (component.expression.type == 'root') return;
-
-    var key = [component.scope, component.operation].join('-');
-    var template = templates[key];
-    var value;
-
-    if (component.expression.type == 'string_literal') {
-      value = JSON.stringify(component.expression.value)
-    } else {
-      value = component.expression.value;
-    }
-
-    if (!template) throw new Error("couldn't find template " + key);
-
-    string += template.replace(/{{value}}/, value);
-  });
-
-  return string;
-}
-
-JSONPath.prototype._normalize = function(path) {
-
-  assert.ok(path, "we need a path");
-
-  if (typeof path == "string") {
-
-    return this.parser.parse(path);
-
-  } else if (Array.isArray(path) && typeof path[0] == "string") {
-
-    var _path = [ { expression: { type: "root", value: "$" } } ];
-
-    path.forEach(function(component, index) {
-
-      if (component == '$' && index === 0) return;
-
-      if (typeof component == "string" && component.match("^" + dict.identifier + "$")) {
-
-        _path.push({
-          operation: 'member',
-          scope: 'child',
-          expression: { value: component, type: 'identifier' }
-        });
-
-      } else {
-
-        var type = typeof component == "number" ?
-          'numeric_literal' : 'string_literal';
-
-        _path.push({
-          operation: 'subscript',
-          scope: 'child',
-          expression: { value: component, type: type }
-        });
-      }
-    });
-
-    return _path;
-
-  } else if (Array.isArray(path) && typeof path[0] == "object") {
-
-    return path
-  }
-
-  throw new Error("couldn't understand path " + path);
-}
-
-function _is_string(obj) {
-  return Object.prototype.toString.call(obj) == '[object String]';
-}
-
-JSONPath.Handlers = Handlers;
-JSONPath.Parser = Parser;
-
-var instance = new JSONPath;
-instance.JSONPath = JSONPath;
-
-module.exports = instance;
-
-},{"./dict":2,"./handlers":4,"./parser":6,"assert":8}],6:[function(require,module,exports){
-var grammar = require('./grammar');
-var gparser = require('../generated/parser');
-
-var Parser = function() {
-
-  var parser = new gparser.Parser();
-
-  var _parseError = parser.parseError;
-  parser.yy.parseError = function() {
-    if (parser.yy.ast) {
-      parser.yy.ast.initialize();
-    }
-    _parseError.apply(parser, arguments);
-  }
-
-  return parser;
-
-};
-
-Parser.grammar = grammar;
-module.exports = Parser;
-
-},{"../generated/parser":1,"./grammar":3}],7:[function(require,module,exports){
-module.exports = function(arr, start, end, step) {
-
-  if (typeof start == 'string') throw new Error("start cannot be a string");
-  if (typeof end == 'string') throw new Error("end cannot be a string");
-  if (typeof step == 'string') throw new Error("step cannot be a string");
-
-  var len = arr.length;
-
-  if (step === 0) throw new Error("step cannot be zero");
-  step = step ? integer(step) : 1;
-
-  // normalize negative values
-  start = start < 0 ? len + start : start;
-  end = end < 0 ? len + end : end;
-
-  // default extents to extents
-  start = integer(start === 0 ? 0 : !start ? (step > 0 ? 0 : len - 1) : start);
-  end = integer(end === 0 ? 0 : !end ? (step > 0 ? len : -1) : end);
-
-  // clamp extents
-  start = step > 0 ? Math.max(0, start) : Math.min(len, start);
-  end = step > 0 ? Math.min(end, len) : Math.max(-1, end);
-
-  // return empty if extents are backwards
-  if (step > 0 && end <= start) return [];
-  if (step < 0 && start <= end) return [];
-
-  var result = [];
-
-  for (var i = start; i != end; i += step) {
-    if ((step < 0 && i <= end) || (step > 0 && i >= end)) break;
-    result.push(arr[i]);
-  }
-
-  return result;
-}
-
-function integer(val) {
-  return String(val).match(/^[0-9]+$/) ? parseInt(val) :
-    Number.isFinite(val) ? parseInt(val, 10) : 0;
-}
-
-},{}],8:[function(require,module,exports){
-// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
-//
-// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
-//
-// Originally from narwhal.js (http://narwhaljs.org)
-// Copyright (c) 2009 Thomas Robinson <280north.com>
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the 'Software'), to
-// deal in the Software without restriction, including without limitation the
-// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-// sell copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
-// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-// when used in node, this will actually load the util module we depend on
-// versus loading the builtin util module as happens otherwise
-// this is a bug in node module loading as far as I am concerned
-var util = require('util/');
-
-var pSlice = Array.prototype.slice;
-var hasOwn = Object.prototype.hasOwnProperty;
-
-// 1. The assert module provides functions that throw
-// AssertionError's when particular conditions are not met. The
-// assert module must conform to the following interface.
-
-var assert = module.exports = ok;
-
-// 2. The AssertionError is defined in assert.
-// new assert.AssertionError({ message: message,
-//                             actual: actual,
-//                             expected: expected })
-
-assert.AssertionError = function AssertionError(options) {
-  this.name = 'AssertionError';
-  this.actual = options.actual;
-  this.expected = options.expected;
-  this.operator = options.operator;
-  if (options.message) {
-    this.message = options.message;
-    this.generatedMessage = false;
-  } else {
-    this.message = getMessage(this);
-    this.generatedMessage = true;
-  }
-  var stackStartFunction = options.stackStartFunction || fail;
-
-  if (Error.captureStackTrace) {
-    Error.captureStackTrace(this, stackStartFunction);
-  }
-  else {
-    // non v8 browsers so we can have a stacktrace
-    var err = new Error();
-    if (err.stack) {
-      var out = err.stack;
-
-      // try to strip useless frames
-      var fn_name = stackStartFunction.name;
-      var idx = out.indexOf('\n' + fn_name);
-      if (idx >= 0) {
-        // once we have located the function frame
-        // we need to strip out everything before it (and its line)
-        var next_line = out.indexOf('\n', idx + 1);
-        out = out.substring(next_line + 1);
-      }
-
-      this.stack = out;
-    }
-  }
-};
-
-// assert.AssertionError instanceof Error
-util.inherits(assert.AssertionError, Error);
-
-function replacer(key, value) {
-  if (util.isUndefined(value)) {
-    return '' + value;
-  }
-  if (util.isNumber(value) && !isFinite(value)) {
-    return value.toString();
-  }
-  if (util.isFunction(value) || util.isRegExp(value)) {
-    return value.toString();
-  }
-  return value;
-}
-
-function truncate(s, n) {
-  if (util.isString(s)) {
-    return s.length < n ? s : s.slice(0, n);
-  } else {
-    return s;
-  }
-}
-
-function getMessage(self) {
-  return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
-         self.operator + ' ' +
-         truncate(JSON.stringify(self.expected, replacer), 128);
-}
-
-// At present only the three keys mentioned above are used and
-// understood by the spec. Implementations or sub modules can pass
-// other keys to the AssertionError's constructor - they will be
-// ignored.
-
-// 3. All of the following functions must throw an AssertionError
-// when a corresponding condition is not met, with a message that
-// may be undefined if not provided.  All assertion methods provide
-// both the actual and expected values to the assertion error for
-// display purposes.
-
-function fail(actual, expected, message, operator, stackStartFunction) {
-  throw new assert.AssertionError({
-    message: message,
-    actual: actual,
-    expected: expected,
-    operator: operator,
-    stackStartFunction: stackStartFunction
-  });
-}
-
-// EXTENSION! allows for well behaved errors defined elsewhere.
-assert.fail = fail;
-
-// 4. Pure assertion tests whether a value is truthy, as determined
-// by !!guard.
-// assert.ok(guard, message_opt);
-// This statement is equivalent to assert.equal(true, !!guard,
-// message_opt);. To test strictly for the value true, use
-// assert.strictEqual(true, guard, message_opt);.
-
-function ok(value, message) {
-  if (!value) fail(value, true, message, '==', assert.ok);
-}
-assert.ok = ok;
-
-// 5. The equality assertion tests shallow, coercive equality with
-// ==.
-// assert.equal(actual, expected, message_opt);
-
-assert.equal = function equal(actual, expected, message) {
-  if (actual != expected) fail(actual, expected, message, '==', assert.equal);
-};
-
-// 6. The non-equality assertion tests for whether two objects are not equal
-// with != assert.notEqual(actual, expected, message_opt);
-
-assert.notEqual = function notEqual(actual, expected, message) {
-  if (actual == expected) {
-    fail(actual, expected, message, '!=', assert.notEqual);
-  }
-};
-
-// 7. The equivalence assertion tests a deep equality relation.
-// assert.deepEqual(actual, expected, message_opt);
-
-assert.deepEqual = function deepEqual(actual, expected, message) {
-  if (!_deepEqual(actual, expected)) {
-    fail(actual, expected, message, 'deepEqual', assert.deepEqual);
-  }
-};
-
-function _deepEqual(actual, expected) {
-  // 7.1. All identical values are equivalent, as determined by ===.
-  if (actual === expected) {
-    return true;
-
-  } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
-    if (actual.length != expected.length) return false;
-
-    for (var i = 0; i < actual.length; i++) {
-      if (actual[i] !== expected[i]) return false;
-    }
-
-    return true;
-
-  // 7.2. If the expected value is a Date object, the actual value is
-  // equivalent if it is also a Date object that refers to the same time.
-  } else if (util.isDate(actual) && util.isDate(expected)) {
-    return actual.getTime() === expected.getTime();
-
-  // 7.3 If the expected value is a RegExp object, the actual value is
-  // equivalent if it is also a RegExp object with the same source and
-  // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
-  } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
-    return actual.source === expected.source &&
-           actual.global === expected.global &&
-           actual.multiline === expected.multiline &&
-           actual.lastIndex === expected.lastIndex &&
-           actual.ignoreCase === expected.ignoreCase;
-
-  // 7.4. Other pairs that do not both pass typeof value == 'object',
-  // equivalence is determined by ==.
-  } else if (!util.isObject(actual) && !util.isObject(expected)) {
-    return actual == expected;
-
-  // 7.5 For all other Object pairs, including Array objects, equivalence is
-  // determined by having the same number of owned properties (as verified
-  // with Object.prototype.hasOwnProperty.call), the same set of keys
-  // (although not necessarily the same order), equivalent values for every
-  // corresponding key, and an identical 'prototype' property. Note: this
-  // accounts for both named and indexed properties on Arrays.
-  } else {
-    return objEquiv(actual, expected);
-  }
-}
-
-function isArguments(object) {
-  return Object.prototype.toString.call(object) == '[object Arguments]';
-}
-
-function objEquiv(a, b) {
-  if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
-    return false;
-  // an identical 'prototype' property.
-  if (a.prototype !== b.prototype) return false;
-  // if one is a primitive, the other must be same
-  if (util.isPrimitive(a) || util.isPrimitive(b)) {
-    return a === b;
-  }
-  var aIsArgs = isArguments(a),
-      bIsArgs = isArguments(b);
-  if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
-    return false;
-  if (aIsArgs) {
-    a = pSlice.call(a);
-    b = pSlice.call(b);
-    return _deepEqual(a, b);
-  }
-  var ka = objectKeys(a),
-      kb = objectKeys(b),
-      key, i;
-  // having the same number of owned properties (keys incorporates
-  // hasOwnProperty)
-  if (ka.length != kb.length)
-    return false;
-  //the same set of keys (although not necessarily the same order),
-  ka.sort();
-  kb.sort();
-  //~~~cheap key test
-  for (i = ka.length - 1; i >= 0; i--) {
-    if (ka[i] != kb[i])
-      return false;
-  }
-  //equivalent values for every corresponding key, and
-  //~~~possibly expensive deep test
-  for (i = ka.length - 1; i >= 0; i--) {
-    key = ka[i];
-    if (!_deepEqual(a[key], b[key])) return false;
-  }
-  return true;
-}
-
-// 8. The non-equivalence assertion tests for any deep inequality.
-// assert.notDeepEqual(actual, expected, message_opt);
-
-assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
-  if (_deepEqual(actual, expected)) {
-    fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
-  }
-};
-
-// 9. The strict equality assertion tests strict equality, as determined by ===.
-// assert.strictEqual(actual, expected, message_opt);
-
-assert.strictEqual = function strictEqual(actual, expected, message) {
-  if (actual !== expected) {
-    fail(actual, expected, message, '===', assert.strictEqual);
-  }
-};
-
-// 10. The strict non-equality assertion tests for strict inequality, as
-// determined by !==.  assert.notStrictEqual(actual, expected, message_opt);
-
-assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
-  if (actual === expected) {
-    fail(actual, expected, message, '!==', assert.notStrictEqual);
-  }
-};
-
-function expectedException(actual, expected) {
-  if (!actual || !expected) {
-    return false;
-  }
-
-  if (Object.prototype.toString.call(expected) == '[object RegExp]') {
-    return expected.test(actual);
-  } else if (actual instanceof expected) {
-    return true;
-  } else if (expected.call({}, actual) === true) {
-    return true;
-  }
-
-  return false;
-}
-
-function _throws(shouldThrow, block, expected, message) {
-  var actual;
-
-  if (util.isString(expected)) {
-    message = expected;
-    expected = null;
-  }
-
-  try {
-    block();
-  } catch (e) {
-    actual = e;
-  }
-
-  message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
-            (message ? ' ' + message : '.');
-
-  if (shouldThrow && !actual) {
-    fail(actual, expected, 'Missing expected exception' + message);
-  }
-
-  if (!shouldThrow && expectedException(actual, expected)) {
-    fail(actual, expected, 'Got unwanted exception' + message);
-  }
-
-  if ((shouldThrow && actual && expected &&
-      !expectedException(actual, expected)) || (!shouldThrow && actual)) {
-    throw actual;
-  }
-}
-
-// 11. Expected to throw an error:
-// assert.throws(block, Error_opt, message_opt);
-
-assert.throws = function(block, /*optional*/error, /*optional*/message) {
-  _throws.apply(this, [true].concat(pSlice.call(arguments)));
-};
-
-// EXTENSION! This is annoying to write outside this module.
-assert.doesNotThrow = function(block, /*optional*/message) {
-  _throws.apply(this, [false].concat(pSlice.call(arguments)));
-};
-
-assert.ifError = function(err) { if (err) {throw err;}};
-
-var objectKeys = Object.keys || function (obj) {
-  var keys = [];
-  for (var key in obj) {
-    if (hasOwn.call(obj, key)) keys.push(key);
-  }
-  return keys;
-};
-
-},{"util/":11}],9:[function(require,module,exports){
-if (typeof Object.create === 'function') {
-  // implementation from standard node.js 'util' module
-  module.exports = function inherits(ctor, superCtor) {
-    ctor.super_ = superCtor
-    ctor.prototype = Object.create(superCtor.prototype, {
-      constructor: {
-        value: ctor,
-        enumerable: false,
-        writable: true,
-        configurable: true
-      }
-    });
-  };
-} else {
-  // old school shim for old browsers
-  module.exports = function inherits(ctor, superCtor) {
-    ctor.super_ = superCtor
-    var TempCtor = function () {}
-    TempCtor.prototype = superCtor.prototype
-    ctor.prototype = new TempCtor()
-    ctor.prototype.constructor = ctor
-  }
-}
-
-},{}],10:[function(require,module,exports){
-module.exports = function isBuffer(arg) {
-  return arg && typeof arg === 'object'
-    && typeof arg.copy === 'function'
-    && typeof arg.fill === 'function'
-    && typeof arg.readUInt8 === 'function';
-}
-},{}],11:[function(require,module,exports){
-(function (process,global){
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-var formatRegExp = /%[sdj%]/g;
-exports.format = function(f) {
-  if (!isString(f)) {
-    var objects = [];
-    for (var i = 0; i < arguments.length; i++) {
-      objects.push(inspect(arguments[i]));
-    }
-    return objects.join(' ');
-  }
-
-  var i = 1;
-  var args = arguments;
-  var len = args.length;
-  var str = String(f).replace(formatRegExp, function(x) {
-    if (x === '%%') return '%';
-    if (i >= len) return x;
-    switch (x) {
-      case '%s': return String(args[i++]);
-      case '%d': return Number(args[i++]);
-      case '%j':
-        try {
-          return JSON.stringify(args[i++]);
-        } catch (_) {
-          return '[Circular]';
-        }
-      default:
-        return x;
-    }
-  });
-  for (var x = args[i]; i < len; x = args[++i]) {
-    if (isNull(x) || !isObject(x)) {
-      str += ' ' + x;
-    } else {
-      str += ' ' + inspect(x);
-    }
-  }
-  return str;
-};
-
-
-// Mark that a method should not be used.
-// Returns a modified function which warns once by default.
-// If --no-deprecation is set, then it is a no-op.
-exports.deprecate = function(fn, msg) {
-  // Allow for deprecating things in the process of starting up.
-  if (isUndefined(global.process)) {
-    return function() {
-      return exports.deprecate(fn, msg).apply(this, arguments);
-    };
-  }
-
-  if (process.noDeprecation === true) {
-    return fn;
-  }
-
-  var warned = false;
-  function deprecated() {
-    if (!warned) {
-      if (process.throwDeprecation) {
-        throw new Error(msg);
-      } else if (process.traceDeprecation) {
-        console.trace(msg);
-      } else {
-        console.error(msg);
-      }
-      warned = true;
-    }
-    return fn.apply(this, arguments);
-  }
-
-  return deprecated;
-};
-
-
-var debugs = {};
-var debugEnviron;
-exports.debuglog = function(set) {
-  if (isUndefined(debugEnviron))
-    debugEnviron = process.env.NODE_DEBUG || '';
-  set = set.toUpperCase();
-  if (!debugs[set]) {
-    if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
-      var pid = process.pid;
-      debugs[set] = function() {
-        var msg = exports.format.apply(exports, arguments);
-        console.error('%s %d: %s', set, pid, msg);
-      };
-    } else {
-      debugs[set] = function() {};
-    }
-  }
-  return debugs[set];
-};
-
-
-/**
- * Echos the value of a value. Trys to print the value out
- * in the best way possible given the different types.
- *
- * @param {Object} obj The object to print out.
- * @param {Object} opts Optional options object that alters the output.
- */
-/* legacy: obj, showHidden, depth, colors*/
-function inspect(obj, opts) {
-  // default options
-  var ctx = {
-    seen: [],
-    stylize: stylizeNoColor
-  };
-  // legacy...
-  if (arguments.length >= 3) ctx.depth = arguments[2];
-  if (arguments.length >= 4) ctx.colors = arguments[3];
-  if (isBoolean(opts)) {
-    // legacy...
-    ctx.showHidden = opts;
-  } else if (opts) {
-    // got an "options" object
-    exports._extend(ctx, opts);
-  }
-  // set default options
-  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
-  if (isUndefined(ctx.depth)) ctx.depth = 2;
-  if (isUndefined(ctx.colors)) ctx.colors = false;
-  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
-  if (ctx.colors) ctx.stylize = stylizeWithColor;
-  return formatValue(ctx, obj, ctx.depth);
-}
-exports.inspect = inspect;
-
-
-// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
-inspect.colors = {
-  'bold' : [1, 22],
-  'italic' : [3, 23],
-  'underline' : [4, 24],
-  'inverse' : [7, 27],
-  'white' : [37, 39],
-  'grey' : [90, 39],
-  'black' : [30, 39],
-  'blue' : [34, 39],
-  'cyan' : [36, 39],
-  'green' : [32, 39],
-  'magenta' : [35, 39],
-  'red' : [31, 39],
-  'yellow' : [33, 39]
-};
-
-// Don't use 'blue' not visible on cmd.exe
-inspect.styles = {
-  'special': 'cyan',
-  'number': 'yellow',
-  'boolean': 'yellow',
-  'undefined': 'grey',
-  'null': 'bold',
-  'string': 'green',
-  'date': 'magenta',
-  // "name": intentionally not styling
-  'regexp': 'red'
-};
-
-
-function stylizeWithColor(str, styleType) {
-  var style = inspect.styles[styleType];
-
-  if (style) {
-    return '\u001b[' + inspect.colors[style][0] + 'm' + str +
-           '\u001b[' + inspect.colors[style][1] + 'm';
-  } else {
-    return str;
-  }
-}
-
-
-function stylizeNoColor(str, styleType) {
-  return str;
-}
-
-
-function arrayToHash(array) {
-  var hash = {};
-
-  array.forEach(function(val, idx) {
-    hash[val] = true;
-  });
-
-  return hash;
-}
-
-
-function formatValue(ctx, value, recurseTimes) {
-  // Provide a hook for user-specified inspect functions.
-  // Check that value is an object with an inspect function on it
-  if (ctx.customInspect &&
-      value &&
-      isFunction(value.inspect) &&
-      // Filter out the util module, it's inspect function is special
-      value.inspect !== exports.inspect &&
-      // Also filter out any prototype objects using the circular check.
-      !(value.constructor && value.constructor.prototype === value)) {
-    var ret = value.inspect(recurseTimes, ctx);
-    if (!isString(ret)) {
-      ret = formatValue(ctx, ret, recurseTimes);
-    }
-    return ret;
-  }
-
-  // Primitive types cannot have properties
-  var primitive = formatPrimitive(ctx, value);
-  if (primitive) {
-    return primitive;
-  }
-
-  // Look up the keys of the object.
-  var keys = Object.keys(value);
-  var visibleKeys = arrayToHash(keys);
-
-  if (ctx.showHidden) {
-    keys = Object.getOwnPropertyNames(value);
-  }
-
-  // IE doesn't make error fields non-enumerable
-  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
-  if (isError(value)
-      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
-    return formatError(value);
-  }
-
-  // Some type of object without properties can be shortcutted.
-  if (keys.length === 0) {
-    if (isFunction(value)) {
-      var name = value.name ? ': ' + value.name : '';
-      return ctx.stylize('[Function' + name + ']', 'special');
-    }
-    if (isRegExp(value)) {
-      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
-    }
-    if (isDate(value)) {
-      return ctx.stylize(Date.prototype.toString.call(value), 'date');
-    }
-    if (isError(value)) {
-      return formatError(value);
-    }
-  }
-
-  var base = '', array = false, braces = ['{', '}'];
-
-  // Make Array say that they are Array
-  if (isArray(value)) {
-    array = true;
-    braces = ['[', ']'];
-  }
-
-  // Make functions say that they are functions
-  if (isFunction(value)) {
-    var n = value.name ? ': ' + value.name : '';
-    base = ' [Function' + n + ']';
-  }
-
-  // Make RegExps say that they are RegExps
-  if (isRegExp(value)) {
-    base = ' ' + RegExp.prototype.toString.call(value);
-  }
-
-  // Make dates with properties first say the date
-  if (isDate(value)) {
-    base = ' ' + Date.prototype.toUTCString.call(value);
-  }
-
-  // Make error with message first say the error
-  if (isError(value)) {
-    base = ' ' + formatError(value);
-  }
-
-  if (keys.length === 0 && (!array || value.length == 0)) {
-    return braces[0] + base + braces[1];
-  }
-
-  if (recurseTimes < 0) {
-    if (isRegExp(value)) {
-      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
-    } else {
-      return ctx.stylize('[Object]', 'special');
-    }
-  }
-
-  ctx.seen.push(value);
-
-  var output;
-  if (array) {
-    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
-  } else {
-    output = keys.map(function(key) {
-      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
-    });
-  }
-
-  ctx.seen.pop();
-
-  return reduceToSingleString(output, base, braces);
-}
-
-
-function formatPrimitive(ctx, value) {
-  if (isUndefined(value))
-    return ctx.stylize('undefined', 'undefined');
-  if (isString(value)) {
-    var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
-                                             .replace(/'/g, "\\'")
-                                             .replace(/\\"/g, '"') + '\'';
-    return ctx.stylize(simple, 'string');
-  }
-  if (isNumber(value))
-    return ctx.stylize('' + value, 'number');
-  if (isBoolean(value))
-    return ctx.stylize('' + value, 'boolean');
-  // For some reason typeof null is "object", so special case here.
-  if (isNull(value))
-    return ctx.stylize('null', 'null');
-}
-
-
-function formatError(value) {
-  return '[' + Error.prototype.toString.call(value) + ']';
-}
-
-
-function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
-  var output = [];
-  for (var i = 0, l = value.length; i < l; ++i) {
-    if (hasOwnProperty(value, String(i))) {
-      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
-          String(i), true));
-    } else {
-      output.push('');
-    }
-  }
-  keys.forEach(function(key) {
-    if (!key.match(/^\d+$/)) {
-      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
-          key, true));
-    }
-  });
-  return output;
-}
-
-
-function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
-  var name, str, desc;
-  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
-  if (desc.get) {
-    if (desc.set) {
-      str = ctx.stylize('[Getter/Setter]', 'special');
-    } else {
-      str = ctx.stylize('[Getter]', 'special');
-    }
-  } else {
-    if (desc.set) {
-      str = ctx.stylize('[Setter]', 'special');
-    }
-  }
-  if (!hasOwnProperty(visibleKeys, key)) {
-    name = '[' + key + ']';
-  }
-  if (!str) {
-    if (ctx.seen.indexOf(desc.value) < 0) {
-      if (isNull(recurseTimes)) {
-        str = formatValue(ctx, desc.value, null);
-      } else {
-        str = formatValue(ctx, desc.value, recurseTimes - 1);
-      }
-      if (str.indexOf('\n') > -1) {
-        if (array) {
-          str = str.split('\n').map(function(line) {
-            return '  ' + line;
-          }).join('\n').substr(2);
-        } else {
-          str = '\n' + str.split('\n').map(function(line) {
-            return '   ' + line;
-          }).join('\n');
-        }
-      }
-    } else {
-      str = ctx.stylize('[Circular]', 'special');
-    }
-  }
-  if (isUndefined(name)) {
-    if (array && key.match(/^\d+$/)) {
-      return str;
-    }
-    name = JSON.stringify('' + key);
-    if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
-      name = name.substr(1, name.length - 2);
-      name = ctx.stylize(name, 'name');
-    } else {
-      name = name.replace(/'/g, "\\'")
-                 .replace(/\\"/g, '"')
-                 .replace(/(^"|"$)/g, "'");
-      name = ctx.stylize(name, 'string');
-    }
-  }
-
-  return name + ': ' + str;
-}
-
-
-function reduceToSingleString(output, base, braces) {
-  var numLinesEst = 0;
-  var length = output.reduce(function(prev, cur) {
-    numLinesEst++;
-    if (cur.indexOf('\n') >= 0) numLinesEst++;
-    return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
-  }, 0);
-
-  if (length > 60) {
-    return braces[0] +
-           (base === '' ? '' : base + '\n ') +
-           ' ' +
-           output.join(',\n  ') +
-           ' ' +
-           braces[1];
-  }
-
-  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
-}
-
-
-// NOTE: These type checking functions intentionally don't use `instanceof`
-// because it is fragile and can be easily faked with `Object.create()`.
-function isArray(ar) {
-  return Array.isArray(ar);
-}
-exports.isArray = isArray;
-
-function isBoolean(arg) {
-  return typeof arg === 'boolean';
-}
-exports.isBoolean = isBoolean;
-
-function isNull(arg) {
-  return arg === null;
-}
-exports.isNull = isNull;
-
-function isNullOrUndefined(arg) {
-  return arg == null;
-}
-exports.isNullOrUndefined = isNullOrUndefined;
-
-function isNumber(arg) {
-  return typeof arg === 'number';
-}
-exports.isNumber = isNumber;
-
-function isString(arg) {
-  return typeof arg === 'string';
-}
-exports.isString = isString;
-
-function isSymbol(arg) {
-  return typeof arg === 'symbol';
-}
-exports.isSymbol = isSymbol;
-
-function isUndefined(arg) {
-  return arg === void 0;
-}
-exports.isUndefined = isUndefined;
-
-function isRegExp(re) {
-  return isObject(re) && objectToString(re) === '[object RegExp]';
-}
-exports.isRegExp = isRegExp;
-
-function isObject(arg) {
-  return typeof arg === 'object' && arg !== null;
-}
-exports.isObject = isObject;
-
-function isDate(d) {
-  return isObject(d) && objectToString(d) === '[object Date]';
-}
-exports.isDate = isDate;
-
-function isError(e) {
-  return isObject(e) &&
-      (objectToString(e) === '[object Error]' || e instanceof Error);
-}
-exports.isError = isError;
-
-function isFunction(arg) {
-  return typeof arg === 'function';
-}
-exports.isFunction = isFunction;
-
-function isPrimitive(arg) {
-  return arg === null ||
-         typeof arg === 'boolean' ||
-         typeof arg === 'number' ||
-         typeof arg === 'string' ||
-         typeof arg === 'symbol' ||  // ES6 symbol
-         typeof arg === 'undefined';
-}
-exports.isPrimitive = isPrimitive;
-
-exports.isBuffer = require('./support/isBuffer');
-
-function objectToString(o) {
-  return Object.prototype.toString.call(o);
-}
-
-
-function pad(n) {
-  return n < 10 ? '0' + n.toString(10) : n.toString(10);
-}
-
-
-var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
-              'Oct', 'Nov', 'Dec'];
-
-// 26 Feb 16:19:34
-function timestamp() {
-  var d = new Date();
-  var time = [pad(d.getHours()),
-              pad(d.getMinutes()),
-              pad(d.getSeconds())].join(':');
-  return [d.getDate(), months[d.getMonth()], time].join(' ');
-}
-
-
-// log is just a thin wrapper to console.log that prepends a timestamp
-exports.log = function() {
-  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
-};
-
-
-/**
- * Inherit the prototype methods from one constructor into another.
- *
- * The Function.prototype.inherits from lang.js rewritten as a standalone
- * function (not on Function.prototype). NOTE: If this file is to be loaded
- * during bootstrapping this function needs to be rewritten using some native
- * functions as prototype setup using normal JavaScript does not work as
- * expected during bootstrapping (see mirror.js in r114903).
- *
- * @param {function} ctor Constructor function which needs to inherit the
- *     prototype.
- * @param {function} superCtor Constructor function to inherit prototype from.
- */
-exports.inherits = require('inherits');
-
-exports._extend = function(origin, add) {
-  // Don't do anything if add isn't an object
-  if (!add || !isObject(add)) return origin;
-
-  var keys = Object.keys(add);
-  var i = keys.length;
-  while (i--) {
-    origin[keys[i]] = add[keys[i]];
-  }
-  return origin;
-};
-
-function hasOwnProperty(obj, prop) {
-  return Object.prototype.hasOwnProperty.call(obj, prop);
-}
-
-}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
-},{"./support/isBuffer":10,"_process":14,"inherits":9}],12:[function(require,module,exports){
-
-},{}],13:[function(require,module,exports){
-(function (process){
-// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,
-// backported and transplited with Babel, with backwards-compat fixes
-
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-// resolves . and .. elements in a path array with directory names there
-// must be no slashes, empty elements, or device names (c:\) in the array
-// (so also no leading and trailing slashes - it does not distinguish
-// relative and absolute paths)
-function normalizeArray(parts, allowAboveRoot) {
-  // if the path tries to go above the root, `up` ends up > 0
-  var up = 0;
-  for (var i = parts.length - 1; i >= 0; i--) {
-    var last = parts[i];
-    if (last === '.') {
-      parts.splice(i, 1);
-    } else if (last === '..') {
-      parts.splice(i, 1);
-      up++;
-    } else if (up) {
-      parts.splice(i, 1);
-      up--;
-    }
-  }
-
-  // if the path is allowed to go above the root, restore leading ..s
-  if (allowAboveRoot) {
-    for (; up--; up) {
-      parts.unshift('..');
-    }
-  }
-
-  return parts;
-}
-
-// path.resolve([from ...], to)
-// posix version
-exports.resolve = function() {
-  var resolvedPath = '',
-      resolvedAbsolute = false;
-
-  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
-    var path = (i >= 0) ? arguments[i] : process.cwd();
-
-    // Skip empty and invalid entries
-    if (typeof path !== 'string') {
-      throw new TypeError('Arguments to path.resolve must be strings');
-    } else if (!path) {
-      continue;
-    }
-
-    resolvedPath = path + '/' + resolvedPath;
-    resolvedAbsolute = path.charAt(0) === '/';
-  }
-
-  // At this point the path should be resolved to a full absolute path, but
-  // handle relative paths to be safe (might happen when process.cwd() fails)
-
-  // Normalize the path
-  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
-    return !!p;
-  }), !resolvedAbsolute).join('/');
-
-  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
-};
-
-// path.normalize(path)
-// posix version
-exports.normalize = function(path) {
-  var isAbsolute = exports.isAbsolute(path),
-      trailingSlash = substr(path, -1) === '/';
-
-  // Normalize the path
-  path = normalizeArray(filter(path.split('/'), function(p) {
-    return !!p;
-  }), !isAbsolute).join('/');
-
-  if (!path && !isAbsolute) {
-    path = '.';
-  }
-  if (path && trailingSlash) {
-    path += '/';
-  }
-
-  return (isAbsolute ? '/' : '') + path;
-};
-
-// posix version
-exports.isAbsolute = function(path) {
-  return path.charAt(0) === '/';
-};
-
-// posix version
-exports.join = function() {
-  var paths = Array.prototype.slice.call(arguments, 0);
-  return exports.normalize(filter(paths, function(p, index) {
-    if (typeof p !== 'string') {
-      throw new TypeError('Arguments to path.join must be strings');
-    }
-    return p;
-  }).join('/'));
-};
-
-
-// path.relative(from, to)
-// posix version
-exports.relative = function(from, to) {
-  from = exports.resolve(from).substr(1);
-  to = exports.resolve(to).substr(1);
-
-  function trim(arr) {
-    var start = 0;
-    for (; start < arr.length; start++) {
-      if (arr[start] !== '') break;
-    }
-
-    var end = arr.length - 1;
-    for (; end >= 0; end--) {
-      if (arr[end] !== '') break;
-    }
-
-    if (start > end) return [];
-    return arr.slice(start, end - start + 1);
-  }
-
-  var fromParts = trim(from.split('/'));
-  var toParts = trim(to.split('/'));
-
-  var length = Math.min(fromParts.length, toParts.length);
-  var samePartsLength = length;
-  for (var i = 0; i < length; i++) {
-    if (fromParts[i] !== toParts[i]) {
-      samePartsLength = i;
-      break;
-    }
-  }
-
-  var outputParts = [];
-  for (var i = samePartsLength; i < fromParts.length; i++) {
-    outputParts.push('..');
-  }
-
-  outputParts = outputParts.concat(toParts.slice(samePartsLength));
-
-  return outputParts.join('/');
-};
-
-exports.sep = '/';
-exports.delimiter = ':';
-
-exports.dirname = function (path) {
-  if (typeof path !== 'string') path = path + '';
-  if (path.length === 0) return '.';
-  var code = path.charCodeAt(0);
-  var hasRoot = code === 47 /*/*/;
-  var end = -1;
-  var matchedSlash = true;
-  for (var i = path.length - 1; i >= 1; --i) {
-    code = path.charCodeAt(i);
-    if (code === 47 /*/*/) {
-        if (!matchedSlash) {
-          end = i;
-          break;
-        }
-      } else {
-      // We saw the first non-path separator
-      matchedSlash = false;
-    }
-  }
-
-  if (end === -1) return hasRoot ? '/' : '.';
-  if (hasRoot && end === 1) {
-    // return '//';
-    // Backwards-compat fix:
-    return '/';
-  }
-  return path.slice(0, end);
-};
-
-function basename(path) {
-  if (typeof path !== 'string') path = path + '';
-
-  var start = 0;
-  var end = -1;
-  var matchedSlash = true;
-  var i;
-
-  for (i = path.length - 1; i >= 0; --i) {
-    if (path.charCodeAt(i) === 47 /*/*/) {
-        // If we reached a path separator that was not part of a set of path
-        // separators at the end of the string, stop now
-        if (!matchedSlash) {
-          start = i + 1;
-          break;
-        }
-      } else if (end === -1) {
-      // We saw the first non-path separator, mark this as the end of our
-      // path component
-      matchedSlash = false;
-      end = i + 1;
-    }
-  }
-
-  if (end === -1) return '';
-  return path.slice(start, end);
-}
-
-// Uses a mixed approach for backwards-compatibility, as ext behavior changed
-// in new Node.js versions, so only basename() above is backported here
-exports.basename = function (path, ext) {
-  var f = basename(path);
-  if (ext && f.substr(-1 * ext.length) === ext) {
-    f = f.substr(0, f.length - ext.length);
-  }
-  return f;
-};
-
-exports.extname = function (path) {
-  if (typeof path !== 'string') path = path + '';
-  var startDot = -1;
-  var startPart = 0;
-  var end = -1;
-  var matchedSlash = true;
-  // Track the state of characters (if any) we see before our first dot and
-  // after any path separator we find
-  var preDotState = 0;
-  for (var i = path.length - 1; i >= 0; --i) {
-    var code = path.charCodeAt(i);
-    if (code === 47 /*/*/) {
-        // If we reached a path separator that was not part of a set of path
-        // separators at the end of the string, stop now
-        if (!matchedSlash) {
-          startPart = i + 1;
-          break;
-        }
-        continue;
-      }
-    if (end === -1) {
-      // We saw the first non-path separator, mark this as the end of our
-      // extension
-      matchedSlash = false;
-      end = i + 1;
-    }
-    if (code === 46 /*.*/) {
-        // If this is our first dot, mark it as the start of our extension
-        if (startDot === -1)
-          startDot = i;
-        else if (preDotState !== 1)
-          preDotState = 1;
-    } else if (startDot !== -1) {
-      // We saw a non-dot and non-path separator before our dot, so we should
-      // have a good chance at having a non-empty extension
-      preDotState = -1;
-    }
-  }
-
-  if (startDot === -1 || end === -1 ||
-      // We saw a non-dot character immediately before the dot
-      preDotState === 0 ||
-      // The (right-most) trimmed path component is exactly '..'
-      preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
-    return '';
-  }
-  return path.slice(startDot, end);
-};
-
-function filter (xs, f) {
-    if (xs.filter) return xs.filter(f);
-    var res = [];
-    for (var i = 0; i < xs.length; i++) {
-        if (f(xs[i], i, xs)) res.push(xs[i]);
-    }
-    return res;
-}
-
-// String.prototype.substr - negative index don't work in IE8
-var substr = 'ab'.substr(-1) === 'b'
-    ? function (str, start, len) { return str.substr(start, len) }
-    : function (str, start, len) {
-        if (start < 0) start = str.length + start;
-        return str.substr(start, len);
-    }
-;
-
-}).call(this,require('_process'))
-},{"_process":14}],14:[function(require,module,exports){
-// shim for using process in browser
-var process = module.exports = {};
-
-// cached from whatever global is present so that test runners that stub it
-// don't break things.  But we need to wrap it in a try catch in case it is
-// wrapped in strict mode code which doesn't define any globals.  It's inside a
-// function because try/catches deoptimize in certain engines.
-
-var cachedSetTimeout;
-var cachedClearTimeout;
-
-function defaultSetTimout() {
-    throw new Error('setTimeout has not been defined');
-}
-function defaultClearTimeout () {
-    throw new Error('clearTimeout has not been defined');
-}
-(function () {
-    try {
-        if (typeof setTimeout === 'function') {
-            cachedSetTimeout = setTimeout;
-        } else {
-            cachedSetTimeout = defaultSetTimout;
-        }
-    } catch (e) {
-        cachedSetTimeout = defaultSetTimout;
-    }
-    try {
-        if (typeof clearTimeout === 'function') {
-            cachedClearTimeout = clearTimeout;
-        } else {
-            cachedClearTimeout = defaultClearTimeout;
-        }
-    } catch (e) {
-        cachedClearTimeout = defaultClearTimeout;
-    }
-} ())
-function runTimeout(fun) {
-    if (cachedSetTimeout === setTimeout) {
-        //normal enviroments in sane situations
-        return setTimeout(fun, 0);
-    }
-    // if setTimeout wasn't available but was latter defined
-    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
-        cachedSetTimeout = setTimeout;
-        return setTimeout(fun, 0);
-    }
-    try {
-        // when when somebody has screwed with setTimeout but no I.E. maddness
-        return cachedSetTimeout(fun, 0);
-    } catch(e){
-        try {
-            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
-            return cachedSetTimeout.call(null, fun, 0);
-        } catch(e){
-            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
-            return cachedSetTimeout.call(this, fun, 0);
-        }
-    }
-
-
-}
-function runClearTimeout(marker) {
-    if (cachedClearTimeout === clearTimeout) {
-        //normal enviroments in sane situations
-        return clearTimeout(marker);
-    }
-    // if clearTimeout wasn't available but was latter defined
-    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
-        cachedClearTimeout = clearTimeout;
-        return clearTimeout(marker);
-    }
-    try {
-        // when when somebody has screwed with setTimeout but no I.E. maddness
-        return cachedClearTimeout(marker);
-    } catch (e){
-        try {
-            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
-            return cachedClearTimeout.call(null, marker);
-        } catch (e){
-            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
-            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
-            return cachedClearTimeout.call(this, marker);
-        }
-    }
-
-
-
-}
-var queue = [];
-var draining = false;
-var currentQueue;
-var queueIndex = -1;
-
-function cleanUpNextTick() {
-    if (!draining || !currentQueue) {
-        return;
-    }
-    draining = false;
-    if (currentQueue.length) {
-        queue = currentQueue.concat(queue);
-    } else {
-        queueIndex = -1;
-    }
-    if (queue.length) {
-        drainQueue();
-    }
-}
-
-function drainQueue() {
-    if (draining) {
-        return;
-    }
-    var timeout = runTimeout(cleanUpNextTick);
-    draining = true;
-
-    var len = queue.length;
-    while(len) {
-        currentQueue = queue;
-        queue = [];
-        while (++queueIndex < len) {
-            if (currentQueue) {
-                currentQueue[queueIndex].run();
-            }
-        }
-        queueIndex = -1;
-        len = queue.length;
-    }
-    currentQueue = null;
-    draining = false;
-    runClearTimeout(timeout);
-}
-
-process.nextTick = function (fun) {
-    var args = new Array(arguments.length - 1);
-    if (arguments.length > 1) {
-        for (var i = 1; i < arguments.length; i++) {
-            args[i - 1] = arguments[i];
-        }
-    }
-    queue.push(new Item(fun, args));
-    if (queue.length === 1 && !draining) {
-        runTimeout(drainQueue);
-    }
-};
-
-// v8 likes predictible objects
-function Item(fun, array) {
-    this.fun = fun;
-    this.array = array;
-}
-Item.prototype.run = function () {
-    this.fun.apply(null, this.array);
-};
-process.title = 'browser';
-process.browser = true;
-process.env = {};
-process.argv = [];
-process.version = ''; // empty string to avoid regexp issues
-process.versions = {};
-
-function noop() {}
-
-process.on = noop;
-process.addListener = noop;
-process.once = noop;
-process.off = noop;
-process.removeListener = noop;
-process.removeAllListeners = noop;
-process.emit = noop;
-process.prependListener = noop;
-process.prependOnceListener = noop;
-
-process.listeners = function (name) { return [] }
-
-process.binding = function (name) {
-    throw new Error('process.binding is not supported');
-};
-
-process.cwd = function () { return '/' };
-process.chdir = function (dir) {
-    throw new Error('process.chdir is not supported');
-};
-process.umask = function() { return 0; };
-
-},{}],15:[function(require,module,exports){
-var unparse = require('escodegen').generate;
-
-module.exports = function (ast, vars) {
-    if (!vars) vars = {};
-    var FAIL = {};
-    
-    var result = (function walk (node, scopeVars) {
-        if (node.type === 'Literal') {
-            return node.value;
-        }
-        else if (node.type === 'UnaryExpression'){
-            var val = walk(node.argument)
-            if (node.operator === '+') return +val
-            if (node.operator === '-') return -val
-            if (node.operator === '~') return ~val
-            if (node.operator === '!') return !val
-            return FAIL
-        }
-        else if (node.type === 'ArrayExpression') {
-            var xs = [];
-            for (var i = 0, l = node.elements.length; i < l; i++) {
-                var x = walk(node.elements[i]);
-                if (x === FAIL) return FAIL;
-                xs.push(x);
-            }
-            return xs;
-        }
-        else if (node.type === 'ObjectExpression') {
-            var obj = {};
-            for (var i = 0; i < node.properties.length; i++) {
-                var prop = node.properties[i];
-                var value = prop.value === null
-                    ? prop.value
-                    : walk(prop.value)
-                ;
-                if (value === FAIL) return FAIL;
-                obj[prop.key.value || prop.key.name] = value;
-            }
-            return obj;
-        }
-        else if (node.type === 'BinaryExpression' ||
-                 node.type === 'LogicalExpression') {
-            var l = walk(node.left);
-            if (l === FAIL) return FAIL;
-            var r = walk(node.right);
-            if (r === FAIL) return FAIL;
-            
-            var op = node.operator;
-            if (op === '==') return l == r;
-            if (op === '===') return l === r;
-            if (op === '!=') return l != r;
-            if (op === '!==') return l !== r;
-            if (op === '+') return l + r;
-            if (op === '-') return l - r;
-            if (op === '*') return l * r;
-            if (op === '/') return l / r;
-            if (op === '%') return l % r;
-            if (op === '<') return l < r;
-            if (op === '<=') return l <= r;
-            if (op === '>') return l > r;
-            if (op === '>=') return l >= r;
-            if (op === '|') return l | r;
-            if (op === '&') return l & r;
-            if (op === '^') return l ^ r;
-            if (op === '&&') return l && r;
-            if (op === '||') return l || r;
-            
-            return FAIL;
-        }
-        else if (node.type === 'Identifier') {
-            if ({}.hasOwnProperty.call(vars, node.name)) {
-                return vars[node.name];
-            }
-            else return FAIL;
-        }
-        else if (node.type === 'ThisExpression') {
-            if ({}.hasOwnProperty.call(vars, 'this')) {
-                return vars['this'];
-            }
-            else return FAIL;
-        }
-        else if (node.type === 'CallExpression') {
-            var callee = walk(node.callee);
-            if (callee === FAIL) return FAIL;
-            if (typeof callee !== 'function') return FAIL;
-            
-            var ctx = node.callee.object ? walk(node.callee.object) : FAIL;
-            if (ctx === FAIL) ctx = null;
-
-            var args = [];
-            for (var i = 0, l = node.arguments.length; i < l; i++) {
-                var x = walk(node.arguments[i]);
-                if (x === FAIL) return FAIL;
-                args.push(x);
-            }
-            return callee.apply(ctx, args);
-        }
-        else if (node.type === 'MemberExpression') {
-            var obj = walk(node.object);
-            // do not allow access to methods on Function 
-            if((obj === FAIL) || (typeof obj == 'function')){
-                return FAIL;
-            }
-            if (node.property.type === 'Identifier') {
-                return obj[node.property.name];
-            }
-            var prop = walk(node.property);
-            if (prop === FAIL) return FAIL;
-            return obj[prop];
-        }
-        else if (node.type === 'ConditionalExpression') {
-            var val = walk(node.test)
-            if (val === FAIL) return FAIL;
-            return val ? walk(node.consequent) : walk(node.alternate)
-        }
-        else if (node.type === 'ExpressionStatement') {
-            var val = walk(node.expression)
-            if (val === FAIL) return FAIL;
-            return val;
-        }
-        else if (node.type === 'ReturnStatement') {
-            return walk(node.argument)
-        }
-        else if (node.type === 'FunctionExpression') {
-            
-            var bodies = node.body.body;
-            
-            // Create a "scope" for our arguments
-            var oldVars = {};
-            Object.keys(vars).forEach(function(element){
-                oldVars[element] = vars[element];
-            })
-
-            for(var i=0; i<node.params.length; i++){
-                var key = node.params[i];
-                if(key.type == 'Identifier'){
-                  vars[key.name] = null;
-                }
-                else return FAIL;
-            }
-            for(var i in bodies){
-                if(walk(bodies[i]) === FAIL){
-                    return FAIL;
-                }
-            }
-            // restore the vars and scope after we walk
-            vars = oldVars;
-            
-            var keys = Object.keys(vars);
-            var vals = keys.map(function(key) {
-                return vars[key];
-            });
-            return Function(keys.join(', '), 'return ' + unparse(node)).apply(null, vals);
-        }
-        else if (node.type === 'TemplateLiteral') {
-            var str = '';
-            for (var i = 0; i < node.expressions.length; i++) {
-                str += walk(node.quasis[i]);
-                str += walk(node.expressions[i]);
-            }
-            str += walk(node.quasis[i]);
-            return str;
-        }
-        else if (node.type === 'TaggedTemplateExpression') {
-            var tag = walk(node.tag);
-            var quasi = node.quasi;
-            var strings = quasi.quasis.map(walk);
-            var values = quasi.expressions.map(walk);
-            return tag.apply(null, [strings].concat(values));
-        }
-        else if (node.type === 'TemplateElement') {
-            return node.value.cooked;
-        }
-        else return FAIL;
-    })(ast);
-    
-    return result === FAIL ? undefined : result;
-};
-
-},{"escodegen":12}],"jsonpath":[function(require,module,exports){
-module.exports = require('./lib/index');
-
-},{"./lib/index":5}]},{},["jsonpath"])("jsonpath")
-});
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/jsonpath.min.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/jsonpath.min.js
deleted file mode 100644
index d7eaec9..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/jsonpath.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jsonpath 1.0.2 */
-!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.jsonpath=a()}}(function(){var a;return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({"./aesprim":[function(b,c,d){!function(b,c){"use strict";"function"==typeof a&&a.amd?a(["exports"],c):c(void 0!==d?d:b.esprima={})}(this,function(a){"use strict";function b(a,b){if(!a)throw new Error("ASSERT: "+b)}function c(a){return a>=48&&a<=57}function d(a){return"0123456789abcdefABCDEF".indexOf(a)>=0}function e(a){return"01234567".indexOf(a)>=0}function f(a){return 32===a||9===a||11===a||12===a||160===a||a>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(a)>=0}function g(a){return 10===a||13===a||8232===a||8233===a}function h(a){return 64==a||36===a||95===a||a>=65&&a<=90||a>=97&&a<=122||92===a||a>=128&&eb.NonAsciiIdentifierStart.test(String.fromCharCode(a))}function i(a){return 36===a||95===a||a>=65&&a<=90||a>=97&&a<=122||a>=48&&a<=57||92===a||a>=128&&eb.NonAsciiIdentifierPart.test(String.fromCharCode(a))}function j(a){switch(a){case"class":case"enum":case"export":case"extends":case"import":case"super":return!0;default:return!1}}function k(a){switch(a){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"yield":case"let":return!0;default:return!1}}function l(a){return"eval"===a||"arguments"===a}function m(a){if(hb&&k(a))return!0;switch(a.length){case 2:return"if"===a||"in"===a||"do"===a;case 3:return"var"===a||"for"===a||"new"===a||"try"===a||"let"===a;case 4:return"this"===a||"else"===a||"case"===a||"void"===a||"with"===a||"enum"===a;case 5:return"while"===a||"break"===a||"catch"===a||"throw"===a||"const"===a||"yield"===a||"class"===a||"super"===a;case 6:return"return"===a||"typeof"===a||"delete"===a||"switch"===a||"export"===a||"import"===a;case 7:return"default"===a||"finally"===a||"extends"===a;case 8:return"function"===a||"continue"===a||"debugger"===a;case 10:return"instanceof"===a;default:return!1}}function n(a,c,d,e,f){var g;b("number"==typeof d,"Comment must have valid position"),ob.lastCommentStart>=d||(ob.lastCommentStart=d,g={type:a,value:c},pb.range&&(g.range=[d,e]),pb.loc&&(g.loc=f),pb.comments.push(g),pb.attachComment&&(pb.leadingComments.push(g),pb.trailingComments.push(g)))}function o(a){var b,c,d,e;for(b=ib-a,c={start:{line:jb,column:ib-kb-a}};ib<lb;)if(d=gb.charCodeAt(ib),++ib,g(d))return pb.comments&&(e=gb.slice(b+a,ib-1),c.end={line:jb,column:ib-kb-1},n("Line",e,b,ib-1,c)),13===d&&10===gb.charCodeAt(ib)&&++ib,++jb,void(kb=ib);pb.comments&&(e=gb.slice(b+a,ib),c.end={line:jb,column:ib-kb},n("Line",e,b,ib,c))}function p(){var a,b,c,d;for(pb.comments&&(a=ib-2,b={start:{line:jb,column:ib-kb-2}});ib<lb;)if(c=gb.charCodeAt(ib),g(c))13===c&&10===gb.charCodeAt(ib+1)&&++ib,++jb,++ib,kb=ib,ib>=lb&&O({},db.UnexpectedToken,"ILLEGAL");else if(42===c){if(47===gb.charCodeAt(ib+1))return++ib,++ib,void(pb.comments&&(d=gb.slice(a+2,ib-2),b.end={line:jb,column:ib-kb},n("Block",d,a,ib,b)));++ib}else++ib;O({},db.UnexpectedToken,"ILLEGAL")}function q(){var a,b;for(b=0===ib;ib<lb;)if(a=gb.charCodeAt(ib),f(a))++ib;else if(g(a))++ib,13===a&&10===gb.charCodeAt(ib)&&++ib,++jb,kb=ib,b=!0;else if(47===a)if(47===(a=gb.charCodeAt(ib+1)))++ib,++ib,o(2),b=!0;else{if(42!==a)break;++ib,++ib,p()}else if(b&&45===a){if(45!==gb.charCodeAt(ib+1)||62!==gb.charCodeAt(ib+2))break;ib+=3,o(3)}else{if(60!==a)break;if("!--"!==gb.slice(ib+1,ib+4))break;++ib,++ib,++ib,++ib,o(4)}}function r(a){var b,c,e,f=0;for(c="u"===a?4:2,b=0;b<c;++b){if(!(ib<lb&&d(gb[ib])))return"";e=gb[ib++],f=16*f+"0123456789abcdef".indexOf(e.toLowerCase())}return String.fromCharCode(f)}function s(){var a,b;for(a=gb.charCodeAt(ib++),b=String.fromCharCode(a),92===a&&(117!==gb.charCodeAt(ib)&&O({},db.UnexpectedToken,"ILLEGAL"),++ib,a=r("u"),a&&"\\"!==a&&h(a.charCodeAt(0))||O({},db.UnexpectedToken,"ILLEGAL"),b=a);ib<lb&&(a=gb.charCodeAt(ib),i(a));)++ib,b+=String.fromCharCode(a),92===a&&(b=b.substr(0,b.length-1),117!==gb.charCodeAt(ib)&&O({},db.UnexpectedToken,"ILLEGAL"),++ib,a=r("u"),a&&"\\"!==a&&i(a.charCodeAt(0))||O({},db.UnexpectedToken,"ILLEGAL"),b+=a);return b}function t(){var a,b;for(a=ib++;ib<lb;){if(92===(b=gb.charCodeAt(ib)))return ib=a,s();if(!i(b))break;++ib}return gb.slice(a,ib)}function u(){var a,b,c;return a=ib,b=92===gb.charCodeAt(ib)?s():t(),c=1===b.length?$a.Identifier:m(b)?$a.Keyword:"null"===b?$a.NullLiteral:"true"===b||"false"===b?$a.BooleanLiteral:$a.Identifier,{type:c,value:b,lineNumber:jb,lineStart:kb,start:a,end:ib}}function v(){var a,b,c,d,e=ib,f=gb.charCodeAt(ib),g=gb[ib];switch(f){case 46:case 40:case 41:case 59:case 44:case 123:case 125:case 91:case 93:case 58:case 63:case 126:return++ib,pb.tokenize&&(40===f?pb.openParenToken=pb.tokens.length:123===f&&(pb.openCurlyToken=pb.tokens.length)),{type:$a.Punctuator,value:String.fromCharCode(f),lineNumber:jb,lineStart:kb,start:e,end:ib};default:if(61===(a=gb.charCodeAt(ib+1)))switch(f){case 43:case 45:case 47:case 60:case 62:case 94:case 124:case 37:case 38:case 42:return ib+=2,{type:$a.Punctuator,value:String.fromCharCode(f)+String.fromCharCode(a),lineNumber:jb,lineStart:kb,start:e,end:ib};case 33:case 61:return ib+=2,61===gb.charCodeAt(ib)&&++ib,{type:$a.Punctuator,value:gb.slice(e,ib),lineNumber:jb,lineStart:kb,start:e,end:ib}}}return">>>="===(d=gb.substr(ib,4))?(ib+=4,{type:$a.Punctuator,value:d,lineNumber:jb,lineStart:kb,start:e,end:ib}):">>>"===(c=d.substr(0,3))||"<<="===c||">>="===c?(ib+=3,{type:$a.Punctuator,value:c,lineNumber:jb,lineStart:kb,start:e,end:ib}):(b=c.substr(0,2),g===b[1]&&"+-<>&|".indexOf(g)>=0||"=>"===b?(ib+=2,{type:$a.Punctuator,value:b,lineNumber:jb,lineStart:kb,start:e,end:ib}):"<>=!+-*%&|^/".indexOf(g)>=0?(++ib,{type:$a.Punctuator,value:g,lineNumber:jb,lineStart:kb,start:e,end:ib}):void O({},db.UnexpectedToken,"ILLEGAL"))}function w(a){for(var b="";ib<lb&&d(gb[ib]);)b+=gb[ib++];return 0===b.length&&O({},db.UnexpectedToken,"ILLEGAL"),h(gb.charCodeAt(ib))&&O({},db.UnexpectedToken,"ILLEGAL"),{type:$a.NumericLiteral,value:parseInt("0x"+b,16),lineNumber:jb,lineStart:kb,start:a,end:ib}}function x(a){for(var b="0"+gb[ib++];ib<lb&&e(gb[ib]);)b+=gb[ib++];return(h(gb.charCodeAt(ib))||c(gb.charCodeAt(ib)))&&O({},db.UnexpectedToken,"ILLEGAL"),{type:$a.NumericLiteral,value:parseInt(b,8),octal:!0,lineNumber:jb,lineStart:kb,start:a,end:ib}}function y(){var a,d,f;if(f=gb[ib],b(c(f.charCodeAt(0))||"."===f,"Numeric literal must start with a decimal digit or a decimal point"),d=ib,a="","."!==f){if(a=gb[ib++],f=gb[ib],"0"===a){if("x"===f||"X"===f)return++ib,w(d);if(e(f))return x(d);f&&c(f.charCodeAt(0))&&O({},db.UnexpectedToken,"ILLEGAL")}for(;c(gb.charCodeAt(ib));)a+=gb[ib++];f=gb[ib]}if("."===f){for(a+=gb[ib++];c(gb.charCodeAt(ib));)a+=gb[ib++];f=gb[ib]}if("e"===f||"E"===f)if(a+=gb[ib++],f=gb[ib],"+"!==f&&"-"!==f||(a+=gb[ib++]),c(gb.charCodeAt(ib)))for(;c(gb.charCodeAt(ib));)a+=gb[ib++];else O({},db.UnexpectedToken,"ILLEGAL");return h(gb.charCodeAt(ib))&&O({},db.UnexpectedToken,"ILLEGAL"),{type:$a.NumericLiteral,value:parseFloat(a),lineNumber:jb,lineStart:kb,start:d,end:ib}}function z(){var a,c,d,f,h,i,j,k,l="",m=!1;for(j=jb,k=kb,a=gb[ib],b("'"===a||'"'===a,"String literal must starts with a quote"),c=ib,++ib;ib<lb;){if((d=gb[ib++])===a){a="";break}if("\\"===d)if((d=gb[ib++])&&g(d.charCodeAt(0)))++jb,"\r"===d&&"\n"===gb[ib]&&++ib,kb=ib;else switch(d){case"u":case"x":i=ib,h=r(d),h?l+=h:(ib=i,l+=d);break;case"n":l+="\n";break;case"r":l+="\r";break;case"t":l+="\t";break;case"b":l+="\b";break;case"f":l+="\f";break;case"v":l+="\v";break;default:e(d)?(f="01234567".indexOf(d),0!==f&&(m=!0),ib<lb&&e(gb[ib])&&(m=!0,f=8*f+"01234567".indexOf(gb[ib++]),"0123".indexOf(d)>=0&&ib<lb&&e(gb[ib])&&(f=8*f+"01234567".indexOf(gb[ib++]))),l+=String.fromCharCode(f)):l+=d}else{if(g(d.charCodeAt(0)))break;l+=d}}return""!==a&&O({},db.UnexpectedToken,"ILLEGAL"),{type:$a.StringLiteral,value:l,octal:m,startLineNumber:j,startLineStart:k,lineNumber:jb,lineStart:kb,start:c,end:ib}}function A(a,b){var c;try{c=new RegExp(a,b)}catch(d){O({},db.InvalidRegExp)}return c}function B(){var a,c,d,e,f;for(a=gb[ib],b("/"===a,"Regular expression literal must start with a slash"),c=gb[ib++],d=!1,e=!1;ib<lb;)if(a=gb[ib++],c+=a,"\\"===a)a=gb[ib++],g(a.charCodeAt(0))&&O({},db.UnterminatedRegExp),c+=a;else if(g(a.charCodeAt(0)))O({},db.UnterminatedRegExp);else if(d)"]"===a&&(d=!1);else{if("/"===a){e=!0;break}"["===a&&(d=!0)}return e||O({},db.UnterminatedRegExp),f=c.substr(1,c.length-2),{value:f,literal:c}}function C(){var a,b,c,d;for(b="",c="";ib<lb&&(a=gb[ib],i(a.charCodeAt(0)));)if(++ib,"\\"===a&&ib<lb)if("u"===(a=gb[ib])){if(++ib,d=ib,a=r("u"))for(c+=a,b+="\\u";d<ib;++d)b+=gb[d];else ib=d,c+="u",b+="\\u";P({},db.UnexpectedToken,"ILLEGAL")}else b+="\\",P({},db.UnexpectedToken,"ILLEGAL");else c+=a,b+=a;return{value:c,literal:b}}function D(){var a,b,c,d;return nb=null,q(),a=ib,b=B(),c=C(),d=A(b.value,c.value),pb.tokenize?{type:$a.RegularExpression,value:d,lineNumber:jb,lineStart:kb,start:a,end:ib}:{literal:b.literal+c.literal,value:d,start:a,end:ib}}function E(){var a,b,c,d;return q(),a=ib,b={start:{line:jb,column:ib-kb}},c=D(),b.end={line:jb,column:ib-kb},pb.tokenize||(pb.tokens.length>0&&(d=pb.tokens[pb.tokens.length-1],d.range[0]===a&&"Punctuator"===d.type&&("/"!==d.value&&"/="!==d.value||pb.tokens.pop())),pb.tokens.push({type:"RegularExpression",value:c.literal,range:[a,ib],loc:b})),c}function F(a){return a.type===$a.Identifier||a.type===$a.Keyword||a.type===$a.BooleanLiteral||a.type===$a.NullLiteral}function G(){var a,b;if(!(a=pb.tokens[pb.tokens.length-1]))return E();if("Punctuator"===a.type){if("]"===a.value)return v();if(")"===a.value)return b=pb.tokens[pb.openParenToken-1],!b||"Keyword"!==b.type||"if"!==b.value&&"while"!==b.value&&"for"!==b.value&&"with"!==b.value?v():E();if("}"===a.value){if(pb.tokens[pb.openCurlyToken-3]&&"Keyword"===pb.tokens[pb.openCurlyToken-3].type){if(!(b=pb.tokens[pb.openCurlyToken-4]))return v()}else{if(!pb.tokens[pb.openCurlyToken-4]||"Keyword"!==pb.tokens[pb.openCurlyToken-4].type)return v();if(!(b=pb.tokens[pb.openCurlyToken-5]))return E()}return ab.indexOf(b.value)>=0?v():E()}return E()}return"Keyword"===a.type?E():v()}function H(){var a;return q(),ib>=lb?{type:$a.EOF,lineNumber:jb,lineStart:kb,start:ib,end:ib}:(a=gb.charCodeAt(ib),h(a)?u():40===a||41===a||59===a?v():39===a||34===a?z():46===a?c(gb.charCodeAt(ib+1))?y():v():c(a)?y():pb.tokenize&&47===a?G():v())}function I(){var a,b,c;return q(),a={start:{line:jb,column:ib-kb}},b=H(),a.end={line:jb,column:ib-kb},b.type!==$a.EOF&&(c=gb.slice(b.start,b.end),pb.tokens.push({type:_a[b.type],value:c,range:[b.start,b.end],loc:a})),b}function J(){var a;return a=nb,ib=a.end,jb=a.lineNumber,kb=a.lineStart,nb=void 0!==pb.tokens?I():H(),ib=a.end,jb=a.lineNumber,kb=a.lineStart,a}function K(){var a,b,c;a=ib,b=jb,c=kb,nb=void 0!==pb.tokens?I():H(),ib=a,jb=b,kb=c}function L(a,b){this.line=a,this.column=b}function M(a,b,c,d){this.start=new L(a,b),this.end=new L(c,d)}function N(){var a,b,c,d;return a=ib,b=jb,c=kb,q(),d=jb!==b,ib=a,jb=b,kb=c,d}function O(a,c){var d,e=Array.prototype.slice.call(arguments,2),f=c.replace(/%(\d)/g,function(a,c){return b(c<e.length,"Message reference must be in range"),e[c]});throw"number"==typeof a.lineNumber?(d=new Error("Line "+a.lineNumber+": "+f),d.index=a.start,d.lineNumber=a.lineNumber,d.column=a.start-kb+1):(d=new Error("Line "+jb+": "+f),d.index=ib,d.lineNumber=jb,d.column=ib-kb+1),d.description=f,d}function P(){try{O.apply(null,arguments)}catch(a){if(!pb.errors)throw a;pb.errors.push(a)}}function Q(a){if(a.type===$a.EOF&&O(a,db.UnexpectedEOS),a.type===$a.NumericLiteral&&O(a,db.UnexpectedNumber),a.type===$a.StringLiteral&&O(a,db.UnexpectedString),a.type===$a.Identifier&&O(a,db.UnexpectedIdentifier),a.type===$a.Keyword){if(j(a.value))O(a,db.UnexpectedReserved);else if(hb&&k(a.value))return void P(a,db.StrictReservedWord);O(a,db.UnexpectedToken,a.value)}O(a,db.UnexpectedToken,a.value)}function R(a){var b=J();b.type===$a.Punctuator&&b.value===a||Q(b)}function S(a){var b=J();b.type===$a.Keyword&&b.value===a||Q(b)}function T(a){return nb.type===$a.Punctuator&&nb.value===a}function U(a){return nb.type===$a.Keyword&&nb.value===a}function V(){var a;return nb.type===$a.Punctuator&&("="===(a=nb.value)||"*="===a||"/="===a||"%="===a||"+="===a||"-="===a||"<<="===a||">>="===a||">>>="===a||"&="===a||"^="===a||"|="===a)}function W(){var a;if(59===gb.charCodeAt(ib)||T(";"))return void J();a=jb,q(),jb===a&&(nb.type===$a.EOF||T("}")||Q(nb))}function X(a){return a.type===bb.Identifier||a.type===bb.MemberExpression}function Y(){var a,b=[];for(a=nb,R("[");!T("]");)T(",")?(J(),b.push(null)):(b.push(pa()),T("]")||R(","));return J(),mb.markEnd(mb.createArrayExpression(b),a)}function Z(a,b){var c,d,e;return c=hb,e=nb,d=Qa(),b&&hb&&l(a[0].name)&&P(b,db.StrictParamName),hb=c,mb.markEnd(mb.createFunctionExpression(null,a,[],d),e)}function $(){var a,b;return b=nb,a=J(),a.type===$a.StringLiteral||a.type===$a.NumericLiteral?(hb&&a.octal&&P(a,db.StrictOctalLiteral),mb.markEnd(mb.createLiteral(a),b)):mb.markEnd(mb.createIdentifier(a.value),b)}function _(){var a,b,c,d,e,f;return a=nb,f=nb,a.type===$a.Identifier?(c=$(),"get"!==a.value||T(":")?"set"!==a.value||T(":")?(R(":"),d=pa(),mb.markEnd(mb.createProperty("init",c,d),f)):(b=$(),R("("),a=nb,a.type!==$a.Identifier?(R(")"),P(a,db.UnexpectedToken,a.value),d=Z([])):(e=[ta()],R(")"),d=Z(e,a)),mb.markEnd(mb.createProperty("set",b,d),f)):(b=$(),R("("),R(")"),d=Z([]),mb.markEnd(mb.createProperty("get",b,d),f))):a.type!==$a.EOF&&a.type!==$a.Punctuator?(b=$(),R(":"),d=pa(),mb.markEnd(mb.createProperty("init",b,d),f)):void Q(a)}function aa(){var a,b,c,d,e,f=[],g={},h=String;for(e=nb,R("{");!T("}");)a=_(),b=a.key.type===bb.Identifier?a.key.name:h(a.key.value),d="init"===a.kind?cb.Data:"get"===a.kind?cb.Get:cb.Set,c="$"+b,Object.prototype.hasOwnProperty.call(g,c)?(g[c]===cb.Data?hb&&d===cb.Data?P({},db.StrictDuplicateProperty):d!==cb.Data&&P({},db.AccessorDataProperty):d===cb.Data?P({},db.AccessorDataProperty):g[c]&d&&P({},db.AccessorGetSet),g[c]|=d):g[c]=d,f.push(a),T("}")||R(",");return R("}"),mb.markEnd(mb.createObjectExpression(f),e)}function ba(){var a;return R("("),a=qa(),R(")"),a}function ca(){var a,b,c,d;if(T("("))return ba();if(T("["))return Y();if(T("{"))return aa();if(a=nb.type,d=nb,a===$a.Identifier)c=mb.createIdentifier(J().value);else if(a===$a.StringLiteral||a===$a.NumericLiteral)hb&&nb.octal&&P(nb,db.StrictOctalLiteral),c=mb.createLiteral(J());else if(a===$a.Keyword){if(U("function"))return Ta();U("this")?(J(),c=mb.createThisExpression()):Q(J())}else a===$a.BooleanLiteral?(b=J(),b.value="true"===b.value,c=mb.createLiteral(b)):a===$a.NullLiteral?(b=J(),b.value=null,c=mb.createLiteral(b)):T("/")||T("/=")?(c=void 0!==pb.tokens?mb.createLiteral(E()):mb.createLiteral(D()),K()):Q(J());return mb.markEnd(c,d)}function da(){var a=[];if(R("("),!T(")"))for(;ib<lb&&(a.push(pa()),!T(")"));)R(",");return R(")"),a}function ea(){var a,b;return b=nb,a=J(),F(a)||Q(a),mb.markEnd(mb.createIdentifier(a.value),b)}function fa(){return R("."),ea()}function ga(){var a;return R("["),a=qa(),R("]"),a}function ha(){var a,b,c;return c=nb,S("new"),a=ja(),b=T("(")?da():[],mb.markEnd(mb.createNewExpression(a,b),c)}function ia(){var a,b,c,d,e;for(e=nb,a=ob.allowIn,ob.allowIn=!0,b=U("new")?ha():ca(),ob.allowIn=a;;){if(T("."))d=fa(),b=mb.createMemberExpression(".",b,d);else if(T("("))c=da(),b=mb.createCallExpression(b,c);else{if(!T("["))break;d=ga(),b=mb.createMemberExpression("[",b,d)}mb.markEnd(b,e)}return b}function ja(){var a,b,c,d;for(d=nb,a=ob.allowIn,b=U("new")?ha():ca(),ob.allowIn=a;T(".")||T("[");)T("[")?(c=ga(),b=mb.createMemberExpression("[",b,c)):(c=fa(),b=mb.createMemberExpression(".",b,c)),mb.markEnd(b,d);return b}function ka(){var a,b,c=nb;return a=ia(),nb.type===$a.Punctuator&&(!T("++")&&!T("--")||N()||(hb&&a.type===bb.Identifier&&l(a.name)&&P({},db.StrictLHSPostfix),X(a)||P({},db.InvalidLHSInAssignment),b=J(),a=mb.markEnd(mb.createPostfixExpression(b.value,a),c))),a}function la(){var a,b,c;return nb.type!==$a.Punctuator&&nb.type!==$a.Keyword?b=ka():T("++")||T("--")?(c=nb,a=J(),b=la(),hb&&b.type===bb.Identifier&&l(b.name)&&P({},db.StrictLHSPrefix),X(b)||P({},db.InvalidLHSInAssignment),b=mb.createUnaryExpression(a.value,b),b=mb.markEnd(b,c)):T("+")||T("-")||T("~")||T("!")?(c=nb,a=J(),b=la(),b=mb.createUnaryExpression(a.value,b),b=mb.markEnd(b,c)):U("delete")||U("void")||U("typeof")?(c=nb,a=J(),b=la(),b=mb.createUnaryExpression(a.value,b),b=mb.markEnd(b,c),hb&&"delete"===b.operator&&b.argument.type===bb.Identifier&&P({},db.StrictDelete)):b=ka(),b}function ma(a,b){var c=0;if(a.type!==$a.Punctuator&&a.type!==$a.Keyword)return 0;switch(a.value){case"||":c=1;break;case"&&":c=2;break;case"|":c=3;break;case"^":c=4;break;case"&":c=5;break;case"==":case"!=":case"===":case"!==":c=6;break;case"<":case">":case"<=":case">=":case"instanceof":c=7;break;case"in":c=b?7:0;break;case"<<":case">>":case">>>":c=8;break;case"+":case"-":c=9;break;case"*":case"/":case"%":c=11}return c}function na(){var a,b,c,d,e,f,g,h,i,j;if(a=nb,i=la(),d=nb,0===(e=ma(d,ob.allowIn)))return i;for(d.prec=e,J(),b=[a,nb],g=la(),f=[i,d,g];(e=ma(nb,ob.allowIn))>0;){for(;f.length>2&&e<=f[f.length-2].prec;)g=f.pop(),h=f.pop().value,i=f.pop(),c=mb.createBinaryExpression(h,i,g),b.pop(),a=b[b.length-1],mb.markEnd(c,a),f.push(c);d=J(),d.prec=e,f.push(d),b.push(nb),c=la(),f.push(c)}for(j=f.length-1,c=f[j],b.pop();j>1;)c=mb.createBinaryExpression(f[j-1].value,f[j-2],c),j-=2,a=b.pop(),mb.markEnd(c,a);return c}function oa(){var a,b,c,d,e;return e=nb,a=na(),T("?")&&(J(),b=ob.allowIn,ob.allowIn=!0,c=pa(),ob.allowIn=b,R(":"),d=pa(),a=mb.createConditionalExpression(a,c,d),mb.markEnd(a,e)),a}function pa(){var a,b,c,d,e;return a=nb,e=nb,d=b=oa(),V()&&(X(b)||P({},db.InvalidLHSInAssignment),hb&&b.type===bb.Identifier&&l(b.name)&&P(a,db.StrictLHSAssignment),a=J(),c=pa(),d=mb.markEnd(mb.createAssignmentExpression(a.value,b,c),e)),d}function qa(){var a,b=nb;if(a=pa(),T(",")){for(a=mb.createSequenceExpression([a]);ib<lb&&T(",");)J(),a.expressions.push(pa());mb.markEnd(a,b)}return a}function ra(){for(var a,b=[];ib<lb&&!T("}")&&void 0!==(a=Ua());)b.push(a);return b}function sa(){var a,b;return b=nb,R("{"),a=ra(),R("}"),mb.markEnd(mb.createBlockStatement(a),b)}function ta(){var a,b;return b=nb,a=J(),a.type!==$a.Identifier&&Q(a),mb.markEnd(mb.createIdentifier(a.value),b)}function ua(a){var b,c,d=null;return c=nb,b=ta(),hb&&l(b.name)&&P({},db.StrictVarName),"const"===a?(R("="),d=pa()):T("=")&&(J(),d=pa()),mb.markEnd(mb.createVariableDeclarator(b,d),c)}function va(a){var b=[];do{if(b.push(ua(a)),!T(","))break;J()}while(ib<lb);return b}function wa(){var a;return S("var"),a=va(),W(),mb.createVariableDeclaration(a,"var")}function xa(a){var b,c;return c=nb,S(a),b=va(a),W(),mb.markEnd(mb.createVariableDeclaration(b,a),c)}function ya(){return R(";"),mb.createEmptyStatement()}function za(){var a=qa();return W(),mb.createExpressionStatement(a)}function Aa(){var a,b,c;return S("if"),R("("),a=qa(),R(")"),b=Pa(),U("else")?(J(),c=Pa()):c=null,mb.createIfStatement(a,b,c)}function Ba(){var a,b,c;return S("do"),c=ob.inIteration,ob.inIteration=!0,a=Pa(),ob.inIteration=c,S("while"),R("("),b=qa(),R(")"),T(";")&&J(),mb.createDoWhileStatement(a,b)}function Ca(){var a,b,c;return S("while"),R("("),a=qa(),R(")"),c=ob.inIteration,ob.inIteration=!0,b=Pa(),ob.inIteration=c,mb.createWhileStatement(a,b)}function Da(){var a,b,c;return c=nb,a=J(),b=va(),mb.markEnd(mb.createVariableDeclaration(b,a.value),c)}function Ea(){var a,b,c,d,e,f,g;return a=b=c=null,S("for"),R("("),T(";")?J():(U("var")||U("let")?(ob.allowIn=!1,a=Da(),ob.allowIn=!0,1===a.declarations.length&&U("in")&&(J(),d=a,e=qa(),a=null)):(ob.allowIn=!1,a=qa(),ob.allowIn=!0,U("in")&&(X(a)||P({},db.InvalidLHSInForIn),J(),d=a,e=qa(),a=null)),void 0===d&&R(";")),void 0===d&&(T(";")||(b=qa()),R(";"),T(")")||(c=qa())),R(")"),g=ob.inIteration,ob.inIteration=!0,f=Pa(),ob.inIteration=g,void 0===d?mb.createForStatement(a,b,c,f):mb.createForInStatement(d,e,f)}function Fa(){var a,b=null;return S("continue"),59===gb.charCodeAt(ib)?(J(),ob.inIteration||O({},db.IllegalContinue),mb.createContinueStatement(null)):N()?(ob.inIteration||O({},db.IllegalContinue),mb.createContinueStatement(null)):(nb.type===$a.Identifier&&(b=ta(),a="$"+b.name,Object.prototype.hasOwnProperty.call(ob.labelSet,a)||O({},db.UnknownLabel,b.name)),W(),null!==b||ob.inIteration||O({},db.IllegalContinue),mb.createContinueStatement(b))}function Ga(){var a,b=null;return S("break"),59===gb.charCodeAt(ib)?(J(),ob.inIteration||ob.inSwitch||O({},db.IllegalBreak),mb.createBreakStatement(null)):N()?(ob.inIteration||ob.inSwitch||O({},db.IllegalBreak),mb.createBreakStatement(null)):(nb.type===$a.Identifier&&(b=ta(),a="$"+b.name,Object.prototype.hasOwnProperty.call(ob.labelSet,a)||O({},db.UnknownLabel,b.name)),W(),null!==b||ob.inIteration||ob.inSwitch||O({},db.IllegalBreak),mb.createBreakStatement(b))}function Ha(){var a=null;return S("return"),ob.inFunctionBody||P({},db.IllegalReturn),32===gb.charCodeAt(ib)&&h(gb.charCodeAt(ib+1))?(a=qa(),W(),mb.createReturnStatement(a)):N()?mb.createReturnStatement(null):(T(";")||T("}")||nb.type===$a.EOF||(a=qa()),W(),mb.createReturnStatement(a))}function Ia(){var a,b;return hb&&(q(),P({},db.StrictModeWith)),S("with"),R("("),a=qa(),R(")"),b=Pa(),mb.createWithStatement(a,b)}function Ja(){var a,b,c,d=[];for(c=nb,U("default")?(J(),a=null):(S("case"),a=qa()),R(":");ib<lb&&!(T("}")||U("default")||U("case"));)b=Pa(),d.push(b);return mb.markEnd(mb.createSwitchCase(a,d),c)}function Ka(){var a,b,c,d,e;if(S("switch"),R("("),a=qa(),R(")"),R("{"),b=[],T("}"))return J(),mb.createSwitchStatement(a,b);for(d=ob.inSwitch,ob.inSwitch=!0,e=!1;ib<lb&&!T("}");)c=Ja(),null===c.test&&(e&&O({},db.MultipleDefaultsInSwitch),e=!0),b.push(c);return ob.inSwitch=d,R("}"),mb.createSwitchStatement(a,b)}function La(){var a;return S("throw"),N()&&O({},db.NewlineAfterThrow),a=qa(),W(),mb.createThrowStatement(a)}function Ma(){var a,b,c;return c=nb,S("catch"),R("("),T(")")&&Q(nb),a=ta(),hb&&l(a.name)&&P({},db.StrictCatchVariable),R(")"),b=sa(),mb.markEnd(mb.createCatchClause(a,b),c)}function Na(){var a,b=[],c=null;return S("try"),a=sa(),U("catch")&&b.push(Ma()),U("finally")&&(J(),c=sa()),0!==b.length||c||O({},db.NoCatchOrFinally),mb.createTryStatement(a,[],b,c)}function Oa(){return S("debugger"),W(),mb.createDebuggerStatement()}function Pa(){var a,b,c,d,e=nb.type;if(e===$a.EOF&&Q(nb),e===$a.Punctuator&&"{"===nb.value)return sa();if(d=nb,e===$a.Punctuator)switch(nb.value){case";":return mb.markEnd(ya(),d);case"(":return mb.markEnd(za(),d)}if(e===$a.Keyword)switch(nb.value){case"break":return mb.markEnd(Ga(),d);case"continue":return mb.markEnd(Fa(),d);case"debugger":return mb.markEnd(Oa(),d);case"do":return mb.markEnd(Ba(),d);case"for":return mb.markEnd(Ea(),d);case"function":return mb.markEnd(Sa(),d);case"if":return mb.markEnd(Aa(),d);case"return":return mb.markEnd(Ha(),d);case"switch":return mb.markEnd(Ka(),d);case"throw":return mb.markEnd(La(),d);case"try":return mb.markEnd(Na(),d);case"var":return mb.markEnd(wa(),d);case"while":return mb.markEnd(Ca(),d);case"with":return mb.markEnd(Ia(),d)}return a=qa(),a.type===bb.Identifier&&T(":")?(J(),c="$"+a.name,Object.prototype.hasOwnProperty.call(ob.labelSet,c)&&O({},db.Redeclaration,"Label",a.name),ob.labelSet[c]=!0,b=Pa(),delete ob.labelSet[c],mb.markEnd(mb.createLabeledStatement(a,b),d)):(W(),mb.markEnd(mb.createExpressionStatement(a),d))}function Qa(){var a,b,c,d,e,f,g,h,i,j=[];for(i=nb,R("{");ib<lb&&nb.type===$a.StringLiteral&&(b=nb,a=Ua(),j.push(a),a.expression.type===bb.Literal);)c=gb.slice(b.start+1,b.end-1),"use strict"===c?(hb=!0,d&&P(d,db.StrictOctalLiteral)):!d&&b.octal&&(d=b);for(e=ob.labelSet,f=ob.inIteration,g=ob.inSwitch,h=ob.inFunctionBody,ob.labelSet={},ob.inIteration=!1,ob.inSwitch=!1,ob.inFunctionBody=!0;ib<lb&&!T("}")&&void 0!==(a=Ua());)j.push(a);return R("}"),ob.labelSet=e,ob.inIteration=f,ob.inSwitch=g,ob.inFunctionBody=h,mb.markEnd(mb.createBlockStatement(j),i)}function Ra(a){var b,c,d,e,f,g,h=[];if(R("("),!T(")"))for(e={};ib<lb&&(c=nb,b=ta(),f="$"+c.value,hb?(l(c.value)&&(d=c,g=db.StrictParamName),Object.prototype.hasOwnProperty.call(e,f)&&(d=c,g=db.StrictParamDupe)):a||(l(c.value)?(a=c,g=db.StrictParamName):k(c.value)?(a=c,g=db.StrictReservedWord):Object.prototype.hasOwnProperty.call(e,f)&&(a=c,g=db.StrictParamDupe)),h.push(b),e[f]=!0,!T(")"));)R(",");return R(")"),{params:h,stricted:d,firstRestricted:a,message:g}}function Sa(){var a,b,c,d,e,f,g,h,i,j=[];return i=nb,S("function"),c=nb,a=ta(),hb?l(c.value)&&P(c,db.StrictFunctionName):l(c.value)?(f=c,g=db.StrictFunctionName):k(c.value)&&(f=c,g=db.StrictReservedWord),e=Ra(f),j=e.params,d=e.stricted,f=e.firstRestricted,e.message&&(g=e.message),h=hb,b=Qa(),hb&&f&&O(f,g),hb&&d&&P(d,g),hb=h,mb.markEnd(mb.createFunctionDeclaration(a,j,[],b),i)}function Ta(){var a,b,c,d,e,f,g,h,i=null,j=[];return h=nb,S("function"),T("(")||(a=nb,i=ta(),hb?l(a.value)&&P(a,db.StrictFunctionName):l(a.value)?(c=a,d=db.StrictFunctionName):k(a.value)&&(c=a,d=db.StrictReservedWord)),e=Ra(c),j=e.params,b=e.stricted,c=e.firstRestricted,e.message&&(d=e.message),g=hb,f=Qa(),hb&&c&&O(c,d),hb&&b&&P(b,d),hb=g,mb.markEnd(mb.createFunctionExpression(i,j,[],f),h)}function Ua(){if(nb.type===$a.Keyword)switch(nb.value){case"const":case"let":return xa(nb.value);case"function":return Sa();default:return Pa()}if(nb.type!==$a.EOF)return Pa()}function Va(){for(var a,b,c,d,e=[];ib<lb&&(b=nb,b.type===$a.StringLiteral)&&(a=Ua(),e.push(a),a.expression.type===bb.Literal);)c=gb.slice(b.start+1,b.end-1),"use strict"===c?(hb=!0,d&&P(d,db.StrictOctalLiteral)):!d&&b.octal&&(d=b);for(;ib<lb&&void 0!==(a=Ua());)e.push(a);return e}function Wa(){var a,b;return q(),K(),b=nb,hb=!1,a=Va(),mb.markEnd(mb.createProgram(a),b)}function Xa(){var a,b,c,d=[];for(a=0;a<pb.tokens.length;++a)b=pb.tokens[a],c={type:b.type,value:b.value},pb.range&&(c.range=b.range),pb.loc&&(c.loc=b.loc),d.push(c);pb.tokens=d}function Ya(a,b){var c,d;c=String,"string"==typeof a||a instanceof String||(a=c(a)),mb=fb,gb=a,ib=0,jb=gb.length>0?1:0,kb=0,lb=gb.length,nb=null,ob={allowIn:!0,labelSet:{},inFunctionBody:!1,inIteration:!1,inSwitch:!1,lastCommentStart:-1},pb={},b=b||{},b.tokens=!0,pb.tokens=[],pb.tokenize=!0,pb.openParenToken=-1,pb.openCurlyToken=-1,pb.range="boolean"==typeof b.range&&b.range,pb.loc="boolean"==typeof b.loc&&b.loc,"boolean"==typeof b.comment&&b.comment&&(pb.comments=[]),"boolean"==typeof b.tolerant&&b.tolerant&&(pb.errors=[]);try{if(K(),nb.type===$a.EOF)return pb.tokens;for(J();nb.type!==$a.EOF;)try{J()}catch(e){if(nb,pb.errors){pb.errors.push(e);break}throw e}Xa(),d=pb.tokens,void 0!==pb.comments&&(d.comments=pb.comments),void 0!==pb.errors&&(d.errors=pb.errors)}catch(f){throw f}finally{pb={}}return d}function Za(a,b){var c,d;d=String,"string"==typeof a||a instanceof String||(a=d(a)),mb=fb,gb=a,ib=0,jb=gb.length>0?1:0,kb=0,lb=gb.length,nb=null,ob={allowIn:!0,labelSet:{},inFunctionBody:!1,inIteration:!1,inSwitch:!1,lastCommentStart:-1},pb={},void 0!==b&&(pb.range="boolean"==typeof b.range&&b.range,pb.loc="boolean"==typeof b.loc&&b.loc,pb.attachComment="boolean"==typeof b.attachComment&&b.attachComment,pb.loc&&null!==b.source&&void 0!==b.source&&(pb.source=d(b.source)),"boolean"==typeof b.tokens&&b.tokens&&(pb.tokens=[]),"boolean"==typeof b.comment&&b.comment&&(pb.comments=[]),"boolean"==typeof b.tolerant&&b.tolerant&&(pb.errors=[]),pb.attachComment&&(pb.range=!0,pb.comments=[],pb.bottomRightStack=[],pb.trailingComments=[],pb.leadingComments=[]));try{c=Wa(),void 0!==pb.comments&&(c.comments=pb.comments),void 0!==pb.tokens&&(Xa(),c.tokens=pb.tokens),void 0!==pb.errors&&(c.errors=pb.errors)}catch(e){throw e}finally{pb={}}return c}var $a,_a,ab,bb,cb,db,eb,fb,gb,hb,ib,jb,kb,lb,mb,nb,ob,pb;$a={BooleanLiteral:1,EOF:2,Identifier:3,Keyword:4,NullLiteral:5,NumericLiteral:6,Punctuator:7,StringLiteral:8,RegularExpression:9},_a={},_a[$a.BooleanLiteral]="Boolean",_a[$a.EOF]="<end>",_a[$a.Identifier]="Identifier",_a[$a.Keyword]="Keyword",_a[$a.NullLiteral]="Null",_a[$a.NumericLiteral]="Numeric",_a[$a.Punctuator]="Punctuator",_a[$a.StringLiteral]="String",_a[$a.RegularExpression]="RegularExpression",ab=["(","{","[","in","typeof","instanceof","new","return","case","delete","throw","void","=","+=","-=","*=","/=","%=","<<=",">>=",">>>=","&=","|=","^=",",","+","-","*","/","%","++","--","<<",">>",">>>","&","|","^","!","~","&&","||","?",":","===","==",">=","<=","<",">","!=","!=="],bb={AssignmentExpression:"AssignmentExpression",ArrayExpression:"ArrayExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DoWhileStatement:"DoWhileStatement",DebuggerStatement:"DebuggerStatement",EmptyStatement:"EmptyStatement",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForInStatement:"ForInStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",Identifier:"Identifier",IfStatement:"IfStatement",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",Program:"Program",Property:"Property",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SwitchStatement:"SwitchStatement",SwitchCase:"SwitchCase",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement"},cb={Data:1,Get:2,Set:4},db={UnexpectedToken:"Unexpected token %0",UnexpectedNumber:"Unexpected number",UnexpectedString:"Unexpected string",UnexpectedIdentifier:"Unexpected identifier",UnexpectedReserved:"Unexpected reserved word",UnexpectedEOS:"Unexpected end of input",NewlineAfterThrow:"Illegal newline after throw",InvalidRegExp:"Invalid regular expression",UnterminatedRegExp:"Invalid regular expression: missing /",InvalidLHSInAssignment:"Invalid left-hand side in assignment",InvalidLHSInForIn:"Invalid left-hand side in for-in",MultipleDefaultsInSwitch:"More than one default clause in switch statement",NoCatchOrFinally:"Missing catch or finally after try",UnknownLabel:"Undefined label '%0'",Redeclaration:"%0 '%1' has already been declared",IllegalContinue:"Illegal continue statement",IllegalBreak:"Illegal break statement",IllegalReturn:"Illegal return statement",StrictModeWith:"Strict mode code may not include a with statement",StrictCatchVariable:"Catch variable may not be eval or arguments in strict mode",StrictVarName:"Variable name may not be eval or arguments in strict mode",StrictParamName:"Parameter name eval or arguments is not allowed in strict mode",StrictParamDupe:"Strict mode function may not have duplicate parameter names",StrictFunctionName:"Function name may not be eval or arguments in strict mode",StrictOctalLiteral:"Octal literals are not allowed in strict mode.",StrictDelete:"Delete of an unqualified identifier in strict mode.",StrictDuplicateProperty:"Duplicate data property in object literal not allowed in strict mode",
-AccessorDataProperty:"Object literal may not have data and accessor property with the same name",AccessorGetSet:"Object literal may not have multiple get/set accessors with the same name",StrictLHSAssignment:"Assignment to eval or arguments is not allowed in strict mode",StrictLHSPostfix:"Postfix increment/decrement may not have eval or arguments operand in strict mode",StrictLHSPrefix:"Prefix increment/decrement may not have eval or arguments operand in strict mode",StrictReservedWord:"Use of future reserved word in strict mode"},eb={NonAsciiIdentifierStart:new RegExp("[ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԧԱ-Ֆՙա-ևא-תװ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࢠࢢ-ࢬऄ-हऽॐक़-ॡॱ-ॷॹ-ॿঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-ళవ-హఽౘౙౠౡಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೞೠೡೱೲഅ-ഌഎ-ഐഒ-ഺഽൎൠൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛰᜀ-ᜌᜎ-ᜑᜠ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡷᢀ-ᢨᢪᢰ-ᣵᤀ-ᤜᥐ-ᥭᥰ-ᥴᦀ-ᦫᧁ-ᧇᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭋᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᳩ-ᳬᳮ-ᳱᳵᳶᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⸯ々-〇〡-〩〱-〵〸-〼ぁ-ゖゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚗꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꪀ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]"),NonAsciiIdentifierPart:new RegExp("[ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮ̀-ʹͶͷͺ-ͽΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁ҃-҇Ҋ-ԧԱ-Ֆՙա-և֑-ׇֽֿׁׂׅׄא-תװ-ײؐ-ؚؠ-٩ٮ-ۓە-ۜ۟-۪ۨ-ۼۿܐ-݊ݍ-ޱ߀-ߵߺࠀ-࠭ࡀ-࡛ࢠࢢ-ࢬࣤ-ࣾऀ-ॣ०-९ॱ-ॷॹ-ॿঁ-ঃঅ-ঌএঐও-নপ-রলশ-হ়-ৄেৈো-ৎৗড়ঢ়য়-ৣ০-ৱਁ-ਃਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹ਼ਾ-ੂੇੈੋ-੍ੑਖ਼-ੜਫ਼੦-ੵઁ-ઃઅ-ઍએ-ઑઓ-નપ-રલળવ-હ઼-ૅે-ૉો-્ૐૠ-ૣ૦-૯ଁ-ଃଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହ଼-ୄେୈୋ-୍ୖୗଡ଼ଢ଼ୟ-ୣ୦-୯ୱஂஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹா-ூெ-ைொ-்ௐௗ௦-௯ఁ-ఃఅ-ఌఎ-ఐఒ-నప-ళవ-హఽ-ౄె-ైొ-్ౕౖౘౙౠ-ౣ౦-౯ಂಃಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹ಼-ೄೆ-ೈೊ-್ೕೖೞೠ-ೣ೦-೯ೱೲംഃഅ-ഌഎ-ഐഒ-ഺഽ-ൄെ-ൈൊ-ൎൗൠ-ൣ൦-൯ൺ-ൿංඃඅ-ඖක-නඳ-රලව-ෆ්ා-ුූෘ-ෟෲෳก-ฺเ-๎๐-๙ກຂຄງຈຊຍດ-ທນ-ຟມ-ຣລວສຫອ-ູົ-ຽເ-ໄໆ່-ໍ໐-໙ໜ-ໟༀ༘༙༠-༩༹༵༷༾-ཇཉ-ཬཱ-྄྆-ྗྙ-ྼ࿆က-၉ၐ-ႝႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚ፝-፟ᎀ-ᎏᎠ-Ᏼᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛰᜀ-ᜌᜎ-᜔ᜠ-᜴ᝀ-ᝓᝠ-ᝬᝮ-ᝰᝲᝳក-៓ៗៜ៝០-៩᠋-᠍᠐-᠙ᠠ-ᡷᢀ-ᢪᢰ-ᣵᤀ-ᤜᤠ-ᤫᤰ-᤻᥆-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉ᧐-᧙ᨀ-ᨛᨠ-ᩞ᩠-᩿᩼-᪉᪐-᪙ᪧᬀ-ᭋ᭐-᭙᭫-᭳ᮀ-᯳ᰀ-᰷᱀-᱉ᱍ-ᱽ᳐-᳔᳒-ᳶᴀ-ᷦ᷼-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼ‌‍‿⁀⁔ⁱⁿₐ-ₜ⃐-⃥⃜⃡-⃰ℂℇℊ-ℓℕℙ-ℝℤΩℨK-ℭℯ-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-Ⱞⰰ-ⱞⱠ-ⳤⳫ-ⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯ⵿-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞⷠ-ⷿⸯ々-〇〡-〯〱-〵〸-〼ぁ-ゖ゙゚ゝ-ゟァ-ヺー-ヿㄅ-ㄭㄱ-ㆎㆠ-ㆺㇰ-ㇿ㐀-䶵一-鿌ꀀ-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘫꙀ-꙯ꙴ-꙽ꙿ-ꚗꚟ-꛱ꜗ-ꜟꜢ-ꞈꞋ-ꞎꞐ-ꞓꞠ-Ɦꟸ-ꠧꡀ-ꡳꢀ-꣄꣐-꣙꣠-ꣷꣻ꤀-꤭ꤰ-꥓ꥠ-ꥼꦀ-꧀ꧏ-꧙ꨀ-ꨶꩀ-ꩍ꩐-꩙ꩠ-ꩶꩺꩻꪀ-ꫂꫛ-ꫝꫠ-ꫯꫲ-꫶ꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꯀ-ꯪ꯬꯭꯰-꯹가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻ︀-️︠-︦︳︴﹍-﹏ﹰ-ﹴﹶ-ﻼ0-9A-Z_a-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ]")},fb={name:"SyntaxTree",processComment:function(a){var b,c;if(!(a.type===bb.Program&&a.body.length>0)){for(pb.trailingComments.length>0?pb.trailingComments[0].range[0]>=a.range[1]?(c=pb.trailingComments,pb.trailingComments=[]):pb.trailingComments.length=0:pb.bottomRightStack.length>0&&pb.bottomRightStack[pb.bottomRightStack.length-1].trailingComments&&pb.bottomRightStack[pb.bottomRightStack.length-1].trailingComments[0].range[0]>=a.range[1]&&(c=pb.bottomRightStack[pb.bottomRightStack.length-1].trailingComments,delete pb.bottomRightStack[pb.bottomRightStack.length-1].trailingComments);pb.bottomRightStack.length>0&&pb.bottomRightStack[pb.bottomRightStack.length-1].range[0]>=a.range[0];)b=pb.bottomRightStack.pop();b?b.leadingComments&&b.leadingComments[b.leadingComments.length-1].range[1]<=a.range[0]&&(a.leadingComments=b.leadingComments,delete b.leadingComments):pb.leadingComments.length>0&&pb.leadingComments[pb.leadingComments.length-1].range[1]<=a.range[0]&&(a.leadingComments=pb.leadingComments,pb.leadingComments=[]),c&&(a.trailingComments=c),pb.bottomRightStack.push(a)}},markEnd:function(a,b){return pb.range&&(a.range=[b.start,ib]),pb.loc&&(a.loc=new M(void 0===b.startLineNumber?b.lineNumber:b.startLineNumber,b.start-(void 0===b.startLineStart?b.lineStart:b.startLineStart),jb,ib-kb),this.postProcess(a)),pb.attachComment&&this.processComment(a),a},postProcess:function(a){return pb.source&&(a.loc.source=pb.source),a},createArrayExpression:function(a){return{type:bb.ArrayExpression,elements:a}},createAssignmentExpression:function(a,b,c){return{type:bb.AssignmentExpression,operator:a,left:b,right:c}},createBinaryExpression:function(a,b,c){return{type:"||"===a||"&&"===a?bb.LogicalExpression:bb.BinaryExpression,operator:a,left:b,right:c}},createBlockStatement:function(a){return{type:bb.BlockStatement,body:a}},createBreakStatement:function(a){return{type:bb.BreakStatement,label:a}},createCallExpression:function(a,b){return{type:bb.CallExpression,callee:a,arguments:b}},createCatchClause:function(a,b){return{type:bb.CatchClause,param:a,body:b}},createConditionalExpression:function(a,b,c){return{type:bb.ConditionalExpression,test:a,consequent:b,alternate:c}},createContinueStatement:function(a){return{type:bb.ContinueStatement,label:a}},createDebuggerStatement:function(){return{type:bb.DebuggerStatement}},createDoWhileStatement:function(a,b){return{type:bb.DoWhileStatement,body:a,test:b}},createEmptyStatement:function(){return{type:bb.EmptyStatement}},createExpressionStatement:function(a){return{type:bb.ExpressionStatement,expression:a}},createForStatement:function(a,b,c,d){return{type:bb.ForStatement,init:a,test:b,update:c,body:d}},createForInStatement:function(a,b,c){return{type:bb.ForInStatement,left:a,right:b,body:c,each:!1}},createFunctionDeclaration:function(a,b,c,d){return{type:bb.FunctionDeclaration,id:a,params:b,defaults:c,body:d,rest:null,generator:!1,expression:!1}},createFunctionExpression:function(a,b,c,d){return{type:bb.FunctionExpression,id:a,params:b,defaults:c,body:d,rest:null,generator:!1,expression:!1}},createIdentifier:function(a){return{type:bb.Identifier,name:a}},createIfStatement:function(a,b,c){return{type:bb.IfStatement,test:a,consequent:b,alternate:c}},createLabeledStatement:function(a,b){return{type:bb.LabeledStatement,label:a,body:b}},createLiteral:function(a){return{type:bb.Literal,value:a.value,raw:gb.slice(a.start,a.end)}},createMemberExpression:function(a,b,c){return{type:bb.MemberExpression,computed:"["===a,object:b,property:c}},createNewExpression:function(a,b){return{type:bb.NewExpression,callee:a,arguments:b}},createObjectExpression:function(a){return{type:bb.ObjectExpression,properties:a}},createPostfixExpression:function(a,b){return{type:bb.UpdateExpression,operator:a,argument:b,prefix:!1}},createProgram:function(a){return{type:bb.Program,body:a}},createProperty:function(a,b,c){return{type:bb.Property,key:b,value:c,kind:a}},createReturnStatement:function(a){return{type:bb.ReturnStatement,argument:a}},createSequenceExpression:function(a){return{type:bb.SequenceExpression,expressions:a}},createSwitchCase:function(a,b){return{type:bb.SwitchCase,test:a,consequent:b}},createSwitchStatement:function(a,b){return{type:bb.SwitchStatement,discriminant:a,cases:b}},createThisExpression:function(){return{type:bb.ThisExpression}},createThrowStatement:function(a){return{type:bb.ThrowStatement,argument:a}},createTryStatement:function(a,b,c,d){return{type:bb.TryStatement,block:a,guardedHandlers:b,handlers:c,finalizer:d}},createUnaryExpression:function(a,b){return"++"===a||"--"===a?{type:bb.UpdateExpression,operator:a,argument:b,prefix:!0}:{type:bb.UnaryExpression,operator:a,argument:b,prefix:!0}},createVariableDeclaration:function(a,b){return{type:bb.VariableDeclaration,declarations:a,kind:b}},createVariableDeclarator:function(a,b){return{type:bb.VariableDeclarator,id:a,init:b}},createWhileStatement:function(a,b){return{type:bb.WhileStatement,test:a,body:b}},createWithStatement:function(a,b){return{type:bb.WithStatement,object:a,body:b}}},a.version="1.2.2",a.tokenize=Ya,a.parse=Za,a.Syntax=function(){var a,b={};"function"==typeof Object.create&&(b=Object.create(null));for(a in bb)bb.hasOwnProperty(a)&&(b[a]=bb[a]);return"function"==typeof Object.freeze&&Object.freeze(b),b}()})},{}],1:[function(a,b,c){(function(d){var e=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,JSON_PATH:3,DOLLAR:4,PATH_COMPONENTS:5,LEADING_CHILD_MEMBER_EXPRESSION:6,PATH_COMPONENT:7,MEMBER_COMPONENT:8,SUBSCRIPT_COMPONENT:9,CHILD_MEMBER_COMPONENT:10,DESCENDANT_MEMBER_COMPONENT:11,DOT:12,MEMBER_EXPRESSION:13,DOT_DOT:14,STAR:15,IDENTIFIER:16,SCRIPT_EXPRESSION:17,INTEGER:18,END:19,CHILD_SUBSCRIPT_COMPONENT:20,DESCENDANT_SUBSCRIPT_COMPONENT:21,"[":22,SUBSCRIPT:23,"]":24,SUBSCRIPT_EXPRESSION:25,SUBSCRIPT_EXPRESSION_LIST:26,SUBSCRIPT_EXPRESSION_LISTABLE:27,",":28,STRING_LITERAL:29,ARRAY_SLICE:30,FILTER_EXPRESSION:31,QQ_STRING:32,Q_STRING:33,$accept:0,$end:1},terminals_:{2:"error",4:"DOLLAR",12:"DOT",14:"DOT_DOT",15:"STAR",16:"IDENTIFIER",17:"SCRIPT_EXPRESSION",18:"INTEGER",19:"END",22:"[",24:"]",28:",",30:"ARRAY_SLICE",31:"FILTER_EXPRESSION",32:"QQ_STRING",33:"Q_STRING"},productions_:[0,[3,1],[3,2],[3,1],[3,2],[5,1],[5,2],[7,1],[7,1],[8,1],[8,1],[10,2],[6,1],[11,2],[13,1],[13,1],[13,1],[13,1],[13,1],[9,1],[9,1],[20,3],[21,4],[23,1],[23,1],[26,1],[26,3],[27,1],[27,1],[27,1],[25,1],[25,1],[25,1],[29,1],[29,1]],performAction:function(a,b,d,e,f,g,h){e.ast||(e.ast=c,c.initialize());var i=g.length-1;switch(f){case 1:return e.ast.set({expression:{type:"root",value:g[i]}}),e.ast.unshift(),e.ast.yield();case 2:return e.ast.set({expression:{type:"root",value:g[i-1]}}),e.ast.unshift(),e.ast.yield();case 3:return e.ast.unshift(),e.ast.yield();case 4:return e.ast.set({operation:"member",scope:"child",expression:{type:"identifier",value:g[i-1]}}),e.ast.unshift(),e.ast.yield();case 5:case 6:break;case 7:e.ast.set({operation:"member"}),e.ast.push();break;case 8:e.ast.set({operation:"subscript"}),e.ast.push();break;case 9:e.ast.set({scope:"child"});break;case 10:e.ast.set({scope:"descendant"});break;case 11:break;case 12:e.ast.set({scope:"child",operation:"member"});break;case 13:break;case 14:e.ast.set({expression:{type:"wildcard",value:g[i]}});break;case 15:e.ast.set({expression:{type:"identifier",value:g[i]}});break;case 16:e.ast.set({expression:{type:"script_expression",value:g[i]}});break;case 17:e.ast.set({expression:{type:"numeric_literal",value:parseInt(g[i])}});break;case 18:break;case 19:e.ast.set({scope:"child"});break;case 20:e.ast.set({scope:"descendant"});break;case 21:case 22:case 23:break;case 24:g[i].length>1?e.ast.set({expression:{type:"union",value:g[i]}}):this.$=g[i];break;case 25:this.$=[g[i]];break;case 26:this.$=g[i-2].concat(g[i]);break;case 27:this.$={expression:{type:"numeric_literal",value:parseInt(g[i])}},e.ast.set(this.$);break;case 28:this.$={expression:{type:"string_literal",value:g[i]}},e.ast.set(this.$);break;case 29:this.$={expression:{type:"slice",value:g[i]}},e.ast.set(this.$);break;case 30:this.$={expression:{type:"wildcard",value:g[i]}},e.ast.set(this.$);break;case 31:this.$={expression:{type:"script_expression",value:g[i]}},e.ast.set(this.$);break;case 32:this.$={expression:{type:"filter_expression",value:g[i]}},e.ast.set(this.$);break;case 33:case 34:this.$=g[i]}},table:[{3:1,4:[1,2],6:3,13:4,15:[1,5],16:[1,6],17:[1,7],18:[1,8],19:[1,9]},{1:[3]},{1:[2,1],5:10,7:11,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,3],5:21,7:11,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,12],12:[2,12],14:[2,12],22:[2,12]},{1:[2,14],12:[2,14],14:[2,14],22:[2,14]},{1:[2,15],12:[2,15],14:[2,15],22:[2,15]},{1:[2,16],12:[2,16],14:[2,16],22:[2,16]},{1:[2,17],12:[2,17],14:[2,17],22:[2,17]},{1:[2,18],12:[2,18],14:[2,18],22:[2,18]},{1:[2,2],7:22,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,5],12:[2,5],14:[2,5],22:[2,5]},{1:[2,7],12:[2,7],14:[2,7],22:[2,7]},{1:[2,8],12:[2,8],14:[2,8],22:[2,8]},{1:[2,9],12:[2,9],14:[2,9],22:[2,9]},{1:[2,10],12:[2,10],14:[2,10],22:[2,10]},{1:[2,19],12:[2,19],14:[2,19],22:[2,19]},{1:[2,20],12:[2,20],14:[2,20],22:[2,20]},{13:23,15:[1,5],16:[1,6],17:[1,7],18:[1,8],19:[1,9]},{13:24,15:[1,5],16:[1,6],17:[1,7],18:[1,8],19:[1,9],22:[1,25]},{15:[1,29],17:[1,30],18:[1,33],23:26,25:27,26:28,27:32,29:34,30:[1,35],31:[1,31],32:[1,36],33:[1,37]},{1:[2,4],7:22,8:12,9:13,10:14,11:15,12:[1,18],14:[1,19],20:16,21:17,22:[1,20]},{1:[2,6],12:[2,6],14:[2,6],22:[2,6]},{1:[2,11],12:[2,11],14:[2,11],22:[2,11]},{1:[2,13],12:[2,13],14:[2,13],22:[2,13]},{15:[1,29],17:[1,30],18:[1,33],23:38,25:27,26:28,27:32,29:34,30:[1,35],31:[1,31],32:[1,36],33:[1,37]},{24:[1,39]},{24:[2,23]},{24:[2,24],28:[1,40]},{24:[2,30]},{24:[2,31]},{24:[2,32]},{24:[2,25],28:[2,25]},{24:[2,27],28:[2,27]},{24:[2,28],28:[2,28]},{24:[2,29],28:[2,29]},{24:[2,33],28:[2,33]},{24:[2,34],28:[2,34]},{24:[1,41]},{1:[2,21],12:[2,21],14:[2,21],22:[2,21]},{18:[1,33],27:42,29:34,30:[1,35],32:[1,36],33:[1,37]},{1:[2,22],12:[2,22],14:[2,22],22:[2,22]},{24:[2,26],28:[2,26]}],defaultActions:{27:[2,23],29:[2,30],30:[2,31],31:[2,32]},parseError:function(a,b){if(!b.recoverable)throw new Error(a);this.trace(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||m,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0,l=2,m=1,n=f.slice.call(arguments,1);this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,void 0===this.lexer.yylloc&&(this.lexer.yylloc={});var o=this.lexer.yylloc;f.push(o);var p=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError?this.parseError=this.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var q,r,s,t,u,v,w,x,y,z={};;){if(s=d[d.length-1],this.defaultActions[s]?t=this.defaultActions[s]:(null!==q&&void 0!==q||(q=b()),t=g[s]&&g[s][q]),void 0===t||!t.length||!t[0]){var A="";y=[];for(v in g[s])this.terminals_[v]&&v>l&&y.push("'"+this.terminals_[v]+"'");A=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+y.join(", ")+", got '"+(this.terminals_[q]||q)+"'":"Parse error on line "+(i+1)+": Unexpected "+(q==m?"end of input":"'"+(this.terminals_[q]||q)+"'"),this.parseError(A,{text:this.lexer.match,token:this.terminals_[q]||q,line:this.lexer.yylineno,loc:o,expected:y})}if(t[0]instanceof Array&&t.length>1)throw new Error("Parse Error: multiple actions possible at state: "+s+", token: "+q);switch(t[0]){case 1:d.push(q),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(t[1]),q=null,r?(q=r,r=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,o=this.lexer.yylloc,k>0&&k--);break;case 2:if(w=this.productions_[t[1]][1],z.$=e[e.length-w],z._$={first_line:f[f.length-(w||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(w||1)].first_column,last_column:f[f.length-1].last_column},p&&(z._$.range=[f[f.length-(w||1)].range[0],f[f.length-1].range[1]]),void 0!==(u=this.performAction.apply(z,[h,j,i,this.yy,t[1],e,f].concat(n))))return u;w&&(d=d.slice(0,-1*w*2),e=e.slice(0,-1*w),f=f.slice(0,-1*w)),d.push(this.productions_[t[1]][0]),e.push(z.$),f.push(z._$),x=g[d[d.length-2]][d[d.length-1]],d.push(x);break;case 3:return!0}}return!0}},c={initialize:function(){this._nodes=[],this._node={},this._stash=[]},set:function(a){for(var b in a)this._node[b]=a[b];return this._node},node:function(a){return arguments.length&&(this._node=a),this._node},push:function(){this._nodes.push(this._node),this._node={}},unshift:function(){this._nodes.unshift(this._node),this._node={}},yield:function(){var a=this._nodes;return this.initialize(),a}},d=function(){return{EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];return this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a,a.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},test_match:function(a,b){var c,d,e;if(this.options.backtrack_lexer&&(e={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(e.yylloc.range=this.yylloc.range.slice(0))),d=a[0].match(/(?:\r\n?|\n).*/g),d&&(this.yylineno+=d.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:d?d[d.length-1].length-d[d.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+a[0].length},this.yytext+=a[0],this.match+=a[0],this.matches=a,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(a[0].length),this.matched+=a[0],c=this.performAction.call(this,this.yy,this,b,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),c)return c;if(this._backtrack){for(var f in e)this[f]=e[f];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d;this._more||(this.yytext="",this.match="");for(var e=this._currentRules(),f=0;f<e.length;f++)if((c=this._input.match(this.rules[e[f]]))&&(!b||c[0].length>b[0].length)){if(b=c,d=f,this.options.backtrack_lexer){if(!1!==(a=this.test_match(c,e[f])))return a;if(this._backtrack){b=!1;continue}return!1}if(!this.options.flex)break}return b?!1!==(a=this.test_match(b,e[d]))&&a:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return a||this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(a){return a=this.conditionStack.length-1-Math.abs(a||0),a>=0?this.conditionStack[a]:"INITIAL"},pushState:function(a){this.begin(a)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(a,b,c,d){switch(c){case 0:return 4;case 1:return 14;case 2:return 12;case 3:return 15;case 4:return 16;case 5:return 22;case 6:return 24;case 7:return 28;case 8:return 30;case 9:return 18;case 10:return b.yytext=b.yytext.substr(1,b.yyleng-2),32;case 11:return b.yytext=b.yytext.substr(1,b.yyleng-2),33;case 12:return 17;case 13:return 31}},rules:[/^(?:\$)/,/^(?:\.\.)/,/^(?:\.)/,/^(?:\*)/,/^(?:[a-zA-Z_]+[a-zA-Z0-9_]*)/,/^(?:\[)/,/^(?:\])/,/^(?:,)/,/^(?:((-?(?:0|[1-9][0-9]*)))?\:((-?(?:0|[1-9][0-9]*)))?(\:((-?(?:0|[1-9][0-9]*)))?)?)/,/^(?:(-?(?:0|[1-9][0-9]*)))/,/^(?:"(?:\\["bfnrt\/\\]|\\u[a-fA-F0-9]{4}|[^"\\])*")/,/^(?:'(?:\\['bfnrt\/\\]|\\u[a-fA-F0-9]{4}|[^'\\])*')/,/^(?:\(.+?\)(?=\]))/,/^(?:\?\(.+?\)(?=\]))/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}}}();return b.lexer=d,a.prototype=b,b.Parser=a,new a}();void 0!==a&&void 0!==c&&(c.parser=e,c.Parser=e.Parser,c.parse=function(){return e.parse.apply(e,arguments)},c.main=function(b){b[1]||(console.log("Usage: "+b[0]+" FILE"),d.exit(1));var e=a("fs").readFileSync(a("path").normalize(b[1]),"utf8");return c.parser.parse(e)},void 0!==b&&a.main===b&&c.main(d.argv.slice(1)))}).call(this,a("_process"))},{_process:14,fs:12,path:13}],2:[function(a,b,c){b.exports={identifier:"[a-zA-Z_]+[a-zA-Z0-9_]*",integer:"-?(?:0|[1-9][0-9]*)",qq_string:'"(?:\\\\["bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^"\\\\])*"',q_string:"'(?:\\\\['bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^'\\\\])*'"}},{}],3:[function(a,b,c){var d=a("./dict"),e=a("fs"),f={lex:{macros:{esc:"\\\\",int:d.integer},rules:[["\\$","return 'DOLLAR'"],["\\.\\.","return 'DOT_DOT'"],["\\.","return 'DOT'"],["\\*","return 'STAR'"],[d.identifier,"return 'IDENTIFIER'"],["\\[","return '['"],["\\]","return ']'"],[",","return ','"],["({int})?\\:({int})?(\\:({int})?)?","return 'ARRAY_SLICE'"],["{int}","return 'INTEGER'"],[d.qq_string,"yytext = yytext.substr(1,yyleng-2); return 'QQ_STRING';"],[d.q_string,"yytext = yytext.substr(1,yyleng-2); return 'Q_STRING';"],["\\(.+?\\)(?=\\])","return 'SCRIPT_EXPRESSION'"],["\\?\\(.+?\\)(?=\\])","return 'FILTER_EXPRESSION'"]]},start:"JSON_PATH",bnf:{JSON_PATH:[["DOLLAR",'yy.ast.set({ expression: { type: "root", value: $1 } }); yy.ast.unshift(); return yy.ast.yield()'],["DOLLAR PATH_COMPONENTS",'yy.ast.set({ expression: { type: "root", value: $1 } }); yy.ast.unshift(); return yy.ast.yield()'],["LEADING_CHILD_MEMBER_EXPRESSION","yy.ast.unshift(); return yy.ast.yield()"],["LEADING_CHILD_MEMBER_EXPRESSION PATH_COMPONENTS",'yy.ast.set({ operation: "member", scope: "child", expression: { type: "identifier", value: $1 }}); yy.ast.unshift(); return yy.ast.yield()']],PATH_COMPONENTS:[["PATH_COMPONENT",""],["PATH_COMPONENTS PATH_COMPONENT",""]],PATH_COMPONENT:[["MEMBER_COMPONENT",'yy.ast.set({ operation: "member" }); yy.ast.push()'],["SUBSCRIPT_COMPONENT",'yy.ast.set({ operation: "subscript" }); yy.ast.push() ']],MEMBER_COMPONENT:[["CHILD_MEMBER_COMPONENT",'yy.ast.set({ scope: "child" })'],["DESCENDANT_MEMBER_COMPONENT",'yy.ast.set({ scope: "descendant" })']],CHILD_MEMBER_COMPONENT:[["DOT MEMBER_EXPRESSION",""]],LEADING_CHILD_MEMBER_EXPRESSION:[["MEMBER_EXPRESSION",'yy.ast.set({ scope: "child", operation: "member" })']],DESCENDANT_MEMBER_COMPONENT:[["DOT_DOT MEMBER_EXPRESSION",""]],MEMBER_EXPRESSION:[["STAR",'yy.ast.set({ expression: { type: "wildcard", value: $1 } })'],["IDENTIFIER",'yy.ast.set({ expression: { type: "identifier", value: $1 } })'],["SCRIPT_EXPRESSION",'yy.ast.set({ expression: { type: "script_expression", value: $1 } })'],["INTEGER",'yy.ast.set({ expression: { type: "numeric_literal", value: parseInt($1) } })'],["END",""]],SUBSCRIPT_COMPONENT:[["CHILD_SUBSCRIPT_COMPONENT",'yy.ast.set({ scope: "child" })'],["DESCENDANT_SUBSCRIPT_COMPONENT",'yy.ast.set({ scope: "descendant" })']],CHILD_SUBSCRIPT_COMPONENT:[["[ SUBSCRIPT ]",""]],DESCENDANT_SUBSCRIPT_COMPONENT:[["DOT_DOT [ SUBSCRIPT ]",""]],SUBSCRIPT:[["SUBSCRIPT_EXPRESSION",""],["SUBSCRIPT_EXPRESSION_LIST",'$1.length > 1? yy.ast.set({ expression: { type: "union", value: $1 } }) : $$ = $1']],SUBSCRIPT_EXPRESSION_LIST:[["SUBSCRIPT_EXPRESSION_LISTABLE","$$ = [$1]"],["SUBSCRIPT_EXPRESSION_LIST , SUBSCRIPT_EXPRESSION_LISTABLE","$$ = $1.concat($3)"]],SUBSCRIPT_EXPRESSION_LISTABLE:[["INTEGER",'$$ = { expression: { type: "numeric_literal", value: parseInt($1) } }; yy.ast.set($$)'],["STRING_LITERAL",'$$ = { expression: { type: "string_literal", value: $1 } }; yy.ast.set($$)'],["ARRAY_SLICE",'$$ = { expression: { type: "slice", value: $1 } }; yy.ast.set($$)']],SUBSCRIPT_EXPRESSION:[["STAR",'$$ = { expression: { type: "wildcard", value: $1 } }; yy.ast.set($$)'],["SCRIPT_EXPRESSION",'$$ = { expression: { type: "script_expression", value: $1 } }; yy.ast.set($$)'],["FILTER_EXPRESSION",'$$ = { expression: { type: "filter_expression", value: $1 } }; yy.ast.set($$)']],STRING_LITERAL:[["QQ_STRING","$$ = $1"],["Q_STRING","$$ = $1"]]}};e.readFileSync&&(f.moduleInclude=e.readFileSync(a.resolve("../include/module.js")),f.actionInclude=e.readFileSync(a.resolve("../include/action.js"))),b.exports=f},{"./dict":2,fs:12}],4:[function(a,b,c){function d(b,c,d){var e=a("./index"),f=m.parse(c).body[0].expression,g=j(f,{"@":b.value}),h=d.replace(/\{\{\s*value\s*\}\}/g,g),i=e.nodes(b.value,h);return i.forEach(function(a){a.path=b.path.concat(a.path.slice(1))}),i}function e(a){return Array.isArray(a)}function f(a){return a&&!(a instanceof Array)&&a instanceof Object}function g(a){return function(b,c,d,g){var h=b.value,i=b.path,j=[],k=function(b,h){e(b)?(b.forEach(function(a,b){j.length>=g||d(b,a,c)&&j.push({path:h.concat(b),value:a})}),b.forEach(function(b,c){j.length>=g||a&&k(b,h.concat(c))})):f(b)&&(this.keys(b).forEach(function(a){j.length>=g||d(a,b[a],c)&&j.push({path:h.concat(a),value:b[a]})}),this.keys(b).forEach(function(c){j.length>=g||a&&k(b[c],h.concat(c))}))}.bind(this);return k(h,i),j}}function h(a){return function(b,c,d){return this.descend(c,b.expression.value,a,d)}}function i(a){return function(b,c,d){return this.traverse(c,b.expression.value,a,d)}}function j(){try{return o.apply(this,arguments)}catch(a){}}function k(a){return a=a.filter(function(a){return a}),p(a,function(a){return a.path.map(function(a){return String(a).replace("-","--")}).join("-")})}function l(a){var b=String(a);return b.match(/^-?[0-9]+$/)?parseInt(b):null}var m=a("./aesprim"),n=a("./slice"),o=a("static-eval"),p=a("underscore").uniq,q=function(){return this.initialize.apply(this,arguments)};q.prototype.initialize=function(){this.traverse=g(!0),this.descend=g()},q.prototype.keys=Object.keys,q.prototype.resolve=function(a){var b=[a.operation,a.scope,a.expression.type].join("-"),c=this._fns[b];if(!c)throw new Error("couldn't resolve key: "+b);return c.bind(this)},q.prototype.register=function(a,b){if(!b instanceof Function)throw new Error("handler must be a function");this._fns[a]=b},q.prototype._fns={"member-child-identifier":function(a,b){var c=a.expression.value,d=b.value;if(d instanceof Object&&c in d)return[{value:d[c],path:b.path.concat(c)}]},"member-descendant-identifier":i(function(a,b,c){return a==c}),"subscript-child-numeric_literal":h(function(a,b,c){return a===c}),"member-child-numeric_literal":h(function(a,b,c){return String(a)===String(c)}),"subscript-descendant-numeric_literal":i(function(a,b,c){return a===c}),"member-child-wildcard":h(function(){return!0}),"member-descendant-wildcard":i(function(){return!0}),"subscript-descendant-wildcard":i(function(){return!0}),"subscript-child-wildcard":h(function(){return!0}),"subscript-child-slice":function(a,b){if(e(b.value)){var c=a.expression.value.split(":").map(l),d=b.value.map(function(a,c){return{value:a,path:b.path.concat(c)}});return n.apply(null,[d].concat(c))}},"subscript-child-union":function(a,b){var c=[];return a.expression.value.forEach(function(a){var d={operation:"subscript",scope:"child",expression:a.expression},e=this.resolve(d),f=e(d,b);f&&(c=c.concat(f))},this),k(c)},"subscript-descendant-union":function(b,c,d){var e=a(".."),f=this,g=[];return e.nodes(c,"$..*").slice(1).forEach(function(a){g.length>=d||b.expression.value.forEach(function(b){var c={operation:"subscript",scope:"child",expression:b.expression},d=f.resolve(c),e=d(c,a);g=g.concat(e)})}),k(g)},"subscript-child-filter_expression":function(a,b,c){var d=a.expression.value.slice(2,-1),e=m.parse(d).body[0].expression,f=function(a,b){return j(e,{"@":b})};return this.descend(b,null,f,c)},"subscript-descendant-filter_expression":function(a,b,c){var d=a.expression.value.slice(2,-1),e=m.parse(d).body[0].expression,f=function(a,b){return j(e,{"@":b})};return this.traverse(b,null,f,c)},"subscript-child-script_expression":function(a,b){return d(b,a.expression.value.slice(1,-1),"$[{{value}}]")},"member-child-script_expression":function(a,b){return d(b,a.expression.value.slice(1,-1),"$.{{value}}")},"member-descendant-script_expression":function(a,b){return d(b,a.expression.value.slice(1,-1),"$..value")}},q.prototype._fns["subscript-child-string_literal"]=q.prototype._fns["member-child-identifier"],q.prototype._fns["member-descendant-numeric_literal"]=q.prototype._fns["subscript-descendant-string_literal"]=q.prototype._fns["member-descendant-identifier"],b.exports=q},{"..":"jsonpath","./aesprim":"./aesprim","./index":5,"./slice":7,"static-eval":15,underscore:12}],5:[function(a,b,c){function d(a){return"[object String]"==Object.prototype.toString.call(a)}var e=a("assert"),f=a("./dict"),g=a("./parser"),h=a("./handlers"),i=function(){this.initialize.apply(this,arguments)};i.prototype.initialize=function(){this.parser=new g,this.handlers=new h},i.prototype.parse=function(a){return e.ok(d(a),"we need a path"),this.parser.parse(a)},i.prototype.parent=function(a,b){e.ok(a instanceof Object,"obj needs to be an object"),e.ok(b,"we need a path");var c=this.nodes(a,b)[0];c.path.pop();return this.value(a,c.path)},i.prototype.apply=function(a,b,c){e.ok(a instanceof Object,"obj needs to be an object"),e.ok(b,"we need a path"),e.equal(typeof c,"function","fn needs to be function");var d=this.nodes(a,b).sort(function(a,b){return b.path.length-a.path.length});return d.forEach(function(b){var d=b.path.pop(),e=this.value(a,this.stringify(b.path)),f=b.value=c.call(a,e[d]);e[d]=f},this),d},i.prototype.value=function(a,b,c){if(e.ok(a instanceof Object,"obj needs to be an object"),e.ok(b,"we need a path"),arguments.length>=3){var d=this.nodes(a,b).shift();if(!d)return this._vivify(a,b,c);var f=d.path.slice(-1).shift();this.parent(a,this.stringify(d.path))[f]=c}return this.query(a,this.stringify(b),1).shift()},i.prototype._vivify=function(a,b,c){var d=this;e.ok(a instanceof Object,"obj needs to be an object"),e.ok(b,"we need a path");var f=this.parser.parse(b).map(function(a){return a.expression.value}),g=function(b,c){var e=b.pop(),f=d.value(a,b);f||(g(b.concat(),"string"==typeof e?{}:[]),f=d.value(a,b)),f[e]=c};return g(f,c),this.query(a,b)[0]},i.prototype.query=function(a,b,c){return e.ok(a instanceof Object,"obj needs to be an object"),e.ok(d(b),"we need a path"),this.nodes(a,b,c).map(function(a){return a.value})},i.prototype.paths=function(a,b,c){return e.ok(a instanceof Object,"obj needs to be an object"),e.ok(b,"we need a path"),this.nodes(a,b,c).map(function(a){return a.path})},i.prototype.nodes=function(a,b,c){if(e.ok(a instanceof Object,"obj needs to be an object"),e.ok(b,"we need a path"),0===c)return[];var d=this.parser.parse(b),f=this.handlers,g=[{path:["$"],value:a}],h=[];return d.length&&"root"==d[0].expression.type&&d.shift(),d.length?(d.forEach(function(a,b){if(!(h.length>=c)){var e=f.resolve(a),i=[];g.forEach(function(f){if(!(h.length>=c)){var g=e(a,f,c);b==d.length-1?h=h.concat(g||[]):i=i.concat(g||[])}}),g=i}}),c?h.slice(0,c):h):g},
-i.prototype.stringify=function(a){e.ok(a,"we need a path");var b="$",c={"descendant-member":"..{{value}}","child-member":".{{value}}","descendant-subscript":"..[{{value}}]","child-subscript":"[{{value}}]"};return a=this._normalize(a),a.forEach(function(a){if("root"!=a.expression.type){var d,e=[a.scope,a.operation].join("-"),f=c[e];if(d="string_literal"==a.expression.type?JSON.stringify(a.expression.value):a.expression.value,!f)throw new Error("couldn't find template "+e);b+=f.replace(/{{value}}/,d)}}),b},i.prototype._normalize=function(a){if(e.ok(a,"we need a path"),"string"==typeof a)return this.parser.parse(a);if(Array.isArray(a)&&"string"==typeof a[0]){var b=[{expression:{type:"root",value:"$"}}];return a.forEach(function(a,c){if("$"!=a||0!==c)if("string"==typeof a&&a.match("^"+f.identifier+"$"))b.push({operation:"member",scope:"child",expression:{value:a,type:"identifier"}});else{var d="number"==typeof a?"numeric_literal":"string_literal";b.push({operation:"subscript",scope:"child",expression:{value:a,type:d}})}}),b}if(Array.isArray(a)&&"object"==typeof a[0])return a;throw new Error("couldn't understand path "+a)},i.Handlers=h,i.Parser=g;var j=new i;j.JSONPath=i,b.exports=j},{"./dict":2,"./handlers":4,"./parser":6,assert:8}],6:[function(a,b,c){var d=a("./grammar"),e=a("../generated/parser"),f=function(){var a=new e.Parser,b=a.parseError;return a.yy.parseError=function(){a.yy.ast&&a.yy.ast.initialize(),b.apply(a,arguments)},a};f.grammar=d,b.exports=f},{"../generated/parser":1,"./grammar":3}],7:[function(a,b,c){function d(a){return String(a).match(/^[0-9]+$/)?parseInt(a):Number.isFinite(a)?parseInt(a,10):0}b.exports=function(a,b,c,e){if("string"==typeof b)throw new Error("start cannot be a string");if("string"==typeof c)throw new Error("end cannot be a string");if("string"==typeof e)throw new Error("step cannot be a string");var f=a.length;if(0===e)throw new Error("step cannot be zero");if(e=e?d(e):1,b=b<0?f+b:b,c=c<0?f+c:c,b=d(0===b?0:b||(e>0?0:f-1)),c=d(0===c?0:c||(e>0?f:-1)),b=e>0?Math.max(0,b):Math.min(f,b),c=e>0?Math.min(c,f):Math.max(-1,c),e>0&&c<=b)return[];if(e<0&&b<=c)return[];for(var g=[],h=b;h!=c&&!(e<0&&h<=c||e>0&&h>=c);h+=e)g.push(a[h]);return g}},{}],8:[function(a,b,c){function d(a,b){return n.isUndefined(b)?""+b:n.isNumber(b)&&!isFinite(b)?b.toString():n.isFunction(b)||n.isRegExp(b)?b.toString():b}function e(a,b){return n.isString(a)?a.length<b?a:a.slice(0,b):a}function f(a){return e(JSON.stringify(a.actual,d),128)+" "+a.operator+" "+e(JSON.stringify(a.expected,d),128)}function g(a,b,c,d,e){throw new q.AssertionError({message:c,actual:a,expected:b,operator:d,stackStartFunction:e})}function h(a,b){a||g(a,!0,b,"==",q.ok)}function i(a,b){if(a===b)return!0;if(n.isBuffer(a)&&n.isBuffer(b)){if(a.length!=b.length)return!1;for(var c=0;c<a.length;c++)if(a[c]!==b[c])return!1;return!0}return n.isDate(a)&&n.isDate(b)?a.getTime()===b.getTime():n.isRegExp(a)&&n.isRegExp(b)?a.source===b.source&&a.global===b.global&&a.multiline===b.multiline&&a.lastIndex===b.lastIndex&&a.ignoreCase===b.ignoreCase:n.isObject(a)||n.isObject(b)?k(a,b):a==b}function j(a){return"[object Arguments]"==Object.prototype.toString.call(a)}function k(a,b){if(n.isNullOrUndefined(a)||n.isNullOrUndefined(b))return!1;if(a.prototype!==b.prototype)return!1;if(n.isPrimitive(a)||n.isPrimitive(b))return a===b;var c=j(a),d=j(b);if(c&&!d||!c&&d)return!1;if(c)return a=o.call(a),b=o.call(b),i(a,b);var e,f,g=r(a),h=r(b);if(g.length!=h.length)return!1;for(g.sort(),h.sort(),f=g.length-1;f>=0;f--)if(g[f]!=h[f])return!1;for(f=g.length-1;f>=0;f--)if(e=g[f],!i(a[e],b[e]))return!1;return!0}function l(a,b){return!(!a||!b)&&("[object RegExp]"==Object.prototype.toString.call(b)?b.test(a):a instanceof b||!0===b.call({},a))}function m(a,b,c,d){var e;n.isString(c)&&(d=c,c=null);try{b()}catch(f){e=f}if(d=(c&&c.name?" ("+c.name+").":".")+(d?" "+d:"."),a&&!e&&g(e,c,"Missing expected exception"+d),!a&&l(e,c)&&g(e,c,"Got unwanted exception"+d),a&&e&&c&&!l(e,c)||!a&&e)throw e}var n=a("util/"),o=Array.prototype.slice,p=Object.prototype.hasOwnProperty,q=b.exports=h;q.AssertionError=function(a){this.name="AssertionError",this.actual=a.actual,this.expected=a.expected,this.operator=a.operator,a.message?(this.message=a.message,this.generatedMessage=!1):(this.message=f(this),this.generatedMessage=!0);var b=a.stackStartFunction||g;if(Error.captureStackTrace)Error.captureStackTrace(this,b);else{var c=new Error;if(c.stack){var d=c.stack,e=b.name,h=d.indexOf("\n"+e);if(h>=0){var i=d.indexOf("\n",h+1);d=d.substring(i+1)}this.stack=d}}},n.inherits(q.AssertionError,Error),q.fail=g,q.ok=h,q.equal=function(a,b,c){a!=b&&g(a,b,c,"==",q.equal)},q.notEqual=function(a,b,c){a==b&&g(a,b,c,"!=",q.notEqual)},q.deepEqual=function(a,b,c){i(a,b)||g(a,b,c,"deepEqual",q.deepEqual)},q.notDeepEqual=function(a,b,c){i(a,b)&&g(a,b,c,"notDeepEqual",q.notDeepEqual)},q.strictEqual=function(a,b,c){a!==b&&g(a,b,c,"===",q.strictEqual)},q.notStrictEqual=function(a,b,c){a===b&&g(a,b,c,"!==",q.notStrictEqual)},q.throws=function(a,b,c){m.apply(this,[!0].concat(o.call(arguments)))},q.doesNotThrow=function(a,b){m.apply(this,[!1].concat(o.call(arguments)))},q.ifError=function(a){if(a)throw a};var r=Object.keys||function(a){var b=[];for(var c in a)p.call(a,c)&&b.push(c);return b}},{"util/":11}],9:[function(a,b,c){"function"==typeof Object.create?b.exports=function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:b.exports=function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],10:[function(a,b,c){b.exports=function(a){return a&&"object"==typeof a&&"function"==typeof a.copy&&"function"==typeof a.fill&&"function"==typeof a.readUInt8}},{}],11:[function(a,b,c){(function(b,d){function e(a,b){var d={seen:[],stylize:g};return arguments.length>=3&&(d.depth=arguments[2]),arguments.length>=4&&(d.colors=arguments[3]),p(b)?d.showHidden=b:b&&c._extend(d,b),v(d.showHidden)&&(d.showHidden=!1),v(d.depth)&&(d.depth=2),v(d.colors)&&(d.colors=!1),v(d.customInspect)&&(d.customInspect=!0),d.colors&&(d.stylize=f),i(d,a,d.depth)}function f(a,b){var c=e.styles[b];return c?"["+e.colors[c][0]+"m"+a+"["+e.colors[c][1]+"m":a}function g(a,b){return a}function h(a){var b={};return a.forEach(function(a,c){b[a]=!0}),b}function i(a,b,d){if(a.customInspect&&b&&A(b.inspect)&&b.inspect!==c.inspect&&(!b.constructor||b.constructor.prototype!==b)){var e=b.inspect(d,a);return t(e)||(e=i(a,e,d)),e}var f=j(a,b);if(f)return f;var g=Object.keys(b),p=h(g);if(a.showHidden&&(g=Object.getOwnPropertyNames(b)),z(b)&&(g.indexOf("message")>=0||g.indexOf("description")>=0))return k(b);if(0===g.length){if(A(b)){var q=b.name?": "+b.name:"";return a.stylize("[Function"+q+"]","special")}if(w(b))return a.stylize(RegExp.prototype.toString.call(b),"regexp");if(y(b))return a.stylize(Date.prototype.toString.call(b),"date");if(z(b))return k(b)}var r="",s=!1,u=["{","}"];if(o(b)&&(s=!0,u=["[","]"]),A(b)){r=" [Function"+(b.name?": "+b.name:"")+"]"}if(w(b)&&(r=" "+RegExp.prototype.toString.call(b)),y(b)&&(r=" "+Date.prototype.toUTCString.call(b)),z(b)&&(r=" "+k(b)),0===g.length&&(!s||0==b.length))return u[0]+r+u[1];if(d<0)return w(b)?a.stylize(RegExp.prototype.toString.call(b),"regexp"):a.stylize("[Object]","special");a.seen.push(b);var v;return v=s?l(a,b,d,p,g):g.map(function(c){return m(a,b,d,p,c,s)}),a.seen.pop(),n(v,r,u)}function j(a,b){if(v(b))return a.stylize("undefined","undefined");if(t(b)){var c="'"+JSON.stringify(b).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return a.stylize(c,"string")}return s(b)?a.stylize(""+b,"number"):p(b)?a.stylize(""+b,"boolean"):q(b)?a.stylize("null","null"):void 0}function k(a){return"["+Error.prototype.toString.call(a)+"]"}function l(a,b,c,d,e){for(var f=[],g=0,h=b.length;g<h;++g)F(b,String(g))?f.push(m(a,b,c,d,String(g),!0)):f.push("");return e.forEach(function(e){e.match(/^\d+$/)||f.push(m(a,b,c,d,e,!0))}),f}function m(a,b,c,d,e,f){var g,h,j;if(j=Object.getOwnPropertyDescriptor(b,e)||{value:b[e]},j.get?h=j.set?a.stylize("[Getter/Setter]","special"):a.stylize("[Getter]","special"):j.set&&(h=a.stylize("[Setter]","special")),F(d,e)||(g="["+e+"]"),h||(a.seen.indexOf(j.value)<0?(h=q(c)?i(a,j.value,null):i(a,j.value,c-1),h.indexOf("\n")>-1&&(h=f?h.split("\n").map(function(a){return"  "+a}).join("\n").substr(2):"\n"+h.split("\n").map(function(a){return"   "+a}).join("\n"))):h=a.stylize("[Circular]","special")),v(g)){if(f&&e.match(/^\d+$/))return h;g=JSON.stringify(""+e),g.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(g=g.substr(1,g.length-2),g=a.stylize(g,"name")):(g=g.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),g=a.stylize(g,"string"))}return g+": "+h}function n(a,b,c){var d=0;return a.reduce(function(a,b){return d++,b.indexOf("\n")>=0&&d++,a+b.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60?c[0]+(""===b?"":b+"\n ")+" "+a.join(",\n  ")+" "+c[1]:c[0]+b+" "+a.join(", ")+" "+c[1]}function o(a){return Array.isArray(a)}function p(a){return"boolean"==typeof a}function q(a){return null===a}function r(a){return null==a}function s(a){return"number"==typeof a}function t(a){return"string"==typeof a}function u(a){return"symbol"==typeof a}function v(a){return void 0===a}function w(a){return x(a)&&"[object RegExp]"===C(a)}function x(a){return"object"==typeof a&&null!==a}function y(a){return x(a)&&"[object Date]"===C(a)}function z(a){return x(a)&&("[object Error]"===C(a)||a instanceof Error)}function A(a){return"function"==typeof a}function B(a){return null===a||"boolean"==typeof a||"number"==typeof a||"string"==typeof a||"symbol"==typeof a||void 0===a}function C(a){return Object.prototype.toString.call(a)}function D(a){return a<10?"0"+a.toString(10):a.toString(10)}function E(){var a=new Date,b=[D(a.getHours()),D(a.getMinutes()),D(a.getSeconds())].join(":");return[a.getDate(),J[a.getMonth()],b].join(" ")}function F(a,b){return Object.prototype.hasOwnProperty.call(a,b)}var G=/%[sdj%]/g;c.format=function(a){if(!t(a)){for(var b=[],c=0;c<arguments.length;c++)b.push(e(arguments[c]));return b.join(" ")}for(var c=1,d=arguments,f=d.length,g=String(a).replace(G,function(a){if("%%"===a)return"%";if(c>=f)return a;switch(a){case"%s":return String(d[c++]);case"%d":return Number(d[c++]);case"%j":try{return JSON.stringify(d[c++])}catch(b){return"[Circular]"}default:return a}}),h=d[c];c<f;h=d[++c])q(h)||!x(h)?g+=" "+h:g+=" "+e(h);return g},c.deprecate=function(a,e){function f(){if(!g){if(b.throwDeprecation)throw new Error(e);b.traceDeprecation?console.trace(e):console.error(e),g=!0}return a.apply(this,arguments)}if(v(d.process))return function(){return c.deprecate(a,e).apply(this,arguments)};if(!0===b.noDeprecation)return a;var g=!1;return f};var H,I={};c.debuglog=function(a){if(v(H)&&(H=b.env.NODE_DEBUG||""),a=a.toUpperCase(),!I[a])if(new RegExp("\\b"+a+"\\b","i").test(H)){var d=b.pid;I[a]=function(){var b=c.format.apply(c,arguments);console.error("%s %d: %s",a,d,b)}}else I[a]=function(){};return I[a]},c.inspect=e,e.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},e.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},c.isArray=o,c.isBoolean=p,c.isNull=q,c.isNullOrUndefined=r,c.isNumber=s,c.isString=t,c.isSymbol=u,c.isUndefined=v,c.isRegExp=w,c.isObject=x,c.isDate=y,c.isError=z,c.isFunction=A,c.isPrimitive=B,c.isBuffer=a("./support/isBuffer");var J=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];c.log=function(){console.log("%s - %s",E(),c.format.apply(c,arguments))},c.inherits=a("inherits"),c._extend=function(a,b){if(!b||!x(b))return a;for(var c=Object.keys(b),d=c.length;d--;)a[c[d]]=b[c[d]];return a}}).call(this,a("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":10,_process:14,inherits:9}],12:[function(a,b,c){},{}],13:[function(a,b,c){(function(a){function b(a,b){for(var c=0,d=a.length-1;d>=0;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c--;c)a.unshift("..");return a}function d(a){"string"!=typeof a&&(a+="");var b,c=0,d=-1,e=!0;for(b=a.length-1;b>=0;--b)if(47===a.charCodeAt(b)){if(!e){c=b+1;break}}else-1===d&&(e=!1,d=b+1);return-1===d?"":a.slice(c,d)}function e(a,b){if(a.filter)return a.filter(b);for(var c=[],d=0;d<a.length;d++)b(a[d],d,a)&&c.push(a[d]);return c}c.resolve=function(){for(var c="",d=!1,f=arguments.length-1;f>=-1&&!d;f--){var g=f>=0?arguments[f]:a.cwd();if("string"!=typeof g)throw new TypeError("Arguments to path.resolve must be strings");g&&(c=g+"/"+c,d="/"===g.charAt(0))}return c=b(e(c.split("/"),function(a){return!!a}),!d).join("/"),(d?"/":"")+c||"."},c.normalize=function(a){var d=c.isAbsolute(a),g="/"===f(a,-1);return a=b(e(a.split("/"),function(a){return!!a}),!d).join("/"),a||d||(a="."),a&&g&&(a+="/"),(d?"/":"")+a},c.isAbsolute=function(a){return"/"===a.charAt(0)},c.join=function(){var a=Array.prototype.slice.call(arguments,0);return c.normalize(e(a,function(a,b){if("string"!=typeof a)throw new TypeError("Arguments to path.join must be strings");return a}).join("/"))},c.relative=function(a,b){function d(a){for(var b=0;b<a.length&&""===a[b];b++);for(var c=a.length-1;c>=0&&""===a[c];c--);return b>c?[]:a.slice(b,c-b+1)}a=c.resolve(a).substr(1),b=c.resolve(b).substr(1);for(var e=d(a.split("/")),f=d(b.split("/")),g=Math.min(e.length,f.length),h=g,i=0;i<g;i++)if(e[i]!==f[i]){h=i;break}for(var j=[],i=h;i<e.length;i++)j.push("..");return j=j.concat(f.slice(h)),j.join("/")},c.sep="/",c.delimiter=":",c.dirname=function(a){if("string"!=typeof a&&(a+=""),0===a.length)return".";for(var b=a.charCodeAt(0),c=47===b,d=-1,e=!0,f=a.length-1;f>=1;--f)if(47===(b=a.charCodeAt(f))){if(!e){d=f;break}}else e=!1;return-1===d?c?"/":".":c&&1===d?"/":a.slice(0,d)},c.basename=function(a,b){var c=d(a);return b&&c.substr(-1*b.length)===b&&(c=c.substr(0,c.length-b.length)),c},c.extname=function(a){"string"!=typeof a&&(a+="");for(var b=-1,c=0,d=-1,e=!0,f=0,g=a.length-1;g>=0;--g){var h=a.charCodeAt(g);if(47!==h)-1===d&&(e=!1,d=g+1),46===h?-1===b?b=g:1!==f&&(f=1):-1!==b&&(f=-1);else if(!e){c=g+1;break}}return-1===b||-1===d||0===f||1===f&&b===d-1&&b===c+1?"":a.slice(b,d)};var f="b"==="ab".substr(-1)?function(a,b,c){return a.substr(b,c)}:function(a,b,c){return b<0&&(b=a.length+b),a.substr(b,c)}}).call(this,a("_process"))},{_process:14}],14:[function(a,b,c){function d(){throw new Error("setTimeout has not been defined")}function e(){throw new Error("clearTimeout has not been defined")}function f(a){if(l===setTimeout)return setTimeout(a,0);if((l===d||!l)&&setTimeout)return l=setTimeout,setTimeout(a,0);try{return l(a,0)}catch(b){try{return l.call(null,a,0)}catch(b){return l.call(this,a,0)}}}function g(a){if(m===clearTimeout)return clearTimeout(a);if((m===e||!m)&&clearTimeout)return m=clearTimeout,clearTimeout(a);try{return m(a)}catch(b){try{return m.call(null,a)}catch(b){return m.call(this,a)}}}function h(){q&&o&&(q=!1,o.length?p=o.concat(p):r=-1,p.length&&i())}function i(){if(!q){var a=f(h);q=!0;for(var b=p.length;b;){for(o=p,p=[];++r<b;)o&&o[r].run();r=-1,b=p.length}o=null,q=!1,g(a)}}function j(a,b){this.fun=a,this.array=b}function k(){}var l,m,n=b.exports={};!function(){try{l="function"==typeof setTimeout?setTimeout:d}catch(a){l=d}try{m="function"==typeof clearTimeout?clearTimeout:e}catch(a){m=e}}();var o,p=[],q=!1,r=-1;n.nextTick=function(a){var b=new Array(arguments.length-1);if(arguments.length>1)for(var c=1;c<arguments.length;c++)b[c-1]=arguments[c];p.push(new j(a,b)),1!==p.length||q||f(i)},j.prototype.run=function(){this.fun.apply(null,this.array)},n.title="browser",n.browser=!0,n.env={},n.argv=[],n.version="",n.versions={},n.on=k,n.addListener=k,n.once=k,n.off=k,n.removeListener=k,n.removeAllListeners=k,n.emit=k,n.prependListener=k,n.prependOnceListener=k,n.listeners=function(a){return[]},n.binding=function(a){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(a){throw new Error("process.chdir is not supported")},n.umask=function(){return 0}},{}],15:[function(a,b,c){var d=a("escodegen").generate;b.exports=function(a,b){b||(b={});var c={},e=function a(e,f){if("Literal"===e.type)return e.value;if("UnaryExpression"===e.type){var g=a(e.argument);return"+"===e.operator?+g:"-"===e.operator?-g:"~"===e.operator?~g:"!"===e.operator?!g:c}if("ArrayExpression"===e.type){for(var h=[],i=0,j=e.elements.length;i<j;i++){var k=a(e.elements[i]);if(k===c)return c;h.push(k)}return h}if("ObjectExpression"===e.type){for(var l={},i=0;i<e.properties.length;i++){var m=e.properties[i],n=null===m.value?m.value:a(m.value);if(n===c)return c;l[m.key.value||m.key.name]=n}return l}if("BinaryExpression"===e.type||"LogicalExpression"===e.type){var j=a(e.left);if(j===c)return c;var o=a(e.right);if(o===c)return c;var p=e.operator;return"=="===p?j==o:"==="===p?j===o:"!="===p?j!=o:"!=="===p?j!==o:"+"===p?j+o:"-"===p?j-o:"*"===p?j*o:"/"===p?j/o:"%"===p?j%o:"<"===p?j<o:"<="===p?j<=o:">"===p?j>o:">="===p?j>=o:"|"===p?j|o:"&"===p?j&o:"^"===p?j^o:"&&"===p?j&&o:"||"===p?j||o:c}if("Identifier"===e.type)return{}.hasOwnProperty.call(b,e.name)?b[e.name]:c;if("ThisExpression"===e.type)return{}.hasOwnProperty.call(b,"this")?b.this:c;if("CallExpression"===e.type){var q=a(e.callee);if(q===c)return c;if("function"!=typeof q)return c;var r=e.callee.object?a(e.callee.object):c;r===c&&(r=null);for(var s=[],i=0,j=e.arguments.length;i<j;i++){var k=a(e.arguments[i]);if(k===c)return c;s.push(k)}return q.apply(r,s)}if("MemberExpression"===e.type){var l=a(e.object);if(l===c||"function"==typeof l)return c;if("Identifier"===e.property.type)return l[e.property.name];var m=a(e.property);return m===c?c:l[m]}if("ConditionalExpression"===e.type){var g=a(e.test);return g===c?c:a(g?e.consequent:e.alternate)}if("ExpressionStatement"===e.type){var g=a(e.expression);return g===c?c:g}if("ReturnStatement"===e.type)return a(e.argument);if("FunctionExpression"===e.type){var t=e.body.body,u={};Object.keys(b).forEach(function(a){u[a]=b[a]});for(var i=0;i<e.params.length;i++){var v=e.params[i];if("Identifier"!=v.type)return c;b[v.name]=null}for(var i in t)if(a(t[i])===c)return c;b=u;var w=Object.keys(b),x=w.map(function(a){return b[a]});return Function(w.join(", "),"return "+d(e)).apply(null,x)}if("TemplateLiteral"===e.type){for(var y="",i=0;i<e.expressions.length;i++)y+=a(e.quasis[i]),y+=a(e.expressions[i]);return y+=a(e.quasis[i])}if("TaggedTemplateExpression"===e.type){var z=a(e.tag),A=e.quasi,B=A.quasis.map(a),C=A.expressions.map(a);return z.apply(null,[B].concat(C))}return"TemplateElement"===e.type?e.value.cooked:c}(a);return e===c?void 0:e}},{escodegen:12}],jsonpath:[function(a,b,c){b.exports=a("./lib/index")},{"./lib/index":5}]},{},["jsonpath"])("jsonpath")});
\ No newline at end of file
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/aesprim.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/aesprim.js
deleted file mode 100644
index e79b527..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/aesprim.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var fs = require('fs');
-var Module = require('module');
-
-var file = require.resolve('esprima');
-var source = fs.readFileSync(file, 'utf-8');
-
-// inject '@' as a valid identifier!
-source = source.replace(/(function isIdentifierStart\(ch\) {\s+return)/m, '$1 (ch == 0x40) || ');
-
-//If run as script just output patched file
-if (require.main === module)
-  console.log(source);
-else {
-  var _module = new Module('aesprim');
-  _module._compile(source, __filename);
-
-  module.exports = _module.exports;
-}
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/dict.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/dict.js
deleted file mode 100644
index a2548df..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/dict.js
+++ /dev/null
@@ -1,6 +0,0 @@
-module.exports = {
-  identifier: "[a-zA-Z_]+[a-zA-Z0-9_]*",
-  integer: "-?(?:0|[1-9][0-9]*)",
-  qq_string: "\"(?:\\\\[\"bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\"\\\\])*\"",
-  q_string: "'(?:\\\\[\'bfnrt/\\\\]|\\\\u[a-fA-F0-9]{4}|[^\'\\\\])*'"
-};
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/grammar.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/grammar.js
deleted file mode 100755
index af0b2a1..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/grammar.js
+++ /dev/null
@@ -1,106 +0,0 @@
-var dict = require('./dict');
-var fs = require('fs');
-var grammar = {
-
-    lex: {
-
-        macros: {
-            esc: "\\\\",
-            int: dict.integer
-        },
-
-        rules: [
-            ["\\$", "return 'DOLLAR'"],
-            ["\\.\\.", "return 'DOT_DOT'"],
-            ["\\.", "return 'DOT'"],
-            ["\\*", "return 'STAR'"],
-            [dict.identifier, "return 'IDENTIFIER'"],
-            ["\\[", "return '['"],
-            ["\\]", "return ']'"],
-            [",", "return ','"],
-            ["({int})?\\:({int})?(\\:({int})?)?", "return 'ARRAY_SLICE'"],
-            ["{int}", "return 'INTEGER'"],
-            [dict.qq_string, "yytext = yytext.substr(1,yyleng-2); return 'QQ_STRING';"],
-            [dict.q_string, "yytext = yytext.substr(1,yyleng-2); return 'Q_STRING';"],
-            ["\\(.+?\\)(?=\\])", "return 'SCRIPT_EXPRESSION'"],
-            ["\\?\\(.+?\\)(?=\\])", "return 'FILTER_EXPRESSION'"]
-        ]
-    },
-
-    start: "JSON_PATH",
-
-    bnf: {
-
-        JSON_PATH: [
-                [ 'DOLLAR',                 'yy.ast.set({ expression: { type: "root", value: $1 } }); yy.ast.unshift(); return yy.ast.yield()' ],
-                [ 'DOLLAR PATH_COMPONENTS', 'yy.ast.set({ expression: { type: "root", value: $1 } }); yy.ast.unshift(); return yy.ast.yield()' ],
-                [ 'LEADING_CHILD_MEMBER_EXPRESSION',                 'yy.ast.unshift(); return yy.ast.yield()' ],
-                [ 'LEADING_CHILD_MEMBER_EXPRESSION PATH_COMPONENTS', 'yy.ast.set({ operation: "member", scope: "child", expression: { type: "identifier", value: $1 }}); yy.ast.unshift(); return yy.ast.yield()' ] ],
-
-        PATH_COMPONENTS: [
-                [ 'PATH_COMPONENT',                 '' ],
-                [ 'PATH_COMPONENTS PATH_COMPONENT', '' ] ],
-
-        PATH_COMPONENT: [
-                [ 'MEMBER_COMPONENT',    'yy.ast.set({ operation: "member" }); yy.ast.push()' ],
-                [ 'SUBSCRIPT_COMPONENT', 'yy.ast.set({ operation: "subscript" }); yy.ast.push() ' ] ],
-
-        MEMBER_COMPONENT: [
-                [ 'CHILD_MEMBER_COMPONENT',      'yy.ast.set({ scope: "child" })' ],
-                [ 'DESCENDANT_MEMBER_COMPONENT', 'yy.ast.set({ scope: "descendant" })' ] ],
-
-        CHILD_MEMBER_COMPONENT: [
-                [ 'DOT MEMBER_EXPRESSION', '' ] ],
-
-        LEADING_CHILD_MEMBER_EXPRESSION: [
-                [ 'MEMBER_EXPRESSION', 'yy.ast.set({ scope: "child", operation: "member" })' ] ],
-
-        DESCENDANT_MEMBER_COMPONENT: [
-                [ 'DOT_DOT MEMBER_EXPRESSION', '' ] ],
-
-        MEMBER_EXPRESSION: [
-                [ 'STAR',              'yy.ast.set({ expression: { type: "wildcard", value: $1 } })' ],
-                [ 'IDENTIFIER',        'yy.ast.set({ expression: { type: "identifier", value: $1 } })' ],
-                [ 'SCRIPT_EXPRESSION', 'yy.ast.set({ expression: { type: "script_expression", value: $1 } })' ],
-                [ 'INTEGER',           'yy.ast.set({ expression: { type: "numeric_literal", value: parseInt($1) } })' ],
-                [ 'END',               '' ] ],
-
-        SUBSCRIPT_COMPONENT: [
-                [ 'CHILD_SUBSCRIPT_COMPONENT',      'yy.ast.set({ scope: "child" })' ],
-                [ 'DESCENDANT_SUBSCRIPT_COMPONENT', 'yy.ast.set({ scope: "descendant" })' ] ],
-
-        CHILD_SUBSCRIPT_COMPONENT: [
-                [ '[ SUBSCRIPT ]', '' ] ],
-
-        DESCENDANT_SUBSCRIPT_COMPONENT: [
-                [ 'DOT_DOT [ SUBSCRIPT ]', '' ] ],
-
-        SUBSCRIPT: [
-                [ 'SUBSCRIPT_EXPRESSION', '' ],
-                [ 'SUBSCRIPT_EXPRESSION_LIST', '$1.length > 1? yy.ast.set({ expression: { type: "union", value: $1 } }) : $$ = $1' ] ],
-
-        SUBSCRIPT_EXPRESSION_LIST: [
-                [ 'SUBSCRIPT_EXPRESSION_LISTABLE', '$$ = [$1]'],
-                [ 'SUBSCRIPT_EXPRESSION_LIST , SUBSCRIPT_EXPRESSION_LISTABLE', '$$ = $1.concat($3)' ] ],
-
-        SUBSCRIPT_EXPRESSION_LISTABLE: [
-                [ 'INTEGER',           '$$ = { expression: { type: "numeric_literal", value: parseInt($1) } }; yy.ast.set($$)' ],
-                [ 'STRING_LITERAL',    '$$ = { expression: { type: "string_literal", value: $1 } }; yy.ast.set($$)' ],
-                [ 'ARRAY_SLICE',       '$$ = { expression: { type: "slice", value: $1 } }; yy.ast.set($$)' ] ],
-
-        SUBSCRIPT_EXPRESSION: [
-                [ 'STAR',              '$$ = { expression: { type: "wildcard", value: $1 } }; yy.ast.set($$)' ],
-                [ 'SCRIPT_EXPRESSION', '$$ = { expression: { type: "script_expression", value: $1 } }; yy.ast.set($$)' ],
-                [ 'FILTER_EXPRESSION', '$$ = { expression: { type: "filter_expression", value: $1 } }; yy.ast.set($$)' ] ],
-
-        STRING_LITERAL: [
-                [ 'QQ_STRING', "$$ = $1" ],
-                [ 'Q_STRING',  "$$ = $1" ] ]
-    }
-};
-if (fs.readFileSync) {
-  grammar.moduleInclude = fs.readFileSync(require.resolve("../include/module.js"));
-  grammar.actionInclude = fs.readFileSync(require.resolve("../include/action.js"));
-}
-
-module.exports = grammar;
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/handlers.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/handlers.js
deleted file mode 100755
index c00e6b0..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/handlers.js
+++ /dev/null
@@ -1,260 +0,0 @@
-var aesprim = require('./aesprim');
-var slice = require('./slice');
-var _evaluate = require('static-eval');
-var _uniq = require('underscore').uniq;
-
-var Handlers = function() {
-  return this.initialize.apply(this, arguments);
-}
-
-Handlers.prototype.initialize = function() {
-  this.traverse = traverser(true);
-  this.descend = traverser();
-}
-
-Handlers.prototype.keys = Object.keys;
-
-Handlers.prototype.resolve = function(component) {
-
-  var key = [ component.operation, component.scope, component.expression.type ].join('-');
-  var method = this._fns[key];
-
-  if (!method) throw new Error("couldn't resolve key: " + key);
-  return method.bind(this);
-};
-
-Handlers.prototype.register = function(key, handler) {
-
-  if (!handler instanceof Function) {
-    throw new Error("handler must be a function");
-  }
-
-  this._fns[key] = handler;
-};
-
-Handlers.prototype._fns = {
-
-  'member-child-identifier': function(component, partial) {
-    var key = component.expression.value;
-    var value = partial.value;
-    if (value instanceof Object && key in value) {
-      return [ { value: value[key], path: partial.path.concat(key) } ]
-    }
-  },
-
-  'member-descendant-identifier':
-    _traverse(function(key, value, ref) { return key == ref }),
-
-  'subscript-child-numeric_literal':
-    _descend(function(key, value, ref) { return key === ref }),
-
-  'member-child-numeric_literal':
-    _descend(function(key, value, ref) { return String(key) === String(ref) }),
-
-  'subscript-descendant-numeric_literal':
-    _traverse(function(key, value, ref) { return key === ref }),
-
-  'member-child-wildcard':
-    _descend(function() { return true }),
-
-  'member-descendant-wildcard':
-    _traverse(function() { return true }),
-
-  'subscript-descendant-wildcard':
-    _traverse(function() { return true }),
-
-  'subscript-child-wildcard':
-    _descend(function() { return true }),
-
-  'subscript-child-slice': function(component, partial) {
-    if (is_array(partial.value)) {
-      var args = component.expression.value.split(':').map(_parse_nullable_int);
-      var values = partial.value.map(function(v, i) { return { value: v, path: partial.path.concat(i) } });
-      return slice.apply(null, [values].concat(args));
-    }
-  },
-
-  'subscript-child-union': function(component, partial) {
-    var results = [];
-    component.expression.value.forEach(function(component) {
-      var _component = { operation: 'subscript', scope: 'child', expression: component.expression };
-      var handler = this.resolve(_component);
-      var _results = handler(_component, partial);
-      if (_results) {
-        results = results.concat(_results);
-      }
-    }, this);
-
-    return unique(results);
-  },
-
-  'subscript-descendant-union': function(component, partial, count) {
-
-    var jp = require('..');
-    var self = this;
-
-    var results = [];
-    var nodes = jp.nodes(partial, '$..*').slice(1);
-
-    nodes.forEach(function(node) {
-      if (results.length >= count) return;
-      component.expression.value.forEach(function(component) {
-        var _component = { operation: 'subscript', scope: 'child', expression: component.expression };
-        var handler = self.resolve(_component);
-        var _results = handler(_component, node);
-        results = results.concat(_results);
-      });
-    });
-
-    return unique(results);
-  },
-
-  'subscript-child-filter_expression': function(component, partial, count) {
-
-    // slice out the expression from ?(expression)
-    var src = component.expression.value.slice(2, -1);
-    var ast = aesprim.parse(src).body[0].expression;
-
-    var passable = function(key, value) {
-      return evaluate(ast, { '@': value });
-    }
-
-    return this.descend(partial, null, passable, count);
-
-  },
-
-  'subscript-descendant-filter_expression': function(component, partial, count) {
-
-    // slice out the expression from ?(expression)
-    var src = component.expression.value.slice(2, -1);
-    var ast = aesprim.parse(src).body[0].expression;
-
-    var passable = function(key, value) {
-      return evaluate(ast, { '@': value });
-    }
-
-    return this.traverse(partial, null, passable, count);
-  },
-
-  'subscript-child-script_expression': function(component, partial) {
-    var exp = component.expression.value.slice(1, -1);
-    return eval_recurse(partial, exp, '$[{{value}}]');
-  },
-
-  'member-child-script_expression': function(component, partial) {
-    var exp = component.expression.value.slice(1, -1);
-    return eval_recurse(partial, exp, '$.{{value}}');
-  },
-
-  'member-descendant-script_expression': function(component, partial) {
-    var exp = component.expression.value.slice(1, -1);
-    return eval_recurse(partial, exp, '$..value');
-  }
-};
-
-Handlers.prototype._fns['subscript-child-string_literal'] =
-	Handlers.prototype._fns['member-child-identifier'];
-
-Handlers.prototype._fns['member-descendant-numeric_literal'] =
-    Handlers.prototype._fns['subscript-descendant-string_literal'] =
-    Handlers.prototype._fns['member-descendant-identifier'];
-
-function eval_recurse(partial, src, template) {
-
-  var jp = require('./index');
-  var ast = aesprim.parse(src).body[0].expression;
-  var value = evaluate(ast, { '@': partial.value });
-  var path = template.replace(/\{\{\s*value\s*\}\}/g, value);
-
-  var results = jp.nodes(partial.value, path);
-  results.forEach(function(r) {
-    r.path = partial.path.concat(r.path.slice(1));
-  });
-
-  return results;
-}
-
-function is_array(val) {
-  return Array.isArray(val);
-}
-
-function is_object(val) {
-  // is this a non-array, non-null object?
-  return val && !(val instanceof Array) && val instanceof Object;
-}
-
-function traverser(recurse) {
-
-  return function(partial, ref, passable, count) {
-
-    var value = partial.value;
-    var path = partial.path;
-
-    var results = [];
-
-    var descend = function(value, path) {
-
-      if (is_array(value)) {
-        value.forEach(function(element, index) {
-          if (results.length >= count) { return }
-          if (passable(index, element, ref)) {
-            results.push({ path: path.concat(index), value: element });
-          }
-        });
-        value.forEach(function(element, index) {
-          if (results.length >= count) { return }
-          if (recurse) {
-            descend(element, path.concat(index));
-          }
-        });
-      } else if (is_object(value)) {
-        this.keys(value).forEach(function(k) {
-          if (results.length >= count) { return }
-          if (passable(k, value[k], ref)) {
-            results.push({ path: path.concat(k), value: value[k] });
-          }
-        })
-        this.keys(value).forEach(function(k) {
-          if (results.length >= count) { return }
-          if (recurse) {
-            descend(value[k], path.concat(k));
-          }
-        });
-      }
-    }.bind(this);
-    descend(value, path);
-    return results;
-  }
-}
-
-function _descend(passable) {
-  return function(component, partial, count) {
-    return this.descend(partial, component.expression.value, passable, count);
-  }
-}
-
-function _traverse(passable) {
-  return function(component, partial, count) {
-    return this.traverse(partial, component.expression.value, passable, count);
-  }
-}
-
-function evaluate() {
-  try { return _evaluate.apply(this, arguments) }
-  catch (e) { }
-}
-
-function unique(results) {
-  results = results.filter(function(d) { return d })
-  return _uniq(
-    results,
-    function(r) { return r.path.map(function(c) { return String(c).replace('-', '--') }).join('-') }
-  );
-}
-
-function _parse_nullable_int(val) {
-  var sval = String(val);
-  return sval.match(/^-?[0-9]+$/) ? parseInt(sval) : null;
-}
-
-module.exports = Handlers;
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/index.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/index.js
deleted file mode 100755
index 8f5a832..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/index.js
+++ /dev/null
@@ -1,249 +0,0 @@
-var assert = require('assert');
-var dict = require('./dict');
-var Parser = require('./parser');
-var Handlers = require('./handlers');
-
-var JSONPath = function() {
-  this.initialize.apply(this, arguments);
-};
-
-JSONPath.prototype.initialize = function() {
-  this.parser = new Parser();
-  this.handlers = new Handlers();
-};
-
-JSONPath.prototype.parse = function(string) {
-  assert.ok(_is_string(string), "we need a path");
-  return this.parser.parse(string);
-};
-
-JSONPath.prototype.parent = function(obj, string) {
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(string, "we need a path");
-
-  var node = this.nodes(obj, string)[0];
-  var key = node.path.pop(); /* jshint unused:false */
-  return this.value(obj, node.path);
-}
-
-JSONPath.prototype.apply = function(obj, string, fn) {
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(string, "we need a path");
-  assert.equal(typeof fn, "function", "fn needs to be function")
-
-  var nodes = this.nodes(obj, string).sort(function(a, b) {
-    // sort nodes so we apply from the bottom up
-    return b.path.length - a.path.length;
-  });
-
-  nodes.forEach(function(node) {
-    var key = node.path.pop();
-    var parent = this.value(obj, this.stringify(node.path));
-    var val = node.value = fn.call(obj, parent[key]);
-    parent[key] = val;
-  }, this);
-
-  return nodes;
-}
-
-JSONPath.prototype.value = function(obj, path, value) {
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(path, "we need a path");
-
-  if (arguments.length >= 3) {
-    var node = this.nodes(obj, path).shift();
-    if (!node) return this._vivify(obj, path, value);
-    var key = node.path.slice(-1).shift();
-    var parent = this.parent(obj, this.stringify(node.path));
-    parent[key] = value;
-  }
-  return this.query(obj, this.stringify(path), 1).shift();
-}
-
-JSONPath.prototype._vivify = function(obj, string, value) {
-
-  var self = this;
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(string, "we need a path");
-
-  var path = this.parser.parse(string)
-    .map(function(component) { return component.expression.value });
-
-  var setValue = function(path, value) {
-    var key = path.pop();
-    var node = self.value(obj, path);
-    if (!node) {
-      setValue(path.concat(), typeof key === 'string' ? {} : []);
-      node = self.value(obj, path);
-    }
-    node[key] = value;
-  }
-  setValue(path, value);
-  return this.query(obj, string)[0];
-}
-
-JSONPath.prototype.query = function(obj, string, count) {
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(_is_string(string), "we need a path");
-
-  var results = this.nodes(obj, string, count)
-    .map(function(r) { return r.value });
-
-  return results;
-};
-
-JSONPath.prototype.paths = function(obj, string, count) {
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(string, "we need a path");
-
-  var results = this.nodes(obj, string, count)
-    .map(function(r) { return r.path });
-
-  return results;
-};
-
-JSONPath.prototype.nodes = function(obj, string, count) {
-
-  assert.ok(obj instanceof Object, "obj needs to be an object");
-  assert.ok(string, "we need a path");
-
-  if (count === 0) return [];
-
-  var path = this.parser.parse(string);
-  var handlers = this.handlers;
-
-  var partials = [ { path: ['$'], value: obj } ];
-  var matches = [];
-
-  if (path.length && path[0].expression.type == 'root') path.shift();
-
-  if (!path.length) return partials;
-
-  path.forEach(function(component, index) {
-
-    if (matches.length >= count) return;
-    var handler = handlers.resolve(component);
-    var _partials = [];
-
-    partials.forEach(function(p) {
-
-      if (matches.length >= count) return;
-      var results = handler(component, p, count);
-
-      if (index == path.length - 1) {
-        // if we're through the components we're done
-        matches = matches.concat(results || []);
-      } else {
-        // otherwise accumulate and carry on through
-        _partials = _partials.concat(results || []);
-      }
-    });
-
-    partials = _partials;
-
-  });
-
-  return count ? matches.slice(0, count) : matches;
-};
-
-JSONPath.prototype.stringify = function(path) {
-
-  assert.ok(path, "we need a path");
-
-  var string = '$';
-
-  var templates = {
-    'descendant-member': '..{{value}}',
-    'child-member': '.{{value}}',
-    'descendant-subscript': '..[{{value}}]',
-    'child-subscript': '[{{value}}]'
-  };
-
-  path = this._normalize(path);
-
-  path.forEach(function(component) {
-
-    if (component.expression.type == 'root') return;
-
-    var key = [component.scope, component.operation].join('-');
-    var template = templates[key];
-    var value;
-
-    if (component.expression.type == 'string_literal') {
-      value = JSON.stringify(component.expression.value)
-    } else {
-      value = component.expression.value;
-    }
-
-    if (!template) throw new Error("couldn't find template " + key);
-
-    string += template.replace(/{{value}}/, value);
-  });
-
-  return string;
-}
-
-JSONPath.prototype._normalize = function(path) {
-
-  assert.ok(path, "we need a path");
-
-  if (typeof path == "string") {
-
-    return this.parser.parse(path);
-
-  } else if (Array.isArray(path) && typeof path[0] == "string") {
-
-    var _path = [ { expression: { type: "root", value: "$" } } ];
-
-    path.forEach(function(component, index) {
-
-      if (component == '$' && index === 0) return;
-
-      if (typeof component == "string" && component.match("^" + dict.identifier + "$")) {
-
-        _path.push({
-          operation: 'member',
-          scope: 'child',
-          expression: { value: component, type: 'identifier' }
-        });
-
-      } else {
-
-        var type = typeof component == "number" ?
-          'numeric_literal' : 'string_literal';
-
-        _path.push({
-          operation: 'subscript',
-          scope: 'child',
-          expression: { value: component, type: type }
-        });
-      }
-    });
-
-    return _path;
-
-  } else if (Array.isArray(path) && typeof path[0] == "object") {
-
-    return path
-  }
-
-  throw new Error("couldn't understand path " + path);
-}
-
-function _is_string(obj) {
-  return Object.prototype.toString.call(obj) == '[object String]';
-}
-
-JSONPath.Handlers = Handlers;
-JSONPath.Parser = Parser;
-
-var instance = new JSONPath;
-instance.JSONPath = JSONPath;
-
-module.exports = instance;
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/parser.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/parser.js
deleted file mode 100644
index 568ec43..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/parser.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var grammar = require('./grammar');
-var gparser = require('../generated/parser');
-
-var Parser = function() {
-
-  var parser = new gparser.Parser();
-
-  var _parseError = parser.parseError;
-  parser.yy.parseError = function() {
-    if (parser.yy.ast) {
-      parser.yy.ast.initialize();
-    }
-    _parseError.apply(parser, arguments);
-  }
-
-  return parser;
-
-};
-
-Parser.grammar = grammar;
-module.exports = Parser;
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/slice.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/slice.js
deleted file mode 100644
index 530e21e..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/lib/slice.js
+++ /dev/null
@@ -1,41 +0,0 @@
-module.exports = function(arr, start, end, step) {
-
-  if (typeof start == 'string') throw new Error("start cannot be a string");
-  if (typeof end == 'string') throw new Error("end cannot be a string");
-  if (typeof step == 'string') throw new Error("step cannot be a string");
-
-  var len = arr.length;
-
-  if (step === 0) throw new Error("step cannot be zero");
-  step = step ? integer(step) : 1;
-
-  // normalize negative values
-  start = start < 0 ? len + start : start;
-  end = end < 0 ? len + end : end;
-
-  // default extents to extents
-  start = integer(start === 0 ? 0 : !start ? (step > 0 ? 0 : len - 1) : start);
-  end = integer(end === 0 ? 0 : !end ? (step > 0 ? len : -1) : end);
-
-  // clamp extents
-  start = step > 0 ? Math.max(0, start) : Math.min(len, start);
-  end = step > 0 ? Math.min(end, len) : Math.max(-1, end);
-
-  // return empty if extents are backwards
-  if (step > 0 && end <= start) return [];
-  if (step < 0 && start <= end) return [];
-
-  var result = [];
-
-  for (var i = start; i != end; i += step) {
-    if ((step < 0 && i <= end) || (step > 0 && i >= end)) break;
-    result.push(arr[i]);
-  }
-
-  return result;
-}
-
-function integer(val) {
-  return String(val).match(/^[0-9]+$/) ? parseInt(val) :
-    Number.isFinite(val) ? parseInt(val, 10) : 0;
-}
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/package.json b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/package.json
deleted file mode 100644
index 3f83e7d..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/package.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-  "name": "jsonpath",
-  "description": "Query JavaScript objects with JSONPath expressions. Robust / safe JSONPath engine for Node.js.",
-  "version": "1.0.2",
-  "author": "david@fmail.co.uk",
-  "scripts": {
-    "postinstall": "node lib/aesprim.js > generated/aesprim-browser.js",
-    "test": "mocha -u tdd test && jscs lib && jshint lib",
-    "generate": "node bin/generate_parser.js > generated/parser.js"
-  },
-  "dependencies": {
-    "esprima": "1.2.2",
-    "static-eval": "2.0.2",
-    "underscore": "1.7.0"
-  },
-  "browser": "./jsonpath.js",
-  "alias": {
-    "./lib/aesprim.js": "./generated/aesprim-browser.js"
-  },
-  "devDependencies": {
-    "grunt": "0.4.5",
-    "grunt-browserify": "3.8.0",
-    "grunt-cli": "0.1.13",
-    "grunt-contrib-uglify": "0.9.1",
-    "jison": "0.4.13",
-    "jscs": "1.10.0",
-    "jshint": "2.6.0",
-    "mocha": "2.1.0"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/dchester/jsonpath"
-  },
-  "keywords": [
-    "JSONPath",
-    "jsonpath",
-    "json-path",
-    "object",
-    "traversal",
-    "json",
-    "path",
-    "data structures"
-  ],
-  "license": "MIT"
-}
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/data/store.json b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/data/store.json
deleted file mode 100644
index 3e4d5d1..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/data/store.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{ "store": {
-    "book": [ 
-      { "category": "reference",
-        "author": "Nigel Rees",
-        "title": "Sayings of the Century",
-        "price": 8.95
-      },
-      { "category": "fiction",
-        "author": "Evelyn Waugh",
-        "title": "Sword of Honour",
-        "price": 12.99
-      },
-      { "category": "fiction",
-        "author": "Herman Melville",
-        "title": "Moby Dick",
-        "isbn": "0-553-21311-3",
-        "price": 8.99
-      },
-      { "category": "fiction",
-        "author": "J. R. R. Tolkien",
-        "title": "The Lord of the Rings",
-        "isbn": "0-395-19395-8",
-        "price": 22.99
-      }
-    ],
-    "bicycle": {
-      "color": "red",
-      "price": 19.95
-    }
-  }
-}
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/lessons.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/lessons.js
deleted file mode 100644
index 2101bb0..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/lessons.js
+++ /dev/null
@@ -1,38 +0,0 @@
-var assert = require('assert');
-var jp = require('../');
-
-var data = require('./data/store.json');
-
-suite('orig-google-code-issues', function() {
-    
-  test('comma in eval', function() {
-    var pathExpression = '$..book[?(@.price && ",")]'
-    var results = jp.query(data, pathExpression);
-    assert.deepEqual(results, data.store.book);
-  });
-
-  test('member names with dots', function() {
-    var data = { 'www.google.com': 42, 'www.wikipedia.org': 190 };
-    var results = jp.query(data, "$['www.google.com']");
-    assert.deepEqual(results, [ 42 ]);
-  });
-
-  test('nested objects with filter', function() {
-    var data = { dataResult: { object: { objectInfo: { className: "folder", typeName: "Standard Folder", id: "uniqueId" } } } };
-    var results = jp.query(data, "$..object[?(@.className=='folder')]");
-    assert.deepEqual(results, [ data.dataResult.object.objectInfo ]);
-  });
-
-  test('script expressions with @ char', function() {
-    var data = { "DIV": [{ "@class": "value", "val": 5 }] };
-    var results = jp.query(data, "$..DIV[?(@['@class']=='value')]");
-    assert.deepEqual(results, data.DIV);
-  });
-
-  test('negative slices', function() {
-    var results = jp.query(data, "$..book[-1:].title");
-    assert.deepEqual(results, ['The Lord of the Rings']);
-  });
-
-});
-
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/parse.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/parse.js
deleted file mode 100644
index 51fab31..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/parse.js
+++ /dev/null
@@ -1,164 +0,0 @@
-var assert = require('assert');
-var jp = require('../');
-var util = require('util');
-
-suite('parse', function() {
-
-  test('should parse root-only', function() {
-    var path = jp.parse('$');
-    assert.deepEqual(path, [ { expression: { type: 'root', value: '$' } } ]);
-  });
-
-  test('parse path for store', function() {
-    var path = jp.parse('$.store');
-    assert.deepEqual(path, [
-      { expression: { type: 'root', value: '$' } },
-      { operation: 'member', scope: 'child', expression: { type: 'identifier', value: 'store' } }
-    ])
-  });
-
-  test('parse path for the authors of all books in the store', function() {
-    var path = jp.parse('$.store.book[*].author');
-    assert.deepEqual(path, [
-      { expression: { type: 'root', value: '$' } },
-      { operation: 'member', scope: 'child', expression: { type: 'identifier', value: 'store' } },
-      { operation: 'member', scope: 'child', expression: { type: 'identifier', value: 'book' } },
-      { operation: 'subscript', scope: 'child', expression: { type: 'wildcard', value: '*' } },
-      { operation: 'member', scope: 'child', expression: { type: 'identifier', value: 'author' } }
-    ])
-  });
-
-  test('parse path for all authors', function() {
-    var path = jp.parse('$..author');
-    assert.deepEqual(path, [
-      { expression: { type: 'root', value: '$' } },
-      { operation: 'member', scope: 'descendant', expression: { type: 'identifier', value: 'author' } }
-    ])
-  });
-
-  test('parse path for all authors via subscript descendant string literal', function() {
-    var path = jp.parse("$..['author']");
-    assert.deepEqual(path, [
-      { expression: { type: 'root', value: '$' } },
-      { operation: 'subscript', scope: 'descendant', expression: { type: 'string_literal', value: 'author' } }
-    ])
-  });
-
-  test('parse path for all things in store', function() {
-    var path = jp.parse('$.store.*');
-    assert.deepEqual(path, [
-      { expression: { type: 'root', value: '$' } },
-      { operation: 'member', scope: 'child', expression: { type: 'identifier', value: 'store' } },
-      { operation: 'member', scope: 'child', expression: { type: 'wildcard', value: '*' } }
-    ])
-  });
-
-  test('parse path for price of everything in the store', function() {
-    var path = jp.parse('$.store..price');
-    assert.deepEqual(path, [
-      { expression: { type: 'root', value: '$' } },
-      { operation: 'member', scope: 'child', expression: { type: 'identifier', value: 'store' } },
-      { operation: 'member', scope: 'descendant', expression: { type: 'identifier', value: 'price' } }
-    ])
-  });
-
-  test('parse path for the last book in order via expression', function() {
-    var path = jp.parse('$..book[(@.length-1)]');
-    assert.deepEqual(path, [
-      { expression: { type: 'root', value: '$' } },
-      { operation: 'member', scope: 'descendant', expression: { type: 'identifier', value: 'book' } },
-      { operation: 'subscript', scope: 'child', expression: { type: 'script_expression', value: '(@.length-1)' } }
-    ])
-  });
-
-  test('parse path for the first two books via union', function() {
-    var path = jp.parse('$..book[0,1]');
-
-    assert.deepEqual(path, [
-      { expression: { type: 'root', value: '$' } },
-      { operation: 'member', scope: 'descendant', expression: { type: 'identifier', value: 'book' } },
-      { operation: 'subscript', scope: 'child', expression: { type: 'union', value: [ { expression: { type: 'numeric_literal', value: '0' } }, { expression: { type: 'numeric_literal', value: '1' } } ] } }
-    ])
-  });
-
-  test('parse path for the first two books via slice', function() {
-    var path = jp.parse('$..book[0:2]');
-    assert.deepEqual(path, [
-      { expression: { type: 'root', value: '$' } },
-      { operation: 'member', scope: 'descendant', expression: { type: 'identifier', value: 'book' } },
-      { operation: 'subscript', scope: 'child', expression: { type: 'slice', value: '0:2' } }
-    ])
-  });
-
-  test('parse path to filter all books with isbn number', function() {
-    var path = jp.parse('$..book[?(@.isbn)]');
-    assert.deepEqual(path, [
-      { expression: { type: 'root', value: '$' } },
-      { operation: 'member', scope: 'descendant', expression: { type: 'identifier', value: 'book' } },
-      { operation: 'subscript', scope: 'child', expression: { type: 'filter_expression', value: '?(@.isbn)' } }
-    ])
-  });
-
-  test('parse path to filter all books with a price less than 10', function() {
-    var path = jp.parse('$..book[?(@.price<10)]');
-    assert.deepEqual(path, [
-      { expression: { type: 'root', value: '$' } },
-      { operation: 'member', scope: 'descendant', expression: { type: 'identifier', value: 'book' } },
-      { operation: 'subscript', scope: 'child', expression: { type: 'filter_expression', value: '?(@.price<10)' } }
-    ])
-  });
-
-  test('parse path to match all elements', function() {
-    var path = jp.parse('$..*');
-    assert.deepEqual(path, [
-      { expression: { type: 'root', value: '$' } },
-      { operation: 'member', scope: 'descendant', expression: { type: 'wildcard', value: '*' } }
-    ])
-  });
-
-  test('parse path with leading member', function() {
-    var path = jp.parse('store');
-    assert.deepEqual(path, [
-      { operation: 'member', scope: 'child', expression: { type: 'identifier', value: 'store' } }
-    ])
-  });
-
-  test('parse path with leading member and followers', function() {
-    var path = jp.parse('Request.prototype.end');
-    assert.deepEqual(path, [
-      { operation: 'member', scope: 'child', expression: { type: 'identifier', value: 'Request' } },
-      { operation: 'member', scope: 'child', expression: { type: 'identifier', value: 'prototype' } },
-      { operation: 'member', scope: 'child', expression: { type: 'identifier', value: 'end' } }
-    ])
-  });
-
-  test('parser ast is reinitialized after parse() throws', function() {
-    assert.throws(function() { var path = jp.parse('store.book...') })
-    var path = jp.parse('$..price');
-    assert.deepEqual(path, [
-      { "expression": { "type": "root", "value": "$" } },
-      { "expression": { "type": "identifier", "value": "price" }, "operation": "member", "scope": "descendant"}
-    ])
-  });
-
-});
-
-suite('parse-negative', function() {
-
-  test('parse path with leading member component throws', function() {
-    assert.throws(function(e) { var path = jp.parse('.store') }, /Expecting 'DOLLAR'/)
-  });
-
-  test('parse path with leading descendant member throws', function() {
-    assert.throws(function() { var path = jp.parse('..store') }, /Expecting 'DOLLAR'/)
-  });
-
-  test('leading script throws', function() {
-    assert.throws(function() { var path = jp.parse('()') }, /Unrecognized text/)
-  });
-
-  test('first time friendly error', function() {
-    assert.throws(function() { (new jp.JSONPath).parse('$...') }, /Expecting 'STAR'/)
-  });
-
-});
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/query.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/query.js
deleted file mode 100644
index 6a2a184..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/query.js
+++ /dev/null
@@ -1,359 +0,0 @@
-var assert = require('assert');
-var jp = require('../');
-
-var data = require('./data/store.json');
-
-suite('query', function() {
-
-  test('first-level member', function() {
-    var results = jp.nodes(data, '$.store');
-    assert.deepEqual(results, [ { path: ['$', 'store'], value: data.store } ]);
-  });
-
-  test('authors of all books in the store', function() {
-    var results = jp.nodes(data, '$.store.book[*].author');
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 0, 'author'], value: 'Nigel Rees' },
-      { path: ['$', 'store', 'book', 1, 'author'], value: 'Evelyn Waugh' },
-      { path: ['$', 'store', 'book', 2, 'author'], value: 'Herman Melville' },
-      { path: ['$', 'store', 'book', 3, 'author'], value: 'J. R. R. Tolkien' }
-    ]);
-  });
-
-  test('all authors', function() {
-    var results = jp.nodes(data, '$..author');
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 0, 'author'], value: 'Nigel Rees' },
-      { path: ['$', 'store', 'book', 1, 'author'], value: 'Evelyn Waugh' },
-      { path: ['$', 'store', 'book', 2, 'author'], value: 'Herman Melville' },
-      { path: ['$', 'store', 'book', 3, 'author'], value: 'J. R. R. Tolkien' }
-    ]);
-  });
-
-  test('all authors via subscript descendant string literal', function() {
-    var results = jp.nodes(data, "$..['author']");
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 0, 'author'], value: 'Nigel Rees' },
-      { path: ['$', 'store', 'book', 1, 'author'], value: 'Evelyn Waugh' },
-      { path: ['$', 'store', 'book', 2, 'author'], value: 'Herman Melville' },
-      { path: ['$', 'store', 'book', 3, 'author'], value: 'J. R. R. Tolkien' }
-    ]);
-  });
-
-  test('all things in store', function() {
-    var results = jp.nodes(data, '$.store.*');
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book'], value: data.store.book },
-      { path: ['$', 'store', 'bicycle'], value: data.store.bicycle }
-    ]);
-  });
-
-  test('price of everything in the store', function() {
-    var results = jp.nodes(data, '$.store..price');
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 0, 'price'], value: 8.95 },
-      { path: ['$', 'store', 'book', 1, 'price'], value: 12.99 },
-      { path: ['$', 'store', 'book', 2, 'price'], value: 8.99 },
-      { path: ['$', 'store', 'book', 3, 'price'], value: 22.99 },
-      { path: ['$', 'store', 'bicycle', 'price'], value: 19.95 }
-    ]);
-  });
-
-  test('last book in order via expression', function() {
-    var results = jp.nodes(data, '$..book[(@.length-1)]');
-    assert.deepEqual(results, [ { path: ['$', 'store', 'book', 3], value: data.store.book[3] }]);
-  });
-
-  test('first two books via union', function() {
-    var results = jp.nodes(data, '$..book[0,1]');
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 0], value: data.store.book[0] },
-      { path: ['$', 'store', 'book', 1], value: data.store.book[1] }
-    ]);
-  });
-
-  test('first two books via slice', function() {
-    var results = jp.nodes(data, '$..book[0:2]');
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 0], value: data.store.book[0] },
-      { path: ['$', 'store', 'book', 1], value: data.store.book[1] }
-    ]);
-  });
-
-  test('filter all books with isbn number', function() {
-    var results = jp.nodes(data, '$..book[?(@.isbn)]');
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 2], value: data.store.book[2] },
-      { path: ['$', 'store', 'book', 3], value: data.store.book[3] }
-    ]);
-  });
-
-  test('filter all books with a price less than 10', function() {
-    var results = jp.nodes(data, '$..book[?(@.price<10)]');
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 0], value: data.store.book[0] },
-      { path: ['$', 'store', 'book', 2], value: data.store.book[2] }
-    ]);
-  });
-
-  test('first ten of all elements', function() {
-    var results = jp.nodes(data, '$..*', 10);
-    assert.deepEqual(results, [
-      { path: [ '$', 'store' ], value: data.store },
-      { path: [ '$', 'store', 'book' ], value: data.store.book },
-      { path: [ '$', 'store', 'bicycle' ], value: data.store.bicycle },
-      { path: [ '$', 'store', 'book', 0 ], value: data.store.book[0] },
-      { path: [ '$', 'store', 'book', 1 ], value: data.store.book[1] },
-      { path: [ '$', 'store', 'book', 2 ], value: data.store.book[2] },
-      { path: [ '$', 'store', 'book', 3 ], value: data.store.book[3] },
-      { path: [ '$', 'store', 'book', 0, 'category' ], value: 'reference' },
-      { path: [ '$', 'store', 'book', 0, 'author' ], value: 'Nigel Rees' },
-      { path: [ '$', 'store', 'book', 0, 'title' ], value: 'Sayings of the Century' }
-    ])
-  });
-
-  test('all elements', function() {
-    var results = jp.nodes(data, '$..*');
-
-    assert.deepEqual(results, [
-      { path: [ '$', 'store' ], value: data.store },
-      { path: [ '$', 'store', 'book' ], value: data.store.book },
-      { path: [ '$', 'store', 'bicycle' ], value: data.store.bicycle },
-      { path: [ '$', 'store', 'book', 0 ], value: data.store.book[0] },
-      { path: [ '$', 'store', 'book', 1 ], value: data.store.book[1] },
-      { path: [ '$', 'store', 'book', 2 ], value: data.store.book[2] },
-      { path: [ '$', 'store', 'book', 3 ], value: data.store.book[3] },
-      { path: [ '$', 'store', 'book', 0, 'category' ], value: 'reference' },
-      { path: [ '$', 'store', 'book', 0, 'author' ], value: 'Nigel Rees' },
-      { path: [ '$', 'store', 'book', 0, 'title' ], value: 'Sayings of the Century' },
-      { path: [ '$', 'store', 'book', 0, 'price' ], value: 8.95 },
-      { path: [ '$', 'store', 'book', 1, 'category' ], value: 'fiction' },
-      { path: [ '$', 'store', 'book', 1, 'author' ], value: 'Evelyn Waugh' },
-      { path: [ '$', 'store', 'book', 1, 'title' ], value: 'Sword of Honour' },
-      { path: [ '$', 'store', 'book', 1, 'price' ], value: 12.99 },
-      { path: [ '$', 'store', 'book', 2, 'category' ], value: 'fiction' },
-      { path: [ '$', 'store', 'book', 2, 'author' ], value: 'Herman Melville' },
-      { path: [ '$', 'store', 'book', 2, 'title' ], value: 'Moby Dick' },
-      { path: [ '$', 'store', 'book', 2, 'isbn' ], value: '0-553-21311-3' },
-      { path: [ '$', 'store', 'book', 2, 'price' ], value: 8.99 },
-      { path: [ '$', 'store', 'book', 3, 'category' ], value: 'fiction' },
-      { path: [ '$', 'store', 'book', 3, 'author' ], value: 'J. R. R. Tolkien' },
-      { path: [ '$', 'store', 'book', 3, 'title' ], value: 'The Lord of the Rings' },
-      { path: [ '$', 'store', 'book', 3, 'isbn' ], value: '0-395-19395-8' },
-      { path: [ '$', 'store', 'book', 3, 'price' ], value: 22.99 },
-      { path: [ '$', 'store', 'bicycle', 'color' ], value: 'red' },
-      { path: [ '$', 'store', 'bicycle', 'price' ], value: 19.95 }
-    ]);
-  });
-
-  test('all elements via subscript wildcard', function() {
-    var results = jp.nodes(data, '$..*');
-    assert.deepEqual(jp.nodes(data, '$..[*]'), jp.nodes(data, '$..*'));
-  });
-
-  test('object subscript wildcard', function() {
-    var results = jp.query(data, '$.store[*]');
-    assert.deepEqual(results, [ data.store.book, data.store.bicycle ]);
-  });
-
-  test('no match returns empty array', function() {
-    var results = jp.nodes(data, '$..bookz');
-    assert.deepEqual(results, []);
-  });
-
-  test('member numeric literal gets first element', function() {
-    var results = jp.nodes(data, '$.store.book.0');
-    assert.deepEqual(results, [ { path: [ '$', 'store', 'book', 0 ], value: data.store.book[0] } ]);
-  });
-
-  test('member numeric literal matches string-numeric key', function() {
-    var data = { authors: { '1': 'Herman Melville', '2': 'J. R. R. Tolkien' } };
-    var results = jp.nodes(data, '$.authors.1');
-    assert.deepEqual(results, [ { path: [ '$', 'authors', 1 ], value: 'Herman Melville' } ]);
-  });
-
-  test('descendant numeric literal gets first element', function() {
-    var results = jp.nodes(data, '$.store.book..0');
-    assert.deepEqual(results, [ { path: [ '$', 'store', 'book', 0 ], value: data.store.book[0] } ]);
-  });
-
-  test('root element gets us original obj', function() {
-    var results = jp.nodes(data, '$');
-    assert.deepEqual(results, [ { path: ['$'], value: data } ]);
-  });
-
-  test('subscript double-quoted string', function() {
-    var results = jp.nodes(data, '$["store"]');
-    assert.deepEqual(results, [ { path: ['$', 'store'], value: data.store} ]);
-  });
-
-  test('subscript single-quoted string', function() {
-    var results = jp.nodes(data, "$['store']");
-    assert.deepEqual(results, [ { path: ['$', 'store'], value: data.store} ]);
-  });
-
-  test('leading member component', function() {
-    var results = jp.nodes(data, "store");
-    assert.deepEqual(results, [ { path: ['$', 'store'], value: data.store} ]);
-  });
-
-  test('union of three array slices', function() {
-    var results = jp.query(data, "$.store.book[0:1,1:2,2:3]");
-    assert.deepEqual(results, data.store.book.slice(0,3));
-  });
-
-  test('slice with step > 1', function() {
-    var results = jp.query(data, "$.store.book[0:4:2]");
-    assert.deepEqual(results, [ data.store.book[0], data.store.book[2]]);
-  });
-
-  test('union of subscript string literal keys', function() {
-    var results = jp.nodes(data, "$.store['book','bicycle']");
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book'], value: data.store.book },
-      { path: ['$', 'store', 'bicycle'], value: data.store.bicycle },
-    ]);
-  });
-
-  test('union of subscript string literal three keys', function() {
-    var results = jp.nodes(data, "$.store.book[0]['title','author','price']");
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 0, 'title'], value: data.store.book[0].title },
-      { path: ['$', 'store', 'book', 0, 'author'], value: data.store.book[0].author },
-      { path: ['$', 'store', 'book', 0, 'price'], value: data.store.book[0].price }
-    ]);
-  });
-
-  test('union of subscript integer three keys followed by member-child-identifier', function() {
-    var results = jp.nodes(data, "$.store.book[1,2,3]['title']");
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 1, 'title'], value: data.store.book[1].title },
-      { path: ['$', 'store', 'book', 2, 'title'], value: data.store.book[2].title },
-      { path: ['$', 'store', 'book', 3, 'title'], value: data.store.book[3].title }
-    ]);
-  });
-
-  test('union of subscript integer three keys followed by union of subscript string literal three keys', function() {
-    var results = jp.nodes(data, "$.store.book[0,1,2,3]['title','author','price']");
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 0, 'title'], value: data.store.book[0].title },
-      { path: ['$', 'store', 'book', 0, 'author'], value: data.store.book[0].author },
-      { path: ['$', 'store', 'book', 0, 'price'], value: data.store.book[0].price },
-      { path: ['$', 'store', 'book', 1, 'title'], value: data.store.book[1].title },
-      { path: ['$', 'store', 'book', 1, 'author'], value: data.store.book[1].author },
-      { path: ['$', 'store', 'book', 1, 'price'], value: data.store.book[1].price },
-      { path: ['$', 'store', 'book', 2, 'title'], value: data.store.book[2].title },
-      { path: ['$', 'store', 'book', 2, 'author'], value: data.store.book[2].author },
-      { path: ['$', 'store', 'book', 2, 'price'], value: data.store.book[2].price },
-      { path: ['$', 'store', 'book', 3, 'title'], value: data.store.book[3].title },
-      { path: ['$', 'store', 'book', 3, 'author'], value: data.store.book[3].author },
-      { path: ['$', 'store', 'book', 3, 'price'], value: data.store.book[3].price }
-    ]);
-  });
-  
-  test('union of subscript integer four keys, including an inexistent one, followed by union of subscript string literal three keys', function() {
-    var results = jp.nodes(data, "$.store.book[0,1,2,3,151]['title','author','price']");
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 0, 'title'], value: data.store.book[0].title },
-      { path: ['$', 'store', 'book', 0, 'author'], value: data.store.book[0].author },
-      { path: ['$', 'store', 'book', 0, 'price'], value: data.store.book[0].price },
-      { path: ['$', 'store', 'book', 1, 'title'], value: data.store.book[1].title },
-      { path: ['$', 'store', 'book', 1, 'author'], value: data.store.book[1].author },
-      { path: ['$', 'store', 'book', 1, 'price'], value: data.store.book[1].price },
-      { path: ['$', 'store', 'book', 2, 'title'], value: data.store.book[2].title },
-      { path: ['$', 'store', 'book', 2, 'author'], value: data.store.book[2].author },
-      { path: ['$', 'store', 'book', 2, 'price'], value: data.store.book[2].price },
-      { path: ['$', 'store', 'book', 3, 'title'], value: data.store.book[3].title },
-      { path: ['$', 'store', 'book', 3, 'author'], value: data.store.book[3].author },
-      { path: ['$', 'store', 'book', 3, 'price'], value: data.store.book[3].price }
-    ]);
-  });
-  
-  test('union of subscript integer three keys followed by union of subscript string literal three keys, followed by inexistent literal key', function() {
-    var results = jp.nodes(data, "$.store.book[0,1,2,3]['title','author','price','fruit']");
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 0, 'title'], value: data.store.book[0].title },
-      { path: ['$', 'store', 'book', 0, 'author'], value: data.store.book[0].author },
-      { path: ['$', 'store', 'book', 0, 'price'], value: data.store.book[0].price },
-      { path: ['$', 'store', 'book', 1, 'title'], value: data.store.book[1].title },
-      { path: ['$', 'store', 'book', 1, 'author'], value: data.store.book[1].author },
-      { path: ['$', 'store', 'book', 1, 'price'], value: data.store.book[1].price },
-      { path: ['$', 'store', 'book', 2, 'title'], value: data.store.book[2].title },
-      { path: ['$', 'store', 'book', 2, 'author'], value: data.store.book[2].author },
-      { path: ['$', 'store', 'book', 2, 'price'], value: data.store.book[2].price },
-      { path: ['$', 'store', 'book', 3, 'title'], value: data.store.book[3].title },
-      { path: ['$', 'store', 'book', 3, 'author'], value: data.store.book[3].author },
-      { path: ['$', 'store', 'book', 3, 'price'], value: data.store.book[3].price }
-    ]);
-  });
-
-  test('union of subscript 4 array slices followed by union of subscript string literal three keys', function() {
-    var results = jp.nodes(data, "$.store.book[0:1,1:2,2:3,3:4]['title','author','price']");
-    assert.deepEqual(results, [
-      { path: ['$', 'store', 'book', 0, 'title'], value: data.store.book[0].title },
-      { path: ['$', 'store', 'book', 0, 'author'], value: data.store.book[0].author },
-      { path: ['$', 'store', 'book', 0, 'price'], value: data.store.book[0].price },
-      { path: ['$', 'store', 'book', 1, 'title'], value: data.store.book[1].title },
-      { path: ['$', 'store', 'book', 1, 'author'], value: data.store.book[1].author },
-      { path: ['$', 'store', 'book', 1, 'price'], value: data.store.book[1].price },
-      { path: ['$', 'store', 'book', 2, 'title'], value: data.store.book[2].title },
-      { path: ['$', 'store', 'book', 2, 'author'], value: data.store.book[2].author },
-      { path: ['$', 'store', 'book', 2, 'price'], value: data.store.book[2].price },
-      { path: ['$', 'store', 'book', 3, 'title'], value: data.store.book[3].title },
-      { path: ['$', 'store', 'book', 3, 'author'], value: data.store.book[3].author },
-      { path: ['$', 'store', 'book', 3, 'price'], value: data.store.book[3].price }
-    ]);
-  });
-
-
-  test('nested parentheses eval', function() {
-    var pathExpression = '$..book[?( @.price && (@.price + 20 || false) )]'
-    var results = jp.query(data, pathExpression);
-    assert.deepEqual(results, data.store.book);
-  });
-
-  test('array indexes from 0 to 100', function() {
-    var data = [];
-    for (var i = 0; i <= 100; ++i)
-      data[i] = Math.random();
-
-    for (var i = 0; i <= 100; ++i) {
-      var results = jp.query(data, '$[' + i.toString() +  ']');
-      assert.deepEqual(results, [data[i]]);
-    }
-  });
-
-  test('descendant subscript numeric literal', function() {
-    var data = [ 0, [ 1, 2, 3 ], [ 4, 5, 6 ] ];
-    var results = jp.query(data, '$..[0]');
-    assert.deepEqual(results, [ 0, 1, 4 ]);
-  });
-
-  test('descendant subscript numeric literal', function() {
-    var data = [ 0, 1, [ 2, 3, 4 ], [ 5, 6, 7, [ 8, 9 , 10 ] ] ];
-    var results = jp.query(data, '$..[0,1]');
-    assert.deepEqual(results, [ 0, 1, 2, 3, 5, 6, 8, 9 ]);
-  });
-
-  test('throws for no input', function() {
-    assert.throws(function() { jp.query() }, /needs to be an object/);
-  });
-
-  test('throws for bad input', function() {
-    assert.throws(function() { jp.query("string", "string") }, /needs to be an object/);
-  });
-
-  test('throws for bad input', function() {
-    assert.throws(function() { jp.query({}, null) }, /we need a path/);
-  });
-
-  test('throws for bad input', function() {
-    assert.throws(function() { jp.query({}, 42) }, /we need a path/);
-  });
-
-  test('union on objects', function() {
-    assert.deepEqual(jp.query({a: 1, b: 2, c: null}, '$..["a","b","c","d"]'), [1, 2, null]);
-  });
-
-});
-
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/slice.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/slice.js
deleted file mode 100644
index a062e45..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/slice.js
+++ /dev/null
@@ -1,57 +0,0 @@
-var assert = require('assert');
-var slice = require('../lib/slice');
-
-var data = ['a', 'b', 'c', 'd', 'e', 'f'];
-
-suite('slice', function() {
-
-  test('no params yields copy', function() {
-    assert.deepEqual(slice(data), data);
-  });
-
-  test('no end param defaults to end', function() {
-    assert.deepEqual(slice(data, 2), data.slice(2));
-  });
-
-  test('zero end param yields empty', function() {
-    assert.deepEqual(slice(data, 0, 0), []);
-  });
-
-  test('first element with explicit params', function() {
-    assert.deepEqual(slice(data, 0, 1, 1), ['a']);
-  });
-
-  test('last element with explicit params', function() {
-    assert.deepEqual(slice(data, -1, 6), ['f']);
-  });
-
-  test('empty extents and negative step reverses', function() {
-    assert.deepEqual(slice(data, null, null, -1), ['f', 'e', 'd', 'c', 'b', 'a']);
-  });
-
-  test('negative step partial slice', function() {
-    assert.deepEqual(slice(data, 4, 2, -1), ['e', 'd']);
-  });
-
-  test('negative step partial slice no start defaults to end', function() {
-    assert.deepEqual(slice(data, null, 2, -1), ['f', 'e', 'd']);
-  });
-
-  test('extents clamped end', function() {
-    assert.deepEqual(slice(data, null, 100), data);
-  });
-
-  test('extents clamped beginning', function() {
-    assert.deepEqual(slice(data, -100, 100), data);
-  });
-
-  test('backwards extents yields empty', function() {
-    assert.deepEqual(slice(data, 2, 1), []);
-  });
-
-  test('zero step gets shot down', function() {
-    assert.throws(function() { slice(data, null, null, 0) });
-  });
-
-});
-
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/stringify.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/stringify.js
deleted file mode 100644
index 36d340f..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/stringify.js
+++ /dev/null
@@ -1,54 +0,0 @@
-var assert = require('assert');
-var jp = require('../');
-
-suite('stringify', function() {
-
-  test('simple path stringifies', function() {
-    var string = jp.stringify(['$', 'a', 'b', 'c']);
-    assert.equal(string, '$.a.b.c');
-  });
-
-  test('numeric literals end up as subscript numbers', function() {
-    var string = jp.stringify(['$', 'store', 'book', 0, 'author']);
-    assert.equal(string, '$.store.book[0].author');
-  });
-
-  test('simple path with no leading root stringifies', function() {
-    var string = jp.stringify(['a', 'b', 'c']);
-    assert.equal(string, '$.a.b.c');
-  });
-
-  test('simple parsed path stringifies', function() {
-    var path = [
-      { scope: 'child', operation: 'member', expression: { type: 'identifier', value: 'a' } },
-      { scope: 'child', operation: 'member', expression: { type: 'identifier', value: 'b' } },
-      { scope: 'child', operation: 'member', expression: { type: 'identifier', value: 'c' } }
-    ];
-    var string = jp.stringify(path);
-    assert.equal(string, '$.a.b.c');
-  });
-
-  test('keys with hyphens get subscripted', function() {
-    var string = jp.stringify(['$', 'member-search']);
-    assert.equal(string, '$["member-search"]');
-  });
-
-  test('complicated path round trips', function() {
-    var pathExpression = '$..*[0:2].member["string-xyz"]';
-    var path = jp.parse(pathExpression);
-    var string = jp.stringify(path);
-    assert.equal(string, pathExpression);
-  });
-
-  test('complicated path with filter exp round trips', function() {
-    var pathExpression = '$..*[0:2].member[?(@.val > 10)]';
-    var path = jp.parse(pathExpression);
-    var string = jp.stringify(path);
-    assert.equal(string, pathExpression);
-  });
-
-  test('throws for no input', function() {
-    assert.throws(function() { jp.stringify() }, /we need a path/);
-  });
-
-});
diff --git a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/sugar.js b/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/sugar.js
deleted file mode 100644
index 98a21b9..0000000
--- a/.yarn/unplugged/jsonpath-npm-1.0.2-15a9845dca/node_modules/jsonpath/test/sugar.js
+++ /dev/null
@@ -1,72 +0,0 @@
-var assert = require('assert');
-var jp = require('../');
-var util = require('util');
-
-suite('sugar', function() {
-
-  test('parent gets us parent value', function() {
-    var data = { a: 1, b: 2, c: 3, z: { a: 100, b: 200 } };
-    var parent = jp.parent(data, '$.z.b');
-    assert.equal(parent, data.z);
-  });
-
-  test('apply method sets values', function() {
-    var data = { a: 1, b: 2, c: 3, z: { a: 100, b: 200 } };
-    jp.apply(data, '$..a', function(v) { return v + 1 });
-    assert.equal(data.a, 2);
-    assert.equal(data.z.a, 101);
-  });
-
-  test('apply method applies survives structural changes', function() {
-    var data = {a: {b: [1, {c: [2,3]}]}};
-    jp.apply(data, '$..*[?(@.length > 1)]', function(array) {
-      return array.reverse();
-    });
-    assert.deepEqual(data.a.b, [{c: [3, 2]}, 1]);
-  });
-
-  test('value method gets us a value', function() {
-    var data = { a: 1, b: 2, c: 3, z: { a: 100, b: 200 } };
-    var b = jp.value(data, '$..b')
-    assert.equal(b, data.b);
-  });
-
-  test('value method sets us a value', function() {
-    var data = { a: 1, b: 2, c: 3, z: { a: 100, b: 200 } };
-    var b = jp.value(data, '$..b', '5000')
-    assert.equal(b, 5000);
-    assert.equal(data.b, 5000);
-  });
-
-  test('value method sets new key and value', function() {
-    var data = {};
-    var a = jp.value(data, '$.a', 1);
-    var c = jp.value(data, '$.b.c', 2);
-    assert.equal(a, 1);
-    assert.equal(data.a, 1);
-    assert.equal(c, 2);
-    assert.equal(data.b.c, 2);
-  });
-
-  test('value method sets new array value', function() {
-    var data = {};
-    var v1 = jp.value(data, '$.a.d[0]', 4);
-    var v2 = jp.value(data, '$.a.d[1]', 5);
-    assert.equal(v1, 4);
-    assert.equal(v2, 5);
-    assert.deepEqual(data.a.d, [4, 5]);
-  });
-
-  test('value method sets non-literal key', function() {
-    var data = { "list": [ { "index": 0, "value": "default" }, { "index": 1, "value": "default" } ] };
-    jp.value(data, '$.list[?(@.index == 1)].value', "test");
-    assert.equal(data.list[1].value, "test");
-  });
-
-  test('paths with a count gets us back count many paths', function() {
-    data = [ { a: [ 1, 2, 3 ], b: [ -1, -2, -3 ] }, { } ]
-    paths = jp.paths(data, '$..*', 3)
-    assert.deepEqual(paths, [ ['$', '0'], ['$', '1'], ['$', '0', 'a'] ]);
-  });
-
-});
diff --git a/.yarn/unplugged/optipng-bin-npm-6.0.0-3aa5f04a3e/node_modules/optipng-bin/vendor/optipng b/.yarn/unplugged/optipng-bin-npm-6.0.0-3aa5f04a3e/node_modules/optipng-bin/vendor/optipng
deleted file mode 100755
index e9f982a..0000000
--- a/.yarn/unplugged/optipng-bin-npm-6.0.0-3aa5f04a3e/node_modules/optipng-bin/vendor/optipng
+++ /dev/null
Binary files differ
diff --git a/yarn.lock b/yarn.lock
index 355d4af..56cc806 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -137,200 +137,217 @@
   languageName: node
   linkType: hard
 
-"@antora/asciidoc-loader@npm:3.0.0-alpha.1, @antora/asciidoc-loader@npm:^3.0.0-alpha.1, @antora/asciidoc-loader@npm:~2 >=2.3.1 || ^3.0.0-alpha.1":
-  version: 3.0.0-alpha.1
-  resolution: "@antora/asciidoc-loader@npm:3.0.0-alpha.1"
+"@antora/asciidoc-loader@npm:3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/asciidoc-loader@npm:3.0.0-alpha.9"
   dependencies:
-    asciidoctor.js: 1.5.9
-    opal-runtime: 1.0.11
-  checksum: 6aac46da8196dd9315f1be9ebcda171cee96918d963322d06d0ac449d93167a640f14a3d12da3671fc56bd191df3bd311e1744cb7cd0c9cf71b7c6fdd9bf8079
+    "@antora/logger": 3.0.0-alpha.9
+    "@antora/user-require-helper": ~2.0
+    "@asciidoctor/core": ~2.2
+  checksum: de20a2db0552f7690be136128176c21762488803a91e47c017912696e9e180bae2d86345598ea084fd5323859514bbbaa96a6745d75c283f50e004ea27a6cf1d
   languageName: node
   linkType: hard
 
-"@antora/cli@npm:^3.0.0-alpha.1":
-  version: 3.0.0-alpha.1
-  resolution: "@antora/cli@npm:3.0.0-alpha.1"
+"@antora/cli@npm:^3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/cli@npm:3.0.0-alpha.9"
   dependencies:
-    "@antora/playbook-builder": 3.0.0-alpha.1
-    commander: ~6.1
+    "@antora/logger": 3.0.0-alpha.9
+    "@antora/playbook-builder": 3.0.0-alpha.9
+    "@antora/user-require-helper": ~2.0
+    commander: ~7.2
   bin:
     antora: bin/antora
-  checksum: ebb9731dae3e45582a16733aeb3f70fc41f69621fbc69c6ab82b8623b428498b5a245820e46e88322bef279267dcc6e49b2a24732b5a71e61e5542c136afe100
+  checksum: 20efdb6945546373e413545ddae9ae0167cf19b9d24ab746ca295ee13460917bf7eb937e971bbb76bebc2cad86cbb9f9f9cce167e7114318acba314d6959da90
   languageName: node
   linkType: hard
 
-"@antora/content-aggregator@npm:3.0.0-alpha.1, @antora/content-aggregator@npm:^3.0.0-alpha.1, @antora/content-aggregator@npm:~2 >=2.3.1 || ^3.0.0-alpha.1":
-  version: 3.0.0-alpha.1
-  resolution: "@antora/content-aggregator@npm:3.0.0-alpha.1"
+"@antora/content-aggregator@npm:3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/content-aggregator@npm:3.0.0-alpha.9"
   dependencies:
-    "@antora/expand-path-helper": ~1.0
+    "@antora/expand-path-helper": ~2.0
+    "@antora/user-require-helper": ~2.0
     braces: ~3.0
     cache-directory: ~2.0
     camelcase-keys: ~6.2
-    isomorphic-git: 0.78.5
-    js-yaml: ~3.14
-    matcher: ~3.0
-    multi-progress: ~3.0
-    picomatch: ~2.2
+    hpagent: ~0.1.0
+    isomorphic-git: ~1.10
+    js-yaml: ~4.1
+    matcher: ~4.0
+    multi-progress: ~4.0
+    picomatch: ~2.3
     progress: ~2.0
+    should-proxy: ~1.0
+    simple-get: ~4.0
     vinyl: ~2.2
     vinyl-fs: ~3.0
-  checksum: b056cafcc694ad19bc6a4a3ffaff6711465e06876535806dfcc8775b845dd7a1d5aef5e33d3ba5fdcbf2eec71e0237e2f61d87488339c3bc00e51a3955e80e6e
+  checksum: df0c07c16e545c3b50f0734ca41745571ee5fd4d03531cd5db9363c2550c42d1e0bd751dff762c929fbfd4286f81914d23b5954af2b305f31672ffec38543aec
   languageName: node
   linkType: hard
 
-"@antora/content-classifier@npm:3.0.0-alpha.1, @antora/content-classifier@npm:^3.0.0-alpha.1, @antora/content-classifier@npm:~2 >=2.3.1 || ^3.0.0-alpha.1":
-  version: 3.0.0-alpha.1
-  resolution: "@antora/content-classifier@npm:3.0.0-alpha.1"
+"@antora/content-classifier@npm:3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/content-classifier@npm:3.0.0-alpha.9"
   dependencies:
+    "@antora/logger": 3.0.0-alpha.9
     mime-types: ~2.1
     vinyl: ~2.2
-  checksum: 616d47e236c76cc7784a2359b4168621c2c1c9277bdcd9179e65f65bed7e86561f280c4faa202e7776645dbdc91f77e6a2f8639675b4f94b50ae11fac242304a
+  checksum: f7c0f636c198bcf0a4694f0ba295f83be31901f06d9faf1cc45e39522500e12eec1c795dac65c2c26bf1418c13426f6e52abb9098f3843a6bf08fa20588e038b
   languageName: node
   linkType: hard
 
-"@antora/document-converter@npm:3.0.0-alpha.1, @antora/document-converter@npm:^3.0.0-alpha.1, @antora/document-converter@npm:~2 >=2.3.1 || ^3.0.0-alpha.1":
-  version: 3.0.0-alpha.1
-  resolution: "@antora/document-converter@npm:3.0.0-alpha.1"
+"@antora/document-converter@npm:3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/document-converter@npm:3.0.0-alpha.9"
   dependencies:
-    "@antora/asciidoc-loader": 3.0.0-alpha.1
-  checksum: 7242e9f5810fda216b4acf51bafaa1905b197cebda3bf19306850c1077775f929e876f0588121ddfaf15fef507fca2638c7f39411cca4951b1d85425bc30ec9b
+    "@antora/asciidoc-loader": 3.0.0-alpha.9
+  checksum: f3d24466e45b583305873885b8f6240c86e4f7421583c4c686a16f7eda96719a4a69876ae8d55a950bb499d823c58c01b2b234e941d4c3c8ba38fa9b0a7cb1b4
   languageName: node
   linkType: hard
 
-"@antora/expand-path-helper@npm:~1.0":
-  version: 1.0.0
-  resolution: "@antora/expand-path-helper@npm:1.0.0"
-  checksum: 7d6aea07f4c913f7e16edb26ba43bee57eaa01ea1dc221a1cf72ce83ea7860316fac2a51adb0acb39718d7e99d8247302ddd1862b3235a1d5d84ea438d6e811e
+"@antora/expand-path-helper@npm:~2.0":
+  version: 2.0.0
+  resolution: "@antora/expand-path-helper@npm:2.0.0"
+  checksum: c1b6ef89e69c5d0c73d759c6bb685cf855853dbbbacbf48fadb68444cf38d8449f3321f5b39254c09c521cae4db0d15bb9c9f6eebbe65eb90d255602a8035c1e
   languageName: node
   linkType: hard
 
-"@antora/navigation-builder@npm:3.0.0-alpha.1":
-  version: 3.0.0-alpha.1
-  resolution: "@antora/navigation-builder@npm:3.0.0-alpha.1"
+"@antora/logger@npm:3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/logger@npm:3.0.0-alpha.9"
   dependencies:
-    "@antora/asciidoc-loader": 3.0.0-alpha.1
-  checksum: 5bcfd7cb42d2071145db53e285aec093ac8aa11197eef80f78ffbfbfcde1fff6f989a2df2bb79072cdee63478d1e65b2c14c1ebae76522208c6da653cc142332
+    "@antora/expand-path-helper": ~2.0
+    pino: ~6.13
+    pino-pretty: ~6.0
+    sonic-boom: ~2.1
+  checksum: f14b81190a3f53f3656cb1cd675a016771b180d73446fa4c8ce716360bee9d32451c2935aa556229c8675416d8ca0666697f3fa0f5bf3905f830a59887e09440
   languageName: node
   linkType: hard
 
-"@antora/page-composer@npm:3.0.0-alpha.1":
-  version: 3.0.0-alpha.1
-  resolution: "@antora/page-composer@npm:3.0.0-alpha.1"
+"@antora/navigation-builder@npm:3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/navigation-builder@npm:3.0.0-alpha.9"
   dependencies:
+    "@antora/asciidoc-loader": 3.0.0-alpha.9
+  checksum: 6650ee0f0796879fadfe4cc206c72a0cd5bc057bb113aa587e3f5b5873c1dc8e33b36b6b2db865713cd633a0b4735c0458fb183c6fe524c16f7d511dd0568342
+  languageName: node
+  linkType: hard
+
+"@antora/page-composer@npm:3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/page-composer@npm:3.0.0-alpha.9"
+  dependencies:
+    "@antora/logger": 3.0.0-alpha.9
     handlebars: ~4.7
     require-from-string: ~2.0
-  checksum: 0ce1453252c9b39ff2356e5b237b94488dbbdf03d6b00d42df4a6bd36b986b802fba84e90428807f3576053bedcfd0d13b6622f2d6a300e3afcca5b5787b9d0d
+  checksum: b3b367e7c83e4294964ebb9783299298561b46bd0b375731b1a6cca39585b5ea38fb6aa2933ff131765d151664941a05e426aeb135653eed87a10e81a13190a7
   languageName: node
   linkType: hard
 
-"@antora/playbook-builder@npm:3.0.0-alpha.1, @antora/playbook-builder@npm:^3.0.0-alpha.1, @antora/playbook-builder@npm:~2 >=2.3.1 || ^3.0.0-alpha.1":
-  version: 3.0.0-alpha.1
-  resolution: "@antora/playbook-builder@npm:3.0.0-alpha.1"
+"@antora/playbook-builder@npm:3.0.0-alpha.9, @antora/playbook-builder@npm:^3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/playbook-builder@npm:3.0.0-alpha.9"
   dependencies:
+    "@antora/logger": 3.0.0-alpha.9
     "@iarna/toml": ~2.2
     camelcase-keys: ~6.2
-    convict: ~6.0
-    js-yaml: ~3.14
-    json5: ~2.1
-  checksum: 28aa8151bfe225e1dc12c69c610d99ae3fcb2ac35fdd47baa95405f4c433982ad87a0f948de1432d4f9657dd46dc7ce1cc00dc46a4bd514877401cba9b33d0df
+    convict: ~6.1
+    js-yaml: ~4.1
+    json5: ~2.2
+  checksum: 7e74daf6329e8e99c98763f32d5ca377c05f2daa523347879361d37be23973e4caed99928f0e7e0d3550ff7904382c36225d69693999bbfabcb7017685d261c5
   languageName: node
   linkType: hard
 
-"@antora/redirect-producer@npm:3.0.0-alpha.1":
-  version: 3.0.0-alpha.1
-  resolution: "@antora/redirect-producer@npm:3.0.0-alpha.1"
+"@antora/redirect-producer@npm:3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/redirect-producer@npm:3.0.0-alpha.9"
   dependencies:
-    "@antora/asciidoc-loader": 3.0.0-alpha.1
+    "@antora/asciidoc-loader": 3.0.0-alpha.9
     vinyl: ~2.2
-  checksum: 5913d7d804f9eb64b3991aad9d23edf8370f6e4cc4be2cac780b346f216ff006219ac7f3899fad767d268b0c3d23c5beadbd78347ff10760d6ed09f80c2b8f18
+  checksum: 11906505e39cc52bf213b9de23c4befc625eba3520ae0cca59533d5de3572aec0368b1621563af3d1b75cbfc2ed55612a2df807fa123044f7ef77f817c9c9dd6
   languageName: node
   linkType: hard
 
-"@antora/site-generator-default@npm:^3.0.0-alpha.1":
-  version: 3.0.0-alpha.1
-  resolution: "@antora/site-generator-default@npm:3.0.0-alpha.1"
+"@antora/site-generator-default@npm:^3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/site-generator-default@npm:3.0.0-alpha.9"
   dependencies:
-    "@antora/asciidoc-loader": 3.0.0-alpha.1
-    "@antora/content-aggregator": 3.0.0-alpha.1
-    "@antora/content-classifier": 3.0.0-alpha.1
-    "@antora/document-converter": 3.0.0-alpha.1
-    "@antora/navigation-builder": 3.0.0-alpha.1
-    "@antora/page-composer": 3.0.0-alpha.1
-    "@antora/playbook-builder": 3.0.0-alpha.1
-    "@antora/redirect-producer": 3.0.0-alpha.1
-    "@antora/site-mapper": 3.0.0-alpha.1
-    "@antora/site-publisher": 3.0.0-alpha.1
-    "@antora/ui-loader": 3.0.0-alpha.1
-  checksum: 9c517b4c19484f1c728da4fcfc3a658e9fb3f099a3622b0b45611ed511f7a5472a7ec543ca6926488e34ec438e6a17b304b04cda15357e89a2552af3217b0058
+    "@antora/asciidoc-loader": 3.0.0-alpha.9
+    "@antora/content-aggregator": 3.0.0-alpha.9
+    "@antora/content-classifier": 3.0.0-alpha.9
+    "@antora/document-converter": 3.0.0-alpha.9
+    "@antora/navigation-builder": 3.0.0-alpha.9
+    "@antora/page-composer": 3.0.0-alpha.9
+    "@antora/playbook-builder": 3.0.0-alpha.9
+    "@antora/redirect-producer": 3.0.0-alpha.9
+    "@antora/site-mapper": 3.0.0-alpha.9
+    "@antora/site-publisher": 3.0.0-alpha.9
+    "@antora/ui-loader": 3.0.0-alpha.9
+    "@antora/user-require-helper": ~2.0
+  checksum: b0ee477650edda2526fefff64b115ab43a4aad8a2a7548c2698334a997154f2177c3e5c8c522fe2b3ceb48f3772219ade5896932990dea57b3fdfbd05c484768
   languageName: node
   linkType: hard
 
-"@antora/site-mapper@npm:3.0.0-alpha.1":
-  version: 3.0.0-alpha.1
-  resolution: "@antora/site-mapper@npm:3.0.0-alpha.1"
+"@antora/site-mapper@npm:3.0.0-alpha.9, @antora/site-mapper@npm:^3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/site-mapper@npm:3.0.0-alpha.9"
   dependencies:
-    "@antora/content-classifier": 3.0.0-alpha.1
+    "@antora/content-classifier": 3.0.0-alpha.9
     vinyl: ~2.2
-  checksum: a0a4857b34e9d6ff07c2ebd0556ed28af93f58202b457a7551a38d853954c79fa259974a2ddc80a4448b7daed1a68c62134efd5f9b79bb8ce52fd85e3293d51b
+  checksum: 7d15e9c5c455ad62e27214057493488db5f9e4dffe41bdf5be763edb441c5c76712dc073e6c44f28f55a30fdcb97795cd9c4a071cb4cda64429414e51e8819dd
   languageName: node
   linkType: hard
 
-"@antora/site-publisher@npm:3.0.0-alpha.1":
-  version: 3.0.0-alpha.1
-  resolution: "@antora/site-publisher@npm:3.0.0-alpha.1"
+"@antora/site-publisher@npm:3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/site-publisher@npm:3.0.0-alpha.9"
   dependencies:
-    "@antora/expand-path-helper": ~1.0
-    gulp-vinyl-zip: ~2.2
+    "@antora/expand-path-helper": ~2.0
+    "@antora/user-require-helper": ~2.0
+    gulp-vinyl-zip: ~2.5
     vinyl: ~2.2
     vinyl-fs: ~3.0
-  checksum: 76b9ad8dabd0586e218d239f584072747bd26cde2951ea428b3ad1ad4d90a5f3323252e0f8a7342911379481ffde77fbdc5258a1615e0e88f51d57f43fb3bc77
+  checksum: 71d10e41e59a0bbb7d783d3bade5f284cd3f9391802700770fa1ce8a50837367439f78e4c58228de3866b3fd9ba5102c1ee1b0c44ec20900536532bd297d80bd
   languageName: node
   linkType: hard
 
-"@antora/ui-loader@npm:3.0.0-alpha.1":
-  version: 3.0.0-alpha.1
-  resolution: "@antora/ui-loader@npm:3.0.0-alpha.1"
+"@antora/ui-loader@npm:3.0.0-alpha.9":
+  version: 3.0.0-alpha.9
+  resolution: "@antora/ui-loader@npm:3.0.0-alpha.9"
   dependencies:
-    "@antora/expand-path-helper": ~1.0
-    bl: ~4.0
+    "@antora/expand-path-helper": ~2.0
     cache-directory: ~2.0
     camelcase-keys: ~6.2
-    got: ~11.7
-    gulp-vinyl-zip: ~2.2
-    js-yaml: ~3.14
+    gulp-vinyl-zip: ~2.5
+    hpagent: ~0.1.0
+    js-yaml: ~4.1
     minimatch-all: ~1.1
+    should-proxy: ~1.0
+    simple-concat: ~1.0
+    simple-get: ~4.0
     vinyl: ~2.2
     vinyl-fs: ~3.0
-  checksum: eae6028e6f0292915323b8241ae48a5fca7b9dd110e4c4582a5fd208dbc9a4ed9e8786eb430eb279b66d47513407dbbef92ec0ff6797f8b2bf0979c7edbef3f5
+  checksum: a09c08a8672ddc41b83d4701c92ab18bfa2cb8cbc1b03faba147bfc2009aa40fd9546f07c64f8d100c8f1f13f5c6358e1c5f2d4050c8a80a9fd6876301ad6bb8
   languageName: node
   linkType: hard
 
-"@antora/xref-validator@https://gitlab.com/antora/xref-validator.git#commit=19bfaf88fc7dd39552cfd8b3ac41c55d6d8f9edd":
-  version: 1.0.0-alpha.13
-  resolution: "@antora/xref-validator@https://gitlab.com/antora/xref-validator.git#commit=19bfaf88fc7dd39552cfd8b3ac41c55d6d8f9edd"
+"@antora/user-require-helper@npm:^2.0.0, @antora/user-require-helper@npm:~2.0":
+  version: 2.0.0
+  resolution: "@antora/user-require-helper@npm:2.0.0"
   dependencies:
-    "@antora/asciidoc-loader": ~2 >=2.3.1 || ^3.0.0-alpha.1
-    "@antora/content-aggregator": ~2 >=2.3.1 || ^3.0.0-alpha.1
-    "@antora/content-classifier": ~2 >=2.3.1 || ^3.0.0-alpha.1
-    "@antora/document-converter": ~2 >=2.3.1 || ^3.0.0-alpha.1
-    "@antora/expand-path-helper": ~1.0
-    "@antora/playbook-builder": ~2 >=2.3.1 || ^3.0.0-alpha.1
-    cache-directory: ~2.0
-    got: ~11.7
-    node-gzip: ~1.1
-  dependenciesMeta:
-    "@antora/asciidoc-loader":
-      optional: true
-    "@antora/content-aggregator":
-      optional: true
-    "@antora/content-classifier":
-      optional: true
-    "@antora/document-converter":
-      optional: true
-    "@antora/playbook-builder":
-      optional: true
-  checksum: cac46398458205ba3f8468662807ecd650689430e015b7dcb1c7aec46d7a0e1cc04cb5a71e9366425c191b896c5a7e00ead76b6fac80d62a9d0e7fbc209da8db
+    "@antora/expand-path-helper": ~2.0
+  checksum: 8b2080b8d3ae68bdc18444a9d5fd7032f2ebf727e375c81628216bd172001319494b600713d6c3fef14968fc2d7dd32afb0389f357cf3d018b82d1b78e010d76
+  languageName: node
+  linkType: hard
+
+"@asciidoctor/core@npm:~2.2":
+  version: 2.2.5
+  resolution: "@asciidoctor/core@npm:2.2.5"
+  dependencies:
+    asciidoctor-opal-runtime: 0.3.3
+    unxhr: 1.0.1
+  checksum: 36efd6f631872fbb17f327d64a06508fac3b497c160cc826a06cfabcfd71659fec7ab207ec8b27f3784b65dca24b34f7b6a26d12932793f1ca8e7d27285c0b54
   languageName: node
   linkType: hard
 
@@ -1579,14 +1596,25 @@
   languageName: node
   linkType: hard
 
-"@djencks/asciidoctor-jsonpath@npm:^0.0.1":
-  version: 0.0.1
-  resolution: "@djencks/asciidoctor-jsonpath@npm:0.0.1"
+"@djencks/asciidoctor-jsonpath@npm:^0.0.4":
+  version: 0.0.4
+  resolution: "@djencks/asciidoctor-jsonpath@npm:0.0.4"
   dependencies:
+    "@antora/user-require-helper": ^2.0.0
+    "@iarna/toml": ^2.2.5
     esprima: ^4.0.1
-    jsonpath: ^1.0.2
+    js-yaml: ^4.1.0
+    json5: ^2.2.0
+    jsonpath: ^1.1.1
     static-eval: ^2.1.0
-  checksum: 55493d1df5ee743a0e97b4caa033b3cbe19bdb792f4d623a7e0944cca78cd7f8e3f913f782ab4c5f28284756446da6d6103e350c4c64513afdae9dee504ba0e8
+  checksum: ba33c6567cb4814f778aeafc4a9519a0b9acc27c832c542143294bff69684cdeb2d2c2bbf69fdadb13493a6fd8be7c6de32247e954f85b11ead12bc2af649da0
+  languageName: node
+  linkType: hard
+
+"@hapi/bourne@npm:^2.0.0":
+  version: 2.0.0
+  resolution: "@hapi/bourne@npm:2.0.0"
+  checksum: 97a3e6d44c63debbb170f5966a8076022e2855f1c4fa81edc8c6fd255ba56ce047c3dcce5055858188610eafd77e6420c67ece7fd17e3192830e2fbca7766fd0
   languageName: node
   linkType: hard
 
@@ -1600,6 +1628,13 @@
   languageName: node
   linkType: hard
 
+"@iarna/toml@npm:^2.2.5":
+  version: 2.2.5
+  resolution: "@iarna/toml@npm:2.2.5"
+  checksum: 929a8516a24996b75768f7e0591815e37004f2cdda12b245c9a5ae64f423b4bd2bdd6943fc80e9bb5360a7be0b6d05bac57c178578d9a73acfb2eab125c594ee
+  languageName: node
+  linkType: hard
+
 "@iarna/toml@npm:~2.2":
   version: 2.2.3
   resolution: "@iarna/toml@npm:2.2.3"
@@ -2357,13 +2392,6 @@
   languageName: node
   linkType: hard
 
-"@sindresorhus/is@npm:^3.1.1":
-  version: 3.1.2
-  resolution: "@sindresorhus/is@npm:3.1.2"
-  checksum: da0047761ed8f7803955bedefe75324f3601b950b98c38f6e5e409ed3ce4c07035ed2733cce9b48377d9fc8cfbaa5b2aa8bac0505188a7c5b65a06c47057a610
-  languageName: node
-  linkType: hard
-
 "@sindresorhus/is@npm:^4.0.0":
   version: 4.0.1
   resolution: "@sindresorhus/is@npm:4.0.1"
@@ -3206,18 +3234,13 @@
   version: 0.0.0-use.local
   resolution: "apache-camel-website@workspace:."
   dependencies:
-    "@antora/asciidoc-loader": ^3.0.0-alpha.1
-    "@antora/cli": ^3.0.0-alpha.1
-    "@antora/content-aggregator": ^3.0.0-alpha.1
-    "@antora/content-classifier": ^3.0.0-alpha.1
-    "@antora/document-converter": ^3.0.0-alpha.1
-    "@antora/playbook-builder": ^3.0.0-alpha.1
-    "@antora/site-generator-default": ^3.0.0-alpha.1
-    "@antora/site-mapper": 3.0.0-alpha.1
-    "@antora/xref-validator": "https://gitlab.com/antora/xref-validator.git#commit=19bfaf88fc7dd39552cfd8b3ac41c55d6d8f9edd"
+    "@antora/cli": ^3.0.0-alpha.9
+    "@antora/playbook-builder": ^3.0.0-alpha.9
+    "@antora/site-generator-default": ^3.0.0-alpha.9
+    "@antora/site-mapper": ^3.0.0-alpha.9
     "@deadlinks/cargo-deadlinks": "github-release:deadlinks/cargo-deadlinks:0.8.0/deadlinks-linux"
     "@djencks/asciidoctor-antora-indexer": ^0.0.6
-    "@djencks/asciidoctor-jsonpath": ^0.0.1
+    "@djencks/asciidoctor-jsonpath": ^0.0.4
     "@oclif/errors": ^1.3.4
     antora-ui-camel: "workspace:antora-ui-camel"
     del: ^6.0.0
@@ -3230,6 +3253,7 @@
     netlify-cli: ^2.69.11
     npm-run-all: ~4
     opal-runtime: 1.0.11
+    pino-pretty: ^5.0.0
     toml: ~3.0
   languageName: unknown
   linkType: soft
@@ -3325,6 +3349,25 @@
   languageName: node
   linkType: hard
 
+"argparse@npm:^2.0.1":
+  version: 2.0.1
+  resolution: "argparse@npm:2.0.1"
+  checksum: 160b7a25d2a7097fd5fdf25eb8a99e037340078f70e6c7cfdef305837ed14d54570b2b13261bcae26c8cd44ad6e9a7136a0110d815ac65a7891c69c7bf2f4afd
+  languageName: node
+  linkType: hard
+
+"args@npm:^5.0.1":
+  version: 5.0.1
+  resolution: "args@npm:5.0.1"
+  dependencies:
+    camelcase: 5.0.0
+    chalk: 2.4.2
+    leven: 2.1.0
+    mri: 1.1.4
+  checksum: 2c322bff707f140744c4296fe5fb38b0111fc67f9e2433d6a4e5685b2697ec25ac6d9afe1938f8947b1badd89db870d99cbfeb1376d37b41081fe96d082613df
+  languageName: node
+  linkType: hard
+
 "arr-diff@npm:^1.0.1":
   version: 1.1.0
   resolution: "arr-diff@npm:1.1.0"
@@ -3539,6 +3582,16 @@
   languageName: node
   linkType: hard
 
+"asciidoctor-opal-runtime@npm:0.3.3":
+  version: 0.3.3
+  resolution: "asciidoctor-opal-runtime@npm:0.3.3"
+  dependencies:
+    glob: 7.1.3
+    unxhr: 1.0.1
+  checksum: 508d892b1c1b72253666f182d93bb70b48319769e7e7bf34aa66f06fe682c5e04ce6931c60bc6104f0ad827ed70461fa299d911a88c5675a0695ba744c43ce48
+  languageName: node
+  linkType: hard
+
 "asciidoctor.js@npm:1.5.9":
   version: 1.5.9
   resolution: "asciidoctor.js@npm:1.5.9"
@@ -3679,6 +3732,13 @@
   languageName: node
   linkType: hard
 
+"atomic-sleep@npm:^1.0.0":
+  version: 1.0.0
+  resolution: "atomic-sleep@npm:1.0.0"
+  checksum: 2c6fa68cafef5ec1501245da00cde40b8f7ac71428bd727a923ea883b81ad643667a85677056cd663ad3ca584a49dbeb3a1bd4e6c70c1e9e36afd71b6e36ef96
+  languageName: node
+  linkType: hard
+
 "autoprefixer@npm:^9.7.6, autoprefixer@npm:~9.7":
   version: 9.7.6
   resolution: "autoprefixer@npm:9.7.6"
@@ -3785,13 +3845,6 @@
   languageName: node
   linkType: hard
 
-"base64-js@npm:0.0.2":
-  version: 0.0.2
-  resolution: "base64-js@npm:0.0.2"
-  checksum: b716ef61b940c906f8afa45d943d1e1fcedd6744da4749eec3cf992f8669eb50fd6fa4dd7de6102543e13eb1f8ae75d0bec67549ae4df02c772f7bec80b2dc3a
-  languageName: node
-  linkType: hard
-
 "base64-js@npm:^1.0.2, base64-js@npm:^1.3.1":
   version: 1.5.1
   resolution: "base64-js@npm:1.5.1"
@@ -3928,7 +3981,7 @@
   languageName: node
   linkType: hard
 
-"bl@npm:^4.0.3, bl@npm:~4.0":
+"bl@npm:^4.0.3":
   version: 4.0.3
   resolution: "bl@npm:4.0.3"
   dependencies:
@@ -3999,16 +4052,6 @@
   languageName: node
   linkType: hard
 
-"bops@npm:~0.0.6":
-  version: 0.0.7
-  resolution: "bops@npm:0.0.7"
-  dependencies:
-    base64-js: 0.0.2
-    to-utf8: 0.0.1
-  checksum: 8d499cd473f94de3c9fba49e44477c327c607d2a68888a2b85c8f7e7123def916996bba5208142cc8a555f10ee4a3e3fccf2bc2fe4b8717a0875d53601985e4c
-  languageName: node
-  linkType: hard
-
 "boxen@npm:^4.1.0, boxen@npm:^4.2.0":
   version: 4.2.0
   resolution: "boxen@npm:4.2.0"
@@ -4594,6 +4637,13 @@
   languageName: node
   linkType: hard
 
+"camelcase@npm:5.0.0":
+  version: 5.0.0
+  resolution: "camelcase@npm:5.0.0"
+  checksum: 73567fa11f981cf6b6f282bf87197172771dccef7a8b1574115058e3f5266f8e0523541b629ba14ee05c269e743f516238862d32812afd6759dbb5fa5080da8e
+  languageName: node
+  linkType: hard
+
 "camelcase@npm:^2.0.0":
   version: 2.1.1
   resolution: "camelcase@npm:2.1.1"
@@ -4672,6 +4722,17 @@
   languageName: node
   linkType: hard
 
+"chalk@npm:2.4.2, chalk@npm:^2.0.0, chalk@npm:^2.0.1, chalk@npm:^2.1.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2":
+  version: 2.4.2
+  resolution: "chalk@npm:2.4.2"
+  dependencies:
+    ansi-styles: ^3.2.1
+    escape-string-regexp: ^1.0.5
+    supports-color: ^5.3.0
+  checksum: 22c7b7b5bc761c882bb6516454a1a671923f1c53ff972860065aa0b28a195f230163c1d46ee88bcc7a03e5539177d896457d8bc727de7f244c6e87032743038e
+  languageName: node
+  linkType: hard
+
 "chalk@npm:^0.5.1":
   version: 0.5.1
   resolution: "chalk@npm:0.5.1"
@@ -4698,17 +4759,6 @@
   languageName: node
   linkType: hard
 
-"chalk@npm:^2.0.0, chalk@npm:^2.0.1, chalk@npm:^2.1.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2":
-  version: 2.4.2
-  resolution: "chalk@npm:2.4.2"
-  dependencies:
-    ansi-styles: ^3.2.1
-    escape-string-regexp: ^1.0.5
-    supports-color: ^5.3.0
-  checksum: 22c7b7b5bc761c882bb6516454a1a671923f1c53ff972860065aa0b28a195f230163c1d46ee88bcc7a03e5539177d896457d8bc727de7f244c6e87032743038e
-  languageName: node
-  linkType: hard
-
 "chalk@npm:^3.0.0, chalk@npm:^3.0.0-beta.2":
   version: 3.0.0
   resolution: "chalk@npm:3.0.0"
@@ -5266,6 +5316,13 @@
   languageName: node
   linkType: hard
 
+"colorette@npm:^1.3.0":
+  version: 1.4.0
+  resolution: "colorette@npm:1.4.0"
+  checksum: 7ef8e1ca16ca7ae4659722ecd103ff89388e1e1e4100ee41e892ad880364a2f8bb9aacbce6c96aa572f25e56a45a2ea7008ff69b8182bc6baf383cd269b963c0
+  languageName: node
+  linkType: hard
+
 "colors@npm:^1.1.2, colors@npm:^1.2.1":
   version: 1.4.0
   resolution: "colors@npm:1.4.0"
@@ -5355,10 +5412,10 @@
   languageName: node
   linkType: hard
 
-"commander@npm:~6.1":
-  version: 6.1.0
-  resolution: "commander@npm:6.1.0"
-  checksum: ef1e310c3f430b84f8818ec9c6e5ce1b84909616eb2c1b1a79f646bc25fbca156eccf2ecf19f07e77a08dc519728d53d1300f94f3b2ad93de65add66044dfce6
+"commander@npm:~7.2":
+  version: 7.2.0
+  resolution: "commander@npm:7.2.0"
+  checksum: bdc0eca5e25cd24af8440163d3c9a996785bbac4b49a590365699cdc1ed08cefbac8f268153208ab2bc5dc3cb1d3fb573fd1590c681e36e371342186bd331a4c
   languageName: node
   linkType: hard
 
@@ -5566,13 +5623,13 @@
   languageName: node
   linkType: hard
 
-"convict@npm:~6.0":
-  version: 6.0.0
-  resolution: "convict@npm:6.0.0"
+"convict@npm:~6.1":
+  version: 6.1.0
+  resolution: "convict@npm:6.1.0"
   dependencies:
     lodash.clonedeep: ^4.5.0
     yargs-parser: ^18.1.3
-  checksum: 6fc69e10585fa47241fc8e1581611cb00857e56eeb22a6fa64056f70e32341bee7debe1cfe34a1984dd8e2f8d8d9c82a8500ca886ebcd42bb602ada551984953
+  checksum: dce48437434998c9e105e0554b7d33b49870bb81fb5a49cc4adae7187c54371382c0a16dac6a8c4edc1e2e599ee5b6121af18db4402b8472d067ce989c3c1065
   languageName: node
   linkType: hard
 
@@ -6103,6 +6160,13 @@
   languageName: node
   linkType: hard
 
+"dateformat@npm:^4.5.1":
+  version: 4.5.1
+  resolution: "dateformat@npm:4.5.1"
+  checksum: d5d08fd36f0987570cacada467145c722b4051285fae32969d62ef4bfc3c392f310bf6982a3ecbe62f0b42a944846d94a2bff53b8051ad1540bcaf118732fbf4
+  languageName: node
+  linkType: hard
+
 "debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.9":
   version: 2.6.9
   resolution: "debug@npm:2.6.9"
@@ -7998,6 +8062,13 @@
   languageName: node
   linkType: hard
 
+"fast-redact@npm:^3.0.0":
+  version: 3.0.2
+  resolution: "fast-redact@npm:3.0.2"
+  checksum: afb8b397dc16cf24ba4237fa3ccd98aae3245f9a43b83545105151dc9cfcdc1946bd271ba528e31570fa83b334a806a3f447af5beec67ea04e4b77996919fd12
+  languageName: node
+  linkType: hard
+
 "fast-safe-stringify@npm:^2.0.4, fast-safe-stringify@npm:^2.0.7":
   version: 2.0.7
   resolution: "fast-safe-stringify@npm:2.0.7"
@@ -8005,6 +8076,13 @@
   languageName: node
   linkType: hard
 
+"fast-safe-stringify@npm:^2.0.8":
+  version: 2.1.1
+  resolution: "fast-safe-stringify@npm:2.1.1"
+  checksum: 79c9940151284bcd46d5a46c6e93f3037aca0d151f65fa20dac6d914aeb755393dc1c7ef124f4813921c47b8c629af7638e765c2bfeb0127fad2a9f32c676b64
+  languageName: node
+  linkType: hard
+
 "fast-stringify@npm:^1.1.0":
   version: 1.1.2
   resolution: "fast-stringify@npm:1.1.2"
@@ -8012,6 +8090,13 @@
   languageName: node
   linkType: hard
 
+"fastify-warning@npm:^0.2.0":
+  version: 0.2.0
+  resolution: "fastify-warning@npm:0.2.0"
+  checksum: 17b9e2ffdfbfd40486f3395e4c33a8f997c9d23c3201624eed5596f3e3dcd3d5bf4f0c18b3bf7c32f3e80d1d573df9d59bc5c179fcfe5de52a1baa64934a54cf
+  languageName: node
+  linkType: hard
+
 "fastq@npm:^1.6.0":
   version: 1.9.0
   resolution: "fastq@npm:1.9.0"
@@ -8318,6 +8403,13 @@
   languageName: node
   linkType: hard
 
+"flatstr@npm:^1.0.12":
+  version: 1.0.12
+  resolution: "flatstr@npm:1.0.12"
+  checksum: 2803767f91887ffd60ac2aac0d6ccf2dd9e2d8f216628a73e3f525d5b5bfa4ac9a5b57334a4c1e6d5622f92f440c52562f7ca9719ace9d025d6c5b7a1a1579db
+  languageName: node
+  linkType: hard
+
 "flatted@npm:^2.0.0":
   version: 2.0.1
   resolution: "flatted@npm:2.0.1"
@@ -8803,16 +8895,6 @@
   languageName: node
   linkType: hard
 
-"git-apply-delta@npm:0.0.7":
-  version: 0.0.7
-  resolution: "git-apply-delta@npm:0.0.7"
-  dependencies:
-    bops: ~0.0.6
-    varint: 0.0.3
-  checksum: ab9c5cc9941b0f7eb70bbced279c4893e7784b3decbc95658963e48f0629e7e44173a881a33961e89d4d3e54133c8206710f28471c13a8cf8ca2d2f997965f47
-  languageName: node
-  linkType: hard
-
 "git-repo-info@npm:^2.1.0":
   version: 2.1.1
   resolution: "git-repo-info@npm:2.1.1"
@@ -8900,6 +8982,20 @@
   languageName: node
   linkType: hard
 
+"glob@npm:7.1.3":
+  version: 7.1.3
+  resolution: "glob@npm:7.1.3"
+  dependencies:
+    fs.realpath: ^1.0.0
+    inflight: ^1.0.4
+    inherits: 2
+    minimatch: ^3.0.4
+    once: ^1.3.0
+    path-is-absolute: ^1.0.0
+  checksum: d9d1460afd650e0183bdf63a2b013ed5d29bddd7423699d6fdac30f4971bd0c3666c98b8074e9bf6b12b8f24fd21943cd6417c4947522a5a108e13c688149776
+  languageName: node
+  linkType: hard
+
 "glob@npm:^7.1.0, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6":
   version: 7.1.6
   resolution: "glob@npm:7.1.6"
@@ -8994,13 +9090,6 @@
   languageName: node
   linkType: hard
 
-"globalyzer@npm:^0.1.4":
-  version: 0.1.4
-  resolution: "globalyzer@npm:0.1.4"
-  checksum: 31b1ffae741a3dbe3b1dc8dc7fd637b852583af4842839ba101d72f1beab9c0499c102643274fc202eac609711e64dfa32354fc976e239ff7a38a0dbc35e47f1
-  languageName: node
-  linkType: hard
-
 "globby@npm:^10.0.0, globby@npm:^10.0.1, globby@npm:^10.0.2":
   version: 10.0.2
   resolution: "globby@npm:10.0.2"
@@ -9054,13 +9143,6 @@
   languageName: node
   linkType: hard
 
-"globrex@npm:^0.1.2":
-  version: 0.1.2
-  resolution: "globrex@npm:0.1.2"
-  checksum: 78825a08abba1994cc3f79a3812a627cf22ac676b08e3b812a7c284af47d39d4dcddff6ac811cb994e817949df1ea53a17c13aa561d9c265b4d3fc34b7362990
-  languageName: node
-  linkType: hard
-
 "glogg@npm:^1.0.0":
   version: 1.0.2
   resolution: "glogg@npm:1.0.2"
@@ -9166,25 +9248,6 @@
   languageName: node
   linkType: hard
 
-"got@npm:~11.7":
-  version: 11.7.0
-  resolution: "got@npm:11.7.0"
-  dependencies:
-    "@sindresorhus/is": ^3.1.1
-    "@szmarczak/http-timer": ^4.0.5
-    "@types/cacheable-request": ^6.0.1
-    "@types/responselike": ^1.0.0
-    cacheable-lookup: ^5.0.3
-    cacheable-request: ^7.0.1
-    decompress-response: ^6.0.0
-    http2-wrapper: ^1.0.0-beta.5.2
-    lowercase-keys: ^2.0.0
-    p-cancelable: ^2.0.0
-    responselike: ^2.0.0
-  checksum: 780b4b1d33d1a08aa7ae044baa379c0abe1b781ae1101ca0fc8b335195386a0653aa0d9af1ff3f8dd02020fd75aabdf62358988473edf869f34202cc21fd9ce0
-  languageName: node
-  linkType: hard
-
 "graceful-fs@npm:^4.0.0, graceful-fs@npm:^4.1.10, graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.2, graceful-fs@npm:^4.2.3, graceful-fs@npm:^4.2.4":
   version: 4.2.4
   resolution: "graceful-fs@npm:4.2.4"
@@ -9431,6 +9494,21 @@
   languageName: node
   linkType: hard
 
+"gulp-vinyl-zip@npm:~2.5":
+  version: 2.5.0
+  resolution: "gulp-vinyl-zip@npm:2.5.0"
+  dependencies:
+    queue: ^4.2.1
+    through: ^2.3.8
+    through2: ^2.0.3
+    vinyl: ^2.0.2
+    vinyl-fs: ^3.0.3
+    yauzl: ^2.2.1
+    yazl: ^2.2.1
+  checksum: 2744a6b750be2c41f036542e8682d6c9c82b0d7d924d64164f9ca90c112a9f0c30dfb7fa25a9f28c21f0e248a920bf66482bb1ea39f5b9de6b04dc95127ef4bd
+  languageName: node
+  linkType: hard
+
 "gulp@npm:~4.0":
   version: 4.0.2
   resolution: "gulp@npm:4.0.2"
@@ -9777,6 +9855,13 @@
   languageName: node
   linkType: hard
 
+"hpagent@npm:~0.1.0":
+  version: 0.1.2
+  resolution: "hpagent@npm:0.1.2"
+  checksum: a94ce21d487ebd69481b80d46bcc9336cd81bd27145ef1c21779782d516fd71504180809e1474f02aa06ab9ae0a201b6a66e4732a46db6e4175d31ef3026c67c
+  languageName: node
+  linkType: hard
+
 "hsl-regex@npm:^1.0.0":
   version: 1.0.0
   resolution: "hsl-regex@npm:1.0.0"
@@ -11245,19 +11330,15 @@
   languageName: node
   linkType: hard
 
-"isomorphic-git@npm:0.78.5":
-  version: 0.78.5
-  resolution: "isomorphic-git@npm:0.78.5"
+"isomorphic-git@npm:~1.10":
+  version: 1.10.0
+  resolution: "isomorphic-git@npm:1.10.0"
   dependencies:
     async-lock: ^1.1.0
     clean-git-ref: ^2.0.1
     crc-32: ^1.2.0
     diff3: 0.0.3
-    git-apply-delta: 0.0.7
-    globalyzer: ^0.1.4
-    globrex: ^0.1.2
     ignore: ^5.1.4
-    marky: ^1.2.1
     minimisted: ^2.0.0
     pako: ^1.0.10
     pify: ^4.0.1
@@ -11265,8 +11346,8 @@
     sha.js: ^2.4.9
     simple-get: ^3.0.2
   bin:
-    isogit: ./cli.js
-  checksum: a250410f103b1b0bc1a7349d1edb2c12fa841ecf1bab1e5f11f6965dcb178f346037a79c6d418a9ba7d1ac3da810cafc36fb597d6b005dcfe30147938c089276
+    isogit: cli.cjs
+  checksum: f53bef67dcdc2db57495447cad7b599fd4b79470d8bcaa6dd8341987c7dd21c6e279abf21958d7c1730419ae2f42af334c9ce5ad6d35ae2864d92c41119b72e6
   languageName: node
   linkType: hard
 
@@ -11319,13 +11400,20 @@
   languageName: node
   linkType: hard
 
-"jmespath@npm:0.15.0":
+"jmespath@npm:0.15.0, jmespath@npm:^0.15.0":
   version: 0.15.0
   resolution: "jmespath@npm:0.15.0"
   checksum: b3edb0b9773571d72dc1aa2d5590fa0f82419a0a04d5a0d09aee93219f41d046ea9cf3c36931fc48d9430348ca575530beab5968923544136cc8ddcd49ff7a47
   languageName: node
   linkType: hard
 
+"joycon@npm:^3.0.0":
+  version: 3.0.1
+  resolution: "joycon@npm:3.0.1"
+  checksum: db64c93cf05d6f99ea832708ac9ec10e8bbb92d767e3cc38f8c5111b513dbce4b1419b0fe42620e664998639b455dd943e8dd493d8753c5034837501f8e823c4
+  languageName: node
+  linkType: hard
+
 "jpegtran-bin@npm:^4.0.0":
   version: 4.0.0
   resolution: "jpegtran-bin@npm:4.0.0"
@@ -11353,7 +11441,7 @@
   languageName: node
   linkType: hard
 
-"js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.0, js-yaml@npm:~3.14":
+"js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.0":
   version: 3.14.1
   resolution: "js-yaml@npm:3.14.1"
   dependencies:
@@ -11365,6 +11453,17 @@
   languageName: node
   linkType: hard
 
+"js-yaml@npm:^4.1.0, js-yaml@npm:~4.1":
+  version: 4.1.0
+  resolution: "js-yaml@npm:4.1.0"
+  dependencies:
+    argparse: ^2.0.1
+  bin:
+    js-yaml: bin/js-yaml.js
+  checksum: 8973cf4296c944cc2551d1e3d3d064e7de0d0a6db3f7bafe40339ee9e5e0329560b52c4b8492b9b22365404c9be0822b62340ab49884e1dedfcc7ff80158abe0
+  languageName: node
+  linkType: hard
+
 "js-yaml@npm:~3.13":
   version: 3.13.1
   resolution: "js-yaml@npm:3.13.1"
@@ -11484,7 +11583,7 @@
   languageName: node
   linkType: hard
 
-"json5@npm:^2.1.2, json5@npm:~2.1":
+"json5@npm:^2.1.2":
   version: 2.1.3
   resolution: "json5@npm:2.1.3"
   dependencies:
@@ -11495,6 +11594,17 @@
   languageName: node
   linkType: hard
 
+"json5@npm:^2.2.0, json5@npm:~2.2":
+  version: 2.2.0
+  resolution: "json5@npm:2.2.0"
+  dependencies:
+    minimist: ^1.2.5
+  bin:
+    json5: lib/cli.js
+  checksum: 07b1f90c2801dc52df2b0ac8d606cc400a85cda79130e754780fa2ab9805d0fb85a0e61b6a5cdd68e88e5d0c8f9109ec415af08283175556cdccaa8563853908
+  languageName: node
+  linkType: hard
+
 "jsonfile@npm:^4.0.0":
   version: 4.0.0
   resolution: "jsonfile@npm:4.0.0"
@@ -11527,14 +11637,14 @@
   languageName: node
   linkType: hard
 
-"jsonpath@npm:^1.0.2":
-  version: 1.0.2
-  resolution: "jsonpath@npm:1.0.2"
+"jsonpath@npm:^1.1.1":
+  version: 1.1.1
+  resolution: "jsonpath@npm:1.1.1"
   dependencies:
     esprima: 1.2.2
     static-eval: 2.0.2
-    underscore: 1.7.0
-  checksum: 0f85de5b28184780a9ff1e9464e820e67441e59c63e63cd66e5bcf1784f75c51258c7f481222290a52de78c88ecbe21b8a1b413eb733577d31eb158903aaec16
+    underscore: 1.12.1
+  checksum: 4741e517f425e4b7c004c1c1452d8bf13084784cd75a1fd011fb1fa824d07675d1dc2b69111ffb45ada74266e289eef78efb7adccc9022e1e3ab6dea68ad0539
   languageName: node
   linkType: hard
 
@@ -11854,6 +11964,13 @@
   languageName: node
   linkType: hard
 
+"leven@npm:2.1.0":
+  version: 2.1.0
+  resolution: "leven@npm:2.1.0"
+  checksum: fcd39dd4d7cf26e0144641fd44293e6721d3ef785b5b1e97e8f179eaabbaf3a4aeb794ad6b8ba81de41183905f4f573ac21e783ec1375b6936cc46178087264e
+  languageName: node
+  linkType: hard
+
 "leven@npm:^3.1.0":
   version: 3.1.0
   resolution: "leven@npm:3.1.0"
@@ -12489,13 +12606,6 @@
   languageName: node
   linkType: hard
 
-"marky@npm:^1.2.1":
-  version: 1.2.1
-  resolution: "marky@npm:1.2.1"
-  checksum: b83093655855cb7b867b0bcc1b444e168cadb3721bf3ee60f733943db814a1d35997cde8423beabd17080875fd39c24c1dfc8c4341008e4be9e668c4e33481dd
-  languageName: node
-  linkType: hard
-
 "matchdep@npm:^2.0.0":
   version: 2.0.0
   resolution: "matchdep@npm:2.0.0"
@@ -12508,12 +12618,12 @@
   languageName: node
   linkType: hard
 
-"matcher@npm:~3.0":
-  version: 3.0.0
-  resolution: "matcher@npm:3.0.0"
+"matcher@npm:~4.0":
+  version: 4.0.0
+  resolution: "matcher@npm:4.0.0"
   dependencies:
     escape-string-regexp: ^4.0.0
-  checksum: 4b54c0a8ed69ecc993290cd31d6ea6ce7f82e2f888fb6c319e311b7f5fac013fe790e7389479a7b040155dfe5df1991c793120295557b9b0a82b2db23bcffb2d
+  checksum: 457f90baba61bef6210978422d8581dc1a08b032565f208abf3db9b063367bd9750f664c71fcc6c262b3b4201aa5c3aebb4c63c40341d92d65ff14ba2e607271
   languageName: node
   linkType: hard
 
@@ -13037,6 +13147,13 @@
   languageName: node
   linkType: hard
 
+"mri@npm:1.1.4":
+  version: 1.1.4
+  resolution: "mri@npm:1.1.4"
+  checksum: 5ea30a4f587afeb69bf51c27fa8bcf9aee96ccb6091bc933a9be78e925d2f823e453f3c3752d89f616658c469882519d6d275babd366f89c209ab8bcd627fdbd
+  languageName: node
+  linkType: hard
+
 "ms@npm:2.0.0":
   version: 2.0.0
   resolution: "ms@npm:2.0.0"
@@ -13058,12 +13175,12 @@
   languageName: node
   linkType: hard
 
-"multi-progress@npm:~3.0":
-  version: 3.0.0
-  resolution: "multi-progress@npm:3.0.0"
+"multi-progress@npm:~4.0":
+  version: 4.0.0
+  resolution: "multi-progress@npm:4.0.0"
   peerDependencies:
     progress: ^2.0.0
-  checksum: 416a5bb9ca19537d2ab2897881b48e43a0ad5c78c8529df2c66af18574e478fdf7816a31524a9cbdf9a954577b297717666ba2ba43bb7d926c66191c5728ca97
+  checksum: 18d1c57620576e6716f2539fde6f692d01dcfaf9fcf959f8cecab93820db7d8b987d02dfde6abef9448fa824f565f5b0be7b5ac6b33869df80c6f45e13d65bf8
   languageName: node
   linkType: hard
 
@@ -13469,13 +13586,6 @@
   languageName: node
   linkType: hard
 
-"node-gzip@npm:~1.1":
-  version: 1.1.2
-  resolution: "node-gzip@npm:1.1.2"
-  checksum: 161fb530c6ece426fa2d3d84964eb257885b17b70555838c34a707148757f05110fb6726cc8e201c4ed32318d897c3dfd9dafc5bdfcb534123f05b35dc36fdc5
-  languageName: node
-  linkType: hard
-
 "node-pre-gyp@npm:*":
   version: 0.16.0
   resolution: "node-pre-gyp@npm:0.16.0"
@@ -14719,7 +14829,7 @@
   languageName: node
   linkType: hard
 
-"picomatch@npm:^2.0.4, picomatch@npm:^2.0.5, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:~2.2":
+"picomatch@npm:^2.0.4, picomatch@npm:^2.0.5, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2":
   version: 2.2.2
   resolution: "picomatch@npm:2.2.2"
   checksum: 20fa75e0a58b39d83425b3db68744d5f6f361fd4fd66ec7745d884036d502abba0d553a637703af79939b844164b13e60eea339ccb043d7fbd74c3da2592b864
@@ -14733,6 +14843,13 @@
   languageName: node
   linkType: hard
 
+"picomatch@npm:~2.3":
+  version: 2.3.0
+  resolution: "picomatch@npm:2.3.0"
+  checksum: 80113a0fb70cfa62730d5aa3fd3d45b76bf3985f8494080ab2de1cc1fa3ba96d77990c7553a81401e16c51c0eb19c27cf5bc94f2196155090f26c8a167968001
+  languageName: node
+  linkType: hard
+
 "pidtree@npm:^0.3.0":
   version: 0.3.0
   resolution: "pidtree@npm:0.3.0"
@@ -14779,6 +14896,74 @@
   languageName: node
   linkType: hard
 
+"pino-pretty@npm:^5.0.0":
+  version: 5.1.3
+  resolution: "pino-pretty@npm:5.1.3"
+  dependencies:
+    "@hapi/bourne": ^2.0.0
+    args: ^5.0.1
+    chalk: ^4.0.0
+    dateformat: ^4.5.1
+    fast-safe-stringify: ^2.0.7
+    jmespath: ^0.15.0
+    joycon: ^3.0.0
+    pump: ^3.0.0
+    readable-stream: ^3.6.0
+    rfdc: ^1.3.0
+    split2: ^3.1.1
+    strip-json-comments: ^3.1.1
+  bin:
+    pino-pretty: bin.js
+  checksum: 838eeb2104ba42e25657e1ef0505b94ee141a1ea5b9353cf89c4a224dc58c86dfc73461e03d2b6ee6ac974da62cd536c3983869cc1f207f20554538f91328c61
+  languageName: node
+  linkType: hard
+
+"pino-pretty@npm:~6.0":
+  version: 6.0.0
+  resolution: "pino-pretty@npm:6.0.0"
+  dependencies:
+    "@hapi/bourne": ^2.0.0
+    args: ^5.0.1
+    colorette: ^1.3.0
+    dateformat: ^4.5.1
+    fast-safe-stringify: ^2.0.7
+    jmespath: ^0.15.0
+    joycon: ^3.0.0
+    pump: ^3.0.0
+    readable-stream: ^3.6.0
+    rfdc: ^1.3.0
+    split2: ^3.1.1
+    strip-json-comments: ^3.1.1
+  bin:
+    pino-pretty: bin.js
+  checksum: 865a5ee324c9ad62c9662677ff0f1e13f9b4d75ed3b701678f87304d377d825b1f08b7f351caaec529dc376edfaf77e414c48abde80a484f565a88f7d36681b8
+  languageName: node
+  linkType: hard
+
+"pino-std-serializers@npm:^3.1.0":
+  version: 3.2.0
+  resolution: "pino-std-serializers@npm:3.2.0"
+  checksum: fb386422f018951ecdaf241b76554d6149928e9dd5c89d1bc12100d61d7f14b140fcbbfcf9203921b21cda05cc3eab2499289fe272358d50836627ccda15f5ec
+  languageName: node
+  linkType: hard
+
+"pino@npm:~6.13":
+  version: 6.13.2
+  resolution: "pino@npm:6.13.2"
+  dependencies:
+    fast-redact: ^3.0.0
+    fast-safe-stringify: ^2.0.8
+    fastify-warning: ^0.2.0
+    flatstr: ^1.0.12
+    pino-std-serializers: ^3.1.0
+    quick-format-unescaped: ^4.0.3
+    sonic-boom: ^1.0.2
+  bin:
+    pino: bin.js
+  checksum: bd490e31b1e6313dd277c85fee2854fd850a8c97ce2569dc973e54d03846755f4fef72d50f1f4c0ceb0894eabddd6cfeb2bb2638a5373dceaefe7e883de1d32b
+  languageName: node
+  linkType: hard
+
 "pkg-dir@npm:^2.0.0":
   version: 2.0.0
   resolution: "pkg-dir@npm:2.0.0"
@@ -15725,6 +15910,13 @@
   languageName: node
   linkType: hard
 
+"quick-format-unescaped@npm:^4.0.3":
+  version: 4.0.3
+  resolution: "quick-format-unescaped@npm:4.0.3"
+  checksum: 08bbbe4937df113082fcc42dfbdb75df7e5291df805cd25347e0241f2f97bfb8368899dfbece10b79411249f81196b268ad1a36cc42208e4074cf89d27c3d055
+  languageName: node
+  linkType: hard
+
 "quick-lru@npm:^4.0.1":
   version: 4.0.1
   resolution: "quick-lru@npm:4.0.1"
@@ -15928,7 +16120,7 @@
   languageName: node
   linkType: hard
 
-"readable-stream@npm:2 || 3, readable-stream@npm:3, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0":
+"readable-stream@npm:2 || 3, readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0":
   version: 3.6.0
   resolution: "readable-stream@npm:3.6.0"
   dependencies:
@@ -16543,6 +16735,13 @@
   languageName: node
   linkType: hard
 
+"rfdc@npm:^1.3.0":
+  version: 1.3.0
+  resolution: "rfdc@npm:1.3.0"
+  checksum: 34dd5c5acf95c1248a81a539b899490e3b2a73373f2fa4187ce0e555581b64c4d08619f022970d6aabe9e044cfa4d4f6118939dfd640c01da68c36d89f118807
+  languageName: node
+  linkType: hard
+
 "rgb-regex@npm:^1.0.1":
   version: 1.0.1
   resolution: "rgb-regex@npm:1.0.1"
@@ -17025,6 +17224,13 @@
   languageName: node
   linkType: hard
 
+"should-proxy@npm:~1.0":
+  version: 1.0.4
+  resolution: "should-proxy@npm:1.0.4"
+  checksum: 4787b9960e1584d89964750d66e91513ebc4820150bf048dbf71b98427c82ecc745c1430720b0338ce7c0757b07dfead9c4314545c5ff6cb0cf037a190472aa2
+  languageName: node
+  linkType: hard
+
 "side-channel@npm:^1.0.3":
   version: 1.0.3
   resolution: "side-channel@npm:1.0.3"
@@ -17056,6 +17262,13 @@
   languageName: node
   linkType: hard
 
+"simple-concat@npm:~1.0":
+  version: 1.0.1
+  resolution: "simple-concat@npm:1.0.1"
+  checksum: 4623960448a49731b5abeedc5430f8158c5caa05f10a685b405b13ed8532c80b5d99e6ef5d53f76a695e66f551cdbcca22c1363ceef8f8b246cda1e21b9ef871
+  languageName: node
+  linkType: hard
+
 "simple-get@npm:^3.0.2":
   version: 3.1.0
   resolution: "simple-get@npm:3.1.0"
@@ -17067,6 +17280,17 @@
   languageName: node
   linkType: hard
 
+"simple-get@npm:~4.0":
+  version: 4.0.0
+  resolution: "simple-get@npm:4.0.0"
+  dependencies:
+    decompress-response: ^6.0.0
+    once: ^1.3.1
+    simple-concat: ^1.0.0
+  checksum: 91c007260dd92480b8dcd78b4310561967532e1ef9b4ec332a1aac6990c9a71d7477a8d05c84bb0165e4eb0e205fa620e37f42652dceea46c713084ae935e873
+  languageName: node
+  linkType: hard
+
 "simple-swizzle@npm:^0.2.2":
   version: 0.2.2
   resolution: "simple-swizzle@npm:0.2.2"
@@ -17144,6 +17368,25 @@
   languageName: node
   linkType: hard
 
+"sonic-boom@npm:^1.0.2":
+  version: 1.4.1
+  resolution: "sonic-boom@npm:1.4.1"
+  dependencies:
+    atomic-sleep: ^1.0.0
+    flatstr: ^1.0.12
+  checksum: d681f4ef6910e4ae698f17c9b1f3120ea9fc26ae25c870c5c6e73e29b5b4ba88005df507041f57a5e06ee85c739285f35c91604af9d61eabaeed96e79ef34824
+  languageName: node
+  linkType: hard
+
+"sonic-boom@npm:~2.1":
+  version: 2.1.0
+  resolution: "sonic-boom@npm:2.1.0"
+  dependencies:
+    atomic-sleep: ^1.0.0
+  checksum: 05429a8af9bb43acaefc6c9eabba57a30196451fa855e24b6a82653f6305a2cd90f7affecb722d3e27797de66068899b33f9ca4244c8ee20b6e6e181a52ffc6c
+  languageName: node
+  linkType: hard
+
 "sort-keys-length@npm:^1.0.0":
   version: 1.0.1
   resolution: "sort-keys-length@npm:1.0.1"
@@ -17304,6 +17547,15 @@
   languageName: node
   linkType: hard
 
+"split2@npm:^3.1.1":
+  version: 3.2.2
+  resolution: "split2@npm:3.2.2"
+  dependencies:
+    readable-stream: ^3.0.0
+  checksum: 04bf20af25bfe917edbb7f719cc9dbd2ca16633e4e6a5e343a8c834310aafd802c74b3aceb96acf3571545b0340d55d2d3273dbee8f9bc6a811371dcfbe0c8a7
+  languageName: node
+  linkType: hard
+
 "sprintf-js@npm:~1.0.2":
   version: 1.0.3
   resolution: "sprintf-js@npm:1.0.3"
@@ -17779,7 +18031,7 @@
   languageName: node
   linkType: hard
 
-"strip-json-comments@npm:^3.0.1":
+"strip-json-comments@npm:^3.0.1, strip-json-comments@npm:^3.1.1":
   version: 3.1.1
   resolution: "strip-json-comments@npm:3.1.1"
   checksum: f16719ce25abc58a55ef82b1c27f541dcfa5d544f17158f62d10be21ff9bd22fde45a53c592b29d80ad3c97ccb67b7451c4833913fdaeadb508a40f5e0a9c206
@@ -18416,13 +18668,6 @@
   languageName: node
   linkType: hard
 
-"to-utf8@npm:0.0.1":
-  version: 0.0.1
-  resolution: "to-utf8@npm:0.0.1"
-  checksum: 9a96b12e636dd699f18e3b9c4b69ba8c7eae1a21fb1a382626f69e1f217ad8b362e99c71982d607de1cc91327deb81565b0a22d466d3ee4cf16aa8104d2ddfae
-  languageName: node
-  linkType: hard
-
 "toidentifier@npm:1.0.0":
   version: 1.0.0
   resolution: "toidentifier@npm:1.0.0"
@@ -18767,10 +19012,10 @@
   languageName: node
   linkType: hard
 
-"underscore@npm:1.7.0":
-  version: 1.7.0
-  resolution: "underscore@npm:1.7.0"
-  checksum: ba1d3ceeb6144bcbb82ec8fc75149755256bdb7c5d5b6bb2adb4fcb00a27c3eb718ee9e5a4a8868f3d5dcf1f821267532863ea44f8488418c8fe0924b05fae77
+"underscore@npm:1.12.1":
+  version: 1.12.1
+  resolution: "underscore@npm:1.12.1"
+  checksum: b53ae924fe3608ac7875a0eec20988611a02dc174bad40680dbb9fe994c40fc457b6d4f618f8b9af930c31549809c27f70dddccd83957a32bab27b1eea858c1b
   languageName: node
   linkType: hard
 
@@ -19032,6 +19277,13 @@
   languageName: node
   linkType: hard
 
+"unxhr@npm:1.0.1":
+  version: 1.0.1
+  resolution: "unxhr@npm:1.0.1"
+  checksum: 42c7e594e85760c433354ebae81b6f2fc8adfcef350fab4540ba2c69a5feb35caf0b23cd56f1e396c170f246d766c3978dc3722f5b068e2203d9abfe32fff893
+  languageName: node
+  linkType: hard
+
 "upath@npm:^1.1.1":
   version: 1.2.0
   resolution: "upath@npm:1.2.0"
@@ -19270,13 +19522,6 @@
   languageName: node
   linkType: hard
 
-"varint@npm:0.0.3":
-  version: 0.0.3
-  resolution: "varint@npm:0.0.3"
-  checksum: 6048cb7573f29fd72aa1903253f30c03e065b74d7a90c2a9888a77082b833169fee3835c726d8f27f975ed1f58c564855ce478f5e68d169e114e836992039a73
-  languageName: node
-  linkType: hard
-
 "vary@npm:~1.1.2":
   version: 1.1.2
   resolution: "vary@npm:1.1.2"