diff --git a/assets/styles/gargoyle.scss b/assets/styles/gargoyle.scss
new file mode 100644
index 0000000..4de8b1b
--- /dev/null
+++ b/assets/styles/gargoyle.scss
@@ -0,0 +1,37 @@
+$nav-bar-height: 50px;
+
+body{
+ padding: $nav-bar-height 0 0;
+ background: lightgrey;
+}
+
+#nav-bar{
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: $nav-bar-height;
+ background: #212121;
+ box-shadow: 0 2px 1px rgba(0, 0, 0, .25);
+
+ .nav-bar-left{
+ float: left;
+ }
+
+ ul{
+ list-style: none;
+
+ li{
+ display: inline-block;
+ }
+ }
+
+ .nav-link a{
+ color: teal;
+ transition: all 230ms ease-in-out;
+
+ &:hover{
+ color: green;
+ }
+ }
+}
diff --git a/gulpfile.js b/gulpfile.js
new file mode 100644
index 0000000..2c6f686
--- /dev/null
+++ b/gulpfile.js
@@ -0,0 +1,17 @@
+const gulp = require('gulp');
+const { watch } = require('gulp');
+const sass = require('gulp-sass')(require('sass'));
+
+// compile
+function styles(cb) {
+ return gulp.src('./assets/styles/**/*.scss')
+ .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
+ .pipe(gulp.dest('./public/css'));
+ cb();
+}
+
+// by default, watch files
+exports.default = function() {
+ // compile sass stylesheets
+ watch('assets/styles/**/*.scss', styles);
+};
diff --git a/node_modules/.bin/atob b/node_modules/.bin/atob
new file mode 120000
index 0000000..a68344a
--- /dev/null
+++ b/node_modules/.bin/atob
@@ -0,0 +1 @@
+../atob/bin/atob.js
\ No newline at end of file
diff --git a/node_modules/.bin/color-support b/node_modules/.bin/color-support
new file mode 120000
index 0000000..fcbcb28
--- /dev/null
+++ b/node_modules/.bin/color-support
@@ -0,0 +1 @@
+../color-support/bin.js
\ No newline at end of file
diff --git a/node_modules/.bin/gulp b/node_modules/.bin/gulp
new file mode 120000
index 0000000..5de7332
--- /dev/null
+++ b/node_modules/.bin/gulp
@@ -0,0 +1 @@
+../gulp/bin/gulp.js
\ No newline at end of file
diff --git a/node_modules/.bin/resolve b/node_modules/.bin/resolve
new file mode 120000
index 0000000..b6afda6
--- /dev/null
+++ b/node_modules/.bin/resolve
@@ -0,0 +1 @@
+../resolve/bin/resolve
\ No newline at end of file
diff --git a/node_modules/.bin/sass b/node_modules/.bin/sass
new file mode 120000
index 0000000..4bda500
--- /dev/null
+++ b/node_modules/.bin/sass
@@ -0,0 +1 @@
+../sass/sass.js
\ No newline at end of file
diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver
new file mode 120000
index 0000000..317eb29
--- /dev/null
+++ b/node_modules/.bin/semver
@@ -0,0 +1 @@
+../semver/bin/semver
\ No newline at end of file
diff --git a/node_modules/.bin/which b/node_modules/.bin/which
new file mode 120000
index 0000000..f62471c
--- /dev/null
+++ b/node_modules/.bin/which
@@ -0,0 +1 @@
+../which/bin/which
\ No newline at end of file
diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json
new file mode 100644
index 0000000..f2b89c1
--- /dev/null
+++ b/node_modules/.package-lock.json
@@ -0,0 +1,4259 @@
+{
+ "name": "overseer",
+ "version": "0.1.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "node_modules/ansi-colors": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
+ "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-wrap": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ansi-gray": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
+ "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==",
+ "dev": true,
+ "dependencies": {
+ "ansi-wrap": "0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ansi-wrap": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
+ "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "dependencies": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "node_modules/anymatch/node_modules/normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
+ "dev": true,
+ "dependencies": {
+ "remove-trailing-separator": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/append-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
+ "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==",
+ "dev": true,
+ "dependencies": {
+ "buffer-equal": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==",
+ "dev": true
+ },
+ "node_modules/arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-filter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz",
+ "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==",
+ "dev": true,
+ "dependencies": {
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz",
+ "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==",
+ "dev": true,
+ "dependencies": {
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-each": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
+ "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-initial": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz",
+ "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==",
+ "dev": true,
+ "dependencies": {
+ "array-slice": "^1.0.0",
+ "is-number": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-initial/node_modules/is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-last": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz",
+ "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-last/node_modules/is-number": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
+ "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-slice": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
+ "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-sort": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
+ "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==",
+ "dev": true,
+ "dependencies": {
+ "default-compare": "^1.0.0",
+ "get-value": "^2.0.6",
+ "kind-of": "^5.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/async-done": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz",
+ "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.2",
+ "process-nextick-args": "^2.0.0",
+ "stream-exhaust": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/async-each": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+ "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
+ "dev": true
+ },
+ "node_modules/async-settle": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz",
+ "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==",
+ "dev": true,
+ "dependencies": {
+ "async-done": "^1.2.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true,
+ "bin": {
+ "atob": "bin/atob.js"
+ },
+ "engines": {
+ "node": ">= 4.5.0"
+ }
+ },
+ "node_modules/bach": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz",
+ "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==",
+ "dev": true,
+ "dependencies": {
+ "arr-filter": "^1.1.1",
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "array-each": "^1.0.0",
+ "array-initial": "^1.0.0",
+ "array-last": "^1.1.1",
+ "async-done": "^1.2.2",
+ "async-settle": "^1.0.0",
+ "now-and-later": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "dependencies": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/base/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "dependencies": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/buffer-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz",
+ "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "node_modules/cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "dependencies": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
+ "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "^2.0.0",
+ "async-each": "^1.0.1",
+ "braces": "^2.3.2",
+ "glob-parent": "^3.1.0",
+ "inherits": "^2.0.3",
+ "is-binary-path": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "normalize-path": "^3.0.0",
+ "path-is-absolute": "^1.0.0",
+ "readdirp": "^2.2.1",
+ "upath": "^1.1.1"
+ },
+ "optionalDependencies": {
+ "fsevents": "^1.2.7"
+ }
+ },
+ "node_modules/class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils/node_modules/is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils/node_modules/is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/class-utils/node_modules/is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "node_modules/clone": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+ "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/clone-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
+ "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==",
+ "dev": true
+ },
+ "node_modules/cloneable-readable": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz",
+ "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^2.0.0",
+ "readable-stream": "^2.3.5"
+ }
+ },
+ "node_modules/code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/collection-map": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz",
+ "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==",
+ "dev": true,
+ "dependencies": {
+ "arr-map": "^2.0.2",
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
+ "dev": true,
+ "dependencies": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/color-support": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
+ "dev": true,
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
+ "node_modules/component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "engines": [
+ "node >= 0.8"
+ ],
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+ "dev": true
+ },
+ "node_modules/copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/copy-props": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz",
+ "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==",
+ "dev": true,
+ "dependencies": {
+ "each-props": "^1.3.2",
+ "is-plain-object": "^5.0.0"
+ }
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
+ "dev": true
+ },
+ "node_modules/d": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+ "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "dev": true,
+ "dependencies": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ }
+ },
+ "node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/default-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
+ "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^5.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/default-resolution": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz",
+ "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dev": true,
+ "dependencies": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/detect-file": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
+ "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/duplexify": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+ "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "node_modules/each-props": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz",
+ "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.1",
+ "object.defaults": "^1.1.0"
+ }
+ },
+ "node_modules/each-props/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es5-ext": {
+ "version": "0.10.62",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
+ "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.3",
+ "next-tick": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/es6-iterator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+ "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
+ "dev": true,
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/es6-symbol": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
+ "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+ "dev": true,
+ "dependencies": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ }
+ },
+ "node_modules/es6-weak-map": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
+ "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
+ "dev": true,
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.46",
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-brackets/node_modules/is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==",
+ "dev": true,
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ext": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
+ "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
+ "dev": true,
+ "dependencies": {
+ "type": "^2.7.2"
+ }
+ },
+ "node_modules/ext/node_modules/type": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
+ "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==",
+ "dev": true
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "dev": true
+ },
+ "node_modules/extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "dev": true,
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "dependencies": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extglob/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fancy-log": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
+ "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
+ "dev": true,
+ "dependencies": {
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "parse-node-version": "^1.0.0",
+ "time-stamp": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz",
+ "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==",
+ "dev": true
+ },
+ "node_modules/fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
+ "dev": true,
+ "dependencies": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/findup-sync": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
+ "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
+ "dev": true,
+ "dependencies": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/fined": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
+ "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
+ "dev": true,
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/fined/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/flagged-respawn": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
+ "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/flush-write-stream": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ }
+ },
+ "node_modules/for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/for-own": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+ "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==",
+ "dev": true,
+ "dependencies": {
+ "for-in": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
+ "dev": true,
+ "dependencies": {
+ "map-cache": "^0.2.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fs-mkdirp-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
+ "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "through2": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/get-caller-file": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
+ "dev": true
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ }
+ },
+ "node_modules/glob-parent/node_modules/is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glob-stream": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
+ "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==",
+ "dev": true,
+ "dependencies": {
+ "extend": "^3.0.0",
+ "glob": "^7.1.1",
+ "glob-parent": "^3.1.0",
+ "is-negated-glob": "^1.0.0",
+ "ordered-read-streams": "^1.0.0",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.1.5",
+ "remove-trailing-separator": "^1.0.1",
+ "to-absolute-glob": "^2.0.0",
+ "unique-stream": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/glob-watcher": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz",
+ "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "^2.0.0",
+ "async-done": "^1.2.0",
+ "chokidar": "^2.0.0",
+ "is-negated-glob": "^1.0.0",
+ "just-debounce": "^1.0.0",
+ "normalize-path": "^3.0.0",
+ "object.defaults": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dev": true,
+ "dependencies": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==",
+ "dev": true,
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/glogg": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
+ "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
+ "dev": true,
+ "dependencies": {
+ "sparkles": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "dev": true
+ },
+ "node_modules/gulp": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
+ "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
+ "dev": true,
+ "dependencies": {
+ "glob-watcher": "^5.0.3",
+ "gulp-cli": "^2.2.0",
+ "undertaker": "^1.2.1",
+ "vinyl-fs": "^3.0.0"
+ },
+ "bin": {
+ "gulp": "bin/gulp.js"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/gulp-cli": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz",
+ "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^1.0.1",
+ "archy": "^1.0.0",
+ "array-sort": "^1.0.0",
+ "color-support": "^1.1.3",
+ "concat-stream": "^1.6.0",
+ "copy-props": "^2.0.1",
+ "fancy-log": "^1.3.2",
+ "gulplog": "^1.0.0",
+ "interpret": "^1.4.0",
+ "isobject": "^3.0.1",
+ "liftoff": "^3.1.0",
+ "matchdep": "^2.0.0",
+ "mute-stdout": "^1.0.0",
+ "pretty-hrtime": "^1.0.0",
+ "replace-homedir": "^1.0.0",
+ "semver-greatest-satisfied-range": "^1.1.0",
+ "v8flags": "^3.2.0",
+ "yargs": "^7.1.0"
+ },
+ "bin": {
+ "gulp": "bin/gulp.js"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/gulp-sass": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-5.1.0.tgz",
+ "integrity": "sha512-7VT0uaF+VZCmkNBglfe1b34bxn/AfcssquLKVDYnCDJ3xNBaW7cUuI3p3BQmoKcoKFrs9jdzUxyb+u+NGfL4OQ==",
+ "dev": true,
+ "dependencies": {
+ "lodash.clonedeep": "^4.5.0",
+ "picocolors": "^1.0.0",
+ "plugin-error": "^1.0.1",
+ "replace-ext": "^2.0.0",
+ "strip-ansi": "^6.0.1",
+ "vinyl-sourcemaps-apply": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/gulp-sass/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/gulp-sass/node_modules/replace-ext": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
+ "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/gulp-sass/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/gulplog": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
+ "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==",
+ "dev": true,
+ "dependencies": {
+ "glogg": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
+ "dev": true,
+ "dependencies": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/has-values/node_modules/kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dev": true,
+ "dependencies": {
+ "parse-passwd": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "node_modules/immutable": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz",
+ "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==",
+ "dev": true
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true
+ },
+ "node_modules/interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-absolute": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
+ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
+ "dev": true,
+ "dependencies": {
+ "is-relative": "^1.0.0",
+ "is-windows": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-accessor-descriptor/node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "node_modules/is-binary-path": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+ "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "node_modules/is-core-module": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-data-descriptor/node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-descriptor/node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
+ "dev": true,
+ "dependencies": {
+ "number-is-nan": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-negated-glob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
+ "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
+ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
+ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
+ "dev": true,
+ "dependencies": {
+ "is-unc-path": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-unc-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
+ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
+ "dev": true,
+ "dependencies": {
+ "unc-path-regex": "^0.1.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
+ "dev": true
+ },
+ "node_modules/is-valid-glob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
+ "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/just-debounce": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz",
+ "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==",
+ "dev": true
+ },
+ "node_modules/kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/last-run": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
+ "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==",
+ "dev": true,
+ "dependencies": {
+ "default-resolution": "^2.0.0",
+ "es6-weak-map": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/lazystream": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
+ "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^2.0.5"
+ },
+ "engines": {
+ "node": ">= 0.6.3"
+ }
+ },
+ "node_modules/lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
+ "dev": true,
+ "dependencies": {
+ "invert-kv": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/lead": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
+ "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==",
+ "dev": true,
+ "dependencies": {
+ "flush-write-stream": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/liftoff": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
+ "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
+ "dev": true,
+ "dependencies": {
+ "extend": "^3.0.0",
+ "findup-sync": "^3.0.0",
+ "fined": "^1.0.1",
+ "flagged-respawn": "^1.0.0",
+ "is-plain-object": "^2.0.4",
+ "object.map": "^1.0.0",
+ "rechoir": "^0.6.2",
+ "resolve": "^1.1.7"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/liftoff/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/lodash.clonedeep": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+ "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
+ "dev": true
+ },
+ "node_modules/make-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^6.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/make-iterator/node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
+ "dev": true,
+ "dependencies": {
+ "object-visit": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/matchdep": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
+ "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==",
+ "dev": true,
+ "dependencies": {
+ "findup-sync": "^2.0.0",
+ "micromatch": "^3.0.4",
+ "resolve": "^1.4.0",
+ "stack-trace": "0.0.10"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/matchdep/node_modules/findup-sync": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+ "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==",
+ "dev": true,
+ "dependencies": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^3.1.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/matchdep/node_modules/is-glob": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+ "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/micromatch/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/micromatch/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/micromatch/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/micromatch/node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "dependencies": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mixin-deep/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/mixin-deep/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "node_modules/mute-stdout": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz",
+ "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "dependencies": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/nanomatch/node_modules/kind-of": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/next-tick": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
+ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
+ "dev": true
+ },
+ "node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/now-and-later": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
+ "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
+ "dev": true,
+ "dependencies": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-copy/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.defaults": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
+ "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==",
+ "dev": true,
+ "dependencies": {
+ "array-each": "^1.0.1",
+ "array-slice": "^1.0.0",
+ "for-own": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
+ "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==",
+ "dev": true,
+ "dependencies": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object.reduce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz",
+ "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==",
+ "dev": true,
+ "dependencies": {
+ "for-own": "^1.0.0",
+ "make-iterator": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/ordered-read-streams": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
+ "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "^2.0.1"
+ }
+ },
+ "node_modules/os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
+ "dev": true,
+ "dependencies": {
+ "lcid": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-filepath": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
+ "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==",
+ "dev": true,
+ "dependencies": {
+ "is-absolute": "^1.0.0",
+ "map-cache": "^0.2.0",
+ "path-root": "^0.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
+ "dev": true,
+ "dependencies": {
+ "error-ex": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-node-version": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
+ "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-dirname": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+ "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
+ "dev": true
+ },
+ "node_modules/path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
+ "dev": true,
+ "dependencies": {
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-root": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
+ "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==",
+ "dev": true,
+ "dependencies": {
+ "path-root-regex": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-root-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
+ "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
+ "dev": true,
+ "dependencies": {
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/plugin-error": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
+ "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^1.0.1",
+ "arr-diff": "^4.0.0",
+ "arr-union": "^3.1.0",
+ "extend-shallow": "^3.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/plugin-error/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/plugin-error/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/plugin-error/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/pretty-hrtime": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "node_modules/pump": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/pumpify": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+ "dev": true,
+ "dependencies": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ }
+ },
+ "node_modules/read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
+ "dev": true,
+ "dependencies": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "dev": true,
+ "dependencies": {
+ "resolve": "^1.1.6"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regex-not/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regex-not/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/regex-not/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/remove-bom-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
+ "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5",
+ "is-utf8": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/remove-bom-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
+ "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==",
+ "dev": true,
+ "dependencies": {
+ "remove-bom-buffer": "^3.0.0",
+ "safe-buffer": "^5.1.0",
+ "through2": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
+ "dev": true
+ },
+ "node_modules/repeat-element": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
+ "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/replace-ext": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
+ "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/replace-homedir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz",
+ "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==",
+ "dev": true,
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1",
+ "is-absolute": "^1.0.0",
+ "remove-trailing-separator": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==",
+ "dev": true
+ },
+ "node_modules/resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==",
+ "dev": true,
+ "dependencies": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-options": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
+ "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==",
+ "dev": true,
+ "dependencies": {
+ "value-or-function": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
+ "deprecated": "https://github.com/lydell/resolve-url#deprecated",
+ "dev": true
+ },
+ "node_modules/ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "node_modules/safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
+ "dev": true,
+ "dependencies": {
+ "ret": "~0.1.10"
+ }
+ },
+ "node_modules/sass": {
+ "version": "1.55.0",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.55.0.tgz",
+ "integrity": "sha512-Pk+PMy7OGLs9WaxZGJMn7S96dvlyVBwwtToX895WmCpAOr5YiJYEUJfiJidMuKb613z2xNWcXCHEuOvjZbqC6A==",
+ "dev": true,
+ "dependencies": {
+ "chokidar": ">=3.0.0 <4.0.0",
+ "immutable": "^4.0.0",
+ "source-map-js": ">=0.6.2 <2.0.0"
+ },
+ "bin": {
+ "sass": "sass.js"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/sass/node_modules/anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/sass/node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sass/node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sass/node_modules/chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paulmillr.com/funding/"
+ }
+ ],
+ "dependencies": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/sass/node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sass/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/sass/node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/sass/node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/sass/node_modules/readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/sass/node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/semver-greatest-satisfied-range": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz",
+ "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==",
+ "dev": true,
+ "dependencies": {
+ "sver-compat": "^1.5.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
+ "dev": true
+ },
+ "node_modules/set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/set-value/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "dependencies": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "dependencies": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-node/node_modules/define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon-util/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/snapdragon/node_modules/is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-resolve": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
+ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
+ "dev": true,
+ "dependencies": {
+ "atob": "^2.1.2",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "node_modules/source-map-url": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
+ "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
+ "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
+ "dev": true
+ },
+ "node_modules/sparkles": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
+ "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.12",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz",
+ "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
+ "dev": true
+ },
+ "node_modules/split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "dependencies": {
+ "extend-shallow": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split-string/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split-string/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/split-string/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stack-trace": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
+ "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
+ "dev": true,
+ "dependencies": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/static-extend/node_modules/define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "dev": true,
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/static-extend/node_modules/is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/static-extend/node_modules/is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/static-extend/node_modules/is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "dependencies": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/stream-exhaust": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
+ "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==",
+ "dev": true
+ },
+ "node_modules/stream-shift": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
+ "dev": true
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
+ "dev": true,
+ "dependencies": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
+ "dev": true,
+ "dependencies": {
+ "is-utf8": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sver-compat": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz",
+ "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==",
+ "dev": true,
+ "dependencies": {
+ "es6-iterator": "^2.0.1",
+ "es6-symbol": "^3.1.1"
+ }
+ },
+ "node_modules/through2": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "node_modules/through2-filter": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
+ "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
+ "dev": true,
+ "dependencies": {
+ "through2": "~2.0.0",
+ "xtend": "~4.0.0"
+ }
+ },
+ "node_modules/time-stamp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
+ "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-absolute-glob": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
+ "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==",
+ "dev": true,
+ "dependencies": {
+ "is-absolute": "^1.0.0",
+ "is-negated-glob": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
+ "dev": true,
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-object-path/node_modules/kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "dev": true,
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "dependencies": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
+ "dev": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-regex/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/to-through": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz",
+ "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==",
+ "dev": true,
+ "dependencies": {
+ "through2": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/type": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
+ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
+ "dev": true
+ },
+ "node_modules/typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
+ "dev": true
+ },
+ "node_modules/unc-path-regex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
+ "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/undertaker": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz",
+ "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==",
+ "dev": true,
+ "dependencies": {
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "bach": "^1.0.0",
+ "collection-map": "^1.0.0",
+ "es6-weak-map": "^2.0.1",
+ "fast-levenshtein": "^1.0.0",
+ "last-run": "^1.1.0",
+ "object.defaults": "^1.0.0",
+ "object.reduce": "^1.0.0",
+ "undertaker-registry": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/undertaker-registry": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz",
+ "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "dependencies": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unique-stream": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
+ "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
+ "dev": true,
+ "dependencies": {
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "through2-filter": "^3.0.0"
+ }
+ },
+ "node_modules/unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
+ "dev": true,
+ "dependencies": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
+ "dev": true,
+ "dependencies": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
+ "dev": true,
+ "dependencies": {
+ "isarray": "1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/unset-value/node_modules/has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/upath": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
+ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4",
+ "yarn": "*"
+ }
+ },
+ "node_modules/urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
+ "deprecated": "Please see https://github.com/lydell/urix#deprecated",
+ "dev": true
+ },
+ "node_modules/use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "node_modules/v8flags": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
+ "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
+ "dev": true,
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/value-or-function": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
+ "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
+ "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
+ "dev": true,
+ "dependencies": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl-fs": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz",
+ "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==",
+ "dev": true,
+ "dependencies": {
+ "fs-mkdirp-stream": "^1.0.0",
+ "glob-stream": "^6.1.0",
+ "graceful-fs": "^4.0.0",
+ "is-valid-glob": "^1.0.0",
+ "lazystream": "^1.0.0",
+ "lead": "^1.0.0",
+ "object.assign": "^4.0.4",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.3.3",
+ "remove-bom-buffer": "^3.0.0",
+ "remove-bom-stream": "^1.2.0",
+ "resolve-options": "^1.1.0",
+ "through2": "^2.0.0",
+ "to-through": "^2.0.0",
+ "value-or-function": "^3.0.0",
+ "vinyl": "^2.0.0",
+ "vinyl-sourcemap": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl-sourcemap": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz",
+ "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==",
+ "dev": true,
+ "dependencies": {
+ "append-buffer": "^1.0.2",
+ "convert-source-map": "^1.5.0",
+ "graceful-fs": "^4.1.6",
+ "normalize-path": "^2.1.1",
+ "now-and-later": "^2.0.0",
+ "remove-bom-buffer": "^3.0.0",
+ "vinyl": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl-sourcemap/node_modules/normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
+ "dev": true,
+ "dependencies": {
+ "remove-trailing-separator": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/vinyl-sourcemaps-apply": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
+ "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==",
+ "dev": true,
+ "dependencies": {
+ "source-map": "^0.5.1"
+ }
+ },
+ "node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/which-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
+ "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/xtend": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/y18n": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
+ "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
+ "dev": true
+ },
+ "node_modules/yargs": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz",
+ "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^3.0.0",
+ "cliui": "^3.2.0",
+ "decamelize": "^1.1.1",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^1.4.0",
+ "read-pkg-up": "^1.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^1.0.2",
+ "which-module": "^1.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^5.0.1"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz",
+ "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==",
+ "dev": true,
+ "dependencies": {
+ "camelcase": "^3.0.0",
+ "object.assign": "^4.1.0"
+ }
+ }
+ }
+}
diff --git a/node_modules/ansi-colors/LICENSE b/node_modules/ansi-colors/LICENSE
new file mode 100644
index 0000000..b70671f
--- /dev/null
+++ b/node_modules/ansi-colors/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Brian Woodward.
+
+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/node_modules/ansi-colors/README.md b/node_modules/ansi-colors/README.md
new file mode 100644
index 0000000..2e669fe
--- /dev/null
+++ b/node_modules/ansi-colors/README.md
@@ -0,0 +1,105 @@
+# ansi-colors [![NPM version](https://img.shields.io/npm/v/ansi-colors.svg?style=flat)](https://www.npmjs.com/package/ansi-colors) [![NPM monthly downloads](https://img.shields.io/npm/dm/ansi-colors.svg?style=flat)](https://npmjs.org/package/ansi-colors) [![NPM total downloads](https://img.shields.io/npm/dt/ansi-colors.svg?style=flat)](https://npmjs.org/package/ansi-colors) [![Linux Build Status](https://img.shields.io/travis/doowb/ansi-colors.svg?style=flat&label=Travis)](https://travis-ci.org/doowb/ansi-colors) [![Windows Build Status](https://img.shields.io/appveyor/ci/doowb/ansi-colors.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/doowb/ansi-colors)
+
+> Collection of ansi colors and styles.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save ansi-colors
+```
+
+## Usage
+
+This module exports an object of functions. Each function wraps a string with the ansi codes used to display the string with that color (or style). Use the wrapped string with `console.log`:
+
+```js
+var colors = require('ansi-colors');
+console.log(colors.bold(colors.cyan('[info]')), colors.cyan('This is some information'));
+console.log(colors.bold(colors.yellow('[warning]')), colors.yellow('This is a warning'));
+console.error(colors.bold(colors.red('[ERROR]')), colors.red('Danger! There was an error!'));
+```
+
+![image](https://user-images.githubusercontent.com/995160/34897845-3150daae-f7be-11e7-9706-38c42461e0ee.png)
+
+## Example
+
+See the [example](./example.js) for more colors and styles.
+
+## About
+
+### Related projects
+
+* [ansi-bgblack](https://www.npmjs.com/package/ansi-bgblack): The color bgblack, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgblack "The color bgblack, in ansi.")
+* [ansi-bgblue](https://www.npmjs.com/package/ansi-bgblue): The color bgblue, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgblue "The color bgblue, in ansi.")
+* [ansi-bgcyan](https://www.npmjs.com/package/ansi-bgcyan): The color bgcyan, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgcyan "The color bgcyan, in ansi.")
+* [ansi-bggreen](https://www.npmjs.com/package/ansi-bggreen): The color bggreen, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bggreen "The color bggreen, in ansi.")
+* [ansi-bgmagenta](https://www.npmjs.com/package/ansi-bgmagenta): The color bgmagenta, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgmagenta "The color bgmagenta, in ansi.")
+* [ansi-bgred](https://www.npmjs.com/package/ansi-bgred): The color bgred, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgred "The color bgred, in ansi.")
+* [ansi-bgwhite](https://www.npmjs.com/package/ansi-bgwhite): The color bgwhite, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgwhite "The color bgwhite, in ansi.")
+* [ansi-bgyellow](https://www.npmjs.com/package/ansi-bgyellow): The color bgyellow, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bgyellow "The color bgyellow, in ansi.")
+* [ansi-black](https://www.npmjs.com/package/ansi-black): The color black, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-black "The color black, in ansi.")
+* [ansi-blue](https://www.npmjs.com/package/ansi-blue): The color blue, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-blue "The color blue, in ansi.")
+* [ansi-bold](https://www.npmjs.com/package/ansi-bold): The color bold, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-bold "The color bold, in ansi.")
+* [ansi-cyan](https://www.npmjs.com/package/ansi-cyan): The color cyan, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-cyan "The color cyan, in ansi.")
+* [ansi-dim](https://www.npmjs.com/package/ansi-dim): The color dim, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-dim "The color dim, in ansi.")
+* [ansi-gray](https://www.npmjs.com/package/ansi-gray): The color gray, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-gray "The color gray, in ansi.")
+* [ansi-green](https://www.npmjs.com/package/ansi-green): The color green, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-green "The color green, in ansi.")
+* [ansi-grey](https://www.npmjs.com/package/ansi-grey): The color grey, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-grey "The color grey, in ansi.")
+* [ansi-hidden](https://www.npmjs.com/package/ansi-hidden): The color hidden, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-hidden "The color hidden, in ansi.")
+* [ansi-inverse](https://www.npmjs.com/package/ansi-inverse): The color inverse, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-inverse "The color inverse, in ansi.")
+* [ansi-italic](https://www.npmjs.com/package/ansi-italic): The color italic, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-italic "The color italic, in ansi.")
+* [ansi-magenta](https://www.npmjs.com/package/ansi-magenta): The color magenta, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-magenta "The color magenta, in ansi.")
+* [ansi-red](https://www.npmjs.com/package/ansi-red): The color red, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-red "The color red, in ansi.")
+* [ansi-reset](https://www.npmjs.com/package/ansi-reset): The color reset, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-reset "The color reset, in ansi.")
+* [ansi-strikethrough](https://www.npmjs.com/package/ansi-strikethrough): The color strikethrough, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-strikethrough "The color strikethrough, in ansi.")
+* [ansi-underline](https://www.npmjs.com/package/ansi-underline): The color underline, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-underline "The color underline, in ansi.")
+* [ansi-white](https://www.npmjs.com/package/ansi-white): The color white, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-white "The color white, in ansi.")
+* [ansi-wrap](https://www.npmjs.com/package/ansi-wrap): Create ansi colors by passing the open and close codes. | [homepage](https://github.com/jonschlinkert/ansi-wrap "Create ansi colors by passing the open and close codes.")
+* [ansi-yellow](https://www.npmjs.com/package/ansi-yellow): The color yellow, in ansi. | [homepage](https://github.com/jonschlinkert/ansi-yellow "The color yellow, in ansi.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 10 | [doowb](https://github.com/doowb) |
+| 3 | [jonschlinkert](https://github.com/jonschlinkert) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Brian Woodward**
+
+* [github/doowb](https://github.com/doowb)
+* [twitter/doowb](https://twitter.com/doowb)
+
+### License
+
+Copyright © 2018, [Brian Woodward](https://github.com/doowb).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on January 12, 2018._
\ No newline at end of file
diff --git a/node_modules/ansi-colors/index.js b/node_modules/ansi-colors/index.js
new file mode 100644
index 0000000..37da67f
--- /dev/null
+++ b/node_modules/ansi-colors/index.js
@@ -0,0 +1,456 @@
+/*!
+ * ansi-colors
+ *
+ * Copyright (c) 2015-2017, Brian Woodward.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+/**
+ * Module dependencies
+ */
+
+var wrap = require('ansi-wrap');
+
+/**
+ * Wrap a string with ansi codes to create a black background.
+ *
+ * ```js
+ * console.log(colors.bgblack('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgblack
+ */
+
+exports.bgblack = function bgblack(message) {
+ return wrap(40, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a blue background.
+ *
+ * ```js
+ * console.log(colors.bgblue('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgblue
+ */
+
+exports.bgblue = function bgblue(message) {
+ return wrap(44, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a cyan background.
+ *
+ * ```js
+ * console.log(colors.bgcyan('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgcyan
+ */
+
+exports.bgcyan = function bgcyan(message) {
+ return wrap(46, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a green background.
+ *
+ * ```js
+ * console.log(colors.bggreen('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bggreen
+ */
+
+exports.bggreen = function bggreen(message) {
+ return wrap(42, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a magenta background.
+ *
+ * ```js
+ * console.log(colors.bgmagenta('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgmagenta
+ */
+
+exports.bgmagenta = function bgmagenta(message) {
+ return wrap(45, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a red background.
+ *
+ * ```js
+ * console.log(colors.bgred('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgred
+ */
+
+exports.bgred = function bgred(message) {
+ return wrap(41, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a white background.
+ *
+ * ```js
+ * console.log(colors.bgwhite('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgwhite
+ */
+
+exports.bgwhite = function bgwhite(message) {
+ return wrap(47, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create a yellow background.
+ *
+ * ```js
+ * console.log(colors.bgyellow('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bgyellow
+ */
+
+exports.bgyellow = function bgyellow(message) {
+ return wrap(43, 49, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create black text.
+ *
+ * ```js
+ * console.log(colors.black('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name black
+ */
+
+exports.black = function black(message) {
+ return wrap(30, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create blue text.
+ *
+ * ```js
+ * console.log(colors.blue('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name blue
+ */
+
+exports.blue = function blue(message) {
+ return wrap(34, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create bold text.
+ *
+ * ```js
+ * console.log(colors.bold('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name bold
+ */
+
+exports.bold = function bold(message) {
+ return wrap(1, 22, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create cyan text.
+ *
+ * ```js
+ * console.log(colors.cyan('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name cyan
+ */
+
+exports.cyan = function cyan(message) {
+ return wrap(36, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create dim text.
+ *
+ * ```js
+ * console.log(colors.dim('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name dim
+ */
+
+exports.dim = function dim(message) {
+ return wrap(2, 22, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create gray text.
+ *
+ * ```js
+ * console.log(colors.gray('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name gray
+ */
+
+exports.gray = function gray(message) {
+ return wrap(90, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create green text.
+ *
+ * ```js
+ * console.log(colors.green('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name green
+ */
+
+exports.green = function green(message) {
+ return wrap(32, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create grey text.
+ *
+ * ```js
+ * console.log(colors.grey('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name grey
+ */
+
+exports.grey = function grey(message) {
+ return wrap(90, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create hidden text.
+ *
+ * ```js
+ * console.log(colors.hidden('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name hidden
+ */
+
+exports.hidden = function hidden(message) {
+ return wrap(8, 28, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create inverse text.
+ *
+ * ```js
+ * console.log(colors.inverse('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name inverse
+ */
+
+exports.inverse = function inverse(message) {
+ return wrap(7, 27, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create italic text.
+ *
+ * ```js
+ * console.log(colors.italic('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name italic
+ */
+
+exports.italic = function italic(message) {
+ return wrap(3, 23, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create magenta text.
+ *
+ * ```js
+ * console.log(colors.magenta('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name magenta
+ */
+
+exports.magenta = function magenta(message) {
+ return wrap(35, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create red text.
+ *
+ * ```js
+ * console.log(colors.red('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name red
+ */
+
+exports.red = function red(message) {
+ return wrap(31, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to reset ansi colors currently on the string.
+ *
+ * ```js
+ * console.log(colors.reset('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name reset
+ */
+
+exports.reset = function reset(message) {
+ return wrap(0, 0, message);
+};
+
+/**
+ * Wrap a string with ansi codes to add a strikethrough to the text.
+ *
+ * ```js
+ * console.log(colors.strikethrough('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name strikethrough
+ */
+
+exports.strikethrough = function strikethrough(message) {
+ return wrap(9, 29, message);
+};
+
+/**
+ * Wrap a string with ansi codes to underline the text.
+ *
+ * ```js
+ * console.log(colors.underline('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name underline
+ */
+
+exports.underline = function underline(message) {
+ return wrap(4, 24, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create white text.
+ *
+ * ```js
+ * console.log(colors.white('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name white
+ */
+
+exports.white = function white(message) {
+ return wrap(37, 39, message);
+};
+
+/**
+ * Wrap a string with ansi codes to create yellow text.
+ *
+ * ```js
+ * console.log(colors.yellow('some string'));
+ * ```
+ *
+ * @param {string} message String to wrap with ansi codes.
+ * @return {string} Wrapped string
+ * @api public
+ * @name yellow
+ */
+
+exports.yellow = function yellow(message) {
+ return wrap(33, 39, message);
+};
diff --git a/node_modules/ansi-colors/package.json b/node_modules/ansi-colors/package.json
new file mode 100644
index 0000000..a042a34
--- /dev/null
+++ b/node_modules/ansi-colors/package.json
@@ -0,0 +1,138 @@
+{
+ "name": "ansi-colors",
+ "description": "Collection of ansi colors and styles.",
+ "version": "1.1.0",
+ "homepage": "https://github.com/doowb/ansi-colors",
+ "author": "Brian Woodward (https://github.com/doowb)",
+ "contributors": [
+ "Brian Woodward (https://twitter.com/doowb)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)"
+ ],
+ "repository": "doowb/ansi-colors",
+ "bugs": {
+ "url": "https://github.com/doowb/ansi-colors/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js",
+ "types/index.d.ts"
+ ],
+ "main": "index.js",
+ "types": "./types/index.d.ts",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha && tsc --project types"
+ },
+ "dependencies": {
+ "ansi-wrap": "^0.1.0"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.5.3",
+ "typescript": "^2.7.1"
+ },
+ "keywords": [
+ "ansi-bgblack",
+ "ansi-bgblue",
+ "ansi-bgcyan",
+ "ansi-bggreen",
+ "ansi-bgmagenta",
+ "ansi-bgred",
+ "ansi-bgwhite",
+ "ansi-bgyellow",
+ "ansi-black",
+ "ansi-blue",
+ "ansi-bold",
+ "ansi-cyan",
+ "ansi-dim",
+ "ansi-gray",
+ "ansi-green",
+ "ansi-grey",
+ "ansi-hidden",
+ "ansi-inverse",
+ "ansi-italic",
+ "ansi-magenta",
+ "ansi-red",
+ "ansi-reset",
+ "ansi-strikethrough",
+ "ansi-underline",
+ "ansi-white",
+ "ansi-yellow",
+ "bgblack",
+ "bgblue",
+ "bgcyan",
+ "bggreen",
+ "bgmagenta",
+ "bgred",
+ "bgwhite",
+ "bgyellow",
+ "black",
+ "blue",
+ "bold",
+ "cyan",
+ "dim",
+ "gray",
+ "green",
+ "grey",
+ "hidden",
+ "inverse",
+ "italic",
+ "magenta",
+ "red",
+ "reset",
+ "strikethrough",
+ "underline",
+ "white",
+ "yellow"
+ ],
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ },
+ "reflinks": [
+ "verb-readme-generator",
+ "verb"
+ ],
+ "related": {
+ "list": [
+ "ansi-bgblack",
+ "ansi-bgblue",
+ "ansi-bgcyan",
+ "ansi-bggreen",
+ "ansi-bgmagenta",
+ "ansi-bgred",
+ "ansi-bgwhite",
+ "ansi-bgyellow",
+ "ansi-black",
+ "ansi-blue",
+ "ansi-bold",
+ "ansi-cyan",
+ "ansi-dim",
+ "ansi-gray",
+ "ansi-green",
+ "ansi-grey",
+ "ansi-hidden",
+ "ansi-inverse",
+ "ansi-italic",
+ "ansi-magenta",
+ "ansi-red",
+ "ansi-reset",
+ "ansi-strikethrough",
+ "ansi-underline",
+ "ansi-white",
+ "ansi-wrap",
+ "ansi-yellow"
+ ]
+ }
+ }
+}
diff --git a/node_modules/ansi-colors/types/index.d.ts b/node_modules/ansi-colors/types/index.d.ts
new file mode 100644
index 0000000..5f216a8
--- /dev/null
+++ b/node_modules/ansi-colors/types/index.d.ts
@@ -0,0 +1,31 @@
+// Imported from from DefinitelyTyped project.
+// TypeScript definitions for ansi-colors
+// Definitions by: Rogier Schouten
+// Integrated by: Jordan Mele
+
+export function bgblack(message: string): string;
+export function bgblue(message: string): string;
+export function bgcyan(message: string): string;
+export function bggreen(message: string): string;
+export function bgmagenta(message: string): string;
+export function bgred(message: string): string;
+export function bgwhite(message: string): string;
+export function bgyellow(message: string): string;
+export function black(message: string): string;
+export function blue(message: string): string;
+export function bold(message: string): string;
+export function cyan(message: string): string;
+export function dim(message: string): string;
+export function gray(message: string): string;
+export function green(message: string): string;
+export function grey(message: string): string;
+export function hidden(message: string): string;
+export function inverse(message: string): string;
+export function italic(message: string): string;
+export function magenta(message: string): string;
+export function red(message: string): string;
+export function reset(message: string): string;
+export function strikethrough(message: string): string;
+export function underline(message: string): string;
+export function white(message: string): string;
+export function yellow(message: string): string;
diff --git a/node_modules/ansi-gray/LICENSE b/node_modules/ansi-gray/LICENSE
new file mode 100644
index 0000000..41283c9
--- /dev/null
+++ b/node_modules/ansi-gray/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) <%= year() %>, Jon Schlinkert.
+
+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/node_modules/ansi-gray/index.js b/node_modules/ansi-gray/index.js
new file mode 100644
index 0000000..c22176a
--- /dev/null
+++ b/node_modules/ansi-gray/index.js
@@ -0,0 +1,14 @@
+/*!
+ * ansi-gray
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var wrap = require('ansi-wrap');
+
+module.exports = function gray(message) {
+ return wrap(90, 39, message);
+};
diff --git a/node_modules/ansi-gray/package.json b/node_modules/ansi-gray/package.json
new file mode 100644
index 0000000..a35e962
--- /dev/null
+++ b/node_modules/ansi-gray/package.json
@@ -0,0 +1,55 @@
+{
+ "name": "ansi-gray",
+ "description": "The color gray, in ansi.",
+ "version": "0.1.1",
+ "homepage": "https://github.com/jonschlinkert/ansi-gray",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/ansi-gray",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/ansi-gray/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "ansi-wrap": "0.1.0"
+ },
+ "devDependencies": {
+ "mocha": "*"
+ },
+ "keywords": [
+ "gray",
+ "256",
+ "ansi",
+ "cli",
+ "color",
+ "colors",
+ "colour",
+ "command",
+ "command-line",
+ "console",
+ "format",
+ "formatting",
+ "iterm",
+ "log",
+ "logging",
+ "rgb",
+ "shell",
+ "string",
+ "style",
+ "styles",
+ "styling",
+ "terminal",
+ "text",
+ "tty",
+ "xterm"
+ ]
+}
diff --git a/node_modules/ansi-gray/readme.md b/node_modules/ansi-gray/readme.md
new file mode 100644
index 0000000..9b59a29
--- /dev/null
+++ b/node_modules/ansi-gray/readme.md
@@ -0,0 +1,74 @@
+# ansi-gray [![NPM version](https://badge.fury.io/js/ansi-gray.svg)](http://badge.fury.io/js/ansi-gray)
+
+> The color gray, in ansi.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i ansi-gray --save
+```
+
+## Usage
+
+```js
+var gray = require('ansi-gray');
+```
+
+## Related projects
+
+* [ansi-reset](https://github.com/jonschlinkert/ansi-reset)
+* [ansi-bold](https://github.com/jonschlinkert/ansi-bold)
+* [ansi-dim](https://github.com/jonschlinkert/ansi-dim)
+* [ansi-italic](https://github.com/jonschlinkert/ansi-italic)
+* [ansi-underline](https://github.com/jonschlinkert/ansi-underline)
+* [ansi-inverse](https://github.com/jonschlinkert/ansi-inverse)
+* [ansi-hidden](https://github.com/jonschlinkert/ansi-hidden)
+* [ansi-strikethrough](https://github.com/jonschlinkert/ansi-strikethrough)
+* [ansi-black](https://github.com/jonschlinkert/ansi-black)
+* [ansi-red](https://github.com/jonschlinkert/ansi-red)
+* [ansi-green](https://github.com/jonschlinkert/ansi-green)
+* [ansi-yellow](https://github.com/jonschlinkert/ansi-yellow)
+* [ansi-blue](https://github.com/jonschlinkert/ansi-blue)
+* [ansi-magenta](https://github.com/jonschlinkert/ansi-magenta)
+* [ansi-cyan](https://github.com/jonschlinkert/ansi-cyan)
+* [ansi-white](https://github.com/jonschlinkert/ansi-white)
+* [ansi-gray](https://github.com/jonschlinkert/ansi-gray)
+* [ansi-grey](https://github.com/jonschlinkert/ansi-grey)
+* [ansi-bgblack](https://github.com/jonschlinkert/ansi-bgblack)
+* [ansi-bgred](https://github.com/jonschlinkert/ansi-bgred)
+* [ansi-bggreen](https://github.com/jonschlinkert/ansi-bggreen)
+* [ansi-bgyellow](https://github.com/jonschlinkert/ansi-bgyellow)
+* [ansi-bgblue](https://github.com/jonschlinkert/ansi-bgblue)
+* [ansi-bgmagenta](https://github.com/jonschlinkert/ansi-bgmagenta)
+* [ansi-bgcyan](https://github.com/jonschlinkert/ansi-bgcyan)
+* [ansi-bgwhite](https://github.com/jonschlinkert/ansi-bgwhite)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/ansi-gray/issues/new)
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on May 21, 2015._
\ No newline at end of file
diff --git a/node_modules/ansi-regex/index.js b/node_modules/ansi-regex/index.js
new file mode 100644
index 0000000..b9574ed
--- /dev/null
+++ b/node_modules/ansi-regex/index.js
@@ -0,0 +1,4 @@
+'use strict';
+module.exports = function () {
+ return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
+};
diff --git a/node_modules/ansi-regex/license b/node_modules/ansi-regex/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/ansi-regex/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.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 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/node_modules/ansi-regex/package.json b/node_modules/ansi-regex/package.json
new file mode 100644
index 0000000..eb44fb5
--- /dev/null
+++ b/node_modules/ansi-regex/package.json
@@ -0,0 +1,64 @@
+{
+ "name": "ansi-regex",
+ "version": "2.1.1",
+ "description": "Regular expression for matching ANSI escape codes",
+ "license": "MIT",
+ "repository": "chalk/ansi-regex",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "maintainers": [
+ "Sindre Sorhus (sindresorhus.com)",
+ "Joshua Appelman (jbnicolai.com)",
+ "JD Ballard (github.com/qix-)"
+ ],
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "xo && ava --verbose",
+ "view-supported": "node fixtures/view-codes.js"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "command-line",
+ "text",
+ "regex",
+ "regexp",
+ "re",
+ "match",
+ "test",
+ "find",
+ "pattern"
+ ],
+ "devDependencies": {
+ "ava": "0.17.0",
+ "xo": "0.16.0"
+ },
+ "xo": {
+ "rules": {
+ "guard-for-in": 0,
+ "no-loop-func": 0
+ }
+ }
+}
diff --git a/node_modules/ansi-regex/readme.md b/node_modules/ansi-regex/readme.md
new file mode 100644
index 0000000..6a928ed
--- /dev/null
+++ b/node_modules/ansi-regex/readme.md
@@ -0,0 +1,39 @@
+# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex)
+
+> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
+
+
+## Install
+
+```
+$ npm install --save ansi-regex
+```
+
+
+## Usage
+
+```js
+const ansiRegex = require('ansi-regex');
+
+ansiRegex().test('\u001b[4mcake\u001b[0m');
+//=> true
+
+ansiRegex().test('cake');
+//=> false
+
+'\u001b[4mcake\u001b[0m'.match(ansiRegex());
+//=> ['\u001b[4m', '\u001b[0m']
+```
+
+## FAQ
+
+### Why do you test for codes not in the ECMA 48 standard?
+
+Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. If I recall correctly, we test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
+
+On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/ansi-wrap/LICENSE b/node_modules/ansi-wrap/LICENSE
new file mode 100644
index 0000000..65f90ac
--- /dev/null
+++ b/node_modules/ansi-wrap/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+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/node_modules/ansi-wrap/README.md b/node_modules/ansi-wrap/README.md
new file mode 100644
index 0000000..032c1e6
--- /dev/null
+++ b/node_modules/ansi-wrap/README.md
@@ -0,0 +1,89 @@
+# ansi-wrap [![NPM version](https://badge.fury.io/js/ansi-wrap.svg)](http://badge.fury.io/js/ansi-wrap)
+
+> Create ansi colors by passing the open and close codes.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i ansi-wrap --save
+```
+
+## Usage
+
+```js
+var wrap = require('ansi-wrap');
+```
+
+**Example**
+
+Pass codes for [ansi magenta background](https://github.com/jonschlinkert/ansi-bgmagenta):
+
+```js
+console.log(wrap(45, 49, 'This is a message...'));
+//=> '\u001b[45mfoo\u001b[49m'
+```
+
+Which prints out...
+
+[![screen shot 2015-05-21 at 8 28 32 pm](https://cloud.githubusercontent.com/assets/383994/7761769/12488afa-fff8-11e4-9cc1-71a8a6ec14a4.png)](https://www.npmjs.com/)
+
+## Related projects
+
+This is used in these projects:
+
+* [ansi-reset](https://github.com/jonschlinkert/ansi-reset)
+* [ansi-bold](https://github.com/jonschlinkert/ansi-bold)
+* [ansi-dim](https://github.com/jonschlinkert/ansi-dim)
+* [ansi-italic](https://github.com/jonschlinkert/ansi-italic)
+* [ansi-underline](https://github.com/jonschlinkert/ansi-underline)
+* [ansi-inverse](https://github.com/jonschlinkert/ansi-inverse)
+* [ansi-hidden](https://github.com/jonschlinkert/ansi-hidden)
+* [ansi-strikethrough](https://github.com/jonschlinkert/ansi-strikethrough)
+* [ansi-black](https://github.com/jonschlinkert/ansi-black)
+* [ansi-red](https://github.com/jonschlinkert/ansi-red)
+* [ansi-green](https://github.com/jonschlinkert/ansi-green)
+* [ansi-yellow](https://github.com/jonschlinkert/ansi-yellow)
+* [ansi-blue](https://github.com/jonschlinkert/ansi-blue)
+* [ansi-magenta](https://github.com/jonschlinkert/ansi-magenta)
+* [ansi-cyan](https://github.com/jonschlinkert/ansi-cyan)
+* [ansi-white](https://github.com/jonschlinkert/ansi-white)
+* [ansi-gray](https://github.com/jonschlinkert/ansi-gray)
+* [ansi-grey](https://github.com/jonschlinkert/ansi-grey)
+* [ansi-bgblack](https://github.com/jonschlinkert/ansi-bgblack)
+* [ansi-bgred](https://github.com/jonschlinkert/ansi-bgred)
+* [ansi-bggreen](https://github.com/jonschlinkert/ansi-bggreen)
+* [ansi-bgyellow](https://github.com/jonschlinkert/ansi-bgyellow)
+* [ansi-bgblue](https://github.com/jonschlinkert/ansi-bgblue)
+* [ansi-bgmagenta](https://github.com/jonschlinkert/ansi-bgmagenta)
+* [ansi-bgcyan](https://github.com/jonschlinkert/ansi-bgcyan)
+* [ansi-bgwhite](https://github.com/jonschlinkert/ansi-bgwhite)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/ansi-wrap/issues/new)
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on May 21, 2015._
\ No newline at end of file
diff --git a/node_modules/ansi-wrap/index.js b/node_modules/ansi-wrap/index.js
new file mode 100644
index 0000000..ffc52d7
--- /dev/null
+++ b/node_modules/ansi-wrap/index.js
@@ -0,0 +1,5 @@
+'use strict';
+
+module.exports = function(a, b, msg) {
+ return '\u001b['+ a + 'm' + msg + '\u001b[' + b + 'm';
+};
diff --git a/node_modules/ansi-wrap/package.json b/node_modules/ansi-wrap/package.json
new file mode 100644
index 0000000..f3c2916
--- /dev/null
+++ b/node_modules/ansi-wrap/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "ansi-wrap",
+ "description": "Create ansi colors by passing the open and close codes.",
+ "version": "0.1.0",
+ "homepage": "https://github.com/jonschlinkert/ansi-wrap",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/jonschlinkert/ansi-wrap.git"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/ansi-wrap/issues"
+ },
+ "license": {
+ "type": "MIT",
+ "url": "https://github.com/jonschlinkert/ansi-wrap/blob/master/LICENSE"
+ },
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {},
+ "devDependencies": {},
+ "keywords": []
+}
\ No newline at end of file
diff --git a/node_modules/anymatch/LICENSE b/node_modules/anymatch/LICENSE
new file mode 100644
index 0000000..bc42470
--- /dev/null
+++ b/node_modules/anymatch/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) 2014 Elan Shanker
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/anymatch/README.md b/node_modules/anymatch/README.md
new file mode 100644
index 0000000..f674f40
--- /dev/null
+++ b/node_modules/anymatch/README.md
@@ -0,0 +1,99 @@
+anymatch [![Build Status](https://travis-ci.org/micromatch/anymatch.svg?branch=master)](https://travis-ci.org/micromatch/anymatch) [![Coverage Status](https://img.shields.io/coveralls/micromatch/anymatch.svg?branch=master)](https://coveralls.io/r/micromatch/anymatch?branch=master)
+======
+Javascript module to match a string against a regular expression, glob, string,
+or function that takes the string as an argument and returns a truthy or falsy
+value. The matcher can also be an array of any or all of these. Useful for
+allowing a very flexible user-defined config to define things like file paths.
+
+__Note: This module has Bash-parity, please be aware that Windows-style backslashes are not supported as separators. See https://github.com/micromatch/micromatch#backslashes for more information.__
+
+[![NPM](https://nodei.co/npm/anymatch.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/anymatch/)
+[![NPM](https://nodei.co/npm-dl/anymatch.png?height=3&months=9)](https://nodei.co/npm-dl/anymatch/)
+
+Usage
+-----
+```sh
+npm install anymatch --save
+```
+
+#### anymatch (matchers, testString, [returnIndex], [startIndex], [endIndex])
+* __matchers__: (_Array|String|RegExp|Function_)
+String to be directly matched, string with glob patterns, regular expression
+test, function that takes the testString as an argument and returns a truthy
+value if it should be matched, or an array of any number and mix of these types.
+* __testString__: (_String|Array_) The string to test against the matchers. If
+passed as an array, the first element of the array will be used as the
+`testString` for non-function matchers, while the entire array will be applied
+as the arguments for function matchers.
+* __returnIndex__: (_Boolean [optional]_) If true, return the array index of
+the first matcher that that testString matched, or -1 if no match, instead of a
+boolean result.
+* __startIndex, endIndex__: (_Integer [optional]_) Can be used to define a
+subset out of the array of provided matchers to test against. Can be useful
+with bound matcher functions (see below). When used with `returnIndex = true`
+preserves original indexing. Behaves the same as `Array.prototype.slice` (i.e.
+includes array members up to, but not including endIndex).
+
+```js
+var anymatch = require('anymatch');
+
+var matchers = [
+ 'path/to/file.js',
+ 'path/anyjs/**/*.js',
+ /foo\.js$/,
+ function (string) {
+ return string.indexOf('bar') !== -1 && string.length > 10
+ }
+];
+
+anymatch(matchers, 'path/to/file.js'); // true
+anymatch(matchers, 'path/anyjs/baz.js'); // true
+anymatch(matchers, 'path/to/foo.js'); // true
+anymatch(matchers, 'path/to/bar.js'); // true
+anymatch(matchers, 'bar.js'); // false
+
+// returnIndex = true
+anymatch(matchers, 'foo.js', true); // 2
+anymatch(matchers, 'path/anyjs/foo.js', true); // 1
+
+// skip matchers
+anymatch(matchers, 'path/to/file.js', false, 1); // false
+anymatch(matchers, 'path/anyjs/foo.js', true, 2, 3); // 2
+anymatch(matchers, 'path/to/bar.js', true, 0, 3); // -1
+
+// using globs to match directories and their children
+anymatch('node_modules', 'node_modules'); // true
+anymatch('node_modules', 'node_modules/somelib/index.js'); // false
+anymatch('node_modules/**', 'node_modules/somelib/index.js'); // true
+anymatch('node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // false
+anymatch('**/node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // true
+```
+
+#### anymatch (matchers)
+You can also pass in only your matcher(s) to get a curried function that has
+already been bound to the provided matching criteria. This can be used as an
+`Array.prototype.filter` callback.
+
+```js
+var matcher = anymatch(matchers);
+
+matcher('path/to/file.js'); // true
+matcher('path/anyjs/baz.js', true); // 1
+matcher('path/anyjs/baz.js', true, 2); // -1
+
+['foo.js', 'bar.js'].filter(matcher); // ['foo.js']
+```
+
+Change Log
+----------
+[See release notes page on GitHub](https://github.com/micromatch/anymatch/releases)
+
+NOTE: As of v2.0.0, [micromatch](https://github.com/jonschlinkert/micromatch) moves away from minimatch-parity and inline with Bash. This includes handling backslashes differently (see https://github.com/micromatch/micromatch#backslashes for more information).
+
+NOTE: As of v1.2.0, anymatch uses [micromatch](https://github.com/jonschlinkert/micromatch)
+for glob pattern matching. Issues with glob pattern matching should be
+reported directly to the [micromatch issue tracker](https://github.com/jonschlinkert/micromatch/issues).
+
+License
+-------
+[ISC](https://raw.github.com/micromatch/anymatch/master/LICENSE)
diff --git a/node_modules/anymatch/index.js b/node_modules/anymatch/index.js
new file mode 100644
index 0000000..e411618
--- /dev/null
+++ b/node_modules/anymatch/index.js
@@ -0,0 +1,67 @@
+'use strict';
+
+var micromatch = require('micromatch');
+var normalize = require('normalize-path');
+var path = require('path'); // required for tests.
+var arrify = function(a) { return a == null ? [] : (Array.isArray(a) ? a : [a]); };
+
+var anymatch = function(criteria, value, returnIndex, startIndex, endIndex) {
+ criteria = arrify(criteria);
+ value = arrify(value);
+ if (arguments.length === 1) {
+ return anymatch.bind(null, criteria.map(function(criterion) {
+ return typeof criterion === 'string' && criterion[0] !== '!' ?
+ micromatch.matcher(criterion) : criterion;
+ }));
+ }
+ startIndex = startIndex || 0;
+ var string = value[0];
+ var altString, altValue;
+ var matched = false;
+ var matchIndex = -1;
+ function testCriteria(criterion, index) {
+ var result;
+ switch (Object.prototype.toString.call(criterion)) {
+ case '[object String]':
+ result = string === criterion || altString && altString === criterion;
+ result = result || micromatch.isMatch(string, criterion);
+ break;
+ case '[object RegExp]':
+ result = criterion.test(string) || altString && criterion.test(altString);
+ break;
+ case '[object Function]':
+ result = criterion.apply(null, value);
+ result = result || altValue && criterion.apply(null, altValue);
+ break;
+ default:
+ result = false;
+ }
+ if (result) {
+ matchIndex = index + startIndex;
+ }
+ return result;
+ }
+ var crit = criteria;
+ var negGlobs = crit.reduce(function(arr, criterion, index) {
+ if (typeof criterion === 'string' && criterion[0] === '!') {
+ if (crit === criteria) {
+ // make a copy before modifying
+ crit = crit.slice();
+ }
+ crit[index] = null;
+ arr.push(criterion.substr(1));
+ }
+ return arr;
+ }, []);
+ if (!negGlobs.length || !micromatch.any(string, negGlobs)) {
+ if (path.sep === '\\' && typeof string === 'string') {
+ altString = normalize(string);
+ altString = altString === string ? null : altString;
+ if (altString) altValue = [altString].concat(value.slice(1));
+ }
+ matched = crit.slice(startIndex, endIndex).some(testCriteria);
+ }
+ return returnIndex === true ? matchIndex : matched;
+};
+
+module.exports = anymatch;
diff --git a/node_modules/anymatch/node_modules/normalize-path/LICENSE b/node_modules/anymatch/node_modules/normalize-path/LICENSE
new file mode 100644
index 0000000..d734237
--- /dev/null
+++ b/node_modules/anymatch/node_modules/normalize-path/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+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/node_modules/anymatch/node_modules/normalize-path/README.md b/node_modules/anymatch/node_modules/normalize-path/README.md
new file mode 100644
index 0000000..daa0edd
--- /dev/null
+++ b/node_modules/anymatch/node_modules/normalize-path/README.md
@@ -0,0 +1,92 @@
+# normalize-path [![NPM version](https://img.shields.io/npm/v/normalize-path.svg?style=flat)](https://www.npmjs.com/package/normalize-path) [![NPM monthly downloads](https://img.shields.io/npm/dm/normalize-path.svg?style=flat)](https://npmjs.org/package/normalize-path) [![NPM total downloads](https://img.shields.io/npm/dt/normalize-path.svg?style=flat)](https://npmjs.org/package/normalize-path) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/normalize-path.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/normalize-path)
+
+> Normalize file path slashes to be unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes unless disabled.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save normalize-path
+```
+
+## Usage
+
+```js
+var normalize = require('normalize-path');
+
+normalize('\\foo\\bar\\baz\\');
+//=> '/foo/bar/baz'
+
+normalize('./foo/bar/baz/');
+//=> './foo/bar/baz'
+```
+
+Pass `false` as the last argument to **keep** trailing slashes:
+
+```js
+normalize('./foo/bar/baz/', false);
+//=> './foo/bar/baz/'
+
+normalize('foo\\bar\\baz\\', false);
+//=> 'foo/bar/baz/'
+```
+
+## About
+
+### Related projects
+
+* [contains-path](https://www.npmjs.com/package/contains-path): Return true if a file path contains the given path. | [homepage](https://github.com/jonschlinkert/contains-path "Return true if a file path contains the given path.")
+* [ends-with](https://www.npmjs.com/package/ends-with): Returns `true` if the given `string` or `array` ends with `suffix` using strict equality for… [more](https://github.com/jonschlinkert/ends-with) | [homepage](https://github.com/jonschlinkert/ends-with "Returns `true` if the given `string` or `array` ends with `suffix` using strict equality for comparisons.")
+* [is-absolute](https://www.npmjs.com/package/is-absolute): Polyfill for node.js `path.isAbolute`. Returns true if a file path is absolute. | [homepage](https://github.com/jonschlinkert/is-absolute "Polyfill for node.js `path.isAbolute`. Returns true if a file path is absolute.")
+* [is-relative](https://www.npmjs.com/package/is-relative): Returns `true` if the path appears to be relative. | [homepage](https://github.com/jonschlinkert/is-relative "Returns `true` if the path appears to be relative.")
+* [parse-filepath](https://www.npmjs.com/package/parse-filepath): Pollyfill for node.js `path.parse`, parses a filepath into an object. | [homepage](https://github.com/jonschlinkert/parse-filepath "Pollyfill for node.js `path.parse`, parses a filepath into an object.")
+* [path-ends-with](https://www.npmjs.com/package/path-ends-with): Return `true` if a file path ends with the given string/suffix. | [homepage](https://github.com/jonschlinkert/path-ends-with "Return `true` if a file path ends with the given string/suffix.")
+* [path-segments](https://www.npmjs.com/package/path-segments): Get n specific segments of a file path, e.g. first 2, last 3, etc. | [homepage](https://github.com/jonschlinkert/path-segments "Get n specific segments of a file path, e.g. first 2, last 3, etc.")
+* [rewrite-ext](https://www.npmjs.com/package/rewrite-ext): Automatically re-write the destination extension of a filepath based on the source extension. e.g… [more](https://github.com/jonschlinkert/rewrite-ext) | [homepage](https://github.com/jonschlinkert/rewrite-ext "Automatically re-write the destination extension of a filepath based on the source extension. e.g `.coffee` => `.js`. This will only rename the ext, no other path parts are modified.")
+* [unixify](https://www.npmjs.com/package/unixify): Convert Windows file paths to unix paths. | [homepage](https://github.com/jonschlinkert/unixify "Convert Windows file paths to unix paths.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 31 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 1 | [phated](https://github.com/phated) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.3, on March 29, 2017._
\ No newline at end of file
diff --git a/node_modules/anymatch/node_modules/normalize-path/index.js b/node_modules/anymatch/node_modules/normalize-path/index.js
new file mode 100644
index 0000000..4a4f8cc
--- /dev/null
+++ b/node_modules/anymatch/node_modules/normalize-path/index.js
@@ -0,0 +1,19 @@
+/*!
+ * normalize-path
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+var removeTrailingSeparator = require('remove-trailing-separator');
+
+module.exports = function normalizePath(str, stripTrailing) {
+ if (typeof str !== 'string') {
+ throw new TypeError('expected a string');
+ }
+ str = str.replace(/[\\\/]+/g, '/');
+ if (stripTrailing !== false) {
+ str = removeTrailingSeparator(str);
+ }
+ return str;
+};
diff --git a/node_modules/anymatch/node_modules/normalize-path/package.json b/node_modules/anymatch/node_modules/normalize-path/package.json
new file mode 100644
index 0000000..c16ef9d
--- /dev/null
+++ b/node_modules/anymatch/node_modules/normalize-path/package.json
@@ -0,0 +1,78 @@
+{
+ "name": "normalize-path",
+ "description": "Normalize file path slashes to be unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes unless disabled.",
+ "version": "2.1.1",
+ "homepage": "https://github.com/jonschlinkert/normalize-path",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Blaine Bublitz (https://twitter.com/BlaineBublitz)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)"
+ ],
+ "repository": "jonschlinkert/normalize-path",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/normalize-path/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "remove-trailing-separator": "^1.0.1"
+ },
+ "devDependencies": {
+ "benchmarked": "^0.1.1",
+ "gulp-format-md": "^0.1.11",
+ "minimist": "^1.2.0",
+ "mocha": "*"
+ },
+ "keywords": [
+ "backslash",
+ "file",
+ "filepath",
+ "fix",
+ "forward",
+ "fp",
+ "fs",
+ "normalize",
+ "path",
+ "slash",
+ "slashes",
+ "trailing",
+ "unix",
+ "urix"
+ ],
+ "verb": {
+ "related": {
+ "list": [
+ "contains-path",
+ "ends-with",
+ "is-absolute",
+ "is-relative",
+ "parse-filepath",
+ "path-ends-with",
+ "path-segments",
+ "rewrite-ext",
+ "unixify"
+ ],
+ "description": "Other useful libraries for working with paths in node.js:"
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/anymatch/package.json b/node_modules/anymatch/package.json
new file mode 100644
index 0000000..fdbafd7
--- /dev/null
+++ b/node_modules/anymatch/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "anymatch",
+ "version": "2.0.0",
+ "description": "Matches strings against configurable strings, globs, regular expressions, and/or functions",
+ "files": [
+ "index.js"
+ ],
+ "author": {
+ "name": "Elan Shanker",
+ "url": "http://github.com/es128"
+ },
+ "license": "ISC",
+ "homepage": "https://github.com/micromatch/anymatch",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/micromatch/anymatch"
+ },
+ "bugs": {
+ "url": "https://github.com/micromatch/anymatch/issues"
+ },
+ "keywords": [
+ "match",
+ "any",
+ "string",
+ "file",
+ "fs",
+ "list",
+ "glob",
+ "regex",
+ "regexp",
+ "regular",
+ "expression",
+ "function"
+ ],
+ "scripts": {
+ "test": "istanbul cover _mocha && cat ./coverage/lcov.info | coveralls"
+ },
+ "dependencies": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "devDependencies": {
+ "coveralls": "^2.7.0",
+ "istanbul": "^0.4.5",
+ "mocha": "^3.0.0"
+ }
+}
diff --git a/node_modules/append-buffer/LICENSE b/node_modules/append-buffer/LICENSE
new file mode 100644
index 0000000..ffb7ec5
--- /dev/null
+++ b/node_modules/append-buffer/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017, Brian Woodward.
+
+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.
\ No newline at end of file
diff --git a/node_modules/append-buffer/README.md b/node_modules/append-buffer/README.md
new file mode 100644
index 0000000..681a3c3
--- /dev/null
+++ b/node_modules/append-buffer/README.md
@@ -0,0 +1,95 @@
+# append-buffer [![NPM version](https://img.shields.io/npm/v/append-buffer.svg?style=flat)](https://www.npmjs.com/package/append-buffer) [![NPM monthly downloads](https://img.shields.io/npm/dm/append-buffer.svg?style=flat)](https://npmjs.org/package/append-buffer) [![NPM total downloads](https://img.shields.io/npm/dt/append-buffer.svg?style=flat)](https://npmjs.org/package/append-buffer) [![Linux Build Status](https://img.shields.io/travis/doowb/append-buffer.svg?style=flat&label=Travis)](https://travis-ci.org/doowb/append-buffer) [![Windows Build Status](https://img.shields.io/appveyor/ci/doowb/append-buffer.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/doowb/append-buffer)
+
+> Append a buffer to another buffer ensuring to preserve line ending characters.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save append-buffer
+```
+
+Install with [yarn](https://yarnpkg.com):
+
+```sh
+$ yarn add append-buffer
+```
+
+## Usage
+
+```js
+var appendBuffer = require('append-buffer');
+```
+
+## API
+
+### [appendBuffer](index.js#L28)
+
+Append a buffer to another buffer ensuring to preserve line ending characters.
+
+**Params**
+
+* `buf` **{Buffer}**: Buffer that will be used to check for an existing line ending. The suffix is appended to this.
+* `suffix` **{Buffer}**: Buffer that will be appended to the buf.
+* `returns` **{Buffer}**: Final Buffer
+
+**Example**
+
+```js
+console.log([appendBuffer(new Buffer('abc\r\n'), new Buffer('def')).toString()]);
+//=> [ 'abc\r\ndef\r\n' ]
+
+console.log([appendBuffer(new Buffer('abc\n'), new Buffer('def')).toString()]);
+//=> [ 'abc\ndef\n' ]
+
+// uses os.EOL when a line ending is not found
+console.log([appendBuffer(new Buffer('abc'), new Buffer('def')).toString()]);
+//=> [ 'abc\ndef' ]
+```
+
+## Attribution
+
+The code in this module was originally added in a [PR](https://github.com/jonschlinkert/file-normalize/pull/3) to [file-normalize](https://github.com/jonschlinkert/file-normalize). It has been split out to allow for standalone use cases.
+
+## About
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+Please read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards.
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Brian Woodward**
+
+* [github/doowb](https://github.com/doowb)
+* [twitter/doowb](https://twitter.com/doowb)
+
+### License
+
+Copyright © 2017, [Brian Woodward](https://doowb.com).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on August 01, 2017._
\ No newline at end of file
diff --git a/node_modules/append-buffer/index.js b/node_modules/append-buffer/index.js
new file mode 100644
index 0000000..a385570
--- /dev/null
+++ b/node_modules/append-buffer/index.js
@@ -0,0 +1,41 @@
+'use strict';
+
+var os = require('os');
+var equals = require('buffer-equal');
+var cr = new Buffer('\r\n');
+var nl = new Buffer('\n');
+
+/**
+ * Append a buffer to another buffer ensuring to preserve line ending characters.
+ *
+ * ```js
+ * console.log([appendBuffer(new Buffer('abc\r\n'), new Buffer('def')).toString()]);
+ * //=> [ 'abc\r\ndef\r\n' ]
+ *
+ * console.log([appendBuffer(new Buffer('abc\n'), new Buffer('def')).toString()]);
+ * //=> [ 'abc\ndef\n' ]
+ *
+ * // uses os.EOL when a line ending is not found
+ * console.log([appendBuffer(new Buffer('abc'), new Buffer('def')).toString()]);
+ * //=> [ 'abc\ndef' ]
+ * * ```
+ * @param {Buffer} `buf` Buffer that will be used to check for an existing line ending. The suffix is appended to this.
+ * @param {Buffer} `suffix` Buffer that will be appended to the buf.
+ * @return {Buffer} Final Buffer
+ * @api public
+ */
+
+module.exports = function appendBuffer(buf, suffix) {
+ if (!suffix || !suffix.length) {
+ return buf;
+ }
+ var eol;
+ if (equals(buf.slice(-2), cr)) {
+ eol = cr;
+ } else if (equals(buf.slice(-1), nl)) {
+ eol = nl;
+ } else {
+ return Buffer.concat([buf, new Buffer(os.EOL), new Buffer(suffix)]);
+ }
+ return Buffer.concat([buf, new Buffer(suffix), eol]);
+};
diff --git a/node_modules/append-buffer/package.json b/node_modules/append-buffer/package.json
new file mode 100644
index 0000000..7264b84
--- /dev/null
+++ b/node_modules/append-buffer/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "append-buffer",
+ "description": "Append a buffer to another buffer ensuring to preserve line ending characters.",
+ "version": "1.0.2",
+ "homepage": "https://github.com/doowb/append-buffer",
+ "author": "Brian Woodward (https://doowb.com)",
+ "repository": "doowb/append-buffer",
+ "bugs": {
+ "url": "https://github.com/doowb/append-buffer/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "keywords": [
+ "append",
+ "append-buffer",
+ "concat",
+ "concat-buffer",
+ "eol",
+ "join",
+ "join-buffer",
+ "normalize",
+ "buffer"
+ ],
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.5.0"
+ },
+ "dependencies": {
+ "buffer-equal": "^1.0.0"
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/archy/.travis.yml b/node_modules/archy/.travis.yml
new file mode 100644
index 0000000..895dbd3
--- /dev/null
+++ b/node_modules/archy/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - 0.6
+ - 0.8
diff --git a/node_modules/archy/LICENSE b/node_modules/archy/LICENSE
new file mode 100644
index 0000000..ee27ba4
--- /dev/null
+++ b/node_modules/archy/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+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/node_modules/archy/examples/beep.js b/node_modules/archy/examples/beep.js
new file mode 100644
index 0000000..9c07047
--- /dev/null
+++ b/node_modules/archy/examples/beep.js
@@ -0,0 +1,24 @@
+var archy = require('../');
+var s = archy({
+ label : 'beep',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny' ]
+ },
+ 'human'
+ ]
+ },
+ 'party\ntime!'
+ ]
+ }
+ ]
+});
+console.log(s);
diff --git a/node_modules/archy/examples/multi_line.js b/node_modules/archy/examples/multi_line.js
new file mode 100644
index 0000000..8afdfad
--- /dev/null
+++ b/node_modules/archy/examples/multi_line.js
@@ -0,0 +1,25 @@
+var archy = require('../');
+
+var s = archy({
+ label : 'beep\none\ntwo',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O\nwheee',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny\nmeat' ]
+ },
+ 'creature'
+ ]
+ },
+ 'party\ntime!'
+ ]
+ }
+ ]
+});
+console.log(s);
diff --git a/node_modules/archy/index.js b/node_modules/archy/index.js
new file mode 100644
index 0000000..869d64e
--- /dev/null
+++ b/node_modules/archy/index.js
@@ -0,0 +1,35 @@
+module.exports = function archy (obj, prefix, opts) {
+ if (prefix === undefined) prefix = '';
+ if (!opts) opts = {};
+ var chr = function (s) {
+ var chars = {
+ '│' : '|',
+ '└' : '`',
+ '├' : '+',
+ '─' : '-',
+ '┬' : '-'
+ };
+ return opts.unicode === false ? chars[s] : s;
+ };
+
+ if (typeof obj === 'string') obj = { label : obj };
+
+ var nodes = obj.nodes || [];
+ var lines = (obj.label || '').split('\n');
+ var splitter = '\n' + prefix + (nodes.length ? chr('│') : ' ') + ' ';
+
+ return prefix
+ + lines.join(splitter) + '\n'
+ + nodes.map(function (node, ix) {
+ var last = ix === nodes.length - 1;
+ var more = node.nodes && node.nodes.length;
+ var prefix_ = prefix + (last ? ' ' : chr('│')) + ' ';
+
+ return prefix
+ + (last ? chr('└') : chr('├')) + chr('─')
+ + (more ? chr('┬') : chr('─')) + ' '
+ + archy(node, prefix_, opts).slice(prefix.length + 2)
+ ;
+ }).join('')
+ ;
+};
diff --git a/node_modules/archy/package.json b/node_modules/archy/package.json
new file mode 100644
index 0000000..0ce3149
--- /dev/null
+++ b/node_modules/archy/package.json
@@ -0,0 +1,40 @@
+{
+ "name" : "archy",
+ "version" : "1.0.0",
+ "description" : "render nested hierarchies `npm ls` style with unicode pipes",
+ "main" : "index.js",
+ "devDependencies" : {
+ "tap" : "~0.3.3",
+ "tape" : "~0.1.1"
+ },
+ "scripts" : {
+ "test" : "tap test"
+ },
+ "testling" : {
+ "files" : "test/*.js",
+ "browsers" : {
+ "iexplore" : [ "6.0", "7.0", "8.0", "9.0" ],
+ "chrome" : [ "20.0" ],
+ "firefox" : [ "10.0", "15.0" ],
+ "safari" : [ "5.1" ],
+ "opera" : [ "12.0" ]
+ }
+ },
+ "repository" : {
+ "type" : "git",
+ "url" : "http://github.com/substack/node-archy.git"
+ },
+ "keywords" : [
+ "hierarchy",
+ "npm ls",
+ "unicode",
+ "pretty",
+ "print"
+ ],
+ "author" : {
+ "name" : "James Halliday",
+ "email" : "mail@substack.net",
+ "url" : "http://substack.net"
+ },
+ "license" : "MIT"
+}
diff --git a/node_modules/archy/readme.markdown b/node_modules/archy/readme.markdown
new file mode 100644
index 0000000..ef7a5cf
--- /dev/null
+++ b/node_modules/archy/readme.markdown
@@ -0,0 +1,88 @@
+# archy
+
+Render nested hierarchies `npm ls` style with unicode pipes.
+
+[![browser support](http://ci.testling.com/substack/node-archy.png)](http://ci.testling.com/substack/node-archy)
+
+[![build status](https://secure.travis-ci.org/substack/node-archy.png)](http://travis-ci.org/substack/node-archy)
+
+# example
+
+``` js
+var archy = require('archy');
+var s = archy({
+ label : 'beep',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny' ]
+ },
+ 'human'
+ ]
+ },
+ 'party\ntime!'
+ ]
+ }
+ ]
+});
+console.log(s);
+```
+
+output
+
+```
+beep
+├── ity
+└─┬ boop
+ ├─┬ o_O
+ │ ├─┬ oh
+ │ │ ├── hello
+ │ │ └── puny
+ │ └── human
+ └── party
+ time!
+```
+
+# methods
+
+var archy = require('archy')
+
+## archy(obj, prefix='', opts={})
+
+Return a string representation of `obj` with unicode pipe characters like how
+`npm ls` looks.
+
+`obj` should be a tree of nested objects with `'label'` and `'nodes'` fields.
+`'label'` is a string of text to display at a node level and `'nodes'` is an
+array of the descendents of the current node.
+
+If a node is a string, that string will be used as the `'label'` and an empty
+array of `'nodes'` will be used.
+
+`prefix` gets prepended to all the lines and is used by the algorithm to
+recursively update.
+
+If `'label'` has newlines they will be indented at the present indentation level
+with the current prefix.
+
+To disable unicode results in favor of all-ansi output set `opts.unicode` to
+`false`.
+
+# install
+
+With [npm](http://npmjs.org) do:
+
+```
+npm install archy
+```
+
+# license
+
+MIT
diff --git a/node_modules/archy/test/beep.js b/node_modules/archy/test/beep.js
new file mode 100644
index 0000000..4ea74f9
--- /dev/null
+++ b/node_modules/archy/test/beep.js
@@ -0,0 +1,40 @@
+var test = require('tape');
+var archy = require('../');
+
+test('beep', function (t) {
+ var s = archy({
+ label : 'beep',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny' ]
+ },
+ 'human'
+ ]
+ },
+ 'party!'
+ ]
+ }
+ ]
+ });
+ t.equal(s, [
+ 'beep',
+ '├── ity',
+ '└─┬ boop',
+ ' ├─┬ o_O',
+ ' │ ├─┬ oh',
+ ' │ │ ├── hello',
+ ' │ │ └── puny',
+ ' │ └── human',
+ ' └── party!',
+ ''
+ ].join('\n'));
+ t.end();
+});
diff --git a/node_modules/archy/test/multi_line.js b/node_modules/archy/test/multi_line.js
new file mode 100644
index 0000000..2cf2154
--- /dev/null
+++ b/node_modules/archy/test/multi_line.js
@@ -0,0 +1,45 @@
+var test = require('tape');
+var archy = require('../');
+
+test('multi-line', function (t) {
+ var s = archy({
+ label : 'beep\none\ntwo',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O\nwheee',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny\nmeat' ]
+ },
+ 'creature'
+ ]
+ },
+ 'party\ntime!'
+ ]
+ }
+ ]
+ });
+ t.equal(s, [
+ 'beep',
+ '│ one',
+ '│ two',
+ '├── ity',
+ '└─┬ boop',
+ ' ├─┬ o_O',
+ ' │ │ wheee',
+ ' │ ├─┬ oh',
+ ' │ │ ├── hello',
+ ' │ │ └── puny',
+ ' │ │ meat',
+ ' │ └── creature',
+ ' └── party',
+ ' time!',
+ ''
+ ].join('\n'));
+ t.end();
+});
diff --git a/node_modules/archy/test/non_unicode.js b/node_modules/archy/test/non_unicode.js
new file mode 100644
index 0000000..7204d33
--- /dev/null
+++ b/node_modules/archy/test/non_unicode.js
@@ -0,0 +1,40 @@
+var test = require('tape');
+var archy = require('../');
+
+test('beep', function (t) {
+ var s = archy({
+ label : 'beep',
+ nodes : [
+ 'ity',
+ {
+ label : 'boop',
+ nodes : [
+ {
+ label : 'o_O',
+ nodes : [
+ {
+ label : 'oh',
+ nodes : [ 'hello', 'puny' ]
+ },
+ 'human'
+ ]
+ },
+ 'party!'
+ ]
+ }
+ ]
+ }, '', { unicode : false });
+ t.equal(s, [
+ 'beep',
+ '+-- ity',
+ '`-- boop',
+ ' +-- o_O',
+ ' | +-- oh',
+ ' | | +-- hello',
+ ' | | `-- puny',
+ ' | `-- human',
+ ' `-- party!',
+ ''
+ ].join('\n'));
+ t.end();
+});
diff --git a/node_modules/arr-diff/LICENSE b/node_modules/arr-diff/LICENSE
new file mode 100755
index 0000000..d734237
--- /dev/null
+++ b/node_modules/arr-diff/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+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/node_modules/arr-diff/README.md b/node_modules/arr-diff/README.md
new file mode 100644
index 0000000..961f5c3
--- /dev/null
+++ b/node_modules/arr-diff/README.md
@@ -0,0 +1,130 @@
+# arr-diff [![NPM version](https://img.shields.io/npm/v/arr-diff.svg?style=flat)](https://www.npmjs.com/package/arr-diff) [![NPM monthly downloads](https://img.shields.io/npm/dm/arr-diff.svg?style=flat)](https://npmjs.org/package/arr-diff) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/arr-diff.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/arr-diff)
+
+> Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save arr-diff
+```
+
+Install with [yarn](https://yarnpkg.com):
+
+```sh
+$ yarn add arr-diff
+```
+
+Install with [bower](https://bower.io/)
+
+```sh
+$ bower install arr-diff --save
+```
+
+## Usage
+
+Returns the difference between the first array and additional arrays.
+
+```js
+var diff = require('arr-diff');
+
+var a = ['a', 'b', 'c', 'd'];
+var b = ['b', 'c'];
+
+console.log(diff(a, b))
+//=> ['a', 'd']
+```
+
+## Benchmarks
+
+This library versus [array-differ](https://github.com/sindresorhus/array-differ), on April 14, 2017:
+
+```
+Benchmarking: (4 of 4)
+ · long-dupes
+ · long
+ · med
+ · short
+
+# benchmark/fixtures/long-dupes.js (100804 bytes)
+ arr-diff-3.0.0 x 822 ops/sec ±0.67% (86 runs sampled)
+ arr-diff-4.0.0 x 2,141 ops/sec ±0.42% (89 runs sampled)
+ array-differ x 708 ops/sec ±0.70% (89 runs sampled)
+
+ fastest is arr-diff-4.0.0
+
+# benchmark/fixtures/long.js (94529 bytes)
+ arr-diff-3.0.0 x 882 ops/sec ±0.60% (87 runs sampled)
+ arr-diff-4.0.0 x 2,329 ops/sec ±0.97% (83 runs sampled)
+ array-differ x 769 ops/sec ±0.61% (90 runs sampled)
+
+ fastest is arr-diff-4.0.0
+
+# benchmark/fixtures/med.js (708 bytes)
+ arr-diff-3.0.0 x 856,150 ops/sec ±0.42% (89 runs sampled)
+ arr-diff-4.0.0 x 4,665,249 ops/sec ±1.06% (89 runs sampled)
+ array-differ x 653,888 ops/sec ±1.02% (86 runs sampled)
+
+ fastest is arr-diff-4.0.0
+
+# benchmark/fixtures/short.js (60 bytes)
+ arr-diff-3.0.0 x 3,078,467 ops/sec ±0.77% (93 runs sampled)
+ arr-diff-4.0.0 x 9,213,296 ops/sec ±0.65% (89 runs sampled)
+ array-differ x 1,337,051 ops/sec ±0.91% (92 runs sampled)
+
+ fastest is arr-diff-4.0.0
+```
+
+## About
+
+### Related projects
+
+* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.")
+* [array-filter](https://www.npmjs.com/package/array-filter): Array#filter for older browsers. | [homepage](https://github.com/juliangruber/array-filter "Array#filter for older browsers.")
+* [array-intersection](https://www.npmjs.com/package/array-intersection): Return an array with the unique values present in _all_ given arrays using strict equality… [more](https://github.com/jonschlinkert/array-intersection) | [homepage](https://github.com/jonschlinkert/array-intersection "Return an array with the unique values present in _all_ given arrays using strict equality for comparisons.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 33 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [paulmillr](https://github.com/paulmillr) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.5.0, on April 14, 2017._
\ No newline at end of file
diff --git a/node_modules/arr-diff/index.js b/node_modules/arr-diff/index.js
new file mode 100644
index 0000000..90f2807
--- /dev/null
+++ b/node_modules/arr-diff/index.js
@@ -0,0 +1,47 @@
+/*!
+ * arr-diff
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function diff(arr/*, arrays*/) {
+ var len = arguments.length;
+ var idx = 0;
+ while (++idx < len) {
+ arr = diffArray(arr, arguments[idx]);
+ }
+ return arr;
+};
+
+function diffArray(one, two) {
+ if (!Array.isArray(two)) {
+ return one.slice();
+ }
+
+ var tlen = two.length
+ var olen = one.length;
+ var idx = -1;
+ var arr = [];
+
+ while (++idx < olen) {
+ var ele = one[idx];
+
+ var hasEle = false;
+ for (var i = 0; i < tlen; i++) {
+ var val = two[i];
+
+ if (ele === val) {
+ hasEle = true;
+ break;
+ }
+ }
+
+ if (hasEle === false) {
+ arr.push(ele);
+ }
+ }
+ return arr;
+}
diff --git a/node_modules/arr-diff/package.json b/node_modules/arr-diff/package.json
new file mode 100644
index 0000000..c106813
--- /dev/null
+++ b/node_modules/arr-diff/package.json
@@ -0,0 +1,69 @@
+{
+ "name": "arr-diff",
+ "description": "Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.",
+ "version": "4.0.0",
+ "homepage": "https://github.com/jonschlinkert/arr-diff",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Paul Miller (paulmillr.com)"
+ ],
+ "repository": "jonschlinkert/arr-diff",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/arr-diff/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "arr-flatten": "^1.0.1",
+ "array-differ": "^1.0.0",
+ "benchmarked": "^0.2.4",
+ "gulp-format-md": "^0.1.9",
+ "minimist": "^1.2.0",
+ "mocha": "^2.4.5"
+ },
+ "keywords": [
+ "arr",
+ "array",
+ "array differ",
+ "array-differ",
+ "diff",
+ "differ",
+ "difference"
+ ],
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-flatten",
+ "array-filter",
+ "array-intersection"
+ ]
+ },
+ "reflinks": [
+ "array-differ",
+ "verb"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/arr-filter/LICENSE b/node_modules/arr-filter/LICENSE
new file mode 100755
index 0000000..d290fe0
--- /dev/null
+++ b/node_modules/arr-filter/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2015, 2017, Jon Schlinkert
+
+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/node_modules/arr-filter/README.md b/node_modules/arr-filter/README.md
new file mode 100755
index 0000000..96435ae
--- /dev/null
+++ b/node_modules/arr-filter/README.md
@@ -0,0 +1,72 @@
+# arr-filter [![NPM version](https://img.shields.io/npm/v/arr-filter.svg?style=flat)](https://www.npmjs.com/package/arr-filter) [![NPM monthly downloads](https://img.shields.io/npm/dm/arr-filter.svg?style=flat)](https://npmjs.org/package/arr-filter) [![NPM total downloads](https://img.shields.io/npm/dt/arr-filter.svg?style=flat)](https://npmjs.org/package/arr-filter) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/arr-filter.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/arr-filter)
+
+> Faster alternative to javascript's native filter method.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save arr-filter
+```
+
+## Usage
+
+```js
+var filter = require('arr-filter');
+
+filter(['a', {a: 'b'}, 1, 'b', 2, {c: 'd'}, 'c'], function (ele) {
+ return typeof ele === 'string';
+});
+//=> ['a', 'b', 'c']
+```
+
+## Why another array filter?
+
+[array-filter](https://github.com/juliangruber/array-filter) is pretty popular, but it's tuned to be used in older browsers and it falls back on native `.filter()` when available, which is much slower. See [jsperf results](http://jsperf.com/array-filter-while-vs-for/2). The functions used in the benchmarks are the top performers from a dozen or so other functions.
+
+## About
+
+### Related projects
+
+* [arr-map](https://www.npmjs.com/package/arr-map): Faster, node.js focused alternative to JavaScript's native array map. | [homepage](https://github.com/jonschlinkert/arr-map "Faster, node.js focused alternative to JavaScript's native array map.")
+* [array-each](https://www.npmjs.com/package/array-each): Loop over each item in an array and call the given function on every element. | [homepage](https://github.com/jonschlinkert/array-each "Loop over each item in an array and call the given function on every element.")
+* [collection-map](https://www.npmjs.com/package/collection-map): Returns an array of mapped values from an array or object. | [homepage](https://github.com/jonschlinkert/collection-map "Returns an array of mapped values from an array or object.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 26, 2017._
\ No newline at end of file
diff --git a/node_modules/arr-filter/index.js b/node_modules/arr-filter/index.js
new file mode 100755
index 0000000..29b8c3c
--- /dev/null
+++ b/node_modules/arr-filter/index.js
@@ -0,0 +1,33 @@
+/*!
+ * arr-filter
+ *
+ * Copyright (c) 2014-2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var makeIterator = require('make-iterator');
+
+module.exports = function filter(arr, fn, thisArg) {
+ if (arr == null) {
+ return [];
+ }
+
+ if (typeof fn !== 'function') {
+ throw new TypeError('expected callback to be a function');
+ }
+
+ var iterator = makeIterator(fn, thisArg);
+ var len = arr.length;
+ var res = arr.slice();
+ var i = -1;
+
+ while (len--) {
+ if (!iterator(arr[len], i++)) {
+ res.splice(len, 1);
+ }
+ }
+ return res;
+};
+
diff --git a/node_modules/arr-filter/package.json b/node_modules/arr-filter/package.json
new file mode 100644
index 0000000..7fb0bf1
--- /dev/null
+++ b/node_modules/arr-filter/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "arr-filter",
+ "description": "Faster alternative to javascript's native filter method.",
+ "version": "1.1.2",
+ "homepage": "https://github.com/jonschlinkert/arr-filter",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/arr-filter",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/arr-filter/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "make-iterator": "^1.0.0"
+ },
+ "devDependencies": {
+ "array-filter": "^1.0.0",
+ "benchmarked": "^0.2.5",
+ "chalk": "^1.1.3",
+ "gulp-format-md": "^0.1.11",
+ "micromatch": "^2.3.11",
+ "minimist": "^1.2.0",
+ "mocha": "^3.2.0"
+ },
+ "keywords": [
+ "arr",
+ "array",
+ "collection",
+ "filter",
+ "util"
+ ],
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "collection-map",
+ "arr-map",
+ "array-each"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/arr-flatten/LICENSE b/node_modules/arr-flatten/LICENSE
new file mode 100755
index 0000000..3f2eca1
--- /dev/null
+++ b/node_modules/arr-flatten/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+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/node_modules/arr-flatten/README.md b/node_modules/arr-flatten/README.md
new file mode 100755
index 0000000..7dc7a97
--- /dev/null
+++ b/node_modules/arr-flatten/README.md
@@ -0,0 +1,86 @@
+# arr-flatten [![NPM version](https://img.shields.io/npm/v/arr-flatten.svg?style=flat)](https://www.npmjs.com/package/arr-flatten) [![NPM monthly downloads](https://img.shields.io/npm/dm/arr-flatten.svg?style=flat)](https://npmjs.org/package/arr-flatten) [![NPM total downloads](https://img.shields.io/npm/dt/arr-flatten.svg?style=flat)](https://npmjs.org/package/arr-flatten) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/arr-flatten.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/arr-flatten) [![Windows Build Status](https://img.shields.io/appveyor/ci/jonschlinkert/arr-flatten.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/jonschlinkert/arr-flatten)
+
+> Recursively flatten an array or arrays.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save arr-flatten
+```
+
+## Install
+
+Install with [bower](https://bower.io/)
+
+```sh
+$ bower install arr-flatten --save
+```
+
+## Usage
+
+```js
+var flatten = require('arr-flatten');
+
+flatten(['a', ['b', ['c']], 'd', ['e']]);
+//=> ['a', 'b', 'c', 'd', 'e']
+```
+
+## Why another flatten utility?
+
+I wanted the fastest implementation I could find, with implementation choices that should work for 95% of use cases, but no cruft to cover the other 5%.
+
+## About
+
+### Related projects
+
+* [arr-filter](https://www.npmjs.com/package/arr-filter): Faster alternative to javascript's native filter method. | [homepage](https://github.com/jonschlinkert/arr-filter "Faster alternative to javascript's native filter method.")
+* [arr-union](https://www.npmjs.com/package/arr-union): Combines a list of arrays, returning a single array with unique values, using strict equality… [more](https://github.com/jonschlinkert/arr-union) | [homepage](https://github.com/jonschlinkert/arr-union "Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.")
+* [array-each](https://www.npmjs.com/package/array-each): Loop over each item in an array and call the given function on every element. | [homepage](https://github.com/jonschlinkert/array-each "Loop over each item in an array and call the given function on every element.")
+* [array-unique](https://www.npmjs.com/package/array-unique): Remove duplicate values from an array. Fastest ES5 implementation. | [homepage](https://github.com/jonschlinkert/array-unique "Remove duplicate values from an array. Fastest ES5 implementation.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 20 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 1 | [lukeed](https://github.com/lukeed) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on July 05, 2017._
\ No newline at end of file
diff --git a/node_modules/arr-flatten/index.js b/node_modules/arr-flatten/index.js
new file mode 100644
index 0000000..0cb4ea4
--- /dev/null
+++ b/node_modules/arr-flatten/index.js
@@ -0,0 +1,22 @@
+/*!
+ * arr-flatten
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function (arr) {
+ return flat(arr, []);
+};
+
+function flat(arr, res) {
+ var i = 0, cur;
+ var len = arr.length;
+ for (; i < len; i++) {
+ cur = arr[i];
+ Array.isArray(cur) ? flat(cur, res) : res.push(cur);
+ }
+ return res;
+}
diff --git a/node_modules/arr-flatten/package.json b/node_modules/arr-flatten/package.json
new file mode 100644
index 0000000..d2d33e9
--- /dev/null
+++ b/node_modules/arr-flatten/package.json
@@ -0,0 +1,76 @@
+{
+ "name": "arr-flatten",
+ "description": "Recursively flatten an array or arrays.",
+ "version": "1.1.0",
+ "homepage": "https://github.com/jonschlinkert/arr-flatten",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Luke Edwards (https://lukeed.com)"
+ ],
+ "repository": "jonschlinkert/arr-flatten",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/arr-flatten/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "array-flatten": "^2.1.1",
+ "array-slice": "^1.0.0",
+ "benchmarked": "^1.0.0",
+ "compute-flatten": "^1.0.0",
+ "flatit": "^1.1.1",
+ "flatten": "^1.0.2",
+ "flatten-array": "^1.0.0",
+ "glob": "^7.1.1",
+ "gulp-format-md": "^0.1.12",
+ "just-flatten-it": "^1.1.23",
+ "lodash.flattendeep": "^4.4.0",
+ "m_flattened": "^1.0.1",
+ "mocha": "^3.2.0",
+ "utils-flatten": "^1.0.0",
+ "write": "^0.3.3"
+ },
+ "keywords": [
+ "arr",
+ "array",
+ "elements",
+ "flat",
+ "flatten",
+ "nested",
+ "recurse",
+ "recursive",
+ "recursively"
+ ],
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-filter",
+ "arr-union",
+ "array-each",
+ "array-unique"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/arr-map/LICENSE b/node_modules/arr-map/LICENSE
new file mode 100644
index 0000000..ec85897
--- /dev/null
+++ b/node_modules/arr-map/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, 2017, Jon Schlinkert
+
+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/node_modules/arr-map/README.md b/node_modules/arr-map/README.md
new file mode 100644
index 0000000..04e9910
--- /dev/null
+++ b/node_modules/arr-map/README.md
@@ -0,0 +1,78 @@
+# arr-map [![NPM version](https://img.shields.io/npm/v/arr-map.svg?style=flat)](https://www.npmjs.com/package/arr-map) [![NPM monthly downloads](https://img.shields.io/npm/dm/arr-map.svg?style=flat)](https://npmjs.org/package/arr-map) [![NPM total downloads](https://img.shields.io/npm/dt/arr-map.svg?style=flat)](https://npmjs.org/package/arr-map) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/arr-map.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/arr-map)
+
+> Faster, node.js focused alternative to JavaScript's native array map.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save arr-map
+```
+
+## Why use this?
+
+JavaScript's native `Array.map()` is slow, and other popular array map libraries are focused on browser compatibility, which makes them bloated or less than idea for non-browser usage. This implementation is focused on node.js usage keeping it light and fast.
+
+## Usage
+
+```js
+var map = require('arr-map');
+
+map(['a', 'b', 'c'], function(ele) {
+ return ele + ele;
+});
+//=> ['aa', 'bb', 'cc']
+
+map(['a', 'b', 'c'], function(ele, i) {
+ return i + ele;
+});
+//=> ['0a', '1b', '2c']
+```
+
+## About
+
+### Related projects
+
+* [arr-diff](https://www.npmjs.com/package/arr-diff): Returns an array with only the unique values from the first array, by excluding all… [more](https://github.com/jonschlinkert/arr-diff) | [homepage](https://github.com/jonschlinkert/arr-diff "Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.")
+* [arr-filter](https://www.npmjs.com/package/arr-filter): Faster alternative to javascript's native filter method. | [homepage](https://github.com/jonschlinkert/arr-filter "Faster alternative to javascript's native filter method.")
+* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.")
+* [arr-reduce](https://www.npmjs.com/package/arr-reduce): Fast array reduce that also loops over sparse elements. | [homepage](https://github.com/jonschlinkert/arr-reduce "Fast array reduce that also loops over sparse elements.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 28, 2017._
\ No newline at end of file
diff --git a/node_modules/arr-map/index.js b/node_modules/arr-map/index.js
new file mode 100644
index 0000000..8bfb360
--- /dev/null
+++ b/node_modules/arr-map/index.js
@@ -0,0 +1,23 @@
+/*!
+ * arr-map
+ *
+ * Copyright (c) 2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var iterator = require('make-iterator');
+
+module.exports = function map(arr, fn, thisArg) {
+ if (arr == null) return [];
+ fn = iterator(fn, thisArg);
+
+ var len = arr.length;
+ var res = new Array(len);
+
+ for (var i = 0; i < len; i++) {
+ res[i] = fn(arr[i], i, arr);
+ }
+ return res;
+};
diff --git a/node_modules/arr-map/package.json b/node_modules/arr-map/package.json
new file mode 100644
index 0000000..34dcab6
--- /dev/null
+++ b/node_modules/arr-map/package.json
@@ -0,0 +1,62 @@
+{
+ "name": "arr-map",
+ "description": "Faster, node.js focused alternative to JavaScript's native array map.",
+ "version": "2.0.2",
+ "homepage": "https://github.com/jonschlinkert/arr-map",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/arr-map",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/arr-map/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha",
+ "benchmark": "node benchmark"
+ },
+ "dependencies": {
+ "make-iterator": "^1.0.0"
+ },
+ "devDependencies": {
+ "array-map": "^0.0.0",
+ "benchmarked": "^0.2.5",
+ "braces": "^2.0.3",
+ "chalk": "^1.1.3",
+ "glob": "^7.1.1",
+ "gulp-format-md": "^0.1.11",
+ "micromatch": "^2.3.11",
+ "mocha": "^3.2.0"
+ },
+ "keywords": [
+ "arr",
+ "array",
+ "map"
+ ],
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "related": {
+ "list": [
+ "arr-diff",
+ "arr-filter",
+ "arr-flatten",
+ "arr-reduce"
+ ]
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/arr-union/LICENSE b/node_modules/arr-union/LICENSE
new file mode 100644
index 0000000..39245ac
--- /dev/null
+++ b/node_modules/arr-union/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+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/node_modules/arr-union/README.md b/node_modules/arr-union/README.md
new file mode 100644
index 0000000..b3cd4f4
--- /dev/null
+++ b/node_modules/arr-union/README.md
@@ -0,0 +1,99 @@
+# arr-union [![NPM version](https://img.shields.io/npm/v/arr-union.svg)](https://www.npmjs.com/package/arr-union) [![Build Status](https://img.shields.io/travis/jonschlinkert/arr-union.svg)](https://travis-ci.org/jonschlinkert/arr-union)
+
+> Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm i arr-union --save
+```
+
+## Benchmarks
+
+This library is **10-20 times faster** and more performant than [array-union](https://github.com/sindresorhus/array-union).
+
+See the [benchmarks](./benchmark).
+
+```sh
+#1: five-arrays
+ array-union x 511,121 ops/sec ±0.80% (96 runs sampled)
+ arr-union x 5,716,039 ops/sec ±0.86% (93 runs sampled)
+
+#2: ten-arrays
+ array-union x 245,196 ops/sec ±0.69% (94 runs sampled)
+ arr-union x 1,850,786 ops/sec ±0.84% (97 runs sampled)
+
+#3: two-arrays
+ array-union x 563,869 ops/sec ±0.97% (94 runs sampled)
+ arr-union x 9,602,852 ops/sec ±0.87% (92 runs sampled)
+```
+
+## Usage
+
+```js
+var union = require('arr-union');
+
+union(['a'], ['b', 'c'], ['d', 'e', 'f']);
+//=> ['a', 'b', 'c', 'd', 'e', 'f']
+```
+
+Returns only unique elements:
+
+```js
+union(['a', 'a'], ['b', 'c']);
+//=> ['a', 'b', 'c']
+```
+
+## Related projects
+
+* [arr-diff](https://www.npmjs.com/package/arr-diff): Returns an array with only the unique values from the first array, by excluding all… [more](https://www.npmjs.com/package/arr-diff) | [homepage](https://github.com/jonschlinkert/arr-diff)
+* [arr-filter](https://www.npmjs.com/package/arr-filter): Faster alternative to javascript's native filter method. | [homepage](https://github.com/jonschlinkert/arr-filter)
+* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten)
+* [arr-map](https://www.npmjs.com/package/arr-map): Faster, node.js focused alternative to JavaScript's native array map. | [homepage](https://github.com/jonschlinkert/arr-map)
+* [arr-pluck](https://www.npmjs.com/package/arr-pluck): Retrieves the value of a specified property from all elements in the collection. | [homepage](https://github.com/jonschlinkert/arr-pluck)
+* [arr-reduce](https://www.npmjs.com/package/arr-reduce): Fast array reduce that also loops over sparse elements. | [homepage](https://github.com/jonschlinkert/arr-reduce)
+* [array-unique](https://www.npmjs.com/package/array-unique): Return an array free of duplicate values. Fastest ES5 implementation. | [homepage](https://github.com/jonschlinkert/array-unique)
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/arr-union/issues/new).
+
+## Building docs
+
+Generate readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm i verb && npm run docs
+```
+
+Or, if [verb](https://github.com/verbose/verb) is installed globally:
+
+```sh
+$ verb
+```
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2016 [Jon Schlinkert](https://github.com/jonschlinkert)
+Released under the [MIT license](https://github.com/jonschlinkert/arr-union/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on February 23, 2016._
\ No newline at end of file
diff --git a/node_modules/arr-union/index.js b/node_modules/arr-union/index.js
new file mode 100644
index 0000000..5ae6c4a
--- /dev/null
+++ b/node_modules/arr-union/index.js
@@ -0,0 +1,29 @@
+'use strict';
+
+module.exports = function union(init) {
+ if (!Array.isArray(init)) {
+ throw new TypeError('arr-union expects the first argument to be an array.');
+ }
+
+ var len = arguments.length;
+ var i = 0;
+
+ while (++i < len) {
+ var arg = arguments[i];
+ if (!arg) continue;
+
+ if (!Array.isArray(arg)) {
+ arg = [arg];
+ }
+
+ for (var j = 0; j < arg.length; j++) {
+ var ele = arg[j];
+
+ if (init.indexOf(ele) >= 0) {
+ continue;
+ }
+ init.push(ele);
+ }
+ }
+ return init;
+};
diff --git a/node_modules/arr-union/package.json b/node_modules/arr-union/package.json
new file mode 100644
index 0000000..5ee87fd
--- /dev/null
+++ b/node_modules/arr-union/package.json
@@ -0,0 +1,76 @@
+{
+ "name": "arr-union",
+ "description": "Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.",
+ "version": "3.1.0",
+ "homepage": "https://github.com/jonschlinkert/arr-union",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/arr-union",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/arr-union/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "array-union": "^1.0.1",
+ "array-unique": "^0.2.1",
+ "benchmarked": "^0.1.4",
+ "gulp-format-md": "^0.1.7",
+ "minimist": "^1.1.1",
+ "mocha": "*",
+ "should": "*"
+ },
+ "keywords": [
+ "add",
+ "append",
+ "array",
+ "arrays",
+ "combine",
+ "concat",
+ "extend",
+ "union",
+ "uniq",
+ "unique",
+ "util",
+ "utility",
+ "utils"
+ ],
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-diff",
+ "arr-flatten",
+ "arr-filter",
+ "arr-map",
+ "arr-pluck",
+ "arr-reduce",
+ "array-unique"
+ ]
+ },
+ "reflinks": [
+ "verb",
+ "array-union"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/array-each/LICENSE b/node_modules/array-each/LICENSE
new file mode 100644
index 0000000..ec85897
--- /dev/null
+++ b/node_modules/array-each/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, 2017, Jon Schlinkert
+
+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/node_modules/array-each/README.md b/node_modules/array-each/README.md
new file mode 100644
index 0000000..e8602a1
--- /dev/null
+++ b/node_modules/array-each/README.md
@@ -0,0 +1,84 @@
+# array-each [![NPM version](https://img.shields.io/npm/v/array-each.svg?style=flat)](https://www.npmjs.com/package/array-each) [![NPM monthly downloads](https://img.shields.io/npm/dm/array-each.svg?style=flat)](https://npmjs.org/package/array-each) [![NPM total downloads](https://img.shields.io/npm/dt/array-each.svg?style=flat)](https://npmjs.org/package/array-each) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/array-each.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/array-each)
+
+> Loop over each item in an array and call the given function on every element.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save array-each
+```
+
+## Usage
+
+### [each](index.js#L34)
+
+Loop over each item in an array and call the given function on every element.
+
+**Params**
+
+* `array` **{Array}**
+* `fn` **{Function}**
+* `thisArg` **{Object}**: (optional) pass a `thisArg` to be used as the context in which to call the function.
+* `returns` **{undefined}**
+
+**Example**
+
+```js
+each(['a', 'b', 'c'], function(ele) {
+ return ele + ele;
+});
+//=> ['aa', 'bb', 'cc']
+
+each(['a', 'b', 'c'], function(ele, i) {
+ return i + ele;
+});
+//=> ['0a', '1b', '2c']
+```
+
+## About
+
+### Related projects
+
+* [arr-filter](https://www.npmjs.com/package/arr-filter): Faster alternative to javascript's native filter method. | [homepage](https://github.com/jonschlinkert/arr-filter "Faster alternative to javascript's native filter method.")
+* [arr-map](https://www.npmjs.com/package/arr-map): Faster, node.js focused alternative to JavaScript's native array map. | [homepage](https://github.com/jonschlinkert/arr-map "Faster, node.js focused alternative to JavaScript's native array map.")
+* [collection-map](https://www.npmjs.com/package/collection-map): Returns an array of mapped values from an array or object. | [homepage](https://github.com/jonschlinkert/collection-map "Returns an array of mapped values from an array or object.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 26, 2017._
\ No newline at end of file
diff --git a/node_modules/array-each/index.js b/node_modules/array-each/index.js
new file mode 100644
index 0000000..12afef4
--- /dev/null
+++ b/node_modules/array-each/index.js
@@ -0,0 +1,46 @@
+/*!
+ * array-each
+ *
+ * Copyright (c) 2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+/**
+ * Loop over each item in an array and call the given function on every element.
+ *
+ * ```js
+ * each(['a', 'b', 'c'], function(ele) {
+ * return ele + ele;
+ * });
+ * //=> ['aa', 'bb', 'cc']
+ *
+ * each(['a', 'b', 'c'], function(ele, i) {
+ * return i + ele;
+ * });
+ * //=> ['0a', '1b', '2c']
+ * ```
+ *
+ * @name each
+ * @alias forEach
+ * @param {Array} `array`
+ * @param {Function} `fn`
+ * @param {Object} `thisArg` (optional) pass a `thisArg` to be used as the context in which to call the function.
+ * @return {undefined}
+ * @api public
+ */
+
+module.exports = function each(arr, cb, thisArg) {
+ if (arr == null) return;
+
+ var len = arr.length;
+ var idx = -1;
+
+ while (++idx < len) {
+ var ele = arr[idx];
+ if (cb.call(thisArg, ele, idx, arr) === false) {
+ break;
+ }
+ }
+};
diff --git a/node_modules/array-each/package.json b/node_modules/array-each/package.json
new file mode 100644
index 0000000..212fb80
--- /dev/null
+++ b/node_modules/array-each/package.json
@@ -0,0 +1,50 @@
+{
+ "name": "array-each",
+ "description": "Loop over each item in an array and call the given function on every element.",
+ "version": "1.0.1",
+ "homepage": "https://github.com/jonschlinkert/array-each",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/array-each",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/array-each/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^0.1.11",
+ "mocha": "^3.2.0"
+ },
+ "keywords": [
+ "array",
+ "each"
+ ],
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "collection-map",
+ "arr-filter",
+ "arr-map"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/array-initial/.jshintrc b/node_modules/array-initial/.jshintrc
new file mode 100644
index 0000000..ffd6173
--- /dev/null
+++ b/node_modules/array-initial/.jshintrc
@@ -0,0 +1,17 @@
+{
+ "esnext": true,
+ "boss": true,
+ "curly": true,
+ "eqeqeq": true,
+ "eqnull": true,
+ "immed": true,
+ "indent": 2,
+ "latedef": true,
+ "newcap": true,
+ "noarg": true,
+ "node": true,
+ "sub": true,
+ "undef": true,
+ "unused": true,
+ "mocha": true
+}
diff --git a/node_modules/array-initial/.npmignore b/node_modules/array-initial/.npmignore
new file mode 100644
index 0000000..cbe37ae
--- /dev/null
+++ b/node_modules/array-initial/.npmignore
@@ -0,0 +1,59 @@
+# Numerous always-ignore extensions
+*.csv
+*.dat
+*.diff
+*.err
+*.gz
+*.log
+*.orig
+*.out
+*.pid
+*.rar
+*.rej
+*.seed
+*.swo
+*.swp
+*.vi
+*.yo-rc.json
+*.zip
+*~
+.ruby-version
+lib-cov
+npm-debug.log
+
+# Always-ignore dirs
+/bower_components/
+/node_modules/
+/temp/
+/tmp/
+/vendor/
+_gh_pages
+
+# OS or Editor folders
+*.esproj
+*.komodoproject
+.komodotools
+*.sublime-*
+._*
+.cache
+.DS_Store
+.idea
+.project
+.settings
+.tmproj
+nbproject
+Thumbs.db
+
+# grunt-html-validation
+validation-status.json
+validation-report.json
+
+# misc
+TODO.md
+
+# npmignore
+test
+test.js
+.verb.md
+.gitattributes
+.editorconfig
diff --git a/node_modules/array-initial/.travis.yml b/node_modules/array-initial/.travis.yml
new file mode 100644
index 0000000..67decb2
--- /dev/null
+++ b/node_modules/array-initial/.travis.yml
@@ -0,0 +1,14 @@
+sudo: false
+os:
+ - linux
+ - osx
+language: node_js
+node_js:
+ - node
+ - '8'
+ - '7'
+ - '6'
+ - '5'
+ - '4'
+ - '0.12'
+ - '0.10'
diff --git a/node_modules/array-initial/LICENSE-MIT b/node_modules/array-initial/LICENSE-MIT
new file mode 100644
index 0000000..f8c06df
--- /dev/null
+++ b/node_modules/array-initial/LICENSE-MIT
@@ -0,0 +1,24 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Jon Schlinkert, 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.
diff --git a/node_modules/array-initial/README.md b/node_modules/array-initial/README.md
new file mode 100644
index 0000000..5b95675
--- /dev/null
+++ b/node_modules/array-initial/README.md
@@ -0,0 +1,39 @@
+# array-initial [![NPM version](https://badge.fury.io/js/array-initial.svg)](http://badge.fury.io/js/array-initial)
+
+> Get all but the last element or last n elements of an array.
+
+## Install with [npm](npmjs.org)
+
+```bash
+npm i array-initial --save
+```
+
+## Usage
+
+```js
+var initial = require('array-initial');
+
+initial(['a', 'b', 'c', 'd', 'e', 'f']);
+//=> ['a', 'b', 'c', 'd', 'e']
+
+initial(['a', 'b', 'c', 'd', 'e', 'f'], 1);
+//=> ['a', 'b', 'c', 'd', 'e']
+
+initial(['a', 'b', 'c', 'd', 'e', 'f'], 2);
+//=> ['a', 'b', 'c', 'd']
+```
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+Copyright (c) 2014 Jon Schlinkert
+Released under the MIT license
+
+***
+
+_This file was generated by [verb](https://github.com/assemble/verb) on December 12, 2014. To update, run `npm i -g verb && verb`._
diff --git a/node_modules/array-initial/index.js b/node_modules/array-initial/index.js
new file mode 100644
index 0000000..239e8c6
--- /dev/null
+++ b/node_modules/array-initial/index.js
@@ -0,0 +1,21 @@
+/*!
+ * array-initial
+ *
+ * Copyright (c) 2014 Jon Schlinkert, contributors.
+ * Licensed under the MIT license.
+ */
+
+var isNumber = require('is-number');
+var slice = require('array-slice');
+
+module.exports = function arrayInitial(arr, num) {
+ if (!Array.isArray(arr)) {
+ throw new Error('array-initial expects an array as the first argument.');
+ }
+
+ if (arr.length === 0) {
+ return null;
+ }
+
+ return slice(arr, 0, arr.length - (isNumber(num) ? num : 1));
+};
diff --git a/node_modules/array-initial/node_modules/is-number/LICENSE b/node_modules/array-initial/node_modules/is-number/LICENSE
new file mode 100644
index 0000000..3f2eca1
--- /dev/null
+++ b/node_modules/array-initial/node_modules/is-number/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+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/node_modules/array-initial/node_modules/is-number/README.md b/node_modules/array-initial/node_modules/is-number/README.md
new file mode 100644
index 0000000..6436992
--- /dev/null
+++ b/node_modules/array-initial/node_modules/is-number/README.md
@@ -0,0 +1,135 @@
+# is-number [![NPM version](https://img.shields.io/npm/v/is-number.svg?style=flat)](https://www.npmjs.com/package/is-number) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![NPM total downloads](https://img.shields.io/npm/dt/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-number.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-number)
+
+> Returns true if the value is a number. comprehensive tests.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-number
+```
+
+## Usage
+
+To understand some of the rationale behind the decisions made in this library (and to learn about some oddities of number evaluation in JavaScript), [see this gist](https://gist.github.com/jonschlinkert/e30c70c713da325d0e81).
+
+```js
+var isNumber = require('is-number');
+```
+
+### true
+
+See the [tests](./test.js) for more examples.
+
+```js
+isNumber(5e3) //=> 'true'
+isNumber(0xff) //=> 'true'
+isNumber(-1.1) //=> 'true'
+isNumber(0) //=> 'true'
+isNumber(1) //=> 'true'
+isNumber(1.1) //=> 'true'
+isNumber(10) //=> 'true'
+isNumber(10.10) //=> 'true'
+isNumber(100) //=> 'true'
+isNumber('-1.1') //=> 'true'
+isNumber('0') //=> 'true'
+isNumber('012') //=> 'true'
+isNumber('0xff') //=> 'true'
+isNumber('1') //=> 'true'
+isNumber('1.1') //=> 'true'
+isNumber('10') //=> 'true'
+isNumber('10.10') //=> 'true'
+isNumber('100') //=> 'true'
+isNumber('5e3') //=> 'true'
+isNumber(parseInt('012')) //=> 'true'
+isNumber(parseFloat('012')) //=> 'true'
+```
+
+### False
+
+See the [tests](./test.js) for more examples.
+
+```js
+isNumber('foo') //=> 'false'
+isNumber([1]) //=> 'false'
+isNumber([]) //=> 'false'
+isNumber(function () {}) //=> 'false'
+isNumber(Infinity) //=> 'false'
+isNumber(NaN) //=> 'false'
+isNumber(new Array('abc')) //=> 'false'
+isNumber(new Array(2)) //=> 'false'
+isNumber(new Buffer('abc')) //=> 'false'
+isNumber(null) //=> 'false'
+isNumber(undefined) //=> 'false'
+isNumber({abc: 'abc'}) //=> 'false'
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [even](https://www.npmjs.com/package/even): Get the even numbered items from an array. | [homepage](https://github.com/jonschlinkert/even "Get the even numbered items from an array.")
+* [is-even](https://www.npmjs.com/package/is-even): Return true if the given number is even. | [homepage](https://github.com/jonschlinkert/is-even "Return true if the given number is even.")
+* [is-odd](https://www.npmjs.com/package/is-odd): Returns true if the given number is odd. | [homepage](https://github.com/jonschlinkert/is-odd "Returns true if the given number is odd.")
+* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ")
+* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.")
+* [odd](https://www.npmjs.com/package/odd): Get the odd numbered items from an array. | [homepage](https://github.com/jonschlinkert/odd "Get the odd numbered items from an array.")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 38 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 5 | [charlike](https://github.com/charlike) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on October 17, 2017._
\ No newline at end of file
diff --git a/node_modules/array-initial/node_modules/is-number/index.js b/node_modules/array-initial/node_modules/is-number/index.js
new file mode 100644
index 0000000..5221f40
--- /dev/null
+++ b/node_modules/array-initial/node_modules/is-number/index.js
@@ -0,0 +1,21 @@
+/*!
+ * is-number
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function isNumber(num) {
+ var type = typeof num;
+
+ if (type === 'string' || num instanceof String) {
+ // an empty string would be coerced to true with the below logic
+ if (!num.trim()) return false;
+ } else if (type !== 'number' && !(num instanceof Number)) {
+ return false;
+ }
+
+ return (num - num + 1) >= 0;
+};
diff --git a/node_modules/array-initial/node_modules/is-number/package.json b/node_modules/array-initial/node_modules/is-number/package.json
new file mode 100644
index 0000000..c8a7af1
--- /dev/null
+++ b/node_modules/array-initial/node_modules/is-number/package.json
@@ -0,0 +1,76 @@
+{
+ "name": "is-number",
+ "description": "Returns true if the value is a number. comprehensive tests.",
+ "version": "4.0.0",
+ "homepage": "https://github.com/jonschlinkert/is-number",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "tunnckoCore (https://i.am.charlike.online)"
+ ],
+ "repository": "jonschlinkert/is-number",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-number/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "benchmarked": "^2.0.0",
+ "chalk": "^2.1.0",
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.0.1"
+ },
+ "keywords": [
+ "check",
+ "coerce",
+ "coercion",
+ "integer",
+ "is",
+ "is-nan",
+ "is-num",
+ "is-number",
+ "istype",
+ "kind",
+ "math",
+ "nan",
+ "num",
+ "number",
+ "numeric",
+ "test",
+ "type",
+ "typeof",
+ "value"
+ ],
+ "verb": {
+ "related": {
+ "list": [
+ "even",
+ "is-even",
+ "is-odd",
+ "is-primitive",
+ "kind-of",
+ "odd"
+ ]
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/array-initial/package.json b/node_modules/array-initial/package.json
new file mode 100644
index 0000000..2f70ba0
--- /dev/null
+++ b/node_modules/array-initial/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "array-initial",
+ "description": "Get all but the last element or last n elements of an array.",
+ "version": "1.1.0",
+ "homepage": "https://github.com/jonschlinkert/array-initial",
+ "author": {
+ "name": "Jon Schlinkert",
+ "url": "https://github.com/jonschlinkert"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/jonschlinkert/array-initial.git"
+ },
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/array-initial/issues"
+ },
+ "license": "MIT",
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha -R spec"
+ },
+ "devDependencies": {
+ "mocha": "^2.0.0",
+ "should": "^11.2.1"
+ },
+ "dependencies": {
+ "array-slice": "^1.0.0",
+ "is-number": "^4.0.0"
+ },
+ "keywords": [
+ "array",
+ "fast",
+ "first",
+ "initial",
+ "javascript",
+ "js",
+ "last",
+ "rest",
+ "util",
+ "utility",
+ "utils"
+ ]
+}
diff --git a/node_modules/array-last/LICENSE b/node_modules/array-last/LICENSE
new file mode 100644
index 0000000..3f2eca1
--- /dev/null
+++ b/node_modules/array-last/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+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/node_modules/array-last/README.md b/node_modules/array-last/README.md
new file mode 100755
index 0000000..d976c93
--- /dev/null
+++ b/node_modules/array-last/README.md
@@ -0,0 +1,94 @@
+# array-last [![NPM version](https://img.shields.io/npm/v/array-last.svg?style=flat)](https://www.npmjs.com/package/array-last) [![NPM monthly downloads](https://img.shields.io/npm/dm/array-last.svg?style=flat)](https://npmjs.org/package/array-last) [![NPM total downloads](https://img.shields.io/npm/dt/array-last.svg?style=flat)](https://npmjs.org/package/array-last) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/array-last.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/array-last)
+
+> Get the last or last n elements in an array.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save array-last
+```
+
+## Usage
+
+```js
+var last = require('array-last');
+
+last(['a', 'b', 'c', 'd', 'e', 'f']);
+//=> 'f'
+
+last(['a', 'b', 'c', 'd', 'e', 'f'], 1);
+//=> 'f'
+
+last(['a', 'b', 'c', 'd', 'e', 'f'], 3);
+//=> ['d', 'e', 'f']
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [arr-union](https://www.npmjs.com/package/arr-union): Combines a list of arrays, returning a single array with unique values, using strict equality… [more](https://github.com/jonschlinkert/arr-union) | [homepage](https://github.com/jonschlinkert/arr-union)
+* [array-unique](https://www.npmjs.com/package/array-unique): Remove duplicate values from an array. Fastest ES5 implementation. | [homepage](https://github.com/jonschlinkert/array-unique)
+* [array-xor](https://www.npmjs.com/package/array-xor): Returns the symmetric difference (exclusive-or) of an array of elements (elements that are present in… [more](https://github.com/jonschlinkert/array-xor) | [homepage](https://github.com/jonschlinkert/array-xor)
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 19 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 3 | [SpyMaster356](https://github.com/SpyMaster356) |
+| 2 | [bendrucker](https://github.com/bendrucker) |
+| 2 | [phated](https://github.com/phated) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on November 30, 2017._
\ No newline at end of file
diff --git a/node_modules/array-last/index.js b/node_modules/array-last/index.js
new file mode 100644
index 0000000..5b02f18
--- /dev/null
+++ b/node_modules/array-last/index.js
@@ -0,0 +1,30 @@
+/*!
+ * array-last
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+var isNumber = require('is-number');
+
+module.exports = function last(arr, n) {
+ if (!Array.isArray(arr)) {
+ throw new Error('expected the first argument to be an array');
+ }
+
+ var len = arr.length;
+ if (len === 0) {
+ return null;
+ }
+
+ n = isNumber(n) ? +n : 1;
+ if (n === 1) {
+ return arr[len - 1];
+ }
+
+ var res = new Array(n);
+ while (n--) {
+ res[n] = arr[--len];
+ }
+ return res;
+};
diff --git a/node_modules/array-last/node_modules/is-number/LICENSE b/node_modules/array-last/node_modules/is-number/LICENSE
new file mode 100644
index 0000000..3f2eca1
--- /dev/null
+++ b/node_modules/array-last/node_modules/is-number/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+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/node_modules/array-last/node_modules/is-number/README.md b/node_modules/array-last/node_modules/is-number/README.md
new file mode 100644
index 0000000..6436992
--- /dev/null
+++ b/node_modules/array-last/node_modules/is-number/README.md
@@ -0,0 +1,135 @@
+# is-number [![NPM version](https://img.shields.io/npm/v/is-number.svg?style=flat)](https://www.npmjs.com/package/is-number) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![NPM total downloads](https://img.shields.io/npm/dt/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-number.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-number)
+
+> Returns true if the value is a number. comprehensive tests.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-number
+```
+
+## Usage
+
+To understand some of the rationale behind the decisions made in this library (and to learn about some oddities of number evaluation in JavaScript), [see this gist](https://gist.github.com/jonschlinkert/e30c70c713da325d0e81).
+
+```js
+var isNumber = require('is-number');
+```
+
+### true
+
+See the [tests](./test.js) for more examples.
+
+```js
+isNumber(5e3) //=> 'true'
+isNumber(0xff) //=> 'true'
+isNumber(-1.1) //=> 'true'
+isNumber(0) //=> 'true'
+isNumber(1) //=> 'true'
+isNumber(1.1) //=> 'true'
+isNumber(10) //=> 'true'
+isNumber(10.10) //=> 'true'
+isNumber(100) //=> 'true'
+isNumber('-1.1') //=> 'true'
+isNumber('0') //=> 'true'
+isNumber('012') //=> 'true'
+isNumber('0xff') //=> 'true'
+isNumber('1') //=> 'true'
+isNumber('1.1') //=> 'true'
+isNumber('10') //=> 'true'
+isNumber('10.10') //=> 'true'
+isNumber('100') //=> 'true'
+isNumber('5e3') //=> 'true'
+isNumber(parseInt('012')) //=> 'true'
+isNumber(parseFloat('012')) //=> 'true'
+```
+
+### False
+
+See the [tests](./test.js) for more examples.
+
+```js
+isNumber('foo') //=> 'false'
+isNumber([1]) //=> 'false'
+isNumber([]) //=> 'false'
+isNumber(function () {}) //=> 'false'
+isNumber(Infinity) //=> 'false'
+isNumber(NaN) //=> 'false'
+isNumber(new Array('abc')) //=> 'false'
+isNumber(new Array(2)) //=> 'false'
+isNumber(new Buffer('abc')) //=> 'false'
+isNumber(null) //=> 'false'
+isNumber(undefined) //=> 'false'
+isNumber({abc: 'abc'}) //=> 'false'
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [even](https://www.npmjs.com/package/even): Get the even numbered items from an array. | [homepage](https://github.com/jonschlinkert/even "Get the even numbered items from an array.")
+* [is-even](https://www.npmjs.com/package/is-even): Return true if the given number is even. | [homepage](https://github.com/jonschlinkert/is-even "Return true if the given number is even.")
+* [is-odd](https://www.npmjs.com/package/is-odd): Returns true if the given number is odd. | [homepage](https://github.com/jonschlinkert/is-odd "Returns true if the given number is odd.")
+* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ")
+* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.")
+* [odd](https://www.npmjs.com/package/odd): Get the odd numbered items from an array. | [homepage](https://github.com/jonschlinkert/odd "Get the odd numbered items from an array.")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 38 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 5 | [charlike](https://github.com/charlike) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on October 17, 2017._
\ No newline at end of file
diff --git a/node_modules/array-last/node_modules/is-number/index.js b/node_modules/array-last/node_modules/is-number/index.js
new file mode 100644
index 0000000..5221f40
--- /dev/null
+++ b/node_modules/array-last/node_modules/is-number/index.js
@@ -0,0 +1,21 @@
+/*!
+ * is-number
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function isNumber(num) {
+ var type = typeof num;
+
+ if (type === 'string' || num instanceof String) {
+ // an empty string would be coerced to true with the below logic
+ if (!num.trim()) return false;
+ } else if (type !== 'number' && !(num instanceof Number)) {
+ return false;
+ }
+
+ return (num - num + 1) >= 0;
+};
diff --git a/node_modules/array-last/node_modules/is-number/package.json b/node_modules/array-last/node_modules/is-number/package.json
new file mode 100644
index 0000000..c8a7af1
--- /dev/null
+++ b/node_modules/array-last/node_modules/is-number/package.json
@@ -0,0 +1,76 @@
+{
+ "name": "is-number",
+ "description": "Returns true if the value is a number. comprehensive tests.",
+ "version": "4.0.0",
+ "homepage": "https://github.com/jonschlinkert/is-number",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "tunnckoCore (https://i.am.charlike.online)"
+ ],
+ "repository": "jonschlinkert/is-number",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-number/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "benchmarked": "^2.0.0",
+ "chalk": "^2.1.0",
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.0.1"
+ },
+ "keywords": [
+ "check",
+ "coerce",
+ "coercion",
+ "integer",
+ "is",
+ "is-nan",
+ "is-num",
+ "is-number",
+ "istype",
+ "kind",
+ "math",
+ "nan",
+ "num",
+ "number",
+ "numeric",
+ "test",
+ "type",
+ "typeof",
+ "value"
+ ],
+ "verb": {
+ "related": {
+ "list": [
+ "even",
+ "is-even",
+ "is-odd",
+ "is-primitive",
+ "kind-of",
+ "odd"
+ ]
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/array-last/package.json b/node_modules/array-last/package.json
new file mode 100644
index 0000000..591edb6
--- /dev/null
+++ b/node_modules/array-last/package.json
@@ -0,0 +1,76 @@
+{
+ "name": "array-last",
+ "description": "Get the last or last n elements in an array.",
+ "version": "1.3.0",
+ "homepage": "https://github.com/jonschlinkert/array-last",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Ben Drucker (http://www.bendrucker.me)",
+ "Blaine Bublitz (https://twitter.com/BlaineBublitz)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Stephen A. Wilson (https://github.com/SpyMaster356)"
+ ],
+ "repository": "jonschlinkert/array-last",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/array-last/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "is-number": "^4.0.0"
+ },
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "array-slice": "^1.0.0",
+ "benchmarked": "^1.1.1",
+ "gulp-format-md": "^1.0.0",
+ "matched": "^1.0.2",
+ "mocha": "^3.5.0"
+ },
+ "keywords": [
+ "array",
+ "fast",
+ "first",
+ "initial",
+ "javascript",
+ "js",
+ "last",
+ "rest",
+ "util",
+ "utility",
+ "utils"
+ ],
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-union",
+ "array-unique",
+ "array-xor"
+ ]
+ },
+ "reflinks": [
+ "verb"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/array-slice/LICENSE b/node_modules/array-slice/LICENSE
new file mode 100755
index 0000000..3f2eca1
--- /dev/null
+++ b/node_modules/array-slice/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+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/node_modules/array-slice/README.md b/node_modules/array-slice/README.md
new file mode 100755
index 0000000..e175ca0
--- /dev/null
+++ b/node_modules/array-slice/README.md
@@ -0,0 +1,82 @@
+# array-slice [![NPM version](https://img.shields.io/npm/v/array-slice.svg?style=flat)](https://www.npmjs.com/package/array-slice) [![NPM monthly downloads](https://img.shields.io/npm/dm/array-slice.svg?style=flat)](https://npmjs.org/package/array-slice) [![NPM total downloads](https://img.shields.io/npm/dt/array-slice.svg?style=flat)](https://npmjs.org/package/array-slice) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/array-slice.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/array-slice)
+
+> Array-slice method. Slices `array` from the `start` index up to, but not including, the `end` index.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save array-slice
+```
+
+This function is used instead of `Array#slice` to support node lists in IE < 9 and to ensure dense arrays are returned. This is also faster than native slice in some cases.
+
+## Usage
+
+```js
+var slice = require('array-slice');
+var arr = ['a', 'b', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
+
+slice(arr, 3, 6);
+//=> ['e', 'f', 'g']
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays.")
+* [array-unique](https://www.npmjs.com/package/array-unique): Remove duplicate values from an array. Fastest ES5 implementation. | [homepage](https://github.com/jonschlinkert/array-unique "Remove duplicate values from an array. Fastest ES5 implementation.")
+* [array-xor](https://www.npmjs.com/package/array-xor): Returns the symmetric difference (exclusive-or) of an array of elements (elements that are present in… [more](https://github.com/jonschlinkert/array-xor) | [homepage](https://github.com/jonschlinkert/array-xor "Returns the symmetric difference (exclusive-or) of an array of elements (elements that are present in all given arrays and not in their intersections).")
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on November 30, 2017._
\ No newline at end of file
diff --git a/node_modules/array-slice/index.js b/node_modules/array-slice/index.js
new file mode 100644
index 0000000..15cdb77
--- /dev/null
+++ b/node_modules/array-slice/index.js
@@ -0,0 +1,33 @@
+/*!
+ * array-slice
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function slice(arr, start, end) {
+ var len = arr.length;
+ var range = [];
+
+ start = idx(len, start);
+ end = idx(len, end, len);
+
+ while (start < end) {
+ range.push(arr[start++]);
+ }
+ return range;
+};
+
+function idx(len, pos, end) {
+ if (pos == null) {
+ pos = end || 0;
+ } else if (pos < 0) {
+ pos = Math.max(len + pos, 0);
+ } else {
+ pos = Math.min(pos, len);
+ }
+
+ return pos;
+}
diff --git a/node_modules/array-slice/package.json b/node_modules/array-slice/package.json
new file mode 100644
index 0000000..7fedf0c
--- /dev/null
+++ b/node_modules/array-slice/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "array-slice",
+ "description": "Array-slice method. Slices `array` from the `start` index up to, but not including, the `end` index.",
+ "version": "1.1.0",
+ "homepage": "https://github.com/jonschlinkert/array-slice",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/array-slice",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/array-slice/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.5.3"
+ },
+ "keywords": [
+ "array",
+ "javascript",
+ "js",
+ "slice",
+ "util",
+ "utils"
+ ],
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-flatten",
+ "array-unique",
+ "array-xor"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/array-sort/LICENSE b/node_modules/array-sort/LICENSE
new file mode 100644
index 0000000..c0d7f13
--- /dev/null
+++ b/node_modules/array-sort/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Jon Schlinkert.
+
+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.
\ No newline at end of file
diff --git a/node_modules/array-sort/README.md b/node_modules/array-sort/README.md
new file mode 100644
index 0000000..94d9ba7
--- /dev/null
+++ b/node_modules/array-sort/README.md
@@ -0,0 +1,203 @@
+# array-sort [![NPM version](https://img.shields.io/npm/v/array-sort.svg?style=flat)](https://www.npmjs.com/package/array-sort) [![NPM monthly downloads](https://img.shields.io/npm/dm/array-sort.svg?style=flat)](https://npmjs.org/package/array-sort) [![NPM total downloads](https://img.shields.io/npm/dt/array-sort.svg?style=flat)](https://npmjs.org/package/array-sort) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/array-sort.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/array-sort) [![Windows Build Status](https://img.shields.io/appveyor/ci/jonschlinkert/array-sort.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/jonschlinkert/array-sort)
+
+> Fast and powerful array sorting. Sort an array of objects by one or more properties. Any number of nested properties or custom comparison functions may be used.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save array-sort
+```
+
+Install with [yarn](https://yarnpkg.com):
+
+```sh
+$ yarn add array-sort
+```
+
+## Usage
+
+Sort an array by the given object property:
+
+```js
+var arraySort = require('array-sort');
+
+arraySort([{foo: 'y'}, {foo: 'z'}, {foo: 'x'}], 'foo');
+//=> [{foo: 'x'}, {foo: 'y'}, {foo: 'z'}]
+```
+
+**Reverse order**
+
+```js
+arraySort([{foo: 'y'}, {foo: 'z'}, {foo: 'x'}], 'foo', {reverse: true});
+//=> [{foo: 'z'}, {foo: 'y'}, {foo: 'x'}]
+```
+
+## Params
+
+```js
+arraySort(array, comparisonArgs);
+```
+
+* `array`: **{Array}** The array to sort
+* `comparisonArgs`: **{Function|String|Array}**: One or more functions or object paths to use for sorting.
+
+## Examples
+
+**[Sort blog posts](examples/blog-posts.js)**
+
+```js
+var arraySort = require('array-sort');
+
+var posts = [
+ { path: 'c.md', locals: { date: '2014-01-09' } },
+ { path: 'a.md', locals: { date: '2014-01-02' } },
+ { path: 'b.md', locals: { date: '2013-05-06' } },
+];
+
+// sort by `locals.date`
+console.log(arraySort(posts, 'locals.date'));
+
+// sort by `path`
+console.log(arraySort(posts, 'path'));
+```
+
+**[Sort by multiple properties](examples/multiple-props.js)**
+
+```js
+var arraySort = require('array-sort');
+
+var posts = [
+ { locals: { foo: 'bbb', date: '2013-05-06' }},
+ { locals: { foo: 'aaa', date: '2012-01-02' }},
+ { locals: { foo: 'ccc', date: '2014-01-02' }},
+ { locals: { foo: 'ccc', date: '2015-01-02' }},
+ { locals: { foo: 'bbb', date: '2014-06-01' }},
+ { locals: { foo: 'aaa', date: '2014-02-02' }},
+];
+
+// sort by `locals.foo`, then `locals.date`
+var result = arraySort(posts, ['locals.foo', 'locals.date']);
+
+console.log(result);
+// [ { locals: { foo: 'aaa', date: '2012-01-02' } },
+// { locals: { foo: 'aaa', date: '2014-02-02' } },
+// { locals: { foo: 'bbb', date: '2013-05-06' } },
+// { locals: { foo: 'bbb', date: '2014-06-01' } },
+// { locals: { foo: 'ccc', date: '2014-01-02' } },
+// { locals: { foo: 'ccc', date: '2015-01-02' } } ]
+```
+
+**[Custom function](examples/custom-function.js)**
+
+If custom functions are supplied, array elements are sorted according to the return value of the compare function. See the [docs for ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)`Array.sort()` for more details.
+
+```js
+var arr = [
+ {one: 'w', two: 'b'},
+ {one: 'z', two: 'a'},
+ {one: 'x', two: 'c'},
+ {one: 'y', two: 'd'},
+];
+
+function compare(prop) {
+ return function (a, b) {
+ return a[prop].localeCompare(b[prop]);
+ };
+}
+
+var result = arraySort(arr, function (a, b) {
+ return a.two.localeCompare(b.two);
+});
+
+console.log(result);
+// [ { one: 'z', two: 'a' },
+// { one: 'w', two: 'b' },
+// { one: 'x', two: 'c' },
+// { one: 'y', two: 'd' } ]
+```
+
+**[Multiple custom functions](examples/custom-functions.js)**
+
+```js
+var arr = [
+ {foo: 'w', bar: 'y', baz: 'w'},
+ {foo: 'x', bar: 'y', baz: 'w'},
+ {foo: 'x', bar: 'y', baz: 'z'},
+ {foo: 'x', bar: 'x', baz: 'w'},
+];
+
+// reusable compare function
+function compare(prop) {
+ return function (a, b) {
+ return a[prop].localeCompare(b[prop]);
+ };
+}
+
+// the `compare` functions can be a list or array
+var result = arraySort(arr, compare('foo'), compare('bar'), compare('baz'));
+
+console.log(result);
+// [ { foo: 'w', bar: 'y', baz: 'w' },
+// { foo: 'x', bar: 'x', baz: 'w' },
+// { foo: 'x', bar: 'y', baz: 'w' },
+// { foo: 'x', bar: 'y', baz: 'z' } ]
+```
+
+## About
+
+### Related projects
+
+* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.")
+* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.")
+* [sort-asc](https://www.npmjs.com/package/sort-asc): Sort array elements in ascending order. | [homepage](https://github.com/jonschlinkert/sort-asc "Sort array elements in ascending order.")
+* [sort-desc](https://www.npmjs.com/package/sort-desc): Sort array elements in descending order. | [homepage](https://github.com/jonschlinkert/sort-desc "Sort array elements in descending order.")
+* [sort-object](https://www.npmjs.com/package/sort-object): Sort the keys in an object. | [homepage](https://github.com/doowb/sort-object "Sort the keys in an object.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 10 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 4 | [doowb](https://github.com/doowb) |
+| 1 | [iamstolis](https://github.com/iamstolis) |
+| 1 | [wkevina](https://github.com/wkevina) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on September 11, 2017._
\ No newline at end of file
diff --git a/node_modules/array-sort/index.js b/node_modules/array-sort/index.js
new file mode 100644
index 0000000..01880e1
--- /dev/null
+++ b/node_modules/array-sort/index.js
@@ -0,0 +1,105 @@
+/*!
+ * array-sort
+ *
+ * Copyright (c) 2015-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var defaultCompare = require('default-compare');
+var typeOf = require('kind-of');
+var get = require('get-value');
+
+/**
+ * Sort an array of objects by one or more properties.
+ *
+ * @param {Array} `arr` The Array to sort.
+ * @param {String|Array|Function} `props` One or more object paths or comparison functions.
+ * @param {Object} `opts` Pass `{ reverse: true }` to reverse the sort order.
+ * @return {Array} Returns a sorted array.
+ * @api public
+ */
+
+function arraySort(arr, props, opts) {
+ if (arr == null) {
+ return [];
+ }
+
+ if (!Array.isArray(arr)) {
+ throw new TypeError('array-sort expects an array.');
+ }
+
+ if (arguments.length === 1) {
+ return arr.sort();
+ }
+
+ var args = flatten([].slice.call(arguments, 1));
+
+ // if the last argument appears to be a plain object,
+ // it's not a valid `compare` arg, so it must be options.
+ if (typeOf(args[args.length - 1]) === 'object') {
+ opts = args.pop();
+ }
+ return arr.sort(sortBy(args, opts));
+}
+
+/**
+ * Iterate over each comparison property or function until `1` or `-1`
+ * is returned.
+ *
+ * @param {String|Array|Function} `props` One or more object paths or comparison functions.
+ * @param {Object} `opts` Pass `{ reverse: true }` to reverse the sort order.
+ * @return {Array}
+ */
+
+function sortBy(props, opts) {
+ opts = opts || {};
+
+ return function compareFn(a, b) {
+ var len = props.length, i = -1;
+ var result;
+
+ while (++i < len) {
+ result = compare(props[i], a, b);
+ if (result !== 0) {
+ break;
+ }
+ }
+ if (opts.reverse === true) {
+ return result * -1;
+ }
+ return result;
+ };
+}
+
+/**
+ * Compare `a` to `b`. If an object `prop` is passed, then
+ * `a[prop]` is compared to `b[prop]`
+ */
+
+function compare(prop, a, b) {
+ if (typeof prop === 'function') {
+ // expose `compare` to custom function
+ return prop(a, b, compare.bind(null, null));
+ }
+ // compare object values
+ if (prop && typeof a === 'object' && typeof b === 'object') {
+ return compare(null, get(a, prop), get(b, prop));
+ }
+ return defaultCompare(a, b);
+}
+
+/**
+ * Flatten the given array.
+ */
+
+function flatten(arr) {
+ return [].concat.apply([], arr);
+}
+
+/**
+ * Expose `arraySort`
+ */
+
+module.exports = arraySort;
diff --git a/node_modules/array-sort/package.json b/node_modules/array-sort/package.json
new file mode 100644
index 0000000..19e02d7
--- /dev/null
+++ b/node_modules/array-sort/package.json
@@ -0,0 +1,94 @@
+{
+ "name": "array-sort",
+ "description": "Fast and powerful array sorting. Sort an array of objects by one or more properties. Any number of nested properties or custom comparison functions may be used.",
+ "version": "1.0.0",
+ "homepage": "https://github.com/jonschlinkert/array-sort",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Brian Woodward (https://twitter.com/doowb)",
+ "Jan Stola (https://github.com/iamstolis)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Kevin Ward (https://github.com/wkevina)"
+ ],
+ "repository": "jonschlinkert/array-sort",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/array-sort/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "default-compare": "^1.0.0",
+ "get-value": "^2.0.6",
+ "kind-of": "^5.0.2"
+ },
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "benchmarked": "^0.1.5",
+ "glob": "^7.0.3",
+ "gulp-format-md": "^0.1.8",
+ "lodash.sortbyorder": "^3.4.4",
+ "mocha": "^2.4.5",
+ "should": "^8.3.1"
+ },
+ "keywords": [
+ "arr",
+ "array",
+ "asc",
+ "ascend",
+ "ascending",
+ "desc",
+ "descend",
+ "descending",
+ "dot",
+ "element",
+ "elements",
+ "get",
+ "multiple",
+ "nested",
+ "obj",
+ "object",
+ "order",
+ "ordered",
+ "path",
+ "prop",
+ "properties",
+ "property",
+ "sort",
+ "sorted",
+ "sorting"
+ ],
+ "verb": {
+ "reflinks": [
+ "verb"
+ ],
+ "related": {
+ "list": [
+ "get-value",
+ "set-value",
+ "sort-asc",
+ "sort-desc",
+ "sort-object"
+ ]
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/array-unique/LICENSE b/node_modules/array-unique/LICENSE
new file mode 100755
index 0000000..842218c
--- /dev/null
+++ b/node_modules/array-unique/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert
+
+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/node_modules/array-unique/README.md b/node_modules/array-unique/README.md
new file mode 100755
index 0000000..41c8c90
--- /dev/null
+++ b/node_modules/array-unique/README.md
@@ -0,0 +1,77 @@
+# array-unique [![NPM version](https://img.shields.io/npm/v/array-unique.svg?style=flat)](https://www.npmjs.com/package/array-unique) [![NPM downloads](https://img.shields.io/npm/dm/array-unique.svg?style=flat)](https://npmjs.org/package/array-unique) [![Build Status](https://img.shields.io/travis/jonschlinkert/array-unique.svg?style=flat)](https://travis-ci.org/jonschlinkert/array-unique)
+
+Remove duplicate values from an array. Fastest ES5 implementation.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save array-unique
+```
+
+## Usage
+
+```js
+var unique = require('array-unique');
+
+var arr = ['a', 'b', 'c', 'c'];
+console.log(unique(arr)) //=> ['a', 'b', 'c']
+console.log(arr) //=> ['a', 'b', 'c']
+
+/* The above modifies the input array. To prevent that at a slight performance cost: */
+var unique = require("array-unique").immutable;
+
+var arr = ['a', 'b', 'c', 'c'];
+console.log(unique(arr)) //=> ['a', 'b', 'c']
+console.log(arr) //=> ['a', 'b', 'c', 'c']
+```
+
+## About
+
+### Related projects
+
+* [arr-diff](https://www.npmjs.com/package/arr-diff): Returns an array with only the unique values from the first array, by excluding all… [more](https://github.com/jonschlinkert/arr-diff) | [homepage](https://github.com/jonschlinkert/arr-diff "Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.")
+* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.")
+* [arr-map](https://www.npmjs.com/package/arr-map): Faster, node.js focused alternative to JavaScript's native array map. | [homepage](https://github.com/jonschlinkert/arr-map "Faster, node.js focused alternative to JavaScript's native array map.")
+* [arr-pluck](https://www.npmjs.com/package/arr-pluck): Retrieves the value of a specified property from all elements in the collection. | [homepage](https://github.com/jonschlinkert/arr-pluck "Retrieves the value of a specified property from all elements in the collection.")
+* [arr-reduce](https://www.npmjs.com/package/arr-reduce): Fast array reduce that also loops over sparse elements. | [homepage](https://github.com/jonschlinkert/arr-reduce "Fast array reduce that also loops over sparse elements.")
+* [arr-union](https://www.npmjs.com/package/arr-union): Combines a list of arrays, returning a single array with unique values, using strict equality… [more](https://github.com/jonschlinkert/arr-union) | [homepage](https://github.com/jonschlinkert/arr-union "Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/array-unique/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.28, on July 31, 2016._
\ No newline at end of file
diff --git a/node_modules/array-unique/index.js b/node_modules/array-unique/index.js
new file mode 100644
index 0000000..7e481e0
--- /dev/null
+++ b/node_modules/array-unique/index.js
@@ -0,0 +1,43 @@
+/*!
+ * array-unique
+ *
+ * Copyright (c) 2014-2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function unique(arr) {
+ if (!Array.isArray(arr)) {
+ throw new TypeError('array-unique expects an array.');
+ }
+
+ var len = arr.length;
+ var i = -1;
+
+ while (i++ < len) {
+ var j = i + 1;
+
+ for (; j < arr.length; ++j) {
+ if (arr[i] === arr[j]) {
+ arr.splice(j--, 1);
+ }
+ }
+ }
+ return arr;
+};
+
+module.exports.immutable = function uniqueImmutable(arr) {
+ if (!Array.isArray(arr)) {
+ throw new TypeError('array-unique expects an array.');
+ }
+
+ var arrLen = arr.length;
+ var newArr = new Array(arrLen);
+
+ for (var i = 0; i < arrLen; i++) {
+ newArr[i] = arr[i];
+ }
+
+ return module.exports(newArr);
+};
diff --git a/node_modules/array-unique/package.json b/node_modules/array-unique/package.json
new file mode 100644
index 0000000..d87640a
--- /dev/null
+++ b/node_modules/array-unique/package.json
@@ -0,0 +1,62 @@
+{
+ "name": "array-unique",
+ "description": "Remove duplicate values from an array. Fastest ES5 implementation.",
+ "version": "0.3.2",
+ "homepage": "https://github.com/jonschlinkert/array-unique",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/array-unique",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/array-unique/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js",
+ "LICENSE",
+ "README.md"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "array-uniq": "^1.0.2",
+ "benchmarked": "^0.1.3",
+ "gulp-format-md": "^0.1.9",
+ "mocha": "^2.5.3",
+ "should": "^10.0.0"
+ },
+ "keywords": [
+ "array",
+ "unique"
+ ],
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-diff",
+ "arr-union",
+ "arr-flatten",
+ "arr-reduce",
+ "arr-map",
+ "arr-pluck"
+ ]
+ },
+ "reflinks": [
+ "verb",
+ "verb-generate-readme"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/assign-symbols/LICENSE b/node_modules/assign-symbols/LICENSE
new file mode 100644
index 0000000..65f90ac
--- /dev/null
+++ b/node_modules/assign-symbols/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+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/node_modules/assign-symbols/README.md b/node_modules/assign-symbols/README.md
new file mode 100644
index 0000000..422729d
--- /dev/null
+++ b/node_modules/assign-symbols/README.md
@@ -0,0 +1,73 @@
+# assign-symbols [![NPM version](https://badge.fury.io/js/assign-symbols.svg)](http://badge.fury.io/js/assign-symbols)
+
+> Assign the enumerable es6 Symbol properties from an object (or objects) to the first object passed on the arguments. Can be used as a supplement to other extend, assign or merge methods as a polyfill for the Symbols part of the es6 Object.assign method.
+
+From the [Mozilla Developer docs for Symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol):
+
+> A symbol is a unique and immutable data type and may be used as an identifier for object properties. The symbol object is an implicit object wrapper for the symbol primitive data type.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i assign-symbols --save
+```
+
+## Usage
+
+```js
+var assignSymbols = require('assign-symbols');
+var obj = {};
+
+var one = {};
+var symbolOne = Symbol('aaa');
+one[symbolOne] = 'bbb';
+
+var two = {};
+var symbolTwo = Symbol('ccc');
+two[symbolTwo] = 'ddd';
+
+assignSymbols(obj, one, two);
+
+console.log(obj[symbolOne]);
+//=> 'bbb'
+console.log(obj[symbolTwo]);
+//=> 'ddd'
+```
+
+## Similar projects
+
+* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties of source objects to a destination object. | [homepage](https://github.com/jonschlinkert/assign-deep)
+* [clone-deep](https://www.npmjs.com/package/clone-deep): Recursively (deep) clone JavaScript native types, like Object, Array, RegExp, Date as well as primitives. | [homepage](https://github.com/jonschlinkert/clone-deep)
+* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow)
+* [merge-deep](https://www.npmjs.com/package/merge-deep): Recursively merge values in a javascript object. | [homepage](https://github.com/jonschlinkert/merge-deep)
+* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/assign-symbols/issues/new).
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on November 06, 2015._
\ No newline at end of file
diff --git a/node_modules/assign-symbols/index.js b/node_modules/assign-symbols/index.js
new file mode 100644
index 0000000..c08a232
--- /dev/null
+++ b/node_modules/assign-symbols/index.js
@@ -0,0 +1,40 @@
+/*!
+ * assign-symbols
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function(receiver, objects) {
+ if (receiver === null || typeof receiver === 'undefined') {
+ throw new TypeError('expected first argument to be an object.');
+ }
+
+ if (typeof objects === 'undefined' || typeof Symbol === 'undefined') {
+ return receiver;
+ }
+
+ if (typeof Object.getOwnPropertySymbols !== 'function') {
+ return receiver;
+ }
+
+ var isEnumerable = Object.prototype.propertyIsEnumerable;
+ var target = Object(receiver);
+ var len = arguments.length, i = 0;
+
+ while (++i < len) {
+ var provider = Object(arguments[i]);
+ var names = Object.getOwnPropertySymbols(provider);
+
+ for (var j = 0; j < names.length; j++) {
+ var key = names[j];
+
+ if (isEnumerable.call(provider, key)) {
+ target[key] = provider[key];
+ }
+ }
+ }
+ return target;
+};
diff --git a/node_modules/assign-symbols/package.json b/node_modules/assign-symbols/package.json
new file mode 100644
index 0000000..7f77b58
--- /dev/null
+++ b/node_modules/assign-symbols/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "assign-symbols",
+ "description": "Assign the enumerable es6 Symbol properties from an object (or objects) to the first object passed on the arguments. Can be used as a supplement to other extend, assign or merge methods as a polyfill for the Symbols part of the es6 Object.assign method.",
+ "version": "1.0.0",
+ "homepage": "https://github.com/jonschlinkert/assign-symbols",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/assign-symbols",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/assign-symbols/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "mocha": "^3.0.0"
+ },
+ "keywords": [
+ "assign",
+ "symbols"
+ ],
+ "verb": {
+ "related": {
+ "list": [
+ "assign-deep",
+ "mixin-deep",
+ "merge-deep",
+ "extend-shallow",
+ "clone-deep"
+ ]
+ }
+ }
+}
diff --git a/node_modules/async-done/LICENSE b/node_modules/async-done/LICENSE
new file mode 100644
index 0000000..9aedc0d
--- /dev/null
+++ b/node_modules/async-done/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Blaine Bublitz, Eric Schoffstall and other 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.
diff --git a/node_modules/async-done/README.md b/node_modules/async-done/README.md
new file mode 100644
index 0000000..93545c2
--- /dev/null
+++ b/node_modules/async-done/README.md
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+# async-done
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Azure Pipelines Build Status][azure-pipelines-image]][azure-pipelines-url] [![Travis Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Allows libraries to handle various caller provided asynchronous functions uniformly. Maps promises, observables, child processes and streams, and callbacks to callback style.
+
+As async conventions evolve, it is useful to be able to deal with several different *styles* of async completion uniformly. With this module you can handle completion using a node-style callback, regardless of a return value that's a promise, observable, child process or stream.
+
+## Usage
+
+### Successful completion
+
+```js
+var asyncDone = require('async-done');
+
+asyncDone(function(done){
+ // do async things
+ done(null, 2);
+}, function(error, result){
+ // `error` will be null on successful execution of the first function.
+ // `result` will be the result from the first function.
+});
+```
+
+### Failed completion
+
+```js
+var asyncDone = require('async-done');
+
+asyncDone(function(done){
+ // do async things
+ done(new Error('Some Error Occurred'));
+}, function(error, result){
+ // `error` will be an error from the first function.
+ // `result` will be undefined on failed execution of the first function.
+});
+```
+
+## API
+
+### `asyncDone(fn, callback)`
+
+Takes a function to execute (`fn`) and a function to call on completion (`callback`).
+
+#### `fn([done])`
+
+Optionally takes a callback to call when async tasks are complete.
+
+#### Completion and Error Resolution
+
+* `Callback` (`done`) called
+ - Completion: called with null error
+ - Error: called with non-null error
+* `Stream` or `EventEmitter` returned
+ - Completion: [end-of-stream][end-of-stream] module
+ - Error: [domains][domains]
+ - __Note:__ Only actual streams are supported, not faux-streams; Therefore, modules like [`event-stream`][event-stream] are not supported.
+* `Child Process` returned
+ - Completion [end-of-stream][end-of-stream] module
+ - Error: [domains][domains]
+* `Promise` returned
+ - Completion: [onFulfilled][promise-onfulfilled] method called
+ - Error: [onRejected][promise-onrejected] method called
+* `Observable` (e.g. from [RxJS v5][rxjs5-observable] or [RxJS v4][rxjs5-observable]) returned
+ - Completion: [complete][rxjs5-observer-complete] method called
+ - Error: [error][rxjs5-observer-error] method called
+
+__Warning:__ Sync tasks are __not supported__ and your function will never complete if the one of the above strategies is not used to signal completion. However, thrown errors will be caught by the domain.
+
+#### `callback(error, result)`
+
+If an error doesn't occur in the execution of the `fn` function, the `callback` method will receive the results as its second argument. Note: Some streams don't received any results.
+
+If an error occurred in the execution of the `fn` function, The `callback` method will receive an error as its first argument.
+
+Errors can be caused by:
+
+* A thrown error
+* An error passed to a `done` callback
+* An `error` event emitted on a returned `Stream`, `EventEmitter` or `Child Process`
+* A rejection of a returned `Promise` - If the `Promise` is not rejected with a value, we generate a new `Error`
+* The `onError` handler being called on an `Observable`
+
+## License
+
+MIT
+
+[downloads-image]: https://img.shields.io/npm/dm/async-done.svg
+[npm-url]: https://www.npmjs.com/package/async-done
+[npm-image]: https://img.shields.io/npm/v/async-done.svg
+
+[azure-pipelines-url]: https://dev.azure.com/gulpjs/gulp/_build/latest?definitionId=6&branchName=master
+[azure-pipelines-image]: https://dev.azure.com/gulpjs/gulp/_apis/build/status/async-done?branchName=master
+
+[travis-url]: https://travis-ci.org/gulpjs/async-done
+[travis-image]: https://img.shields.io/travis/gulpjs/async-done.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/async-done
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/async-done.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/async-done
+[coveralls-image]: https://img.shields.io/coveralls/gulpjs/async-done/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
+
+[end-of-stream]: https://www.npmjs.com/package/end-of-stream
+[domains]: http://nodejs.org/api/domain.html
+[event-stream]: https://github.com/dominictarr/event-stream
+[promise-onfulfilled]: http://promisesaplus.com/#point-26
+[promise-onrejected]: http://promisesaplus.com/#point-30
+[rx4-observable]: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md
+[rxjs5-observable]: http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html
+[rxjs5-observer-complete]: http://reactivex.io/rxjs/class/es6/MiscJSDoc.js~ObserverDoc.html#instance-method-complete
+[rxjs5-observer-error]: http://reactivex.io/rxjs/class/es6/MiscJSDoc.js~ObserverDoc.html#instance-method-error
diff --git a/node_modules/async-done/index.d.ts b/node_modules/async-done/index.d.ts
new file mode 100644
index 0000000..2c4ab93
--- /dev/null
+++ b/node_modules/async-done/index.d.ts
@@ -0,0 +1,101 @@
+/**
+ * Notes about these type definitions:
+ *
+ * - Callbacks returning multiple completion values using multiple arguments are not supported by these types.
+ * Prefer to use Node's style by grouping your values in a single object or array.
+ * Support for this kind of callback is blocked by Microsoft/TypeScript#5453
+ *
+ * - For ease of use, `asyncDone` lets you pass callback functions with a result type `T` instead of `T | undefined`.
+ * This matches Node's types but can lead to unsound code being typechecked.
+ *
+ * The following code typechecks but fails at runtime:
+ * ```typescript
+ * async function getString(): Promise {
+ * return "Hello, World!";
+ * }
+ *
+ * async function evilGetString(): Promise {
+ * throw new Error("Hello, World!");
+ * }
+ *
+ * function cb(err: Error | null, result: string): void {
+ * // This is unsound because `result` is `undefined` when `err` is not `null`.
+ * console.log(result.toLowerCase());
+ * }
+ *
+ * asyncDone(getString, cb); // Prints `hello, world!`
+ * asyncDone(evilGetString, cb); // Runtime error: `TypeError: Cannot read property 'toLowerCase' of undefined`
+ * ```
+ *
+ * Enforcing stricter callbacks would require developers to use `result?: string` and assert the existence
+ * of the result either by checking it directly or using the `!` assertion operator after testing for errors.
+ * ```typescript
+ * function stricterCb1(err: Error | null, result?: string): void {
+ * if (err !== null) {
+ * console.error(err);
+ * return;
+ * }
+ * console.log(result!.toLowerCase());
+ * }
+ *
+ * function stricterCb2(err: Error | null, result?: string): void {
+ * if (result === undefined) {
+ * console.error("Undefined result. Error:);
+ * console.error(err);
+ * return;
+ * }
+ * console.log(result.toLowerCase());
+ * }
+ * ```
+ */
+import { ChildProcess } from "child_process";
+import { EventEmitter } from "events";
+import { Stream } from "stream";
+
+declare namespace asyncDone {
+
+ /**
+ * Represents a callback function used to signal the completion of a
+ * task without any result value.
+ */
+ type VoidCallback = (err: Error | null) => void;
+
+ /**
+ * Represents a callback function used to signal the completion of a
+ * task with a single result value.
+ */
+ interface Callback {
+ (err: null, result: T): void;
+
+ // Use `result?: T` or `result: undefined` to require the consumer to assert the existence of the result
+ // (even in case of success). See comment at the top of the file.
+ (err: Error, result?: any): void;
+ }
+
+ /**
+ * Minimal `Observable` interface compatible with `async-done`.
+ *
+ * @see https://github.com/ReactiveX/rxjs/blob/c3c56867eaf93f302ac7cd588034c7d8712f2834/src/internal/Observable.ts#L77
+ */
+ interface Observable {
+ subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): any;
+ }
+
+ /**
+ * Represents an async operation.
+ */
+ export type AsyncTask =
+ ((done: VoidCallback) => void)
+ | ((done: Callback) => void)
+ | (() => ChildProcess | EventEmitter | Observable | PromiseLike | Stream);
+}
+
+/**
+ * Takes a function to execute (`fn`) and a function to call on completion (`callback`).
+ *
+ * @param fn Function to execute.
+ * @param callback Function to call on completion.
+ */
+declare function asyncDone(fn: asyncDone.AsyncTask, callback: asyncDone.Callback): void;
+
+export = asyncDone;
diff --git a/node_modules/async-done/index.js b/node_modules/async-done/index.js
new file mode 100644
index 0000000..e5be989
--- /dev/null
+++ b/node_modules/async-done/index.js
@@ -0,0 +1,88 @@
+'use strict';
+
+var domain = require('domain');
+
+var eos = require('end-of-stream');
+var p = require('process-nextick-args');
+var once = require('once');
+var exhaust = require('stream-exhaust');
+
+var eosConfig = {
+ error: false,
+};
+
+function rethrowAsync(err) {
+ process.nextTick(rethrow);
+
+ function rethrow() {
+ throw err;
+ }
+}
+
+function tryCatch(fn, args) {
+ try {
+ return fn.apply(null, args);
+ } catch (err) {
+ rethrowAsync(err);
+ }
+}
+
+function asyncDone(fn, cb) {
+ cb = once(cb);
+
+ var d = domain.create();
+ d.once('error', onError);
+ var domainBoundFn = d.bind(fn);
+
+ function done() {
+ d.removeListener('error', onError);
+ d.exit();
+ return tryCatch(cb, arguments);
+ }
+
+ function onSuccess(result) {
+ done(null, result);
+ }
+
+ function onError(error) {
+ if (!error) {
+ error = new Error('Promise rejected without Error');
+ }
+ done(error);
+ }
+
+ function asyncRunner() {
+ var result = domainBoundFn(done);
+
+ function onNext(state) {
+ onNext.state = state;
+ }
+
+ function onCompleted() {
+ onSuccess(onNext.state);
+ }
+
+ if (result && typeof result.on === 'function') {
+ // Assume node stream
+ d.add(result);
+ eos(exhaust(result), eosConfig, done);
+ return;
+ }
+
+ if (result && typeof result.subscribe === 'function') {
+ // Assume RxJS observable
+ result.subscribe(onNext, onError, onCompleted);
+ return;
+ }
+
+ if (result && typeof result.then === 'function') {
+ // Assume promise
+ result.then(onSuccess, onError);
+ return;
+ }
+ }
+
+ p.nextTick(asyncRunner);
+}
+
+module.exports = asyncDone;
diff --git a/node_modules/async-done/package.json b/node_modules/async-done/package.json
new file mode 100644
index 0000000..774c733
--- /dev/null
+++ b/node_modules/async-done/package.json
@@ -0,0 +1,65 @@
+{
+ "name": "async-done",
+ "version": "1.3.2",
+ "description": "Allows libraries to handle various caller provided asynchronous functions uniformly. Maps promises, observables, child processes and streams, and callbacks to callback style.",
+ "author": "Gulp Team (https://gulpjs.com/)",
+ "contributors": [
+ "Blaine Bublitz ",
+ "Pawel Kozlowski ",
+ "Matthew Podwysocki ",
+ "Charles Samborski "
+ ],
+ "repository": "gulpjs/async-done",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "main": "index.js",
+ "types": "index.d.ts",
+ "files": [
+ "index.js",
+ "index.d.ts",
+ "LICENSE"
+ ],
+ "scripts": {
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "test": "nyc mocha --async-only",
+ "test-types": "tsc -p test/types",
+ "azure-pipelines": "nyc mocha --async-only --reporter xunit -O output=test.xunit",
+ "coveralls": "nyc report --reporter=text-lcov | coveralls"
+ },
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.2",
+ "process-nextick-args": "^2.0.0",
+ "stream-exhaust": "^1.0.1"
+ },
+ "devDependencies": {
+ "@types/node": "^9.3.0",
+ "coveralls": "github:phated/node-coveralls#2.x",
+ "eslint": "^2.13.1",
+ "eslint-config-gulp": "^3.0.1",
+ "expect": "^1.20.2",
+ "mocha": "^3.0.0",
+ "nyc": "^10.3.2",
+ "pumpify": "^1.3.6",
+ "rxjs": "^5.5.6",
+ "through2": "^2.0.0",
+ "typescript": "^2.6.2",
+ "when": "^3.7.3"
+ },
+ "keywords": [
+ "promises",
+ "callbacks",
+ "observables",
+ "streams",
+ "end",
+ "completion",
+ "complete",
+ "finish",
+ "done",
+ "async",
+ "error handling"
+ ]
+}
diff --git a/node_modules/async-each/README.md b/node_modules/async-each/README.md
new file mode 100644
index 0000000..6444d95
--- /dev/null
+++ b/node_modules/async-each/README.md
@@ -0,0 +1,52 @@
+# async-each
+
+No-bullshit, ultra-simple, 35-lines-of-code async parallel forEach function for JavaScript.
+
+We don't need junky 30K async libs. Really.
+
+For browsers and node.js.
+
+## Installation
+* Just include async-each before your scripts.
+* `npm install async-each` if you’re using node.js.
+
+## Usage
+
+* `each(array, iterator, callback);` — `Array`, `Function`, `(optional) Function`
+* `iterator(item, next)` receives current item and a callback that will mark the item as done. `next` callback receives optional `error, transformedItem` arguments.
+* `callback(error, transformedArray)` optionally receives first error and transformed result `Array`.
+
+```javascript
+var each = require('async-each');
+each(['a.js', 'b.js', 'c.js'], fs.readFile, function(error, contents) {
+ if (error) console.error(error);
+ console.log('Contents for a, b and c:', contents);
+});
+
+// Alternatively in browser:
+asyncEach(list, fn, callback);
+```
+
+## License
+
+The MIT License (MIT)
+
+Copyright (c) 2016 Paul Miller [(paulmillr.com)](http://paulmillr.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 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/node_modules/async-each/index.js b/node_modules/async-each/index.js
new file mode 100644
index 0000000..277217d
--- /dev/null
+++ b/node_modules/async-each/index.js
@@ -0,0 +1,38 @@
+// async-each MIT license (by Paul Miller from https://paulmillr.com).
+(function(globals) {
+ 'use strict';
+ var each = function(items, next, callback) {
+ if (!Array.isArray(items)) throw new TypeError('each() expects array as first argument');
+ if (typeof next !== 'function') throw new TypeError('each() expects function as second argument');
+ if (typeof callback !== 'function') callback = Function.prototype; // no-op
+
+ if (items.length === 0) return callback(undefined, items);
+
+ var transformed = new Array(items.length);
+ var count = 0;
+ var returned = false;
+
+ items.forEach(function(item, index) {
+ next(item, function(error, transformedItem) {
+ if (returned) return;
+ if (error) {
+ returned = true;
+ return callback(error);
+ }
+ transformed[index] = transformedItem;
+ count += 1;
+ if (count === items.length) return callback(undefined, transformed);
+ });
+ });
+ };
+
+ if (typeof define !== 'undefined' && define.amd) {
+ define([], function() {
+ return each;
+ }); // RequireJS
+ } else if (typeof module !== 'undefined' && module.exports) {
+ module.exports = each; // CommonJS
+ } else {
+ globals.asyncEach = each; //
+```
+
+## Usage
+
+Copy *src* to *dst* simply (and return *dst*) :
+
+```js
+var src = { a: 1, b: { b1: 'bbb' }, c: 'ccc' };
+var dst = { a: 2, b: { b1: 'xxx', b2: 'yyy' } };
+
+copyProps(src, dst);
+// => { a: 1, b: { b1: 'bbb', b2: 'yyy' }, c: 'ccc' }
+```
+
+Copy *src* to *dst* with property mapping (and return *dst*) :
+
+```js
+var src = { a: 1, b: { b1: 'bbb' }, c: 'ccc', d: 'ddd' };
+var dst = { f: { a: 2, b1: 'xxx', b2: 'yyy' }, e: 'zzz' };
+
+copyProps(src, dst, {
+ a: 'f.a',
+ 'b.b1': 'f.b1',
+ 'b.b2': 'f.b2',
+ 'c': 'f.c',
+});
+// => { f: { a: 1, b1: 'bbb', b2: 'yyy', c: 'ccc' }, e: 'zzz' }
+```
+
+Copy *src* to *dst* with convert function (and return *dst*) :
+
+```js
+var src = { a: 1, b: { b1: 'bbb' } };
+var dst = { a: 0 };
+
+copyProps(src, dst, function(srcInfo) {
+ if (srcInfo.keyChain === 'a') {
+ return srcInfo.value * 2;
+ }
+ if (srcInfo.keyChain === 'b.b1') {
+ return srcInfo.value.toUpperCase();
+ }
+});
+// => { a: 2, b: { b1: 'BBB' } }
+```
+
+Can use an array instead of a map as property mapping :
+
+```js
+var src = { a: 1, b: { c: 'CCC' }, d: { e: 'EEE' } };
+var dst = { a: 9, b: { c: 'xxx' }, d: { e: 'yyy' } };
+var fromto = [ 'b.c', 'd.e' ];
+copyProps(src, dst, fromto);
+// => { a: 9, b: { c: 'CCC' }, d: { e: 'EEE' } }
+```
+
+Can copy reversively (from *dst* to *src*) by reverse flag (and return *src*):
+
+```js
+var src = { a: 1, b: { b1: 'bbb' }, c: 'ccc' };
+var dst = { a: 2, b: { b1: 'xxx', b2: 'yyy' } };
+
+copyProps(src, dst, true);
+// => { a: 2, b: { b1: 'xxx', b2: 'yyy' }, c: 'ccc' }
+```
+
+```js
+var src = { a: 1, b: { b1: 'bbb' }, c: 'ccc', d: 'ddd' };
+var dst = { f: { a: 2, b1: 'xxx', b2: 'yyy' }, e: 'zzz' };
+
+copyProps(src, dst, {
+ a: 'f.a',
+ 'b.b2': 'f.b2',
+ 'c': 'f.c',
+}, true);
+// => { a: 2, b: { b1: 'bbb', b2: 'yyy' }, c: 'ccc', d: 'ddd' }
+```
+
+If a value of source property is undefined (when not using converter), or a result of converter is undefined (when using converter), the value is not copied.
+
+```js
+var src = { a: 'A', b: undefined, c: null, d: 1 };
+var dst = { a: 'a', b: 'b', c: 'c' };
+
+copyProps(src, dst, function(srcInfo) {
+ if (srcInfo.keyChain === 'd') {
+ return undefined;
+ } else {
+ return srcInfo.value;
+ }
+});
+// => { a: 'A', b: 'b', c: null }
+```
+
+You can operate the parent node object directly in converter.
+
+```js
+var src = { a: 1, b: 2 };
+var dst = {};
+
+copyProps(src, dst, function(srcInfo, dstInfo) {
+ Object.defineProperty(dstInfo.parent, dstInfo.key, {
+ writable: false,
+ enumerable: true,
+ configurable: false,
+ value: srcInfo.value * 2
+ })
+}); // => { a: 2, b: 4 }
+
+dst // => { a: 2, b: 4 }
+dst.a = 9
+dst // -> { a: 2, b: 4 }
+```
+
+## API
+
+### copyProps(src, dst [, fromto] [, converter] [, reverse]) => object
+
+Copy properties of *src* to *dst* deeply.
+If *fromto* is given, it is able to copy between different properties.
+If *converter* is given, it is able to convert the terminal values.
+
+#### Parameters:
+
+| Parameter | Type | Description |
+|:------------|:------:|:-------------------------------------------------|
+| *src* | object | A source object of copy. |
+| *dst* | object | A destinate object of copy. |
+| *fromto* | object | array | An object mapping properties between *src* and *dst*. (Optional) |
+| *converter* |function| A function to convert terminal values in *src*. (Optional) |
+| *reverse* |boolean | True, if copying reversively from dst to src and returns src object. `fromto` is also reversively used from value to key. This default value is `false`. (Optional) |
+
+#### Returns:
+
+*dst* object after copying.
+
+**Type:** object
+
+* **Format of fromto **
+
+ *fromto* is a non-nested key-value object. And the *key*s are property key chains of *src* and the *value*s are property key chains of *dst*.
+ The key chain is a string which is concatenated property keys on each level with dots, like `'aaa.bbb.ccc'`.
+
+ The following example copys the value of `src.aaa.bbb.ccc` to `dst.xxx.yyy`.
+
+ ```js
+ copyProps(src, dst, {
+ 'aaa.bbb.ccc' : 'xxx.yyy'
+ })
+ ```
+
+ *fromto* can be an array. In that case, the array works as a map which has pairs of same key and value.
+
+* **API of converter **
+
+ **converter(srcInfo, dstInfo) : Any **
+
+ *converter* is a function to convert terminal values of propeerties of *src*.
+
+ **Parameters:**
+
+ | Parameter | Type | Description |
+ |:------------|:------:|:---------------------------------------------|
+ | *srcInfo* | object | An object which has informations about the current node of *src*. |
+ | *dstInfo* | object | An object which has informations about the current node of *dst*. |
+
+ **Return:**
+
+ The converted value to be set as a destination property value. If this value is undefined, the destination property is not set to the destination node object.
+
+ **Type:** *Any*
+
+ * **Properties of srcInfo and dstInfo **
+
+ *srcInfo* and *dstInfo* has same properties, as follows:
+
+ | Property | Type | Description |
+ |:-----------|:------:|:------------------------------------------|
+ | *value* | *Any* | The value of the current node. |
+ | *key* | string | The key name of the current node. |
+ | *keyChain* | string | The full key of the current node concatenated with dot. |
+ | *depth* | number | The depth of the current node. |
+ | *parent* | object | The parent node of the current node. |
+
+
+## License
+
+Copyright (C) 2016-2021 Gulp Team.
+
+This program is free software under [MIT][mit-url] License.
+See the file LICENSE in this distribution for more details.
+
+[repo-url]: https://github.com/gulpjs/copy-props/
+[npm-img]: https://img.shields.io/badge/npm-v2.0.5-blue.svg
+[npm-url]: https://www.npmjs.org/package/copy-props/
+[mit-img]: https://img.shields.io/badge/license-MIT-green.svg
+[mit-url]: https://opensource.org/licenses.MIT
+[travis-img]: https://travis-ci.org/gulpjs/copy-props.svg?branch=master
+[travis-url]: https://travis-ci.org/gulpjs/copy-props
+[appveyor-img]: https://ci.appveyor.com/api/projects/status/github/gulpjs/copy-props?branch=master&svg=true
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/copy-props
+[coverage-img]: https://coveralls.io/repos/github/gulpjs/copy-props/badge.svg?branch=master
+[coverage-url]: https://coveralls.io/github/gulpjs/copy-props?branch=master
diff --git a/node_modules/copy-props/index.js b/node_modules/copy-props/index.js
new file mode 100644
index 0000000..994807e
--- /dev/null
+++ b/node_modules/copy-props/index.js
@@ -0,0 +1,234 @@
+'use strict';
+
+var eachProps = require('each-props');
+var isPlainObject = require('is-plain-object').isPlainObject;
+
+module.exports = function(src, dst, fromto, converter, reverse) {
+
+ if (!isObject(src)) {
+ src = {};
+ }
+
+ if (!isObject(dst)) {
+ dst = {};
+ }
+
+ if (isPlainObject(fromto)) {
+ fromto = onlyValueIsString(fromto);
+ } else if (Array.isArray(fromto)) {
+ fromto = arrayToObject(fromto);
+ } else if (typeof fromto === 'boolean') {
+ reverse = fromto;
+ converter = noop;
+ fromto = null;
+ } else if (typeof fromto === 'function') {
+ reverse = converter;
+ converter = fromto;
+ fromto = null;
+ } else {
+ fromto = null;
+ }
+
+ if (typeof converter !== 'function') {
+ if (typeof converter === 'boolean') {
+ reverse = converter;
+ converter = noop;
+ } else {
+ converter = noop;
+ }
+ }
+
+ if (typeof reverse !== 'boolean') {
+ reverse = false;
+ }
+
+ if (reverse) {
+ var tmp = src;
+ src = dst;
+ dst = tmp;
+
+ if (fromto) {
+ fromto = invert(fromto);
+ }
+ }
+
+ var opts = {
+ dest: dst,
+ fromto: fromto,
+ convert: converter,
+ };
+
+ if (fromto) {
+ eachProps(src, copyWithFromto, opts);
+ setParentEmptyObject(dst, fromto);
+ } else {
+ eachProps(src, copyWithoutFromto, opts);
+ }
+
+ return dst;
+};
+
+function copyWithFromto(value, keyChain, nodeInfo) {
+ if (isPlainObject(value)) {
+ return;
+ }
+
+ var dstKeyChains = nodeInfo.fromto[keyChain];
+ if (!dstKeyChains) {
+ return;
+ }
+ delete nodeInfo.fromto[keyChain];
+
+ if (!Array.isArray(dstKeyChains)) {
+ dstKeyChains = [dstKeyChains];
+ }
+
+ var srcInfo = {
+ keyChain: keyChain,
+ value: value,
+ key: nodeInfo.name,
+ depth: nodeInfo.depth,
+ parent: nodeInfo.parent,
+ };
+
+ for (var i = 0, n = dstKeyChains.length; i < n; i++) {
+ setDeep(nodeInfo.dest, dstKeyChains[i], function(parent, key, depth) {
+ var dstInfo = {
+ keyChain: dstKeyChains[i],
+ value: parent[key],
+ key: key,
+ depth: depth,
+ parent: parent,
+ };
+
+ return nodeInfo.convert(srcInfo, dstInfo);
+ });
+ }
+}
+
+function copyWithoutFromto(value, keyChain, nodeInfo) {
+ if (isPlainObject(value)) {
+ for (var k in value) {
+ return;
+ }
+ setDeep(nodeInfo.dest, keyChain, newObject);
+ return;
+ }
+
+ var srcInfo = {
+ keyChain: keyChain,
+ value: value,
+ key: nodeInfo.name,
+ depth: nodeInfo.depth,
+ parent: nodeInfo.parent,
+ };
+
+ setDeep(nodeInfo.dest, keyChain, function(parent, key, depth) {
+ var dstInfo = {
+ keyChain: keyChain,
+ value: parent[key],
+ key: key,
+ depth: depth,
+ parent: parent,
+ };
+
+ return nodeInfo.convert(srcInfo, dstInfo);
+ });
+}
+
+function newObject() {
+ return {};
+}
+
+function noop(srcInfo) {
+ return srcInfo.value;
+}
+
+function onlyValueIsString(obj) {
+ var newObj = {};
+ for (var key in obj) {
+ var val = obj[key];
+ if (typeof val === 'string') {
+ newObj[key] = val;
+ }
+ }
+ return newObj;
+}
+
+function arrayToObject(arr) {
+ var obj = {};
+ for (var i = 0, n = arr.length; i < n; i++) {
+ var elm = arr[i];
+ if (typeof elm === 'string') {
+ obj[elm] = elm;
+ }
+ }
+ return obj;
+}
+
+function invert(fromto) {
+ var inv = {};
+ for (var key in fromto) {
+ var val = fromto[key];
+ if (!inv[val]) {
+ inv[val] = [];
+ }
+ inv[val].push(key);
+ }
+ return inv;
+}
+
+function setDeep(obj, keyChain, valueCreator) {
+ _setDeep(obj, keyChain.split('.'), 1, valueCreator);
+}
+
+function _setDeep(obj, keyElems, depth, valueCreator) {
+ var key = keyElems.shift();
+ if (isPossibilityOfPrototypePollution(key)) {
+ return;
+ }
+
+ if (!keyElems.length) {
+ var value = valueCreator(obj, key, depth);
+ if (value === undefined) {
+ return;
+ }
+ if (isPlainObject(value)) { // value is always an empty object.
+ if (isPlainObject(obj[key])) {
+ return;
+ }
+ }
+ obj[key] = value;
+ return;
+ }
+
+ if (!isPlainObject(obj[key])) {
+ obj[key] = {};
+ }
+ _setDeep(obj[key], keyElems, depth + 1, valueCreator);
+}
+
+function setParentEmptyObject(obj, fromto) {
+ for (var srcKeyChain in fromto) {
+ var dstKeyChains = fromto[srcKeyChain];
+ if (!Array.isArray(dstKeyChains)) {
+ dstKeyChains = [dstKeyChains];
+ }
+
+ for (var i = 0, n = dstKeyChains.length; i < n; i++) {
+ setDeep(obj, dstKeyChains[i], newUndefined);
+ }
+ }
+}
+
+function newUndefined() {
+ return undefined;
+}
+
+function isObject(v) {
+ return Object.prototype.toString.call(v) === '[object Object]';
+}
+
+function isPossibilityOfPrototypePollution(key) {
+ return (key === '__proto__' || key === 'constructor');
+}
diff --git a/node_modules/copy-props/package.json b/node_modules/copy-props/package.json
new file mode 100644
index 0000000..6b2a51e
--- /dev/null
+++ b/node_modules/copy-props/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "copy-props",
+ "version": "2.0.5",
+ "description": "Copy properties deeply between two objects.",
+ "main": "index.js",
+ "files": [
+ "index.js"
+ ],
+ "scripts": {
+ "lint": "eslint .",
+ "test": "mocha",
+ "coverage": "nyc --reporter=lcov --reporter=text-summary npm test",
+ "coveralls": "nyc --reporter=text-lcov npm test | coveralls",
+ "web:build": "browserify index.js --standalone copyProps -o web/copy-props.js && cd web && uglifyjs copy-props.js --compress --mangle -o copy-props.min.js --source-map url=copy-props.min.js.map",
+ "chrome:install": "npm i --no-save mocha-chrome",
+ "chrome:test": "mocha-chrome test/web/browser-test.html",
+ "build": "npm run lint && npm run coverage && npm run web:build && node test/web/make.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/gulpjs/copy-props.git"
+ },
+ "keywords": [
+ "object",
+ "property",
+ "copy",
+ "deep",
+ "map",
+ "convert"
+ ],
+ "author": "Gulp Team (https://gulpjs.com/)",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/gulpjs/copy-props/issues"
+ },
+ "homepage": "https://github.com/gulpjs/copy-props#readme",
+ "dependencies": {
+ "each-props": "^1.3.2",
+ "is-plain-object": "^5.0.0"
+ },
+ "devDependencies": {
+ "browserify": "^16.5.2",
+ "chai": "^3.5.0",
+ "coveralls": "^3.1.0",
+ "eslint": "^7.9.0",
+ "eslint-config-gulp": "^5.0.1",
+ "mocha": "^3.5.3",
+ "nyc": "^15.1.0",
+ "uglify-js": "^3.10.4"
+ }
+}
diff --git a/node_modules/core-util-is/LICENSE b/node_modules/core-util-is/LICENSE
new file mode 100644
index 0000000..d8d7f94
--- /dev/null
+++ b/node_modules/core-util-is/LICENSE
@@ -0,0 +1,19 @@
+Copyright Node.js contributors. All rights reserved.
+
+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/node_modules/core-util-is/README.md b/node_modules/core-util-is/README.md
new file mode 100644
index 0000000..5a76b41
--- /dev/null
+++ b/node_modules/core-util-is/README.md
@@ -0,0 +1,3 @@
+# core-util-is
+
+The `util.is*` functions introduced in Node v0.12.
diff --git a/node_modules/core-util-is/lib/util.js b/node_modules/core-util-is/lib/util.js
new file mode 100644
index 0000000..6e5a20d
--- /dev/null
+++ b/node_modules/core-util-is/lib/util.js
@@ -0,0 +1,107 @@
+// 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.
+
+// NOTE: These type checking functions intentionally don't use `instanceof`
+// because it is fragile and can be easily faked with `Object.create()`.
+
+function isArray(arg) {
+ if (Array.isArray) {
+ return Array.isArray(arg);
+ }
+ return objectToString(arg) === '[object Array]';
+}
+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 objectToString(re) === '[object RegExp]';
+}
+exports.isRegExp = isRegExp;
+
+function isObject(arg) {
+ return typeof arg === 'object' && arg !== null;
+}
+exports.isObject = isObject;
+
+function isDate(d) {
+ return objectToString(d) === '[object Date]';
+}
+exports.isDate = isDate;
+
+function isError(e) {
+ return (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('buffer').Buffer.isBuffer;
+
+function objectToString(o) {
+ return Object.prototype.toString.call(o);
+}
diff --git a/node_modules/core-util-is/package.json b/node_modules/core-util-is/package.json
new file mode 100644
index 0000000..b0c51f5
--- /dev/null
+++ b/node_modules/core-util-is/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "core-util-is",
+ "version": "1.0.3",
+ "description": "The `util.is*` functions introduced in Node v0.12.",
+ "main": "lib/util.js",
+ "files": [
+ "lib"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/core-util-is"
+ },
+ "keywords": [
+ "util",
+ "isBuffer",
+ "isArray",
+ "isNumber",
+ "isString",
+ "isRegExp",
+ "isThis",
+ "isThat",
+ "polyfill"
+ ],
+ "author": "Isaac Z. Schlueter (http://blog.izs.me/)",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/isaacs/core-util-is/issues"
+ },
+ "scripts": {
+ "test": "tap test.js",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "prepublishOnly": "git push origin --follow-tags"
+ },
+ "devDependencies": {
+ "tap": "^15.0.9"
+ }
+}
diff --git a/node_modules/d/.editorconfig b/node_modules/d/.editorconfig
new file mode 100755
index 0000000..cbfa577
--- /dev/null
+++ b/node_modules/d/.editorconfig
@@ -0,0 +1,15 @@
+# EditorConfig is awesome: http://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+indent_style = tab
+trim_trailing_whitespace = true
+
+[{*.md,*.yml}]
+indent_size = 2
+indent_style = space
diff --git a/node_modules/d/.github/FUNDING.yml b/node_modules/d/.github/FUNDING.yml
new file mode 100644
index 0000000..bd80ae6
--- /dev/null
+++ b/node_modules/d/.github/FUNDING.yml
@@ -0,0 +1 @@
+tidelift: "npm/d"
diff --git a/node_modules/d/CHANGELOG.md b/node_modules/d/CHANGELOG.md
new file mode 100644
index 0000000..d30cc82
--- /dev/null
+++ b/node_modules/d/CHANGELOG.md
@@ -0,0 +1,9 @@
+# Changelog
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+### [1.0.1](https://github.com/medikoo/d/compare/v0.1.1...v1.0.1) (2019-06-14)
+
+## Changelog for previous versions
+
+See `CHANGES` file
diff --git a/node_modules/d/CHANGES b/node_modules/d/CHANGES
new file mode 100644
index 0000000..73234d5
--- /dev/null
+++ b/node_modules/d/CHANGES
@@ -0,0 +1,17 @@
+For recent changelog see CHANGELOG.md
+
+-----
+
+v1.0.0 -- 2015.12.04
+- autoBind changes:
+ - replace `bindTo` argument with options and `resolveContext` option
+ - Add support `overwriteDefinition`
+- Introduce IE11 bug workaround in `lazy` handler
+
+v0.1.1 -- 2014.04.24
+- Add `autoBind` and `lazy` utilities
+- Allow to pass other options to be merged onto created descriptor.
+ Useful when used with other custom utilties
+
+v0.1.0 -- 2013.06.20
+Initial (derived from es5-ext project)
diff --git a/node_modules/d/LICENSE b/node_modules/d/LICENSE
new file mode 100644
index 0000000..44745e2
--- /dev/null
+++ b/node_modules/d/LICENSE
@@ -0,0 +1,15 @@
+ISC License
+
+Copyright (c) 2013-2019, Mariusz Nowak, @medikoo, medikoo.com
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/d/README.md b/node_modules/d/README.md
new file mode 100644
index 0000000..95097d4
--- /dev/null
+++ b/node_modules/d/README.md
@@ -0,0 +1,134 @@
+# D
+
+## Property descriptor factory
+
+_Originally derived from [es5-ext](https://github.com/medikoo/es5-ext) package._
+
+Defining properties with descriptors is very verbose:
+
+```javascript
+var Account = function () {};
+Object.defineProperties(Account.prototype, {
+ deposit: {
+ value: function () {
+ /* ... */
+ },
+ configurable: true,
+ enumerable: false,
+ writable: true
+ },
+ withdraw: {
+ value: function () {
+ /* ... */
+ },
+ configurable: true,
+ enumerable: false,
+ writable: true
+ },
+ balance: {
+ get: function () {
+ /* ... */
+ },
+ configurable: true,
+ enumerable: false
+ }
+});
+```
+
+D cuts that to:
+
+```javascript
+var d = require("d");
+
+var Account = function () {};
+Object.defineProperties(Account.prototype, {
+ deposit: d(function () {
+ /* ... */
+ }),
+ withdraw: d(function () {
+ /* ... */
+ }),
+ balance: d.gs(function () {
+ /* ... */
+ })
+});
+```
+
+By default, created descriptor follow characteristics of native ES5 properties, and defines values as:
+
+```javascript
+{ configurable: true, enumerable: false, writable: true }
+```
+
+You can overwrite it by preceding _value_ argument with instruction:
+
+```javascript
+d("c", value); // { configurable: true, enumerable: false, writable: false }
+d("ce", value); // { configurable: true, enumerable: true, writable: false }
+d("e", value); // { configurable: false, enumerable: true, writable: false }
+
+// Same way for get/set:
+d.gs("e", value); // { configurable: false, enumerable: true }
+```
+
+### Installation
+
+ $ npm install d
+
+To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/)
+
+### Other utilities
+
+#### autoBind(obj, props) _(d/auto-bind)_
+
+Define methods which will be automatically bound to its instances
+
+```javascript
+var d = require('d');
+var autoBind = require('d/auto-bind');
+
+var Foo = function () { this._count = 0; };
+Object.defineProperties(Foo.prototype, autoBind({
+ increment: d(function () { ++this._count; });
+}));
+
+var foo = new Foo();
+
+// Increment foo counter on each domEl click
+domEl.addEventListener('click', foo.increment, false);
+```
+
+#### lazy(obj, props) _(d/lazy)_
+
+Define lazy properties, which will be resolved on first access
+
+```javascript
+var d = require("d");
+var lazy = require("d/lazy");
+
+var Foo = function () {};
+Object.defineProperties(Foo.prototype, lazy({ items: d(function () { return []; }) }));
+
+var foo = new Foo();
+foo.items.push(1, 2); // foo.items array created and defined directly on foo
+```
+
+## Tests [![Build Status](https://travis-ci.org/medikoo/d.png)](https://travis-ci.org/medikoo/d)
+
+ $ npm test
+
+## Security contact information
+
+To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.
+
+---
+
+
diff --git a/node_modules/d/auto-bind.js b/node_modules/d/auto-bind.js
new file mode 100644
index 0000000..a0037fa
--- /dev/null
+++ b/node_modules/d/auto-bind.js
@@ -0,0 +1,33 @@
+"use strict";
+
+var isValue = require("type/value/is")
+ , ensureValue = require("type/value/ensure")
+ , ensurePlainFunction = require("type/plain-function/ensure")
+ , copy = require("es5-ext/object/copy")
+ , normalizeOptions = require("es5-ext/object/normalize-options")
+ , map = require("es5-ext/object/map");
+
+var bind = Function.prototype.bind
+ , defineProperty = Object.defineProperty
+ , hasOwnProperty = Object.prototype.hasOwnProperty
+ , define;
+
+define = function (name, desc, options) {
+ var value = ensureValue(desc) && ensurePlainFunction(desc.value), dgs;
+ dgs = copy(desc);
+ delete dgs.writable;
+ delete dgs.value;
+ dgs.get = function () {
+ if (!options.overwriteDefinition && hasOwnProperty.call(this, name)) return value;
+ desc.value = bind.call(value, options.resolveContext ? options.resolveContext(this) : this);
+ defineProperty(this, name, desc);
+ return this[name];
+ };
+ return dgs;
+};
+
+module.exports = function (props/*, options*/) {
+ var options = normalizeOptions(arguments[1]);
+ if (isValue(options.resolveContext)) ensurePlainFunction(options.resolveContext);
+ return map(props, function (desc, name) { return define(name, desc, options); });
+};
diff --git a/node_modules/d/index.js b/node_modules/d/index.js
new file mode 100644
index 0000000..b05448b
--- /dev/null
+++ b/node_modules/d/index.js
@@ -0,0 +1,62 @@
+"use strict";
+
+var isValue = require("type/value/is")
+ , isPlainFunction = require("type/plain-function/is")
+ , assign = require("es5-ext/object/assign")
+ , normalizeOpts = require("es5-ext/object/normalize-options")
+ , contains = require("es5-ext/string/#/contains");
+
+var d = (module.exports = function (dscr, value/*, options*/) {
+ var c, e, w, options, desc;
+ if (arguments.length < 2 || typeof dscr !== "string") {
+ options = value;
+ value = dscr;
+ dscr = null;
+ } else {
+ options = arguments[2];
+ }
+ if (isValue(dscr)) {
+ c = contains.call(dscr, "c");
+ e = contains.call(dscr, "e");
+ w = contains.call(dscr, "w");
+ } else {
+ c = w = true;
+ e = false;
+ }
+
+ desc = { value: value, configurable: c, enumerable: e, writable: w };
+ return !options ? desc : assign(normalizeOpts(options), desc);
+});
+
+d.gs = function (dscr, get, set/*, options*/) {
+ var c, e, options, desc;
+ if (typeof dscr !== "string") {
+ options = set;
+ set = get;
+ get = dscr;
+ dscr = null;
+ } else {
+ options = arguments[3];
+ }
+ if (!isValue(get)) {
+ get = undefined;
+ } else if (!isPlainFunction(get)) {
+ options = get;
+ get = set = undefined;
+ } else if (!isValue(set)) {
+ set = undefined;
+ } else if (!isPlainFunction(set)) {
+ options = set;
+ set = undefined;
+ }
+ if (isValue(dscr)) {
+ c = contains.call(dscr, "c");
+ e = contains.call(dscr, "e");
+ } else {
+ c = true;
+ e = false;
+ }
+
+ desc = { get: get, set: set, configurable: c, enumerable: e };
+ return !options ? desc : assign(normalizeOpts(options), desc);
+};
diff --git a/node_modules/d/lazy.js b/node_modules/d/lazy.js
new file mode 100644
index 0000000..bae0d6a
--- /dev/null
+++ b/node_modules/d/lazy.js
@@ -0,0 +1,115 @@
+"use strict";
+
+var isPlainFunction = require("type/plain-function/is")
+ , ensureValue = require("type/value/ensure")
+ , isValue = require("type/value/is")
+ , map = require("es5-ext/object/map")
+ , contains = require("es5-ext/string/#/contains");
+
+var call = Function.prototype.call
+ , defineProperty = Object.defineProperty
+ , getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor
+ , getPrototypeOf = Object.getPrototypeOf
+ , hasOwnProperty = Object.prototype.hasOwnProperty
+ , cacheDesc = { configurable: false, enumerable: false, writable: false, value: null }
+ , define;
+
+define = function (name, options) {
+ var value, dgs, cacheName, desc, writable = false, resolvable, flat;
+ options = Object(ensureValue(options));
+ cacheName = options.cacheName;
+ flat = options.flat;
+ if (!isValue(cacheName)) cacheName = name;
+ delete options.cacheName;
+ value = options.value;
+ resolvable = isPlainFunction(value);
+ delete options.value;
+ dgs = { configurable: Boolean(options.configurable), enumerable: Boolean(options.enumerable) };
+ if (name !== cacheName) {
+ dgs.get = function () {
+ if (hasOwnProperty.call(this, cacheName)) return this[cacheName];
+ cacheDesc.value = resolvable ? call.call(value, this, options) : value;
+ cacheDesc.writable = writable;
+ defineProperty(this, cacheName, cacheDesc);
+ cacheDesc.value = null;
+ if (desc) defineProperty(this, name, desc);
+ return this[cacheName];
+ };
+ } else if (!flat) {
+ dgs.get = function self() {
+ var ownDesc;
+ if (hasOwnProperty.call(this, name)) {
+ ownDesc = getOwnPropertyDescriptor(this, name);
+ // It happens in Safari, that getter is still called after property
+ // was defined with a value, following workarounds that
+ // While in IE11 it may happen that here ownDesc is undefined (go figure)
+ if (ownDesc) {
+ if (ownDesc.hasOwnProperty("value")) return ownDesc.value;
+ if (typeof ownDesc.get === "function" && ownDesc.get !== self) {
+ return ownDesc.get.call(this);
+ }
+ return value;
+ }
+ }
+ desc.value = resolvable ? call.call(value, this, options) : value;
+ defineProperty(this, name, desc);
+ desc.value = null;
+ return this[name];
+ };
+ } else {
+ dgs.get = function self() {
+ var base = this, ownDesc;
+ if (hasOwnProperty.call(this, name)) {
+ // It happens in Safari, that getter is still called after property
+ // was defined with a value, following workarounds that
+ ownDesc = getOwnPropertyDescriptor(this, name);
+ if (ownDesc.hasOwnProperty("value")) return ownDesc.value;
+ if (typeof ownDesc.get === "function" && ownDesc.get !== self) {
+ return ownDesc.get.call(this);
+ }
+ }
+ while (!hasOwnProperty.call(base, name)) base = getPrototypeOf(base);
+ desc.value = resolvable ? call.call(value, base, options) : value;
+ defineProperty(base, name, desc);
+ desc.value = null;
+ return base[name];
+ };
+ }
+ dgs.set = function (value) {
+ if (hasOwnProperty.call(this, name)) {
+ throw new TypeError("Cannot assign to lazy defined '" + name + "' property of " + this);
+ }
+ dgs.get.call(this);
+ this[cacheName] = value;
+ };
+ if (options.desc) {
+ desc = {
+ configurable: contains.call(options.desc, "c"),
+ enumerable: contains.call(options.desc, "e")
+ };
+ if (cacheName === name) {
+ desc.writable = contains.call(options.desc, "w");
+ desc.value = null;
+ } else {
+ writable = contains.call(options.desc, "w");
+ desc.get = dgs.get;
+ desc.set = dgs.set;
+ }
+ delete options.desc;
+ } else if (cacheName === name) {
+ desc = {
+ configurable: Boolean(options.configurable),
+ enumerable: Boolean(options.enumerable),
+ writable: Boolean(options.writable),
+ value: null
+ };
+ }
+ delete options.configurable;
+ delete options.enumerable;
+ delete options.writable;
+ return dgs;
+};
+
+module.exports = function (props) {
+ return map(props, function (desc, name) { return define(name, desc); });
+};
diff --git a/node_modules/d/package.json b/node_modules/d/package.json
new file mode 100644
index 0000000..e0370df
--- /dev/null
+++ b/node_modules/d/package.json
@@ -0,0 +1,72 @@
+{
+ "name": "d",
+ "version": "1.0.1",
+ "description": "Property descriptor factory",
+ "author": "Mariusz Nowak (http://www.medikoo.com/)",
+ "keywords": [
+ "descriptor",
+ "es",
+ "ecmascript",
+ "ecma",
+ "property",
+ "descriptors",
+ "meta",
+ "properties"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/medikoo/d.git"
+ },
+ "dependencies": {
+ "es5-ext": "^0.10.50",
+ "type": "^1.0.1"
+ },
+ "devDependencies": {
+ "eslint": "^5.16.0",
+ "eslint-config-medikoo": "^2.3.0",
+ "git-list-updated": "^1.1.2",
+ "husky": "^2.4.1",
+ "lint-staged": "^8.2.1",
+ "prettier-elastic": "^1.18.2",
+ "tad": "^2.0.1"
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "lint-staged": {
+ "*.js": [
+ "eslint"
+ ],
+ "*.{css,html,js,json,md,yaml,yml}": [
+ "prettier -c"
+ ]
+ },
+ "eslintConfig": {
+ "extends": "medikoo/es5",
+ "root": true
+ },
+ "prettier": {
+ "printWidth": 100,
+ "tabWidth": 4,
+ "overrides": [
+ {
+ "files": [
+ "*.md"
+ ],
+ "options": {
+ "tabWidth": 2
+ }
+ }
+ ]
+ },
+ "scripts": {
+ "lint": "eslint --ignore-path=.gitignore .",
+ "lint-updated": "pipe-git-updated --ext=js -- eslint --ignore-pattern '!*'",
+ "prettier-check-updated": "pipe-git-updated --ext=css --ext=html --ext=js --ext=json --ext=md --ext=yaml --ext=yml -- prettier -c",
+ "prettify": "prettier --write --ignore-path .gitignore '**/*.{css,html,js,json,md,yaml,yml}'",
+ "test": "node node_modules/tad/bin/tad"
+ },
+ "license": "ISC"
+}
diff --git a/node_modules/d/test/auto-bind.js b/node_modules/d/test/auto-bind.js
new file mode 100644
index 0000000..993308e
--- /dev/null
+++ b/node_modules/d/test/auto-bind.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var d = require("../");
+
+module.exports = function (t, a) {
+ var o = Object.defineProperties(
+ {}, t({ bar: d(function () { return this === o; }), bar2: d(function () { return this; }) })
+ );
+
+ a.deep([o.bar(), o.bar2()], [true, o]);
+};
diff --git a/node_modules/d/test/index.js b/node_modules/d/test/index.js
new file mode 100644
index 0000000..43e61a3
--- /dev/null
+++ b/node_modules/d/test/index.js
@@ -0,0 +1,209 @@
+"use strict";
+
+var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
+
+module.exports = function (t, a) {
+ var o, c, cg, cs, ce, ceg, ces, cew, cw, e, eg, es, ew, v, vg, vs, w, df, dfg, dfs;
+
+ o = Object.create(Object.prototype, {
+ c: t("c", (c = {})),
+ cgs: t.gs("c", (cg = function () {}), (cs = function () {})),
+ ce: t("ce", (ce = {})),
+ cegs: t.gs("ce", (ceg = function () {}), (ces = function () {})),
+ cew: t("cew", (cew = {})),
+ cw: t("cw", (cw = {})),
+ e: t("e", (e = {})),
+ egs: t.gs("e", (eg = function () {}), (es = function () {})),
+ ew: t("ew", (ew = {})),
+ v: t("", (v = {})),
+ vgs: t.gs("", (vg = function () {}), (vs = function () {})),
+ w: t("w", (w = {})),
+
+ df: t((df = {})),
+ dfgs: t.gs((dfg = function () {}), (dfs = function () {}))
+ });
+
+ return {
+ c: function (a) {
+ var d = getOwnPropertyDescriptor(o, "c");
+ a(d.value, c, "Value");
+ a(d.get, undefined, "Get");
+ a(d.set, undefined, "Set");
+ a(d.configurable, true, "Configurable");
+ a(d.enumerable, false, "Enumerable");
+ a(d.writable, false, "Writable");
+
+ d = getOwnPropertyDescriptor(o, "cgs");
+ a(d.value, undefined, "GS Value");
+ a(d.get, cg, "GS Get");
+ a(d.set, cs, "GS Set");
+ a(d.configurable, true, "GS Configurable");
+ a(d.enumerable, false, "GS Enumerable");
+ a(d.writable, undefined, "GS Writable");
+ },
+ ce: function (a) {
+ var d = getOwnPropertyDescriptor(o, "ce");
+ a(d.value, ce, "Value");
+ a(d.get, undefined, "Get");
+ a(d.set, undefined, "Set");
+ a(d.configurable, true, "Configurable");
+ a(d.enumerable, true, "Enumerable");
+ a(d.writable, false, "Writable");
+
+ d = getOwnPropertyDescriptor(o, "cegs");
+ a(d.value, undefined, "GS Value");
+ a(d.get, ceg, "GS Get");
+ a(d.set, ces, "GS Set");
+ a(d.configurable, true, "GS Configurable");
+ a(d.enumerable, true, "GS Enumerable");
+ a(d.writable, undefined, "GS Writable");
+ },
+ cew: function (a) {
+ var d = getOwnPropertyDescriptor(o, "cew");
+ a(d.value, cew, "Value");
+ a(d.get, undefined, "Get");
+ a(d.set, undefined, "Set");
+ a(d.configurable, true, "Configurable");
+ a(d.enumerable, true, "Enumerable");
+ a(d.writable, true, "Writable");
+ },
+ cw: function (a) {
+ var d = getOwnPropertyDescriptor(o, "cw");
+ a(d.value, cw, "Value");
+ a(d.get, undefined, "Get");
+ a(d.set, undefined, "Set");
+ a(d.configurable, true, "Configurable");
+ a(d.enumerable, false, "Enumerable");
+ a(d.writable, true, "Writable");
+ },
+ e: function (a) {
+ var d = getOwnPropertyDescriptor(o, "e");
+ a(d.value, e, "Value");
+ a(d.get, undefined, "Get");
+ a(d.set, undefined, "Set");
+ a(d.configurable, false, "Configurable");
+ a(d.enumerable, true, "Enumerable");
+ a(d.writable, false, "Writable");
+
+ d = getOwnPropertyDescriptor(o, "egs");
+ a(d.value, undefined, "GS Value");
+ a(d.get, eg, "GS Get");
+ a(d.set, es, "GS Set");
+ a(d.configurable, false, "GS Configurable");
+ a(d.enumerable, true, "GS Enumerable");
+ a(d.writable, undefined, "GS Writable");
+ },
+ ew: function (a) {
+ var d = getOwnPropertyDescriptor(o, "ew");
+ a(d.value, ew, "Value");
+ a(d.get, undefined, "Get");
+ a(d.set, undefined, "Set");
+ a(d.configurable, false, "Configurable");
+ a(d.enumerable, true, "Enumerable");
+ a(d.writable, true, "Writable");
+ },
+ v: function (a) {
+ var d = getOwnPropertyDescriptor(o, "v");
+ a(d.value, v, "Value");
+ a(d.get, undefined, "Get");
+ a(d.set, undefined, "Set");
+ a(d.configurable, false, "Configurable");
+ a(d.enumerable, false, "Enumerable");
+ a(d.writable, false, "Writable");
+
+ d = getOwnPropertyDescriptor(o, "vgs");
+ a(d.value, undefined, "GS Value");
+ a(d.get, vg, "GS Get");
+ a(d.set, vs, "GS Set");
+ a(d.configurable, false, "GS Configurable");
+ a(d.enumerable, false, "GS Enumerable");
+ a(d.writable, undefined, "GS Writable");
+ },
+ w: function (a) {
+ var d = getOwnPropertyDescriptor(o, "w");
+ a(d.value, w, "Value");
+ a(d.get, undefined, "Get");
+ a(d.set, undefined, "Set");
+ a(d.configurable, false, "Configurable");
+ a(d.enumerable, false, "Enumerable");
+ a(d.writable, true, "Writable");
+ },
+ d: function (a) {
+ var d = getOwnPropertyDescriptor(o, "df");
+ a(d.value, df, "Value");
+ a(d.get, undefined, "Get");
+ a(d.set, undefined, "Set");
+ a(d.configurable, true, "Configurable");
+ a(d.enumerable, false, "Enumerable");
+ a(d.writable, true, "Writable");
+
+ d = getOwnPropertyDescriptor(o, "dfgs");
+ a(d.value, undefined, "GS Value");
+ a(d.get, dfg, "GS Get");
+ a(d.set, dfs, "GS Set");
+ a(d.configurable, true, "GS Configurable");
+ a(d.enumerable, false, "GS Enumerable");
+ a(d.writable, undefined, "GS Writable");
+ },
+ Options: {
+ v: function (a) {
+ var x = {}, d = t(x, { foo: true });
+ a.deep(
+ d,
+ { configurable: true, enumerable: false, writable: true, value: x, foo: true },
+ "No descriptor"
+ );
+ d = t("c", "foo", { marko: "elo" });
+ a.deep(
+ d,
+ {
+ configurable: true,
+ enumerable: false,
+ writable: false,
+ value: "foo",
+ marko: "elo"
+ },
+ "Descriptor"
+ );
+ },
+ gs: function (a) {
+ var gFn = function () {}, sFn = function () {}, d;
+ d = t.gs(gFn, sFn, { foo: true });
+ a.deep(
+ d, { configurable: true, enumerable: false, get: gFn, set: sFn, foo: true },
+ "No descriptor"
+ );
+ d = t.gs(null, sFn, { foo: true });
+ a.deep(
+ d,
+ { configurable: true, enumerable: false, get: undefined, set: sFn, foo: true },
+ "No descriptor: Just set"
+ );
+ d = t.gs(gFn, { foo: true });
+ a.deep(
+ d,
+ { configurable: true, enumerable: false, get: gFn, set: undefined, foo: true },
+ "No descriptor: Just get"
+ );
+
+ d = t.gs("e", gFn, sFn, { bar: true });
+ a.deep(
+ d, { configurable: false, enumerable: true, get: gFn, set: sFn, bar: true },
+ "Descriptor"
+ );
+ d = t.gs("e", null, sFn, { bar: true });
+ a.deep(
+ d,
+ { configurable: false, enumerable: true, get: undefined, set: sFn, bar: true },
+ "Descriptor: Just set"
+ );
+ d = t.gs("e", gFn, { bar: true });
+ a.deep(
+ d,
+ { configurable: false, enumerable: true, get: gFn, set: undefined, bar: true },
+ "Descriptor: Just get"
+ );
+ }
+ }
+ };
+};
diff --git a/node_modules/d/test/lazy.js b/node_modules/d/test/lazy.js
new file mode 100644
index 0000000..e446dd5
--- /dev/null
+++ b/node_modules/d/test/lazy.js
@@ -0,0 +1,97 @@
+"use strict";
+
+var d = require("../")
+ , getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
+
+module.exports = function (t, a) {
+ var Foo = function () {}, i = 1, o, o2, desc;
+ Object.defineProperties(
+ Foo.prototype,
+ t({
+ bar: d(function () { return ++i; }),
+ bar2: d(function () { return this.bar + 23; }),
+ bar3: d(function () { return this.bar2 + 34; }, { desc: "ew" }),
+ bar4: d(function () { return this.bar3 + 12; }, { cacheName: "_bar4_" }),
+ bar5: d(function () { return this.bar4 + 3; }, { cacheName: "_bar5_", desc: "e" })
+ })
+ );
+
+ desc = getOwnPropertyDescriptor(Foo.prototype, "bar");
+ a(desc.configurable, true, "Configurable: default");
+ a(desc.enumerable, false, "Enumerable: default");
+
+ o = new Foo();
+ a.deep([o.bar, o.bar2, o.bar3, o.bar4, o.bar5], [2, 25, 59, 71, 74], "Values");
+
+ a.deep(
+ getOwnPropertyDescriptor(o, "bar3"),
+ { configurable: false, enumerable: true, writable: true, value: 59 }, "Desc"
+ );
+ a(o.hasOwnProperty("bar4"), false, "Cache not exposed");
+ desc = getOwnPropertyDescriptor(o, "bar5");
+ a.deep(
+ desc, { configurable: false, enumerable: true, get: desc.get, set: desc.set },
+ "Cache & Desc: desc"
+ );
+
+ o2 = Object.create(o);
+ o2.bar = 30;
+ o2.bar3 = 100;
+
+ a.deep(
+ [o2.bar, o2.bar2, o2.bar3, o2.bar4, o2.bar5], [30, 25, 100, 112, 115], "Extension Values"
+ );
+
+ Foo = function () {};
+ Object.defineProperties(
+ Foo.prototype,
+ t({
+ test: d("w", function () { return "raz"; }),
+ test2: d("", function () { return "raz"; }, { desc: "w" }),
+ test3: d("", function () { return "raz"; }, { cacheName: "__test3__", desc: "w" }),
+ test4: d("w", "bar")
+ })
+ );
+
+ o = new Foo();
+ o.test = "marko";
+ a.deep(
+ getOwnPropertyDescriptor(o, "test"),
+ { configurable: false, enumerable: false, writable: true, value: "marko" }, "Set before get"
+ );
+ o.test2 = "marko2";
+ a.deep(
+ getOwnPropertyDescriptor(o, "test2"),
+ { configurable: false, enumerable: false, writable: true, value: "marko2" },
+ "Set before get: Custom desc"
+ );
+ o.test3 = "marko3";
+ a.deep(
+ getOwnPropertyDescriptor(o, "__test3__"),
+ { configurable: false, enumerable: false, writable: true, value: "marko3" },
+ "Set before get: Custom cache name"
+ );
+ a(o.test4, "bar", "Resolve by value");
+
+ a.h1("Flat");
+ Object.defineProperties(
+ Foo.prototype,
+ t({
+ flat: d(function () { return "foo"; }, { flat: true }),
+ flat2: d(function () { return "bar"; }, { flat: true })
+ })
+ );
+
+ a.h2("Instance");
+ a(o.flat, "foo", "Value");
+ a(o.hasOwnProperty("flat"), false, "Instance");
+ a(Foo.prototype.flat, "foo", "Prototype");
+
+ a.h2("Direct");
+ a(Foo.prototype.flat2, "bar");
+
+ a.h2("Reset direct");
+ Object.defineProperties(Foo.prototype, t({ testResetDirect: d(false) }));
+
+ a.throws(function () { Foo.prototype.testResetDirect = false; }, TypeError);
+};
diff --git a/node_modules/debug/.coveralls.yml b/node_modules/debug/.coveralls.yml
new file mode 100644
index 0000000..20a7068
--- /dev/null
+++ b/node_modules/debug/.coveralls.yml
@@ -0,0 +1 @@
+repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve
diff --git a/node_modules/debug/.eslintrc b/node_modules/debug/.eslintrc
new file mode 100644
index 0000000..8a37ae2
--- /dev/null
+++ b/node_modules/debug/.eslintrc
@@ -0,0 +1,11 @@
+{
+ "env": {
+ "browser": true,
+ "node": true
+ },
+ "rules": {
+ "no-console": 0,
+ "no-empty": [1, { "allowEmptyCatch": true }]
+ },
+ "extends": "eslint:recommended"
+}
diff --git a/node_modules/debug/.npmignore b/node_modules/debug/.npmignore
new file mode 100644
index 0000000..5f60eec
--- /dev/null
+++ b/node_modules/debug/.npmignore
@@ -0,0 +1,9 @@
+support
+test
+examples
+example
+*.sock
+dist
+yarn.lock
+coverage
+bower.json
diff --git a/node_modules/debug/.travis.yml b/node_modules/debug/.travis.yml
new file mode 100644
index 0000000..6c6090c
--- /dev/null
+++ b/node_modules/debug/.travis.yml
@@ -0,0 +1,14 @@
+
+language: node_js
+node_js:
+ - "6"
+ - "5"
+ - "4"
+
+install:
+ - make node_modules
+
+script:
+ - make lint
+ - make test
+ - make coveralls
diff --git a/node_modules/debug/CHANGELOG.md b/node_modules/debug/CHANGELOG.md
new file mode 100644
index 0000000..eadaa18
--- /dev/null
+++ b/node_modules/debug/CHANGELOG.md
@@ -0,0 +1,362 @@
+
+2.6.9 / 2017-09-22
+==================
+
+ * remove ReDoS regexp in %o formatter (#504)
+
+2.6.8 / 2017-05-18
+==================
+
+ * Fix: Check for undefined on browser globals (#462, @marbemac)
+
+2.6.7 / 2017-05-16
+==================
+
+ * Fix: Update ms to 2.0.0 to fix regular expression denial of service vulnerability (#458, @hubdotcom)
+ * Fix: Inline extend function in node implementation (#452, @dougwilson)
+ * Docs: Fix typo (#455, @msasad)
+
+2.6.5 / 2017-04-27
+==================
+
+ * Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek)
+ * Misc: clean up browser reference checks (#447, @thebigredgeek)
+ * Misc: add npm-debug.log to .gitignore (@thebigredgeek)
+
+
+2.6.4 / 2017-04-20
+==================
+
+ * Fix: bug that would occure if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo)
+ * Chore: ignore bower.json in npm installations. (#437, @joaovieira)
+ * Misc: update "ms" to v0.7.3 (@tootallnate)
+
+2.6.3 / 2017-03-13
+==================
+
+ * Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts)
+ * Docs: Changelog fix (@thebigredgeek)
+
+2.6.2 / 2017-03-10
+==================
+
+ * Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin)
+ * Docs: Add backers and sponsors from Open Collective (#422, @piamancini)
+ * Docs: Add Slackin invite badge (@tootallnate)
+
+2.6.1 / 2017-02-10
+==================
+
+ * Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error
+ * Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0)
+ * Fix: IE8 "Expected identifier" error (#414, @vgoma)
+ * Fix: Namespaces would not disable once enabled (#409, @musikov)
+
+2.6.0 / 2016-12-28
+==================
+
+ * Fix: added better null pointer checks for browser useColors (@thebigredgeek)
+ * Improvement: removed explicit `window.debug` export (#404, @tootallnate)
+ * Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate)
+
+2.5.2 / 2016-12-25
+==================
+
+ * Fix: reference error on window within webworkers (#393, @KlausTrainer)
+ * Docs: fixed README typo (#391, @lurch)
+ * Docs: added notice about v3 api discussion (@thebigredgeek)
+
+2.5.1 / 2016-12-20
+==================
+
+ * Fix: babel-core compatibility
+
+2.5.0 / 2016-12-20
+==================
+
+ * Fix: wrong reference in bower file (@thebigredgeek)
+ * Fix: webworker compatibility (@thebigredgeek)
+ * Fix: output formatting issue (#388, @kribblo)
+ * Fix: babel-loader compatibility (#383, @escwald)
+ * Misc: removed built asset from repo and publications (@thebigredgeek)
+ * Misc: moved source files to /src (#378, @yamikuronue)
+ * Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue)
+ * Test: coveralls integration (#378, @yamikuronue)
+ * Docs: simplified language in the opening paragraph (#373, @yamikuronue)
+
+2.4.5 / 2016-12-17
+==================
+
+ * Fix: `navigator` undefined in Rhino (#376, @jochenberger)
+ * Fix: custom log function (#379, @hsiliev)
+ * Improvement: bit of cleanup + linting fixes (@thebigredgeek)
+ * Improvement: rm non-maintainted `dist/` dir (#375, @freewil)
+ * Docs: simplified language in the opening paragraph. (#373, @yamikuronue)
+
+2.4.4 / 2016-12-14
+==================
+
+ * Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts)
+
+2.4.3 / 2016-12-14
+==================
+
+ * Fix: navigation.userAgent error for react native (#364, @escwald)
+
+2.4.2 / 2016-12-14
+==================
+
+ * Fix: browser colors (#367, @tootallnate)
+ * Misc: travis ci integration (@thebigredgeek)
+ * Misc: added linting and testing boilerplate with sanity check (@thebigredgeek)
+
+2.4.1 / 2016-12-13
+==================
+
+ * Fix: typo that broke the package (#356)
+
+2.4.0 / 2016-12-13
+==================
+
+ * Fix: bower.json references unbuilt src entry point (#342, @justmatt)
+ * Fix: revert "handle regex special characters" (@tootallnate)
+ * Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate)
+ * Feature: %O`(big O) pretty-prints objects (#322, @tootallnate)
+ * Improvement: allow colors in workers (#335, @botverse)
+ * Improvement: use same color for same namespace. (#338, @lchenay)
+
+2.3.3 / 2016-11-09
+==================
+
+ * Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne)
+ * Fix: Returning `localStorage` saved values (#331, Levi Thomason)
+ * Improvement: Don't create an empty object when no `process` (Nathan Rajlich)
+
+2.3.2 / 2016-11-09
+==================
+
+ * Fix: be super-safe in index.js as well (@TooTallNate)
+ * Fix: should check whether process exists (Tom Newby)
+
+2.3.1 / 2016-11-09
+==================
+
+ * Fix: Added electron compatibility (#324, @paulcbetts)
+ * Improvement: Added performance optimizations (@tootallnate)
+ * Readme: Corrected PowerShell environment variable example (#252, @gimre)
+ * Misc: Removed yarn lock file from source control (#321, @fengmk2)
+
+2.3.0 / 2016-11-07
+==================
+
+ * Fix: Consistent placement of ms diff at end of output (#215, @gorangajic)
+ * Fix: Escaping of regex special characters in namespace strings (#250, @zacronos)
+ * Fix: Fixed bug causing crash on react-native (#282, @vkarpov15)
+ * Feature: Enabled ES6+ compatible import via default export (#212 @bucaran)
+ * Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom)
+ * Package: Update "ms" to 0.7.2 (#315, @DevSide)
+ * Package: removed superfluous version property from bower.json (#207 @kkirsche)
+ * Readme: fix USE_COLORS to DEBUG_COLORS
+ * Readme: Doc fixes for format string sugar (#269, @mlucool)
+ * Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0)
+ * Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable)
+ * Readme: better docs for browser support (#224, @matthewmueller)
+ * Tooling: Added yarn integration for development (#317, @thebigredgeek)
+ * Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek)
+ * Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman)
+ * Misc: Updated contributors (@thebigredgeek)
+
+2.2.0 / 2015-05-09
+==================
+
+ * package: update "ms" to v0.7.1 (#202, @dougwilson)
+ * README: add logging to file example (#193, @DanielOchoa)
+ * README: fixed a typo (#191, @amir-s)
+ * browser: expose `storage` (#190, @stephenmathieson)
+ * Makefile: add a `distclean` target (#189, @stephenmathieson)
+
+2.1.3 / 2015-03-13
+==================
+
+ * Updated stdout/stderr example (#186)
+ * Updated example/stdout.js to match debug current behaviour
+ * Renamed example/stderr.js to stdout.js
+ * Update Readme.md (#184)
+ * replace high intensity foreground color for bold (#182, #183)
+
+2.1.2 / 2015-03-01
+==================
+
+ * dist: recompile
+ * update "ms" to v0.7.0
+ * package: update "browserify" to v9.0.3
+ * component: fix "ms.js" repo location
+ * changed bower package name
+ * updated documentation about using debug in a browser
+ * fix: security error on safari (#167, #168, @yields)
+
+2.1.1 / 2014-12-29
+==================
+
+ * browser: use `typeof` to check for `console` existence
+ * browser: check for `console.log` truthiness (fix IE 8/9)
+ * browser: add support for Chrome apps
+ * Readme: added Windows usage remarks
+ * Add `bower.json` to properly support bower install
+
+2.1.0 / 2014-10-15
+==================
+
+ * node: implement `DEBUG_FD` env variable support
+ * package: update "browserify" to v6.1.0
+ * package: add "license" field to package.json (#135, @panuhorsmalahti)
+
+2.0.0 / 2014-09-01
+==================
+
+ * package: update "browserify" to v5.11.0
+ * node: use stderr rather than stdout for logging (#29, @stephenmathieson)
+
+1.0.4 / 2014-07-15
+==================
+
+ * dist: recompile
+ * example: remove `console.info()` log usage
+ * example: add "Content-Type" UTF-8 header to browser example
+ * browser: place %c marker after the space character
+ * browser: reset the "content" color via `color: inherit`
+ * browser: add colors support for Firefox >= v31
+ * debug: prefer an instance `log()` function over the global one (#119)
+ * Readme: update documentation about styled console logs for FF v31 (#116, @wryk)
+
+1.0.3 / 2014-07-09
+==================
+
+ * Add support for multiple wildcards in namespaces (#122, @seegno)
+ * browser: fix lint
+
+1.0.2 / 2014-06-10
+==================
+
+ * browser: update color palette (#113, @gscottolson)
+ * common: make console logging function configurable (#108, @timoxley)
+ * node: fix %o colors on old node <= 0.8.x
+ * Makefile: find node path using shell/which (#109, @timoxley)
+
+1.0.1 / 2014-06-06
+==================
+
+ * browser: use `removeItem()` to clear localStorage
+ * browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777)
+ * package: add "contributors" section
+ * node: fix comment typo
+ * README: list authors
+
+1.0.0 / 2014-06-04
+==================
+
+ * make ms diff be global, not be scope
+ * debug: ignore empty strings in enable()
+ * node: make DEBUG_COLORS able to disable coloring
+ * *: export the `colors` array
+ * npmignore: don't publish the `dist` dir
+ * Makefile: refactor to use browserify
+ * package: add "browserify" as a dev dependency
+ * Readme: add Web Inspector Colors section
+ * node: reset terminal color for the debug content
+ * node: map "%o" to `util.inspect()`
+ * browser: map "%j" to `JSON.stringify()`
+ * debug: add custom "formatters"
+ * debug: use "ms" module for humanizing the diff
+ * Readme: add "bash" syntax highlighting
+ * browser: add Firebug color support
+ * browser: add colors for WebKit browsers
+ * node: apply log to `console`
+ * rewrite: abstract common logic for Node & browsers
+ * add .jshintrc file
+
+0.8.1 / 2014-04-14
+==================
+
+ * package: re-add the "component" section
+
+0.8.0 / 2014-03-30
+==================
+
+ * add `enable()` method for nodejs. Closes #27
+ * change from stderr to stdout
+ * remove unnecessary index.js file
+
+0.7.4 / 2013-11-13
+==================
+
+ * remove "browserify" key from package.json (fixes something in browserify)
+
+0.7.3 / 2013-10-30
+==================
+
+ * fix: catch localStorage security error when cookies are blocked (Chrome)
+ * add debug(err) support. Closes #46
+ * add .browser prop to package.json. Closes #42
+
+0.7.2 / 2013-02-06
+==================
+
+ * fix package.json
+ * fix: Mobile Safari (private mode) is broken with debug
+ * fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript
+
+0.7.1 / 2013-02-05
+==================
+
+ * add repository URL to package.json
+ * add DEBUG_COLORED to force colored output
+ * add browserify support
+ * fix component. Closes #24
+
+0.7.0 / 2012-05-04
+==================
+
+ * Added .component to package.json
+ * Added debug.component.js build
+
+0.6.0 / 2012-03-16
+==================
+
+ * Added support for "-" prefix in DEBUG [Vinay Pulim]
+ * Added `.enabled` flag to the node version [TooTallNate]
+
+0.5.0 / 2012-02-02
+==================
+
+ * Added: humanize diffs. Closes #8
+ * Added `debug.disable()` to the CS variant
+ * Removed padding. Closes #10
+ * Fixed: persist client-side variant again. Closes #9
+
+0.4.0 / 2012-02-01
+==================
+
+ * Added browser variant support for older browsers [TooTallNate]
+ * Added `debug.enable('project:*')` to browser variant [TooTallNate]
+ * Added padding to diff (moved it to the right)
+
+0.3.0 / 2012-01-26
+==================
+
+ * Added millisecond diff when isatty, otherwise UTC string
+
+0.2.0 / 2012-01-22
+==================
+
+ * Added wildcard support
+
+0.1.0 / 2011-12-02
+==================
+
+ * Added: remove colors unless stderr isatty [TooTallNate]
+
+0.0.1 / 2010-01-03
+==================
+
+ * Initial release
diff --git a/node_modules/debug/LICENSE b/node_modules/debug/LICENSE
new file mode 100644
index 0000000..658c933
--- /dev/null
+++ b/node_modules/debug/LICENSE
@@ -0,0 +1,19 @@
+(The MIT License)
+
+Copyright (c) 2014 TJ Holowaychuk
+
+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/node_modules/debug/Makefile b/node_modules/debug/Makefile
new file mode 100644
index 0000000..584da8b
--- /dev/null
+++ b/node_modules/debug/Makefile
@@ -0,0 +1,50 @@
+# get Makefile directory name: http://stackoverflow.com/a/5982798/376773
+THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
+THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd)
+
+# BIN directory
+BIN := $(THIS_DIR)/node_modules/.bin
+
+# Path
+PATH := node_modules/.bin:$(PATH)
+SHELL := /bin/bash
+
+# applications
+NODE ?= $(shell which node)
+YARN ?= $(shell which yarn)
+PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm))
+BROWSERIFY ?= $(NODE) $(BIN)/browserify
+
+.FORCE:
+
+install: node_modules
+
+node_modules: package.json
+ @NODE_ENV= $(PKG) install
+ @touch node_modules
+
+lint: .FORCE
+ eslint browser.js debug.js index.js node.js
+
+test-node: .FORCE
+ istanbul cover node_modules/mocha/bin/_mocha -- test/**.js
+
+test-browser: .FORCE
+ mkdir -p dist
+
+ @$(BROWSERIFY) \
+ --standalone debug \
+ . > dist/debug.js
+
+ karma start --single-run
+ rimraf dist
+
+test: .FORCE
+ concurrently \
+ "make test-node" \
+ "make test-browser"
+
+coveralls:
+ cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js
+
+.PHONY: all install clean distclean
diff --git a/node_modules/debug/README.md b/node_modules/debug/README.md
new file mode 100644
index 0000000..f67be6b
--- /dev/null
+++ b/node_modules/debug/README.md
@@ -0,0 +1,312 @@
+# debug
+[![Build Status](https://travis-ci.org/visionmedia/debug.svg?branch=master)](https://travis-ci.org/visionmedia/debug) [![Coverage Status](https://coveralls.io/repos/github/visionmedia/debug/badge.svg?branch=master)](https://coveralls.io/github/visionmedia/debug?branch=master) [![Slack](https://visionmedia-community-slackin.now.sh/badge.svg)](https://visionmedia-community-slackin.now.sh/) [![OpenCollective](https://opencollective.com/debug/backers/badge.svg)](#backers)
+[![OpenCollective](https://opencollective.com/debug/sponsors/badge.svg)](#sponsors)
+
+
+
+A tiny node.js debugging utility modelled after node core's debugging technique.
+
+**Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)**
+
+## Installation
+
+```bash
+$ npm install debug
+```
+
+## Usage
+
+`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole.
+
+Example _app.js_:
+
+```js
+var debug = require('debug')('http')
+ , http = require('http')
+ , name = 'My App';
+
+// fake app
+
+debug('booting %s', name);
+
+http.createServer(function(req, res){
+ debug(req.method + ' ' + req.url);
+ res.end('hello\n');
+}).listen(3000, function(){
+ debug('listening');
+});
+
+// fake worker of some kind
+
+require('./worker');
+```
+
+Example _worker.js_:
+
+```js
+var debug = require('debug')('worker');
+
+setInterval(function(){
+ debug('doing some work');
+}, 1000);
+```
+
+ The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:
+
+ ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png)
+
+ ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png)
+
+#### Windows note
+
+ On Windows the environment variable is set using the `set` command.
+
+ ```cmd
+ set DEBUG=*,-not_this
+ ```
+
+ Note that PowerShell uses different syntax to set environment variables.
+
+ ```cmd
+ $env:DEBUG = "*,-not_this"
+ ```
+
+Then, run the program to be debugged as usual.
+
+## Millisecond diff
+
+ When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls.
+
+ ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png)
+
+ When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:
+
+ ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png)
+
+## Conventions
+
+ If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser".
+
+## Wildcards
+
+ The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.
+
+ You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:".
+
+## Environment Variables
+
+ When running through Node.js, you can set a few environment variables that will
+ change the behavior of the debug logging:
+
+| Name | Purpose |
+|-----------|-------------------------------------------------|
+| `DEBUG` | Enables/disables specific debugging namespaces. |
+| `DEBUG_COLORS`| Whether or not to use colors in the debug output. |
+| `DEBUG_DEPTH` | Object inspection depth. |
+| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. |
+
+
+ __Note:__ The environment variables beginning with `DEBUG_` end up being
+ converted into an Options object that gets used with `%o`/`%O` formatters.
+ See the Node.js documentation for
+ [`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options)
+ for the complete list.
+
+## Formatters
+
+
+ Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. Below are the officially supported formatters:
+
+| Formatter | Representation |
+|-----------|----------------|
+| `%O` | Pretty-print an Object on multiple lines. |
+| `%o` | Pretty-print an Object all on a single line. |
+| `%s` | String. |
+| `%d` | Number (both integer and float). |
+| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. |
+| `%%` | Single percent sign ('%'). This does not consume an argument. |
+
+### Custom formatters
+
+ You can add custom formatters by extending the `debug.formatters` object. For example, if you wanted to add support for rendering a Buffer as hex with `%h`, you could do something like:
+
+```js
+const createDebug = require('debug')
+createDebug.formatters.h = (v) => {
+ return v.toString('hex')
+}
+
+// …elsewhere
+const debug = createDebug('foo')
+debug('this is hex: %h', new Buffer('hello world'))
+// foo this is hex: 68656c6c6f20776f726c6421 +0ms
+```
+
+## Browser support
+ You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify),
+ or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest),
+ if you don't want to build it yourself.
+
+ Debug's enable state is currently persisted by `localStorage`.
+ Consider the situation shown below where you have `worker:a` and `worker:b`,
+ and wish to debug both. You can enable this using `localStorage.debug`:
+
+```js
+localStorage.debug = 'worker:*'
+```
+
+And then refresh the page.
+
+```js
+a = debug('worker:a');
+b = debug('worker:b');
+
+setInterval(function(){
+ a('doing some work');
+}, 1000);
+
+setInterval(function(){
+ b('doing some work');
+}, 1200);
+```
+
+#### Web Inspector Colors
+
+ Colors are also enabled on "Web Inspectors" that understand the `%c` formatting
+ option. These are WebKit web inspectors, Firefox ([since version
+ 31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/))
+ and the Firebug plugin for Firefox (any version).
+
+ Colored output looks something like:
+
+ ![](https://cloud.githubusercontent.com/assets/71256/3139768/b98c5fd8-e8ef-11e3-862a-f7253b6f47c6.png)
+
+
+## Output streams
+
+ By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method:
+
+Example _stdout.js_:
+
+```js
+var debug = require('debug');
+var error = debug('app:error');
+
+// by default stderr is used
+error('goes to stderr!');
+
+var log = debug('app:log');
+// set this namespace to log via console.log
+log.log = console.log.bind(console); // don't forget to bind to console!
+log('goes to stdout');
+error('still goes to stderr!');
+
+// set all output to go via console.info
+// overrides all per-namespace log settings
+debug.log = console.info.bind(console);
+error('now goes to stdout via console.info');
+log('still goes to stdout, but via console.info now');
+```
+
+
+## Authors
+
+ - TJ Holowaychuk
+ - Nathan Rajlich
+ - Andrew Rhyne
+
+## Backers
+
+Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Sponsors
+
+Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## License
+
+(The MIT License)
+
+Copyright (c) 2014-2016 TJ Holowaychuk <tj@vision-media.ca>
+
+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/node_modules/debug/component.json b/node_modules/debug/component.json
new file mode 100644
index 0000000..9de2641
--- /dev/null
+++ b/node_modules/debug/component.json
@@ -0,0 +1,19 @@
+{
+ "name": "debug",
+ "repo": "visionmedia/debug",
+ "description": "small debugging utility",
+ "version": "2.6.9",
+ "keywords": [
+ "debug",
+ "log",
+ "debugger"
+ ],
+ "main": "src/browser.js",
+ "scripts": [
+ "src/browser.js",
+ "src/debug.js"
+ ],
+ "dependencies": {
+ "rauchg/ms.js": "0.7.1"
+ }
+}
diff --git a/node_modules/debug/karma.conf.js b/node_modules/debug/karma.conf.js
new file mode 100644
index 0000000..103a82d
--- /dev/null
+++ b/node_modules/debug/karma.conf.js
@@ -0,0 +1,70 @@
+// Karma configuration
+// Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC)
+
+module.exports = function(config) {
+ config.set({
+
+ // base path that will be used to resolve all patterns (eg. files, exclude)
+ basePath: '',
+
+
+ // frameworks to use
+ // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
+ frameworks: ['mocha', 'chai', 'sinon'],
+
+
+ // list of files / patterns to load in the browser
+ files: [
+ 'dist/debug.js',
+ 'test/*spec.js'
+ ],
+
+
+ // list of files to exclude
+ exclude: [
+ 'src/node.js'
+ ],
+
+
+ // preprocess matching files before serving them to the browser
+ // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
+ preprocessors: {
+ },
+
+ // test results reporter to use
+ // possible values: 'dots', 'progress'
+ // available reporters: https://npmjs.org/browse/keyword/karma-reporter
+ reporters: ['progress'],
+
+
+ // web server port
+ port: 9876,
+
+
+ // enable / disable colors in the output (reporters and logs)
+ colors: true,
+
+
+ // level of logging
+ // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
+ logLevel: config.LOG_INFO,
+
+
+ // enable / disable watching file and executing tests whenever any file changes
+ autoWatch: true,
+
+
+ // start these browsers
+ // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
+ browsers: ['PhantomJS'],
+
+
+ // Continuous Integration mode
+ // if true, Karma captures browsers, runs the tests and exits
+ singleRun: false,
+
+ // Concurrency level
+ // how many browser should be started simultaneous
+ concurrency: Infinity
+ })
+}
diff --git a/node_modules/debug/node.js b/node_modules/debug/node.js
new file mode 100644
index 0000000..7fc36fe
--- /dev/null
+++ b/node_modules/debug/node.js
@@ -0,0 +1 @@
+module.exports = require('./src/node');
diff --git a/node_modules/debug/package.json b/node_modules/debug/package.json
new file mode 100644
index 0000000..dc787ba
--- /dev/null
+++ b/node_modules/debug/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "debug",
+ "version": "2.6.9",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/visionmedia/debug.git"
+ },
+ "description": "small debugging utility",
+ "keywords": [
+ "debug",
+ "log",
+ "debugger"
+ ],
+ "author": "TJ Holowaychuk ",
+ "contributors": [
+ "Nathan Rajlich (http://n8.io)",
+ "Andrew Rhyne "
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ },
+ "devDependencies": {
+ "browserify": "9.0.3",
+ "chai": "^3.5.0",
+ "concurrently": "^3.1.0",
+ "coveralls": "^2.11.15",
+ "eslint": "^3.12.1",
+ "istanbul": "^0.4.5",
+ "karma": "^1.3.0",
+ "karma-chai": "^0.1.0",
+ "karma-mocha": "^1.3.0",
+ "karma-phantomjs-launcher": "^1.0.2",
+ "karma-sinon": "^1.0.5",
+ "mocha": "^3.2.0",
+ "mocha-lcov-reporter": "^1.2.0",
+ "rimraf": "^2.5.4",
+ "sinon": "^1.17.6",
+ "sinon-chai": "^2.8.0"
+ },
+ "main": "./src/index.js",
+ "browser": "./src/browser.js",
+ "component": {
+ "scripts": {
+ "debug/index.js": "browser.js",
+ "debug/debug.js": "debug.js"
+ }
+ }
+}
diff --git a/node_modules/debug/src/browser.js b/node_modules/debug/src/browser.js
new file mode 100644
index 0000000..7106924
--- /dev/null
+++ b/node_modules/debug/src/browser.js
@@ -0,0 +1,185 @@
+/**
+ * This is the web browser implementation of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = require('./debug');
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+exports.storage = 'undefined' != typeof chrome
+ && 'undefined' != typeof chrome.storage
+ ? chrome.storage.local
+ : localstorage();
+
+/**
+ * Colors.
+ */
+
+exports.colors = [
+ 'lightseagreen',
+ 'forestgreen',
+ 'goldenrod',
+ 'dodgerblue',
+ 'darkorchid',
+ 'crimson'
+];
+
+/**
+ * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+ * and the Firebug extension (any Firefox version) are known
+ * to support "%c" CSS customizations.
+ *
+ * TODO: add a `localStorage` variable to explicitly enable/disable colors
+ */
+
+function useColors() {
+ // NB: In an Electron preload script, document will be defined but not fully
+ // initialized. Since we know we're in Chrome, we'll just detect this case
+ // explicitly
+ if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
+ return true;
+ }
+
+ // is webkit? http://stackoverflow.com/a/16459606/376773
+ // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+ return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
+ // is firebug? http://stackoverflow.com/a/398120/376773
+ (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
+ // is firefox >= v31?
+ // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+ (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
+ // double check webkit in userAgent just in case we are in a worker
+ (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
+}
+
+/**
+ * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+ */
+
+exports.formatters.j = function(v) {
+ try {
+ return JSON.stringify(v);
+ } catch (err) {
+ return '[UnexpectedJSONParseError]: ' + err.message;
+ }
+};
+
+
+/**
+ * Colorize log arguments if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+ var useColors = this.useColors;
+
+ args[0] = (useColors ? '%c' : '')
+ + this.namespace
+ + (useColors ? ' %c' : ' ')
+ + args[0]
+ + (useColors ? '%c ' : ' ')
+ + '+' + exports.humanize(this.diff);
+
+ if (!useColors) return;
+
+ var c = 'color: ' + this.color;
+ args.splice(1, 0, c, 'color: inherit')
+
+ // the final "%c" is somewhat tricky, because there could be other
+ // arguments passed either before or after the %c, so we need to
+ // figure out the correct index to insert the CSS into
+ var index = 0;
+ var lastC = 0;
+ args[0].replace(/%[a-zA-Z%]/g, function(match) {
+ if ('%%' === match) return;
+ index++;
+ if ('%c' === match) {
+ // we only are interested in the *last* %c
+ // (the user may have provided their own)
+ lastC = index;
+ }
+ });
+
+ args.splice(lastC, 0, c);
+}
+
+/**
+ * Invokes `console.log()` when available.
+ * No-op when `console.log` is not a "function".
+ *
+ * @api public
+ */
+
+function log() {
+ // this hackery is required for IE8/9, where
+ // the `console.log` function doesn't have 'apply'
+ return 'object' === typeof console
+ && console.log
+ && Function.prototype.apply.call(console.log, console, arguments);
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+
+function save(namespaces) {
+ try {
+ if (null == namespaces) {
+ exports.storage.removeItem('debug');
+ } else {
+ exports.storage.debug = namespaces;
+ }
+ } catch(e) {}
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+ var r;
+ try {
+ r = exports.storage.debug;
+ } catch(e) {}
+
+ // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+ if (!r && typeof process !== 'undefined' && 'env' in process) {
+ r = process.env.DEBUG;
+ }
+
+ return r;
+}
+
+/**
+ * Enable namespaces listed in `localStorage.debug` initially.
+ */
+
+exports.enable(load());
+
+/**
+ * Localstorage attempts to return the localstorage.
+ *
+ * This is necessary because safari throws
+ * when a user disables cookies/localstorage
+ * and you attempt to access it.
+ *
+ * @return {LocalStorage}
+ * @api private
+ */
+
+function localstorage() {
+ try {
+ return window.localStorage;
+ } catch (e) {}
+}
diff --git a/node_modules/debug/src/debug.js b/node_modules/debug/src/debug.js
new file mode 100644
index 0000000..6a5e3fc
--- /dev/null
+++ b/node_modules/debug/src/debug.js
@@ -0,0 +1,202 @@
+
+/**
+ * This is the common logic for both the Node.js and web browser
+ * implementations of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
+exports.coerce = coerce;
+exports.disable = disable;
+exports.enable = enable;
+exports.enabled = enabled;
+exports.humanize = require('ms');
+
+/**
+ * The currently active debug mode names, and names to skip.
+ */
+
+exports.names = [];
+exports.skips = [];
+
+/**
+ * Map of special "%n" handling functions, for the debug "format" argument.
+ *
+ * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+ */
+
+exports.formatters = {};
+
+/**
+ * Previous log timestamp.
+ */
+
+var prevTime;
+
+/**
+ * Select a color.
+ * @param {String} namespace
+ * @return {Number}
+ * @api private
+ */
+
+function selectColor(namespace) {
+ var hash = 0, i;
+
+ for (i in namespace) {
+ hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
+ hash |= 0; // Convert to 32bit integer
+ }
+
+ return exports.colors[Math.abs(hash) % exports.colors.length];
+}
+
+/**
+ * Create a debugger with the given `namespace`.
+ *
+ * @param {String} namespace
+ * @return {Function}
+ * @api public
+ */
+
+function createDebug(namespace) {
+
+ function debug() {
+ // disabled?
+ if (!debug.enabled) return;
+
+ var self = debug;
+
+ // set `diff` timestamp
+ var curr = +new Date();
+ var ms = curr - (prevTime || curr);
+ self.diff = ms;
+ self.prev = prevTime;
+ self.curr = curr;
+ prevTime = curr;
+
+ // turn the `arguments` into a proper Array
+ var args = new Array(arguments.length);
+ for (var i = 0; i < args.length; i++) {
+ args[i] = arguments[i];
+ }
+
+ args[0] = exports.coerce(args[0]);
+
+ if ('string' !== typeof args[0]) {
+ // anything else let's inspect with %O
+ args.unshift('%O');
+ }
+
+ // apply any `formatters` transformations
+ var index = 0;
+ args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
+ // if we encounter an escaped % then don't increase the array index
+ if (match === '%%') return match;
+ index++;
+ var formatter = exports.formatters[format];
+ if ('function' === typeof formatter) {
+ var val = args[index];
+ match = formatter.call(self, val);
+
+ // now we need to remove `args[index]` since it's inlined in the `format`
+ args.splice(index, 1);
+ index--;
+ }
+ return match;
+ });
+
+ // apply env-specific formatting (colors, etc.)
+ exports.formatArgs.call(self, args);
+
+ var logFn = debug.log || exports.log || console.log.bind(console);
+ logFn.apply(self, args);
+ }
+
+ debug.namespace = namespace;
+ debug.enabled = exports.enabled(namespace);
+ debug.useColors = exports.useColors();
+ debug.color = selectColor(namespace);
+
+ // env-specific initialization logic for debug instances
+ if ('function' === typeof exports.init) {
+ exports.init(debug);
+ }
+
+ return debug;
+}
+
+/**
+ * Enables a debug mode by namespaces. This can include modes
+ * separated by a colon and wildcards.
+ *
+ * @param {String} namespaces
+ * @api public
+ */
+
+function enable(namespaces) {
+ exports.save(namespaces);
+
+ exports.names = [];
+ exports.skips = [];
+
+ var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+ var len = split.length;
+
+ for (var i = 0; i < len; i++) {
+ if (!split[i]) continue; // ignore empty strings
+ namespaces = split[i].replace(/\*/g, '.*?');
+ if (namespaces[0] === '-') {
+ exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
+ } else {
+ exports.names.push(new RegExp('^' + namespaces + '$'));
+ }
+ }
+}
+
+/**
+ * Disable debug output.
+ *
+ * @api public
+ */
+
+function disable() {
+ exports.enable('');
+}
+
+/**
+ * Returns true if the given mode name is enabled, false otherwise.
+ *
+ * @param {String} name
+ * @return {Boolean}
+ * @api public
+ */
+
+function enabled(name) {
+ var i, len;
+ for (i = 0, len = exports.skips.length; i < len; i++) {
+ if (exports.skips[i].test(name)) {
+ return false;
+ }
+ }
+ for (i = 0, len = exports.names.length; i < len; i++) {
+ if (exports.names[i].test(name)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * Coerce `val`.
+ *
+ * @param {Mixed} val
+ * @return {Mixed}
+ * @api private
+ */
+
+function coerce(val) {
+ if (val instanceof Error) return val.stack || val.message;
+ return val;
+}
diff --git a/node_modules/debug/src/index.js b/node_modules/debug/src/index.js
new file mode 100644
index 0000000..e12cf4d
--- /dev/null
+++ b/node_modules/debug/src/index.js
@@ -0,0 +1,10 @@
+/**
+ * Detect Electron renderer process, which is node, but we should
+ * treat as a browser.
+ */
+
+if (typeof process !== 'undefined' && process.type === 'renderer') {
+ module.exports = require('./browser.js');
+} else {
+ module.exports = require('./node.js');
+}
diff --git a/node_modules/debug/src/inspector-log.js b/node_modules/debug/src/inspector-log.js
new file mode 100644
index 0000000..60ea6c0
--- /dev/null
+++ b/node_modules/debug/src/inspector-log.js
@@ -0,0 +1,15 @@
+module.exports = inspectorLog;
+
+// black hole
+const nullStream = new (require('stream').Writable)();
+nullStream._write = () => {};
+
+/**
+ * Outputs a `console.log()` to the Node.js Inspector console *only*.
+ */
+function inspectorLog() {
+ const stdout = console._stdout;
+ console._stdout = nullStream;
+ console.log.apply(console, arguments);
+ console._stdout = stdout;
+}
diff --git a/node_modules/debug/src/node.js b/node_modules/debug/src/node.js
new file mode 100644
index 0000000..b15109c
--- /dev/null
+++ b/node_modules/debug/src/node.js
@@ -0,0 +1,248 @@
+/**
+ * Module dependencies.
+ */
+
+var tty = require('tty');
+var util = require('util');
+
+/**
+ * This is the Node.js implementation of `debug()`.
+ *
+ * Expose `debug()` as the module.
+ */
+
+exports = module.exports = require('./debug');
+exports.init = init;
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+
+/**
+ * Colors.
+ */
+
+exports.colors = [6, 2, 3, 4, 5, 1];
+
+/**
+ * Build up the default `inspectOpts` object from the environment variables.
+ *
+ * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
+ */
+
+exports.inspectOpts = Object.keys(process.env).filter(function (key) {
+ return /^debug_/i.test(key);
+}).reduce(function (obj, key) {
+ // camel-case
+ var prop = key
+ .substring(6)
+ .toLowerCase()
+ .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });
+
+ // coerce string value into JS value
+ var val = process.env[key];
+ if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
+ else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
+ else if (val === 'null') val = null;
+ else val = Number(val);
+
+ obj[prop] = val;
+ return obj;
+}, {});
+
+/**
+ * The file descriptor to write the `debug()` calls to.
+ * Set the `DEBUG_FD` env variable to override with another value. i.e.:
+ *
+ * $ DEBUG_FD=3 node script.js 3>debug.log
+ */
+
+var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
+
+if (1 !== fd && 2 !== fd) {
+ util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()
+}
+
+var stream = 1 === fd ? process.stdout :
+ 2 === fd ? process.stderr :
+ createWritableStdioStream(fd);
+
+/**
+ * Is stdout a TTY? Colored output is enabled when `true`.
+ */
+
+function useColors() {
+ return 'colors' in exports.inspectOpts
+ ? Boolean(exports.inspectOpts.colors)
+ : tty.isatty(fd);
+}
+
+/**
+ * Map %o to `util.inspect()`, all on a single line.
+ */
+
+exports.formatters.o = function(v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts)
+ .split('\n').map(function(str) {
+ return str.trim()
+ }).join(' ');
+};
+
+/**
+ * Map %o to `util.inspect()`, allowing multiple lines if needed.
+ */
+
+exports.formatters.O = function(v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts);
+};
+
+/**
+ * Adds ANSI color escape codes if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+ var name = this.namespace;
+ var useColors = this.useColors;
+
+ if (useColors) {
+ var c = this.color;
+ var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m';
+
+ args[0] = prefix + args[0].split('\n').join('\n' + prefix);
+ args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
+ } else {
+ args[0] = new Date().toUTCString()
+ + ' ' + name + ' ' + args[0];
+ }
+}
+
+/**
+ * Invokes `util.format()` with the specified arguments and writes to `stream`.
+ */
+
+function log() {
+ return stream.write(util.format.apply(util, arguments) + '\n');
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+
+function save(namespaces) {
+ if (null == namespaces) {
+ // If you set a process.env field to null or undefined, it gets cast to the
+ // string 'null' or 'undefined'. Just delete instead.
+ delete process.env.DEBUG;
+ } else {
+ process.env.DEBUG = namespaces;
+ }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+ return process.env.DEBUG;
+}
+
+/**
+ * Copied from `node/src/node.js`.
+ *
+ * XXX: It's lame that node doesn't expose this API out-of-the-box. It also
+ * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.
+ */
+
+function createWritableStdioStream (fd) {
+ var stream;
+ var tty_wrap = process.binding('tty_wrap');
+
+ // Note stream._type is used for test-module-load-list.js
+
+ switch (tty_wrap.guessHandleType(fd)) {
+ case 'TTY':
+ stream = new tty.WriteStream(fd);
+ stream._type = 'tty';
+
+ // Hack to have stream not keep the event loop alive.
+ // See https://github.com/joyent/node/issues/1726
+ if (stream._handle && stream._handle.unref) {
+ stream._handle.unref();
+ }
+ break;
+
+ case 'FILE':
+ var fs = require('fs');
+ stream = new fs.SyncWriteStream(fd, { autoClose: false });
+ stream._type = 'fs';
+ break;
+
+ case 'PIPE':
+ case 'TCP':
+ var net = require('net');
+ stream = new net.Socket({
+ fd: fd,
+ readable: false,
+ writable: true
+ });
+
+ // FIXME Should probably have an option in net.Socket to create a
+ // stream from an existing fd which is writable only. But for now
+ // we'll just add this hack and set the `readable` member to false.
+ // Test: ./node test/fixtures/echo.js < /etc/passwd
+ stream.readable = false;
+ stream.read = null;
+ stream._type = 'pipe';
+
+ // FIXME Hack to have stream not keep the event loop alive.
+ // See https://github.com/joyent/node/issues/1726
+ if (stream._handle && stream._handle.unref) {
+ stream._handle.unref();
+ }
+ break;
+
+ default:
+ // Probably an error on in uv_guess_handle()
+ throw new Error('Implement me. Unknown stream file type!');
+ }
+
+ // For supporting legacy API we put the FD here.
+ stream.fd = fd;
+
+ stream._isStdio = true;
+
+ return stream;
+}
+
+/**
+ * Init logic for `debug` instances.
+ *
+ * Create a new `inspectOpts` object in case `useColors` is set
+ * differently for a particular `debug` instance.
+ */
+
+function init (debug) {
+ debug.inspectOpts = {};
+
+ var keys = Object.keys(exports.inspectOpts);
+ for (var i = 0; i < keys.length; i++) {
+ debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
+ }
+}
+
+/**
+ * Enable namespaces listed in `process.env.DEBUG` initially.
+ */
+
+exports.enable(load());
diff --git a/node_modules/decamelize/index.js b/node_modules/decamelize/index.js
new file mode 100644
index 0000000..8d5bab7
--- /dev/null
+++ b/node_modules/decamelize/index.js
@@ -0,0 +1,13 @@
+'use strict';
+module.exports = function (str, sep) {
+ if (typeof str !== 'string') {
+ throw new TypeError('Expected a string');
+ }
+
+ sep = typeof sep === 'undefined' ? '_' : sep;
+
+ return str
+ .replace(/([a-z\d])([A-Z])/g, '$1' + sep + '$2')
+ .replace(/([A-Z]+)([A-Z][a-z\d]+)/g, '$1' + sep + '$2')
+ .toLowerCase();
+};
diff --git a/node_modules/decamelize/license b/node_modules/decamelize/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/decamelize/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.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 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/node_modules/decamelize/package.json b/node_modules/decamelize/package.json
new file mode 100644
index 0000000..ca35790
--- /dev/null
+++ b/node_modules/decamelize/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "decamelize",
+ "version": "1.2.0",
+ "description": "Convert a camelized string into a lowercased one with a custom separator: unicornRainbow → unicorn_rainbow",
+ "license": "MIT",
+ "repository": "sindresorhus/decamelize",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "xo && ava"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "decamelize",
+ "decamelcase",
+ "camelcase",
+ "lowercase",
+ "case",
+ "dash",
+ "hyphen",
+ "string",
+ "str",
+ "text",
+ "convert"
+ ],
+ "devDependencies": {
+ "ava": "*",
+ "xo": "*"
+ }
+}
diff --git a/node_modules/decamelize/readme.md b/node_modules/decamelize/readme.md
new file mode 100644
index 0000000..624c7ee
--- /dev/null
+++ b/node_modules/decamelize/readme.md
@@ -0,0 +1,48 @@
+# decamelize [![Build Status](https://travis-ci.org/sindresorhus/decamelize.svg?branch=master)](https://travis-ci.org/sindresorhus/decamelize)
+
+> Convert a camelized string into a lowercased one with a custom separator
+> Example: `unicornRainbow` → `unicorn_rainbow`
+
+
+## Install
+
+```
+$ npm install --save decamelize
+```
+
+
+## Usage
+
+```js
+const decamelize = require('decamelize');
+
+decamelize('unicornRainbow');
+//=> 'unicorn_rainbow'
+
+decamelize('unicornRainbow', '-');
+//=> 'unicorn-rainbow'
+```
+
+
+## API
+
+### decamelize(input, [separator])
+
+#### input
+
+Type: `string`
+
+#### separator
+
+Type: `string`
+Default: `_`
+
+
+## Related
+
+See [`camelcase`](https://github.com/sindresorhus/camelcase) for the inverse.
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/decode-uri-component/index.js b/node_modules/decode-uri-component/index.js
new file mode 100644
index 0000000..691499b
--- /dev/null
+++ b/node_modules/decode-uri-component/index.js
@@ -0,0 +1,94 @@
+'use strict';
+var token = '%[a-f0-9]{2}';
+var singleMatcher = new RegExp(token, 'gi');
+var multiMatcher = new RegExp('(' + token + ')+', 'gi');
+
+function decodeComponents(components, split) {
+ try {
+ // Try to decode the entire string first
+ return decodeURIComponent(components.join(''));
+ } catch (err) {
+ // Do nothing
+ }
+
+ if (components.length === 1) {
+ return components;
+ }
+
+ split = split || 1;
+
+ // Split the array in 2 parts
+ var left = components.slice(0, split);
+ var right = components.slice(split);
+
+ return Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right));
+}
+
+function decode(input) {
+ try {
+ return decodeURIComponent(input);
+ } catch (err) {
+ var tokens = input.match(singleMatcher);
+
+ for (var i = 1; i < tokens.length; i++) {
+ input = decodeComponents(tokens, i).join('');
+
+ tokens = input.match(singleMatcher);
+ }
+
+ return input;
+ }
+}
+
+function customDecodeURIComponent(input) {
+ // Keep track of all the replacements and prefill the map with the `BOM`
+ var replaceMap = {
+ '%FE%FF': '\uFFFD\uFFFD',
+ '%FF%FE': '\uFFFD\uFFFD'
+ };
+
+ var match = multiMatcher.exec(input);
+ while (match) {
+ try {
+ // Decode as big chunks as possible
+ replaceMap[match[0]] = decodeURIComponent(match[0]);
+ } catch (err) {
+ var result = decode(match[0]);
+
+ if (result !== match[0]) {
+ replaceMap[match[0]] = result;
+ }
+ }
+
+ match = multiMatcher.exec(input);
+ }
+
+ // Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else
+ replaceMap['%C2'] = '\uFFFD';
+
+ var entries = Object.keys(replaceMap);
+
+ for (var i = 0; i < entries.length; i++) {
+ // Replace all decoded components
+ var key = entries[i];
+ input = input.replace(new RegExp(key, 'g'), replaceMap[key]);
+ }
+
+ return input;
+}
+
+module.exports = function (encodedURI) {
+ if (typeof encodedURI !== 'string') {
+ throw new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`');
+ }
+
+ try {
+ encodedURI = encodedURI.replace(/\+/g, ' ');
+
+ // Try the built in decoder first
+ return decodeURIComponent(encodedURI);
+ } catch (err) {
+ // Fallback to a more advanced decoder
+ return customDecodeURIComponent(encodedURI);
+ }
+};
diff --git a/node_modules/decode-uri-component/license b/node_modules/decode-uri-component/license
new file mode 100644
index 0000000..78b0855
--- /dev/null
+++ b/node_modules/decode-uri-component/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sam Verschueren (github.com/SamVerschueren)
+
+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/node_modules/decode-uri-component/package.json b/node_modules/decode-uri-component/package.json
new file mode 100644
index 0000000..183bd7c
--- /dev/null
+++ b/node_modules/decode-uri-component/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "decode-uri-component",
+ "version": "0.2.0",
+ "description": "A better decodeURIComponent",
+ "license": "MIT",
+ "repository": "SamVerschueren/decode-uri-component",
+ "author": {
+ "name": "Sam Verschueren",
+ "email": "sam.verschueren@gmail.com",
+ "url": "github.com/SamVerschueren"
+ },
+ "engines": {
+ "node": ">=0.10"
+ },
+ "scripts": {
+ "test": "xo && nyc ava",
+ "coveralls": "nyc report --reporter=text-lcov | coveralls"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "decode",
+ "uri",
+ "component",
+ "decodeuricomponent",
+ "components",
+ "decoder",
+ "url"
+ ],
+ "devDependencies": {
+ "ava": "^0.17.0",
+ "coveralls": "^2.13.1",
+ "nyc": "^10.3.2",
+ "xo": "^0.16.0"
+ }
+}
diff --git a/node_modules/decode-uri-component/readme.md b/node_modules/decode-uri-component/readme.md
new file mode 100644
index 0000000..795c87f
--- /dev/null
+++ b/node_modules/decode-uri-component/readme.md
@@ -0,0 +1,70 @@
+# decode-uri-component
+
+[![Build Status](https://travis-ci.org/SamVerschueren/decode-uri-component.svg?branch=master)](https://travis-ci.org/SamVerschueren/decode-uri-component) [![Coverage Status](https://coveralls.io/repos/SamVerschueren/decode-uri-component/badge.svg?branch=master&service=github)](https://coveralls.io/github/SamVerschueren/decode-uri-component?branch=master)
+
+> A better [decodeURIComponent](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent)
+
+
+## Why?
+
+- Decodes `+` to a space.
+- Converts the [BOM](https://en.wikipedia.org/wiki/Byte_order_mark) to a [replacement character](https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character) `�`.
+- Does not throw with invalid encoded input.
+- Decodes as much of the string as possible.
+
+
+## Install
+
+```
+$ npm install --save decode-uri-component
+```
+
+
+## Usage
+
+```js
+const decodeUriComponent = require('decode-uri-component');
+
+decodeUriComponent('%25');
+//=> '%'
+
+decodeUriComponent('%');
+//=> '%'
+
+decodeUriComponent('st%C3%A5le');
+//=> 'ståle'
+
+decodeUriComponent('%st%C3%A5le%');
+//=> '%ståle%'
+
+decodeUriComponent('%%7Bst%C3%A5le%7D%');
+//=> '%{ståle}%'
+
+decodeUriComponent('%7B%ab%%7C%de%%7D');
+//=> '{%ab%|%de%}'
+
+decodeUriComponent('%FE%FF');
+//=> '\uFFFD\uFFFD'
+
+decodeUriComponent('%C2');
+//=> '\uFFFD'
+
+decodeUriComponent('%C2%B5');
+//=> 'µ'
+```
+
+
+## API
+
+### decodeUriComponent(encodedURI)
+
+#### encodedURI
+
+Type: `string`
+
+An encoded component of a Uniform Resource Identifier.
+
+
+## License
+
+MIT © [Sam Verschueren](https://github.com/SamVerschueren)
diff --git a/node_modules/default-compare/LICENSE b/node_modules/default-compare/LICENSE
new file mode 100644
index 0000000..ffb7ec5
--- /dev/null
+++ b/node_modules/default-compare/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017, Brian Woodward.
+
+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.
\ No newline at end of file
diff --git a/node_modules/default-compare/README.md b/node_modules/default-compare/README.md
new file mode 100644
index 0000000..7ca91e4
--- /dev/null
+++ b/node_modules/default-compare/README.md
@@ -0,0 +1,116 @@
+# default-compare [![NPM version](https://img.shields.io/npm/v/default-compare.svg?style=flat)](https://www.npmjs.com/package/default-compare) [![NPM monthly downloads](https://img.shields.io/npm/dm/default-compare.svg?style=flat)](https://npmjs.org/package/default-compare) [![NPM total downloads](https://img.shields.io/npm/dt/default-compare.svg?style=flat)](https://npmjs.org/package/default-compare) [![Linux Build Status](https://img.shields.io/travis/doowb/default-compare.svg?style=flat&label=Travis)](https://travis-ci.org/doowb/default-compare) [![Windows Build Status](https://img.shields.io/appveyor/ci/doowb/default-compare.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/doowb/default-compare)
+
+> Basic sort algorithm that has similar behavior to Array.prototype.sort for null and undefined, but also allows sorting by an object property.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save default-compare
+```
+
+Install with [yarn](https://yarnpkg.com):
+
+```sh
+$ yarn add default-compare
+```
+
+## Usage
+
+```js
+var defaultCompare = require('default-compare');
+```
+
+**basic array**
+
+```js
+var arr = ['c', 'a', undefined, 'b', 'd', null, 'e'];
+console.log(arr.sort(defaultCompare));
+//=> ['a', 'b', 'c', 'd', 'e', null, undefined]
+```
+
+**objects sorted by their "name" property**
+
+```js
+var arr = [
+ {name: 'c', title: 'C'},
+ {name: 'a', title: 'A'},
+ {title: 'G'},
+ {name: 'b', title: 'B'},
+ {name: 'd', title: 'D'},
+ {name: null, title: 'F'},
+ {name: 'e', title: 'E'}
+];
+
+arr.sort(function(a, b) {
+ return defaultCompare(a, b, 'name');
+});
+
+console.log(arr);
+//=> [
+//=> {name: 'a', title: 'A'},
+//=> {name: 'b', title: 'B'},
+//=> {name: 'c', title: 'C'},
+//=> {name: 'd', title: 'D'},
+//=> {name: 'e', title: 'E'},
+//=> {name: null, title: 'F'},
+//=> {title: 'G'}
+//=> ];
+```
+
+## API
+
+### [defaultCompare](index.js#L16)
+
+Basic sort algorithm that has similar behavior to `Array.prototype.sort`
+for null and undefined, but also allows sorting by an object property.
+
+**Params**
+
+* `a` **{Mixed}**: First value to compare.
+* `b` **{Mixed}**: Second value to compare.
+* `prop` **{String}**: Optional property to use when comparing objects. If specified must be a string.
+* `returns` **{Number}**: Returns 1 when `a` should come after `b`, -1 when `a` should come before `b`, and 0 when `a` and `b` are equal.
+
+## About
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+Please read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards.
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Brian Woodward**
+
+* [github/doowb](https://github.com/doowb)
+* [twitter/doowb](https://twitter.com/doowb)
+
+### License
+
+Copyright © 2017, [Brian Woodward](https://doowb.com).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on September 11, 2017._
\ No newline at end of file
diff --git a/node_modules/default-compare/index.js b/node_modules/default-compare/index.js
new file mode 100644
index 0000000..6f05fe5
--- /dev/null
+++ b/node_modules/default-compare/index.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var typeOf = require('kind-of');
+
+/**
+ * Basic sort algorithm that has similar behavior to `Array.prototype.sort`
+ * for null and undefined, but also allows sorting by an object property.
+ *
+ * @param {Mixed} `a` First value to compare.
+ * @param {Mixed} `b` Second value to compare.
+ * @param {String} `prop` Optional property to use when comparing objects. If specified must be a string.
+ * @return {Number} Returns 1 when `a` should come after `b`, -1 when `a` should come before `b`, and 0 when `a` and `b` are equal.
+ * @api public
+ */
+
+module.exports = function defaultCompare(a, b, prop) {
+ if (prop != null && typeOf(prop) !== 'string') {
+ throw new TypeError('expected "prop" to be undefined or a string');
+ }
+
+ var typeA = typeOf(a);
+ var typeB = typeOf(b);
+
+ if (prop) {
+ if (typeA === 'object') {
+ a = a[prop];
+ typeA = typeOf(a);
+ }
+ if (typeB === 'object') {
+ b = b[prop];
+ typeB = typeOf(b);
+ }
+ }
+
+ if (typeA === 'null') {
+ return typeB === 'null' ? 0 : (typeB === 'undefined' ? -1 : 1);
+ } else if (typeA === 'undefined') {
+ return typeB === 'null' ? 1 : (typeB === 'undefined' ? 0 : 1);
+ } else if (typeB === 'null' || typeB === 'undefined') {
+ return -1;
+ } else {
+ return a < b ? -1 : (a > b ? 1 : 0);
+ }
+};
diff --git a/node_modules/default-compare/package.json b/node_modules/default-compare/package.json
new file mode 100644
index 0000000..7dbe3f3
--- /dev/null
+++ b/node_modules/default-compare/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "default-compare",
+ "description": "Basic sort algorithm that has similar behavior to Array.prototype.sort for null and undefined, but also allows sorting by an object property.",
+ "version": "1.0.0",
+ "homepage": "https://github.com/doowb/default-compare",
+ "author": "Brian Woodward (https://doowb.com)",
+ "repository": "doowb/default-compare",
+ "bugs": {
+ "url": "https://github.com/doowb/default-compare/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "kind-of": "^5.0.2"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.5.2"
+ },
+ "keywords": [
+ "compare",
+ "default"
+ ],
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/default-resolution/LICENSE b/node_modules/default-resolution/LICENSE
new file mode 100644
index 0000000..9aedc0d
--- /dev/null
+++ b/node_modules/default-resolution/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Blaine Bublitz, Eric Schoffstall and other 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.
diff --git a/node_modules/default-resolution/README.md b/node_modules/default-resolution/README.md
new file mode 100644
index 0000000..0ac2651
--- /dev/null
+++ b/node_modules/default-resolution/README.md
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+# default-resolution
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Get the default resolution time based on the current node version, optionally overridable.
+
+Originally implemented by [@dinoboff][dinoboff] in [gulpjs/undertaker#17][original].
+
+Split out for standalone use.
+
+## Usage
+
+```js
+var defaultResolution = require('default-resolution');
+
+defaultResolution();
+//-> 1000 (1 second) in node 0.10
+//-> 1 (millisecond) in node 0.11+
+
+// use a different value
+defaultResolution(12);
+//-> 12 always
+```
+
+## API
+
+### `defaultResolution([resolution])`
+
+Returns the default resolution, based on the node platform. See [Default resolution table][default-table] below for resolutions.
+
+Optionally takes a resolution number to force override any platform resolutions.
+
+### Default resolutions
+
+| node version | resolution |
+|--------------|------------|
+| 0.10 | 1s |
+| 0.11+ | 1ms |
+
+More information at https://github.com/gulpjs/undertaker/pull/17#issuecomment-82374512
+
+# License
+
+MIT
+
+[dinoboff]: https://github.com/dinoboff
+[original]: https://github.com/gulpjs/undertaker/pull/17
+[default-table]: #default-resolutions
+
+[downloads-image]: http://img.shields.io/npm/dm/default-resolution.svg
+[npm-url]: https://www.npmjs.com/package/default-resolution
+[npm-image]: http://img.shields.io/npm/v/default-resolution.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/default-resolution
+[travis-image]: http://img.shields.io/travis/gulpjs/default-resolution.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/default-resolution
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/default-resolution.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/default-resolution
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/default-resolution/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
diff --git a/node_modules/default-resolution/index.js b/node_modules/default-resolution/index.js
new file mode 100644
index 0000000..c485481
--- /dev/null
+++ b/node_modules/default-resolution/index.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var nodeVersion = require('./node-version');
+
+function defaultResolution(customResolution) {
+ var resolution = parseInt(customResolution, 10);
+
+ if (resolution) {
+ return resolution;
+ }
+
+ return (nodeVersion.major === 0 && nodeVersion.minor <= 10) ? 1000 : 1;
+}
+
+defaultResolution.nodeVersion = nodeVersion;
+
+module.exports = defaultResolution;
diff --git a/node_modules/default-resolution/node-version.js b/node_modules/default-resolution/node-version.js
new file mode 100644
index 0000000..97ebd4a
--- /dev/null
+++ b/node_modules/default-resolution/node-version.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var match = process.version.match(/v(\d+)\.(\d+)\.(\d+)/);
+var nodeVersion = {
+ major: parseInt(match[1], 10),
+ minor: parseInt(match[2], 10),
+ patch: parseInt(match[3], 10),
+};
+
+module.exports = nodeVersion;
diff --git a/node_modules/default-resolution/package.json b/node_modules/default-resolution/package.json
new file mode 100644
index 0000000..43e5661
--- /dev/null
+++ b/node_modules/default-resolution/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "default-resolution",
+ "version": "2.0.0",
+ "description": "Get the default resolution time based on the current node version, optionally overridable",
+ "author": "Gulp Team (http://gulpjs.com/)",
+ "contributors": [
+ "Blaine Bublitz ",
+ "Damien Lebrun "
+ ],
+ "repository": "gulpjs/default-resolution",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "main": "index.js",
+ "files": [
+ "LICENSE",
+ "index.js",
+ "node-version.js"
+ ],
+ "scripts": {
+ "lint": "eslint . && jscs index.js node-version.js test/",
+ "pretest": "npm run lint",
+ "test": "mocha --async-only",
+ "cover": "istanbul cover _mocha --report lcovonly",
+ "coveralls": "npm run cover && istanbul-coveralls"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "eslint": "^1.7.3",
+ "eslint-config-gulp": "^2.0.0",
+ "expect": "^1.19.0",
+ "istanbul": "^0.4.3",
+ "istanbul-coveralls": "^1.0.3",
+ "jscs": "^2.4.0",
+ "jscs-preset-gulp": "^1.0.0",
+ "mocha": "^2.4.5"
+ },
+ "keywords": [
+ "resolution",
+ "timing"
+ ]
+}
diff --git a/node_modules/define-properties/.editorconfig b/node_modules/define-properties/.editorconfig
new file mode 100644
index 0000000..eaa2141
--- /dev/null
+++ b/node_modules/define-properties/.editorconfig
@@ -0,0 +1,13 @@
+root = true
+
+[*]
+indent_style = tab;
+insert_final_newline = true;
+quote_type = auto;
+space_after_anonymous_functions = true;
+space_after_control_statements = true;
+spaces_around_operators = true;
+trim_trailing_whitespace = true;
+spaces_in_brackets = false;
+end_of_line = lf;
+
diff --git a/node_modules/define-properties/.eslintrc b/node_modules/define-properties/.eslintrc
new file mode 100644
index 0000000..4297a97
--- /dev/null
+++ b/node_modules/define-properties/.eslintrc
@@ -0,0 +1,19 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "id-length": [2, { "min": 1, "max": 35 }],
+ "max-params": [2, 4],
+ },
+
+ "overrides": [
+ {
+ "files": "test/**",
+ "rules": {
+ "max-lines-per-function": 0,
+ },
+ },
+ ],
+}
diff --git a/node_modules/define-properties/.github/FUNDING.yml b/node_modules/define-properties/.github/FUNDING.yml
new file mode 100644
index 0000000..c70f264
--- /dev/null
+++ b/node_modules/define-properties/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/define-properties
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/define-properties/.nycrc b/node_modules/define-properties/.nycrc
new file mode 100644
index 0000000..bdd626c
--- /dev/null
+++ b/node_modules/define-properties/.nycrc
@@ -0,0 +1,9 @@
+{
+ "all": true,
+ "check-coverage": false,
+ "reporter": ["text-summary", "text", "html", "json"],
+ "exclude": [
+ "coverage",
+ "test"
+ ]
+}
diff --git a/node_modules/define-properties/CHANGELOG.md b/node_modules/define-properties/CHANGELOG.md
new file mode 100644
index 0000000..9c86b5b
--- /dev/null
+++ b/node_modules/define-properties/CHANGELOG.md
@@ -0,0 +1,63 @@
+1.1.4 / 2022-04-14
+=================
+ * [Refactor] use `has-property-descriptors`
+ * [readme] add github actions/codecov badges
+ * [Docs] fix header parsing; remove testling
+ * [Deps] update `object-keys`
+ * [meta] use `prepublishOnly` script for npm 7+
+ * [meta] add `funding` field; create FUNDING.yml
+ * [actions] add "Allow Edits" workflow; automatic rebasing / merge commit blocking
+ * [actions] reuse common workflows
+ * [actions] update codecov uploader
+ * [actions] use `node/install` instead of `node/run`; use `codecov` action
+ * [Tests] migrate tests to Github Actions
+ * [Tests] run `nyc` on all tests; use `tape` runner
+ * [Tests] use shared travis-ci config
+ * [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops
+ * [Tests] remove `jscs`
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape`; add `aud`, `safe-publish-latest`
+
+1.1.3 / 2018-08-14
+=================
+ * [Refactor] use a for loop instead of `foreach` to make for smaller bundle sizes
+ * [Robustness] cache `Array.prototype.concat` and `Object.defineProperty`
+ * [Deps] update `object-keys`
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `nsp`, `tape`, `jscs`; remove unused eccheck script + dep
+ * [Tests] use pretest/posttest for linting/security
+ * [Tests] fix npm upgrades on older nodes
+
+1.1.2 / 2015-10-14
+=================
+ * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG
+ * [Deps] Update `object-keys`
+ * [Dev Deps] update `jscs`, `tape`, `eslint`, `@ljharb/eslint-config`, `nsp`
+ * [Tests] up to `io.js` `v3.3`, `node` `v4.2`
+
+1.1.1 / 2015-07-21
+=================
+ * [Deps] Update `object-keys`
+ * [Dev Deps] Update `tape`, `eslint`
+ * [Tests] Test on `io.js` `v2.4`
+
+1.1.0 / 2015-07-01
+=================
+ * [New] Add support for symbol-valued properties.
+ * [Dev Deps] Update `nsp`, `eslint`
+ * [Tests] Test up to `io.js` `v2.3`
+
+1.0.3 / 2015-05-30
+=================
+ * Using a more reliable check for supported property descriptors.
+
+1.0.2 / 2015-05-23
+=================
+ * Test up to `io.js` `v2.0`
+ * Update `tape`, `jscs`, `nsp`, `eslint`, `object-keys`, `editorconfig-tools`, `covert`
+
+1.0.1 / 2015-01-06
+=================
+ * Update `object-keys` to fix ES3 support
+
+1.0.0 / 2015-01-04
+=================
+ * v1.0.0
diff --git a/node_modules/define-properties/LICENSE b/node_modules/define-properties/LICENSE
new file mode 100644
index 0000000..8c271c1
--- /dev/null
+++ b/node_modules/define-properties/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (C) 2015 Jordan Harband
+
+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.
\ No newline at end of file
diff --git a/node_modules/define-properties/README.md b/node_modules/define-properties/README.md
new file mode 100644
index 0000000..650adfa
--- /dev/null
+++ b/node_modules/define-properties/README.md
@@ -0,0 +1,84 @@
+# define-properties [![Version Badge][npm-version-svg]][package-url]
+
+[![github actions][actions-image]][actions-url]
+[![coverage][codecov-image]][codecov-url]
+[![dependency status][deps-svg]][deps-url]
+[![dev dependency status][dev-deps-svg]][dev-deps-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][npm-badge-png]][package-url]
+
+Define multiple non-enumerable properties at once. Uses `Object.defineProperty` when available; falls back to standard assignment in older engines.
+Existing properties are not overridden. Accepts a map of property names to a predicate that, when true, force-overrides.
+
+## Example
+
+```js
+var define = require('define-properties');
+var assert = require('assert');
+
+var obj = define({ a: 1, b: 2 }, {
+ a: 10,
+ b: 20,
+ c: 30
+});
+assert(obj.a === 1);
+assert(obj.b === 2);
+assert(obj.c === 30);
+if (define.supportsDescriptors) {
+ assert.deepEqual(Object.keys(obj), ['a', 'b']);
+ assert.deepEqual(Object.getOwnPropertyDescriptor(obj, 'c'), {
+ configurable: true,
+ enumerable: false,
+ value: 30,
+ writable: false
+ });
+}
+```
+
+Then, with predicates:
+```js
+var define = require('define-properties');
+var assert = require('assert');
+
+var obj = define({ a: 1, b: 2, c: 3 }, {
+ a: 10,
+ b: 20,
+ c: 30
+}, {
+ a: function () { return false; },
+ b: function () { return true; }
+});
+assert(obj.a === 1);
+assert(obj.b === 20);
+assert(obj.c === 3);
+if (define.supportsDescriptors) {
+ assert.deepEqual(Object.keys(obj), ['a', 'c']);
+ assert.deepEqual(Object.getOwnPropertyDescriptor(obj, 'b'), {
+ configurable: true,
+ enumerable: false,
+ value: 20,
+ writable: false
+ });
+}
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[package-url]: https://npmjs.org/package/define-properties
+[npm-version-svg]: https://versionbadg.es/ljharb/define-properties.svg
+[deps-svg]: https://david-dm.org/ljharb/define-properties.svg
+[deps-url]: https://david-dm.org/ljharb/define-properties
+[dev-deps-svg]: https://david-dm.org/ljharb/define-properties/dev-status.svg
+[dev-deps-url]: https://david-dm.org/ljharb/define-properties#info=devDependencies
+[npm-badge-png]: https://nodei.co/npm/define-properties.png?downloads=true&stars=true
+[license-image]: https://img.shields.io/npm/l/define-properties.svg
+[license-url]: LICENSE
+[downloads-image]: https://img.shields.io/npm/dm/define-properties.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=define-properties
+[codecov-image]: https://codecov.io/gh/ljharb/define-properties/branch/main/graphs/badge.svg
+[codecov-url]: https://app.codecov.io/gh/ljharb/define-properties/
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/define-properties
+[actions-url]: https://github.com/ljharb/define-properties/actions
diff --git a/node_modules/define-properties/index.js b/node_modules/define-properties/index.js
new file mode 100644
index 0000000..453afb9
--- /dev/null
+++ b/node_modules/define-properties/index.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var keys = require('object-keys');
+var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
+
+var toStr = Object.prototype.toString;
+var concat = Array.prototype.concat;
+var origDefineProperty = Object.defineProperty;
+
+var isFunction = function (fn) {
+ return typeof fn === 'function' && toStr.call(fn) === '[object Function]';
+};
+
+var hasPropertyDescriptors = require('has-property-descriptors')();
+
+var supportsDescriptors = origDefineProperty && hasPropertyDescriptors;
+
+var defineProperty = function (object, name, value, predicate) {
+ if (name in object && (!isFunction(predicate) || !predicate())) {
+ return;
+ }
+ if (supportsDescriptors) {
+ origDefineProperty(object, name, {
+ configurable: true,
+ enumerable: false,
+ value: value,
+ writable: true
+ });
+ } else {
+ object[name] = value; // eslint-disable-line no-param-reassign
+ }
+};
+
+var defineProperties = function (object, map) {
+ var predicates = arguments.length > 2 ? arguments[2] : {};
+ var props = keys(map);
+ if (hasSymbols) {
+ props = concat.call(props, Object.getOwnPropertySymbols(map));
+ }
+ for (var i = 0; i < props.length; i += 1) {
+ defineProperty(object, props[i], map[props[i]], predicates[props[i]]);
+ }
+};
+
+defineProperties.supportsDescriptors = !!supportsDescriptors;
+
+module.exports = defineProperties;
diff --git a/node_modules/define-properties/package.json b/node_modules/define-properties/package.json
new file mode 100644
index 0000000..bb34ff3
--- /dev/null
+++ b/node_modules/define-properties/package.json
@@ -0,0 +1,66 @@
+{
+ "name": "define-properties",
+ "version": "1.1.4",
+ "author": "Jordan Harband ",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "description": "Define multiple non-enumerable properties at once. Uses `Object.defineProperty` when available; falls back to standard assignment in older engines.",
+ "license": "MIT",
+ "main": "index.js",
+ "scripts": {
+ "prepublish": "not-in-publish || npm run prepublishOnly",
+ "prepublishOnly": "safe-publish-latest",
+ "pretest": "npm run lint",
+ "test": "npm run tests-only",
+ "posttest": "aud --production",
+ "tests-only": "nyc tape 'test/**/*.js'",
+ "lint": "eslint --ext=js,mjs ."
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/ljharb/define-properties.git"
+ },
+ "keywords": [
+ "Object.defineProperty",
+ "Object.defineProperties",
+ "object",
+ "property descriptor",
+ "descriptor",
+ "define",
+ "ES5"
+ ],
+ "dependencies": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "devDependencies": {
+ "@ljharb/eslint-config": "^21.0.0",
+ "aud": "^2.0.0",
+ "eslint": "=8.8.0",
+ "nyc": "^10.3.2",
+ "safe-publish-latest": "^2.0.0",
+ "tape": "^5.5.3"
+ },
+ "testling": {
+ "files": "test/index.js",
+ "browsers": [
+ "iexplore/6.0..latest",
+ "firefox/3.0..6.0",
+ "firefox/15.0..latest",
+ "firefox/nightly",
+ "chrome/4.0..10.0",
+ "chrome/20.0..latest",
+ "chrome/canary",
+ "opera/10.0..latest",
+ "opera/next",
+ "safari/4.0..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2"
+ ]
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+}
diff --git a/node_modules/define-property/CHANGELOG.md b/node_modules/define-property/CHANGELOG.md
new file mode 100644
index 0000000..901c8aa
--- /dev/null
+++ b/node_modules/define-property/CHANGELOG.md
@@ -0,0 +1,82 @@
+# Release history
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+
+ Guiding Principles
+
+- Changelogs are for humans, not machines.
+- There should be an entry for every single version.
+- The same types of changes should be grouped.
+- Versions and sections should be linkable.
+- The latest version comes first.
+- The release date of each versions is displayed.
+- Mention whether you follow Semantic Versioning.
+
+
+
+
+ Types of changes
+
+Changelog entries are classified using the following labels _(from [keep-a-changelog](http://keepachangelog.com/)_):
+
+- `Added` for new features.
+- `Changed` for changes in existing functionality.
+- `Deprecated` for soon-to-be removed features.
+- `Removed` for now removed features.
+- `Fixed` for any bug fixes.
+- `Security` in case of vulnerabilities.
+
+
+
+## [2.0.0] - 2017-04-20
+
+### Changed
+
+- Now supports data descriptors in addition to accessor descriptors.
+- Now uses [Reflect.defineProperty][reflect] when available, otherwise falls back to [Object.defineProperty][object].
+
+## [1.0.0] - 2017-04-20
+
+- stable release
+
+## [0.2.5] - 2015-08-31
+
+- use is-descriptor
+
+## [0.2.3] - 2015-08-29
+
+- check keys length
+
+## [0.2.2] - 2015-08-27
+
+- ensure val is an object
+
+## [0.2.1] - 2015-08-27
+
+- support functions
+
+## [0.2.0] - 2015-08-27
+
+- support get/set
+- update docs
+
+## [0.1.0] - 2015-08-12
+
+- first commit
+
+[2.0.0]: https://github.com/jonschlinkert/define-property/compare/1.0.0...2.0.0
+[1.0.0]: https://github.com/jonschlinkert/define-property/compare/0.2.5...1.0.0
+[0.2.5]: https://github.com/jonschlinkert/define-property/compare/0.2.3...0.2.5
+[0.2.3]: https://github.com/jonschlinkert/define-property/compare/0.2.2...0.2.3
+[0.2.2]: https://github.com/jonschlinkert/define-property/compare/0.2.1...0.2.2
+[0.2.1]: https://github.com/jonschlinkert/define-property/compare/0.2.0...0.2.1
+[0.2.0]: https://github.com/jonschlinkert/define-property/compare/0.1.3...0.2.0
+
+[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog
+
+[object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
+[reflect]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty
diff --git a/node_modules/define-property/LICENSE b/node_modules/define-property/LICENSE
new file mode 100644
index 0000000..f8de063
--- /dev/null
+++ b/node_modules/define-property/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2018, Jon Schlinkert.
+
+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/node_modules/define-property/README.md b/node_modules/define-property/README.md
new file mode 100644
index 0000000..f1ee8f9
--- /dev/null
+++ b/node_modules/define-property/README.md
@@ -0,0 +1,117 @@
+# define-property [![NPM version](https://img.shields.io/npm/v/define-property.svg?style=flat)](https://www.npmjs.com/package/define-property) [![NPM monthly downloads](https://img.shields.io/npm/dm/define-property.svg?style=flat)](https://npmjs.org/package/define-property) [![NPM total downloads](https://img.shields.io/npm/dt/define-property.svg?style=flat)](https://npmjs.org/package/define-property) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/define-property.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/define-property)
+
+> Define a non-enumerable property on an object. Uses Reflect.defineProperty when available, otherwise Object.defineProperty.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save define-property
+```
+
+## Release history
+
+See [the CHANGELOG](changelog.md) for updates.
+
+## Usage
+
+**Params**
+
+* `object`: The object on which to define the property.
+* `key`: The name of the property to be defined or modified.
+* `value`: The value or descriptor of the property being defined or modified.
+
+```js
+var define = require('define-property');
+var obj = {};
+define(obj, 'foo', function(val) {
+ return val.toUpperCase();
+});
+
+// by default, defined properties are non-enumberable
+console.log(obj);
+//=> {}
+
+console.log(obj.foo('bar'));
+//=> 'BAR'
+```
+
+**defining setters/getters**
+
+Pass the same properties you would if using [Object.defineProperty](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty) or [Reflect.defineProperty](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty).
+
+```js
+define(obj, 'foo', {
+ set: function() {},
+ get: function() {}
+});
+```
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target… [more](https://github.com/jonschlinkert/assign-deep) | [homepage](https://github.com/jonschlinkert/assign-deep "Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target (first) object.")
+* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.")
+* [merge-deep](https://www.npmjs.com/package/merge-deep): Recursively merge values in a javascript object. | [homepage](https://github.com/jonschlinkert/merge-deep "Recursively merge values in a javascript object.")
+* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep "Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone.")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 28 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 1 | [doowb](https://github.com/doowb) |
+
+### Author
+
+**Jon Schlinkert**
+
+* Connect with me on [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert)
+* Follow me on [github/jonschlinkert](https://github.com/jonschlinkert)
+* Follow me on [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on January 25, 2018._
\ No newline at end of file
diff --git a/node_modules/define-property/index.js b/node_modules/define-property/index.js
new file mode 100644
index 0000000..0efa0a9
--- /dev/null
+++ b/node_modules/define-property/index.js
@@ -0,0 +1,38 @@
+/*!
+ * define-property
+ *
+ * Copyright (c) 2015-2018, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var isobject = require('isobject');
+var isDescriptor = require('is-descriptor');
+var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty)
+ ? Reflect.defineProperty
+ : Object.defineProperty;
+
+module.exports = function defineProperty(obj, key, val) {
+ if (!isobject(obj) && typeof obj !== 'function' && !Array.isArray(obj)) {
+ throw new TypeError('expected an object, function, or array');
+ }
+
+ if (typeof key !== 'string') {
+ throw new TypeError('expected "key" to be a string');
+ }
+
+ if (isDescriptor(val)) {
+ define(obj, key, val);
+ return obj;
+ }
+
+ define(obj, key, {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: val
+ });
+
+ return obj;
+};
diff --git a/node_modules/define-property/package.json b/node_modules/define-property/package.json
new file mode 100644
index 0000000..f8fd21c
--- /dev/null
+++ b/node_modules/define-property/package.json
@@ -0,0 +1,67 @@
+{
+ "name": "define-property",
+ "description": "Define a non-enumerable property on an object. Uses Reflect.defineProperty when available, otherwise Object.defineProperty.",
+ "version": "2.0.2",
+ "homepage": "https://github.com/jonschlinkert/define-property",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Brian Woodward (https://twitter.com/doowb)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)"
+ ],
+ "repository": "jonschlinkert/define-property",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/define-property/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.5.3"
+ },
+ "keywords": [
+ "define",
+ "define-property",
+ "enumerable",
+ "key",
+ "non",
+ "non-enumerable",
+ "object",
+ "prop",
+ "property",
+ "value"
+ ],
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "assign-deep",
+ "extend-shallow",
+ "merge-deep",
+ "mixin-deep"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/detect-file/LICENSE b/node_modules/detect-file/LICENSE
new file mode 100644
index 0000000..42f91ca
--- /dev/null
+++ b/node_modules/detect-file/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016-2017, Brian Woodward.
+
+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.
\ No newline at end of file
diff --git a/node_modules/detect-file/README.md b/node_modules/detect-file/README.md
new file mode 100644
index 0000000..dee6311
--- /dev/null
+++ b/node_modules/detect-file/README.md
@@ -0,0 +1,99 @@
+# detect-file [![NPM version](https://img.shields.io/npm/v/detect-file.svg?style=flat)](https://www.npmjs.com/package/detect-file) [![NPM monthly downloads](https://img.shields.io/npm/dm/detect-file.svg?style=flat)](https://npmjs.org/package/detect-file) [![NPM total downloads](https://img.shields.io/npm/dt/detect-file.svg?style=flat)](https://npmjs.org/package/detect-file) [![Linux Build Status](https://img.shields.io/travis/doowb/detect-file.svg?style=flat&label=Travis)](https://travis-ci.org/doowb/detect-file) [![Windows Build Status](https://img.shields.io/appveyor/ci/doowb/detect-file.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/doowb/detect-file)
+
+> Detects if a file exists and returns the resolved filepath.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save detect-file
+```
+
+Install with [yarn](https://yarnpkg.com):
+
+```sh
+$ yarn add detect-file
+```
+
+## Usage
+
+```js
+var detect = require('detect-file');
+```
+
+## API
+
+### [detect](index.js#L33)
+
+Detect the given `filepath` if it exists.
+
+**Params**
+
+* `filepath` **{String}**: filepath to detect.
+* `options` **{Object}**: Additional options.
+* `options.nocase` **{Boolean}**: Set this to `true` to force case-insensitive filename checks. This is useful on case sensitive file systems.
+* `returns` **{String}**: Returns the detected filepath if it exists, otherwise returns `null`.
+
+**Example**
+
+```js
+var res = detect('package.json');
+console.log(res);
+//=> "package.json"
+
+var res = detect('fake-file.json');
+console.log(res)
+//=> null
+```
+
+## Case sensitive file systems
+
+When using the `nocase` option, this library will attempt to detect the filepath with the following methods:
+
+1. Try to read all files in the `filepath` using `fs.readdirSync`. If successful and `filepath` is a directory, return the `filepath`.
+2. Try to read all files in the `filepath`'s directory using `fs.readdirSync`. If successful, do case insensitive comparasions of the `filepath` to the files in `filepath`'s directory.
+
+## About
+
+### Related projects
+
+[fs-exists-sync](https://www.npmjs.com/package/fs-exists-sync): Drop-in replacement for `fs.existsSync` with zero dependencies. Other libs I found either have crucial differences… [more](https://github.com/jonschlinkert/fs-exists-sync) | [homepage](https://github.com/jonschlinkert/fs-exists-sync "Drop-in replacement for `fs.existsSync` with zero dependencies. Other libs I found either have crucial differences from fs.existsSync, or unnecessary dependencies. See README.md for more info.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Brian Woodward**
+
+* [github/doowb](https://github.com/doowb)
+* [twitter/doowb](https://twitter.com/doowb)
+
+### License
+
+Copyright © 2017, [Brian Woodward](https://github.com/doowb).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on August 05, 2017._
\ No newline at end of file
diff --git a/node_modules/detect-file/index.js b/node_modules/detect-file/index.js
new file mode 100644
index 0000000..c7c47f1
--- /dev/null
+++ b/node_modules/detect-file/index.js
@@ -0,0 +1,109 @@
+/*!
+ * detect-file
+ *
+ * Copyright (c) 2016-2017, Brian Woodward.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var fs = require('fs');
+var path = require('path');
+
+/**
+ * Detect the given `filepath` if it exists.
+ *
+ * ```js
+ * var res = detect('package.json');
+ * console.log(res);
+ * //=> "package.json"
+ *
+ * var res = detect('fake-file.json');
+ * console.log(res)
+ * //=> null
+ * ```
+ *
+ * @param {String} `filepath` filepath to detect.
+ * @param {Object} `options` Additional options.
+ * @param {Boolean} `options.nocase` Set this to `true` to force case-insensitive filename checks. This is useful on case sensitive file systems.
+ * @return {String} Returns the detected filepath if it exists, otherwise returns `null`.
+ * @api public
+ */
+
+module.exports = function detect(filepath, options) {
+ if (!filepath || (typeof filepath !== 'string')) {
+ return null;
+ }
+ if (fs.existsSync(filepath)) {
+ return path.resolve(filepath);
+ }
+
+ options = options || {};
+ if (options.nocase === true) {
+ return nocase(filepath);
+ }
+ return null;
+};
+
+/**
+ * Check if the filepath exists by falling back to reading in the entire directory.
+ * Returns the real filepath (for case sensitive file systems) if found.
+ *
+ * @param {String} `filepath` filepath to check.
+ * @return {String} Returns found filepath if exists, otherwise null.
+ */
+
+function nocase(filepath) {
+ filepath = path.resolve(filepath);
+ var res = tryReaddir(filepath);
+ if (res === null) {
+ return null;
+ }
+
+ // "filepath" is a directory, an error would be
+ // thrown if it doesn't exist. if we're here, it exists
+ if (res.path === filepath) {
+ return res.path;
+ }
+
+ // "filepath" is not a directory
+ // compare against upper case later
+ // see https://nodejs.org/en/docs/guides/working-with-different-filesystems/
+ var upper = filepath.toUpperCase();
+ var len = res.files.length;
+ var idx = -1;
+
+ while (++idx < len) {
+ var fp = path.resolve(res.path, res.files[idx]);
+ if (filepath === fp || upper === fp) {
+ return fp;
+ }
+ var fpUpper = fp.toUpperCase();
+ if (filepath === fpUpper || upper === fpUpper) {
+ return fp;
+ }
+ }
+
+ return null;
+}
+
+/**
+ * Try to read the filepath as a directory first, then fallback to the filepath's dirname.
+ *
+ * @param {String} `filepath` path of the directory to read.
+ * @return {Object} Object containing `path` and `files` if succesful. Otherwise, null.
+ */
+
+function tryReaddir(filepath) {
+ var ctx = { path: filepath, files: [] };
+ try {
+ ctx.files = fs.readdirSync(filepath);
+ return ctx;
+ } catch (err) {}
+ try {
+ ctx.path = path.dirname(filepath);
+ ctx.files = fs.readdirSync(ctx.path);
+ return ctx;
+ } catch (err) {}
+ return null;
+}
diff --git a/node_modules/detect-file/package.json b/node_modules/detect-file/package.json
new file mode 100644
index 0000000..d5b3ed8
--- /dev/null
+++ b/node_modules/detect-file/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "detect-file",
+ "description": "Detects if a file exists and returns the resolved filepath.",
+ "version": "1.0.0",
+ "homepage": "https://github.com/doowb/detect-file",
+ "author": "Brian Woodward (https://github.com/doowb)",
+ "repository": "doowb/detect-file",
+ "bugs": {
+ "url": "https://github.com/doowb/detect-file/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "gulp-format-md": "*",
+ "mocha": "*"
+ },
+ "keywords": [
+ "detect",
+ "exists",
+ "file",
+ "file exists",
+ "file-path",
+ "filepath",
+ "path",
+ "resolve",
+ "resolve file",
+ "resolve filepath"
+ ],
+ "verb": {
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "fs-exists-sync"
+ ]
+ },
+ "reflinks": [
+ "verb",
+ "verb-readme-generator"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/duplexify/.travis.yml b/node_modules/duplexify/.travis.yml
new file mode 100644
index 0000000..cb6e182
--- /dev/null
+++ b/node_modules/duplexify/.travis.yml
@@ -0,0 +1,6 @@
+language: node_js
+node_js:
+ - "4"
+ - "6"
+ - "8"
+ - "10"
diff --git a/node_modules/duplexify/LICENSE b/node_modules/duplexify/LICENSE
new file mode 100644
index 0000000..757562e
--- /dev/null
+++ b/node_modules/duplexify/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Mathias Buus
+
+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.
\ No newline at end of file
diff --git a/node_modules/duplexify/README.md b/node_modules/duplexify/README.md
new file mode 100644
index 0000000..8352900
--- /dev/null
+++ b/node_modules/duplexify/README.md
@@ -0,0 +1,97 @@
+# duplexify
+
+Turn a writeable and readable stream into a single streams2 duplex stream.
+
+Similar to [duplexer2](https://github.com/deoxxa/duplexer2) except it supports both streams2 and streams1 as input
+and it allows you to set the readable and writable part asynchronously using `setReadable(stream)` and `setWritable(stream)`
+
+```
+npm install duplexify
+```
+
+[![build status](http://img.shields.io/travis/mafintosh/duplexify.svg?style=flat)](http://travis-ci.org/mafintosh/duplexify)
+
+## Usage
+
+Use `duplexify(writable, readable, streamOptions)` (or `duplexify.obj(writable, readable)` to create an object stream)
+
+``` js
+var duplexify = require('duplexify')
+
+// turn writableStream and readableStream into a single duplex stream
+var dup = duplexify(writableStream, readableStream)
+
+dup.write('hello world') // will write to writableStream
+dup.on('data', function(data) {
+ // will read from readableStream
+})
+```
+
+You can also set the readable and writable parts asynchronously
+
+``` js
+var dup = duplexify()
+
+dup.write('hello world') // write will buffer until the writable
+ // part has been set
+
+// wait a bit ...
+dup.setReadable(readableStream)
+
+// maybe wait some more?
+dup.setWritable(writableStream)
+```
+
+If you call `setReadable` or `setWritable` multiple times it will unregister the previous readable/writable stream.
+To disable the readable or writable part call `setReadable` or `setWritable` with `null`.
+
+If the readable or writable streams emits an error or close it will destroy both streams and bubble up the event.
+You can also explicitly destroy the streams by calling `dup.destroy()`. The `destroy` method optionally takes an
+error object as argument, in which case the error is emitted as part of the `error` event.
+
+``` js
+dup.on('error', function(err) {
+ console.log('readable or writable emitted an error - close will follow')
+})
+
+dup.on('close', function() {
+ console.log('the duplex stream is destroyed')
+})
+
+dup.destroy() // calls destroy on the readable and writable part (if present)
+```
+
+## HTTP request example
+
+Turn a node core http request into a duplex stream is as easy as
+
+``` js
+var duplexify = require('duplexify')
+var http = require('http')
+
+var request = function(opts) {
+ var req = http.request(opts)
+ var dup = duplexify(req)
+ req.on('response', function(res) {
+ dup.setReadable(res)
+ })
+ return dup
+}
+
+var req = request({
+ method: 'GET',
+ host: 'www.google.com',
+ port: 80
+})
+
+req.end()
+req.pipe(process.stdout)
+```
+
+## License
+
+MIT
+
+## Related
+
+`duplexify` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one.
diff --git a/node_modules/duplexify/example.js b/node_modules/duplexify/example.js
new file mode 100644
index 0000000..5585c19
--- /dev/null
+++ b/node_modules/duplexify/example.js
@@ -0,0 +1,21 @@
+var duplexify = require('duplexify')
+var http = require('http')
+
+var request = function(opts) {
+ var req = http.request(opts)
+ var dup = duplexify()
+ dup.setWritable(req)
+ req.on('response', function(res) {
+ dup.setReadable(res)
+ })
+ return dup
+}
+
+var req = request({
+ method: 'GET',
+ host: 'www.google.com',
+ port: 80
+})
+
+req.end()
+req.pipe(process.stdout)
diff --git a/node_modules/duplexify/index.js b/node_modules/duplexify/index.js
new file mode 100644
index 0000000..18634c2
--- /dev/null
+++ b/node_modules/duplexify/index.js
@@ -0,0 +1,234 @@
+var stream = require('readable-stream')
+var eos = require('end-of-stream')
+var inherits = require('inherits')
+var shift = require('stream-shift')
+
+var SIGNAL_FLUSH = (Buffer.from && Buffer.from !== Uint8Array.from)
+ ? Buffer.from([0])
+ : new Buffer([0])
+
+var onuncork = function(self, fn) {
+ if (self._corked) self.once('uncork', fn)
+ else fn()
+}
+
+var autoDestroy = function (self, err) {
+ if (self._autoDestroy) self.destroy(err)
+}
+
+var destroyer = function(self, end) {
+ return function(err) {
+ if (err) autoDestroy(self, err.message === 'premature close' ? null : err)
+ else if (end && !self._ended) self.end()
+ }
+}
+
+var end = function(ws, fn) {
+ if (!ws) return fn()
+ if (ws._writableState && ws._writableState.finished) return fn()
+ if (ws._writableState) return ws.end(fn)
+ ws.end()
+ fn()
+}
+
+var toStreams2 = function(rs) {
+ return new (stream.Readable)({objectMode:true, highWaterMark:16}).wrap(rs)
+}
+
+var Duplexify = function(writable, readable, opts) {
+ if (!(this instanceof Duplexify)) return new Duplexify(writable, readable, opts)
+ stream.Duplex.call(this, opts)
+
+ this._writable = null
+ this._readable = null
+ this._readable2 = null
+
+ this._autoDestroy = !opts || opts.autoDestroy !== false
+ this._forwardDestroy = !opts || opts.destroy !== false
+ this._forwardEnd = !opts || opts.end !== false
+ this._corked = 1 // start corked
+ this._ondrain = null
+ this._drained = false
+ this._forwarding = false
+ this._unwrite = null
+ this._unread = null
+ this._ended = false
+
+ this.destroyed = false
+
+ if (writable) this.setWritable(writable)
+ if (readable) this.setReadable(readable)
+}
+
+inherits(Duplexify, stream.Duplex)
+
+Duplexify.obj = function(writable, readable, opts) {
+ if (!opts) opts = {}
+ opts.objectMode = true
+ opts.highWaterMark = 16
+ return new Duplexify(writable, readable, opts)
+}
+
+Duplexify.prototype.cork = function() {
+ if (++this._corked === 1) this.emit('cork')
+}
+
+Duplexify.prototype.uncork = function() {
+ if (this._corked && --this._corked === 0) this.emit('uncork')
+}
+
+Duplexify.prototype.setWritable = function(writable) {
+ if (this._unwrite) this._unwrite()
+
+ if (this.destroyed) {
+ if (writable && writable.destroy) writable.destroy()
+ return
+ }
+
+ if (writable === null || writable === false) {
+ this.end()
+ return
+ }
+
+ var self = this
+ var unend = eos(writable, {writable:true, readable:false}, destroyer(this, this._forwardEnd))
+
+ var ondrain = function() {
+ var ondrain = self._ondrain
+ self._ondrain = null
+ if (ondrain) ondrain()
+ }
+
+ var clear = function() {
+ self._writable.removeListener('drain', ondrain)
+ unend()
+ }
+
+ if (this._unwrite) process.nextTick(ondrain) // force a drain on stream reset to avoid livelocks
+
+ this._writable = writable
+ this._writable.on('drain', ondrain)
+ this._unwrite = clear
+
+ this.uncork() // always uncork setWritable
+}
+
+Duplexify.prototype.setReadable = function(readable) {
+ if (this._unread) this._unread()
+
+ if (this.destroyed) {
+ if (readable && readable.destroy) readable.destroy()
+ return
+ }
+
+ if (readable === null || readable === false) {
+ this.push(null)
+ this.resume()
+ return
+ }
+
+ var self = this
+ var unend = eos(readable, {writable:false, readable:true}, destroyer(this))
+
+ var onreadable = function() {
+ self._forward()
+ }
+
+ var onend = function() {
+ self.push(null)
+ }
+
+ var clear = function() {
+ self._readable2.removeListener('readable', onreadable)
+ self._readable2.removeListener('end', onend)
+ unend()
+ }
+
+ this._drained = true
+ this._readable = readable
+ this._readable2 = readable._readableState ? readable : toStreams2(readable)
+ this._readable2.on('readable', onreadable)
+ this._readable2.on('end', onend)
+ this._unread = clear
+
+ this._forward()
+}
+
+Duplexify.prototype._read = function() {
+ this._drained = true
+ this._forward()
+}
+
+Duplexify.prototype._forward = function() {
+ if (this._forwarding || !this._readable2 || !this._drained) return
+ this._forwarding = true
+
+ var data
+
+ while (this._drained && (data = shift(this._readable2)) !== null) {
+ if (this.destroyed) continue
+ this._drained = this.push(data)
+ }
+
+ this._forwarding = false
+}
+
+Duplexify.prototype.destroy = function(err) {
+ if (this.destroyed) return
+ this.destroyed = true
+
+ var self = this
+ process.nextTick(function() {
+ self._destroy(err)
+ })
+}
+
+Duplexify.prototype._destroy = function(err) {
+ if (err) {
+ var ondrain = this._ondrain
+ this._ondrain = null
+ if (ondrain) ondrain(err)
+ else this.emit('error', err)
+ }
+
+ if (this._forwardDestroy) {
+ if (this._readable && this._readable.destroy) this._readable.destroy()
+ if (this._writable && this._writable.destroy) this._writable.destroy()
+ }
+
+ this.emit('close')
+}
+
+Duplexify.prototype._write = function(data, enc, cb) {
+ if (this.destroyed) return cb()
+ if (this._corked) return onuncork(this, this._write.bind(this, data, enc, cb))
+ if (data === SIGNAL_FLUSH) return this._finish(cb)
+ if (!this._writable) return cb()
+
+ if (this._writable.write(data) === false) this._ondrain = cb
+ else cb()
+}
+
+Duplexify.prototype._finish = function(cb) {
+ var self = this
+ this.emit('preend')
+ onuncork(this, function() {
+ end(self._forwardEnd && self._writable, function() {
+ // haxx to not emit prefinish twice
+ if (self._writableState.prefinished === false) self._writableState.prefinished = true
+ self.emit('prefinish')
+ onuncork(self, cb)
+ })
+ })
+}
+
+Duplexify.prototype.end = function(data, enc, cb) {
+ if (typeof data === 'function') return this.end(null, null, data)
+ if (typeof enc === 'function') return this.end(data, null, enc)
+ this._ended = true
+ if (data) this.write(data)
+ if (!this._writableState.ending) this.write(SIGNAL_FLUSH)
+ return stream.Writable.prototype.end.call(this, cb)
+}
+
+module.exports = Duplexify
diff --git a/node_modules/duplexify/package.json b/node_modules/duplexify/package.json
new file mode 100644
index 0000000..07effe4
--- /dev/null
+++ b/node_modules/duplexify/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "duplexify",
+ "version": "3.7.1",
+ "description": "Turn a writable and readable stream into a streams2 duplex stream with support for async initialization and streams1/streams2 input",
+ "main": "index.js",
+ "dependencies": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ },
+ "devDependencies": {
+ "concat-stream": "^1.5.2",
+ "tape": "^4.0.0",
+ "through2": "^2.0.0"
+ },
+ "scripts": {
+ "test": "tape test.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/mafintosh/duplexify"
+ },
+ "keywords": [
+ "duplex",
+ "streams2",
+ "streams",
+ "stream",
+ "writable",
+ "readable",
+ "async"
+ ],
+ "author": "Mathias Buus",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/mafintosh/duplexify/issues"
+ },
+ "homepage": "https://github.com/mafintosh/duplexify"
+}
diff --git a/node_modules/duplexify/test.js b/node_modules/duplexify/test.js
new file mode 100644
index 0000000..0074060
--- /dev/null
+++ b/node_modules/duplexify/test.js
@@ -0,0 +1,295 @@
+var tape = require('tape')
+var through = require('through2')
+var concat = require('concat-stream')
+var net = require('net')
+var duplexify = require('./')
+
+var HELLO_WORLD = (Buffer.from && Buffer.from !== Uint8Array.from)
+ ? Buffer.from('hello world')
+ : new Buffer('hello world')
+
+tape('passthrough', function(t) {
+ t.plan(2)
+
+ var pt = through()
+ var dup = duplexify(pt, pt)
+
+ dup.end('hello world')
+ dup.on('finish', function() {
+ t.ok(true, 'should finish')
+ })
+ dup.pipe(concat(function(data) {
+ t.same(data.toString(), 'hello world', 'same in as out')
+ }))
+})
+
+tape('passthrough + double end', function(t) {
+ t.plan(2)
+
+ var pt = through()
+ var dup = duplexify(pt, pt)
+
+ dup.end('hello world')
+ dup.end()
+
+ dup.on('finish', function() {
+ t.ok(true, 'should finish')
+ })
+ dup.pipe(concat(function(data) {
+ t.same(data.toString(), 'hello world', 'same in as out')
+ }))
+})
+
+tape('async passthrough + end', function(t) {
+ t.plan(2)
+
+ var pt = through.obj({highWaterMark:1}, function(data, enc, cb) {
+ setTimeout(function() {
+ cb(null, data)
+ }, 100)
+ })
+
+ var dup = duplexify(pt, pt)
+
+ dup.write('hello ')
+ dup.write('world')
+ dup.end()
+
+ dup.on('finish', function() {
+ t.ok(true, 'should finish')
+ })
+ dup.pipe(concat(function(data) {
+ t.same(data.toString(), 'hello world', 'same in as out')
+ }))
+})
+
+tape('duplex', function(t) {
+ var readExpected = ['read-a', 'read-b', 'read-c']
+ var writeExpected = ['write-a', 'write-b', 'write-c']
+
+ t.plan(readExpected.length+writeExpected.length+2)
+
+ var readable = through.obj()
+ var writable = through.obj(function(data, enc, cb) {
+ t.same(data, writeExpected.shift(), 'onwrite should match')
+ cb()
+ })
+
+ var dup = duplexify.obj(writable, readable)
+
+ readExpected.slice().forEach(function(data) {
+ readable.write(data)
+ })
+ readable.end()
+
+ writeExpected.slice().forEach(function(data) {
+ dup.write(data)
+ })
+ dup.end()
+
+ dup.on('data', function(data) {
+ t.same(data, readExpected.shift(), 'ondata should match')
+ })
+ dup.on('end', function() {
+ t.ok(true, 'should end')
+ })
+ dup.on('finish', function() {
+ t.ok(true, 'should finish')
+ })
+})
+
+tape('async', function(t) {
+ var dup = duplexify()
+ var pt = through()
+
+ dup.pipe(concat(function(data) {
+ t.same(data.toString(), 'i was async', 'same in as out')
+ t.end()
+ }))
+
+ dup.write('i')
+ dup.write(' was ')
+ dup.end('async')
+
+ setTimeout(function() {
+ dup.setWritable(pt)
+ setTimeout(function() {
+ dup.setReadable(pt)
+ }, 50)
+ }, 50)
+})
+
+tape('destroy', function(t) {
+ t.plan(2)
+
+ var write = through()
+ var read = through()
+ var dup = duplexify(write, read)
+
+ write.destroy = function() {
+ t.ok(true, 'write destroyed')
+ }
+
+ dup.on('close', function() {
+ t.ok(true, 'close emitted')
+ })
+
+ dup.destroy()
+ dup.destroy() // should only work once
+})
+
+tape('destroy both', function(t) {
+ t.plan(3)
+
+ var write = through()
+ var read = through()
+ var dup = duplexify(write, read)
+
+ write.destroy = function() {
+ t.ok(true, 'write destroyed')
+ }
+
+ read.destroy = function() {
+ t.ok(true, 'read destroyed')
+ }
+
+ dup.on('close', function() {
+ t.ok(true, 'close emitted')
+ })
+
+ dup.destroy()
+ dup.destroy() // should only work once
+})
+
+tape('bubble read errors', function(t) {
+ t.plan(2)
+
+ var write = through()
+ var read = through()
+ var dup = duplexify(write, read)
+
+ dup.on('error', function(err) {
+ t.same(err.message, 'read-error', 'received read error')
+ })
+ dup.on('close', function() {
+ t.ok(true, 'close emitted')
+ })
+
+ read.emit('error', new Error('read-error'))
+ write.emit('error', new Error('write-error')) // only emit first error
+})
+
+tape('bubble write errors', function(t) {
+ t.plan(2)
+
+ var write = through()
+ var read = through()
+ var dup = duplexify(write, read)
+
+ dup.on('error', function(err) {
+ t.same(err.message, 'write-error', 'received write error')
+ })
+ dup.on('close', function() {
+ t.ok(true, 'close emitted')
+ })
+
+ write.emit('error', new Error('write-error'))
+ read.emit('error', new Error('read-error')) // only emit first error
+})
+
+tape('reset writable / readable', function(t) {
+ t.plan(3)
+
+ var toUpperCase = function(data, enc, cb) {
+ cb(null, data.toString().toUpperCase())
+ }
+
+ var passthrough = through()
+ var upper = through(toUpperCase)
+ var dup = duplexify(passthrough, passthrough)
+
+ dup.once('data', function(data) {
+ t.same(data.toString(), 'hello')
+ dup.setWritable(upper)
+ dup.setReadable(upper)
+ dup.once('data', function(data) {
+ t.same(data.toString(), 'HELLO')
+ dup.once('data', function(data) {
+ t.same(data.toString(), 'HI')
+ t.end()
+ })
+ })
+ dup.write('hello')
+ dup.write('hi')
+ })
+ dup.write('hello')
+})
+
+tape('cork', function(t) {
+ var passthrough = through()
+ var dup = duplexify(passthrough, passthrough)
+ var ok = false
+
+ dup.on('prefinish', function() {
+ dup.cork()
+ setTimeout(function() {
+ ok = true
+ dup.uncork()
+ }, 100)
+ })
+ dup.on('finish', function() {
+ t.ok(ok)
+ t.end()
+ })
+ dup.end()
+})
+
+tape('prefinish not twice', function(t) {
+ var passthrough = through()
+ var dup = duplexify(passthrough, passthrough)
+ var prefinished = false
+
+ dup.on('prefinish', function() {
+ t.ok(!prefinished, 'only prefinish once')
+ prefinished = true
+ })
+
+ dup.on('finish', function() {
+ t.end()
+ })
+
+ dup.end()
+})
+
+tape('close', function(t) {
+ var passthrough = through()
+ var dup = duplexify(passthrough, passthrough)
+
+ passthrough.emit('close')
+ dup.on('close', function() {
+ t.ok(true, 'should forward close')
+ t.end()
+ })
+})
+
+tape('works with node native streams (net)', function(t) {
+ t.plan(1)
+
+ var server = net.createServer(function(socket) {
+ var dup = duplexify(socket, socket)
+
+ dup.once('data', function(chunk) {
+ t.same(chunk, HELLO_WORLD)
+ server.close()
+ socket.end()
+ t.end()
+ })
+ })
+
+ server.listen(0, function () {
+ var socket = net.connect(server.address().port)
+ var dup = duplexify(socket, socket)
+
+ dup.write(HELLO_WORLD)
+ })
+})
diff --git a/node_modules/each-props/LICENSE b/node_modules/each-props/LICENSE
new file mode 100644
index 0000000..39223b4
--- /dev/null
+++ b/node_modules/each-props/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Takayuki Sato
+
+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/node_modules/each-props/README.md b/node_modules/each-props/README.md
new file mode 100644
index 0000000..4ba167b
--- /dev/null
+++ b/node_modules/each-props/README.md
@@ -0,0 +1,125 @@
+# [each-props][repo-url] [![NPM][npm-img]][npm-url] [![MIT License][mit-img]][mit-url] [![Build Status][travis-img]][travis-url] [![Build Status][appveyor-img]][appveyor-url] [![Coverage Status][coverage-img]][coverage-url]
+
+Processes each properties of an object deeply.
+
+## Install
+
+To install from npm:
+
+```sh
+$ npm i each-props --save
+```
+
+## Load this module
+
+For Node.js:
+
+```js
+const eachProps = require('each-props');
+```
+
+For Web browser:
+
+```html
+
+```
+
+## Usage
+
+Apply a function to all (non plain object) properties.
+
+```js
+var obj = { a: 1, b: { c: 'CCC', d: { e: 'EEE' } } };
+
+eachProps(obj, function(value, keyChain, nodeInfo) {
+ if (keyChain === 'a') {
+ nodeInfo.parent['a'] = value * 2;
+ } else if (keyChain === 'b.c') {
+ nodeInfo.parent['c'] = value.toLowerCase();
+ } else if (keyChain === 'b.d') {
+ return true; // stop to dig
+ } else if (keyChain === 'b.d.e') {
+ nodeInfo.parent['e'] = value.toLowerCase();
+ }
+});
+
+console.log(obj);
+// => { a: 2, b: { c: 'ccc', d: { e: 'EEE' } } };
+```
+
+## API
+
+### eachProps(obj, fn [, opts]) : void
+
+Executes the *fn* function for all properties.
+
+#### Parameters:
+
+| Parameter | Type | Description |
+|:------------|:------:|:-----------------------------------------------|
+| *obj* | object | A plain object to be treated. |
+| *fn* |function| A function to operate each properties. |
+| *opts* | object | An object to pass any data to each properties. |
+
+* **API of *fn* function**
+
+ #### fn(value, keyChain, nodeInfo) : boolean
+
+ This function is applied to all properties in an object.
+
+ ##### Parameters:
+
+ | Parameter | Type | Description |
+ |:------------|:------:|:-----------------------------------------------|
+ | *value* | any | A property value. |
+ | *keyChain* | string | A string concatenating the hierarchical keys with dots. |
+ | *nodeInfo* | object | An object which contains node informations (See [below](#nodeinfo)). |
+
+ ##### Returns:
+
+ True, if stops digging child properties.
+
+ **Type:** boolean
+
+
+
+* **Properties of nodeInfo **
+
+ | Properties | Type | Description |
+ |:-------------|:------:|:-----------------------------------------|
+ | *name* | string | The property name of this node. |
+ | *index* | number | The index of the property among the sibling properties. |
+ | *count* | number | The count of the sibling properties. |
+ | *depth* | number | The depth of the property. |
+ | *parent* | object | The parent node of the property. |
+ | *sort* |function| A sort function which orders the child properties. This function is inherited from *opts*, if be specified. |
+
+ ... and any properties inherited from *opts*.
+
+* **Properties of opts **
+
+ | Properties | Type | Description |
+ |:-------------|:------:|:-----------------------------------------|
+ | *sort* |function| A sort function which orders the same level properties. (Optional) |
+
+ ... and any properties you want to pass to each node.
+
+## License
+
+Copyright (C) 2016-2018 Takayuki Sato
+
+This program is free software under [MIT][mit-url] License.
+See the file LICENSE in this distribution for more details.
+
+[repo-url]: https://github.com/sttk/each-props/
+[npm-img]: https://img.shields.io/badge/npm-v1.3.2-blue.svg
+[npm-url]: https://www.npmjs.org/package/each-props/
+[mit-img]: https://img.shields.io/badge/license-MIT-green.svg
+[mit-url]: https://opensource.org/licenses.MIT
+[travis-img]: https://travis-ci.org/sttk/each-props.svg?branch=master
+[travis-url]: https://travis-ci.org/sttk/each-props
+[appveyor-img]: https://ci.appveyor.com/api/projects/status/github/sttk/each-props?branch=master&svg=true
+[appveyor-url]: https://ci.appveyor.com/project/sttk/each-props
+[coverage-img]: https://coveralls.io/repos/github/sttk/each-props/badge.svg?branch=master
+[coverage-url]: https://coveralls.io/github/sttk/each-props?branch=master
+
diff --git a/node_modules/each-props/index.js b/node_modules/each-props/index.js
new file mode 100644
index 0000000..ce61aeb
--- /dev/null
+++ b/node_modules/each-props/index.js
@@ -0,0 +1,57 @@
+'use strict';
+
+var isPlainObject = require('is-plain-object');
+var defaults = require('object.defaults/immutable');
+
+module.exports = function(obj, fn, opts) {
+ if (!isObject(obj)) {
+ return;
+ }
+
+ if (typeof fn !== 'function') {
+ return;
+ }
+
+ if (!isPlainObject(opts)) {
+ opts = {};
+ }
+
+ forEachChild(obj, '', fn, 0, opts);
+};
+
+function forEachChild(node, baseKey, fn, depth, opts) {
+ var keys = Object.keys(node);
+ if (typeof opts.sort === 'function') {
+ var sortedKeys = opts.sort(keys);
+ if (Array.isArray(sortedKeys)) {
+ keys = sortedKeys;
+ }
+ }
+
+ depth += 1;
+
+ for (var i = 0, n = keys.length; i < n; i++) {
+ var key = keys[i];
+ var keyChain = baseKey + '.' + key;
+ var value = node[key];
+
+ var nodeInfo = defaults(opts);
+ nodeInfo.name = key;
+ nodeInfo.index = i;
+ nodeInfo.count = n;
+ nodeInfo.depth = depth;
+ nodeInfo.parent = node;
+
+ var notDigg = fn(value, keyChain.slice(1), nodeInfo);
+ if (notDigg || !isPlainObject(value)) {
+ continue;
+ }
+
+ forEachChild(value, keyChain, fn, depth, opts);
+ }
+}
+
+function isObject(v) {
+ return Object.prototype.toString.call(v) === '[object Object]';
+}
+
diff --git a/node_modules/each-props/node_modules/is-plain-object/LICENSE b/node_modules/each-props/node_modules/is-plain-object/LICENSE
new file mode 100644
index 0000000..3f2eca1
--- /dev/null
+++ b/node_modules/each-props/node_modules/is-plain-object/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+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/node_modules/each-props/node_modules/is-plain-object/README.md b/node_modules/each-props/node_modules/is-plain-object/README.md
new file mode 100644
index 0000000..1f9d0c8
--- /dev/null
+++ b/node_modules/each-props/node_modules/is-plain-object/README.md
@@ -0,0 +1,104 @@
+# is-plain-object [![NPM version](https://img.shields.io/npm/v/is-plain-object.svg?style=flat)](https://www.npmjs.com/package/is-plain-object) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-plain-object.svg?style=flat)](https://npmjs.org/package/is-plain-object) [![NPM total downloads](https://img.shields.io/npm/dt/is-plain-object.svg?style=flat)](https://npmjs.org/package/is-plain-object) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-plain-object.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-plain-object)
+
+> Returns true if an object was created by the `Object` constructor.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-plain-object
+```
+
+Use [isobject](https://github.com/jonschlinkert/isobject) if you only want to check if the value is an object and not an array or null.
+
+## Usage
+
+```js
+var isPlainObject = require('is-plain-object');
+```
+
+**true** when created by the `Object` constructor.
+
+```js
+isPlainObject(Object.create({}));
+//=> true
+isPlainObject(Object.create(Object.prototype));
+//=> true
+isPlainObject({foo: 'bar'});
+//=> true
+isPlainObject({});
+//=> true
+```
+
+**false** when not created by the `Object` constructor.
+
+```js
+isPlainObject(1);
+//=> false
+isPlainObject(['foo', 'bar']);
+//=> false
+isPlainObject([]);
+//=> false
+isPlainObject(new Foo);
+//=> false
+isPlainObject(null);
+//=> false
+isPlainObject(Object.create(null));
+//=> false
+```
+
+## About
+
+### Related projects
+
+* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.")
+* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject "Returns true if the value is an object and not an array or null.")
+* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 17 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 6 | [stevenvachon](https://github.com/stevenvachon) |
+| 3 | [onokumus](https://github.com/onokumus) |
+| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on July 11, 2017._
\ No newline at end of file
diff --git a/node_modules/each-props/node_modules/is-plain-object/index.d.ts b/node_modules/each-props/node_modules/is-plain-object/index.d.ts
new file mode 100644
index 0000000..74a44e9
--- /dev/null
+++ b/node_modules/each-props/node_modules/is-plain-object/index.d.ts
@@ -0,0 +1,5 @@
+export = isPlainObject;
+
+declare function isPlainObject(o: any): boolean;
+
+declare namespace isPlainObject {}
diff --git a/node_modules/each-props/node_modules/is-plain-object/index.js b/node_modules/each-props/node_modules/is-plain-object/index.js
new file mode 100644
index 0000000..c328484
--- /dev/null
+++ b/node_modules/each-props/node_modules/is-plain-object/index.js
@@ -0,0 +1,37 @@
+/*!
+ * is-plain-object
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var isObject = require('isobject');
+
+function isObjectObject(o) {
+ return isObject(o) === true
+ && Object.prototype.toString.call(o) === '[object Object]';
+}
+
+module.exports = function isPlainObject(o) {
+ var ctor,prot;
+
+ if (isObjectObject(o) === false) return false;
+
+ // If has modified constructor
+ ctor = o.constructor;
+ if (typeof ctor !== 'function') return false;
+
+ // If has modified prototype
+ prot = ctor.prototype;
+ if (isObjectObject(prot) === false) return false;
+
+ // If constructor does not have an Object-specific method
+ if (prot.hasOwnProperty('isPrototypeOf') === false) {
+ return false;
+ }
+
+ // Most likely a plain Object
+ return true;
+};
diff --git a/node_modules/each-props/node_modules/is-plain-object/package.json b/node_modules/each-props/node_modules/is-plain-object/package.json
new file mode 100644
index 0000000..dd60498
--- /dev/null
+++ b/node_modules/each-props/node_modules/is-plain-object/package.json
@@ -0,0 +1,79 @@
+{
+ "name": "is-plain-object",
+ "description": "Returns true if an object was created by the `Object` constructor.",
+ "version": "2.0.4",
+ "homepage": "https://github.com/jonschlinkert/is-plain-object",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Osman Nuri Okumuş (http://onokumus.com)",
+ "Steven Vachon (https://svachon.com)",
+ "(https://github.com/wtgtybhertgeghgtwtg)"
+ ],
+ "repository": "jonschlinkert/is-plain-object",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-plain-object/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.d.ts",
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "browserify": "browserify index.js --standalone isPlainObject | uglifyjs --compress --mangle -o browser/is-plain-object.js",
+ "test_browser": "mocha-phantomjs test/browser.html",
+ "test_node": "mocha",
+ "test": "npm run test_node && npm run browserify && npm run test_browser"
+ },
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "devDependencies": {
+ "browserify": "^14.4.0",
+ "chai": "^4.0.2",
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.4.2",
+ "mocha-phantomjs": "^4.1.0",
+ "phantomjs": "^2.1.7",
+ "uglify-js": "^3.0.24"
+ },
+ "keywords": [
+ "check",
+ "is",
+ "is-object",
+ "isobject",
+ "javascript",
+ "kind",
+ "kind-of",
+ "object",
+ "plain",
+ "type",
+ "typeof",
+ "value"
+ ],
+ "types": "index.d.ts",
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "is-number",
+ "isobject",
+ "kind-of"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/each-props/package.json b/node_modules/each-props/package.json
new file mode 100644
index 0000000..d6476e9
--- /dev/null
+++ b/node_modules/each-props/package.json
@@ -0,0 +1,50 @@
+{
+ "name": "each-props",
+ "version": "1.3.2",
+ "description": "Processes each properties of an object deeply.",
+ "main": "index.js",
+ "files": [
+ "index.js"
+ ],
+ "scripts": {
+ "lint": "eslint .",
+ "test": "mocha",
+ "coverage": "nyc --reporter=lcov --reporter=text-summary npm test",
+ "coveralls": "nyc --reporter=text-lcov npm test | coveralls",
+ "web:build": "browserify index.js --standalone eachProps -o web/each-props.js && cd web && uglifyjs each-props.js --compress --mangle -o each-props.min.js --source-map url=each-props.min.js.map",
+ "chrome:install": "npm i --no-save mocha-chrome",
+ "chrome:test": "mocha-chrome test/web/browser-test.html",
+ "build": "npm run lint && npm run coverage && npm run web:build && node test/web/make.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/sttk/each-props.git"
+ },
+ "keywords": [
+ "deep",
+ "each",
+ "object",
+ "property",
+ "properties",
+ "props"
+ ],
+ "author": "Takayuki Sato",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/sttk/each-props/issues"
+ },
+ "homepage": "https://github.com/sttk/each-props#readme",
+ "dependencies": {
+ "is-plain-object": "^2.0.1",
+ "object.defaults": "^1.1.0"
+ },
+ "devDependencies": {
+ "browserify": "^16.2.2",
+ "chai": "^3.5.0",
+ "coveralls": "^3.0.1",
+ "eslint": "^4.19.1",
+ "mocha": "^3.2.0",
+ "nyc": "^11.7.2",
+ "uglify-js": "^3.3.24"
+ }
+}
diff --git a/node_modules/end-of-stream/LICENSE b/node_modules/end-of-stream/LICENSE
new file mode 100644
index 0000000..757562e
--- /dev/null
+++ b/node_modules/end-of-stream/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Mathias Buus
+
+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.
\ No newline at end of file
diff --git a/node_modules/end-of-stream/README.md b/node_modules/end-of-stream/README.md
new file mode 100644
index 0000000..857b14b
--- /dev/null
+++ b/node_modules/end-of-stream/README.md
@@ -0,0 +1,54 @@
+# end-of-stream
+
+A node module that calls a callback when a readable/writable/duplex stream has completed or failed.
+
+ npm install end-of-stream
+
+[![Build status](https://travis-ci.org/mafintosh/end-of-stream.svg?branch=master)](https://travis-ci.org/mafintosh/end-of-stream)
+
+## Usage
+
+Simply pass a stream and a callback to the `eos`.
+Both legacy streams, streams2 and stream3 are supported.
+
+``` js
+var eos = require('end-of-stream');
+
+eos(readableStream, function(err) {
+ // this will be set to the stream instance
+ if (err) return console.log('stream had an error or closed early');
+ console.log('stream has ended', this === readableStream);
+});
+
+eos(writableStream, function(err) {
+ if (err) return console.log('stream had an error or closed early');
+ console.log('stream has finished', this === writableStream);
+});
+
+eos(duplexStream, function(err) {
+ if (err) return console.log('stream had an error or closed early');
+ console.log('stream has ended and finished', this === duplexStream);
+});
+
+eos(duplexStream, {readable:false}, function(err) {
+ if (err) return console.log('stream had an error or closed early');
+ console.log('stream has finished but might still be readable');
+});
+
+eos(duplexStream, {writable:false}, function(err) {
+ if (err) return console.log('stream had an error or closed early');
+ console.log('stream has ended but might still be writable');
+});
+
+eos(readableStream, {error:false}, function(err) {
+ // do not treat emit('error', err) as a end-of-stream
+});
+```
+
+## License
+
+MIT
+
+## Related
+
+`end-of-stream` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one.
diff --git a/node_modules/end-of-stream/index.js b/node_modules/end-of-stream/index.js
new file mode 100644
index 0000000..c77f0d5
--- /dev/null
+++ b/node_modules/end-of-stream/index.js
@@ -0,0 +1,94 @@
+var once = require('once');
+
+var noop = function() {};
+
+var isRequest = function(stream) {
+ return stream.setHeader && typeof stream.abort === 'function';
+};
+
+var isChildProcess = function(stream) {
+ return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3
+};
+
+var eos = function(stream, opts, callback) {
+ if (typeof opts === 'function') return eos(stream, null, opts);
+ if (!opts) opts = {};
+
+ callback = once(callback || noop);
+
+ var ws = stream._writableState;
+ var rs = stream._readableState;
+ var readable = opts.readable || (opts.readable !== false && stream.readable);
+ var writable = opts.writable || (opts.writable !== false && stream.writable);
+ var cancelled = false;
+
+ var onlegacyfinish = function() {
+ if (!stream.writable) onfinish();
+ };
+
+ var onfinish = function() {
+ writable = false;
+ if (!readable) callback.call(stream);
+ };
+
+ var onend = function() {
+ readable = false;
+ if (!writable) callback.call(stream);
+ };
+
+ var onexit = function(exitCode) {
+ callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);
+ };
+
+ var onerror = function(err) {
+ callback.call(stream, err);
+ };
+
+ var onclose = function() {
+ process.nextTick(onclosenexttick);
+ };
+
+ var onclosenexttick = function() {
+ if (cancelled) return;
+ if (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));
+ if (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));
+ };
+
+ var onrequest = function() {
+ stream.req.on('finish', onfinish);
+ };
+
+ if (isRequest(stream)) {
+ stream.on('complete', onfinish);
+ stream.on('abort', onclose);
+ if (stream.req) onrequest();
+ else stream.on('request', onrequest);
+ } else if (writable && !ws) { // legacy streams
+ stream.on('end', onlegacyfinish);
+ stream.on('close', onlegacyfinish);
+ }
+
+ if (isChildProcess(stream)) stream.on('exit', onexit);
+
+ stream.on('end', onend);
+ stream.on('finish', onfinish);
+ if (opts.error !== false) stream.on('error', onerror);
+ stream.on('close', onclose);
+
+ return function() {
+ cancelled = true;
+ stream.removeListener('complete', onfinish);
+ stream.removeListener('abort', onclose);
+ stream.removeListener('request', onrequest);
+ if (stream.req) stream.req.removeListener('finish', onfinish);
+ stream.removeListener('end', onlegacyfinish);
+ stream.removeListener('close', onlegacyfinish);
+ stream.removeListener('finish', onfinish);
+ stream.removeListener('exit', onexit);
+ stream.removeListener('end', onend);
+ stream.removeListener('error', onerror);
+ stream.removeListener('close', onclose);
+ };
+};
+
+module.exports = eos;
diff --git a/node_modules/end-of-stream/package.json b/node_modules/end-of-stream/package.json
new file mode 100644
index 0000000..b75bbf0
--- /dev/null
+++ b/node_modules/end-of-stream/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "end-of-stream",
+ "version": "1.4.4",
+ "description": "Call a callback when a readable/writable/duplex stream has completed or failed.",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/mafintosh/end-of-stream.git"
+ },
+ "dependencies": {
+ "once": "^1.4.0"
+ },
+ "scripts": {
+ "test": "node test.js"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "stream",
+ "streams",
+ "callback",
+ "finish",
+ "close",
+ "end",
+ "wait"
+ ],
+ "bugs": {
+ "url": "https://github.com/mafintosh/end-of-stream/issues"
+ },
+ "homepage": "https://github.com/mafintosh/end-of-stream",
+ "main": "index.js",
+ "author": "Mathias Buus ",
+ "license": "MIT",
+ "devDependencies": {
+ "tape": "^4.11.0"
+ }
+}
diff --git a/node_modules/error-ex/LICENSE b/node_modules/error-ex/LICENSE
new file mode 100644
index 0000000..0a5f461
--- /dev/null
+++ b/node_modules/error-ex/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 JD Ballard
+
+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/node_modules/error-ex/README.md b/node_modules/error-ex/README.md
new file mode 100644
index 0000000..97f744a
--- /dev/null
+++ b/node_modules/error-ex/README.md
@@ -0,0 +1,144 @@
+# node-error-ex [![Travis-CI.org Build Status](https://img.shields.io/travis/Qix-/node-error-ex.svg?style=flat-square)](https://travis-ci.org/Qix-/node-error-ex) [![Coveralls.io Coverage Rating](https://img.shields.io/coveralls/Qix-/node-error-ex.svg?style=flat-square)](https://coveralls.io/r/Qix-/node-error-ex)
+> Easily subclass and customize new Error types
+
+## Examples
+To include in your project:
+```javascript
+var errorEx = require('error-ex');
+```
+
+To create an error message type with a specific name (note, that `ErrorFn.name`
+will not reflect this):
+```javascript
+var JSONError = errorEx('JSONError');
+
+var err = new JSONError('error');
+err.name; //-> JSONError
+throw err; //-> JSONError: error
+```
+
+To add a stack line:
+```javascript
+var JSONError = errorEx('JSONError', {fileName: errorEx.line('in %s')});
+
+var err = new JSONError('error')
+err.fileName = '/a/b/c/foo.json';
+throw err; //-> (line 2)-> in /a/b/c/foo.json
+```
+
+To append to the error message:
+```javascript
+var JSONError = errorEx('JSONError', {fileName: errorEx.append('in %s')});
+
+var err = new JSONError('error');
+err.fileName = '/a/b/c/foo.json';
+throw err; //-> JSONError: error in /a/b/c/foo.json
+```
+
+## API
+
+#### `errorEx([name], [properties])`
+Creates a new ErrorEx error type
+
+- `name`: the name of the new type (appears in the error message upon throw;
+ defaults to `Error.name`)
+- `properties`: if supplied, used as a key/value dictionary of properties to
+ use when building up the stack message. Keys are property names that are
+ looked up on the error message, and then passed to function values.
+ - `line`: if specified and is a function, return value is added as a stack
+ entry (error-ex will indent for you). Passed the property value given
+ the key.
+ - `stack`: if specified and is a function, passed the value of the property
+ using the key, and the raw stack lines as a second argument. Takes no
+ return value (but the stack can be modified directly).
+ - `message`: if specified and is a function, return value is used as new
+ `.message` value upon get. Passed the property value of the property named
+ by key, and the existing message is passed as the second argument as an
+ array of lines (suitable for multi-line messages).
+
+Returns a constructor (Function) that can be used just like the regular Error
+constructor.
+
+```javascript
+var errorEx = require('error-ex');
+
+var BasicError = errorEx();
+
+var NamedError = errorEx('NamedError');
+
+// --
+
+var AdvancedError = errorEx('AdvancedError', {
+ foo: {
+ line: function (value, stack) {
+ if (value) {
+ return 'bar ' + value;
+ }
+ return null;
+ }
+ }
+}
+
+var err = new AdvancedError('hello, world');
+err.foo = 'baz';
+throw err;
+
+/*
+ AdvancedError: hello, world
+ bar baz
+ at tryReadme() (readme.js:20:1)
+*/
+```
+
+#### `errorEx.line(str)`
+Creates a stack line using a delimiter
+
+> This is a helper function. It is to be used in lieu of writing a value object
+> for `properties` values.
+
+- `str`: The string to create
+ - Use the delimiter `%s` to specify where in the string the value should go
+
+```javascript
+var errorEx = require('error-ex');
+
+var FileError = errorEx('FileError', {fileName: errorEx.line('in %s')});
+
+var err = new FileError('problem reading file');
+err.fileName = '/a/b/c/d/foo.js';
+throw err;
+
+/*
+ FileError: problem reading file
+ in /a/b/c/d/foo.js
+ at tryReadme() (readme.js:7:1)
+*/
+```
+
+#### `errorEx.append(str)`
+Appends to the `error.message` string
+
+> This is a helper function. It is to be used in lieu of writing a value object
+> for `properties` values.
+
+- `str`: The string to append
+ - Use the delimiter `%s` to specify where in the string the value should go
+
+```javascript
+var errorEx = require('error-ex');
+
+var SyntaxError = errorEx('SyntaxError', {fileName: errorEx.append('in %s')});
+
+var err = new SyntaxError('improper indentation');
+err.fileName = '/a/b/c/d/foo.js';
+throw err;
+
+/*
+ SyntaxError: improper indentation in /a/b/c/d/foo.js
+ at tryReadme() (readme.js:7:1)
+*/
+```
+
+## License
+Licensed under the [MIT License](http://opensource.org/licenses/MIT).
+You can find a copy of it in [LICENSE](LICENSE).
diff --git a/node_modules/error-ex/index.js b/node_modules/error-ex/index.js
new file mode 100644
index 0000000..4fb20b4
--- /dev/null
+++ b/node_modules/error-ex/index.js
@@ -0,0 +1,141 @@
+'use strict';
+
+var util = require('util');
+var isArrayish = require('is-arrayish');
+
+var errorEx = function errorEx(name, properties) {
+ if (!name || name.constructor !== String) {
+ properties = name || {};
+ name = Error.name;
+ }
+
+ var errorExError = function ErrorEXError(message) {
+ if (!this) {
+ return new ErrorEXError(message);
+ }
+
+ message = message instanceof Error
+ ? message.message
+ : (message || this.message);
+
+ Error.call(this, message);
+ Error.captureStackTrace(this, errorExError);
+
+ this.name = name;
+
+ Object.defineProperty(this, 'message', {
+ configurable: true,
+ enumerable: false,
+ get: function () {
+ var newMessage = message.split(/\r?\n/g);
+
+ for (var key in properties) {
+ if (!properties.hasOwnProperty(key)) {
+ continue;
+ }
+
+ var modifier = properties[key];
+
+ if ('message' in modifier) {
+ newMessage = modifier.message(this[key], newMessage) || newMessage;
+ if (!isArrayish(newMessage)) {
+ newMessage = [newMessage];
+ }
+ }
+ }
+
+ return newMessage.join('\n');
+ },
+ set: function (v) {
+ message = v;
+ }
+ });
+
+ var overwrittenStack = null;
+
+ var stackDescriptor = Object.getOwnPropertyDescriptor(this, 'stack');
+ var stackGetter = stackDescriptor.get;
+ var stackValue = stackDescriptor.value;
+ delete stackDescriptor.value;
+ delete stackDescriptor.writable;
+
+ stackDescriptor.set = function (newstack) {
+ overwrittenStack = newstack;
+ };
+
+ stackDescriptor.get = function () {
+ var stack = (overwrittenStack || ((stackGetter)
+ ? stackGetter.call(this)
+ : stackValue)).split(/\r?\n+/g);
+
+ // starting in Node 7, the stack builder caches the message.
+ // just replace it.
+ if (!overwrittenStack) {
+ stack[0] = this.name + ': ' + this.message;
+ }
+
+ var lineCount = 1;
+ for (var key in properties) {
+ if (!properties.hasOwnProperty(key)) {
+ continue;
+ }
+
+ var modifier = properties[key];
+
+ if ('line' in modifier) {
+ var line = modifier.line(this[key]);
+ if (line) {
+ stack.splice(lineCount++, 0, ' ' + line);
+ }
+ }
+
+ if ('stack' in modifier) {
+ modifier.stack(this[key], stack);
+ }
+ }
+
+ return stack.join('\n');
+ };
+
+ Object.defineProperty(this, 'stack', stackDescriptor);
+ };
+
+ if (Object.setPrototypeOf) {
+ Object.setPrototypeOf(errorExError.prototype, Error.prototype);
+ Object.setPrototypeOf(errorExError, Error);
+ } else {
+ util.inherits(errorExError, Error);
+ }
+
+ return errorExError;
+};
+
+errorEx.append = function (str, def) {
+ return {
+ message: function (v, message) {
+ v = v || def;
+
+ if (v) {
+ message[0] += ' ' + str.replace('%s', v.toString());
+ }
+
+ return message;
+ }
+ };
+};
+
+errorEx.line = function (str, def) {
+ return {
+ line: function (v) {
+ v = v || def;
+
+ if (v) {
+ return str.replace('%s', v.toString());
+ }
+
+ return null;
+ }
+ };
+};
+
+module.exports = errorEx;
diff --git a/node_modules/error-ex/package.json b/node_modules/error-ex/package.json
new file mode 100644
index 0000000..f3d9ae0
--- /dev/null
+++ b/node_modules/error-ex/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "error-ex",
+ "description": "Easy error subclassing and stack customization",
+ "version": "1.3.2",
+ "maintainers": [
+ "Josh Junon (github.com/qix-)",
+ "Sindre Sorhus (sindresorhus.com)"
+ ],
+ "keywords": [
+ "error",
+ "errors",
+ "extend",
+ "extending",
+ "extension",
+ "subclass",
+ "stack",
+ "custom"
+ ],
+ "license": "MIT",
+ "scripts": {
+ "pretest": "xo",
+ "test": "mocha --compilers coffee:coffee-script/register"
+ },
+ "xo": {
+ "rules": {
+ "operator-linebreak": [
+ 0
+ ]
+ }
+ },
+ "repository": "qix-/node-error-ex",
+ "files": [
+ "index.js"
+ ],
+ "devDependencies": {
+ "coffee-script": "^1.9.3",
+ "coveralls": "^2.11.2",
+ "istanbul": "^0.3.17",
+ "mocha": "^2.2.5",
+ "should": "^7.0.1",
+ "xo": "^0.7.1"
+ },
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+}
diff --git a/node_modules/es5-ext/CHANGELOG.md b/node_modules/es5-ext/CHANGELOG.md
new file mode 100644
index 0000000..60bcd02
--- /dev/null
+++ b/node_modules/es5-ext/CHANGELOG.md
@@ -0,0 +1,389 @@
+# Changelog
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+### [0.10.62](https://github.com/medikoo/es5-ext/compare/v0.10.61...v0.10.62) (2022-08-02)
+
+### Maintenance Improvements
+
+- **Manifest improvements:**
+ - ([#190](https://github.com/medikoo/es5-ext/issues/190)) ([b8dc53f](https://github.com/medikoo/es5-ext/commit/b8dc53fa439b98541644c64c1275f25d9f2e2235))
+ - ([c51d552](https://github.com/medikoo/es5-ext/commit/c51d552c03967858b8f14a4afa305338ba648cce))
+
+### [0.10.61](https://github.com/medikoo/es5-ext/compare/v0.10.60...v0.10.61) (2022-04-20)
+
+### Bug Fixes
+
+- Ensure postinstall script does not error ([a0be4fd](https://github.com/medikoo/es5-ext/commit/a0be4fdacdbc3aefd6f2952b7b9215827d362bbb))
+
+### Maintenance Improvements
+
+- Bump dependencies ([d7e0a61](https://github.com/medikoo/es5-ext/commit/d7e0a612b7d895c1c7238c779feae1e39d4634c4))
+
+### [0.10.60](https://github.com/medikoo/es5-ext/compare/v0.10.59...v0.10.60) (2022-04-07)
+
+### Maintenance Improvements
+
+- Improve `postinstall` script configuration ([ab6b121](https://github.com/medikoo/es5-ext/commit/ab6b121f0ca4f033bba9b6f400b24d07869bd716))
+
+### [0.10.59](https://github.com/medikoo/es5-ext/compare/v0.10.58...v0.10.59) (2022-03-17)
+
+### Maintenance Improvements
+
+- Improve manifest wording ([#122](https://github.com/medikoo/es5-ext/issues/122)) ([eb7ae59](https://github.com/medikoo/es5-ext/commit/eb7ae59966774a8c26f1717415c627d90bb3d954))
+- Update data in manifest ([3d2935a](https://github.com/medikoo/es5-ext/commit/3d2935ac6f1a0969c7569840d5b3bdeed6940e56))
+
+### [0.10.58](https://github.com/medikoo/es5-ext/compare/v0.10.57...v0.10.58) (2022-03-11)
+
+### Maintenance Improvements
+
+- Improve "call for peace" manifest ([3beace4](https://github.com/medikoo/es5-ext/commit/3beace4b3d00f02da61b72dd328f90cf069d46de))
+
+### [0.10.57](https://github.com/medikoo/es5-ext/compare/v0.10.56...v0.10.57) (2022-03-08)
+
+### Bug Fixes
+
+- Workaround `postinstall` script prevent npx error ([#110](https://github.com/medikoo/es5-ext/issues/110)) ([e212d5a](https://github.com/medikoo/es5-ext/commit/e212d5a0adf186f1fadf85fdc07aab25085ee097)) ([martindrq](https://github.com/martindrq))
+
+### [0.10.56](https://github.com/medikoo/es5-ext/compare/v0.10.55...v0.10.56) (2022-03-07)
+
+### Maintenance Improvements
+
+- Add missing shebang to postinstall script ([e423fd7](https://github.com/medikoo/es5-ext/commit/e423fd7264c4f145921e461037d571b35b6a9833))
+
+### [0.10.55](https://github.com/medikoo/es5-ext/compare/v0.10.54...v0.10.55) (2022-03-07)
+
+### Maintenance Improvements
+
+- Configure `.npmignore` file (exclude tests from publication) ([d3ed4b6](https://github.com/medikoo/es5-ext/commit/d3ed4b6a873900a2abf3957bbebdcf18c4e564e0))
+
+### [0.10.54](https://github.com/medikoo/es5-ext/compare/v0.10.53...v0.10.54) (2022-03-07)
+
+### Maintenance Improvements
+
+- Convert dependency ranges ([765eb8e](https://github.com/medikoo/es5-ext/commit/765eb8e897cabc76f0351443d84b4843a1187b27))
+- Give Peace a Chance ([28de285](https://github.com/medikoo/es5-ext/commit/28de285ed433b45113f01e4ce7c74e9a356b2af2))
+
+### [0.10.53](https://github.com/medikoo/es5-ext/compare/v0.10.52...v0.10.53) (2019-11-21)
+
+_Maintenance improvements_
+
+### [0.10.52](https://github.com/medikoo/es5-ext/compare/v0.10.51...v0.10.52) (2019-10-29)
+
+### Bug Fixes
+
+- Fix global resolution for Safari ([00731d2](https://github.com/medikoo/es5-ext/commit/00731d2))
+- Keep support for old Node.js versions ([2fa2a11](https://github.com/medikoo/es5-ext/commit/2fa2a11))
+
+### [0.10.51](https://github.com/medikoo/es5-ext/compare/v0.10.50...v0.10.51) (2019-08-30)
+
+### Bug Fixes
+
+- Ensure Function.isFunction recognizes async functions ([6f06e66](https://github.com/medikoo/es5-ext/commit/6f06e66))
+
+### Tests
+
+- Fix after prettification changes ([dd6fc3f](https://github.com/medikoo/es5-ext/commit/dd6fc3f))
+
+## [0.10.50](https://github.com/medikoo/es5-ext/compare/v0.10.49...v0.10.50) (2019-04-30)
+
+### Bug Fixes
+
+- maximum time value reference ([708202d](https://github.com/medikoo/es5-ext/commit/708202d))
+
+### Features
+
+- ensure global resolves in strict mode ([c6a19d7](https://github.com/medikoo/es5-ext/commit/c6a19d7)), closes [#86](https://github.com/medikoo/es5-ext/issues/86)
+
+## [0.10.49](https://github.com/medikoo/es5-ext/compare/v0.10.48...v0.10.49) (2019-03-11)
+
+### Features
+
+- allow plain function usage of fn.compose ([2bafef7](https://github.com/medikoo/es5-ext/commit/2bafef7))
+
+## [0.10.48](https://github.com/medikoo/es5-ext/compare/v0.10.47...v0.10.48) (2019-02-22)
+
+### Features
+
+- Object.ensurePlainObject util ([f48fbcf](https://github.com/medikoo/es5-ext/commit/f48fbcf))
+
+
+
+## [0.10.47](https://github.com/medikoo/es5-ext/compare/v0.10.46...v0.10.47) (2019-01-16)
+
+### Features
+
+- Promise.prototype.finally shim ([4dadbc7](https://github.com/medikoo/es5-ext/commit/4dadbc7))
+
+
+
+## [0.10.46](https://github.com/medikoo/es5-ext/compare/v0.10.45...v0.10.46) (2018-08-13)
+
+### Bug Fixes
+
+- assign-deep to not modify following arguments ([bf43d57](https://github.com/medikoo/es5-ext/commit/bf43d57))
+
+
+
+## [0.10.45](https://github.com/medikoo/es5-ext/compare/v0.10.44...v0.10.45) (2018-06-01)
+
+### Bug Fixes
+
+- improve error message readbility ([adc91b9](https://github.com/medikoo/es5-ext/commit/adc91b9))
+
+
+
+## [0.10.44](https://github.com/medikoo/es5-ext/compare/v0.10.43...v0.10.44) (2018-05-30)
+
+### Features
+
+- add Object.entries ([51d2f43](https://github.com/medikoo/es5-ext/commit/51d2f43))
+
+
+
+## [0.10.43](https://github.com/medikoo/es5-ext/compare/v0.10.42...v0.10.43) (2018-05-28)
+
+### Features
+
+- improve patch string ([6a25b10](https://github.com/medikoo/es5-ext/commit/6a25b10))
+
+
+
+## [0.10.42](https://github.com/medikoo/es5-ext/compare/v0.10.41...v0.10.42) (2018-03-28)
+
+### Bug Fixes
+
+- Date.isDate to exclude NaN dates ([3b61bc6](https://github.com/medikoo/es5-ext/commit/3b61bc6))
+
+### Features
+
+- improve non-coercible string representation ([20bfb78](https://github.com/medikoo/es5-ext/commit/20bfb78))
+- improve non-stringifiable string representation ([2e4512d](https://github.com/medikoo/es5-ext/commit/2e4512d))
+
+
+
+## [0.10.41](https://github.com/medikoo/es5-ext/compare/v0.10.40...v0.10.41) (2018-03-16)
+
+### Features
+
+- Add function.microtaskDelay method ([66481c0](https://github.com/medikoo/es5-ext/commit/66481c0))
+- Add Object.isThenable ([8d5a45c](https://github.com/medikoo/es5-ext/commit/8d5a45c))
+- Add promise.asCallback method ([dcc1451](https://github.com/medikoo/es5-ext/commit/dcc1451))
+- Object.ensurePlainFunction ([2682be6](https://github.com/medikoo/es5-ext/commit/2682be6))
+
+
+
+## [0.10.40](https://github.com/medikoo/es5-ext/compare/v0.10.39...v0.10.40) (2018-03-09)
+
+### Features
+
+- **math:** decimal round, floor and ceil ([39290c6](https://github.com/medikoo/es5-ext/commit/39290c6))
+- **object:** isInteger and ensureInteger ([a5f7d04](https://github.com/medikoo/es5-ext/commit/a5f7d04))
+
+
+
+## [0.10.39](https://github.com/medikoo/es5-ext/compare/v0.10.38...v0.10.39) (2018-02-16)
+
+### Features
+
+- Promise.lazy ([7a30a78](https://github.com/medikoo/es5-ext/commit/7a30a78))
+
+
+
+## [0.10.38](https://github.com/medikoo/es5-ext/compare/v0.10.37...v0.10.38) (2018-01-16)
+
+### Features
+
+- Object.isNaturalNumber an Object.isNaturalNumberValue ([66a40af](https://github.com/medikoo/es5-ext/commit/66a40af))
+
+
+
+## [0.10.37](https://github.com/medikoo/es5-ext/compare/v0.10.36...v0.10.37) (2017-11-23)
+
+### Features
+
+- String.random util ([7c28739](https://github.com/medikoo/es5-ext/commit/7c28739))
+
+
+
+## [0.10.36](https://github.com/medikoo/es5-ext/compare/v0.10.35...v0.10.36) (2017-11-23)
+
+### Features
+
+- **date:** isTimeValue and ensureTimeValue utils ([7659dc5](https://github.com/medikoo/es5-ext/commit/7659dc5))
+
+
+
+## [0.10.35](https://github.com/medikoo/es5-ext/compare/v0.10.34...v0.10.35) (2017-10-13)
+
+### Bug Fixes
+
+- **Object.copy:** do not upgrade primitives to objects ([dd4d88f](https://github.com/medikoo/es5-ext/commit/dd4d88f))
+
+
+
+## [0.10.34](https://github.com/medikoo/es5-ext/compare/v0.10.33...v0.10.34) (2017-10-13)
+
+### Features
+
+- **copyDeep:** duplicate only recursive instances ([bba529a](https://github.com/medikoo/es5-ext/commit/bba529a))
+
+
+
+## [0.10.33](https://github.com/medikoo/es5-ext/compare/v0.10.32...v0.10.33) (2017-10-13)
+
+### Bug Fixes
+
+- **Object.assignDeep:** relax input validation ([1baf57d](https://github.com/medikoo/es5-ext/commit/1baf57d))
+
+
+
+## [0.10.32](https://github.com/medikoo/es5-ext/compare/v0.10.31...v0.10.32) (2017-10-13)
+
+### Features
+
+- Object.assignDeep ([2345e0b](https://github.com/medikoo/es5-ext/commit/2345e0b))
+
+
+
+## [0.10.31](https://github.com/medikoo/es5-ext/compare/v0.10.30...v0.10.31) (2017-10-09)
+
+### Features
+
+- Object.isPlainFunction utility ([031be0a](https://github.com/medikoo/es5-ext/commit/031be0a))
+
+
+
+## [0.10.30](https://github.com/medikoo/es5-ext/compare/v0.10.29...v0.10.30) (2017-08-25)
+
+### Bug Fixes
+
+- value stringification for error message ([37bb96b](https://github.com/medikoo/es5-ext/commit/37bb96b))
+
+
+
+## [0.10.29](https://github.com/medikoo/es5-ext/compare/v0.10.28...v0.10.29) (2017-08-18)
+
+### Bug Fixes
+
+- string.repeat after recent regression ([b02fab4](https://github.com/medikoo/es5-ext/commit/b02fab4))
+
+
+
+## [0.10.28](https://github.com/medikoo/es5-ext/compare/v0.10.27...v0.10.28) (2017-08-18)
+
+### Features
+
+- array.isEmpty method ([b0cfbdd](https://github.com/medikoo/es5-ext/commit/b0cfbdd))
+- improve new lines representation ([860fe8b](https://github.com/medikoo/es5-ext/commit/860fe8b))
+- Object.ensureArray util ([595c341](https://github.com/medikoo/es5-ext/commit/595c341))
+- toShortStringRepresentation util ([6842d06](https://github.com/medikoo/es5-ext/commit/6842d06))
+
+
+
+## [0.10.27](https://github.com/medikoo/es5-ext/compare/v0.10.26...v0.10.27) (2017-08-11)
+
+### Bug Fixes
+
+- isNumberValue should not crash on non-coercible values ([0db765e](https://github.com/medikoo/es5-ext/commit/0db765e))
+
+### Features
+
+- add Object.ensureFiniteNumber util ([11c67f5](https://github.com/medikoo/es5-ext/commit/11c67f5))
+- add Object.isFiniteNumber util ([fe5b55a](https://github.com/medikoo/es5-ext/commit/fe5b55a))
+
+
+
+## [0.10.26](https://github.com/medikoo/es5-ext/compare/v0.10.25...v0.10.26) (2017-08-02)
+
+### Bug Fixes
+
+- **general:** ensure optionalChaining in index ([3df879a](https://github.com/medikoo/es5-ext/commit/3df879a))
+
+
+
+## [0.10.25](https://github.com/medikoo/es5-ext/compare/v0.10.24...v0.10.25) (2017-08-02)
+
+### Features
+
+- **general:** optionalChaining utility ([26332b5](https://github.com/medikoo/es5-ext/commit/26332b5))
+
+
+
+## [0.10.24](https://github.com/medikoo/es5-ext/compare/v0.10.23...v0.10.24) (2017-07-10)
+
+### Features
+
+- resolve global with CSP safe method ([d386449](https://github.com/medikoo/es5-ext/commit/d386449))
+
+
+
+## [0.10.23](https://github.com/medikoo/es5-ext/compare/v0.10.22...v0.10.23) (2017-06-05)
+
+### Bug Fixes
+
+- **Error.custom:** allow non-string code ([e8db3a0](https://github.com/medikoo/es5-ext/commit/e8db3a0))
+- **Error.custom:** improve `ext` argument detection ([0edbfbc](https://github.com/medikoo/es5-ext/commit/0edbfbc))
+
+
+
+## [0.10.22](https://github.com/medikoo/es5-ext/compare/v0.10.21...v0.10.22) (2017-05-31)
+
+### Bug Fixes
+
+- ensure proper symbols stringification in early implementations ([ce51900](https://github.com/medikoo/es5-ext/commit/ce51900))
+
+
+
+## [0.10.21](https://github.com/medikoo/es5-ext/compare/v0.10.20...v0.10.21) (2017-05-22)
+
+### Features
+
+- support arrow functions in Function/#/to-tring-tokens.js ([ad3de1e](https://github.com/medikoo/es5-ext/commit/ad3de1e))
+
+
+
+## [0.10.20](https://github.com/medikoo/es5-ext/compare/v0.10.19...v0.10.20) (2017-05-17)
+
+### Features
+
+- if listed copy not only if own property ([d7e7cef](https://github.com/medikoo/es5-ext/commit/d7e7cef))
+- support `ensure` option in Object.copy ([295326f](https://github.com/medikoo/es5-ext/commit/295326f))
+
+
+
+## [0.10.19](https://github.com/medikoo/es5-ext/compare/v0.10.18...v0.10.19) (2017-05-17)
+
+### Features
+
+- support propertyNames option in Object.copy ([5442279](https://github.com/medikoo/es5-ext/commit/5442279))
+
+
+
+## [0.10.18](https://github.com/medikoo/es5-ext/compare/v0.10.17...v0.10.18) (2017-05-15)
+
+### Bug Fixes
+
+- take all changes in safeToString ([3c5cd12](https://github.com/medikoo/es5-ext/commit/3c5cd12))
+
+
+
+## [0.10.17](https://github.com/medikoo/es5-ext/compare/v0.10.16...v0.10.17) (2017-05-15)
+
+### Features
+
+- introduce Object.ensurePromise ([46a2f45](https://github.com/medikoo/es5-ext/commit/46a2f45))
+- introduce Object.isPromise ([27aecc8](https://github.com/medikoo/es5-ext/commit/27aecc8))
+- introduce safeToString ([0cc6a7b](https://github.com/medikoo/es5-ext/commit/0cc6a7b))
+
+
+
+## [0.10.16](https://github.com/medikoo/es5-ext/compare/v0.10.15...v0.10.16) (2017-05-09)
+
+### Features
+
+- add String.prototype.count ([2e53241](https://github.com/medikoo/es5-ext/commit/2e53241))
+
+## Changelog for previous versions
+
+See `CHANGES` file
diff --git a/node_modules/es5-ext/LICENSE b/node_modules/es5-ext/LICENSE
new file mode 100644
index 0000000..7df6b3d
--- /dev/null
+++ b/node_modules/es5-ext/LICENSE
@@ -0,0 +1,15 @@
+ISC License
+
+Copyright (c) 2011-2022, Mariusz Nowak, @medikoo, medikoo.com
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/es5-ext/README.md b/node_modules/es5-ext/README.md
new file mode 100644
index 0000000..56918cf
--- /dev/null
+++ b/node_modules/es5-ext/README.md
@@ -0,0 +1,1039 @@
+[![Build status][build-image]][build-url]
+[![Tests coverage][cov-image]][cov-url]
+[![npm version][npm-image]][npm-url]
+
+# es5-ext
+
+## ECMAScript 5 extensions
+
+### (with respect to ECMAScript 6 standard)
+
+Shims for upcoming ES6 standard and other goodies implemented strictly with ECMAScript conventions in mind.
+
+It's designed to be used in compliant ECMAScript 5 or ECMAScript 6 environments. Older environments are not supported, although most of the features should work with correct ECMAScript 5 shim on board.
+
+When used in ECMAScript 6 environment, native implementation (if valid) takes precedence over shims.
+
+### Installation
+
+```bash
+npm install es5-ext
+```
+
+To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/)
+
+### Usage
+
+#### ECMAScript 6 features
+
+You can force ES6 features to be implemented in your environment, e.g. following will assign `from` function to `Array` (only if it's not implemented already).
+
+```javascript
+require("es5-ext/array/from/implement");
+Array.from("foo"); // ['f', 'o', 'o']
+```
+
+You can also access shims directly, without fixing native objects. Following will return native `Array.from` if it's available and fallback to shim if it's not.
+
+```javascript
+var aFrom = require("es5-ext/array/from");
+aFrom("foo"); // ['f', 'o', 'o']
+```
+
+If you want to use shim unconditionally (even if native implementation exists) do:
+
+```javascript
+var aFrom = require("es5-ext/array/from/shim");
+aFrom("foo"); // ['f', 'o', 'o']
+```
+
+##### List of ES6 shims
+
+It's about properties introduced with ES6 and those that have been updated in new spec.
+
+- `Array.from` -> `require('es5-ext/array/from')`
+- `Array.of` -> `require('es5-ext/array/of')`
+- `Array.prototype.concat` -> `require('es5-ext/array/#/concat')`
+- `Array.prototype.copyWithin` -> `require('es5-ext/array/#/copy-within')`
+- `Array.prototype.entries` -> `require('es5-ext/array/#/entries')`
+- `Array.prototype.fill` -> `require('es5-ext/array/#/fill')`
+- `Array.prototype.filter` -> `require('es5-ext/array/#/filter')`
+- `Array.prototype.find` -> `require('es5-ext/array/#/find')`
+- `Array.prototype.findIndex` -> `require('es5-ext/array/#/find-index')`
+- `Array.prototype.keys` -> `require('es5-ext/array/#/keys')`
+- `Array.prototype.map` -> `require('es5-ext/array/#/map')`
+- `Array.prototype.slice` -> `require('es5-ext/array/#/slice')`
+- `Array.prototype.splice` -> `require('es5-ext/array/#/splice')`
+- `Array.prototype.values` -> `require('es5-ext/array/#/values')`
+- `Array.prototype[@@iterator]` -> `require('es5-ext/array/#/@@iterator')`
+- `Math.acosh` -> `require('es5-ext/math/acosh')`
+- `Math.asinh` -> `require('es5-ext/math/asinh')`
+- `Math.atanh` -> `require('es5-ext/math/atanh')`
+- `Math.cbrt` -> `require('es5-ext/math/cbrt')`
+- `Math.clz32` -> `require('es5-ext/math/clz32')`
+- `Math.cosh` -> `require('es5-ext/math/cosh')`
+- `Math.exmp1` -> `require('es5-ext/math/expm1')`
+- `Math.fround` -> `require('es5-ext/math/fround')`
+- `Math.hypot` -> `require('es5-ext/math/hypot')`
+- `Math.imul` -> `require('es5-ext/math/imul')`
+- `Math.log1p` -> `require('es5-ext/math/log1p')`
+- `Math.log2` -> `require('es5-ext/math/log2')`
+- `Math.log10` -> `require('es5-ext/math/log10')`
+- `Math.sign` -> `require('es5-ext/math/sign')`
+- `Math.signh` -> `require('es5-ext/math/signh')`
+- `Math.tanh` -> `require('es5-ext/math/tanh')`
+- `Math.trunc` -> `require('es5-ext/math/trunc')`
+- `Number.EPSILON` -> `require('es5-ext/number/epsilon')`
+- `Number.MAX_SAFE_INTEGER` -> `require('es5-ext/number/max-safe-integer')`
+- `Number.MIN_SAFE_INTEGER` -> `require('es5-ext/number/min-safe-integer')`
+- `Number.isFinite` -> `require('es5-ext/number/is-finite')`
+- `Number.isInteger` -> `require('es5-ext/number/is-integer')`
+- `Number.isNaN` -> `require('es5-ext/number/is-nan')`
+- `Number.isSafeInteger` -> `require('es5-ext/number/is-safe-integer')`
+- `Object.assign` -> `require('es5-ext/object/assign')`
+- `Object.keys` -> `require('es5-ext/object/keys')`
+- `Object.setPrototypeOf` -> `require('es5-ext/object/set-prototype-of')`
+- `Promise.prototype.finally` -> `require('es5-ext/promise/#/finally')`
+- `RegExp.prototype.match` -> `require('es5-ext/reg-exp/#/match')`
+- `RegExp.prototype.replace` -> `require('es5-ext/reg-exp/#/replace')`
+- `RegExp.prototype.search` -> `require('es5-ext/reg-exp/#/search')`
+- `RegExp.prototype.split` -> `require('es5-ext/reg-exp/#/split')`
+- `RegExp.prototype.sticky` -> Implement with `require('es5-ext/reg-exp/#/sticky/implement')`, use as function with `require('es5-ext/reg-exp/#/is-sticky')`
+- `RegExp.prototype.unicode` -> Implement with `require('es5-ext/reg-exp/#/unicode/implement')`, use as function with `require('es5-ext/reg-exp/#/is-unicode')`
+- `String.fromCodePoint` -> `require('es5-ext/string/from-code-point')`
+- `String.raw` -> `require('es5-ext/string/raw')`
+- `String.prototype.codePointAt` -> `require('es5-ext/string/#/code-point-at')`
+- `String.prototype.contains` -> `require('es5-ext/string/#/contains')`
+- `String.prototype.endsWith` -> `require('es5-ext/string/#/ends-with')`
+- `String.prototype.normalize` -> `require('es5-ext/string/#/normalize')`
+- `String.prototype.repeat` -> `require('es5-ext/string/#/repeat')`
+- `String.prototype.startsWith` -> `require('es5-ext/string/#/starts-with')`
+- `String.prototype[@@iterator]` -> `require('es5-ext/string/#/@@iterator')`
+
+#### Non ECMAScript standard features
+
+**es5-ext** provides also other utils, and implements them as if they were proposed for a standard. It mostly offers methods (not functions) which can directly be assigned to native prototypes:
+
+```javascript
+Object.defineProperty(Function.prototype, "partial", {
+ value: require("es5-ext/function/#/partial"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+});
+Object.defineProperty(Array.prototype, "flatten", {
+ value: require("es5-ext/array/#/flatten"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+});
+Object.defineProperty(String.prototype, "capitalize", {
+ value: require("es5-ext/string/#/capitalize"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+});
+```
+
+See [es5-extend](https://github.com/wookieb/es5-extend#es5-extend), a great utility that automatically will extend natives for you.
+
+**Important:** Remember to **not** extend natives in scope of generic reusable packages (e.g. ones you intend to publish to npm). Extending natives is fine **only** if you're the _owner_ of the global scope, so e.g. in final project you lead development of.
+
+When you're in situation when native extensions are not good idea, then you should use methods indirectly:
+
+```javascript
+var flatten = require("es5-ext/array/#/flatten");
+
+flatten.call([1, [2, [3, 4]]]); // [1, 2, 3, 4]
+```
+
+for better convenience you can turn methods into functions:
+
+```javascript
+var call = Function.prototype.call;
+var flatten = call.bind(require("es5-ext/array/#/flatten"));
+
+flatten([1, [2, [3, 4]]]); // [1, 2, 3, 4]
+```
+
+You can configure custom toolkit (like [underscorejs](http://underscorejs.org/)), and use it throughout your application
+
+```javascript
+var util = {};
+util.partial = call.bind(require("es5-ext/function/#/partial"));
+util.flatten = call.bind(require("es5-ext/array/#/flatten"));
+util.startsWith = call.bind(require("es5-ext/string/#/starts-with"));
+
+util.flatten([1, [2, [3, 4]]]); // [1, 2, 3, 4]
+```
+
+As with native ones most methods are generic and can be run on any type of object.
+
+## API
+
+### Global extensions
+
+#### global _(es5-ext/global)_
+
+Object that represents global scope
+
+### Array Constructor extensions
+
+#### from(arrayLike[, mapFn[, thisArg]]) _(es5-ext/array/from)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from).
+Returns array representation of _iterable_ or _arrayLike_. If _arrayLike_ is an instance of array, its copy is returned.
+
+#### generate([length[, …fill]]) _(es5-ext/array/generate)_
+
+Generate an array of pre-given _length_ built of repeated arguments.
+
+#### isPlainArray(x) _(es5-ext/array/is-plain-array)_
+
+Returns true if object is plain array (not instance of one of the Array's extensions).
+
+#### of([…items]) _(es5-ext/array/of)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.of).
+Create an array from given arguments.
+
+#### toArray(obj) _(es5-ext/array/to-array)_
+
+Returns array representation of `obj`. If `obj` is already an array, `obj` is returned back.
+
+#### validArray(obj) _(es5-ext/array/valid-array)_
+
+Returns `obj` if it's an array, otherwise throws `TypeError`
+
+### Array Prototype extensions
+
+#### arr.binarySearch(compareFn) _(es5-ext/array/#/binary-search)_
+
+In **sorted** list search for index of item for which _compareFn_ returns value closest to _0_.
+It's variant of binary search algorithm
+
+#### arr.clear() _(es5-ext/array/#/clear)_
+
+Clears the array
+
+#### arr.compact() _(es5-ext/array/#/compact)_
+
+Returns a copy of the context with all non-values (`null` or `undefined`) removed.
+
+#### arr.concat() _(es5-ext/array/#/concat)_
+
+[_Updated with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.concat).
+ES6's version of `concat`. Supports `isConcatSpreadable` symbol, and returns array of same type as the context.
+
+#### arr.contains(searchElement[, position]) _(es5-ext/array/#/contains)_
+
+Whether list contains the given value.
+
+#### arr.copyWithin(target, start[, end]) _(es5-ext/array/#/copy-within)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.copywithin).
+
+#### arr.diff(other) _(es5-ext/array/#/diff)_
+
+Returns the array of elements that are present in context list but not present in other list.
+
+#### arr.eIndexOf(searchElement[, fromIndex]) _(es5-ext/array/#/e-index-of)_
+
+_egal_ version of `indexOf` method. [_SameValueZero_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) logic is used for comparision
+
+#### arr.eLastIndexOf(searchElement[, fromIndex]) _(es5-ext/array/#/e-last-index-of)_
+
+_egal_ version of `lastIndexOf` method. [_SameValueZero_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) logic is used for comparision
+
+#### arr.entries() _(es5-ext/array/#/entries)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.entries).
+Returns iterator object, which traverses the array. Each value is represented with an array, where first value is an index and second is corresponding to index value.
+
+#### arr.exclusion([…lists]]) _(es5-ext/array/#/exclusion)_
+
+Returns the array of elements that are found only in one of the lists (either context list or list provided in arguments).
+
+#### arr.fill(value[, start, end]) _(es5-ext/array/#/fill)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.fill).
+
+#### arr.filter(callback[, thisArg]) _(es5-ext/array/#/filter)_
+
+[_Updated with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.filter).
+ES6's version of `filter`, returns array of same type as the context.
+
+#### arr.find(predicate[, thisArg]) _(es5-ext/array/#/find)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.find).
+Return first element for which given function returns true
+
+#### arr.findIndex(predicate[, thisArg]) _(es5-ext/array/#/find-index)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.findindex).
+Return first index for which given function returns true
+
+#### arr.first() _(es5-ext/array/#/first)_
+
+Returns value for first defined index
+
+#### arr.firstIndex() _(es5-ext/array/#/first-index)_
+
+Returns first declared index of the array
+
+#### arr.flatten() _(es5-ext/array/#/flatten)_
+
+Returns flattened version of the array
+
+#### arr.forEachRight(cb[, thisArg]) _(es5-ext/array/#/for-each-right)_
+
+`forEach` starting from last element
+
+#### arr.group(cb[, thisArg]) _(es5-ext/array/#/group)_
+
+Group list elements by value returned by _cb_ function
+
+#### arr.indexesOf(searchElement[, fromIndex]) _(es5-ext/array/#/indexes-of)_
+
+Returns array of all indexes of given value
+
+#### arr.intersection([…lists]) _(es5-ext/array/#/intersection)_
+
+Computes the array of values that are the intersection of all lists (context list and lists given in arguments)
+
+#### arr.isCopy(other) _(es5-ext/array/#/is-copy)_
+
+Returns true if both context and _other_ lists have same content
+
+#### arr.isUniq() _(es5-ext/array/#/is-uniq)_
+
+Returns true if all values in array are unique
+
+#### arr.keys() _(es5-ext/array/#/keys)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.keys).
+Returns iterator object, which traverses all array indexes.
+
+#### arr.last() _(es5-ext/array/#/last)_
+
+Returns value of last defined index
+
+#### arr.lastIndex() _(es5-ext/array/#/last)_
+
+Returns last defined index of the array
+
+#### arr.map(callback[, thisArg]) _(es5-ext/array/#/map)_
+
+[_Updated with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.map).
+ES6's version of `map`, returns array of same type as the context.
+
+#### arr.remove(value[, …valuen]) _(es5-ext/array/#/remove)_
+
+Remove values from the array
+
+#### arr.separate(sep) _(es5-ext/array/#/separate)_
+
+Returns array with items separated with `sep` value
+
+#### arr.slice(callback[, thisArg]) _(es5-ext/array/#/slice)_
+
+[_Updated with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.slice).
+ES6's version of `slice`, returns array of same type as the context.
+
+#### arr.someRight(cb[, thisArg]) _(es5-ext/array/#/someRight)_
+
+`some` starting from last element
+
+#### arr.splice(callback[, thisArg]) _(es5-ext/array/#/splice)_
+
+[_Updated with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.splice).
+ES6's version of `splice`, returns array of same type as the context.
+
+#### arr.uniq() _(es5-ext/array/#/uniq)_
+
+Returns duplicate-free version of the array
+
+#### arr.values() _(es5-ext/array/#/values)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.values).
+Returns iterator object which traverses all array values.
+
+#### arr[@@iterator] _(es5-ext/array/#/@@iterator)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype-@@iterator).
+Returns iterator object which traverses all array values.
+
+### Boolean Constructor extensions
+
+#### isBoolean(x) _(es5-ext/boolean/is-boolean)_
+
+Whether value is boolean
+
+### Date Constructor extensions
+
+#### isDate(x) _(es5-ext/date/is-date)_
+
+Whether value is date instance
+
+#### validDate(x) _(es5-ext/date/valid-date)_
+
+If given object is not date throw TypeError in other case return it.
+
+### Date Prototype extensions
+
+#### date.copy(date) _(es5-ext/date/#/copy)_
+
+Returns a copy of the date object
+
+#### date.daysInMonth() _(es5-ext/date/#/days-in-month)_
+
+Returns number of days of date's month
+
+#### date.floorDay() _(es5-ext/date/#/floor-day)_
+
+Sets the date time to 00:00:00.000
+
+#### date.floorMonth() _(es5-ext/date/#/floor-month)_
+
+Sets date day to 1 and date time to 00:00:00.000
+
+#### date.floorYear() _(es5-ext/date/#/floor-year)_
+
+Sets date month to 0, day to 1 and date time to 00:00:00.000
+
+#### date.format(pattern) _(es5-ext/date/#/format)_
+
+Formats date up to given string. Supported patterns:
+
+- `%Y` - Year with century, 1999, 2003
+- `%y` - Year without century, 99, 03
+- `%m` - Month, 01..12
+- `%d` - Day of the month 01..31
+- `%H` - Hour (24-hour clock), 00..23
+- `%M` - Minute, 00..59
+- `%S` - Second, 00..59
+- `%L` - Milliseconds, 000..999
+
+### Error Constructor extensions
+
+#### custom(message/_, code, ext_/) _(es5-ext/error/custom)_
+
+Creates custom error object, optinally extended with `code` and other extension properties (provided with `ext` object)
+
+#### isError(x) _(es5-ext/error/is-error)_
+
+Whether value is an error (instance of `Error`).
+
+#### validError(x) _(es5-ext/error/valid-error)_
+
+If given object is not error throw TypeError in other case return it.
+
+### Error Prototype extensions
+
+#### err.throw() _(es5-ext/error/#/throw)_
+
+Throws error
+
+### Function Constructor extensions
+
+Some of the functions were inspired by [Functional JavaScript](http://osteele.com/sources/javascript/functional/) project by Olivier Steele
+
+#### constant(x) _(es5-ext/function/constant)_
+
+Returns a constant function that returns pregiven argument
+
+_k(x)(y) =def x_
+
+#### identity(x) _(es5-ext/function/identity)_
+
+Identity function. Returns first argument
+
+_i(x) =def x_
+
+#### invoke(name[, …args]) _(es5-ext/function/invoke)_
+
+Returns a function that takes an object as an argument, and applies object's
+_name_ method to arguments.
+_name_ can be name of the method or method itself.
+
+_invoke(name, …args)(object, …args2) =def object\[name\]\(…args, …args2\)_
+
+#### isArguments(x) _(es5-ext/function/is-arguments)_
+
+Whether value is arguments object
+
+#### isFunction(arg) _(es5-ext/function/is-function)_
+
+Whether value is instance of function
+
+#### noop() _(es5-ext/function/noop)_
+
+No operation function
+
+#### pluck(name) _(es5-ext/function/pluck)_
+
+Returns a function that takes an object, and returns the value of its _name_
+property
+
+_pluck(name)(obj) =def obj[name]_
+
+#### validFunction(arg) _(es5-ext/function/valid-function)_
+
+If given object is not function throw TypeError in other case return it.
+
+### Function Prototype extensions
+
+Some of the methods were inspired by [Functional JavaScript](http://osteele.com/sources/javascript/functional/) project by Olivier Steele
+
+#### fn.compose([…fns]) _(es5-ext/function/#/compose)_
+
+Applies the functions in reverse argument-list order.
+
+_f1.compose(f2, f3, f4)(…args) =def f1(f2(f3(f4(…arg))))_
+
+`compose` can also be used in plain function form as:
+
+_compose(f1, f2, f3, f4)(…args) =def f1(f2(f3(f4(…arg))))_
+
+#### fn.copy() _(es5-ext/function/#/copy)_
+
+Produces copy of given function
+
+#### fn.curry([n]) _(es5-ext/function/#/curry)_
+
+Invoking the function returned by this function only _n_ arguments are passed to the underlying function. If the underlying function is not saturated, the result is a function that passes all its arguments to the underlying function.
+If _n_ is not provided then it defaults to context function length
+
+_f.curry(4)(arg1, arg2)(arg3)(arg4) =def f(arg1, args2, arg3, arg4)_
+
+#### fn.lock([…args]) _(es5-ext/function/#/lock)_
+
+Returns a function that applies the underlying function to _args_, and ignores its own arguments.
+
+_f.lock(…args)(…args2) =def f(…args)_
+
+_Named after it's counterpart in Google Closure_
+
+#### fn.not() _(es5-ext/function/#/not)_
+
+Returns a function that returns boolean negation of value returned by underlying function.
+
+_f.not()(…args) =def !f(…args)_
+
+#### fn.partial([…args]) _(es5-ext/function/#/partial)_
+
+Returns a function that when called will behave like context function called with initially passed arguments. If more arguments are suplilied, they are appended to initial args.
+
+_f.partial(…args1)(…args2) =def f(…args1, …args2)_
+
+#### fn.spread() _(es5-ext/function/#/spread)_
+
+Returns a function that applies underlying function with first list argument
+
+_f.match()(args) =def f.apply(null, args)_
+
+#### fn.toStringTokens() _(es5-ext/function/#/to-string-tokens)_
+
+Serializes function into two (arguments and body) string tokens. Result is plain object with `args` and `body` properties.
+
+### Math extensions
+
+#### acosh(x) _(es5-ext/math/acosh)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.acosh).
+
+#### asinh(x) _(es5-ext/math/asinh)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.asinh).
+
+#### atanh(x) _(es5-ext/math/atanh)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.atanh).
+
+#### cbrt(x) _(es5-ext/math/cbrt)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.cbrt).
+
+#### clz32(x) _(es5-ext/math/clz32)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.clz32).
+
+#### cosh(x) _(es5-ext/math/cosh)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.cosh).
+
+#### expm1(x) _(es5-ext/math/expm1)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.expm1).
+
+#### fround(x) _(es5-ext/math/fround)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.fround).
+
+#### hypot([…values]) _(es5-ext/math/hypot)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.hypot).
+
+#### imul(x, y) _(es5-ext/math/imul)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.imul).
+
+#### log1p(x) _(es5-ext/math/log1p)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.log1p).
+
+#### log2(x) _(es5-ext/math/log2)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.log2).
+
+#### log10(x) _(es5-ext/math/log10)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.log10).
+
+#### sign(x) _(es5-ext/math/sign)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.sign).
+
+#### sinh(x) _(es5-ext/math/sinh)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.sinh).
+
+#### tanh(x) _(es5-ext/math/tanh)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.tanh).
+
+#### trunc(x) _(es5-ext/math/trunc)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-math.trunc).
+
+### Number Constructor extensions
+
+#### EPSILON _(es5-ext/number/epsilon)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.epsilon).
+
+The difference between 1 and the smallest value greater than 1 that is representable as a Number value, which is approximately 2.2204460492503130808472633361816 x 10-16.
+
+#### isFinite(x) _(es5-ext/number/is-finite)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isfinite).
+Whether value is finite. Differs from global isNaN that it doesn't do type coercion.
+
+#### isInteger(x) _(es5-ext/number/is-integer)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isinteger).
+Whether value is integer.
+
+#### isNaN(x) _(es5-ext/number/is-nan)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isnan).
+Whether value is NaN. Differs from global isNaN that it doesn't do type coercion.
+
+#### isNumber(x) _(es5-ext/number/is-number)_
+
+Whether given value is number
+
+#### isSafeInteger(x) _(es5-ext/number/is-safe-integer)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.issafeinteger).
+
+#### MAX*SAFE_INTEGER *(es5-ext/number/max-safe-integer)\_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.maxsafeinteger).
+The value of Number.MAX_SAFE_INTEGER is 9007199254740991.
+
+#### MIN*SAFE_INTEGER *(es5-ext/number/min-safe-integer)\_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.minsafeinteger).
+The value of Number.MIN_SAFE_INTEGER is -9007199254740991 (253-1).
+
+#### toInteger(x) _(es5-ext/number/to-integer)_
+
+Converts value to integer
+
+#### toPosInteger(x) _(es5-ext/number/to-pos-integer)_
+
+Converts value to positive integer. If provided value is less than 0, then 0 is returned
+
+#### toUint32(x) _(es5-ext/number/to-uint32)_
+
+Converts value to unsigned 32 bit integer. This type is used for array lengths.
+See: http://www.2ality.com/2012/02/js-integers.html
+
+### Number Prototype extensions
+
+#### num.pad(length[, precision]) _(es5-ext/number/#/pad)_
+
+Pad given number with zeros. Returns string
+
+### Object Constructor extensions
+
+#### assign(target, source[, …sourcen]) _(es5-ext/object/assign)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign).
+Extend _target_ by enumerable own properties of other objects. If properties are already set on target object, they will be overwritten.
+
+#### clear(obj) _(es5-ext/object/clear)_
+
+Remove all enumerable own properties of the object
+
+#### compact(obj) _(es5-ext/object/compact)_
+
+Returns copy of the object with all enumerable properties that have no falsy values
+
+#### compare(obj1, obj2) _(es5-ext/object/compare)_
+
+Universal cross-type compare function. To be used for e.g. array sort.
+
+#### copy(obj) _(es5-ext/object/copy)_
+
+Returns copy of the object with all enumerable properties.
+
+#### copyDeep(obj) _(es5-ext/object/copy-deep)_
+
+Returns deep copy of the object with all enumerable properties.
+
+#### count(obj) _(es5-ext/object/count)_
+
+Counts number of enumerable own properties on object
+
+#### create(obj[, properties]) _(es5-ext/object/create)_
+
+`Object.create` alternative that provides workaround for [V8 issue](http://code.google.com/p/v8/issues/detail?id=2804).
+
+When `null` is provided as a prototype, it's substituted with specially prepared object that derives from Object.prototype but has all Object.prototype properties shadowed with undefined.
+
+It's quirky solution that allows us to have plain objects with no truthy properties but with turnable prototype.
+
+Use only for objects that you plan to switch prototypes of and be aware of limitations of this workaround.
+
+#### eq(x, y) _(es5-ext/object/eq)_
+
+Whether two values are equal, using [_SameValueZero_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) algorithm.
+
+#### every(obj, cb[, thisArg[, compareFn]]) _(es5-ext/object/every)_
+
+Analogous to Array.prototype.every. Returns true if every key-value pair in this object satisfies the provided testing function.
+Optionally _compareFn_ can be provided which assures that keys are tested in given order. If provided _compareFn_ is equal to `true`, then order is alphabetical (by key).
+
+#### filter(obj, cb[, thisArg]) _(es5-ext/object/filter)_
+
+Analogous to Array.prototype.filter. Returns new object with properites for which _cb_ function returned truthy value.
+
+#### firstKey(obj) _(es5-ext/object/first-key)_
+
+Returns first enumerable key of the object, as keys are unordered by specification, it can be any key of an object.
+
+#### flatten(obj) _(es5-ext/object/flatten)_
+
+Returns new object, with flatten properties of input object
+
+_flatten({ a: { b: 1 }, c: { d: 1 } }) =def { b: 1, d: 1 }_
+
+#### forEach(obj, cb[, thisArg[, compareFn]]) _(es5-ext/object/for-each)_
+
+Analogous to Array.prototype.forEach. Calls a function for each key-value pair found in object
+Optionally _compareFn_ can be provided which assures that properties are iterated in given order. If provided _compareFn_ is equal to `true`, then order is alphabetical (by key).
+
+#### getPropertyNames() _(es5-ext/object/get-property-names)_
+
+Get all (not just own) property names of the object
+
+#### is(x, y) _(es5-ext/object/is)_
+
+Whether two values are equal, using [_SameValue_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero) algorithm.
+
+#### isArrayLike(x) _(es5-ext/object/is-array-like)_
+
+Whether object is array-like object
+
+#### isCopy(x, y) _(es5-ext/object/is-copy)_
+
+Two values are considered a copy of same value when all of their own enumerable properties have same values.
+
+#### isCopyDeep(x, y) _(es5-ext/object/is-copy-deep)_
+
+Deep comparision of objects
+
+#### isEmpty(obj) _(es5-ext/object/is-empty)_
+
+True if object doesn't have any own enumerable property
+
+#### isObject(arg) _(es5-ext/object/is-object)_
+
+Whether value is not primitive
+
+#### isPlainObject(arg) _(es5-ext/object/is-plain-object)_
+
+Whether object is plain object, its protototype should be Object.prototype and it cannot be host object.
+
+#### keyOf(obj, searchValue) _(es5-ext/object/key-of)_
+
+Search object for value
+
+#### keys(obj) _(es5-ext/object/keys)_
+
+[_Updated with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.keys).
+ES6's version of `keys`, doesn't throw on primitive input
+
+#### map(obj, cb[, thisArg]) _(es5-ext/object/map)_
+
+Analogous to Array.prototype.map. Creates a new object with properties which values are results of calling a provided function on every key-value pair in this object.
+
+#### mapKeys(obj, cb[, thisArg]) _(es5-ext/object/map-keys)_
+
+Create new object with same values, but remapped keys
+
+#### mixin(target, source) _(es5-ext/object/mixin)_
+
+Extend _target_ by all own properties of other objects. Properties found in both objects will be overwritten (unless they're not configurable and cannot be overwritten).
+_It was for a moment part of ECMAScript 6 draft._
+
+#### mixinPrototypes(target, …source]) _(es5-ext/object/mixin-prototypes)_
+
+Extends _target_, with all source and source's prototype properties.
+Useful as an alternative for `setPrototypeOf` in environments in which it cannot be shimmed (no `__proto__` support).
+
+#### normalizeOptions(options) _(es5-ext/object/normalize-options)_
+
+Normalizes options object into flat plain object.
+
+Useful for functions in which we either need to keep options object for future reference or need to modify it for internal use.
+
+- It never returns input `options` object back (always a copy is created)
+- `options` can be undefined in such case empty plain object is returned.
+- Copies all enumerable properties found down prototype chain.
+
+#### primitiveSet([…names]) _(es5-ext/object/primitive-set)_
+
+Creates `null` prototype based plain object, and sets on it all property names provided in arguments to true.
+
+#### safeTraverse(obj[, …names]) _(es5-ext/object/safe-traverse)_
+
+Safe navigation of object properties. See http://wiki.ecmascript.org/doku.php?id=strawman:existential_operator
+
+#### serialize(value) _(es5-ext/object/serialize)_
+
+Serialize value into string. Differs from [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) that it serializes also dates, functions and regular expresssions.
+
+#### setPrototypeOf(object, proto) _(es5-ext/object/set-prototype-of)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.setprototypeof).
+If native version is not provided, it depends on existence of `__proto__` functionality, if it's missing, `null` instead of function is exposed.
+
+#### some(obj, cb[, thisArg[, compareFn]]) _(es5-ext/object/some)_
+
+Analogous to Array.prototype.some Returns true if any key-value pair satisfies the provided
+testing function.
+Optionally _compareFn_ can be provided which assures that keys are tested in given order. If provided _compareFn_ is equal to `true`, then order is alphabetical (by key).
+
+#### toArray(obj[, cb[, thisArg[, compareFn]]]) _(es5-ext/object/to-array)_
+
+Creates an array of results of calling a provided function on every key-value pair in this object.
+Optionally _compareFn_ can be provided which assures that results are added in given order. If provided _compareFn_ is equal to `true`, then order is alphabetical (by key).
+
+#### unserialize(str) _(es5-ext/object/unserialize)_
+
+Userializes value previously serialized with [serialize](#serializevalue-es5-extobjectserialize)
+
+#### validCallable(x) _(es5-ext/object/valid-callable)_
+
+If given object is not callable throw TypeError in other case return it.
+
+#### validObject(x) _(es5-ext/object/valid-object)_
+
+Throws error if given value is not an object, otherwise it is returned.
+
+#### validValue(x) _(es5-ext/object/valid-value)_
+
+Throws error if given value is `null` or `undefined`, otherwise returns value.
+
+### Promise Prototype extensions
+
+#### promise.finally(onFinally) _(es5-ext/promise/#/finally)_
+
+[_Introduced with ECMAScript 2018_](https://tc39.github.io/ecma262/#sec-promise.prototype.finally).
+
+### RegExp Constructor extensions
+
+#### escape(str) _(es5-ext/reg-exp/escape)_
+
+Escapes string to be used in regular expression
+
+#### isRegExp(x) _(es5-ext/reg-exp/is-reg-exp)_
+
+Whether object is regular expression
+
+#### validRegExp(x) _(es5-ext/reg-exp/valid-reg-exp)_
+
+If object is regular expression it is returned, otherwise TypeError is thrown.
+
+### RegExp Prototype extensions
+
+#### re.isSticky(x) _(es5-ext/reg-exp/#/is-sticky)_
+
+Whether regular expression has `sticky` flag.
+
+It's to be used as counterpart to [regExp.sticky](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-get-regexp.prototype.sticky) if it's not implemented.
+
+#### re.isUnicode(x) _(es5-ext/reg-exp/#/is-unicode)_
+
+Whether regular expression has `unicode` flag.
+
+It's to be used as counterpart to [regExp.unicode](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-get-regexp.prototype.unicode) if it's not implemented.
+
+#### re.match(string) _(es5-ext/reg-exp/#/match)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-regexp.prototype.match).
+
+#### re.replace(string, replaceValue) _(es5-ext/reg-exp/#/replace)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-regexp.prototype.replace).
+
+#### re.search(string) _(es5-ext/reg-exp/#/search)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-regexp.prototype.search).
+
+#### re.split(string) _(es5-ext/reg-exp/#/search)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-regexp.prototype.split).
+
+#### re.sticky _(es5-ext/reg-exp/#/sticky/implement)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-regexp.prototype.sticky).
+It's a getter, so only `implement` and `is-implemented` modules are provided.
+
+#### re.unicode _(es5-ext/reg-exp/#/unicode/implement)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-regexp.prototype.unicode).
+It's a getter, so only `implement` and `is-implemented` modules are provided.
+
+### String Constructor extensions
+
+#### formatMethod(fMap) _(es5-ext/string/format-method)_
+
+Creates format method. It's used e.g. to create `Date.prototype.format` method
+
+#### fromCodePoint([…codePoints]) _(es5-ext/string/from-code-point)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.fromcodepoint)
+
+#### isString(x) _(es5-ext/string/is-string)_
+
+Whether object is string
+
+#### randomUniq() _(es5-ext/string/random-uniq)_
+
+Returns randomly generated id, with guarantee of local uniqueness (no same id will be returned twice)
+
+#### raw(callSite[, …substitutions]) _(es5-ext/string/raw)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.raw)
+
+### String Prototype extensions
+
+#### str.at(pos) _(es5-ext/string/#/at)_
+
+_Proposed for ECMAScript 6/7 standard, but not (yet) in a draft_
+
+Returns a string at given position in Unicode-safe manner.
+Based on [implementation by Mathias Bynens](https://github.com/mathiasbynens/String.prototype.at).
+
+#### str.camelToHyphen() _(es5-ext/string/#/camel-to-hyphen)_
+
+Convert camelCase string to hyphen separated, e.g. one-two-three -> oneTwoThree.
+Useful when converting names from js property convention into filename convention.
+
+#### str.capitalize() _(es5-ext/string/#/capitalize)_
+
+Capitalize first character of a string
+
+#### str.caseInsensitiveCompare(str) _(es5-ext/string/#/case-insensitive-compare)_
+
+Case insensitive compare
+
+#### str.codePointAt(pos) _(es5-ext/string/#/code-point-at)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.codepointat)
+
+Based on [implementation by Mathias Bynens](https://github.com/mathiasbynens/String.prototype.codePointAt).
+
+#### str.contains(searchString[, position]) _(es5-ext/string/#/contains)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.contains)
+
+Whether string contains given string.
+
+#### str.endsWith(searchString[, endPosition]) _(es5-ext/string/#/ends-with)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.endswith).
+Whether strings ends with given string
+
+#### str.hyphenToCamel() _(es5-ext/string/#/hyphen-to-camel)_
+
+Convert hyphen separated string to camelCase, e.g. one-two-three -> oneTwoThree.
+Useful when converting names from filename convention to js property name convention.
+
+#### str.indent(str[, count]) _(es5-ext/string/#/indent)_
+
+Indents each line with provided _str_ (if _count_ given then _str_ is repeated _count_ times).
+
+#### str.last() _(es5-ext/string/#/last)_
+
+Return last character
+
+#### str.normalize([form]) _(es5-ext/string/#/normalize)_
+
+[_Introduced with ECMAScript 6_](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize).
+Returns the Unicode Normalization Form of a given string.
+Based on Matsuza's version. Code used for integrated shim can be found at [github.com/walling/unorm](https://github.com/walling/unorm/blob/master/lib/unorm.js)
+
+#### str.pad(fill[, length]) _(es5-ext/string/#/pad)_
+
+Pad string with _fill_.
+If _length_ si given than _fill_ is reapated _length_ times.
+If _length_ is negative then pad is applied from right.
+
+#### str.repeat(n) _(es5-ext/string/#/repeat)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.repeat).
+Repeat given string _n_ times
+
+#### str.plainReplace(search, replace) _(es5-ext/string/#/plain-replace)_
+
+Simple `replace` version. Doesn't support regular expressions. Replaces just first occurrence of search string. Doesn't support insert patterns, therefore it is safe to replace text with text obtained programmatically (there's no need for additional _\$_ characters escape in such case).
+
+#### str.plainReplaceAll(search, replace) _(es5-ext/string/#/plain-replace-all)_
+
+Simple `replace` version. Doesn't support regular expressions. Replaces all occurrences of search string. Doesn't support insert patterns, therefore it is safe to replace text with text obtained programmatically (there's no need for additional _\$_ characters escape in such case).
+
+#### str.startsWith(searchString[, position]) _(es5-ext/string/#/starts-with)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.startswith).
+Whether strings starts with given string
+
+#### str[@@iterator] _(es5-ext/string/#/@@iterator)_
+
+[_Introduced with ECMAScript 6_](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype-@@iterator).
+Returns iterator object which traverses all string characters (with respect to unicode symbols)
+
+### Tests
+
+ $ npm test
+
+## Security contact information
+
+To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.
+
+## es5-ext for enterprise
+
+Available as part of the Tidelift Subscription
+
+The maintainers of es5-ext and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-es5-ext?utm_source=npm-es5-ext&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
+
+[build-image]: https://github.com/medikoo/es5-ext/workflows/Integrate/badge.svg
+[build-url]: https://github.com/medikoo/es5-ext/actions?query=workflow%3AIntegrate
+[cov-image]: https://img.shields.io/codecov/c/github/medikoo/es5-ext.svg
+[cov-url]: https://codecov.io/gh/medikoo/es5-ext
+[npm-image]: https://img.shields.io/npm/v/es5-ext.svg
+[npm-url]: https://www.npmjs.com/package/es5-ext
diff --git a/node_modules/es5-ext/_postinstall.js b/node_modules/es5-ext/_postinstall.js
new file mode 100755
index 0000000..f11ce4c
--- /dev/null
+++ b/node_modules/es5-ext/_postinstall.js
@@ -0,0 +1,73 @@
+#!/usr/bin/env node
+
+// Broadcasts "Call for peace" message when package is installed in Russia, otherwise no-op
+
+"use strict";
+
+try {
+ if (
+ [
+ "Asia/Anadyr", "Asia/Barnaul", "Asia/Chita", "Asia/Irkutsk", "Asia/Kamchatka",
+ "Asia/Khandyga", "Asia/Krasnoyarsk", "Asia/Magadan", "Asia/Novokuznetsk",
+ "Asia/Novosibirsk", "Asia/Omsk", "Asia/Sakhalin", "Asia/Srednekolymsk", "Asia/Tomsk",
+ "Asia/Ust-Nera", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yekaterinburg",
+ "Europe/Astrakhan", "Europe/Kaliningrad", "Europe/Kirov", "Europe/Moscow",
+ "Europe/Samara", "Europe/Saratov", "Europe/Simferopol", "Europe/Ulyanovsk",
+ "Europe/Volgograd", "W-SU"
+ ].indexOf(new Intl.DateTimeFormat().resolvedOptions().timeZone) === -1
+ ) {
+ return;
+ }
+
+ var bold = function (msg) { return "\x1b[97m\x1b[1m" + msg + "\x1b[22m\x1b[37m"; };
+
+ var flags = function () {
+ return (
+ "🇷🇺 🇺🇦 🇷🇺 🇺🇦 🇷🇺 🇺🇦 🇷🇺 🇺🇦 🇷🇺 🇺🇦 🇷🇺 🇺🇦 🇷🇺 🇺🇦 🇷🇺 🇺🇦 🇷🇺 🇺🇦 🇷🇺 🇺🇦" +
+ " 🇷🇺 🇺🇦 🇷🇺 🇺🇦 🇷🇺 🇺🇦"
+ );
+ };
+
+ process._rawDebug(
+ [
+ "", flags(), "",
+ "\x1b[37m24 февраля " +
+ bold("Россия напала на Украину") +
+ ", что уже стало причиной " +
+ bold("15000+ жертв среди российских военных") +
+ " и примерно " +
+ bold("10000+ - среди украинских") +
+ ", а также " +
+ bold("5000+ убитых граждан, в том числе 300+ детей") +
+ ".",
+ "",
+ "Народ Украины всеобще мобилизован и готов защищать свою страну от вражеского" +
+ " вторжения. " +
+ bold(
+ "91% украинцев полностью поддерживает своего президента Владимира Зеленского"
+ ) +
+ " и его ответные действия на нападение России.",
+ "",
+ "Весь мир осудил необоснованное вторжение и решил ввести " +
+ bold("невиданные ранее санкции против России") +
+ ". С каждым новым днем они будут ощущаться все сильнее и сильнее среди мирных" +
+ " граждан.",
+ "",
+ "В то же время, " +
+ bold("российское правительство ограничивает доступ граждан к внешней информации") +
+ ", насаждая однобокие формулировки и версии происходящего.",
+ "", "В качестве надежного источника информации загрузите безопасный браузер Tor:", "",
+ bold(
+ "https://forum.torproject.net/t/tor-blocked-in-russia-how-to-circumvent-censorship/982"
+ ),
+ "", "И посетите:", "",
+ bold(
+ "https://www.bbcweb3hytmzhn5d532owbu6oqadra5z3ar726vq5kgwwn6aucdccrad.onion/russian"
+ ),
+ bold("https://www.dwnewsgngmhlplxy6o2twtfgjnrnjxbegbwqx6wnotdhkzt562tszfid.onion/ru/"),
+ "", flags(), ""
+ ].join("\n")
+ );
+} catch (error) {
+ // ignore
+}
diff --git a/node_modules/es5-ext/array/#/@@iterator/implement.js b/node_modules/es5-ext/array/#/@@iterator/implement.js
new file mode 100644
index 0000000..8073f2b
--- /dev/null
+++ b/node_modules/es5-ext/array/#/@@iterator/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array.prototype, require("es6-symbol").iterator, {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/#/@@iterator/index.js b/node_modules/es5-ext/array/#/@@iterator/index.js
new file mode 100644
index 0000000..1d0a389
--- /dev/null
+++ b/node_modules/es5-ext/array/#/@@iterator/index.js
@@ -0,0 +1,5 @@
+"use strict";
+
+module.exports = require("./is-implemented")()
+ ? Array.prototype[require("es6-symbol").iterator]
+ : require("./shim");
diff --git a/node_modules/es5-ext/array/#/@@iterator/is-implemented.js b/node_modules/es5-ext/array/#/@@iterator/is-implemented.js
new file mode 100644
index 0000000..6445c04
--- /dev/null
+++ b/node_modules/es5-ext/array/#/@@iterator/is-implemented.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var iteratorSymbol = require("es6-symbol").iterator;
+
+module.exports = function () {
+ var arr = ["foo", 1], iterator, result;
+ if (typeof arr[iteratorSymbol] !== "function") return false;
+ iterator = arr[iteratorSymbol]();
+ if (!iterator) return false;
+ if (typeof iterator.next !== "function") return false;
+ result = iterator.next();
+ if (!result) return false;
+ if (result.value !== "foo") return false;
+ if (result.done !== false) return false;
+ return true;
+};
diff --git a/node_modules/es5-ext/array/#/@@iterator/shim.js b/node_modules/es5-ext/array/#/@@iterator/shim.js
new file mode 100644
index 0000000..307b1c0
--- /dev/null
+++ b/node_modules/es5-ext/array/#/@@iterator/shim.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("../values/shim");
diff --git a/node_modules/es5-ext/array/#/_compare-by-length.js b/node_modules/es5-ext/array/#/_compare-by-length.js
new file mode 100644
index 0000000..db5a040
--- /dev/null
+++ b/node_modules/es5-ext/array/#/_compare-by-length.js
@@ -0,0 +1,7 @@
+// Used internally to sort array of lists by length
+
+"use strict";
+
+var toPosInt = require("../../number/to-pos-integer");
+
+module.exports = function (arr1, arr2) { return toPosInt(arr1.length) - toPosInt(arr2.length); };
diff --git a/node_modules/es5-ext/array/#/binary-search.js b/node_modules/es5-ext/array/#/binary-search.js
new file mode 100644
index 0000000..bdabe27
--- /dev/null
+++ b/node_modules/es5-ext/array/#/binary-search.js
@@ -0,0 +1,27 @@
+"use strict";
+
+var toPosInt = require("../../number/to-pos-integer")
+ , callable = require("../../object/valid-callable")
+ , value = require("../../object/valid-value")
+ , floor = Math.floor;
+
+module.exports = function (compareFn) {
+ var length, low, high, middle;
+
+ value(this);
+ callable(compareFn);
+
+ length = toPosInt(this.length);
+ low = 0;
+ high = length - 1;
+
+ while (low <= high) {
+ middle = floor((low + high) / 2);
+ if (compareFn(this[middle]) < 0) high = middle - 1;
+ else low = middle + 1;
+ }
+
+ if (high < 0) return 0;
+ if (high >= length) return length - 1;
+ return high;
+};
diff --git a/node_modules/es5-ext/array/#/clear.js b/node_modules/es5-ext/array/#/clear.js
new file mode 100644
index 0000000..fd539c9
--- /dev/null
+++ b/node_modules/es5-ext/array/#/clear.js
@@ -0,0 +1,12 @@
+// Inspired by Google Closure:
+// http://closure-library.googlecode.com/svn/docs/
+// closure_goog_array_array.js.html#goog.array.clear
+
+"use strict";
+
+var value = require("../../object/valid-value");
+
+module.exports = function () {
+ value(this).length = 0;
+ return this;
+};
diff --git a/node_modules/es5-ext/array/#/compact.js b/node_modules/es5-ext/array/#/compact.js
new file mode 100644
index 0000000..462e100
--- /dev/null
+++ b/node_modules/es5-ext/array/#/compact.js
@@ -0,0 +1,11 @@
+// Inspired by: http://documentcloud.github.com/underscore/#compact
+
+"use strict";
+
+var isValue = require("../../object/is-value");
+
+var filter = Array.prototype.filter;
+
+module.exports = function () {
+ return filter.call(this, function (val) { return isValue(val); });
+};
diff --git a/node_modules/es5-ext/array/#/concat/implement.js b/node_modules/es5-ext/array/#/concat/implement.js
new file mode 100644
index 0000000..714a3c1
--- /dev/null
+++ b/node_modules/es5-ext/array/#/concat/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array.prototype, "concat", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/#/concat/index.js b/node_modules/es5-ext/array/#/concat/index.js
new file mode 100644
index 0000000..deac0ee
--- /dev/null
+++ b/node_modules/es5-ext/array/#/concat/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.prototype.concat : require("./shim");
diff --git a/node_modules/es5-ext/array/#/concat/is-implemented.js b/node_modules/es5-ext/array/#/concat/is-implemented.js
new file mode 100644
index 0000000..ba5a154
--- /dev/null
+++ b/node_modules/es5-ext/array/#/concat/is-implemented.js
@@ -0,0 +1,5 @@
+"use strict";
+
+var SubArray = require("../../_sub-array-dummy-safe");
+
+module.exports = function () { return new SubArray().concat("foo") instanceof SubArray; };
diff --git a/node_modules/es5-ext/array/#/concat/shim.js b/node_modules/es5-ext/array/#/concat/shim.js
new file mode 100644
index 0000000..e4cfacc
--- /dev/null
+++ b/node_modules/es5-ext/array/#/concat/shim.js
@@ -0,0 +1,44 @@
+"use strict";
+
+var isPlainArray = require("../../is-plain-array")
+ , toPosInt = require("../../../number/to-pos-integer")
+ , isObject = require("../../../object/is-object")
+ , isConcatSpreadable = require("es6-symbol").isConcatSpreadable
+ , isArray = Array.isArray
+ , concat = Array.prototype.concat
+ , forEach = Array.prototype.forEach
+ , isSpreadable;
+
+isSpreadable = function (value) {
+ if (!value) return false;
+ if (!isObject(value)) return false;
+ if (value[isConcatSpreadable] !== undefined) {
+ return Boolean(value[isConcatSpreadable]);
+ }
+ return isArray(value);
+};
+
+// eslint-disable-next-line no-unused-vars
+module.exports = function (item /*, …items*/) {
+ var result;
+ if (!this || !isArray(this) || isPlainArray(this)) {
+ return concat.apply(this, arguments);
+ }
+ result = new this.constructor();
+ if (isSpreadable(this)) {
+ forEach.call(this, function (val, i) { result[i] = val; });
+ } else {
+ result[0] = this;
+ }
+ forEach.call(arguments, function (arg) {
+ var base;
+ if (isSpreadable(arg)) {
+ base = result.length;
+ result.length += toPosInt(arg.length);
+ forEach.call(arg, function (val, i) { result[base + i] = val; });
+ return;
+ }
+ result.push(arg);
+ });
+ return result;
+};
diff --git a/node_modules/es5-ext/array/#/contains.js b/node_modules/es5-ext/array/#/contains.js
new file mode 100644
index 0000000..6dda9c4
--- /dev/null
+++ b/node_modules/es5-ext/array/#/contains.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var indexOf = require("./e-index-of");
+
+module.exports = function (searchElement /*, position*/) {
+ return indexOf.call(this, searchElement, arguments[1]) > -1;
+};
diff --git a/node_modules/es5-ext/array/#/copy-within/implement.js b/node_modules/es5-ext/array/#/copy-within/implement.js
new file mode 100644
index 0000000..4658fcb
--- /dev/null
+++ b/node_modules/es5-ext/array/#/copy-within/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array.prototype, "copyWithin", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/#/copy-within/index.js b/node_modules/es5-ext/array/#/copy-within/index.js
new file mode 100644
index 0000000..37db0ec
--- /dev/null
+++ b/node_modules/es5-ext/array/#/copy-within/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.prototype.copyWithin : require("./shim");
diff --git a/node_modules/es5-ext/array/#/copy-within/is-implemented.js b/node_modules/es5-ext/array/#/copy-within/is-implemented.js
new file mode 100644
index 0000000..40c499e
--- /dev/null
+++ b/node_modules/es5-ext/array/#/copy-within/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var arr = [1, 2, 3, 4, 5];
+ if (typeof arr.copyWithin !== "function") return false;
+ return String(arr.copyWithin(1, 3)) === "1,4,5,4,5";
+};
diff --git a/node_modules/es5-ext/array/#/copy-within/shim.js b/node_modules/es5-ext/array/#/copy-within/shim.js
new file mode 100644
index 0000000..aad220c
--- /dev/null
+++ b/node_modules/es5-ext/array/#/copy-within/shim.js
@@ -0,0 +1,45 @@
+// Taken from: https://github.com/paulmillr/es6-shim/
+
+"use strict";
+
+var toInteger = require("../../../number/to-integer")
+ , toPosInt = require("../../../number/to-pos-integer")
+ , validValue = require("../../../object/valid-value")
+ , objHasOwnProperty = Object.prototype.hasOwnProperty
+ , max = Math.max
+ , min = Math.min;
+
+module.exports = function (target, start /*, end*/) {
+ var arr = validValue(this)
+ , end = arguments[2]
+ , length = toPosInt(arr.length)
+ , to
+ , from
+ , fin
+ , count
+ , direction;
+
+ target = toInteger(target);
+ start = toInteger(start);
+ end = end === undefined ? length : toInteger(end);
+
+ to = target < 0 ? max(length + target, 0) : min(target, length);
+ from = start < 0 ? max(length + start, 0) : min(start, length);
+ fin = end < 0 ? max(length + end, 0) : min(end, length);
+ count = min(fin - from, length - to);
+ direction = 1;
+
+ if (from < to && to < from + count) {
+ direction = -1;
+ from += count - 1;
+ to += count - 1;
+ }
+ while (count > 0) {
+ if (objHasOwnProperty.call(arr, from)) arr[to] = arr[from];
+ else delete arr[from];
+ from += direction;
+ to += direction;
+ count -= 1;
+ }
+ return arr;
+};
diff --git a/node_modules/es5-ext/array/#/diff.js b/node_modules/es5-ext/array/#/diff.js
new file mode 100644
index 0000000..002e6a3
--- /dev/null
+++ b/node_modules/es5-ext/array/#/diff.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var value = require("../../object/valid-value")
+ , contains = require("./contains")
+ , filter = Array.prototype.filter;
+
+module.exports = function (other) {
+ value(this);
+ value(other);
+ return filter.call(this, function (item) { return !contains.call(other, item); });
+};
diff --git a/node_modules/es5-ext/array/#/e-index-of.js b/node_modules/es5-ext/array/#/e-index-of.js
new file mode 100644
index 0000000..8b07011
--- /dev/null
+++ b/node_modules/es5-ext/array/#/e-index-of.js
@@ -0,0 +1,28 @@
+"use strict";
+
+var numberIsNaN = require("../../number/is-nan")
+ , toPosInt = require("../../number/to-pos-integer")
+ , value = require("../../object/valid-value")
+ , indexOf = Array.prototype.indexOf
+ , objHasOwnProperty = Object.prototype.hasOwnProperty
+ , abs = Math.abs
+ , floor = Math.floor;
+
+module.exports = function (searchElement /*, fromIndex*/) {
+ var i, length, fromIndex, val;
+ if (!numberIsNaN(searchElement)) return indexOf.apply(this, arguments);
+
+ length = toPosInt(value(this).length);
+ fromIndex = arguments[1];
+ if (isNaN(fromIndex)) fromIndex = 0;
+ else if (fromIndex >= 0) fromIndex = floor(fromIndex);
+ else fromIndex = toPosInt(this.length) - floor(abs(fromIndex));
+
+ for (i = fromIndex; i < length; ++i) {
+ if (objHasOwnProperty.call(this, i)) {
+ val = this[i];
+ if (numberIsNaN(val)) return i; // Jslint: ignore
+ }
+ }
+ return -1;
+};
diff --git a/node_modules/es5-ext/array/#/e-last-index-of.js b/node_modules/es5-ext/array/#/e-last-index-of.js
new file mode 100644
index 0000000..15dbe05
--- /dev/null
+++ b/node_modules/es5-ext/array/#/e-last-index-of.js
@@ -0,0 +1,31 @@
+"use strict";
+
+var numberIsNaN = require("../../number/is-nan")
+ , toPosInt = require("../../number/to-pos-integer")
+ , value = require("../../object/valid-value")
+ , lastIndexOf = Array.prototype.lastIndexOf
+ , objHasOwnProperty = Object.prototype.hasOwnProperty
+ , abs = Math.abs
+ , floor = Math.floor;
+
+module.exports = function (searchElement /*, fromIndex*/) {
+ var i, fromIndex, val;
+ if (!numberIsNaN(searchElement)) {
+ // Jslint: ignore
+ return lastIndexOf.apply(this, arguments);
+ }
+
+ value(this);
+ fromIndex = arguments[1];
+ if (isNaN(fromIndex)) fromIndex = toPosInt(this.length) - 1;
+ else if (fromIndex >= 0) fromIndex = floor(fromIndex);
+ else fromIndex = toPosInt(this.length) - floor(abs(fromIndex));
+
+ for (i = fromIndex; i >= 0; --i) {
+ if (objHasOwnProperty.call(this, i)) {
+ val = this[i];
+ if (numberIsNaN(val)) return i; // Jslint: ignore
+ }
+ }
+ return -1;
+};
diff --git a/node_modules/es5-ext/array/#/entries/implement.js b/node_modules/es5-ext/array/#/entries/implement.js
new file mode 100644
index 0000000..b89ce44
--- /dev/null
+++ b/node_modules/es5-ext/array/#/entries/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array.prototype, "entries", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/#/entries/index.js b/node_modules/es5-ext/array/#/entries/index.js
new file mode 100644
index 0000000..e7588f7
--- /dev/null
+++ b/node_modules/es5-ext/array/#/entries/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.prototype.entries : require("./shim");
diff --git a/node_modules/es5-ext/array/#/entries/is-implemented.js b/node_modules/es5-ext/array/#/entries/is-implemented.js
new file mode 100644
index 0000000..335f1c2
--- /dev/null
+++ b/node_modules/es5-ext/array/#/entries/is-implemented.js
@@ -0,0 +1,15 @@
+"use strict";
+
+module.exports = function () {
+ var arr = [1, "foo"], iterator, result;
+ if (typeof arr.entries !== "function") return false;
+ iterator = arr.entries();
+ if (!iterator) return false;
+ if (typeof iterator.next !== "function") return false;
+ result = iterator.next();
+ if (!result || !result.value) return false;
+ if (result.value[0] !== 0) return false;
+ if (result.value[1] !== 1) return false;
+ if (result.done !== false) return false;
+ return true;
+};
diff --git a/node_modules/es5-ext/array/#/entries/shim.js b/node_modules/es5-ext/array/#/entries/shim.js
new file mode 100644
index 0000000..f47af86
--- /dev/null
+++ b/node_modules/es5-ext/array/#/entries/shim.js
@@ -0,0 +1,4 @@
+"use strict";
+
+var ArrayIterator = require("es6-iterator/array");
+module.exports = function () { return new ArrayIterator(this, "key+value"); };
diff --git a/node_modules/es5-ext/array/#/exclusion.js b/node_modules/es5-ext/array/#/exclusion.js
new file mode 100644
index 0000000..4e9e71d
--- /dev/null
+++ b/node_modules/es5-ext/array/#/exclusion.js
@@ -0,0 +1,25 @@
+"use strict";
+
+var value = require("../../object/valid-value")
+ , aFrom = require("../from")
+ , toArray = require("../to-array")
+ , contains = require("./contains")
+ , byLength = require("./_compare-by-length")
+ , filter = Array.prototype.filter
+ , push = Array.prototype.push;
+
+module.exports = function (/* …lists*/) {
+ var lists, seen, result;
+ if (!arguments.length) return aFrom(this);
+ push.apply((lists = [this]), arguments);
+ lists.forEach(value);
+ seen = [];
+ result = [];
+ lists.sort(byLength).forEach(function (list) {
+ result = result
+ .filter(function (item) { return !contains.call(list, item); })
+ .concat(filter.call(list, function (item) { return !contains.call(seen, item); }));
+ push.apply(seen, toArray(list));
+ });
+ return result;
+};
diff --git a/node_modules/es5-ext/array/#/fill/implement.js b/node_modules/es5-ext/array/#/fill/implement.js
new file mode 100644
index 0000000..0efad16
--- /dev/null
+++ b/node_modules/es5-ext/array/#/fill/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array.prototype, "fill", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/#/fill/index.js b/node_modules/es5-ext/array/#/fill/index.js
new file mode 100644
index 0000000..6a66ae1
--- /dev/null
+++ b/node_modules/es5-ext/array/#/fill/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.prototype.fill : require("./shim");
diff --git a/node_modules/es5-ext/array/#/fill/is-implemented.js b/node_modules/es5-ext/array/#/fill/is-implemented.js
new file mode 100644
index 0000000..5d6d02e
--- /dev/null
+++ b/node_modules/es5-ext/array/#/fill/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var arr = [1, 2, 3, 4, 5, 6];
+ if (typeof arr.fill !== "function") return false;
+ return String(arr.fill(-1, -3)) === "1,2,3,-1,-1,-1";
+};
diff --git a/node_modules/es5-ext/array/#/fill/shim.js b/node_modules/es5-ext/array/#/fill/shim.js
new file mode 100644
index 0000000..0040bf8
--- /dev/null
+++ b/node_modules/es5-ext/array/#/fill/shim.js
@@ -0,0 +1,25 @@
+// Taken from: https://github.com/paulmillr/es6-shim/
+
+"use strict";
+
+var toInteger = require("../../../number/to-integer")
+ , toPosInt = require("../../../number/to-pos-integer")
+ , validValue = require("../../../object/valid-value")
+ , max = Math.max
+ , min = Math.min;
+
+module.exports = function (value /*, start, end*/) {
+ var arr = validValue(this)
+ , start = arguments[1]
+ , end = arguments[2]
+ , length = toPosInt(arr.length)
+ , relativeStart
+ , i;
+
+ start = start === undefined ? 0 : toInteger(start);
+ end = end === undefined ? length : toInteger(end);
+
+ relativeStart = start < 0 ? max(length + start, 0) : min(start, length);
+ for (i = relativeStart; i < length && i < end; ++i) arr[i] = value;
+ return arr;
+};
diff --git a/node_modules/es5-ext/array/#/filter/implement.js b/node_modules/es5-ext/array/#/filter/implement.js
new file mode 100644
index 0000000..76f4a5e
--- /dev/null
+++ b/node_modules/es5-ext/array/#/filter/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array.prototype, "filter", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/#/filter/index.js b/node_modules/es5-ext/array/#/filter/index.js
new file mode 100644
index 0000000..9a25c9b
--- /dev/null
+++ b/node_modules/es5-ext/array/#/filter/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.prototype.filter : require("./shim");
diff --git a/node_modules/es5-ext/array/#/filter/is-implemented.js b/node_modules/es5-ext/array/#/filter/is-implemented.js
new file mode 100644
index 0000000..6082513
--- /dev/null
+++ b/node_modules/es5-ext/array/#/filter/is-implemented.js
@@ -0,0 +1,6 @@
+"use strict";
+
+var SubArray = require("../../_sub-array-dummy-safe")
+ , pass = function () { return true; };
+
+module.exports = function () { return new SubArray().filter(pass) instanceof SubArray; };
diff --git a/node_modules/es5-ext/array/#/filter/shim.js b/node_modules/es5-ext/array/#/filter/shim.js
new file mode 100644
index 0000000..38304e4
--- /dev/null
+++ b/node_modules/es5-ext/array/#/filter/shim.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var isPlainArray = require("../../is-plain-array")
+ , callable = require("../../../object/valid-callable")
+ , isArray = Array.isArray
+ , filter = Array.prototype.filter
+ , forEach = Array.prototype.forEach
+ , call = Function.prototype.call;
+
+module.exports = function (callbackFn /*, thisArg*/) {
+ var result, thisArg, i;
+ if (!this || !isArray(this) || isPlainArray(this)) {
+ return filter.apply(this, arguments);
+ }
+ callable(callbackFn);
+ thisArg = arguments[1];
+ result = new this.constructor();
+ i = 0;
+ forEach.call(this, function (val, j, self) {
+ if (call.call(callbackFn, thisArg, val, j, self)) result[i++] = val;
+ });
+ return result;
+};
diff --git a/node_modules/es5-ext/array/#/find-index/implement.js b/node_modules/es5-ext/array/#/find-index/implement.js
new file mode 100644
index 0000000..4e14e29
--- /dev/null
+++ b/node_modules/es5-ext/array/#/find-index/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array.prototype, "findIndex", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/#/find-index/index.js b/node_modules/es5-ext/array/#/find-index/index.js
new file mode 100644
index 0000000..5e07d8d
--- /dev/null
+++ b/node_modules/es5-ext/array/#/find-index/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.prototype.findIndex : require("./shim");
diff --git a/node_modules/es5-ext/array/#/find-index/is-implemented.js b/node_modules/es5-ext/array/#/find-index/is-implemented.js
new file mode 100644
index 0000000..72aa28f
--- /dev/null
+++ b/node_modules/es5-ext/array/#/find-index/is-implemented.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var fn = function (value) { return value > 3; };
+
+module.exports = function () {
+ var arr = [1, 2, 3, 4, 5, 6];
+ if (typeof arr.findIndex !== "function") return false;
+ return arr.findIndex(fn) === 3;
+};
diff --git a/node_modules/es5-ext/array/#/find-index/shim.js b/node_modules/es5-ext/array/#/find-index/shim.js
new file mode 100644
index 0000000..bc82827
--- /dev/null
+++ b/node_modules/es5-ext/array/#/find-index/shim.js
@@ -0,0 +1,26 @@
+"use strict";
+
+var callable = require("../../../object/valid-callable")
+ , ensureValue = require("../../../object/valid-value")
+ , some = Array.prototype.some
+ , apply = Function.prototype.apply;
+
+module.exports = function (predicate /*, thisArg*/) {
+ var k, self;
+ self = Object(ensureValue(this));
+ callable(predicate);
+
+ return some.call(
+ self,
+ function (value, index) {
+ if (apply.call(predicate, this, arguments)) {
+ k = index;
+ return true;
+ }
+ return false;
+ },
+ arguments[1]
+ )
+ ? k
+ : -1;
+};
diff --git a/node_modules/es5-ext/array/#/find/implement.js b/node_modules/es5-ext/array/#/find/implement.js
new file mode 100644
index 0000000..66035a5
--- /dev/null
+++ b/node_modules/es5-ext/array/#/find/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array.prototype, "find", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/#/find/index.js b/node_modules/es5-ext/array/#/find/index.js
new file mode 100644
index 0000000..2f9d0d6
--- /dev/null
+++ b/node_modules/es5-ext/array/#/find/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.prototype.find : require("./shim");
diff --git a/node_modules/es5-ext/array/#/find/is-implemented.js b/node_modules/es5-ext/array/#/find/is-implemented.js
new file mode 100644
index 0000000..8fdacb1
--- /dev/null
+++ b/node_modules/es5-ext/array/#/find/is-implemented.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var fn = function (value) { return value > 3; };
+
+module.exports = function () {
+ var arr = [1, 2, 3, 4, 5, 6];
+ if (typeof arr.find !== "function") return false;
+ return arr.find(fn) === 4;
+};
diff --git a/node_modules/es5-ext/array/#/find/shim.js b/node_modules/es5-ext/array/#/find/shim.js
new file mode 100644
index 0000000..c45a938
--- /dev/null
+++ b/node_modules/es5-ext/array/#/find/shim.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var findIndex = require("../find-index/shim");
+
+// eslint-disable-next-line no-unused-vars
+module.exports = function (predicate /*, thisArg*/) {
+ var index = findIndex.apply(this, arguments);
+ return index === -1 ? undefined : this[index];
+};
diff --git a/node_modules/es5-ext/array/#/first-index.js b/node_modules/es5-ext/array/#/first-index.js
new file mode 100644
index 0000000..19bff54
--- /dev/null
+++ b/node_modules/es5-ext/array/#/first-index.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var toPosInt = require("../../number/to-pos-integer")
+ , value = require("../../object/valid-value")
+ , objHasOwnProperty = Object.prototype.hasOwnProperty;
+
+module.exports = function () {
+ var i, length;
+ if (!(length = toPosInt(value(this).length))) return null;
+ i = 0;
+ while (!objHasOwnProperty.call(this, i)) {
+ if (++i === length) return null;
+ }
+ return i;
+};
diff --git a/node_modules/es5-ext/array/#/first.js b/node_modules/es5-ext/array/#/first.js
new file mode 100644
index 0000000..ca76833
--- /dev/null
+++ b/node_modules/es5-ext/array/#/first.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var firstIndex = require("./first-index");
+
+module.exports = function () {
+ var i;
+ if ((i = firstIndex.call(this)) !== null) return this[i];
+ return undefined;
+};
diff --git a/node_modules/es5-ext/array/#/flatten.js b/node_modules/es5-ext/array/#/flatten.js
new file mode 100644
index 0000000..4016727
--- /dev/null
+++ b/node_modules/es5-ext/array/#/flatten.js
@@ -0,0 +1,40 @@
+// Stack grow safe implementation
+
+"use strict";
+
+var ensureValue = require("../../object/valid-value")
+ , isArray = Array.isArray
+ , objHasOwnProperty = Object.prototype.hasOwnProperty;
+
+module.exports = function () {
+ var input = ensureValue(this), index = 0, remaining, remainingIndexes, length, i, result = [];
+ // Jslint: ignore
+ main: while (input) {
+ length = input.length;
+ for (i = index; i < length; ++i) {
+ if (!objHasOwnProperty.call(input, i)) continue;
+ if (isArray(input[i])) {
+ if (i < length - 1) {
+ // eslint-disable-next-line max-depth
+ if (!remaining) {
+ remaining = [];
+ remainingIndexes = [];
+ }
+ remaining.push(input);
+ remainingIndexes.push(i + 1);
+ }
+ input = input[i];
+ index = 0;
+ continue main;
+ }
+ result.push(input[i]);
+ }
+ if (remaining) {
+ input = remaining.pop();
+ index = remainingIndexes.pop();
+ } else {
+ input = null;
+ }
+ }
+ return result;
+};
diff --git a/node_modules/es5-ext/array/#/for-each-right.js b/node_modules/es5-ext/array/#/for-each-right.js
new file mode 100644
index 0000000..ebf076b
--- /dev/null
+++ b/node_modules/es5-ext/array/#/for-each-right.js
@@ -0,0 +1,19 @@
+"use strict";
+
+var toPosInt = require("../../number/to-pos-integer")
+ , callable = require("../../object/valid-callable")
+ , value = require("../../object/valid-value")
+ , objHasOwnProperty = Object.prototype.hasOwnProperty
+ , call = Function.prototype.call;
+
+module.exports = function (cb /*, thisArg*/) {
+ var i, self, thisArg;
+
+ self = Object(value(this));
+ callable(cb);
+ thisArg = arguments[1];
+
+ for (i = toPosInt(self.length) - 1; i >= 0; --i) {
+ if (objHasOwnProperty.call(self, i)) call.call(cb, thisArg, self[i], i, self);
+ }
+};
diff --git a/node_modules/es5-ext/array/#/group.js b/node_modules/es5-ext/array/#/group.js
new file mode 100644
index 0000000..711eb58
--- /dev/null
+++ b/node_modules/es5-ext/array/#/group.js
@@ -0,0 +1,28 @@
+// Inspired by Underscore's groupBy:
+// http://documentcloud.github.com/underscore/#groupBy
+
+"use strict";
+
+var callable = require("../../object/valid-callable")
+ , value = require("../../object/valid-value")
+ , forEach = Array.prototype.forEach
+ , apply = Function.prototype.apply;
+
+module.exports = function (cb /*, thisArg*/) {
+ var result;
+
+ value(this);
+ callable(cb);
+
+ result = Object.create(null);
+ forEach.call(
+ this,
+ function (item) {
+ var key = apply.call(cb, this, arguments);
+ if (!result[key]) result[key] = [];
+ result[key].push(item);
+ },
+ arguments[1]
+ );
+ return result;
+};
diff --git a/node_modules/es5-ext/array/#/index.js b/node_modules/es5-ext/array/#/index.js
new file mode 100644
index 0000000..596e83b
--- /dev/null
+++ b/node_modules/es5-ext/array/#/index.js
@@ -0,0 +1,41 @@
+"use strict";
+
+module.exports = {
+ "@@iterator": require("./@@iterator"),
+ "binarySearch": require("./binary-search"),
+ "clear": require("./clear"),
+ "compact": require("./compact"),
+ "concat": require("./concat"),
+ "contains": require("./contains"),
+ "copyWithin": require("./copy-within"),
+ "diff": require("./diff"),
+ "eIndexOf": require("./e-index-of"),
+ "eLastIndexOf": require("./e-last-index-of"),
+ "entries": require("./entries"),
+ "exclusion": require("./exclusion"),
+ "fill": require("./fill"),
+ "filter": require("./filter"),
+ "find": require("./find"),
+ "findIndex": require("./find-index"),
+ "first": require("./first"),
+ "firstIndex": require("./first-index"),
+ "flatten": require("./flatten"),
+ "forEachRight": require("./for-each-right"),
+ "keys": require("./keys"),
+ "group": require("./group"),
+ "indexesOf": require("./indexes-of"),
+ "intersection": require("./intersection"),
+ "isCopy": require("./is-copy"),
+ "isEmpty": require("./is-empty"),
+ "isUniq": require("./is-uniq"),
+ "last": require("./last"),
+ "lastIndex": require("./last-index"),
+ "map": require("./map"),
+ "remove": require("./remove"),
+ "separate": require("./separate"),
+ "slice": require("./slice"),
+ "someRight": require("./some-right"),
+ "splice": require("./splice"),
+ "uniq": require("./uniq"),
+ "values": require("./values")
+};
diff --git a/node_modules/es5-ext/array/#/indexes-of.js b/node_modules/es5-ext/array/#/indexes-of.js
new file mode 100644
index 0000000..6c39cd9
--- /dev/null
+++ b/node_modules/es5-ext/array/#/indexes-of.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var indexOf = require("./e-index-of");
+
+module.exports = function (value /*, fromIndex*/) {
+ var result = [], i, fromIndex = arguments[1];
+ while ((i = indexOf.call(this, value, fromIndex)) !== -1) {
+ result.push(i);
+ fromIndex = i + 1;
+ }
+ return result;
+};
diff --git a/node_modules/es5-ext/array/#/intersection.js b/node_modules/es5-ext/array/#/intersection.js
new file mode 100644
index 0000000..7dca9dc
--- /dev/null
+++ b/node_modules/es5-ext/array/#/intersection.js
@@ -0,0 +1,19 @@
+"use strict";
+
+var value = require("../../object/valid-value")
+ , contains = require("./contains")
+ , byLength = require("./_compare-by-length")
+ , filter = Array.prototype.filter
+ , push = Array.prototype.push
+ , slice = Array.prototype.slice;
+
+module.exports = function (/* …list*/) {
+ var lists;
+ if (!arguments.length) slice.call(this);
+ push.apply((lists = [this]), arguments);
+ lists.forEach(value);
+ lists.sort(byLength);
+ return lists.reduce(function (list1, list2) {
+ return filter.call(list1, function (item) { return contains.call(list2, item); });
+ });
+};
diff --git a/node_modules/es5-ext/array/#/is-copy.js b/node_modules/es5-ext/array/#/is-copy.js
new file mode 100644
index 0000000..1413b95
--- /dev/null
+++ b/node_modules/es5-ext/array/#/is-copy.js
@@ -0,0 +1,21 @@
+"use strict";
+
+var toPosInt = require("../../number/to-pos-integer")
+ , eq = require("../../object/eq")
+ , value = require("../../object/valid-value")
+ , objHasOwnProperty = Object.prototype.hasOwnProperty;
+
+module.exports = function (other) {
+ var i, length;
+ value(this);
+ value(other);
+ length = toPosInt(this.length);
+ if (length !== toPosInt(other.length)) return false;
+ for (i = 0; i < length; ++i) {
+ if (objHasOwnProperty.call(this, i) !== objHasOwnProperty.call(other, i)) {
+ return false;
+ }
+ if (!eq(this[i], other[i])) return false;
+ }
+ return true;
+};
diff --git a/node_modules/es5-ext/array/#/is-empty.js b/node_modules/es5-ext/array/#/is-empty.js
new file mode 100644
index 0000000..9b336fe
--- /dev/null
+++ b/node_modules/es5-ext/array/#/is-empty.js
@@ -0,0 +1,6 @@
+"use strict";
+
+var ensureArray = require("../../object/ensure-array")
+ , firstIndex = require("./first-index");
+
+module.exports = function () { return firstIndex.call(ensureArray(this)) === null; };
diff --git a/node_modules/es5-ext/array/#/is-uniq.js b/node_modules/es5-ext/array/#/is-uniq.js
new file mode 100644
index 0000000..75f7734
--- /dev/null
+++ b/node_modules/es5-ext/array/#/is-uniq.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var indexOf = require("./e-index-of")
+ , every = Array.prototype.every
+ , isFirst;
+
+isFirst = function (value, index) { return indexOf.call(this, value) === index; };
+
+module.exports = function () { return every.call(this, isFirst, this); };
diff --git a/node_modules/es5-ext/array/#/keys/implement.js b/node_modules/es5-ext/array/#/keys/implement.js
new file mode 100644
index 0000000..101a5e3
--- /dev/null
+++ b/node_modules/es5-ext/array/#/keys/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array.prototype, "keys", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/#/keys/index.js b/node_modules/es5-ext/array/#/keys/index.js
new file mode 100644
index 0000000..c8753e5
--- /dev/null
+++ b/node_modules/es5-ext/array/#/keys/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.prototype.keys : require("./shim");
diff --git a/node_modules/es5-ext/array/#/keys/is-implemented.js b/node_modules/es5-ext/array/#/keys/is-implemented.js
new file mode 100644
index 0000000..70a171f
--- /dev/null
+++ b/node_modules/es5-ext/array/#/keys/is-implemented.js
@@ -0,0 +1,14 @@
+"use strict";
+
+module.exports = function () {
+ var arr = [1, "foo"], iterator, result;
+ if (typeof arr.keys !== "function") return false;
+ iterator = arr.keys();
+ if (!iterator) return false;
+ if (typeof iterator.next !== "function") return false;
+ result = iterator.next();
+ if (!result) return false;
+ if (result.value !== 0) return false;
+ if (result.done !== false) return false;
+ return true;
+};
diff --git a/node_modules/es5-ext/array/#/keys/shim.js b/node_modules/es5-ext/array/#/keys/shim.js
new file mode 100644
index 0000000..8136cdc
--- /dev/null
+++ b/node_modules/es5-ext/array/#/keys/shim.js
@@ -0,0 +1,4 @@
+"use strict";
+
+var ArrayIterator = require("es6-iterator/array");
+module.exports = function () { return new ArrayIterator(this, "key"); };
diff --git a/node_modules/es5-ext/array/#/last-index.js b/node_modules/es5-ext/array/#/last-index.js
new file mode 100644
index 0000000..74aaba4
--- /dev/null
+++ b/node_modules/es5-ext/array/#/last-index.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var toPosInt = require("../../number/to-pos-integer")
+ , value = require("../../object/valid-value")
+ , objHasOwnProperty = Object.prototype.hasOwnProperty;
+
+module.exports = function () {
+ var i, length;
+ if (!(length = toPosInt(value(this).length))) return null;
+ i = length - 1;
+ while (!objHasOwnProperty.call(this, i)) {
+ if (--i === -1) return null;
+ }
+ return i;
+};
diff --git a/node_modules/es5-ext/array/#/last.js b/node_modules/es5-ext/array/#/last.js
new file mode 100644
index 0000000..38bb359
--- /dev/null
+++ b/node_modules/es5-ext/array/#/last.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var lastIndex = require("./last-index");
+
+module.exports = function () {
+ var i;
+ if ((i = lastIndex.call(this)) !== null) return this[i];
+ return undefined;
+};
diff --git a/node_modules/es5-ext/array/#/map/implement.js b/node_modules/es5-ext/array/#/map/implement.js
new file mode 100644
index 0000000..42e0b47
--- /dev/null
+++ b/node_modules/es5-ext/array/#/map/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array.prototype, "map", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/#/map/index.js b/node_modules/es5-ext/array/#/map/index.js
new file mode 100644
index 0000000..49e0267
--- /dev/null
+++ b/node_modules/es5-ext/array/#/map/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.prototype.map : require("./shim");
diff --git a/node_modules/es5-ext/array/#/map/is-implemented.js b/node_modules/es5-ext/array/#/map/is-implemented.js
new file mode 100644
index 0000000..f09bd7d
--- /dev/null
+++ b/node_modules/es5-ext/array/#/map/is-implemented.js
@@ -0,0 +1,6 @@
+"use strict";
+
+var identity = require("../../../function/identity")
+ , SubArray = require("../../_sub-array-dummy-safe");
+
+module.exports = function () { return new SubArray().map(identity) instanceof SubArray; };
diff --git a/node_modules/es5-ext/array/#/map/shim.js b/node_modules/es5-ext/array/#/map/shim.js
new file mode 100644
index 0000000..6e935d3
--- /dev/null
+++ b/node_modules/es5-ext/array/#/map/shim.js
@@ -0,0 +1,22 @@
+"use strict";
+
+var isPlainArray = require("../../is-plain-array")
+ , callable = require("../../../object/valid-callable")
+ , isArray = Array.isArray
+ , map = Array.prototype.map
+ , forEach = Array.prototype.forEach
+ , call = Function.prototype.call;
+
+module.exports = function (callbackFn /*, thisArg*/) {
+ var result, thisArg;
+ if (!this || !isArray(this) || isPlainArray(this)) {
+ return map.apply(this, arguments);
+ }
+ callable(callbackFn);
+ thisArg = arguments[1];
+ result = new this.constructor(this.length);
+ forEach.call(this, function (val, i, self) {
+ result[i] = call.call(callbackFn, thisArg, val, i, self);
+ });
+ return result;
+};
diff --git a/node_modules/es5-ext/array/#/remove.js b/node_modules/es5-ext/array/#/remove.js
new file mode 100644
index 0000000..6a8a086
--- /dev/null
+++ b/node_modules/es5-ext/array/#/remove.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var indexOf = require("./e-index-of")
+ , forEach = Array.prototype.forEach
+ , splice = Array.prototype.splice;
+
+// eslint-disable-next-line no-unused-vars
+module.exports = function (itemToRemove /*, …item*/) {
+ forEach.call(
+ arguments,
+ function (item) {
+ var index = indexOf.call(this, item);
+ if (index !== -1) splice.call(this, index, 1);
+ },
+ this
+ );
+};
diff --git a/node_modules/es5-ext/array/#/separate.js b/node_modules/es5-ext/array/#/separate.js
new file mode 100644
index 0000000..248662f
--- /dev/null
+++ b/node_modules/es5-ext/array/#/separate.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var forEach = Array.prototype.forEach;
+
+module.exports = function (sep) {
+ var result = [];
+ forEach.call(this, function (val) { result.push(val, sep); });
+ result.pop();
+ return result;
+};
diff --git a/node_modules/es5-ext/array/#/slice/implement.js b/node_modules/es5-ext/array/#/slice/implement.js
new file mode 100644
index 0000000..113d34d
--- /dev/null
+++ b/node_modules/es5-ext/array/#/slice/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array.prototype, "slice", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/#/slice/index.js b/node_modules/es5-ext/array/#/slice/index.js
new file mode 100644
index 0000000..716b7e0
--- /dev/null
+++ b/node_modules/es5-ext/array/#/slice/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.prototype.slice : require("./shim");
diff --git a/node_modules/es5-ext/array/#/slice/is-implemented.js b/node_modules/es5-ext/array/#/slice/is-implemented.js
new file mode 100644
index 0000000..4c83bfa
--- /dev/null
+++ b/node_modules/es5-ext/array/#/slice/is-implemented.js
@@ -0,0 +1,5 @@
+"use strict";
+
+var SubArray = require("../../_sub-array-dummy-safe");
+
+module.exports = function () { return new SubArray().slice() instanceof SubArray; };
diff --git a/node_modules/es5-ext/array/#/slice/shim.js b/node_modules/es5-ext/array/#/slice/shim.js
new file mode 100644
index 0000000..ff13085
--- /dev/null
+++ b/node_modules/es5-ext/array/#/slice/shim.js
@@ -0,0 +1,36 @@
+"use strict";
+
+var toInteger = require("../../../number/to-integer")
+ , toPosInt = require("../../../number/to-pos-integer")
+ , isPlainArray = require("../../is-plain-array")
+ , isArray = Array.isArray
+ , slice = Array.prototype.slice
+ , objHasOwnProperty = Object.prototype.hasOwnProperty
+ , max = Math.max;
+
+module.exports = function (start, end) {
+ var length, result, i;
+ if (!this || !isArray(this) || isPlainArray(this)) {
+ return slice.apply(this, arguments);
+ }
+ length = toPosInt(this.length);
+ start = toInteger(start);
+ if (start < 0) start = max(length + start, 0);
+ else if (start > length) start = length;
+ if (end === undefined) {
+ end = length;
+ } else {
+ end = toInteger(end);
+ if (end < 0) end = max(length + end, 0);
+ else if (end > length) end = length;
+ }
+ if (start > end) start = end;
+ result = new this.constructor(end - start);
+ i = 0;
+ while (start !== end) {
+ if (objHasOwnProperty.call(this, start)) result[i] = this[start];
+ ++i;
+ ++start;
+ }
+ return result;
+};
diff --git a/node_modules/es5-ext/array/#/some-right.js b/node_modules/es5-ext/array/#/some-right.js
new file mode 100644
index 0000000..d9a665f
--- /dev/null
+++ b/node_modules/es5-ext/array/#/some-right.js
@@ -0,0 +1,21 @@
+"use strict";
+
+var toPosInt = require("../../number/to-pos-integer")
+ , callable = require("../../object/valid-callable")
+ , value = require("../../object/valid-value")
+ , objHasOwnProperty = Object.prototype.hasOwnProperty
+ , call = Function.prototype.call;
+
+module.exports = function (cb /*, thisArg*/) {
+ var i, self, thisArg;
+ self = Object(value(this));
+ callable(cb);
+ thisArg = arguments[1];
+
+ for (i = toPosInt(self.length) - 1; i >= 0; --i) {
+ if (objHasOwnProperty.call(self, i) && call.call(cb, thisArg, self[i], i, self)) {
+ return true;
+ }
+ }
+ return false;
+};
diff --git a/node_modules/es5-ext/array/#/splice/implement.js b/node_modules/es5-ext/array/#/splice/implement.js
new file mode 100644
index 0000000..236b1cb
--- /dev/null
+++ b/node_modules/es5-ext/array/#/splice/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array.prototype, "splice", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/#/splice/index.js b/node_modules/es5-ext/array/#/splice/index.js
new file mode 100644
index 0000000..cd5c3ec
--- /dev/null
+++ b/node_modules/es5-ext/array/#/splice/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.prototype.splice : require("./shim");
diff --git a/node_modules/es5-ext/array/#/splice/is-implemented.js b/node_modules/es5-ext/array/#/splice/is-implemented.js
new file mode 100644
index 0000000..085cba5
--- /dev/null
+++ b/node_modules/es5-ext/array/#/splice/is-implemented.js
@@ -0,0 +1,5 @@
+"use strict";
+
+var SubArray = require("../../_sub-array-dummy-safe");
+
+module.exports = function () { return new SubArray().splice(0) instanceof SubArray; };
diff --git a/node_modules/es5-ext/array/#/splice/shim.js b/node_modules/es5-ext/array/#/splice/shim.js
new file mode 100644
index 0000000..fe1f8c2
--- /dev/null
+++ b/node_modules/es5-ext/array/#/splice/shim.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var isPlainArray = require("../../is-plain-array")
+ , isArray = Array.isArray
+ , splice = Array.prototype.splice
+ , forEach = Array.prototype.forEach;
+
+// eslint-disable-next-line no-unused-vars
+module.exports = function (start, deleteCount /*, …items*/) {
+ var arr = splice.apply(this, arguments), result;
+ if (!this || !isArray(this) || isPlainArray(this)) return arr;
+ result = new this.constructor(arr.length);
+ forEach.call(arr, function (val, i) { result[i] = val; });
+ return result;
+};
diff --git a/node_modules/es5-ext/array/#/uniq.js b/node_modules/es5-ext/array/#/uniq.js
new file mode 100644
index 0000000..2d28bf5
--- /dev/null
+++ b/node_modules/es5-ext/array/#/uniq.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var indexOf = require("./e-index-of")
+ , filter = Array.prototype.filter
+ , isFirst;
+
+isFirst = function (value, index) { return indexOf.call(this, value) === index; };
+
+module.exports = function () { return filter.call(this, isFirst, this); };
diff --git a/node_modules/es5-ext/array/#/values/implement.js b/node_modules/es5-ext/array/#/values/implement.js
new file mode 100644
index 0000000..dce17ac
--- /dev/null
+++ b/node_modules/es5-ext/array/#/values/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array.prototype, "values", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/#/values/index.js b/node_modules/es5-ext/array/#/values/index.js
new file mode 100644
index 0000000..30a50ba
--- /dev/null
+++ b/node_modules/es5-ext/array/#/values/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.prototype.values : require("./shim");
diff --git a/node_modules/es5-ext/array/#/values/is-implemented.js b/node_modules/es5-ext/array/#/values/is-implemented.js
new file mode 100644
index 0000000..8b72568
--- /dev/null
+++ b/node_modules/es5-ext/array/#/values/is-implemented.js
@@ -0,0 +1,14 @@
+"use strict";
+
+module.exports = function () {
+ var arr = ["foo", 1], iterator, result;
+ if (typeof arr.values !== "function") return false;
+ iterator = arr.values();
+ if (!iterator) return false;
+ if (typeof iterator.next !== "function") return false;
+ result = iterator.next();
+ if (!result) return false;
+ if (result.value !== "foo") return false;
+ if (result.done !== false) return false;
+ return true;
+};
diff --git a/node_modules/es5-ext/array/#/values/shim.js b/node_modules/es5-ext/array/#/values/shim.js
new file mode 100644
index 0000000..5d013ab
--- /dev/null
+++ b/node_modules/es5-ext/array/#/values/shim.js
@@ -0,0 +1,4 @@
+"use strict";
+
+var ArrayIterator = require("es6-iterator/array");
+module.exports = function () { return new ArrayIterator(this, "value"); };
diff --git a/node_modules/es5-ext/array/_is-extensible.js b/node_modules/es5-ext/array/_is-extensible.js
new file mode 100644
index 0000000..c475711
--- /dev/null
+++ b/node_modules/es5-ext/array/_is-extensible.js
@@ -0,0 +1,14 @@
+"use strict";
+
+module.exports = (function () {
+ var SubArray = require("./_sub-array-dummy")
+ , arr;
+
+ if (!SubArray) return false;
+ arr = new SubArray();
+ if (!Array.isArray(arr)) return false;
+ if (!(arr instanceof SubArray)) return false;
+
+ arr[34] = "foo";
+ return arr.length === 35;
+})();
diff --git a/node_modules/es5-ext/array/_sub-array-dummy-safe.js b/node_modules/es5-ext/array/_sub-array-dummy-safe.js
new file mode 100644
index 0000000..bef50be
--- /dev/null
+++ b/node_modules/es5-ext/array/_sub-array-dummy-safe.js
@@ -0,0 +1,22 @@
+"use strict";
+
+var setPrototypeOf = require("../object/set-prototype-of")
+ , isExtensible = require("./_is-extensible");
+
+module.exports = (function () {
+ var SubArray;
+
+ if (isExtensible) return require("./_sub-array-dummy");
+
+ if (!setPrototypeOf) return null;
+ SubArray = function () {
+ var arr = Array.apply(this, arguments);
+ setPrototypeOf(arr, SubArray.prototype);
+ return arr;
+ };
+ setPrototypeOf(SubArray, Array);
+ SubArray.prototype = Object.create(Array.prototype, {
+ constructor: { value: SubArray, enumerable: false, writable: true, configurable: true }
+ });
+ return SubArray;
+})();
diff --git a/node_modules/es5-ext/array/_sub-array-dummy.js b/node_modules/es5-ext/array/_sub-array-dummy.js
new file mode 100644
index 0000000..5969309
--- /dev/null
+++ b/node_modules/es5-ext/array/_sub-array-dummy.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var setPrototypeOf = require("../object/set-prototype-of");
+
+module.exports = (function () {
+ var SubArray;
+
+ if (!setPrototypeOf) return null;
+ SubArray = function () { Array.apply(this, arguments); };
+ setPrototypeOf(SubArray, Array);
+ SubArray.prototype = Object.create(Array.prototype, {
+ constructor: { value: SubArray, enumerable: false, writable: true, configurable: true }
+ });
+ return SubArray;
+})();
diff --git a/node_modules/es5-ext/array/from/implement.js b/node_modules/es5-ext/array/from/implement.js
new file mode 100644
index 0000000..c08d407
--- /dev/null
+++ b/node_modules/es5-ext/array/from/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array, "from", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/from/index.js b/node_modules/es5-ext/array/from/index.js
new file mode 100644
index 0000000..81cf8d9
--- /dev/null
+++ b/node_modules/es5-ext/array/from/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.from : require("./shim");
diff --git a/node_modules/es5-ext/array/from/is-implemented.js b/node_modules/es5-ext/array/from/is-implemented.js
new file mode 100644
index 0000000..a786c76
--- /dev/null
+++ b/node_modules/es5-ext/array/from/is-implemented.js
@@ -0,0 +1,9 @@
+"use strict";
+
+module.exports = function () {
+ var from = Array.from, arr, result;
+ if (typeof from !== "function") return false;
+ arr = ["raz", "dwa"];
+ result = from(arr);
+ return Boolean(result && result !== arr && result[1] === "dwa");
+};
diff --git a/node_modules/es5-ext/array/from/shim.js b/node_modules/es5-ext/array/from/shim.js
new file mode 100644
index 0000000..bf660b6
--- /dev/null
+++ b/node_modules/es5-ext/array/from/shim.js
@@ -0,0 +1,119 @@
+"use strict";
+
+var iteratorSymbol = require("es6-symbol").iterator
+ , isArguments = require("../../function/is-arguments")
+ , isFunction = require("../../function/is-function")
+ , toPosInt = require("../../number/to-pos-integer")
+ , callable = require("../../object/valid-callable")
+ , validValue = require("../../object/valid-value")
+ , isValue = require("../../object/is-value")
+ , isString = require("../../string/is-string")
+ , isArray = Array.isArray
+ , call = Function.prototype.call
+ , desc = { configurable: true, enumerable: true, writable: true, value: null }
+ , defineProperty = Object.defineProperty;
+
+// eslint-disable-next-line complexity, max-lines-per-function
+module.exports = function (arrayLike /*, mapFn, thisArg*/) {
+ var mapFn = arguments[1]
+ , thisArg = arguments[2]
+ , Context
+ , i
+ , j
+ , arr
+ , length
+ , code
+ , iterator
+ , result
+ , getIterator
+ , value;
+
+ arrayLike = Object(validValue(arrayLike));
+
+ if (isValue(mapFn)) callable(mapFn);
+ if (!this || this === Array || !isFunction(this)) {
+ // Result: Plain array
+ if (!mapFn) {
+ if (isArguments(arrayLike)) {
+ // Source: Arguments
+ length = arrayLike.length;
+ if (length !== 1) return Array.apply(null, arrayLike);
+ arr = new Array(1);
+ arr[0] = arrayLike[0];
+ return arr;
+ }
+ if (isArray(arrayLike)) {
+ // Source: Array
+ arr = new Array((length = arrayLike.length));
+ for (i = 0; i < length; ++i) arr[i] = arrayLike[i];
+ return arr;
+ }
+ }
+ arr = [];
+ } else {
+ // Result: Non plain array
+ Context = this;
+ }
+
+ if (!isArray(arrayLike)) {
+ if ((getIterator = arrayLike[iteratorSymbol]) !== undefined) {
+ // Source: Iterator
+ iterator = callable(getIterator).call(arrayLike);
+ if (Context) arr = new Context();
+ result = iterator.next();
+ i = 0;
+ while (!result.done) {
+ value = mapFn ? call.call(mapFn, thisArg, result.value, i) : result.value;
+ if (Context) {
+ desc.value = value;
+ defineProperty(arr, i, desc);
+ } else {
+ arr[i] = value;
+ }
+ result = iterator.next();
+ ++i;
+ }
+ length = i;
+ } else if (isString(arrayLike)) {
+ // Source: String
+ length = arrayLike.length;
+ if (Context) arr = new Context();
+ for (i = 0, j = 0; i < length; ++i) {
+ value = arrayLike[i];
+ if (i + 1 < length) {
+ code = value.charCodeAt(0);
+ // eslint-disable-next-line max-depth
+ if (code >= 0xd800 && code <= 0xdbff) value += arrayLike[++i];
+ }
+ value = mapFn ? call.call(mapFn, thisArg, value, j) : value;
+ if (Context) {
+ desc.value = value;
+ defineProperty(arr, j, desc);
+ } else {
+ arr[j] = value;
+ }
+ ++j;
+ }
+ length = j;
+ }
+ }
+ if (length === undefined) {
+ // Source: array or array-like
+ length = toPosInt(arrayLike.length);
+ if (Context) arr = new Context(length);
+ for (i = 0; i < length; ++i) {
+ value = mapFn ? call.call(mapFn, thisArg, arrayLike[i], i) : arrayLike[i];
+ if (Context) {
+ desc.value = value;
+ defineProperty(arr, i, desc);
+ } else {
+ arr[i] = value;
+ }
+ }
+ }
+ if (Context) {
+ desc.value = null;
+ arr.length = length;
+ }
+ return arr;
+};
diff --git a/node_modules/es5-ext/array/generate.js b/node_modules/es5-ext/array/generate.js
new file mode 100644
index 0000000..42b6930
--- /dev/null
+++ b/node_modules/es5-ext/array/generate.js
@@ -0,0 +1,18 @@
+"use strict";
+
+var toPosInt = require("../number/to-pos-integer")
+ , value = require("../object/valid-value")
+ , slice = Array.prototype.slice;
+
+module.exports = function (length /*, …fill*/) {
+ var arr, currentLength;
+ length = toPosInt(value(length));
+ if (length === 0) return [];
+
+ arr = arguments.length < 2 ? [undefined] : slice.call(arguments, 1, 1 + length);
+
+ while ((currentLength = arr.length) < length) {
+ arr = arr.concat(arr.slice(0, length - currentLength));
+ }
+ return arr;
+};
diff --git a/node_modules/es5-ext/array/index.js b/node_modules/es5-ext/array/index.js
new file mode 100644
index 0000000..49ff58e
--- /dev/null
+++ b/node_modules/es5-ext/array/index.js
@@ -0,0 +1,11 @@
+"use strict";
+
+module.exports = {
+ "#": require("./#"),
+ "from": require("./from"),
+ "generate": require("./generate"),
+ "isPlainArray": require("./is-plain-array"),
+ "of": require("./of"),
+ "toArray": require("./to-array"),
+ "validArray": require("./valid-array")
+};
diff --git a/node_modules/es5-ext/array/is-plain-array.js b/node_modules/es5-ext/array/is-plain-array.js
new file mode 100644
index 0000000..ca3d25b
--- /dev/null
+++ b/node_modules/es5-ext/array/is-plain-array.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var isArray = Array.isArray, getPrototypeOf = Object.getPrototypeOf;
+
+module.exports = function (obj) {
+ var proto;
+ if (!obj || !isArray(obj)) return false;
+ proto = getPrototypeOf(obj);
+ if (!isArray(proto)) return false;
+ return !isArray(getPrototypeOf(proto));
+};
diff --git a/node_modules/es5-ext/array/of/implement.js b/node_modules/es5-ext/array/of/implement.js
new file mode 100644
index 0000000..6665c77
--- /dev/null
+++ b/node_modules/es5-ext/array/of/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Array, "of", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/array/of/index.js b/node_modules/es5-ext/array/of/index.js
new file mode 100644
index 0000000..503c749
--- /dev/null
+++ b/node_modules/es5-ext/array/of/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Array.of : require("./shim");
diff --git a/node_modules/es5-ext/array/of/is-implemented.js b/node_modules/es5-ext/array/of/is-implemented.js
new file mode 100644
index 0000000..3f232ca
--- /dev/null
+++ b/node_modules/es5-ext/array/of/is-implemented.js
@@ -0,0 +1,8 @@
+"use strict";
+
+module.exports = function () {
+ var of = Array.of, result;
+ if (typeof of !== "function") return false;
+ result = of("foo", "bar");
+ return Boolean(result && result[1] === "bar");
+};
diff --git a/node_modules/es5-ext/array/of/shim.js b/node_modules/es5-ext/array/of/shim.js
new file mode 100644
index 0000000..0202a8a
--- /dev/null
+++ b/node_modules/es5-ext/array/of/shim.js
@@ -0,0 +1,19 @@
+"use strict";
+
+var isFunction = require("../../function/is-function")
+ , slice = Array.prototype.slice
+ , defineProperty = Object.defineProperty
+ , desc = { configurable: true, enumerable: true, writable: true, value: null };
+
+module.exports = function (/* …items*/) {
+ var result, i, length;
+ if (!this || this === Array || !isFunction(this)) return slice.call(arguments);
+ result = new this((length = arguments.length));
+ for (i = 0; i < length; ++i) {
+ desc.value = arguments[i];
+ defineProperty(result, i, desc);
+ }
+ desc.value = null;
+ result.length = length;
+ return result;
+};
diff --git a/node_modules/es5-ext/array/to-array.js b/node_modules/es5-ext/array/to-array.js
new file mode 100644
index 0000000..2515e02
--- /dev/null
+++ b/node_modules/es5-ext/array/to-array.js
@@ -0,0 +1,6 @@
+"use strict";
+
+var from = require("./from")
+ , isArray = Array.isArray;
+
+module.exports = function (arrayLike) { return isArray(arrayLike) ? arrayLike : from(arrayLike); };
diff --git a/node_modules/es5-ext/array/valid-array.js b/node_modules/es5-ext/array/valid-array.js
new file mode 100644
index 0000000..1e58c39
--- /dev/null
+++ b/node_modules/es5-ext/array/valid-array.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isArray = Array.isArray;
+
+module.exports = function (value) {
+ if (isArray(value)) return value;
+ throw new TypeError(value + " is not an array");
+};
diff --git a/node_modules/es5-ext/boolean/index.js b/node_modules/es5-ext/boolean/index.js
new file mode 100644
index 0000000..3513642
--- /dev/null
+++ b/node_modules/es5-ext/boolean/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = { isBoolean: require("./is-boolean") };
diff --git a/node_modules/es5-ext/boolean/is-boolean.js b/node_modules/es5-ext/boolean/is-boolean.js
new file mode 100644
index 0000000..394845f
--- /dev/null
+++ b/node_modules/es5-ext/boolean/is-boolean.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var objToString = Object.prototype.toString, id = objToString.call(true);
+
+module.exports = function (value) {
+ return (
+ typeof value === "boolean" ||
+ (typeof value === "object" && (value instanceof Boolean || objToString.call(value) === id))
+ );
+};
diff --git a/node_modules/es5-ext/date/#/copy.js b/node_modules/es5-ext/date/#/copy.js
new file mode 100644
index 0000000..1262ae0
--- /dev/null
+++ b/node_modules/es5-ext/date/#/copy.js
@@ -0,0 +1,5 @@
+"use strict";
+
+var getTime = Date.prototype.getTime;
+
+module.exports = function () { return new Date(getTime.call(this)); };
diff --git a/node_modules/es5-ext/date/#/days-in-month.js b/node_modules/es5-ext/date/#/days-in-month.js
new file mode 100644
index 0000000..731d4d5
--- /dev/null
+++ b/node_modules/es5-ext/date/#/days-in-month.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var getMonth = Date.prototype.getMonth;
+
+module.exports = function () {
+ switch (getMonth.call(this)) {
+ case 1:
+ return this.getFullYear() % 4 ? 28 : 29;
+ case 3:
+ case 5:
+ case 8:
+ case 10:
+ return 30;
+ default:
+ return 31;
+ }
+};
diff --git a/node_modules/es5-ext/date/#/floor-day.js b/node_modules/es5-ext/date/#/floor-day.js
new file mode 100644
index 0000000..db696d3
--- /dev/null
+++ b/node_modules/es5-ext/date/#/floor-day.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var setHours = Date.prototype.setHours;
+
+module.exports = function () {
+ setHours.call(this, 0, 0, 0, 0);
+ return this;
+};
diff --git a/node_modules/es5-ext/date/#/floor-month.js b/node_modules/es5-ext/date/#/floor-month.js
new file mode 100644
index 0000000..c9c0460
--- /dev/null
+++ b/node_modules/es5-ext/date/#/floor-month.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var floorDay = require("./floor-day");
+
+module.exports = function () {
+ floorDay.call(this).setDate(1);
+ return this;
+};
diff --git a/node_modules/es5-ext/date/#/floor-year.js b/node_modules/es5-ext/date/#/floor-year.js
new file mode 100644
index 0000000..e9b6f0f
--- /dev/null
+++ b/node_modules/es5-ext/date/#/floor-year.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var floorMonth = require("./floor-month");
+
+module.exports = function () {
+ floorMonth.call(this).setMonth(0);
+ return this;
+};
diff --git a/node_modules/es5-ext/date/#/format.js b/node_modules/es5-ext/date/#/format.js
new file mode 100644
index 0000000..8474dbb
--- /dev/null
+++ b/node_modules/es5-ext/date/#/format.js
@@ -0,0 +1,20 @@
+/* eslint id-length: "off" */
+
+"use strict";
+
+var pad = require("../../number/#/pad")
+ , date = require("../valid-date")
+ , format;
+
+format = require("../../string/format-method")({
+ Y: function () { return String(this.getFullYear()); },
+ y: function () { return String(this.getFullYear()).slice(-2); },
+ m: function () { return pad.call(this.getMonth() + 1, 2); },
+ d: function () { return pad.call(this.getDate(), 2); },
+ H: function () { return pad.call(this.getHours(), 2); },
+ M: function () { return pad.call(this.getMinutes(), 2); },
+ S: function () { return pad.call(this.getSeconds(), 2); },
+ L: function () { return pad.call(this.getMilliseconds(), 3); }
+});
+
+module.exports = function (pattern) { return format.call(date(this), pattern); };
diff --git a/node_modules/es5-ext/date/#/index.js b/node_modules/es5-ext/date/#/index.js
new file mode 100644
index 0000000..1781e21
--- /dev/null
+++ b/node_modules/es5-ext/date/#/index.js
@@ -0,0 +1,10 @@
+"use strict";
+
+module.exports = {
+ copy: require("./copy"),
+ daysInMonth: require("./days-in-month"),
+ floorDay: require("./floor-day"),
+ floorMonth: require("./floor-month"),
+ floorYear: require("./floor-year"),
+ format: require("./format")
+};
diff --git a/node_modules/es5-ext/date/ensure-time-value.js b/node_modules/es5-ext/date/ensure-time-value.js
new file mode 100644
index 0000000..09f5afc
--- /dev/null
+++ b/node_modules/es5-ext/date/ensure-time-value.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var safeToString = require("../safe-to-string")
+ , toInteger = require("../number/to-integer")
+ , isTimeValue = require("./is-time-value");
+
+module.exports = function (value) {
+ if (isTimeValue(value)) return toInteger(value);
+ throw new TypeError(safeToString(value) + " is not a valid time value");
+};
diff --git a/node_modules/es5-ext/date/index.js b/node_modules/es5-ext/date/index.js
new file mode 100644
index 0000000..c143149
--- /dev/null
+++ b/node_modules/es5-ext/date/index.js
@@ -0,0 +1,9 @@
+"use strict";
+
+module.exports = {
+ "#": require("./#"),
+ "ensureTimeValue": require("./ensure-time-value"),
+ "isDate": require("./is-date"),
+ "isTimeValue": require("./is-time-value"),
+ "validDate": require("./valid-date")
+};
diff --git a/node_modules/es5-ext/date/is-date.js b/node_modules/es5-ext/date/is-date.js
new file mode 100644
index 0000000..f45bde4
--- /dev/null
+++ b/node_modules/es5-ext/date/is-date.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var objToString = Object.prototype.toString, id = objToString.call(new Date());
+
+module.exports = function (value) {
+ return (
+ (value && !isNaN(value) && (value instanceof Date || objToString.call(value) === id)) ||
+ false
+ );
+};
diff --git a/node_modules/es5-ext/date/is-time-value.js b/node_modules/es5-ext/date/is-time-value.js
new file mode 100644
index 0000000..0deb0b9
--- /dev/null
+++ b/node_modules/es5-ext/date/is-time-value.js
@@ -0,0 +1,9 @@
+"use strict";
+
+module.exports = function (value) {
+ try { value = Number(value); }
+ catch (e) { return false; }
+ if (isNaN(value)) return false;
+ if (Math.abs(value) > 8.64e15) return false;
+ return true;
+};
diff --git a/node_modules/es5-ext/date/valid-date.js b/node_modules/es5-ext/date/valid-date.js
new file mode 100644
index 0000000..0c73dc5
--- /dev/null
+++ b/node_modules/es5-ext/date/valid-date.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isDate = require("./is-date");
+
+module.exports = function (value) {
+ if (!isDate(value)) throw new TypeError(value + " is not valid Date object");
+ return value;
+};
diff --git a/node_modules/es5-ext/error/#/index.js b/node_modules/es5-ext/error/#/index.js
new file mode 100644
index 0000000..973a9d4
--- /dev/null
+++ b/node_modules/es5-ext/error/#/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = { throw: require("./throw") };
diff --git a/node_modules/es5-ext/error/#/throw.js b/node_modules/es5-ext/error/#/throw.js
new file mode 100644
index 0000000..3eb196d
--- /dev/null
+++ b/node_modules/es5-ext/error/#/throw.js
@@ -0,0 +1,5 @@
+"use strict";
+
+var error = require("../valid-error");
+
+module.exports = function () { throw error(this); };
diff --git a/node_modules/es5-ext/error/custom.js b/node_modules/es5-ext/error/custom.js
new file mode 100644
index 0000000..22ea5d8
--- /dev/null
+++ b/node_modules/es5-ext/error/custom.js
@@ -0,0 +1,20 @@
+"use strict";
+
+var assign = require("../object/assign")
+ , isObject = require("../object/is-object")
+ , isValue = require("../object/is-value")
+ , captureStackTrace = Error.captureStackTrace;
+
+module.exports = function (message /*, code, ext*/) {
+ var err = new Error(message), code = arguments[1], ext = arguments[2];
+ if (!isValue(ext)) {
+ if (isObject(code)) {
+ ext = code;
+ code = null;
+ }
+ }
+ if (isValue(ext)) assign(err, ext);
+ if (isValue(code)) err.code = code;
+ if (captureStackTrace) captureStackTrace(err, module.exports);
+ return err;
+};
diff --git a/node_modules/es5-ext/error/index.js b/node_modules/es5-ext/error/index.js
new file mode 100644
index 0000000..cb7054a
--- /dev/null
+++ b/node_modules/es5-ext/error/index.js
@@ -0,0 +1,8 @@
+"use strict";
+
+module.exports = {
+ "#": require("./#"),
+ "custom": require("./custom"),
+ "isError": require("./is-error"),
+ "validError": require("./valid-error")
+};
diff --git a/node_modules/es5-ext/error/is-error.js b/node_modules/es5-ext/error/is-error.js
new file mode 100644
index 0000000..aad67ed
--- /dev/null
+++ b/node_modules/es5-ext/error/is-error.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var objToString = Object.prototype.toString, id = objToString.call(new Error());
+
+module.exports = function (value) {
+ return (value && (value instanceof Error || objToString.call(value) === id)) || false;
+};
diff --git a/node_modules/es5-ext/error/valid-error.js b/node_modules/es5-ext/error/valid-error.js
new file mode 100644
index 0000000..432f7ba
--- /dev/null
+++ b/node_modules/es5-ext/error/valid-error.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isError = require("./is-error");
+
+module.exports = function (value) {
+ if (!isError(value)) throw new TypeError(value + " is not an Error object");
+ return value;
+};
diff --git a/node_modules/es5-ext/function/#/compose.js b/node_modules/es5-ext/function/#/compose.js
new file mode 100644
index 0000000..d16b2b1
--- /dev/null
+++ b/node_modules/es5-ext/function/#/compose.js
@@ -0,0 +1,20 @@
+"use strict";
+
+var isValue = require("../../object/is-value")
+ , callable = require("../../object/valid-callable")
+ , aFrom = require("../../array/from");
+
+var apply = Function.prototype.apply
+ , call = Function.prototype.call
+ , callFn = function (arg, fn) { return call.call(fn, this, arg); };
+
+module.exports = function (fnIgnored /*, …fnn*/) {
+ var fns, first;
+ var args = aFrom(arguments);
+ fns = isValue(this) ? [this].concat(args) : args;
+ fns.forEach(callable);
+ fns = fns.reverse();
+ first = fns[0];
+ fns = fns.slice(1);
+ return function (argIgnored) { return fns.reduce(callFn, apply.call(first, this, arguments)); };
+};
diff --git a/node_modules/es5-ext/function/#/copy.js b/node_modules/es5-ext/function/#/copy.js
new file mode 100644
index 0000000..81ae783
--- /dev/null
+++ b/node_modules/es5-ext/function/#/copy.js
@@ -0,0 +1,22 @@
+"use strict";
+
+var mixin = require("../../object/mixin")
+ , validFunction = require("../valid-function")
+ , re = /^\s*function\s*([\0-')-\uffff]+)*\s*\(([\0-(*-\uffff]*)\)\s*\{/;
+
+module.exports = function () {
+ var match = String(validFunction(this)).match(re), fn;
+
+ // eslint-disable-next-line no-new-func
+ fn = new Function(
+ "fn",
+ "return function " +
+ match[1].trim() +
+ "(" +
+ match[2] +
+ ") { return fn.apply(this, arguments); };"
+ )(this);
+ try { mixin(fn, this); }
+ catch (ignore) {}
+ return fn;
+};
diff --git a/node_modules/es5-ext/function/#/curry.js b/node_modules/es5-ext/function/#/curry.js
new file mode 100644
index 0000000..9296458
--- /dev/null
+++ b/node_modules/es5-ext/function/#/curry.js
@@ -0,0 +1,25 @@
+"use strict";
+
+var toPosInt = require("../../number/to-pos-integer")
+ , callable = require("../../object/valid-callable")
+ , defineLength = require("../_define-length")
+ , slice = Array.prototype.slice
+ , apply = Function.prototype.apply
+ , curry;
+
+curry = function self(fn, length, preArgs) {
+ return defineLength(
+ function () {
+ var args = preArgs
+ ? preArgs.concat(slice.call(arguments, 0, length - preArgs.length))
+ : slice.call(arguments, 0, length);
+ return args.length === length ? apply.call(fn, this, args) : self(fn, length, args);
+ },
+ preArgs ? length - preArgs.length : length
+ );
+};
+
+module.exports = function (/* Length*/) {
+ var length = arguments[0];
+ return curry(callable(this), isNaN(length) ? toPosInt(this.length) : toPosInt(length));
+};
diff --git a/node_modules/es5-ext/function/#/index.js b/node_modules/es5-ext/function/#/index.js
new file mode 100644
index 0000000..02ae9f4
--- /dev/null
+++ b/node_modules/es5-ext/function/#/index.js
@@ -0,0 +1,13 @@
+"use strict";
+
+module.exports = {
+ compose: require("./compose"),
+ copy: require("./copy"),
+ curry: require("./curry"),
+ lock: require("./lock"),
+ microtaskDelay: require("./microtask-delay"),
+ not: require("./not"),
+ partial: require("./partial"),
+ spread: require("./spread"),
+ toStringTokens: require("./to-string-tokens")
+};
diff --git a/node_modules/es5-ext/function/#/lock.js b/node_modules/es5-ext/function/#/lock.js
new file mode 100644
index 0000000..afd83b9
--- /dev/null
+++ b/node_modules/es5-ext/function/#/lock.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var callable = require("../../object/valid-callable")
+ , apply = Function.prototype.apply;
+
+module.exports = function (/* …args*/) {
+ var fn = callable(this), args = arguments;
+
+ return function () { return apply.call(fn, this, args); };
+};
diff --git a/node_modules/es5-ext/function/#/microtask-delay.js b/node_modules/es5-ext/function/#/microtask-delay.js
new file mode 100644
index 0000000..3741ebe
--- /dev/null
+++ b/node_modules/es5-ext/function/#/microtask-delay.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var ensurePlainFunction = require("../../object/ensure-plain-function")
+ , defineLength = require("../_define-length")
+ , nextTick = require("next-tick");
+
+var apply = Function.prototype.apply;
+
+module.exports = function () {
+ var src = ensurePlainFunction(this);
+ return defineLength(function () { nextTick(apply.bind(src, this, arguments)); }, this.length);
+};
diff --git a/node_modules/es5-ext/function/#/not.js b/node_modules/es5-ext/function/#/not.js
new file mode 100644
index 0000000..b3b7d62
--- /dev/null
+++ b/node_modules/es5-ext/function/#/not.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var callable = require("../../object/valid-callable")
+ , defineLength = require("../_define-length")
+ , apply = Function.prototype.apply;
+
+module.exports = function () {
+ var fn = callable(this);
+
+ return defineLength(function () { return !apply.call(fn, this, arguments); }, fn.length);
+};
diff --git a/node_modules/es5-ext/function/#/partial.js b/node_modules/es5-ext/function/#/partial.js
new file mode 100644
index 0000000..8f09c4f
--- /dev/null
+++ b/node_modules/es5-ext/function/#/partial.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var callable = require("../../object/valid-callable")
+ , aFrom = require("../../array/from")
+ , defineLength = require("../_define-length")
+ , apply = Function.prototype.apply;
+
+module.exports = function (/* …args*/) {
+ var fn = callable(this), args = aFrom(arguments);
+
+ return defineLength(function () {
+ return apply.call(fn, this, args.concat(aFrom(arguments)));
+ }, fn.length - args.length);
+};
diff --git a/node_modules/es5-ext/function/#/spread.js b/node_modules/es5-ext/function/#/spread.js
new file mode 100644
index 0000000..555d991
--- /dev/null
+++ b/node_modules/es5-ext/function/#/spread.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var callable = require("../../object/valid-callable")
+ , apply = Function.prototype.apply;
+
+module.exports = function () {
+ var fn = callable(this);
+ return function (args) { return apply.call(fn, this, args); };
+};
diff --git a/node_modules/es5-ext/function/#/to-string-tokens.js b/node_modules/es5-ext/function/#/to-string-tokens.js
new file mode 100644
index 0000000..4ce026a
--- /dev/null
+++ b/node_modules/es5-ext/function/#/to-string-tokens.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var validFunction = require("../valid-function");
+
+var re1 = /^\s*function[\0-')-\uffff]*\(([\0-(*-\uffff]*)\)\s*\{([\0-\uffff]*)\}\s*$/
+ , re2 = /^\s*\(?([\0-'*-\uffff]*)\)?\s*=>\s*(\{?[\0-\uffff]*\}?)\s*$/;
+
+module.exports = function () {
+ var str = String(validFunction(this)), data = str.match(re1);
+ if (!data) {
+ data = str.match(re2);
+ if (!data) throw new Error("Unrecognized string format");
+ data[1] = data[1].trim();
+ if (data[2][0] === "{") data[2] = data[2].trim().slice(1, -1);
+ }
+ return { args: data[1], body: data[2] };
+};
diff --git a/node_modules/es5-ext/function/_define-length.js b/node_modules/es5-ext/function/_define-length.js
new file mode 100644
index 0000000..d77a433
--- /dev/null
+++ b/node_modules/es5-ext/function/_define-length.js
@@ -0,0 +1,54 @@
+"use strict";
+
+var toPosInt = require("../number/to-pos-integer");
+
+var test = function (arg1, arg2) { return arg2; };
+
+var desc, defineProperty, generate, mixin;
+
+try {
+ Object.defineProperty(test, "length", {
+ configurable: true,
+ writable: false,
+ enumerable: false,
+ value: 1
+ });
+}
+catch (ignore) {}
+
+if (test.length === 1) {
+ // ES6
+ desc = { configurable: true, writable: false, enumerable: false };
+ defineProperty = Object.defineProperty;
+ module.exports = function (fn, length) {
+ length = toPosInt(length);
+ if (fn.length === length) return fn;
+ desc.value = length;
+ return defineProperty(fn, "length", desc);
+ };
+} else {
+ mixin = require("../object/mixin");
+ generate = (function () {
+ var cache = [];
+ return function (length) {
+ var args, i = 0;
+ if (cache[length]) return cache[length];
+ args = [];
+ while (length--) args.push("a" + (++i).toString(36));
+ // eslint-disable-next-line no-new-func
+ return new Function(
+ "fn",
+ "return function (" + args.join(", ") + ") { return fn.apply(this, arguments); };"
+ );
+ };
+ })();
+ module.exports = function (src, length) {
+ var target;
+ length = toPosInt(length);
+ if (src.length === length) return src;
+ target = generate(length)(src);
+ try { mixin(target, src); }
+ catch (ignore) {}
+ return target;
+ };
+}
diff --git a/node_modules/es5-ext/function/constant.js b/node_modules/es5-ext/function/constant.js
new file mode 100644
index 0000000..79d81e4
--- /dev/null
+++ b/node_modules/es5-ext/function/constant.js
@@ -0,0 +1,5 @@
+"use strict";
+
+module.exports = function (value) {
+ return function () { return value; };
+};
diff --git a/node_modules/es5-ext/function/identity.js b/node_modules/es5-ext/function/identity.js
new file mode 100644
index 0000000..cde213f
--- /dev/null
+++ b/node_modules/es5-ext/function/identity.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = function (value) { return value; };
diff --git a/node_modules/es5-ext/function/index.js b/node_modules/es5-ext/function/index.js
new file mode 100644
index 0000000..1574fbb
--- /dev/null
+++ b/node_modules/es5-ext/function/index.js
@@ -0,0 +1,15 @@
+// Export all modules.
+
+"use strict";
+
+module.exports = {
+ "#": require("./#"),
+ "constant": require("./constant"),
+ "identity": require("./identity"),
+ "invoke": require("./invoke"),
+ "isArguments": require("./is-arguments"),
+ "isFunction": require("./is-function"),
+ "noop": require("./noop"),
+ "pluck": require("./pluck"),
+ "validFunction": require("./valid-function")
+};
diff --git a/node_modules/es5-ext/function/invoke.js b/node_modules/es5-ext/function/invoke.js
new file mode 100644
index 0000000..8fdb32b
--- /dev/null
+++ b/node_modules/es5-ext/function/invoke.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var isCallable = require("../object/is-callable")
+ , value = require("../object/valid-value")
+ , slice = Array.prototype.slice
+ , apply = Function.prototype.apply;
+
+module.exports = function (name /*, …args*/) {
+ var args = slice.call(arguments, 1), isFn = isCallable(name);
+ return function (obj) {
+ value(obj);
+ return apply.call(isFn ? name : obj[name], obj, args.concat(slice.call(arguments, 1)));
+ };
+};
diff --git a/node_modules/es5-ext/function/is-arguments.js b/node_modules/es5-ext/function/is-arguments.js
new file mode 100644
index 0000000..833a747
--- /dev/null
+++ b/node_modules/es5-ext/function/is-arguments.js
@@ -0,0 +1,6 @@
+"use strict";
+
+var objToString = Object.prototype.toString
+ , id = objToString.call((function () { return arguments; })());
+
+module.exports = function (value) { return objToString.call(value) === id; };
diff --git a/node_modules/es5-ext/function/is-function.js b/node_modules/es5-ext/function/is-function.js
new file mode 100644
index 0000000..0d7cab3
--- /dev/null
+++ b/node_modules/es5-ext/function/is-function.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var objToString = Object.prototype.toString
+ , isFunctionStringTag = RegExp.prototype.test.bind(/^[object [A-Za-z0-9]*Function]$/);
+
+module.exports = function (value) {
+ return typeof value === "function" && isFunctionStringTag(objToString.call(value));
+};
diff --git a/node_modules/es5-ext/function/noop.js b/node_modules/es5-ext/function/noop.js
new file mode 100644
index 0000000..6174f03
--- /dev/null
+++ b/node_modules/es5-ext/function/noop.js
@@ -0,0 +1,4 @@
+"use strict";
+
+// eslint-disable-next-line no-empty-function
+module.exports = function () {};
diff --git a/node_modules/es5-ext/function/pluck.js b/node_modules/es5-ext/function/pluck.js
new file mode 100644
index 0000000..432cd46
--- /dev/null
+++ b/node_modules/es5-ext/function/pluck.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var value = require("../object/valid-value");
+
+module.exports = function (name) {
+ return function (obj) { return value(obj)[name]; };
+};
diff --git a/node_modules/es5-ext/function/valid-function.js b/node_modules/es5-ext/function/valid-function.js
new file mode 100644
index 0000000..060bd64
--- /dev/null
+++ b/node_modules/es5-ext/function/valid-function.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isFunction = require("./is-function");
+
+module.exports = function (value) {
+ if (!isFunction(value)) throw new TypeError(value + " is not a function");
+ return value;
+};
diff --git a/node_modules/es5-ext/global.js b/node_modules/es5-ext/global.js
new file mode 100644
index 0000000..61071e6
--- /dev/null
+++ b/node_modules/es5-ext/global.js
@@ -0,0 +1,35 @@
+var naiveFallback = function () {
+ if (typeof self === "object" && self) return self;
+ if (typeof window === "object" && window) return window;
+ throw new Error("Unable to resolve global `this`");
+};
+
+module.exports = (function () {
+ if (this) return this;
+
+ // Unexpected strict mode (may happen if e.g. bundled into ESM module)
+
+ // Fallback to standard globalThis if available
+ if (typeof globalThis === "object" && globalThis) return globalThis;
+
+ // Thanks @mathiasbynens -> https://mathiasbynens.be/notes/globalthis
+ // In all ES5+ engines global object inherits from Object.prototype
+ // (if you approached one that doesn't please report)
+ try {
+ Object.defineProperty(Object.prototype, "__global__", {
+ get: function () { return this; },
+ configurable: true
+ });
+ } catch (error) {
+ // Unfortunate case of updates to Object.prototype being restricted
+ // via preventExtensions, seal or freeze
+ return naiveFallback();
+ }
+ try {
+ // Safari case (window.__global__ works, but __global__ does not)
+ if (!__global__) return naiveFallback();
+ return __global__;
+ } finally {
+ delete Object.prototype.__global__;
+ }
+})();
diff --git a/node_modules/es5-ext/index.js b/node_modules/es5-ext/index.js
new file mode 100644
index 0000000..0919764
--- /dev/null
+++ b/node_modules/es5-ext/index.js
@@ -0,0 +1,22 @@
+"use strict";
+
+module.exports = {
+ global: require("./global"),
+ optionalChaining: require("./optional-chaining"),
+ safeToString: require("./safe-to-string"),
+ toShortStringRepresentation: require("./to-short-string-representation"),
+
+ array: require("./array"),
+ boolean: require("./boolean"),
+ date: require("./date"),
+ error: require("./error"),
+ function: require("./function"),
+ iterable: require("./iterable"),
+ json: require("./json"),
+ math: require("./math"),
+ number: require("./number"),
+ object: require("./object"),
+ promise: require("./promise"),
+ regExp: require("./reg-exp"),
+ string: require("./string")
+};
diff --git a/node_modules/es5-ext/iterable/for-each.js b/node_modules/es5-ext/iterable/for-each.js
new file mode 100644
index 0000000..9157f65
--- /dev/null
+++ b/node_modules/es5-ext/iterable/for-each.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var forOf = require("es6-iterator/for-of")
+ , isIterable = require("es6-iterator/is-iterable")
+ , iterable = require("./validate")
+ , forEach = Array.prototype.forEach;
+
+module.exports = function (target, cb /*, thisArg*/) {
+ if (isIterable(iterable(target))) forOf(target, cb, arguments[2]);
+ else forEach.call(target, cb, arguments[2]);
+};
diff --git a/node_modules/es5-ext/iterable/index.js b/node_modules/es5-ext/iterable/index.js
new file mode 100644
index 0000000..4b898fc
--- /dev/null
+++ b/node_modules/es5-ext/iterable/index.js
@@ -0,0 +1,8 @@
+"use strict";
+
+module.exports = {
+ forEach: require("./for-each"),
+ is: require("./is"),
+ validate: require("./validate"),
+ validateObject: require("./validate-object")
+};
diff --git a/node_modules/es5-ext/iterable/is.js b/node_modules/es5-ext/iterable/is.js
new file mode 100644
index 0000000..aa5a9b9
--- /dev/null
+++ b/node_modules/es5-ext/iterable/is.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var iteratorSymbol = require("es6-symbol").iterator
+ , isValue = require("../object/is-value")
+ , isArrayLike = require("../object/is-array-like");
+
+module.exports = function (value) {
+ if (!isValue(value)) return false;
+ if (typeof value[iteratorSymbol] === "function") return true;
+ return isArrayLike(value);
+};
diff --git a/node_modules/es5-ext/iterable/validate-object.js b/node_modules/es5-ext/iterable/validate-object.js
new file mode 100644
index 0000000..26e622b
--- /dev/null
+++ b/node_modules/es5-ext/iterable/validate-object.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var isObject = require("../object/is-object")
+ , is = require("./is");
+
+module.exports = function (value) {
+ if (is(value) && isObject(value)) return value;
+ throw new TypeError(value + " is not an iterable or array-like object");
+};
diff --git a/node_modules/es5-ext/iterable/validate.js b/node_modules/es5-ext/iterable/validate.js
new file mode 100644
index 0000000..94a91c4
--- /dev/null
+++ b/node_modules/es5-ext/iterable/validate.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var is = require("./is");
+
+module.exports = function (value) {
+ if (is(value)) return value;
+ throw new TypeError(value + " is not an iterable or array-like");
+};
diff --git a/node_modules/es5-ext/json/index.js b/node_modules/es5-ext/json/index.js
new file mode 100644
index 0000000..d26ac56
--- /dev/null
+++ b/node_modules/es5-ext/json/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = { safeStringify: require("./safe-stringify") };
diff --git a/node_modules/es5-ext/json/safe-stringify.js b/node_modules/es5-ext/json/safe-stringify.js
new file mode 100644
index 0000000..28169f1
--- /dev/null
+++ b/node_modules/es5-ext/json/safe-stringify.js
@@ -0,0 +1,37 @@
+"use strict";
+
+var compact = require("../array/#/compact")
+ , isObject = require("../object/is-object")
+ , toArray = require("../object/to-array")
+ , isArray = Array.isArray
+ , stringify = JSON.stringify;
+
+module.exports = function self(value /*, replacer, space*/) {
+ var replacer = arguments[1], space = arguments[2];
+ try {
+ return stringify(value, replacer, space);
+ } catch (e) {
+ if (!isObject(value)) return null;
+ if (typeof value.toJSON === "function") return null;
+ if (isArray(value)) {
+ return (
+ "[" +
+ compact.call(value.map(function (item) { return self(item, replacer, space); })) +
+ "]"
+ );
+ }
+ return (
+ "{" +
+ compact
+ .call(
+ toArray(value, function (item, key) {
+ item = self(item, replacer, space);
+ if (!item) return null;
+ return stringify(key) + ":" + item;
+ })
+ )
+ .join(",") +
+ "}"
+ );
+ }
+};
diff --git a/node_modules/es5-ext/math/_decimal-adjust.js b/node_modules/es5-ext/math/_decimal-adjust.js
new file mode 100644
index 0000000..c6374d6
--- /dev/null
+++ b/node_modules/es5-ext/math/_decimal-adjust.js
@@ -0,0 +1,29 @@
+// Credit:
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
+// #Decimal_rounding
+
+"use strict";
+
+var isValue = require("../object/is-value")
+ , ensureInteger = require("../object/ensure-integer");
+
+var split = String.prototype.split;
+
+module.exports = function (type) {
+ return function (value /*, exp*/) {
+ value = Number(value);
+ var exp = arguments[1];
+ if (isValue(exp)) exp = ensureInteger(exp);
+ if (!value) return value;
+ if (!exp) return Math[type](value);
+ if (!isFinite(value)) return value;
+
+ // Shift
+ var tokens = split.call(value, "e");
+ value = Math[type](tokens[0] + "e" + ((tokens[1] || 0) - exp));
+
+ // Shift back
+ tokens = value.toString().split("e");
+ return Number(tokens[0] + "e" + (Number(tokens[1] || 0) + exp));
+ };
+};
diff --git a/node_modules/es5-ext/math/_pack-ieee754.js b/node_modules/es5-ext/math/_pack-ieee754.js
new file mode 100644
index 0000000..b3edf8d
--- /dev/null
+++ b/node_modules/es5-ext/math/_pack-ieee754.js
@@ -0,0 +1,88 @@
+/* eslint no-bitwise: "off" */
+// Credit: https://github.com/paulmillr/es6-shim/
+
+"use strict";
+
+var abs = Math.abs
+ , floor = Math.floor
+ , log = Math.log
+ , min = Math.min
+ , pow = Math.pow
+ , LN2 = Math.LN2
+ , roundToEven;
+
+roundToEven = function (num) {
+ var whole = floor(num), fraction = num - whole;
+ if (fraction < 0.5) return whole;
+ if (fraction > 0.5) return whole + 1;
+ return whole % 2 ? whole + 1 : whole;
+};
+
+// eslint-disable-next-line max-statements, max-lines-per-function
+module.exports = function (value, ebits, fbits) {
+ var bias = (1 << (ebits - 1)) - 1, sign, e, fraction, i, bits, str, bytes;
+
+ // Compute sign, exponent, fraction
+ if (isNaN(value)) {
+ // NaN
+ // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping
+ e = (1 << ebits) - 1;
+ fraction = pow(2, fbits - 1);
+ sign = 0;
+ } else if (value === Infinity || value === -Infinity) {
+ e = (1 << ebits) - 1;
+ fraction = 0;
+ sign = value < 0 ? 1 : 0;
+ } else if (value === 0) {
+ e = 0;
+ fraction = 0;
+ sign = 1 / value === -Infinity ? 1 : 0;
+ } else {
+ sign = value < 0;
+ value = abs(value);
+
+ if (value >= pow(2, 1 - bias)) {
+ e = min(floor(log(value) / LN2), 1023);
+ fraction = roundToEven((value / pow(2, e)) * pow(2, fbits));
+ if (fraction / pow(2, fbits) >= 2) {
+ e += 1;
+ fraction = 1;
+ }
+ if (e > bias) {
+ // Overflow
+ e = (1 << ebits) - 1;
+ fraction = 0;
+ } else {
+ // Normal
+ e += bias;
+ fraction -= pow(2, fbits);
+ }
+ } else {
+ // Subnormal
+ e = 0;
+ fraction = roundToEven(value / pow(2, 1 - bias - fbits));
+ }
+ }
+
+ // Pack sign, exponent, fraction
+ bits = [];
+ for (i = fbits; i; i -= 1) {
+ bits.push(fraction % 2 ? 1 : 0);
+ fraction = floor(fraction / 2);
+ }
+ for (i = ebits; i; i -= 1) {
+ bits.push(e % 2 ? 1 : 0);
+ e = floor(e / 2);
+ }
+ bits.push(sign ? 1 : 0);
+ bits.reverse();
+ str = bits.join("");
+
+ // Bits to bytes
+ bytes = [];
+ while (str.length) {
+ bytes.push(parseInt(str.substring(0, 8), 2));
+ str = str.substring(8);
+ }
+ return bytes;
+};
diff --git a/node_modules/es5-ext/math/_unpack-ieee754.js b/node_modules/es5-ext/math/_unpack-ieee754.js
new file mode 100644
index 0000000..83fa947
--- /dev/null
+++ b/node_modules/es5-ext/math/_unpack-ieee754.js
@@ -0,0 +1,33 @@
+/* eslint no-bitwise: "off" */
+// Credit: https://github.com/paulmillr/es6-shim/
+
+"use strict";
+
+var pow = Math.pow;
+
+module.exports = function (bytes, ebits, fbits) {
+ // Bytes to bits
+ var bits = [], i, j, bit, str, bias, sign, e, fraction;
+
+ for (i = bytes.length; i; i -= 1) {
+ bit = bytes[i - 1];
+ for (j = 8; j; j -= 1) {
+ bits.push(bit % 2 ? 1 : 0);
+ bit >>= 1;
+ }
+ }
+ bits.reverse();
+ str = bits.join("");
+
+ // Unpack sign, exponent, fraction
+ bias = (1 << (ebits - 1)) - 1;
+ sign = parseInt(str.substring(0, 1), 2) ? -1 : 1;
+ e = parseInt(str.substring(1, 1 + ebits), 2);
+ fraction = parseInt(str.substring(1 + ebits), 2);
+
+ // Produce number
+ if (e === (1 << ebits) - 1) return fraction === 0 ? sign * Infinity : NaN;
+ if (e > 0) return sign * pow(2, e - bias) * (1 + fraction / pow(2, fbits));
+ if (fraction !== 0) return sign * pow(2, -(bias - 1)) * (fraction / pow(2, fbits));
+ return sign < 0 ? -0 : 0;
+};
diff --git a/node_modules/es5-ext/math/acosh/implement.js b/node_modules/es5-ext/math/acosh/implement.js
new file mode 100644
index 0000000..9e4582f
--- /dev/null
+++ b/node_modules/es5-ext/math/acosh/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "acosh", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/acosh/index.js b/node_modules/es5-ext/math/acosh/index.js
new file mode 100644
index 0000000..da176cb
--- /dev/null
+++ b/node_modules/es5-ext/math/acosh/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.acosh : require("./shim");
diff --git a/node_modules/es5-ext/math/acosh/is-implemented.js b/node_modules/es5-ext/math/acosh/is-implemented.js
new file mode 100644
index 0000000..2e97301
--- /dev/null
+++ b/node_modules/es5-ext/math/acosh/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var acosh = Math.acosh;
+ if (typeof acosh !== "function") return false;
+ return acosh(2) === 1.3169578969248166;
+};
diff --git a/node_modules/es5-ext/math/acosh/shim.js b/node_modules/es5-ext/math/acosh/shim.js
new file mode 100644
index 0000000..3e632ff
--- /dev/null
+++ b/node_modules/es5-ext/math/acosh/shim.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var log = Math.log, sqrt = Math.sqrt;
+
+module.exports = function (value) {
+ if (isNaN(value)) return NaN;
+ value = Number(value);
+ if (value < 1) return NaN;
+ if (value === 1) return 0;
+ if (value === Infinity) return value;
+ return log(value + sqrt(value * value - 1));
+};
diff --git a/node_modules/es5-ext/math/asinh/implement.js b/node_modules/es5-ext/math/asinh/implement.js
new file mode 100644
index 0000000..1c0d7e4
--- /dev/null
+++ b/node_modules/es5-ext/math/asinh/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "asinh", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/asinh/index.js b/node_modules/es5-ext/math/asinh/index.js
new file mode 100644
index 0000000..8ca3026
--- /dev/null
+++ b/node_modules/es5-ext/math/asinh/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.asinh : require("./shim");
diff --git a/node_modules/es5-ext/math/asinh/is-implemented.js b/node_modules/es5-ext/math/asinh/is-implemented.js
new file mode 100644
index 0000000..a7e0f20
--- /dev/null
+++ b/node_modules/es5-ext/math/asinh/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var asinh = Math.asinh;
+ if (typeof asinh !== "function") return false;
+ return asinh(2) === 1.4436354751788103;
+};
diff --git a/node_modules/es5-ext/math/asinh/shim.js b/node_modules/es5-ext/math/asinh/shim.js
new file mode 100644
index 0000000..30ce2e4
--- /dev/null
+++ b/node_modules/es5-ext/math/asinh/shim.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var log = Math.log, sqrt = Math.sqrt;
+
+module.exports = function (value) {
+ if (isNaN(value)) return NaN;
+ value = Number(value);
+ if (value === 0) return value;
+ if (!isFinite(value)) return value;
+ if (value < 0) {
+ value = -value;
+ return -log(value + sqrt(value * value + 1));
+ }
+ return log(value + sqrt(value * value + 1));
+};
diff --git a/node_modules/es5-ext/math/atanh/implement.js b/node_modules/es5-ext/math/atanh/implement.js
new file mode 100644
index 0000000..53f5871
--- /dev/null
+++ b/node_modules/es5-ext/math/atanh/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "atanh", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/atanh/index.js b/node_modules/es5-ext/math/atanh/index.js
new file mode 100644
index 0000000..feff0a7
--- /dev/null
+++ b/node_modules/es5-ext/math/atanh/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.atanh : require("./shim");
diff --git a/node_modules/es5-ext/math/atanh/is-implemented.js b/node_modules/es5-ext/math/atanh/is-implemented.js
new file mode 100644
index 0000000..4787c4f
--- /dev/null
+++ b/node_modules/es5-ext/math/atanh/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var atanh = Math.atanh;
+ if (typeof atanh !== "function") return false;
+ return Math.round(atanh(0.5) * 1e15) === 549306144334055;
+};
diff --git a/node_modules/es5-ext/math/atanh/shim.js b/node_modules/es5-ext/math/atanh/shim.js
new file mode 100644
index 0000000..9383e97
--- /dev/null
+++ b/node_modules/es5-ext/math/atanh/shim.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var log = Math.log;
+
+module.exports = function (value) {
+ if (isNaN(value)) return NaN;
+ value = Number(value);
+ if (value < -1) return NaN;
+ if (value > 1) return NaN;
+ if (value === -1) return -Infinity;
+ if (value === 1) return Infinity;
+ if (value === 0) return value;
+ return 0.5 * log((1 + value) / (1 - value));
+};
diff --git a/node_modules/es5-ext/math/cbrt/implement.js b/node_modules/es5-ext/math/cbrt/implement.js
new file mode 100644
index 0000000..826314c
--- /dev/null
+++ b/node_modules/es5-ext/math/cbrt/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "cbrt", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/cbrt/index.js b/node_modules/es5-ext/math/cbrt/index.js
new file mode 100644
index 0000000..a6c71c6
--- /dev/null
+++ b/node_modules/es5-ext/math/cbrt/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.cbrt : require("./shim");
diff --git a/node_modules/es5-ext/math/cbrt/is-implemented.js b/node_modules/es5-ext/math/cbrt/is-implemented.js
new file mode 100644
index 0000000..a8ac0db
--- /dev/null
+++ b/node_modules/es5-ext/math/cbrt/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var cbrt = Math.cbrt;
+ if (typeof cbrt !== "function") return false;
+ return cbrt(2) === 1.2599210498948732;
+};
diff --git a/node_modules/es5-ext/math/cbrt/shim.js b/node_modules/es5-ext/math/cbrt/shim.js
new file mode 100644
index 0000000..8871c55
--- /dev/null
+++ b/node_modules/es5-ext/math/cbrt/shim.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var pow = Math.pow;
+
+module.exports = function (value) {
+ if (isNaN(value)) return NaN;
+ value = Number(value);
+ if (value === 0) return value;
+ if (!isFinite(value)) return value;
+ if (value < 0) return -pow(-value, 1 / 3);
+ return pow(value, 1 / 3);
+};
diff --git a/node_modules/es5-ext/math/ceil-10.js b/node_modules/es5-ext/math/ceil-10.js
new file mode 100644
index 0000000..351221f
--- /dev/null
+++ b/node_modules/es5-ext/math/ceil-10.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./_decimal-adjust")("ceil");
diff --git a/node_modules/es5-ext/math/clz32/implement.js b/node_modules/es5-ext/math/clz32/implement.js
new file mode 100644
index 0000000..70562df
--- /dev/null
+++ b/node_modules/es5-ext/math/clz32/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "clz32", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/clz32/index.js b/node_modules/es5-ext/math/clz32/index.js
new file mode 100644
index 0000000..2380335
--- /dev/null
+++ b/node_modules/es5-ext/math/clz32/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.clz32 : require("./shim");
diff --git a/node_modules/es5-ext/math/clz32/is-implemented.js b/node_modules/es5-ext/math/clz32/is-implemented.js
new file mode 100644
index 0000000..ee6d882
--- /dev/null
+++ b/node_modules/es5-ext/math/clz32/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var clz32 = Math.clz32;
+ if (typeof clz32 !== "function") return false;
+ return clz32(1000) === 22;
+};
diff --git a/node_modules/es5-ext/math/clz32/shim.js b/node_modules/es5-ext/math/clz32/shim.js
new file mode 100644
index 0000000..2b526c2
--- /dev/null
+++ b/node_modules/es5-ext/math/clz32/shim.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function (value) {
+ // eslint-disable-next-line no-bitwise
+ value >>>= 0;
+ return value ? 32 - value.toString(2).length : 32;
+};
diff --git a/node_modules/es5-ext/math/cosh/implement.js b/node_modules/es5-ext/math/cosh/implement.js
new file mode 100644
index 0000000..74e7eea
--- /dev/null
+++ b/node_modules/es5-ext/math/cosh/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "cosh", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/cosh/index.js b/node_modules/es5-ext/math/cosh/index.js
new file mode 100644
index 0000000..c7a7167
--- /dev/null
+++ b/node_modules/es5-ext/math/cosh/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.cosh : require("./shim");
diff --git a/node_modules/es5-ext/math/cosh/is-implemented.js b/node_modules/es5-ext/math/cosh/is-implemented.js
new file mode 100644
index 0000000..7173054
--- /dev/null
+++ b/node_modules/es5-ext/math/cosh/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var cosh = Math.cosh;
+ if (typeof cosh !== "function") return false;
+ return cosh(1) === 1.5430806348152437;
+};
diff --git a/node_modules/es5-ext/math/cosh/shim.js b/node_modules/es5-ext/math/cosh/shim.js
new file mode 100644
index 0000000..c762c84
--- /dev/null
+++ b/node_modules/es5-ext/math/cosh/shim.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var exp = Math.exp;
+
+module.exports = function (value) {
+ if (isNaN(value)) return NaN;
+ value = Number(value);
+ if (value === 0) return 1;
+ if (!isFinite(value)) return Infinity;
+ return (exp(value) + exp(-value)) / 2;
+};
diff --git a/node_modules/es5-ext/math/expm1/implement.js b/node_modules/es5-ext/math/expm1/implement.js
new file mode 100644
index 0000000..9739bf5
--- /dev/null
+++ b/node_modules/es5-ext/math/expm1/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "expm1", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/expm1/index.js b/node_modules/es5-ext/math/expm1/index.js
new file mode 100644
index 0000000..daf4395
--- /dev/null
+++ b/node_modules/es5-ext/math/expm1/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.expm1 : require("./shim");
diff --git a/node_modules/es5-ext/math/expm1/is-implemented.js b/node_modules/es5-ext/math/expm1/is-implemented.js
new file mode 100644
index 0000000..dfd056e
--- /dev/null
+++ b/node_modules/es5-ext/math/expm1/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var expm1 = Math.expm1;
+ if (typeof expm1 !== "function") return false;
+ return expm1(1).toFixed(15) === "1.718281828459045";
+};
diff --git a/node_modules/es5-ext/math/expm1/shim.js b/node_modules/es5-ext/math/expm1/shim.js
new file mode 100644
index 0000000..6daf2bf
--- /dev/null
+++ b/node_modules/es5-ext/math/expm1/shim.js
@@ -0,0 +1,16 @@
+// Thanks: https://github.com/monolithed/ECMAScript-6
+
+"use strict";
+
+var exp = Math.exp;
+
+module.exports = function (value) {
+ if (isNaN(value)) return NaN;
+ value = Number(value);
+ if (value === 0) return value;
+ if (value === Infinity) return Infinity;
+ if (value === -Infinity) return -1;
+
+ if (value > -1.0e-6 && value < 1.0e-6) return value + (value * value) / 2;
+ return exp(value) - 1;
+};
diff --git a/node_modules/es5-ext/math/floor-10.js b/node_modules/es5-ext/math/floor-10.js
new file mode 100644
index 0000000..3cb0c11
--- /dev/null
+++ b/node_modules/es5-ext/math/floor-10.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./_decimal-adjust")("floor");
diff --git a/node_modules/es5-ext/math/fround/implement.js b/node_modules/es5-ext/math/fround/implement.js
new file mode 100644
index 0000000..9ce9cf2
--- /dev/null
+++ b/node_modules/es5-ext/math/fround/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "fround", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/fround/index.js b/node_modules/es5-ext/math/fround/index.js
new file mode 100644
index 0000000..9f0dbc0
--- /dev/null
+++ b/node_modules/es5-ext/math/fround/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.fround : require("./shim");
diff --git a/node_modules/es5-ext/math/fround/is-implemented.js b/node_modules/es5-ext/math/fround/is-implemented.js
new file mode 100644
index 0000000..ad2b705
--- /dev/null
+++ b/node_modules/es5-ext/math/fround/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var fround = Math.fround;
+ if (typeof fround !== "function") return false;
+ return fround(1.337) === 1.3370000123977661;
+};
diff --git a/node_modules/es5-ext/math/fround/shim.js b/node_modules/es5-ext/math/fround/shim.js
new file mode 100644
index 0000000..b0dfaab
--- /dev/null
+++ b/node_modules/es5-ext/math/fround/shim.js
@@ -0,0 +1,33 @@
+/* global Float32Array */
+
+// Credit: https://github.com/paulmillr/es6-shim/blob/master/es6-shim.js
+
+"use strict";
+
+var toFloat32;
+
+if (typeof Float32Array === "undefined") {
+ toFloat32 = (function () {
+ var pack = require("../_pack-ieee754")
+ , unpack = require("../_unpack-ieee754");
+
+ return function (value) { return unpack(pack(value, 8, 23), 8, 23); };
+ })();
+} else {
+ toFloat32 = (function () {
+ var float32Array = new Float32Array(1);
+ return function (num) {
+ float32Array[0] = num;
+ return float32Array[0];
+ };
+ })();
+}
+
+module.exports = function (value) {
+ if (isNaN(value)) return NaN;
+ value = Number(value);
+ if (value === 0) return value;
+ if (!isFinite(value)) return value;
+
+ return toFloat32(value);
+};
diff --git a/node_modules/es5-ext/math/hypot/implement.js b/node_modules/es5-ext/math/hypot/implement.js
new file mode 100644
index 0000000..e051add
--- /dev/null
+++ b/node_modules/es5-ext/math/hypot/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "hypot", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/hypot/index.js b/node_modules/es5-ext/math/hypot/index.js
new file mode 100644
index 0000000..f8de46b
--- /dev/null
+++ b/node_modules/es5-ext/math/hypot/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.hypot : require("./shim");
diff --git a/node_modules/es5-ext/math/hypot/is-implemented.js b/node_modules/es5-ext/math/hypot/is-implemented.js
new file mode 100644
index 0000000..d317bc7
--- /dev/null
+++ b/node_modules/es5-ext/math/hypot/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var hypot = Math.hypot;
+ if (typeof hypot !== "function") return false;
+ return hypot(3, 4) === 5;
+};
diff --git a/node_modules/es5-ext/math/hypot/shim.js b/node_modules/es5-ext/math/hypot/shim.js
new file mode 100644
index 0000000..2d0eec7
--- /dev/null
+++ b/node_modules/es5-ext/math/hypot/shim.js
@@ -0,0 +1,37 @@
+// Thanks for hints: https://github.com/paulmillr/es6-shim
+
+"use strict";
+
+var some = Array.prototype.some
+ , abs = Math.abs
+ , sqrt = Math.sqrt
+ , compare = function (val1, val2) { return val2 - val1; }
+ , divide = function (value) { return value / this; }
+ , add = function (sum, number) { return sum + number * number; };
+
+// eslint-disable-next-line no-unused-vars
+module.exports = function (val1, val2 /*, …valn*/) {
+ var result, numbers;
+ if (!arguments.length) return 0;
+ some.call(arguments, function (val) {
+ if (isNaN(val)) {
+ result = NaN;
+ return false;
+ }
+ if (!isFinite(val)) {
+ result = Infinity;
+ return true;
+ }
+ if (result !== undefined) return false;
+ val = Number(val);
+ if (val === 0) return false;
+ if (numbers) numbers.push(abs(val));
+ else numbers = [abs(val)];
+ return false;
+ });
+ if (result !== undefined) return result;
+ if (!numbers) return 0;
+
+ numbers.sort(compare);
+ return numbers[0] * sqrt(numbers.map(divide, numbers[0]).reduce(add, 0));
+};
diff --git a/node_modules/es5-ext/math/imul/implement.js b/node_modules/es5-ext/math/imul/implement.js
new file mode 100644
index 0000000..3aff479
--- /dev/null
+++ b/node_modules/es5-ext/math/imul/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "imul", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/imul/index.js b/node_modules/es5-ext/math/imul/index.js
new file mode 100644
index 0000000..969124c
--- /dev/null
+++ b/node_modules/es5-ext/math/imul/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.imul : require("./shim");
diff --git a/node_modules/es5-ext/math/imul/is-implemented.js b/node_modules/es5-ext/math/imul/is-implemented.js
new file mode 100644
index 0000000..0f32919
--- /dev/null
+++ b/node_modules/es5-ext/math/imul/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var imul = Math.imul;
+ if (typeof imul !== "function") return false;
+ return imul(-1, 8) === -8;
+};
diff --git a/node_modules/es5-ext/math/imul/shim.js b/node_modules/es5-ext/math/imul/shim.js
new file mode 100644
index 0000000..7511707
--- /dev/null
+++ b/node_modules/es5-ext/math/imul/shim.js
@@ -0,0 +1,17 @@
+/* eslint no-bitwise: "off" */
+
+// Thanks: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference
+// /Global_Objects/Math/imul
+
+"use strict";
+
+module.exports = function (val1, val2) {
+ var xh = (val1 >>> 16) & 0xffff
+ , xl = val1 & 0xffff
+ , yh = (val2 >>> 16) & 0xffff
+ , yl = val2 & 0xffff;
+
+ // The shift by 0 fixes the sign on the high part
+ // the final |0 converts the unsigned value into a signed value
+ return (xl * yl + (((xh * yl + xl * yh) << 16) >>> 0)) | 0;
+};
diff --git a/node_modules/es5-ext/math/index.js b/node_modules/es5-ext/math/index.js
new file mode 100644
index 0000000..a59269c
--- /dev/null
+++ b/node_modules/es5-ext/math/index.js
@@ -0,0 +1,24 @@
+"use strict";
+
+module.exports = {
+ acosh: require("./acosh"),
+ asinh: require("./asinh"),
+ atanh: require("./atanh"),
+ cbrt: require("./cbrt"),
+ ceil10: require("./ceil-10"),
+ clz32: require("./clz32"),
+ cosh: require("./cosh"),
+ expm1: require("./expm1"),
+ floor10: require("./floor-10"),
+ fround: require("./fround"),
+ hypot: require("./hypot"),
+ imul: require("./imul"),
+ log10: require("./log10"),
+ log2: require("./log2"),
+ log1p: require("./log1p"),
+ round10: require("./round-10"),
+ sign: require("./sign"),
+ sinh: require("./sinh"),
+ tanh: require("./tanh"),
+ trunc: require("./trunc")
+};
diff --git a/node_modules/es5-ext/math/log10/implement.js b/node_modules/es5-ext/math/log10/implement.js
new file mode 100644
index 0000000..f6153c1
--- /dev/null
+++ b/node_modules/es5-ext/math/log10/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "log10", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/log10/index.js b/node_modules/es5-ext/math/log10/index.js
new file mode 100644
index 0000000..abda55b
--- /dev/null
+++ b/node_modules/es5-ext/math/log10/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.log10 : require("./shim");
diff --git a/node_modules/es5-ext/math/log10/is-implemented.js b/node_modules/es5-ext/math/log10/is-implemented.js
new file mode 100644
index 0000000..f221759
--- /dev/null
+++ b/node_modules/es5-ext/math/log10/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var log10 = Math.log10;
+ if (typeof log10 !== "function") return false;
+ return log10(2) === 0.3010299956639812;
+};
diff --git a/node_modules/es5-ext/math/log10/shim.js b/node_modules/es5-ext/math/log10/shim.js
new file mode 100644
index 0000000..e8599a2
--- /dev/null
+++ b/node_modules/es5-ext/math/log10/shim.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var log = Math.log, LOG10E = Math.LOG10E;
+
+module.exports = function (value) {
+ if (isNaN(value)) return NaN;
+ value = Number(value);
+ if (value < 0) return NaN;
+ if (value === 0) return -Infinity;
+ if (value === 1) return 0;
+ if (value === Infinity) return Infinity;
+
+ return log(value) * LOG10E;
+};
diff --git a/node_modules/es5-ext/math/log1p/implement.js b/node_modules/es5-ext/math/log1p/implement.js
new file mode 100644
index 0000000..21e94e6
--- /dev/null
+++ b/node_modules/es5-ext/math/log1p/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "log1p", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/log1p/index.js b/node_modules/es5-ext/math/log1p/index.js
new file mode 100644
index 0000000..76eacc5
--- /dev/null
+++ b/node_modules/es5-ext/math/log1p/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.log1p : require("./shim");
diff --git a/node_modules/es5-ext/math/log1p/is-implemented.js b/node_modules/es5-ext/math/log1p/is-implemented.js
new file mode 100644
index 0000000..7626ab4
--- /dev/null
+++ b/node_modules/es5-ext/math/log1p/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var log1p = Math.log1p;
+ if (typeof log1p !== "function") return false;
+ return log1p(1) === 0.6931471805599453;
+};
diff --git a/node_modules/es5-ext/math/log1p/shim.js b/node_modules/es5-ext/math/log1p/shim.js
new file mode 100644
index 0000000..15f1182
--- /dev/null
+++ b/node_modules/es5-ext/math/log1p/shim.js
@@ -0,0 +1,17 @@
+// Thanks: https://github.com/monolithed/ECMAScript-6/blob/master/ES6.js
+
+"use strict";
+
+var log = Math.log;
+
+module.exports = function (value) {
+ if (isNaN(value)) return NaN;
+ value = Number(value);
+ if (value < -1) return NaN;
+ if (value === -1) return -Infinity;
+ if (value === 0) return value;
+ if (value === Infinity) return Infinity;
+
+ if (value > -1.0e-8 && value < 1.0e-8) return value - (value * value) / 2;
+ return log(1 + value);
+};
diff --git a/node_modules/es5-ext/math/log2/implement.js b/node_modules/es5-ext/math/log2/implement.js
new file mode 100644
index 0000000..91c06b1
--- /dev/null
+++ b/node_modules/es5-ext/math/log2/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "log2", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/log2/index.js b/node_modules/es5-ext/math/log2/index.js
new file mode 100644
index 0000000..a561977
--- /dev/null
+++ b/node_modules/es5-ext/math/log2/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.log2 : require("./shim");
diff --git a/node_modules/es5-ext/math/log2/is-implemented.js b/node_modules/es5-ext/math/log2/is-implemented.js
new file mode 100644
index 0000000..c70963f
--- /dev/null
+++ b/node_modules/es5-ext/math/log2/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var log2 = Math.log2;
+ if (typeof log2 !== "function") return false;
+ return log2(3).toFixed(15) === "1.584962500721156";
+};
diff --git a/node_modules/es5-ext/math/log2/shim.js b/node_modules/es5-ext/math/log2/shim.js
new file mode 100644
index 0000000..51fcdae
--- /dev/null
+++ b/node_modules/es5-ext/math/log2/shim.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var log = Math.log, LOG2E = Math.LOG2E;
+
+module.exports = function (value) {
+ if (isNaN(value)) return NaN;
+ value = Number(value);
+ if (value < 0) return NaN;
+ if (value === 0) return -Infinity;
+ if (value === 1) return 0;
+ if (value === Infinity) return Infinity;
+
+ return log(value) * LOG2E;
+};
diff --git a/node_modules/es5-ext/math/round-10.js b/node_modules/es5-ext/math/round-10.js
new file mode 100644
index 0000000..228c235
--- /dev/null
+++ b/node_modules/es5-ext/math/round-10.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./_decimal-adjust")("round");
diff --git a/node_modules/es5-ext/math/sign/implement.js b/node_modules/es5-ext/math/sign/implement.js
new file mode 100644
index 0000000..daf1769
--- /dev/null
+++ b/node_modules/es5-ext/math/sign/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "sign", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/sign/index.js b/node_modules/es5-ext/math/sign/index.js
new file mode 100644
index 0000000..d2659cb
--- /dev/null
+++ b/node_modules/es5-ext/math/sign/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.sign : require("./shim");
diff --git a/node_modules/es5-ext/math/sign/is-implemented.js b/node_modules/es5-ext/math/sign/is-implemented.js
new file mode 100644
index 0000000..4318cf2
--- /dev/null
+++ b/node_modules/es5-ext/math/sign/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var sign = Math.sign;
+ if (typeof sign !== "function") return false;
+ return sign(10) === 1 && sign(-20) === -1;
+};
diff --git a/node_modules/es5-ext/math/sign/shim.js b/node_modules/es5-ext/math/sign/shim.js
new file mode 100644
index 0000000..9acb495
--- /dev/null
+++ b/node_modules/es5-ext/math/sign/shim.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function (value) {
+ value = Number(value);
+ if (isNaN(value) || value === 0) return value;
+ return value > 0 ? 1 : -1;
+};
diff --git a/node_modules/es5-ext/math/sinh/implement.js b/node_modules/es5-ext/math/sinh/implement.js
new file mode 100644
index 0000000..4655f6b
--- /dev/null
+++ b/node_modules/es5-ext/math/sinh/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "sinh", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/sinh/index.js b/node_modules/es5-ext/math/sinh/index.js
new file mode 100644
index 0000000..107ef2e
--- /dev/null
+++ b/node_modules/es5-ext/math/sinh/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.sinh : require("./shim");
diff --git a/node_modules/es5-ext/math/sinh/is-implemented.js b/node_modules/es5-ext/math/sinh/is-implemented.js
new file mode 100644
index 0000000..aad22b0
--- /dev/null
+++ b/node_modules/es5-ext/math/sinh/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var sinh = Math.sinh;
+ if (typeof sinh !== "function") return false;
+ return sinh(1) === 1.1752011936438014 && sinh(Number.MIN_VALUE) === 5e-324;
+};
diff --git a/node_modules/es5-ext/math/sinh/shim.js b/node_modules/es5-ext/math/sinh/shim.js
new file mode 100644
index 0000000..b161eca
--- /dev/null
+++ b/node_modules/es5-ext/math/sinh/shim.js
@@ -0,0 +1,18 @@
+// Parts of implementation taken from es6-shim project
+// See: https://github.com/paulmillr/es6-shim/blob/master/es6-shim.js
+
+"use strict";
+
+var expm1 = require("../expm1")
+ , abs = Math.abs
+ , exp = Math.exp
+ , e = Math.E;
+
+module.exports = function (value) {
+ if (isNaN(value)) return NaN;
+ value = Number(value);
+ if (value === 0) return value;
+ if (!isFinite(value)) return value;
+ if (abs(value) < 1) return (expm1(value) - expm1(-value)) / 2;
+ return ((exp(value - 1) - exp(-value - 1)) * e) / 2;
+};
diff --git a/node_modules/es5-ext/math/tanh/implement.js b/node_modules/es5-ext/math/tanh/implement.js
new file mode 100644
index 0000000..52d2957
--- /dev/null
+++ b/node_modules/es5-ext/math/tanh/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "tanh", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/tanh/index.js b/node_modules/es5-ext/math/tanh/index.js
new file mode 100644
index 0000000..54b3251
--- /dev/null
+++ b/node_modules/es5-ext/math/tanh/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.tanh : require("./shim");
diff --git a/node_modules/es5-ext/math/tanh/is-implemented.js b/node_modules/es5-ext/math/tanh/is-implemented.js
new file mode 100644
index 0000000..b6226b4
--- /dev/null
+++ b/node_modules/es5-ext/math/tanh/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var tanh = Math.tanh;
+ if (typeof tanh !== "function") return false;
+ return tanh(1) === 0.7615941559557649 && tanh(Number.MAX_VALUE) === 1;
+};
diff --git a/node_modules/es5-ext/math/tanh/shim.js b/node_modules/es5-ext/math/tanh/shim.js
new file mode 100644
index 0000000..974dd7c
--- /dev/null
+++ b/node_modules/es5-ext/math/tanh/shim.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var exp = Math.exp;
+
+module.exports = function (value) {
+ var num1, num2;
+ if (isNaN(value)) return NaN;
+ value = Number(value);
+ if (value === 0) return value;
+ if (value === Infinity) return 1;
+ if (value === -Infinity) return -1;
+ num1 = exp(value);
+ if (num1 === Infinity) return 1;
+ num2 = exp(-value);
+ if (num2 === Infinity) return -1;
+ return (num1 - num2) / (num1 + num2);
+};
diff --git a/node_modules/es5-ext/math/trunc/implement.js b/node_modules/es5-ext/math/trunc/implement.js
new file mode 100644
index 0000000..bf1bf64
--- /dev/null
+++ b/node_modules/es5-ext/math/trunc/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Math, "trunc", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/math/trunc/index.js b/node_modules/es5-ext/math/trunc/index.js
new file mode 100644
index 0000000..8e3874c
--- /dev/null
+++ b/node_modules/es5-ext/math/trunc/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Math.trunc : require("./shim");
diff --git a/node_modules/es5-ext/math/trunc/is-implemented.js b/node_modules/es5-ext/math/trunc/is-implemented.js
new file mode 100644
index 0000000..861b5c0
--- /dev/null
+++ b/node_modules/es5-ext/math/trunc/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var trunc = Math.trunc;
+ if (typeof trunc !== "function") return false;
+ return trunc(13.67) === 13 && trunc(-13.67) === -13;
+};
diff --git a/node_modules/es5-ext/math/trunc/shim.js b/node_modules/es5-ext/math/trunc/shim.js
new file mode 100644
index 0000000..bf6ac8c
--- /dev/null
+++ b/node_modules/es5-ext/math/trunc/shim.js
@@ -0,0 +1,13 @@
+"use strict";
+
+var floor = Math.floor;
+
+module.exports = function (value) {
+ if (isNaN(value)) return NaN;
+ value = Number(value);
+ if (value === 0) return value;
+ if (value === Infinity) return Infinity;
+ if (value === -Infinity) return -Infinity;
+ if (value > 0) return floor(value);
+ return -floor(-value);
+};
diff --git a/node_modules/es5-ext/number/#/index.js b/node_modules/es5-ext/number/#/index.js
new file mode 100644
index 0000000..50b6418
--- /dev/null
+++ b/node_modules/es5-ext/number/#/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = { pad: require("./pad") };
diff --git a/node_modules/es5-ext/number/#/pad.js b/node_modules/es5-ext/number/#/pad.js
new file mode 100644
index 0000000..f5af869
--- /dev/null
+++ b/node_modules/es5-ext/number/#/pad.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var pad = require("../../string/#/pad")
+ , toPosInt = require("../to-pos-integer")
+ , toFixed = Number.prototype.toFixed;
+
+module.exports = function (length /*, precision*/) {
+ var precision;
+ length = toPosInt(length);
+ precision = toPosInt(arguments[1]);
+
+ return pad.call(
+ precision ? toFixed.call(this, precision) : this, "0",
+ length + (precision ? 1 + precision : 0)
+ );
+};
diff --git a/node_modules/es5-ext/number/epsilon/implement.js b/node_modules/es5-ext/number/epsilon/implement.js
new file mode 100644
index 0000000..5a22cf5
--- /dev/null
+++ b/node_modules/es5-ext/number/epsilon/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Number, "EPSILON", {
+ value: require("./"),
+ configurable: false,
+ enumerable: false,
+ writable: false
+ });
+}
diff --git a/node_modules/es5-ext/number/epsilon/index.js b/node_modules/es5-ext/number/epsilon/index.js
new file mode 100644
index 0000000..12e8a8d
--- /dev/null
+++ b/node_modules/es5-ext/number/epsilon/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = 2.220446049250313e-16;
diff --git a/node_modules/es5-ext/number/epsilon/is-implemented.js b/node_modules/es5-ext/number/epsilon/is-implemented.js
new file mode 100644
index 0000000..5ddc9d6
--- /dev/null
+++ b/node_modules/es5-ext/number/epsilon/is-implemented.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = function () { return typeof Number.EPSILON === "number"; };
diff --git a/node_modules/es5-ext/number/index.js b/node_modules/es5-ext/number/index.js
new file mode 100644
index 0000000..b57ff15
--- /dev/null
+++ b/node_modules/es5-ext/number/index.js
@@ -0,0 +1,17 @@
+"use strict";
+
+module.exports = {
+ "#": require("./#"),
+ "EPSILON": require("./epsilon"),
+ "isFinite": require("./is-finite"),
+ "isInteger": require("./is-integer"),
+ "isNaN": require("./is-nan"),
+ "isNatural": require("./is-natural"),
+ "isNumber": require("./is-number"),
+ "isSafeInteger": require("./is-safe-integer"),
+ "MAX_SAFE_INTEGER": require("./max-safe-integer"),
+ "MIN_SAFE_INTEGER": require("./min-safe-integer"),
+ "toInteger": require("./to-integer"),
+ "toPosInteger": require("./to-pos-integer"),
+ "toUint32": require("./to-uint32")
+};
diff --git a/node_modules/es5-ext/number/is-finite/implement.js b/node_modules/es5-ext/number/is-finite/implement.js
new file mode 100644
index 0000000..41109fb
--- /dev/null
+++ b/node_modules/es5-ext/number/is-finite/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Number, "isFinite", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/number/is-finite/index.js b/node_modules/es5-ext/number/is-finite/index.js
new file mode 100644
index 0000000..f3a7112
--- /dev/null
+++ b/node_modules/es5-ext/number/is-finite/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Number.isFinite : require("./shim");
diff --git a/node_modules/es5-ext/number/is-finite/is-implemented.js b/node_modules/es5-ext/number/is-finite/is-implemented.js
new file mode 100644
index 0000000..eadd050
--- /dev/null
+++ b/node_modules/es5-ext/number/is-finite/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var numberIsFinite = Number.isFinite;
+ if (typeof numberIsFinite !== "function") return false;
+ return !numberIsFinite("23") && numberIsFinite(34) && !numberIsFinite(Infinity);
+};
diff --git a/node_modules/es5-ext/number/is-finite/shim.js b/node_modules/es5-ext/number/is-finite/shim.js
new file mode 100644
index 0000000..ce700f6
--- /dev/null
+++ b/node_modules/es5-ext/number/is-finite/shim.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = function (value) { return typeof value === "number" && isFinite(value); };
diff --git a/node_modules/es5-ext/number/is-integer/implement.js b/node_modules/es5-ext/number/is-integer/implement.js
new file mode 100644
index 0000000..48b4cd2
--- /dev/null
+++ b/node_modules/es5-ext/number/is-integer/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Number, "isInteger", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/number/is-integer/index.js b/node_modules/es5-ext/number/is-integer/index.js
new file mode 100644
index 0000000..2805b11
--- /dev/null
+++ b/node_modules/es5-ext/number/is-integer/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Number.isInteger : require("./shim");
diff --git a/node_modules/es5-ext/number/is-integer/is-implemented.js b/node_modules/es5-ext/number/is-integer/is-implemented.js
new file mode 100644
index 0000000..f357c71
--- /dev/null
+++ b/node_modules/es5-ext/number/is-integer/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var isInteger = Number.isInteger;
+ if (typeof isInteger !== "function") return false;
+ return !isInteger("23") && isInteger(34) && !isInteger(32.34);
+};
diff --git a/node_modules/es5-ext/number/is-integer/shim.js b/node_modules/es5-ext/number/is-integer/shim.js
new file mode 100644
index 0000000..12058b5
--- /dev/null
+++ b/node_modules/es5-ext/number/is-integer/shim.js
@@ -0,0 +1,8 @@
+// Credit: http://www.2ality.com/2014/05/is-integer.html
+
+"use strict";
+
+module.exports = function (value) {
+ if (typeof value !== "number") return false;
+ return value % 1 === 0;
+};
diff --git a/node_modules/es5-ext/number/is-nan/implement.js b/node_modules/es5-ext/number/is-nan/implement.js
new file mode 100644
index 0000000..f704e4c
--- /dev/null
+++ b/node_modules/es5-ext/number/is-nan/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Number, "isNaN", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/number/is-nan/index.js b/node_modules/es5-ext/number/is-nan/index.js
new file mode 100644
index 0000000..2cec8fc
--- /dev/null
+++ b/node_modules/es5-ext/number/is-nan/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Number.isNaN : require("./shim");
diff --git a/node_modules/es5-ext/number/is-nan/is-implemented.js b/node_modules/es5-ext/number/is-nan/is-implemented.js
new file mode 100644
index 0000000..756838a
--- /dev/null
+++ b/node_modules/es5-ext/number/is-nan/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var numberIsNaN = Number.isNaN;
+ if (typeof numberIsNaN !== "function") return false;
+ return !numberIsNaN({}) && numberIsNaN(NaN) && !numberIsNaN(34);
+};
diff --git a/node_modules/es5-ext/number/is-nan/shim.js b/node_modules/es5-ext/number/is-nan/shim.js
new file mode 100644
index 0000000..b5730d1
--- /dev/null
+++ b/node_modules/es5-ext/number/is-nan/shim.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = function (value) {
+ // eslint-disable-next-line no-self-compare
+ return value !== value;
+};
diff --git a/node_modules/es5-ext/number/is-natural.js b/node_modules/es5-ext/number/is-natural.js
new file mode 100644
index 0000000..2bbb5a2
--- /dev/null
+++ b/node_modules/es5-ext/number/is-natural.js
@@ -0,0 +1,5 @@
+"use strict";
+
+var isInteger = require("./is-integer");
+
+module.exports = function (num) { return isInteger(num) && num >= 0; };
diff --git a/node_modules/es5-ext/number/is-number.js b/node_modules/es5-ext/number/is-number.js
new file mode 100644
index 0000000..5c11a52
--- /dev/null
+++ b/node_modules/es5-ext/number/is-number.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var objToString = Object.prototype.toString, id = objToString.call(1);
+
+module.exports = function (value) {
+ return (
+ typeof value === "number" ||
+ value instanceof Number ||
+ (typeof value === "object" && objToString.call(value) === id)
+ );
+};
diff --git a/node_modules/es5-ext/number/is-safe-integer/implement.js b/node_modules/es5-ext/number/is-safe-integer/implement.js
new file mode 100644
index 0000000..571b214
--- /dev/null
+++ b/node_modules/es5-ext/number/is-safe-integer/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Number, "isSafeInteger", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/number/is-safe-integer/index.js b/node_modules/es5-ext/number/is-safe-integer/index.js
new file mode 100644
index 0000000..26c2b9f
--- /dev/null
+++ b/node_modules/es5-ext/number/is-safe-integer/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Number.isSafeInteger : require("./shim");
diff --git a/node_modules/es5-ext/number/is-safe-integer/is-implemented.js b/node_modules/es5-ext/number/is-safe-integer/is-implemented.js
new file mode 100644
index 0000000..5ed3763
--- /dev/null
+++ b/node_modules/es5-ext/number/is-safe-integer/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var isSafeInteger = Number.isSafeInteger;
+ if (typeof isSafeInteger !== "function") return false;
+ return !isSafeInteger("23") && isSafeInteger(34232322323) && !isSafeInteger(9007199254740992);
+};
diff --git a/node_modules/es5-ext/number/is-safe-integer/shim.js b/node_modules/es5-ext/number/is-safe-integer/shim.js
new file mode 100644
index 0000000..fb4f4d5
--- /dev/null
+++ b/node_modules/es5-ext/number/is-safe-integer/shim.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var isInteger = require("../is-integer/shim")
+ , maxValue = require("../max-safe-integer")
+ , abs = Math.abs;
+
+module.exports = function (value) {
+ if (!isInteger(value)) return false;
+ return abs(value) <= maxValue;
+};
diff --git a/node_modules/es5-ext/number/max-safe-integer/implement.js b/node_modules/es5-ext/number/max-safe-integer/implement.js
new file mode 100644
index 0000000..4ee3231
--- /dev/null
+++ b/node_modules/es5-ext/number/max-safe-integer/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Number, "MAX_SAFE_INTEGER", {
+ value: require("./"),
+ configurable: false,
+ enumerable: false,
+ writable: false
+ });
+}
diff --git a/node_modules/es5-ext/number/max-safe-integer/index.js b/node_modules/es5-ext/number/max-safe-integer/index.js
new file mode 100644
index 0000000..75a41e7
--- /dev/null
+++ b/node_modules/es5-ext/number/max-safe-integer/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = Math.pow(2, 53) - 1;
diff --git a/node_modules/es5-ext/number/max-safe-integer/is-implemented.js b/node_modules/es5-ext/number/max-safe-integer/is-implemented.js
new file mode 100644
index 0000000..3d6e914
--- /dev/null
+++ b/node_modules/es5-ext/number/max-safe-integer/is-implemented.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = function () { return typeof Number.MAX_SAFE_INTEGER === "number"; };
diff --git a/node_modules/es5-ext/number/min-safe-integer/implement.js b/node_modules/es5-ext/number/min-safe-integer/implement.js
new file mode 100644
index 0000000..979dc39
--- /dev/null
+++ b/node_modules/es5-ext/number/min-safe-integer/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Number, "MIN_SAFE_INTEGER", {
+ value: require("./"),
+ configurable: false,
+ enumerable: false,
+ writable: false
+ });
+}
diff --git a/node_modules/es5-ext/number/min-safe-integer/index.js b/node_modules/es5-ext/number/min-safe-integer/index.js
new file mode 100644
index 0000000..cde4514
--- /dev/null
+++ b/node_modules/es5-ext/number/min-safe-integer/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = -(Math.pow(2, 53) - 1);
diff --git a/node_modules/es5-ext/number/min-safe-integer/is-implemented.js b/node_modules/es5-ext/number/min-safe-integer/is-implemented.js
new file mode 100644
index 0000000..71e6a31
--- /dev/null
+++ b/node_modules/es5-ext/number/min-safe-integer/is-implemented.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = function () { return typeof Number.MIN_SAFE_INTEGER === "number"; };
diff --git a/node_modules/es5-ext/number/to-integer.js b/node_modules/es5-ext/number/to-integer.js
new file mode 100644
index 0000000..4df5572
--- /dev/null
+++ b/node_modules/es5-ext/number/to-integer.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var sign = require("../math/sign")
+ , abs = Math.abs
+ , floor = Math.floor;
+
+module.exports = function (value) {
+ if (isNaN(value)) return 0;
+ value = Number(value);
+ if (value === 0 || !isFinite(value)) return value;
+ return sign(value) * floor(abs(value));
+};
diff --git a/node_modules/es5-ext/number/to-pos-integer.js b/node_modules/es5-ext/number/to-pos-integer.js
new file mode 100644
index 0000000..28f6d40
--- /dev/null
+++ b/node_modules/es5-ext/number/to-pos-integer.js
@@ -0,0 +1,6 @@
+"use strict";
+
+var toInteger = require("./to-integer")
+ , max = Math.max;
+
+module.exports = function (value) { return max(0, toInteger(value)); };
diff --git a/node_modules/es5-ext/number/to-uint32.js b/node_modules/es5-ext/number/to-uint32.js
new file mode 100644
index 0000000..cb3590a
--- /dev/null
+++ b/node_modules/es5-ext/number/to-uint32.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = function (value) {
+ // eslint-disable-next-line no-bitwise
+ return value >>> 0;
+};
diff --git a/node_modules/es5-ext/object/_iterate.js b/node_modules/es5-ext/object/_iterate.js
new file mode 100644
index 0000000..1f0c85f
--- /dev/null
+++ b/node_modules/es5-ext/object/_iterate.js
@@ -0,0 +1,30 @@
+// Internal method, used by iteration functions.
+// Calls a function for each key-value pair found in object
+// Optionally takes compareFn to iterate object in specific order
+
+"use strict";
+
+var callable = require("./valid-callable")
+ , value = require("./valid-value")
+ , bind = Function.prototype.bind
+ , call = Function.prototype.call
+ , keys = Object.keys
+ , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+module.exports = function (method, defVal) {
+ return function (obj, cb /*, thisArg, compareFn*/) {
+ var list, thisArg = arguments[2], compareFn = arguments[3];
+ obj = Object(value(obj));
+ callable(cb);
+
+ list = keys(obj);
+ if (compareFn) {
+ list.sort(typeof compareFn === "function" ? bind.call(compareFn, obj) : undefined);
+ }
+ if (typeof method !== "function") method = list[method];
+ return call.call(method, list, function (key, index) {
+ if (!objPropertyIsEnumerable.call(obj, key)) return defVal;
+ return call.call(cb, thisArg, obj[key], key, obj, index);
+ });
+ };
+};
diff --git a/node_modules/es5-ext/object/assign-deep.js b/node_modules/es5-ext/object/assign-deep.js
new file mode 100644
index 0000000..87fd78b
--- /dev/null
+++ b/node_modules/es5-ext/object/assign-deep.js
@@ -0,0 +1,34 @@
+"use strict";
+
+var includes = require("../array/#/contains")
+ , uniq = require("../array/#/uniq")
+ , copyDeep = require("./copy-deep")
+ , objForEach = require("./for-each")
+ , isPlainObject = require("./is-plain-object")
+ , ensureValue = require("./valid-value");
+
+var isArray = Array.isArray, slice = Array.prototype.slice;
+
+var deepAssign = function (target, source) {
+ if (target === source) return target;
+ if (isPlainObject(target) && isPlainObject(source)) {
+ objForEach(source, function (value, key) { target[key] = deepAssign(target[key], value); });
+ return target;
+ }
+ if (isArray(target) && isArray(source)) {
+ source.forEach(function (item) {
+ if (includes.call(target, item)) return;
+ if (isArray(item) || isPlainObject(item)) item = copyDeep(item);
+ target.push(item);
+ });
+ return target;
+ }
+ if (isPlainObject(source) || isArray(source)) return copyDeep(source);
+ return source;
+};
+
+module.exports = function (target /*, ...objects*/) {
+ return uniq
+ .call([ensureValue(target)].concat(slice.call(arguments, 1).map(ensureValue)))
+ .reduce(deepAssign);
+};
diff --git a/node_modules/es5-ext/object/assign/implement.js b/node_modules/es5-ext/object/assign/implement.js
new file mode 100644
index 0000000..f20371d
--- /dev/null
+++ b/node_modules/es5-ext/object/assign/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Object, "assign", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/object/assign/index.js b/node_modules/es5-ext/object/assign/index.js
new file mode 100644
index 0000000..9585b55
--- /dev/null
+++ b/node_modules/es5-ext/object/assign/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Object.assign : require("./shim");
diff --git a/node_modules/es5-ext/object/assign/is-implemented.js b/node_modules/es5-ext/object/assign/is-implemented.js
new file mode 100644
index 0000000..8bf71ae
--- /dev/null
+++ b/node_modules/es5-ext/object/assign/is-implemented.js
@@ -0,0 +1,9 @@
+"use strict";
+
+module.exports = function () {
+ var assign = Object.assign, obj;
+ if (typeof assign !== "function") return false;
+ obj = { foo: "raz" };
+ assign(obj, { bar: "dwa" }, { trzy: "trzy" });
+ return obj.foo + obj.bar + obj.trzy === "razdwatrzy";
+};
diff --git a/node_modules/es5-ext/object/assign/shim.js b/node_modules/es5-ext/object/assign/shim.js
new file mode 100644
index 0000000..afa58f2
--- /dev/null
+++ b/node_modules/es5-ext/object/assign/shim.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var keys = require("../keys")
+ , value = require("../valid-value")
+ , max = Math.max;
+
+module.exports = function (dest, src /*, …srcn*/) {
+ var error, i, length = max(arguments.length, 2), assign;
+ dest = Object(value(dest));
+ assign = function (key) {
+ try {
+ dest[key] = src[key];
+ } catch (e) {
+ if (!error) error = e;
+ }
+ };
+ for (i = 1; i < length; ++i) {
+ src = arguments[i];
+ keys(src).forEach(assign);
+ }
+ if (error !== undefined) throw error;
+ return dest;
+};
diff --git a/node_modules/es5-ext/object/clear.js b/node_modules/es5-ext/object/clear.js
new file mode 100644
index 0000000..268cc5b
--- /dev/null
+++ b/node_modules/es5-ext/object/clear.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var keys = require("./keys");
+
+module.exports = function (obj) {
+ var error;
+ keys(obj).forEach(function (key) {
+ try {
+ delete this[key];
+ } catch (e) {
+ if (!error) error = e;
+ }
+ }, obj);
+ if (error !== undefined) throw error;
+ return obj;
+};
diff --git a/node_modules/es5-ext/object/compact.js b/node_modules/es5-ext/object/compact.js
new file mode 100644
index 0000000..a1794bb
--- /dev/null
+++ b/node_modules/es5-ext/object/compact.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var filter = require("./filter")
+ , isValue = require("./is-value");
+
+module.exports = function (obj) {
+ return filter(obj, function (val) { return isValue(val); });
+};
diff --git a/node_modules/es5-ext/object/compare.js b/node_modules/es5-ext/object/compare.js
new file mode 100644
index 0000000..261a732
--- /dev/null
+++ b/node_modules/es5-ext/object/compare.js
@@ -0,0 +1,39 @@
+"use strict";
+
+var strCompare = require("../string/#/case-insensitive-compare")
+ , isObject = require("./is-object")
+ , isValue = require("./is-value")
+ , numIsNaN = require("../number/is-nan")
+ , resolve
+ , typeMap;
+
+typeMap = { undefined: 0, object: 1, boolean: 2, string: 3, number: 4 };
+
+resolve = function (a) {
+ if (isObject(a)) {
+ if (typeof a.valueOf !== "function") return NaN;
+ a = a.valueOf();
+ if (isObject(a)) {
+ if (typeof a.toString !== "function") return NaN;
+ a = a.toString();
+ if (typeof a !== "string") return NaN;
+ }
+ }
+ return a;
+};
+
+module.exports = function (val1, val2) {
+ if (val1 === val2) return 0; // Same
+
+ val1 = resolve(val1);
+ val2 = resolve(val2);
+ // eslint-disable-next-line eqeqeq
+ if (val1 == val2) return typeMap[typeof val1] - typeMap[typeof val2];
+ if (!isValue(val1)) return -1;
+ if (!isValue(val2)) return 1;
+ if (typeof val1 === "string" || typeof val2 === "string") {
+ return strCompare.call(val1, val2);
+ }
+ if (numIsNaN(val1) && numIsNaN(val2)) return 0; // Jslint: ignore
+ return Number(val1) - Number(val2);
+};
diff --git a/node_modules/es5-ext/object/copy-deep.js b/node_modules/es5-ext/object/copy-deep.js
new file mode 100644
index 0000000..1d1bed2
--- /dev/null
+++ b/node_modules/es5-ext/object/copy-deep.js
@@ -0,0 +1,35 @@
+"use strict";
+
+var forEach = require("./for-each")
+ , isPlainObject = require("./is-plain-object")
+ , ensureValue = require("./valid-value")
+ , isArray = Array.isArray;
+
+var copyValue = function (value, ancestors, ancestorsCopy) {
+ var mode;
+ if (isPlainObject(value)) mode = "object";
+ else if (isArray(value)) mode = "array";
+ if (!mode) return value;
+
+ var copy = ancestorsCopy[ancestors.indexOf(value)];
+ if (copy) return copy;
+ copy = mode === "object" ? {} : [];
+
+ ancestors.push(value);
+ ancestorsCopy.push(copy);
+ if (mode === "object") {
+ forEach(value, function (item, key) {
+ copy[key] = copyValue(item, ancestors, ancestorsCopy);
+ });
+ } else {
+ value.forEach(function (item, index) {
+ copy[index] = copyValue(item, ancestors, ancestorsCopy);
+ });
+ }
+ ancestors.pop();
+ ancestorsCopy.pop();
+
+ return copy;
+};
+
+module.exports = function (source) { return copyValue(ensureValue(source), [], []); };
diff --git a/node_modules/es5-ext/object/copy.js b/node_modules/es5-ext/object/copy.js
new file mode 100644
index 0000000..2bd591d
--- /dev/null
+++ b/node_modules/es5-ext/object/copy.js
@@ -0,0 +1,19 @@
+"use strict";
+
+var aFrom = require("../array/from")
+ , assign = require("./assign")
+ , value = require("./valid-value");
+
+module.exports = function (obj /*, propertyNames, options*/) {
+ var copy = Object(value(obj)), propertyNames = arguments[1], options = Object(arguments[2]);
+ if (copy !== obj && !propertyNames) return copy;
+ var result = {};
+ if (propertyNames) {
+ aFrom(propertyNames, function (propertyName) {
+ if (options.ensure || propertyName in obj) result[propertyName] = obj[propertyName];
+ });
+ } else {
+ assign(result, obj);
+ }
+ return result;
+};
diff --git a/node_modules/es5-ext/object/count.js b/node_modules/es5-ext/object/count.js
new file mode 100644
index 0000000..6c018bb
--- /dev/null
+++ b/node_modules/es5-ext/object/count.js
@@ -0,0 +1,5 @@
+"use strict";
+
+var keys = require("./keys");
+
+module.exports = function (obj) { return keys(obj).length; };
diff --git a/node_modules/es5-ext/object/create.js b/node_modules/es5-ext/object/create.js
new file mode 100644
index 0000000..a391ec1
--- /dev/null
+++ b/node_modules/es5-ext/object/create.js
@@ -0,0 +1,43 @@
+// Workaround for http://code.google.com/p/v8/issues/detail?id=2804
+
+"use strict";
+
+var create = Object.create, shim;
+
+if (!require("./set-prototype-of/is-implemented")()) {
+ shim = require("./set-prototype-of/shim");
+}
+
+module.exports = (function () {
+ var nullObject, polyProps, desc;
+ if (!shim) return create;
+ if (shim.level !== 1) return create;
+
+ nullObject = {};
+ polyProps = {};
+ desc = { configurable: false, enumerable: false, writable: true, value: undefined };
+ Object.getOwnPropertyNames(Object.prototype).forEach(function (name) {
+ if (name === "__proto__") {
+ polyProps[name] = {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: undefined
+ };
+ return;
+ }
+ polyProps[name] = desc;
+ });
+ Object.defineProperties(nullObject, polyProps);
+
+ Object.defineProperty(shim, "nullPolyfill", {
+ configurable: false,
+ enumerable: false,
+ writable: false,
+ value: nullObject
+ });
+
+ return function (prototype, props) {
+ return create(prototype === null ? nullObject : prototype, props);
+ };
+})();
diff --git a/node_modules/es5-ext/object/ensure-array.js b/node_modules/es5-ext/object/ensure-array.js
new file mode 100644
index 0000000..5ca7a94
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-array.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var toShortString = require("../to-short-string-representation")
+ , isArray = require("./is-array-like");
+
+module.exports = function (value) {
+ if (isArray(value)) return value;
+ throw new TypeError(toShortString(value) + " is not a array");
+};
diff --git a/node_modules/es5-ext/object/ensure-finite-number.js b/node_modules/es5-ext/object/ensure-finite-number.js
new file mode 100644
index 0000000..4f6e4b4
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-finite-number.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var isFiniteNumber = require("./is-finite-number")
+ , safeToString = require("../safe-to-string");
+
+module.exports = function (value) {
+ if (isFiniteNumber(value)) return Number(value);
+ throw new TypeError(safeToString(value) + " does not represent a finite number value");
+};
diff --git a/node_modules/es5-ext/object/ensure-integer.js b/node_modules/es5-ext/object/ensure-integer.js
new file mode 100644
index 0000000..9ec64b5
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-integer.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var toShortString = require("../to-short-string-representation")
+ , isInteger = require("./is-integer");
+
+module.exports = function (num) {
+ if (!isInteger(num)) throw new TypeError(toShortString(num) + " is not a integer");
+ return Number(num);
+};
diff --git a/node_modules/es5-ext/object/ensure-natural-number-value.js b/node_modules/es5-ext/object/ensure-natural-number-value.js
new file mode 100644
index 0000000..1a901aa
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-natural-number-value.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var isNaturalValue = require("./is-natural-number-value")
+ , toShortString = require("../to-short-string-representation");
+
+module.exports = function (arg) {
+ var num = Number(arg);
+ if (!isNaturalValue(arg)) throw new TypeError(toShortString(arg) + " is not a natural number");
+ return num;
+};
diff --git a/node_modules/es5-ext/object/ensure-natural-number.js b/node_modules/es5-ext/object/ensure-natural-number.js
new file mode 100644
index 0000000..ec7e514
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-natural-number.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var isNatural = require("../number/is-natural")
+ , toShortString = require("../to-short-string-representation");
+
+module.exports = function (arg) {
+ var num = Number(arg);
+ if (!isNatural(num)) throw new TypeError(toShortString(arg) + " is not a natural number");
+ return num;
+};
diff --git a/node_modules/es5-ext/object/ensure-plain-function.js b/node_modules/es5-ext/object/ensure-plain-function.js
new file mode 100644
index 0000000..6cd9853
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-plain-function.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var safeToString = require("../safe-to-string")
+ , isPlainFunction = require("./is-plain-function");
+
+module.exports = function (value) {
+ if (!isPlainFunction(value)) {
+ throw new TypeError(safeToString(value) + " is not a plain function");
+ }
+ return value;
+};
diff --git a/node_modules/es5-ext/object/ensure-plain-object.js b/node_modules/es5-ext/object/ensure-plain-object.js
new file mode 100644
index 0000000..7fb2b93
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-plain-object.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var safeToString = require("../safe-to-string")
+ , isPlainObject = require("./is-plain-object");
+
+module.exports = function (value) {
+ if (!isPlainObject(value)) throw new TypeError(safeToString(value) + " is not a plain object");
+ return value;
+};
diff --git a/node_modules/es5-ext/object/ensure-promise.js b/node_modules/es5-ext/object/ensure-promise.js
new file mode 100644
index 0000000..b5b5356
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-promise.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var safeToString = require("../safe-to-string")
+ , isPromise = require("./is-promise");
+
+module.exports = function (value) {
+ if (!isPromise(value)) throw new TypeError(safeToString(value) + " is not a promise");
+ return value;
+};
diff --git a/node_modules/es5-ext/object/ensure-thenable.js b/node_modules/es5-ext/object/ensure-thenable.js
new file mode 100644
index 0000000..c55c17a
--- /dev/null
+++ b/node_modules/es5-ext/object/ensure-thenable.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var safeToString = require("../safe-to-string")
+ , isThenable = require("./is-thenable");
+
+module.exports = function (value) {
+ if (!isThenable(value)) throw new TypeError(safeToString(value) + " is not a thenable");
+ return value;
+};
diff --git a/node_modules/es5-ext/object/entries/implement.js b/node_modules/es5-ext/object/entries/implement.js
new file mode 100644
index 0000000..5c2a246
--- /dev/null
+++ b/node_modules/es5-ext/object/entries/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Object, "entries", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/object/entries/index.js b/node_modules/es5-ext/object/entries/index.js
new file mode 100644
index 0000000..4a297d6
--- /dev/null
+++ b/node_modules/es5-ext/object/entries/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Object.entries : require("./shim");
diff --git a/node_modules/es5-ext/object/entries/is-implemented.js b/node_modules/es5-ext/object/entries/is-implemented.js
new file mode 100644
index 0000000..aad52b2
--- /dev/null
+++ b/node_modules/es5-ext/object/entries/is-implemented.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = function () {
+ try { return Object.entries({ foo: 12 })[0][0] === "foo"; }
+ catch (e) { return false; }
+};
diff --git a/node_modules/es5-ext/object/entries/shim.js b/node_modules/es5-ext/object/entries/shim.js
new file mode 100644
index 0000000..2348e44
--- /dev/null
+++ b/node_modules/es5-ext/object/entries/shim.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var ensureValue = require("../valid-value");
+
+module.exports = function (object) {
+ ensureValue(object);
+ var result = [];
+ object = Object(object);
+ for (var key in object) {
+ if (!propertyIsEnumerable.call(object, key)) continue;
+ result.push([key, object[key]]);
+ }
+ return result;
+};
diff --git a/node_modules/es5-ext/object/eq.js b/node_modules/es5-ext/object/eq.js
new file mode 100644
index 0000000..0312468
--- /dev/null
+++ b/node_modules/es5-ext/object/eq.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var numIsNaN = require("../number/is-nan");
+
+module.exports = function (val1, val2) {
+ return val1 === val2 || (numIsNaN(val1) && numIsNaN(val2));
+};
diff --git a/node_modules/es5-ext/object/every.js b/node_modules/es5-ext/object/every.js
new file mode 100644
index 0000000..892b548
--- /dev/null
+++ b/node_modules/es5-ext/object/every.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./_iterate")("every", true);
diff --git a/node_modules/es5-ext/object/filter.js b/node_modules/es5-ext/object/filter.js
new file mode 100644
index 0000000..c7dd969
--- /dev/null
+++ b/node_modules/es5-ext/object/filter.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var callable = require("./valid-callable")
+ , forEach = require("./for-each")
+ , call = Function.prototype.call;
+
+module.exports = function (obj, cb /*, thisArg*/) {
+ var result = {}, thisArg = arguments[2];
+ callable(cb);
+ forEach(obj, function (value, key, targetObj, index) {
+ if (call.call(cb, thisArg, value, key, targetObj, index)) result[key] = targetObj[key];
+ });
+ return result;
+};
diff --git a/node_modules/es5-ext/object/find-key.js b/node_modules/es5-ext/object/find-key.js
new file mode 100644
index 0000000..6da6ba6
--- /dev/null
+++ b/node_modules/es5-ext/object/find-key.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./_iterate")(require("../array/#/find"), false);
diff --git a/node_modules/es5-ext/object/find.js b/node_modules/es5-ext/object/find.js
new file mode 100644
index 0000000..5960421
--- /dev/null
+++ b/node_modules/es5-ext/object/find.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var findKey = require("./find-key")
+ , isValue = require("./is-value");
+
+// eslint-disable-next-line no-unused-vars
+module.exports = function (obj, cb /*, thisArg, compareFn*/) {
+ var key = findKey.apply(this, arguments);
+ return isValue(key) ? obj[key] : key;
+};
diff --git a/node_modules/es5-ext/object/first-key.js b/node_modules/es5-ext/object/first-key.js
new file mode 100644
index 0000000..3666de5
--- /dev/null
+++ b/node_modules/es5-ext/object/first-key.js
@@ -0,0 +1,13 @@
+"use strict";
+
+var value = require("./valid-value")
+ , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+module.exports = function (obj) {
+ var i;
+ value(obj);
+ for (i in obj) {
+ if (objPropertyIsEnumerable.call(obj, i)) return i;
+ }
+ return null;
+};
diff --git a/node_modules/es5-ext/object/flatten.js b/node_modules/es5-ext/object/flatten.js
new file mode 100644
index 0000000..cda7475
--- /dev/null
+++ b/node_modules/es5-ext/object/flatten.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var isPlainObject = require("./is-plain-object")
+ , forEach = require("./for-each")
+ , process;
+
+process = function self(value, key) {
+ if (isPlainObject(value)) forEach(value, self, this);
+ else this[key] = value;
+};
+
+module.exports = function (obj) {
+ var flattened = {};
+ forEach(obj, process, flattened);
+ return flattened;
+};
diff --git a/node_modules/es5-ext/object/for-each.js b/node_modules/es5-ext/object/for-each.js
new file mode 100644
index 0000000..d282956
--- /dev/null
+++ b/node_modules/es5-ext/object/for-each.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./_iterate")("forEach");
diff --git a/node_modules/es5-ext/object/get-property-names.js b/node_modules/es5-ext/object/get-property-names.js
new file mode 100644
index 0000000..7dfef27
--- /dev/null
+++ b/node_modules/es5-ext/object/get-property-names.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var uniq = require("../array/#/uniq")
+ , value = require("./valid-value")
+ , push = Array.prototype.push
+ , getOwnPropertyNames = Object.getOwnPropertyNames
+ , getPrototypeOf = Object.getPrototypeOf;
+
+module.exports = function (obj) {
+ var keys;
+ obj = Object(value(obj));
+ keys = getOwnPropertyNames(obj);
+ while ((obj = getPrototypeOf(obj))) {
+ push.apply(keys, getOwnPropertyNames(obj));
+ }
+ return uniq.call(keys);
+};
diff --git a/node_modules/es5-ext/object/index.js b/node_modules/es5-ext/object/index.js
new file mode 100644
index 0000000..13cfb95
--- /dev/null
+++ b/node_modules/es5-ext/object/index.js
@@ -0,0 +1,70 @@
+"use strict";
+
+module.exports = {
+ assign: require("./assign"),
+ assignDeep: require("./assign-deep"),
+ clear: require("./clear"),
+ compact: require("./compact"),
+ compare: require("./compare"),
+ copy: require("./copy"),
+ copyDeep: require("./copy-deep"),
+ count: require("./count"),
+ create: require("./create"),
+ ensureArray: require("./ensure-array"),
+ ensureFiniteNumber: require("./ensure-finite-number"),
+ ensureInteger: require("./ensure-integer"),
+ ensureNaturalNumber: require("./ensure-natural-number"),
+ ensureNaturalNumberValue: require("./ensure-natural-number-value"),
+ ensurePlainFunction: require("./ensure-plain-function"),
+ ensurePlainObject: require("./ensure-plain-object"),
+ ensurePromise: require("./ensure-promise"),
+ ensureThenable: require("./ensure-thenable"),
+ entries: require("./entries"),
+ eq: require("./eq"),
+ every: require("./every"),
+ filter: require("./filter"),
+ find: require("./find"),
+ findKey: require("./find-key"),
+ firstKey: require("./first-key"),
+ flatten: require("./flatten"),
+ forEach: require("./for-each"),
+ getPropertyNames: require("./get-property-names"),
+ is: require("./is"),
+ isArrayLike: require("./is-array-like"),
+ isCallable: require("./is-callable"),
+ isCopy: require("./is-copy"),
+ isCopyDeep: require("./is-copy-deep"),
+ isEmpty: require("./is-empty"),
+ isFiniteNumber: require("./is-finite-number"),
+ isInteger: require("./is-integer"),
+ isNaturalNumber: require("./is-natural-number"),
+ isNaturalNumberValue: require("./is-natural-number-value"),
+ isNumberValue: require("./is-number-value"),
+ isObject: require("./is-object"),
+ isPlainFunction: require("./is-plain-function"),
+ isPlainObject: require("./is-plain-object"),
+ isPromise: require("./is-promise"),
+ isThenable: require("./is-thenable"),
+ isValue: require("./is-value"),
+ keyOf: require("./key-of"),
+ keys: require("./keys"),
+ map: require("./map"),
+ mapKeys: require("./map-keys"),
+ normalizeOptions: require("./normalize-options"),
+ mixin: require("./mixin"),
+ mixinPrototypes: require("./mixin-prototypes"),
+ primitiveSet: require("./primitive-set"),
+ safeTraverse: require("./safe-traverse"),
+ serialize: require("./serialize"),
+ setPrototypeOf: require("./set-prototype-of"),
+ some: require("./some"),
+ toArray: require("./to-array"),
+ unserialize: require("./unserialize"),
+ validateArrayLike: require("./validate-array-like"),
+ validateArrayLikeObject: require("./validate-array-like-object"),
+ validCallable: require("./valid-callable"),
+ validObject: require("./valid-object"),
+ validateStringifiable: require("./validate-stringifiable"),
+ validateStringifiableValue: require("./validate-stringifiable-value"),
+ validValue: require("./valid-value")
+};
diff --git a/node_modules/es5-ext/object/is-array-like.js b/node_modules/es5-ext/object/is-array-like.js
new file mode 100644
index 0000000..fcb9115
--- /dev/null
+++ b/node_modules/es5-ext/object/is-array-like.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var isFunction = require("../function/is-function")
+ , isObject = require("./is-object")
+ , isValue = require("./is-value");
+
+module.exports = function (value) {
+ return (
+ (isValue(value) &&
+ typeof value.length === "number" &&
+ // Just checking ((typeof x === 'object') && (typeof x !== 'function'))
+ // won't work right for some cases, e.g.:
+ // type of instance of NodeList in Safari is a 'function'
+ ((isObject(value) && !isFunction(value)) || typeof value === "string")) ||
+ false
+ );
+};
diff --git a/node_modules/es5-ext/object/is-callable.js b/node_modules/es5-ext/object/is-callable.js
new file mode 100644
index 0000000..927e5e8
--- /dev/null
+++ b/node_modules/es5-ext/object/is-callable.js
@@ -0,0 +1,5 @@
+// Deprecated
+
+"use strict";
+
+module.exports = function (obj) { return typeof obj === "function"; };
diff --git a/node_modules/es5-ext/object/is-copy-deep.js b/node_modules/es5-ext/object/is-copy-deep.js
new file mode 100644
index 0000000..a1206ae
--- /dev/null
+++ b/node_modules/es5-ext/object/is-copy-deep.js
@@ -0,0 +1,59 @@
+"use strict";
+
+var eq = require("./eq")
+ , isPlainObject = require("./is-plain-object")
+ , value = require("./valid-value");
+
+var isArray = Array.isArray
+ , keys = Object.keys
+ , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable
+ , objHasOwnProperty = Object.prototype.hasOwnProperty
+ , eqArr
+ , eqVal
+ , eqObj;
+
+eqArr = function (arr1, arr2, recMap) {
+ var i, length = arr1.length;
+ if (length !== arr2.length) return false;
+ for (i = 0; i < length; ++i) {
+ if (objHasOwnProperty.call(arr1, i) !== objHasOwnProperty.call(arr2, i)) return false;
+ if (!eqVal(arr1[i], arr2[i], recMap)) return false;
+ }
+ return true;
+};
+
+eqObj = function (obj1, obj2, recMap) {
+ var k1 = keys(obj1), k2 = keys(obj2);
+ if (k1.length !== k2.length) return false;
+ return k1.every(function (key) {
+ if (!objPropertyIsEnumerable.call(obj2, key)) return false;
+ return eqVal(obj1[key], obj2[key], recMap);
+ });
+};
+
+eqVal = function (val1, val2, recMap) {
+ var i, eqX, c1, c2;
+ if (eq(val1, val2)) return true;
+ if (isPlainObject(val1)) {
+ if (!isPlainObject(val2)) return false;
+ eqX = eqObj;
+ } else if (isArray(val1) && isArray(val2)) {
+ eqX = eqArr;
+ } else {
+ return false;
+ }
+ c1 = recMap[0];
+ c2 = recMap[1];
+ i = c1.indexOf(val1);
+ if (i === -1) {
+ i = c1.push(val1) - 1;
+ c2[i] = [];
+ } else if (c2[i].indexOf(val2) !== -1) return true;
+ c2[i].push(val2);
+ return eqX(val1, val2, recMap);
+};
+
+module.exports = function (val1, val2) {
+ if (eq(value(val1), value(val2))) return true;
+ return eqVal(Object(val1), Object(val2), [[], []]);
+};
diff --git a/node_modules/es5-ext/object/is-copy.js b/node_modules/es5-ext/object/is-copy.js
new file mode 100644
index 0000000..8c6ae5e
--- /dev/null
+++ b/node_modules/es5-ext/object/is-copy.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var eq = require("./eq")
+ , value = require("./valid-value")
+ , keys = Object.keys
+ , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+module.exports = function (val1, val2) {
+ var k1, k2;
+
+ if (eq(value(val1), value(val2))) return true;
+
+ val1 = Object(val1);
+ val2 = Object(val2);
+
+ k1 = keys(val1);
+ k2 = keys(val2);
+ if (k1.length !== k2.length) return false;
+ return k1.every(function (key) {
+ if (!objPropertyIsEnumerable.call(val2, key)) return false;
+ return eq(val1[key], val2[key]);
+ });
+};
diff --git a/node_modules/es5-ext/object/is-empty.js b/node_modules/es5-ext/object/is-empty.js
new file mode 100644
index 0000000..dbc52d0
--- /dev/null
+++ b/node_modules/es5-ext/object/is-empty.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var value = require("./valid-value")
+ , objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+module.exports = function (obj) {
+ var i;
+ value(obj);
+ for (i in obj) {
+ // Jslint: ignore
+ if (objPropertyIsEnumerable.call(obj, i)) return false;
+ }
+ return true;
+};
diff --git a/node_modules/es5-ext/object/is-finite-number.js b/node_modules/es5-ext/object/is-finite-number.js
new file mode 100644
index 0000000..e016f8d
--- /dev/null
+++ b/node_modules/es5-ext/object/is-finite-number.js
@@ -0,0 +1,5 @@
+"use strict";
+
+var isNumber = require("./is-number-value");
+
+module.exports = function (value) { return isNumber(value) && isFinite(value); };
diff --git a/node_modules/es5-ext/object/is-integer.js b/node_modules/es5-ext/object/is-integer.js
new file mode 100644
index 0000000..1745b82
--- /dev/null
+++ b/node_modules/es5-ext/object/is-integer.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var isInteger = require("../number/is-integer")
+ , isValue = require("./is-value");
+
+module.exports = function (arg) {
+ if (!isValue(arg)) return false;
+ arg = Number(arg);
+ return isInteger(arg);
+};
diff --git a/node_modules/es5-ext/object/is-natural-number-value.js b/node_modules/es5-ext/object/is-natural-number-value.js
new file mode 100644
index 0000000..c744521
--- /dev/null
+++ b/node_modules/es5-ext/object/is-natural-number-value.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var isNaturalNumber = require("./is-natural-number")
+ , isValue = require("./is-value");
+
+module.exports = function (arg) {
+ if (!isValue(arg)) return false;
+ return isNaturalNumber(arg);
+};
diff --git a/node_modules/es5-ext/object/is-natural-number.js b/node_modules/es5-ext/object/is-natural-number.js
new file mode 100644
index 0000000..3e2c1f5
--- /dev/null
+++ b/node_modules/es5-ext/object/is-natural-number.js
@@ -0,0 +1,5 @@
+"use strict";
+
+var isNatural = require("../number/is-natural");
+
+module.exports = function (arg) { return isNatural(Number(arg)); };
diff --git a/node_modules/es5-ext/object/is-number-value.js b/node_modules/es5-ext/object/is-number-value.js
new file mode 100644
index 0000000..f701bf5
--- /dev/null
+++ b/node_modules/es5-ext/object/is-number-value.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var isValue = require("./is-value");
+
+module.exports = function (value) {
+ if (!isValue(value)) return false;
+ try { return !isNaN(value); }
+ catch (e) { return false; }
+};
diff --git a/node_modules/es5-ext/object/is-object.js b/node_modules/es5-ext/object/is-object.js
new file mode 100644
index 0000000..0e576d7
--- /dev/null
+++ b/node_modules/es5-ext/object/is-object.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var isValue = require("./is-value");
+
+var map = { function: true, object: true };
+
+module.exports = function (value) { return (isValue(value) && map[typeof value]) || false; };
diff --git a/node_modules/es5-ext/object/is-plain-function.js b/node_modules/es5-ext/object/is-plain-function.js
new file mode 100644
index 0000000..a2f3234
--- /dev/null
+++ b/node_modules/es5-ext/object/is-plain-function.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var isClassStr = RegExp.prototype.test.bind(/^\s*class[\s{/}]/)
+ , fnToString = Function.prototype.toString;
+
+module.exports = function (fn) {
+ if (typeof fn !== "function") return false;
+ if (typeof fn.call !== "function") return false;
+ if (typeof fn.apply !== "function") return false;
+ return !isClassStr(fnToString.call(fn));
+};
diff --git a/node_modules/es5-ext/object/is-plain-object.js b/node_modules/es5-ext/object/is-plain-object.js
new file mode 100644
index 0000000..ff15328
--- /dev/null
+++ b/node_modules/es5-ext/object/is-plain-object.js
@@ -0,0 +1,20 @@
+"use strict";
+
+var getPrototypeOf = Object.getPrototypeOf
+ , prototype = Object.prototype
+ , objToString = prototype.toString
+ , id = Object().toString();
+
+module.exports = function (value) {
+ var proto, valueConstructor;
+ if (!value || typeof value !== "object" || objToString.call(value) !== id) {
+ return false;
+ }
+ proto = getPrototypeOf(value);
+ if (proto === null) {
+ valueConstructor = value.constructor;
+ if (typeof valueConstructor !== "function") return true;
+ return valueConstructor.prototype !== value;
+ }
+ return proto === prototype || getPrototypeOf(proto) === null;
+};
diff --git a/node_modules/es5-ext/object/is-promise.js b/node_modules/es5-ext/object/is-promise.js
new file mode 100644
index 0000000..33d6df1
--- /dev/null
+++ b/node_modules/es5-ext/object/is-promise.js
@@ -0,0 +1,4 @@
+"use strict";
+
+// In next major this check will also confirm on promise constructor
+module.exports = require("./is-thenable");
diff --git a/node_modules/es5-ext/object/is-thenable.js b/node_modules/es5-ext/object/is-thenable.js
new file mode 100644
index 0000000..06db0fd
--- /dev/null
+++ b/node_modules/es5-ext/object/is-thenable.js
@@ -0,0 +1,6 @@
+"use strict";
+
+var isCallable = require("./is-callable")
+ , isObject = require("./is-object");
+
+module.exports = function (value) { return isObject(value) && isCallable(value.then); };
diff --git a/node_modules/es5-ext/object/is-value.js b/node_modules/es5-ext/object/is-value.js
new file mode 100644
index 0000000..4ee3805
--- /dev/null
+++ b/node_modules/es5-ext/object/is-value.js
@@ -0,0 +1,5 @@
+"use strict";
+
+var _undefined = require("../function/noop")(); // Support ES3 engines
+
+module.exports = function (val) { return val !== _undefined && val !== null; };
diff --git a/node_modules/es5-ext/object/is.js b/node_modules/es5-ext/object/is.js
new file mode 100644
index 0000000..54baade
--- /dev/null
+++ b/node_modules/es5-ext/object/is.js
@@ -0,0 +1,10 @@
+// Implementation credits go to:
+// http://wiki.ecmascript.org/doku.php?id=harmony:egal
+
+"use strict";
+
+var numIsNaN = require("../number/is-nan");
+
+module.exports = function (val1, val2) {
+ return val1 === val2 ? val1 !== 0 || 1 / val1 === 1 / val2 : numIsNaN(val1) && numIsNaN(val2);
+};
diff --git a/node_modules/es5-ext/object/key-of.js b/node_modules/es5-ext/object/key-of.js
new file mode 100644
index 0000000..dc640e4
--- /dev/null
+++ b/node_modules/es5-ext/object/key-of.js
@@ -0,0 +1,17 @@
+"use strict";
+
+var eq = require("./eq")
+ , some = require("./some");
+
+module.exports = function (obj, searchValue) {
+ var result;
+ return some(obj, function (value, name) {
+ if (eq(value, searchValue)) {
+ result = name;
+ return true;
+ }
+ return false;
+ })
+ ? result
+ : null;
+};
diff --git a/node_modules/es5-ext/object/keys/implement.js b/node_modules/es5-ext/object/keys/implement.js
new file mode 100644
index 0000000..72ecfbd
--- /dev/null
+++ b/node_modules/es5-ext/object/keys/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Object, "keys", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/object/keys/index.js b/node_modules/es5-ext/object/keys/index.js
new file mode 100644
index 0000000..d194227
--- /dev/null
+++ b/node_modules/es5-ext/object/keys/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Object.keys : require("./shim");
diff --git a/node_modules/es5-ext/object/keys/is-implemented.js b/node_modules/es5-ext/object/keys/is-implemented.js
new file mode 100644
index 0000000..2dfcf1b
--- /dev/null
+++ b/node_modules/es5-ext/object/keys/is-implemented.js
@@ -0,0 +1,10 @@
+"use strict";
+
+module.exports = function () {
+ try {
+ Object.keys("primitive");
+ return true;
+ } catch (e) {
+ return false;
+ }
+};
diff --git a/node_modules/es5-ext/object/keys/shim.js b/node_modules/es5-ext/object/keys/shim.js
new file mode 100644
index 0000000..a8908d5
--- /dev/null
+++ b/node_modules/es5-ext/object/keys/shim.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var isValue = require("../is-value");
+
+var keys = Object.keys;
+
+module.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };
diff --git a/node_modules/es5-ext/object/map-keys.js b/node_modules/es5-ext/object/map-keys.js
new file mode 100644
index 0000000..72dada0
--- /dev/null
+++ b/node_modules/es5-ext/object/map-keys.js
@@ -0,0 +1,18 @@
+"use strict";
+
+var callable = require("./valid-callable")
+ , forEach = require("./for-each")
+ , call = Function.prototype.call;
+
+module.exports = function (obj, cb /*, thisArg*/) {
+ var result = {}, thisArg = arguments[2];
+ callable(cb);
+ forEach(
+ obj,
+ function (value, key, targetObj, index) {
+ result[call.call(cb, thisArg, key, value, this, index)] = value;
+ },
+ obj
+ );
+ return result;
+};
diff --git a/node_modules/es5-ext/object/map.js b/node_modules/es5-ext/object/map.js
new file mode 100644
index 0000000..7b718db
--- /dev/null
+++ b/node_modules/es5-ext/object/map.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var callable = require("./valid-callable")
+ , forEach = require("./for-each")
+ , call = Function.prototype.call;
+
+module.exports = function (obj, cb /*, thisArg*/) {
+ var result = {}, thisArg = arguments[2];
+ callable(cb);
+ forEach(obj, function (value, key, targetObj, index) {
+ result[key] = call.call(cb, thisArg, value, key, targetObj, index);
+ });
+ return result;
+};
diff --git a/node_modules/es5-ext/object/mixin-prototypes.js b/node_modules/es5-ext/object/mixin-prototypes.js
new file mode 100644
index 0000000..81e27c7
--- /dev/null
+++ b/node_modules/es5-ext/object/mixin-prototypes.js
@@ -0,0 +1,25 @@
+"use strict";
+
+var value = require("./valid-value")
+ , mixin = require("./mixin");
+
+var getPrototypeOf = Object.getPrototypeOf;
+
+module.exports = function (target, source) {
+ target = Object(value(target));
+ source = Object(value(source));
+ if (target === source) return target;
+
+ var sources = [];
+ while (source && !isPrototypeOf.call(source, target)) {
+ sources.unshift(source);
+ source = getPrototypeOf(source);
+ }
+
+ var error;
+ sources.forEach(function (sourceProto) {
+ try { mixin(target, sourceProto); } catch (mixinError) { error = mixinError; }
+ });
+ if (error) throw error;
+ return target;
+};
diff --git a/node_modules/es5-ext/object/mixin.js b/node_modules/es5-ext/object/mixin.js
new file mode 100644
index 0000000..f5cf9dd
--- /dev/null
+++ b/node_modules/es5-ext/object/mixin.js
@@ -0,0 +1,26 @@
+"use strict";
+
+var value = require("./valid-value")
+ , defineProperty = Object.defineProperty
+ , getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor
+ , getOwnPropertyNames = Object.getOwnPropertyNames
+ , getOwnPropertySymbols = Object.getOwnPropertySymbols;
+
+module.exports = function (target, source) {
+ var error, sourceObject = Object(value(source));
+ target = Object(value(target));
+ getOwnPropertyNames(sourceObject).forEach(function (name) {
+ try {
+ defineProperty(target, name, getOwnPropertyDescriptor(source, name));
+ } catch (e) { error = e; }
+ });
+ if (typeof getOwnPropertySymbols === "function") {
+ getOwnPropertySymbols(sourceObject).forEach(function (symbol) {
+ try {
+ defineProperty(target, symbol, getOwnPropertyDescriptor(source, symbol));
+ } catch (e) { error = e; }
+ });
+ }
+ if (error !== undefined) throw error;
+ return target;
+};
diff --git a/node_modules/es5-ext/object/normalize-options.js b/node_modules/es5-ext/object/normalize-options.js
new file mode 100644
index 0000000..6c394fe
--- /dev/null
+++ b/node_modules/es5-ext/object/normalize-options.js
@@ -0,0 +1,20 @@
+"use strict";
+
+var isValue = require("./is-value");
+
+var forEach = Array.prototype.forEach, create = Object.create;
+
+var process = function (src, obj) {
+ var key;
+ for (key in src) obj[key] = src[key];
+};
+
+// eslint-disable-next-line no-unused-vars
+module.exports = function (opts1 /*, …options*/) {
+ var result = create(null);
+ forEach.call(arguments, function (options) {
+ if (!isValue(options)) return;
+ process(Object(options), result);
+ });
+ return result;
+};
diff --git a/node_modules/es5-ext/object/primitive-set.js b/node_modules/es5-ext/object/primitive-set.js
new file mode 100644
index 0000000..840808d
--- /dev/null
+++ b/node_modules/es5-ext/object/primitive-set.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var forEach = Array.prototype.forEach, create = Object.create;
+
+// eslint-disable-next-line no-unused-vars
+module.exports = function (arg /*, …args*/) {
+ var set = create(null);
+ forEach.call(arguments, function (name) { set[name] = true; });
+ return set;
+};
diff --git a/node_modules/es5-ext/object/safe-traverse.js b/node_modules/es5-ext/object/safe-traverse.js
new file mode 100644
index 0000000..7b72d55
--- /dev/null
+++ b/node_modules/es5-ext/object/safe-traverse.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var value = require("./valid-value")
+ , isValue = require("./is-value");
+
+module.exports = function (obj /*, …names*/) {
+ var length, current = 1;
+ value(obj);
+ length = arguments.length - 1;
+ if (!length) return obj;
+ while (current < length) {
+ obj = obj[arguments[current++]];
+ if (!isValue(obj)) return undefined;
+ }
+ return obj[arguments[current]];
+};
diff --git a/node_modules/es5-ext/object/serialize.js b/node_modules/es5-ext/object/serialize.js
new file mode 100644
index 0000000..ec868c1
--- /dev/null
+++ b/node_modules/es5-ext/object/serialize.js
@@ -0,0 +1,41 @@
+"use strict";
+
+var toArray = require("./to-array")
+ , isDate = require("../date/is-date")
+ , isValue = require("../object/is-value")
+ , isRegExp = require("../reg-exp/is-reg-exp");
+
+var isArray = Array.isArray
+ , stringify = JSON.stringify
+ , objHasOwnProperty = Object.prototype.hasOwnProperty;
+var keyValueToString = function (value, key) {
+ return stringify(key) + ":" + module.exports(value);
+};
+
+var sparseMap = function (arr) {
+ var i, length = arr.length, result = new Array(length);
+ for (i = 0; i < length; ++i) {
+ if (!objHasOwnProperty.call(arr, i)) continue;
+ result[i] = module.exports(arr[i]);
+ }
+ return result;
+};
+
+module.exports = function (obj) {
+ if (!isValue(obj)) return String(obj);
+ switch (typeof obj) {
+ case "string":
+ return stringify(obj);
+ case "number":
+ case "boolean":
+ case "function":
+ return String(obj);
+ case "object":
+ if (isArray(obj)) return "[" + sparseMap(obj) + "]";
+ if (isRegExp(obj)) return String(obj);
+ if (isDate(obj)) return "new Date(" + obj.valueOf() + ")";
+ return "{" + toArray(obj, keyValueToString) + "}";
+ default:
+ throw new TypeError("Serialization of " + String(obj) + "is unsupported");
+ }
+};
diff --git a/node_modules/es5-ext/object/set-prototype-of/implement.js b/node_modules/es5-ext/object/set-prototype-of/implement.js
new file mode 100644
index 0000000..386a300
--- /dev/null
+++ b/node_modules/es5-ext/object/set-prototype-of/implement.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var shim;
+
+if (!require("./is-implemented")() && (shim = require("./shim"))) {
+ Object.defineProperty(Object, "setPrototypeOf", {
+ value: shim,
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/object/set-prototype-of/index.js b/node_modules/es5-ext/object/set-prototype-of/index.js
new file mode 100644
index 0000000..ac07b99
--- /dev/null
+++ b/node_modules/es5-ext/object/set-prototype-of/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Object.setPrototypeOf : require("./shim");
diff --git a/node_modules/es5-ext/object/set-prototype-of/is-implemented.js b/node_modules/es5-ext/object/set-prototype-of/is-implemented.js
new file mode 100644
index 0000000..1a00627
--- /dev/null
+++ b/node_modules/es5-ext/object/set-prototype-of/is-implemented.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var create = Object.create, getPrototypeOf = Object.getPrototypeOf, plainObject = {};
+
+module.exports = function (/* CustomCreate*/) {
+ var setPrototypeOf = Object.setPrototypeOf, customCreate = arguments[0] || create;
+ if (typeof setPrototypeOf !== "function") return false;
+ return getPrototypeOf(setPrototypeOf(customCreate(null), plainObject)) === plainObject;
+};
diff --git a/node_modules/es5-ext/object/set-prototype-of/shim.js b/node_modules/es5-ext/object/set-prototype-of/shim.js
new file mode 100644
index 0000000..97b0b50
--- /dev/null
+++ b/node_modules/es5-ext/object/set-prototype-of/shim.js
@@ -0,0 +1,81 @@
+/* eslint no-proto: "off" */
+
+// Big thanks to @WebReflection for sorting this out
+// https://gist.github.com/WebReflection/5593554
+
+"use strict";
+
+var isObject = require("../is-object")
+ , value = require("../valid-value")
+ , objIsPrototypeOf = Object.prototype.isPrototypeOf
+ , defineProperty = Object.defineProperty
+ , nullDesc = { configurable: true, enumerable: false, writable: true, value: undefined }
+ , validate;
+
+validate = function (obj, prototype) {
+ value(obj);
+ if (prototype === null || isObject(prototype)) return obj;
+ throw new TypeError("Prototype must be null or an object");
+};
+
+module.exports = (function (status) {
+ var fn, set;
+ if (!status) return null;
+ if (status.level === 2) {
+ if (status.set) {
+ set = status.set;
+ fn = function (obj, prototype) {
+ set.call(validate(obj, prototype), prototype);
+ return obj;
+ };
+ } else {
+ fn = function (obj, prototype) {
+ validate(obj, prototype).__proto__ = prototype;
+ return obj;
+ };
+ }
+ } else {
+ fn = function self(obj, prototype) {
+ var isNullBase;
+ validate(obj, prototype);
+ isNullBase = objIsPrototypeOf.call(self.nullPolyfill, obj);
+ if (isNullBase) delete self.nullPolyfill.__proto__;
+ if (prototype === null) prototype = self.nullPolyfill;
+ obj.__proto__ = prototype;
+ if (isNullBase) defineProperty(self.nullPolyfill, "__proto__", nullDesc);
+ return obj;
+ };
+ }
+ return Object.defineProperty(fn, "level", {
+ configurable: false,
+ enumerable: false,
+ writable: false,
+ value: status.level
+ });
+})(
+ (function () {
+ var tmpObj1 = Object.create(null)
+ , tmpObj2 = {}
+ , set
+ , desc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__");
+
+ if (desc) {
+ try {
+ set = desc.set; // Opera crashes at this point
+ set.call(tmpObj1, tmpObj2);
+ } catch (ignore) {}
+ if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { set: set, level: 2 };
+ }
+
+ tmpObj1.__proto__ = tmpObj2;
+ if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { level: 2 };
+
+ tmpObj1 = {};
+ tmpObj1.__proto__ = tmpObj2;
+ if (Object.getPrototypeOf(tmpObj1) === tmpObj2) return { level: 1 };
+
+ return false;
+ })()
+);
+
+require("../create");
diff --git a/node_modules/es5-ext/object/some.js b/node_modules/es5-ext/object/some.js
new file mode 100644
index 0000000..c919466
--- /dev/null
+++ b/node_modules/es5-ext/object/some.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./_iterate")("some", false);
diff --git a/node_modules/es5-ext/object/to-array.js b/node_modules/es5-ext/object/to-array.js
new file mode 100644
index 0000000..8912b45
--- /dev/null
+++ b/node_modules/es5-ext/object/to-array.js
@@ -0,0 +1,21 @@
+"use strict";
+
+var callable = require("./valid-callable")
+ , isValue = require("./is-value")
+ , forEach = require("./for-each")
+ , call = Function.prototype.call
+ , defaultCb = function (value, key) { return [key, value]; };
+
+module.exports = function (obj /*, cb, thisArg, compareFn*/) {
+ var a = [], cb = arguments[1], thisArg = arguments[2];
+ cb = isValue(cb) ? callable(cb) : defaultCb;
+
+ forEach(
+ obj,
+ function (value, key, targetObj, index) {
+ a.push(call.call(cb, thisArg, value, key, this, index));
+ },
+ obj, arguments[3]
+ );
+ return a;
+};
diff --git a/node_modules/es5-ext/object/unserialize.js b/node_modules/es5-ext/object/unserialize.js
new file mode 100644
index 0000000..f62ea78
--- /dev/null
+++ b/node_modules/es5-ext/object/unserialize.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var value = require("./valid-value");
+
+module.exports = function (code) {
+ // eslint-disable-next-line no-new-func
+ return new Function("return " + value(code))();
+};
diff --git a/node_modules/es5-ext/object/valid-callable.js b/node_modules/es5-ext/object/valid-callable.js
new file mode 100644
index 0000000..a97fb3e
--- /dev/null
+++ b/node_modules/es5-ext/object/valid-callable.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = function (fn) {
+ if (typeof fn !== "function") throw new TypeError(fn + " is not a function");
+ return fn;
+};
diff --git a/node_modules/es5-ext/object/valid-object.js b/node_modules/es5-ext/object/valid-object.js
new file mode 100644
index 0000000..74b5e5f
--- /dev/null
+++ b/node_modules/es5-ext/object/valid-object.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isObject = require("./is-object");
+
+module.exports = function (value) {
+ if (!isObject(value)) throw new TypeError(value + " is not an Object");
+ return value;
+};
diff --git a/node_modules/es5-ext/object/valid-value.js b/node_modules/es5-ext/object/valid-value.js
new file mode 100644
index 0000000..d0ced8a
--- /dev/null
+++ b/node_modules/es5-ext/object/valid-value.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isValue = require("./is-value");
+
+module.exports = function (value) {
+ if (!isValue(value)) throw new TypeError("Cannot use null or undefined");
+ return value;
+};
diff --git a/node_modules/es5-ext/object/validate-array-like-object.js b/node_modules/es5-ext/object/validate-array-like-object.js
new file mode 100644
index 0000000..d7c45b3
--- /dev/null
+++ b/node_modules/es5-ext/object/validate-array-like-object.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var isArrayLike = require("./is-array-like")
+ , isObject = require("./is-object");
+
+module.exports = function (obj) {
+ if (isObject(obj) && isArrayLike(obj)) return obj;
+ throw new TypeError(obj + " is not array-like object");
+};
diff --git a/node_modules/es5-ext/object/validate-array-like.js b/node_modules/es5-ext/object/validate-array-like.js
new file mode 100644
index 0000000..07aa794
--- /dev/null
+++ b/node_modules/es5-ext/object/validate-array-like.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isArrayLike = require("./is-array-like");
+
+module.exports = function (obj) {
+ if (isArrayLike(obj)) return obj;
+ throw new TypeError(obj + " is not array-like value");
+};
diff --git a/node_modules/es5-ext/object/validate-stringifiable-value.js b/node_modules/es5-ext/object/validate-stringifiable-value.js
new file mode 100644
index 0000000..b58f18c
--- /dev/null
+++ b/node_modules/es5-ext/object/validate-stringifiable-value.js
@@ -0,0 +1,6 @@
+"use strict";
+
+var ensureValue = require("./valid-value")
+ , stringifiable = require("./validate-stringifiable");
+
+module.exports = function (value) { return stringifiable(ensureValue(value)); };
diff --git a/node_modules/es5-ext/object/validate-stringifiable.js b/node_modules/es5-ext/object/validate-stringifiable.js
new file mode 100644
index 0000000..2b1f127
--- /dev/null
+++ b/node_modules/es5-ext/object/validate-stringifiable.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var isCallable = require("./is-callable");
+
+module.exports = function (stringifiable) {
+ try {
+ if (stringifiable && isCallable(stringifiable.toString)) return stringifiable.toString();
+ return String(stringifiable);
+ } catch (e) {
+ throw new TypeError("Passed argument cannot be stringifed");
+ }
+};
diff --git a/node_modules/es5-ext/optional-chaining.js b/node_modules/es5-ext/optional-chaining.js
new file mode 100644
index 0000000..f181127
--- /dev/null
+++ b/node_modules/es5-ext/optional-chaining.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var isValue = require("./object/is-value");
+
+var slice = Array.prototype.slice;
+
+// eslint-disable-next-line no-unused-vars
+module.exports = function (value, propertyName1 /*, …propertyNamen*/) {
+ var propertyNames = slice.call(arguments, 1), index = 0, length = propertyNames.length;
+ while (isValue(value) && index < length) value = value[propertyNames[index++]];
+ return index === length ? value : undefined;
+};
diff --git a/node_modules/es5-ext/package.json b/node_modules/es5-ext/package.json
new file mode 100644
index 0000000..b91b917
--- /dev/null
+++ b/node_modules/es5-ext/package.json
@@ -0,0 +1,126 @@
+{
+ "name": "es5-ext",
+ "version": "0.10.62",
+ "description": "ECMAScript extensions and shims",
+ "author": "Mariusz Nowak (http://www.medikoo.com/)",
+ "keywords": [
+ "ecmascript",
+ "ecmascript5",
+ "ecmascript6",
+ "es5",
+ "es6",
+ "extensions",
+ "ext",
+ "addons",
+ "extras",
+ "harmony",
+ "javascript",
+ "polyfill",
+ "shim",
+ "util",
+ "utils",
+ "utilities"
+ ],
+ "repository": "medikoo/es5-ext",
+ "dependencies": {
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.3",
+ "next-tick": "^1.1.0"
+ },
+ "devDependencies": {
+ "eslint": "^8.13.0",
+ "eslint-config-medikoo": "^4.1.2",
+ "git-list-updated": "^1.2.1",
+ "github-release-from-cc-changelog": "^2.3.0",
+ "husky": "^4.3.8",
+ "lint-staged": "^12.3.8",
+ "nyc": "^15.1.0",
+ "plain-promise": "^0.1.1",
+ "prettier-elastic": "^2.2.1",
+ "tad": "^3.1.0"
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "lint-staged": {
+ "*.js": [
+ "eslint"
+ ],
+ "*.{css,html,js,json,md,yaml,yml}": [
+ "prettier -c"
+ ]
+ },
+ "eslintConfig": {
+ "extends": "medikoo/es5",
+ "root": true,
+ "rules": {
+ "no-extend-native": "off"
+ },
+ "overrides": [
+ {
+ "files": "global.js",
+ "globals": {
+ "__global__": true,
+ "globalThis": true,
+ "self": true,
+ "window": true
+ },
+ "rules": {
+ "strict": "off"
+ }
+ },
+ {
+ "files": "_postinstall.js",
+ "env": {
+ "node": true
+ }
+ }
+ ]
+ },
+ "prettier": {
+ "printWidth": 100,
+ "tabWidth": 4,
+ "overrides": [
+ {
+ "files": [
+ "*.md",
+ "*.yml"
+ ],
+ "options": {
+ "tabWidth": 2
+ }
+ }
+ ]
+ },
+ "nyc": {
+ "all": true,
+ "exclude": [
+ ".github",
+ "coverage/**",
+ "test/**",
+ "*.config.js"
+ ],
+ "reporter": [
+ "lcov",
+ "html",
+ "text-summary"
+ ]
+ },
+ "scripts": {
+ "coverage": "nyc npm test",
+ "lint": "eslint --ignore-path=.gitignore .",
+ "lint:updated": "pipe-git-updated --base=main --ext=js -- eslint --ignore-pattern '!*'",
+ "postinstall": " node -e \"try{require('./_postinstall')}catch(e){}\" || exit 0",
+ "prettier-check": "prettier -c --ignore-path .gitignore \"**/*.{css,html,js,json,md,yaml,yml}\"",
+ "prettier-check:updated": "pipe-git-updated --base=main --ext=css --ext=html --ext=js --ext=json --ext=md --ext=yaml --ext=yml -- prettier -c",
+ "prettify": "prettier --write --ignore-path .gitignore \"**/*.{css,html,js,json,md,yaml,yml}\"",
+ "prettify:updated": "pipe-git-updated ---base=main -ext=css --ext=html --ext=js --ext=json --ext=md --ext=yaml --ext=yml -- prettier --write",
+ "test": "node ./node_modules/tad/bin/tad"
+ },
+ "engines": {
+ "node": ">=0.10"
+ },
+ "license": "ISC"
+}
diff --git a/node_modules/es5-ext/promise/#/as-callback.js b/node_modules/es5-ext/promise/#/as-callback.js
new file mode 100644
index 0000000..ba310b3
--- /dev/null
+++ b/node_modules/es5-ext/promise/#/as-callback.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var ensurePlainFunction = require("../../object/ensure-plain-function")
+ , ensureThenable = require("../../object/ensure-thenable")
+ , microtaskDelay = require("../../function/#/microtask-delay");
+
+module.exports = function (callback) {
+ ensureThenable(this);
+ ensurePlainFunction(callback);
+ // Rely on microtaskDelay to escape eventual error swallowing
+ this.then(
+ microtaskDelay.call(function (value) { callback(null, value); }),
+ microtaskDelay.call(function (reason) { callback(reason); })
+ );
+};
diff --git a/node_modules/es5-ext/promise/#/finally/implement.js b/node_modules/es5-ext/promise/#/finally/implement.js
new file mode 100644
index 0000000..77592b3
--- /dev/null
+++ b/node_modules/es5-ext/promise/#/finally/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Promise.prototype, "finally", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/promise/#/finally/index.js b/node_modules/es5-ext/promise/#/finally/index.js
new file mode 100644
index 0000000..f6bb447
--- /dev/null
+++ b/node_modules/es5-ext/promise/#/finally/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Promise.prototype.finally : require("./shim");
diff --git a/node_modules/es5-ext/promise/#/finally/is-implemented.js b/node_modules/es5-ext/promise/#/finally/is-implemented.js
new file mode 100644
index 0000000..0534ce6
--- /dev/null
+++ b/node_modules/es5-ext/promise/#/finally/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ if (typeof Promise !== "function") return false;
+ if (typeof Promise.prototype.finally !== "function") return false;
+ return true;
+};
diff --git a/node_modules/es5-ext/promise/#/finally/shim.js b/node_modules/es5-ext/promise/#/finally/shim.js
new file mode 100644
index 0000000..f29f5b3
--- /dev/null
+++ b/node_modules/es5-ext/promise/#/finally/shim.js
@@ -0,0 +1,24 @@
+"use strict";
+
+var ensurePlainFunction = require("../../../object/ensure-plain-function")
+ , isThenable = require("../../../object/is-thenable")
+ , ensureThenable = require("../../../object/ensure-thenable");
+
+var resolveCallback = function (callback, next) {
+ var callbackResult = callback();
+ if (!isThenable(callbackResult)) return next();
+ return callbackResult.then(next);
+};
+
+module.exports = function (callback) {
+ ensureThenable(this);
+ ensurePlainFunction(callback);
+ return this.then(
+ function (result) {
+ return resolveCallback(callback, function () { return result; });
+ },
+ function (error) {
+ return resolveCallback(callback, function () { throw error; });
+ }
+ );
+};
diff --git a/node_modules/es5-ext/promise/#/index.js b/node_modules/es5-ext/promise/#/index.js
new file mode 100644
index 0000000..4601803
--- /dev/null
+++ b/node_modules/es5-ext/promise/#/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = { asCallback: require("./as-callback"), finally: require("./finally") };
diff --git a/node_modules/es5-ext/promise/.eslintrc.json b/node_modules/es5-ext/promise/.eslintrc.json
new file mode 100644
index 0000000..0d86fe7
--- /dev/null
+++ b/node_modules/es5-ext/promise/.eslintrc.json
@@ -0,0 +1 @@
+{ "globals": { "Promise": true } }
diff --git a/node_modules/es5-ext/promise/index.js b/node_modules/es5-ext/promise/index.js
new file mode 100644
index 0000000..6aa66bb
--- /dev/null
+++ b/node_modules/es5-ext/promise/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = { "#": require("./#"), "lazy": require("./lazy") };
diff --git a/node_modules/es5-ext/promise/lazy.js b/node_modules/es5-ext/promise/lazy.js
new file mode 100644
index 0000000..ad97a53
--- /dev/null
+++ b/node_modules/es5-ext/promise/lazy.js
@@ -0,0 +1,35 @@
+"use strict";
+
+var isFunction = require("../function/is-function");
+
+module.exports = function (executor) {
+ var Constructor;
+ if (isFunction(this)) {
+ Constructor = this;
+ } else if (typeof Promise === "function") {
+ Constructor = Promise;
+ } else {
+ throw new TypeError("Could not resolve Promise constuctor");
+ }
+
+ var lazyThen;
+ var promise = new Constructor(function (resolve, reject) {
+ lazyThen = function (onSuccess, onFailure) {
+ if (!hasOwnProperty.call(this, "then")) {
+ // Sanity check
+ throw new Error("Unexpected (inherited) lazy then invocation");
+ }
+
+ try { executor(resolve, reject); }
+ catch (reason) { reject(reason); }
+ delete this.then;
+ return this.then(onSuccess, onFailure);
+ };
+ });
+
+ return Object.defineProperty(promise, "then", {
+ configurable: true,
+ writable: true,
+ value: lazyThen
+ });
+};
diff --git a/node_modules/es5-ext/reg-exp/#/index.js b/node_modules/es5-ext/reg-exp/#/index.js
new file mode 100644
index 0000000..9b098e0
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/index.js
@@ -0,0 +1,10 @@
+"use strict";
+
+module.exports = {
+ isSticky: require("./is-sticky"),
+ isUnicode: require("./is-unicode"),
+ match: require("./match"),
+ replace: require("./replace"),
+ search: require("./search"),
+ split: require("./split")
+};
diff --git a/node_modules/es5-ext/reg-exp/#/is-sticky.js b/node_modules/es5-ext/reg-exp/#/is-sticky.js
new file mode 100644
index 0000000..6e99533
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/is-sticky.js
@@ -0,0 +1,6 @@
+"use strict";
+
+var validRegExp = require("../valid-reg-exp")
+ , re = /\/[a-xz]*y[a-xz]*$/;
+
+module.exports = function () { return Boolean(String(validRegExp(this)).match(re)); };
diff --git a/node_modules/es5-ext/reg-exp/#/is-unicode.js b/node_modules/es5-ext/reg-exp/#/is-unicode.js
new file mode 100644
index 0000000..63a457f
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/is-unicode.js
@@ -0,0 +1,6 @@
+"use strict";
+
+var validRegExp = require("../valid-reg-exp")
+ , re = /\/[a-xz]*u[a-xz]*$/;
+
+module.exports = function () { return Boolean(String(validRegExp(this)).match(re)); };
diff --git a/node_modules/es5-ext/reg-exp/#/match/implement.js b/node_modules/es5-ext/reg-exp/#/match/implement.js
new file mode 100644
index 0000000..68dcd55
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/match/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(RegExp.prototype, "match", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/reg-exp/#/match/index.js b/node_modules/es5-ext/reg-exp/#/match/index.js
new file mode 100644
index 0000000..4b33296
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/match/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? RegExp.prototype.match : require("./shim");
diff --git a/node_modules/es5-ext/reg-exp/#/match/is-implemented.js b/node_modules/es5-ext/reg-exp/#/match/is-implemented.js
new file mode 100644
index 0000000..a5065fc
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/match/is-implemented.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var re = /foo/;
+
+module.exports = function () {
+ if (typeof re.match !== "function") return false;
+ return re.match("barfoobar") && !re.match("elo");
+};
diff --git a/node_modules/es5-ext/reg-exp/#/match/shim.js b/node_modules/es5-ext/reg-exp/#/match/shim.js
new file mode 100644
index 0000000..2955821
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/match/shim.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var validRegExp = require("../../valid-reg-exp");
+
+module.exports = function (string) {
+ validRegExp(this);
+ return String(string).match(this);
+};
diff --git a/node_modules/es5-ext/reg-exp/#/replace/implement.js b/node_modules/es5-ext/reg-exp/#/replace/implement.js
new file mode 100644
index 0000000..f990c4f
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/replace/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(RegExp.prototype, "replace", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/reg-exp/#/replace/index.js b/node_modules/es5-ext/reg-exp/#/replace/index.js
new file mode 100644
index 0000000..be54b52
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/replace/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? RegExp.prototype.replace : require("./shim");
diff --git a/node_modules/es5-ext/reg-exp/#/replace/is-implemented.js b/node_modules/es5-ext/reg-exp/#/replace/is-implemented.js
new file mode 100644
index 0000000..0a2e7c2
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/replace/is-implemented.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var re = /foo/;
+
+module.exports = function () {
+ if (typeof re.replace !== "function") return false;
+ return re.replace("foobar", "mar") === "marbar";
+};
diff --git a/node_modules/es5-ext/reg-exp/#/replace/shim.js b/node_modules/es5-ext/reg-exp/#/replace/shim.js
new file mode 100644
index 0000000..66f5d5b
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/replace/shim.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var validRegExp = require("../../valid-reg-exp");
+
+module.exports = function (string, replaceValue) {
+ validRegExp(this);
+ return String(string).replace(this, replaceValue);
+};
diff --git a/node_modules/es5-ext/reg-exp/#/search/implement.js b/node_modules/es5-ext/reg-exp/#/search/implement.js
new file mode 100644
index 0000000..df4a337
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/search/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(RegExp.prototype, "search", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/reg-exp/#/search/index.js b/node_modules/es5-ext/reg-exp/#/search/index.js
new file mode 100644
index 0000000..25ca76a
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/search/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? RegExp.prototype.search : require("./shim");
diff --git a/node_modules/es5-ext/reg-exp/#/search/is-implemented.js b/node_modules/es5-ext/reg-exp/#/search/is-implemented.js
new file mode 100644
index 0000000..7f38669
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/search/is-implemented.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var re = /foo/;
+
+module.exports = function () {
+ if (typeof re.search !== "function") return false;
+ return re.search("barfoo") === 3;
+};
diff --git a/node_modules/es5-ext/reg-exp/#/search/shim.js b/node_modules/es5-ext/reg-exp/#/search/shim.js
new file mode 100644
index 0000000..c97a787
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/search/shim.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var validRegExp = require("../../valid-reg-exp");
+
+module.exports = function (string) {
+ validRegExp(this);
+ return String(string).search(this);
+};
diff --git a/node_modules/es5-ext/reg-exp/#/split/implement.js b/node_modules/es5-ext/reg-exp/#/split/implement.js
new file mode 100644
index 0000000..b979db0
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/split/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(RegExp.prototype, "split", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/reg-exp/#/split/index.js b/node_modules/es5-ext/reg-exp/#/split/index.js
new file mode 100644
index 0000000..6d4f177
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/split/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? RegExp.prototype.split : require("./shim");
diff --git a/node_modules/es5-ext/reg-exp/#/split/is-implemented.js b/node_modules/es5-ext/reg-exp/#/split/is-implemented.js
new file mode 100644
index 0000000..90fca0c
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/split/is-implemented.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var re = /\|/;
+
+module.exports = function () {
+ if (typeof re.split !== "function") return false;
+ return re.split("bar|foo")[1] === "foo";
+};
diff --git a/node_modules/es5-ext/reg-exp/#/split/shim.js b/node_modules/es5-ext/reg-exp/#/split/shim.js
new file mode 100644
index 0000000..c9c73cc
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/split/shim.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var validRegExp = require("../../valid-reg-exp");
+
+module.exports = function (string) {
+ validRegExp(this);
+ return String(string).split(this);
+};
diff --git a/node_modules/es5-ext/reg-exp/#/sticky/implement.js b/node_modules/es5-ext/reg-exp/#/sticky/implement.js
new file mode 100644
index 0000000..7864c6c
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/sticky/implement.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var isSticky = require("../is-sticky");
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(RegExp.prototype, "sticky", {
+ configurable: true,
+ enumerable: false,
+ get: isSticky
+ });
+}
diff --git a/node_modules/es5-ext/reg-exp/#/sticky/is-implemented.js b/node_modules/es5-ext/reg-exp/#/sticky/is-implemented.js
new file mode 100644
index 0000000..a1ade11
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/sticky/is-implemented.js
@@ -0,0 +1,10 @@
+"use strict";
+
+module.exports = function () {
+ var dummyRegExp = /a/;
+ // We need to do check on instance and not on prototype due to how ES2015 spec evolved:
+ // https://github.com/tc39/ecma262/issues/262
+ // https://github.com/tc39/ecma262/pull/263
+ // https://bugs.chromium.org/p/v8/issues/detail?id=4617
+ return "sticky" in dummyRegExp;
+};
diff --git a/node_modules/es5-ext/reg-exp/#/unicode/implement.js b/node_modules/es5-ext/reg-exp/#/unicode/implement.js
new file mode 100644
index 0000000..8b99be5
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/unicode/implement.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var isUnicode = require("../is-unicode");
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(RegExp.prototype, "unicode", {
+ configurable: true,
+ enumerable: false,
+ get: isUnicode
+ });
+}
diff --git a/node_modules/es5-ext/reg-exp/#/unicode/is-implemented.js b/node_modules/es5-ext/reg-exp/#/unicode/is-implemented.js
new file mode 100644
index 0000000..48605d7
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/#/unicode/is-implemented.js
@@ -0,0 +1,10 @@
+"use strict";
+
+module.exports = function () {
+ var dummyRegExp = /a/;
+ // We need to do check on instance and not on prototype due to how ES2015 spec evolved:
+ // https://github.com/tc39/ecma262/issues/262
+ // https://github.com/tc39/ecma262/pull/263
+ // https://bugs.chromium.org/p/v8/issues/detail?id=4617
+ return "unicode" in dummyRegExp;
+};
diff --git a/node_modules/es5-ext/reg-exp/escape.js b/node_modules/es5-ext/reg-exp/escape.js
new file mode 100644
index 0000000..b65b351
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/escape.js
@@ -0,0 +1,9 @@
+// Thanks to Andrew Clover:
+// http://stackoverflow.com/questions/3561493
+// /is-there-a-regexp-escape-function-in-javascript
+
+"use strict";
+
+var re = /[-/\\^$*+?.()|[\]{}]/g;
+
+module.exports = function (str) { return String(str).replace(re, "\\$&"); };
diff --git a/node_modules/es5-ext/reg-exp/index.js b/node_modules/es5-ext/reg-exp/index.js
new file mode 100644
index 0000000..f023fe0
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/index.js
@@ -0,0 +1,8 @@
+"use strict";
+
+module.exports = {
+ "#": require("./#"),
+ "escape": require("./escape"),
+ "isRegExp": require("./is-reg-exp"),
+ "validRegExp": require("./valid-reg-exp")
+};
diff --git a/node_modules/es5-ext/reg-exp/is-reg-exp.js b/node_modules/es5-ext/reg-exp/is-reg-exp.js
new file mode 100644
index 0000000..b966b0f
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/is-reg-exp.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var objToString = Object.prototype.toString, id = objToString.call(/a/);
+
+module.exports = function (value) {
+ return (value && (value instanceof RegExp || objToString.call(value) === id)) || false;
+};
diff --git a/node_modules/es5-ext/reg-exp/valid-reg-exp.js b/node_modules/es5-ext/reg-exp/valid-reg-exp.js
new file mode 100644
index 0000000..a05927a
--- /dev/null
+++ b/node_modules/es5-ext/reg-exp/valid-reg-exp.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isRegExp = require("./is-reg-exp");
+
+module.exports = function (value) {
+ if (!isRegExp(value)) throw new TypeError(value + " is not a RegExp object");
+ return value;
+};
diff --git a/node_modules/es5-ext/safe-to-string.js b/node_modules/es5-ext/safe-to-string.js
new file mode 100644
index 0000000..f49a238
--- /dev/null
+++ b/node_modules/es5-ext/safe-to-string.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var isCallable = require("./object/is-callable");
+
+module.exports = function (value) {
+ try {
+ if (value && isCallable(value.toString)) return value.toString();
+ return String(value);
+ } catch (e) {
+ return "";
+ }
+};
diff --git a/node_modules/es5-ext/string/#/@@iterator/implement.js b/node_modules/es5-ext/string/#/@@iterator/implement.js
new file mode 100644
index 0000000..b51ad9f
--- /dev/null
+++ b/node_modules/es5-ext/string/#/@@iterator/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(String.prototype, require("es6-symbol").iterator, {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/string/#/@@iterator/index.js b/node_modules/es5-ext/string/#/@@iterator/index.js
new file mode 100644
index 0000000..4572443
--- /dev/null
+++ b/node_modules/es5-ext/string/#/@@iterator/index.js
@@ -0,0 +1,5 @@
+"use strict";
+
+module.exports = require("./is-implemented")()
+ ? String.prototype[require("es6-symbol").iterator]
+ : require("./shim");
diff --git a/node_modules/es5-ext/string/#/@@iterator/is-implemented.js b/node_modules/es5-ext/string/#/@@iterator/is-implemented.js
new file mode 100644
index 0000000..bb8a8d6
--- /dev/null
+++ b/node_modules/es5-ext/string/#/@@iterator/is-implemented.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var iteratorSymbol = require("es6-symbol").iterator;
+
+module.exports = function () {
+ var str = "🙈f", iterator, result;
+ if (typeof str[iteratorSymbol] !== "function") return false;
+ iterator = str[iteratorSymbol]();
+ if (!iterator) return false;
+ if (typeof iterator.next !== "function") return false;
+ result = iterator.next();
+ if (!result) return false;
+ if (result.value !== "🙈") return false;
+ if (result.done !== false) return false;
+ return true;
+};
diff --git a/node_modules/es5-ext/string/#/@@iterator/shim.js b/node_modules/es5-ext/string/#/@@iterator/shim.js
new file mode 100644
index 0000000..2160619
--- /dev/null
+++ b/node_modules/es5-ext/string/#/@@iterator/shim.js
@@ -0,0 +1,6 @@
+"use strict";
+
+var StringIterator = require("es6-iterator/string")
+ , value = require("../../../object/valid-value");
+
+module.exports = function () { return new StringIterator(value(this)); };
diff --git a/node_modules/es5-ext/string/#/at.js b/node_modules/es5-ext/string/#/at.js
new file mode 100644
index 0000000..a8c2917
--- /dev/null
+++ b/node_modules/es5-ext/string/#/at.js
@@ -0,0 +1,35 @@
+// Based on: https://github.com/mathiasbynens/String.prototype.at
+// Thanks @mathiasbynens !
+
+"use strict";
+
+var toInteger = require("../../number/to-integer")
+ , validValue = require("../../object/valid-value");
+
+module.exports = function (pos) {
+ var str = String(validValue(this)), size = str.length, cuFirst, cuSecond, nextPos, len;
+ pos = toInteger(pos);
+
+ // Account for out-of-bounds indices
+ // The odd lower bound is because the ToInteger operation is
+ // going to round `n` to `0` for `-1 < n <= 0`.
+ if (pos <= -1 || pos >= size) return "";
+
+ // Second half of `ToInteger`
+ // eslint-disable-next-line no-bitwise
+ pos |= 0;
+ // Get the first code unit and code unit value
+ cuFirst = str.charCodeAt(pos);
+ nextPos = pos + 1;
+ len = 1;
+ if (
+ // Check if it’s the start of a surrogate pair
+ cuFirst >= 0xd800 &&
+ cuFirst <= 0xdbff && // High surrogate
+ size > nextPos // There is a next code unit
+ ) {
+ cuSecond = str.charCodeAt(nextPos);
+ if (cuSecond >= 0xdc00 && cuSecond <= 0xdfff) len = 2; // Low surrogate
+ }
+ return str.slice(pos, pos + len);
+};
diff --git a/node_modules/es5-ext/string/#/camel-to-hyphen.js b/node_modules/es5-ext/string/#/camel-to-hyphen.js
new file mode 100644
index 0000000..5add3ed
--- /dev/null
+++ b/node_modules/es5-ext/string/#/camel-to-hyphen.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var replace = String.prototype.replace, re = /([A-Z])/g;
+
+module.exports = function () {
+ var str = replace.call(this, re, "-$1").toLowerCase();
+ if (str[0] === "-") str = str.slice(1);
+ return str;
+};
diff --git a/node_modules/es5-ext/string/#/capitalize.js b/node_modules/es5-ext/string/#/capitalize.js
new file mode 100644
index 0000000..fc92a9f
--- /dev/null
+++ b/node_modules/es5-ext/string/#/capitalize.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var value = require("../../object/valid-value");
+
+module.exports = function () {
+ var str = String(value(this));
+ return str.charAt(0).toUpperCase() + str.slice(1);
+};
diff --git a/node_modules/es5-ext/string/#/case-insensitive-compare.js b/node_modules/es5-ext/string/#/case-insensitive-compare.js
new file mode 100644
index 0000000..5d961a5
--- /dev/null
+++ b/node_modules/es5-ext/string/#/case-insensitive-compare.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var toLowerCase = String.prototype.toLowerCase;
+
+module.exports = function (other) {
+ return toLowerCase.call(this).localeCompare(toLowerCase.call(String(other)));
+};
diff --git a/node_modules/es5-ext/string/#/code-point-at/implement.js b/node_modules/es5-ext/string/#/code-point-at/implement.js
new file mode 100644
index 0000000..25752f9
--- /dev/null
+++ b/node_modules/es5-ext/string/#/code-point-at/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(String.prototype, "codePointAt", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/string/#/code-point-at/index.js b/node_modules/es5-ext/string/#/code-point-at/index.js
new file mode 100644
index 0000000..0a22f84
--- /dev/null
+++ b/node_modules/es5-ext/string/#/code-point-at/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? String.prototype.codePointAt : require("./shim");
diff --git a/node_modules/es5-ext/string/#/code-point-at/is-implemented.js b/node_modules/es5-ext/string/#/code-point-at/is-implemented.js
new file mode 100644
index 0000000..47e4c93
--- /dev/null
+++ b/node_modules/es5-ext/string/#/code-point-at/is-implemented.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var str = "abc\uD834\uDF06def";
+
+module.exports = function () {
+ if (typeof str.codePointAt !== "function") return false;
+ return str.codePointAt(3) === 0x1d306;
+};
diff --git a/node_modules/es5-ext/string/#/code-point-at/shim.js b/node_modules/es5-ext/string/#/code-point-at/shim.js
new file mode 100644
index 0000000..0f331c3
--- /dev/null
+++ b/node_modules/es5-ext/string/#/code-point-at/shim.js
@@ -0,0 +1,26 @@
+// Based on: https://github.com/mathiasbynens/String.prototype.codePointAt
+// Thanks @mathiasbynens !
+
+"use strict";
+
+var toInteger = require("../../../number/to-integer")
+ , validValue = require("../../../object/valid-value");
+
+module.exports = function (pos) {
+ var str = String(validValue(this)), length = str.length, first, second;
+ pos = toInteger(pos);
+
+ // Account for out-of-bounds indices:
+ if (pos < 0 || pos >= length) return undefined;
+
+ // Get the first code unit
+ first = str.charCodeAt(pos);
+ if (first >= 0xd800 && first <= 0xdbff && length > pos + 1) {
+ second = str.charCodeAt(pos + 1);
+ if (second >= 0xdc00 && second <= 0xdfff) {
+ // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ return (first - 0xd800) * 0x400 + second - 0xdc00 + 0x10000;
+ }
+ }
+ return first;
+};
diff --git a/node_modules/es5-ext/string/#/contains/implement.js b/node_modules/es5-ext/string/#/contains/implement.js
new file mode 100644
index 0000000..03cc091
--- /dev/null
+++ b/node_modules/es5-ext/string/#/contains/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(String.prototype, "contains", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/string/#/contains/index.js b/node_modules/es5-ext/string/#/contains/index.js
new file mode 100644
index 0000000..5f8d993
--- /dev/null
+++ b/node_modules/es5-ext/string/#/contains/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? String.prototype.contains : require("./shim");
diff --git a/node_modules/es5-ext/string/#/contains/is-implemented.js b/node_modules/es5-ext/string/#/contains/is-implemented.js
new file mode 100644
index 0000000..d9b3e9a
--- /dev/null
+++ b/node_modules/es5-ext/string/#/contains/is-implemented.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var str = "razdwatrzy";
+
+module.exports = function () {
+ if (typeof str.contains !== "function") return false;
+ return str.contains("dwa") === true && str.contains("foo") === false;
+};
diff --git a/node_modules/es5-ext/string/#/contains/shim.js b/node_modules/es5-ext/string/#/contains/shim.js
new file mode 100644
index 0000000..de2483d
--- /dev/null
+++ b/node_modules/es5-ext/string/#/contains/shim.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var indexOf = String.prototype.indexOf;
+
+module.exports = function (searchString /*, position*/) {
+ return indexOf.call(this, searchString, arguments[1]) > -1;
+};
diff --git a/node_modules/es5-ext/string/#/count.js b/node_modules/es5-ext/string/#/count.js
new file mode 100644
index 0000000..7607013
--- /dev/null
+++ b/node_modules/es5-ext/string/#/count.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var ensureString = require("../../object/validate-stringifiable-value");
+
+module.exports = function (search) {
+ var string = ensureString(this), count = 0, index = 0;
+
+ search = ensureString(search);
+ if (!search) throw new TypeError("Search string cannot be empty");
+ while ((index = string.indexOf(search, index)) !== -1) {
+ ++count;
+ index += search.length;
+ }
+ return count;
+};
diff --git a/node_modules/es5-ext/string/#/ends-with/implement.js b/node_modules/es5-ext/string/#/ends-with/implement.js
new file mode 100644
index 0000000..62457cc
--- /dev/null
+++ b/node_modules/es5-ext/string/#/ends-with/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(String.prototype, "endsWith", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/string/#/ends-with/index.js b/node_modules/es5-ext/string/#/ends-with/index.js
new file mode 100644
index 0000000..04c8264
--- /dev/null
+++ b/node_modules/es5-ext/string/#/ends-with/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? String.prototype.endsWith : require("./shim");
diff --git a/node_modules/es5-ext/string/#/ends-with/is-implemented.js b/node_modules/es5-ext/string/#/ends-with/is-implemented.js
new file mode 100644
index 0000000..1abaff7
--- /dev/null
+++ b/node_modules/es5-ext/string/#/ends-with/is-implemented.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var str = "razdwatrzy";
+
+module.exports = function () {
+ if (typeof str.endsWith !== "function") return false;
+ return str.endsWith("trzy") === true && str.endsWith("raz") === false;
+};
diff --git a/node_modules/es5-ext/string/#/ends-with/shim.js b/node_modules/es5-ext/string/#/ends-with/shim.js
new file mode 100644
index 0000000..c5371aa
--- /dev/null
+++ b/node_modules/es5-ext/string/#/ends-with/shim.js
@@ -0,0 +1,18 @@
+"use strict";
+
+var toInteger = require("../../../number/to-integer")
+ , value = require("../../../object/valid-value")
+ , isValue = require("../../../object/is-value")
+ , min = Math.min
+ , max = Math.max;
+
+module.exports = function (searchString /*, endPosition*/) {
+ var self, start, endPos;
+ self = String(value(this));
+ searchString = String(searchString);
+ endPos = arguments[1];
+ start =
+ (isValue(endPos) ? min(max(toInteger(endPos), 0), self.length) : self.length) -
+ searchString.length;
+ return start < 0 ? false : self.indexOf(searchString, start) === start;
+};
diff --git a/node_modules/es5-ext/string/#/hyphen-to-camel.js b/node_modules/es5-ext/string/#/hyphen-to-camel.js
new file mode 100644
index 0000000..9feef5b
--- /dev/null
+++ b/node_modules/es5-ext/string/#/hyphen-to-camel.js
@@ -0,0 +1,6 @@
+"use strict";
+
+var replace = String.prototype.replace, re = /-([a-z0-9])/g;
+var toUpperCase = function (ignored, a) { return a.toUpperCase(); };
+
+module.exports = function () { return replace.call(this, re, toUpperCase); };
diff --git a/node_modules/es5-ext/string/#/indent.js b/node_modules/es5-ext/string/#/indent.js
new file mode 100644
index 0000000..df8869d
--- /dev/null
+++ b/node_modules/es5-ext/string/#/indent.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var isValue = require("../../object/is-value")
+ , repeat = require("./repeat")
+ , replace = String.prototype.replace
+ , re = /(\r\n|[\n\r\u2028\u2029])([\u0000-\u0009\u000b-\uffff]+)/g;
+
+module.exports = function (indent /*, count*/) {
+ var count = arguments[1];
+ indent = repeat.call(String(indent), isValue(count) ? count : 1);
+ return indent + replace.call(this, re, "$1" + indent + "$2");
+};
diff --git a/node_modules/es5-ext/string/#/index.js b/node_modules/es5-ext/string/#/index.js
new file mode 100644
index 0000000..2344489
--- /dev/null
+++ b/node_modules/es5-ext/string/#/index.js
@@ -0,0 +1,23 @@
+"use strict";
+
+module.exports = {
+ "@@iterator": require("./@@iterator"),
+ "at": require("./at"),
+ "count": require("./count"),
+ "camelToHyphen": require("./camel-to-hyphen"),
+ "capitalize": require("./capitalize"),
+ "caseInsensitiveCompare": require("./case-insensitive-compare"),
+ "codePointAt": require("./code-point-at"),
+ "contains": require("./contains"),
+ "hyphenToCamel": require("./hyphen-to-camel"),
+ "endsWith": require("./ends-with"),
+ "indent": require("./indent"),
+ "last": require("./last"),
+ "normalize": require("./normalize"),
+ "pad": require("./pad"),
+ "plainReplace": require("./plain-replace"),
+ "plainReplaceAll": require("./plain-replace-all"),
+ "repeat": require("./repeat"),
+ "startsWith": require("./starts-with"),
+ "uncapitalize": require("./uncapitalize")
+};
diff --git a/node_modules/es5-ext/string/#/last.js b/node_modules/es5-ext/string/#/last.js
new file mode 100644
index 0000000..f5c957f
--- /dev/null
+++ b/node_modules/es5-ext/string/#/last.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var value = require("../../object/valid-value");
+
+module.exports = function () {
+ var self = String(value(this)), length = self.length;
+ return length ? self[length - 1] : null;
+};
diff --git a/node_modules/es5-ext/string/#/normalize/_data.js b/node_modules/es5-ext/string/#/normalize/_data.js
new file mode 100644
index 0000000..ae4f153
--- /dev/null
+++ b/node_modules/es5-ext/string/#/normalize/_data.js
@@ -0,0 +1,6988 @@
+/* eslint max-lines: "off", no-sparse-arrays: "off", comma-style: "off" */
+
+"use strict";
+
+module.exports = {
+ 0: {
+ 60: [, , { 824: 8814 }],
+ 61: [, , { 824: 8800 }],
+ 62: [, , { 824: 8815 }],
+ 65: [
+ , ,
+ {
+ 768: 192,
+ 769: 193,
+ 770: 194,
+ 771: 195,
+ 772: 256,
+ 774: 258,
+ 775: 550,
+ 776: 196,
+ 777: 7842,
+ 778: 197,
+ 780: 461,
+ 783: 512,
+ 785: 514,
+ 803: 7840,
+ 805: 7680,
+ 808: 260
+ }
+ ],
+ 66: [, , { 775: 7682, 803: 7684, 817: 7686 }],
+ 67: [, , { 769: 262, 770: 264, 775: 266, 780: 268, 807: 199 }],
+ 68: [, , { 775: 7690, 780: 270, 803: 7692, 807: 7696, 813: 7698, 817: 7694 }],
+ 69: [
+ , ,
+ {
+ 768: 200,
+ 769: 201,
+ 770: 202,
+ 771: 7868,
+ 772: 274,
+ 774: 276,
+ 775: 278,
+ 776: 203,
+ 777: 7866,
+ 780: 282,
+ 783: 516,
+ 785: 518,
+ 803: 7864,
+ 807: 552,
+ 808: 280,
+ 813: 7704,
+ 816: 7706
+ }
+ ],
+ 70: [, , { 775: 7710 }],
+ 71: [, , { 769: 500, 770: 284, 772: 7712, 774: 286, 775: 288, 780: 486, 807: 290 }],
+ 72: [, , { 770: 292, 775: 7714, 776: 7718, 780: 542, 803: 7716, 807: 7720, 814: 7722 }],
+ 73: [
+ , ,
+ {
+ 768: 204,
+ 769: 205,
+ 770: 206,
+ 771: 296,
+ 772: 298,
+ 774: 300,
+ 775: 304,
+ 776: 207,
+ 777: 7880,
+ 780: 463,
+ 783: 520,
+ 785: 522,
+ 803: 7882,
+ 808: 302,
+ 816: 7724
+ }
+ ],
+ 74: [, , { 770: 308 }],
+ 75: [, , { 769: 7728, 780: 488, 803: 7730, 807: 310, 817: 7732 }],
+ 76: [, , { 769: 313, 780: 317, 803: 7734, 807: 315, 813: 7740, 817: 7738 }],
+ 77: [, , { 769: 7742, 775: 7744, 803: 7746 }],
+ 78: [
+ , ,
+ {
+ 768: 504,
+ 769: 323,
+ 771: 209,
+ 775: 7748,
+ 780: 327,
+ 803: 7750,
+ 807: 325,
+ 813: 7754,
+ 817: 7752
+ }
+ ],
+ 79: [
+ , ,
+ {
+ 768: 210,
+ 769: 211,
+ 770: 212,
+ 771: 213,
+ 772: 332,
+ 774: 334,
+ 775: 558,
+ 776: 214,
+ 777: 7886,
+ 779: 336,
+ 780: 465,
+ 783: 524,
+ 785: 526,
+ 795: 416,
+ 803: 7884,
+ 808: 490
+ }
+ ],
+ 80: [, , { 769: 7764, 775: 7766 }],
+ 82: [
+ , ,
+ { 769: 340, 775: 7768, 780: 344, 783: 528, 785: 530, 803: 7770, 807: 342, 817: 7774 }
+ ],
+ 83: [, , { 769: 346, 770: 348, 775: 7776, 780: 352, 803: 7778, 806: 536, 807: 350 }],
+ 84: [, , { 775: 7786, 780: 356, 803: 7788, 806: 538, 807: 354, 813: 7792, 817: 7790 }],
+ 85: [
+ , ,
+ {
+ 768: 217,
+ 769: 218,
+ 770: 219,
+ 771: 360,
+ 772: 362,
+ 774: 364,
+ 776: 220,
+ 777: 7910,
+ 778: 366,
+ 779: 368,
+ 780: 467,
+ 783: 532,
+ 785: 534,
+ 795: 431,
+ 803: 7908,
+ 804: 7794,
+ 808: 370,
+ 813: 7798,
+ 816: 7796
+ }
+ ],
+ 86: [, , { 771: 7804, 803: 7806 }],
+ 87: [, , { 768: 7808, 769: 7810, 770: 372, 775: 7814, 776: 7812, 803: 7816 }],
+ 88: [, , { 775: 7818, 776: 7820 }],
+ 89: [
+ , ,
+ {
+ 768: 7922,
+ 769: 221,
+ 770: 374,
+ 771: 7928,
+ 772: 562,
+ 775: 7822,
+ 776: 376,
+ 777: 7926,
+ 803: 7924
+ }
+ ],
+ 90: [, , { 769: 377, 770: 7824, 775: 379, 780: 381, 803: 7826, 817: 7828 }],
+ 97: [
+ , ,
+ {
+ 768: 224,
+ 769: 225,
+ 770: 226,
+ 771: 227,
+ 772: 257,
+ 774: 259,
+ 775: 551,
+ 776: 228,
+ 777: 7843,
+ 778: 229,
+ 780: 462,
+ 783: 513,
+ 785: 515,
+ 803: 7841,
+ 805: 7681,
+ 808: 261
+ }
+ ],
+ 98: [, , { 775: 7683, 803: 7685, 817: 7687 }],
+ 99: [, , { 769: 263, 770: 265, 775: 267, 780: 269, 807: 231 }],
+ 100: [, , { 775: 7691, 780: 271, 803: 7693, 807: 7697, 813: 7699, 817: 7695 }],
+ 101: [
+ , ,
+ {
+ 768: 232,
+ 769: 233,
+ 770: 234,
+ 771: 7869,
+ 772: 275,
+ 774: 277,
+ 775: 279,
+ 776: 235,
+ 777: 7867,
+ 780: 283,
+ 783: 517,
+ 785: 519,
+ 803: 7865,
+ 807: 553,
+ 808: 281,
+ 813: 7705,
+ 816: 7707
+ }
+ ],
+ 102: [, , { 775: 7711 }],
+ 103: [, , { 769: 501, 770: 285, 772: 7713, 774: 287, 775: 289, 780: 487, 807: 291 }],
+ 104: [
+ , ,
+ { 770: 293, 775: 7715, 776: 7719, 780: 543, 803: 7717, 807: 7721, 814: 7723, 817: 7830 }
+ ],
+ 105: [
+ , ,
+ {
+ 768: 236,
+ 769: 237,
+ 770: 238,
+ 771: 297,
+ 772: 299,
+ 774: 301,
+ 776: 239,
+ 777: 7881,
+ 780: 464,
+ 783: 521,
+ 785: 523,
+ 803: 7883,
+ 808: 303,
+ 816: 7725
+ }
+ ],
+ 106: [, , { 770: 309, 780: 496 }],
+ 107: [, , { 769: 7729, 780: 489, 803: 7731, 807: 311, 817: 7733 }],
+ 108: [, , { 769: 314, 780: 318, 803: 7735, 807: 316, 813: 7741, 817: 7739 }],
+ 109: [, , { 769: 7743, 775: 7745, 803: 7747 }],
+ 110: [
+ , ,
+ {
+ 768: 505,
+ 769: 324,
+ 771: 241,
+ 775: 7749,
+ 780: 328,
+ 803: 7751,
+ 807: 326,
+ 813: 7755,
+ 817: 7753
+ }
+ ],
+ 111: [
+ , ,
+ {
+ 768: 242,
+ 769: 243,
+ 770: 244,
+ 771: 245,
+ 772: 333,
+ 774: 335,
+ 775: 559,
+ 776: 246,
+ 777: 7887,
+ 779: 337,
+ 780: 466,
+ 783: 525,
+ 785: 527,
+ 795: 417,
+ 803: 7885,
+ 808: 491
+ }
+ ],
+ 112: [, , { 769: 7765, 775: 7767 }],
+ 114: [
+ , ,
+ { 769: 341, 775: 7769, 780: 345, 783: 529, 785: 531, 803: 7771, 807: 343, 817: 7775 }
+ ],
+ 115: [, , { 769: 347, 770: 349, 775: 7777, 780: 353, 803: 7779, 806: 537, 807: 351 }],
+ 116: [
+ , ,
+ { 775: 7787, 776: 7831, 780: 357, 803: 7789, 806: 539, 807: 355, 813: 7793, 817: 7791 }
+ ],
+ 117: [
+ , ,
+ {
+ 768: 249,
+ 769: 250,
+ 770: 251,
+ 771: 361,
+ 772: 363,
+ 774: 365,
+ 776: 252,
+ 777: 7911,
+ 778: 367,
+ 779: 369,
+ 780: 468,
+ 783: 533,
+ 785: 535,
+ 795: 432,
+ 803: 7909,
+ 804: 7795,
+ 808: 371,
+ 813: 7799,
+ 816: 7797
+ }
+ ],
+ 118: [, , { 771: 7805, 803: 7807 }],
+ 119: [, , { 768: 7809, 769: 7811, 770: 373, 775: 7815, 776: 7813, 778: 7832, 803: 7817 }],
+ 120: [, , { 775: 7819, 776: 7821 }],
+ 121: [
+ , ,
+ {
+ 768: 7923,
+ 769: 253,
+ 770: 375,
+ 771: 7929,
+ 772: 563,
+ 775: 7823,
+ 776: 255,
+ 777: 7927,
+ 778: 7833,
+ 803: 7925
+ }
+ ],
+ 122: [, , { 769: 378, 770: 7825, 775: 380, 780: 382, 803: 7827, 817: 7829 }],
+ 160: [[32], 256],
+ 168: [[32, 776], 256, { 768: 8173, 769: 901, 834: 8129 }],
+ 170: [[97], 256],
+ 175: [[32, 772], 256],
+ 178: [[50], 256],
+ 179: [[51], 256],
+ 180: [[32, 769], 256],
+ 181: [[956], 256],
+ 184: [[32, 807], 256],
+ 185: [[49], 256],
+ 186: [[111], 256],
+ 188: [[49, 8260, 52], 256],
+ 189: [[49, 8260, 50], 256],
+ 190: [[51, 8260, 52], 256],
+ 192: [[65, 768]],
+ 193: [[65, 769]],
+ 194: [[65, 770], , { 768: 7846, 769: 7844, 771: 7850, 777: 7848 }],
+ 195: [[65, 771]],
+ 196: [[65, 776], , { 772: 478 }],
+ 197: [[65, 778], , { 769: 506 }],
+ 198: [, , { 769: 508, 772: 482 }],
+ 199: [[67, 807], , { 769: 7688 }],
+ 200: [[69, 768]],
+ 201: [[69, 769]],
+ 202: [[69, 770], , { 768: 7872, 769: 7870, 771: 7876, 777: 7874 }],
+ 203: [[69, 776]],
+ 204: [[73, 768]],
+ 205: [[73, 769]],
+ 206: [[73, 770]],
+ 207: [[73, 776], , { 769: 7726 }],
+ 209: [[78, 771]],
+ 210: [[79, 768]],
+ 211: [[79, 769]],
+ 212: [[79, 770], , { 768: 7890, 769: 7888, 771: 7894, 777: 7892 }],
+ 213: [[79, 771], , { 769: 7756, 772: 556, 776: 7758 }],
+ 214: [[79, 776], , { 772: 554 }],
+ 216: [, , { 769: 510 }],
+ 217: [[85, 768]],
+ 218: [[85, 769]],
+ 219: [[85, 770]],
+ 220: [[85, 776], , { 768: 475, 769: 471, 772: 469, 780: 473 }],
+ 221: [[89, 769]],
+ 224: [[97, 768]],
+ 225: [[97, 769]],
+ 226: [[97, 770], , { 768: 7847, 769: 7845, 771: 7851, 777: 7849 }],
+ 227: [[97, 771]],
+ 228: [[97, 776], , { 772: 479 }],
+ 229: [[97, 778], , { 769: 507 }],
+ 230: [, , { 769: 509, 772: 483 }],
+ 231: [[99, 807], , { 769: 7689 }],
+ 232: [[101, 768]],
+ 233: [[101, 769]],
+ 234: [[101, 770], , { 768: 7873, 769: 7871, 771: 7877, 777: 7875 }],
+ 235: [[101, 776]],
+ 236: [[105, 768]],
+ 237: [[105, 769]],
+ 238: [[105, 770]],
+ 239: [[105, 776], , { 769: 7727 }],
+ 241: [[110, 771]],
+ 242: [[111, 768]],
+ 243: [[111, 769]],
+ 244: [[111, 770], , { 768: 7891, 769: 7889, 771: 7895, 777: 7893 }],
+ 245: [[111, 771], , { 769: 7757, 772: 557, 776: 7759 }],
+ 246: [[111, 776], , { 772: 555 }],
+ 248: [, , { 769: 511 }],
+ 249: [[117, 768]],
+ 250: [[117, 769]],
+ 251: [[117, 770]],
+ 252: [[117, 776], , { 768: 476, 769: 472, 772: 470, 780: 474 }],
+ 253: [[121, 769]],
+ 255: [[121, 776]]
+ },
+ 256: {
+ 256: [[65, 772]],
+ 257: [[97, 772]],
+ 258: [[65, 774], , { 768: 7856, 769: 7854, 771: 7860, 777: 7858 }],
+ 259: [[97, 774], , { 768: 7857, 769: 7855, 771: 7861, 777: 7859 }],
+ 260: [[65, 808]],
+ 261: [[97, 808]],
+ 262: [[67, 769]],
+ 263: [[99, 769]],
+ 264: [[67, 770]],
+ 265: [[99, 770]],
+ 266: [[67, 775]],
+ 267: [[99, 775]],
+ 268: [[67, 780]],
+ 269: [[99, 780]],
+ 270: [[68, 780]],
+ 271: [[100, 780]],
+ 274: [[69, 772], , { 768: 7700, 769: 7702 }],
+ 275: [[101, 772], , { 768: 7701, 769: 7703 }],
+ 276: [[69, 774]],
+ 277: [[101, 774]],
+ 278: [[69, 775]],
+ 279: [[101, 775]],
+ 280: [[69, 808]],
+ 281: [[101, 808]],
+ 282: [[69, 780]],
+ 283: [[101, 780]],
+ 284: [[71, 770]],
+ 285: [[103, 770]],
+ 286: [[71, 774]],
+ 287: [[103, 774]],
+ 288: [[71, 775]],
+ 289: [[103, 775]],
+ 290: [[71, 807]],
+ 291: [[103, 807]],
+ 292: [[72, 770]],
+ 293: [[104, 770]],
+ 296: [[73, 771]],
+ 297: [[105, 771]],
+ 298: [[73, 772]],
+ 299: [[105, 772]],
+ 300: [[73, 774]],
+ 301: [[105, 774]],
+ 302: [[73, 808]],
+ 303: [[105, 808]],
+ 304: [[73, 775]],
+ 306: [[73, 74], 256],
+ 307: [[105, 106], 256],
+ 308: [[74, 770]],
+ 309: [[106, 770]],
+ 310: [[75, 807]],
+ 311: [[107, 807]],
+ 313: [[76, 769]],
+ 314: [[108, 769]],
+ 315: [[76, 807]],
+ 316: [[108, 807]],
+ 317: [[76, 780]],
+ 318: [[108, 780]],
+ 319: [[76, 183], 256],
+ 320: [[108, 183], 256],
+ 323: [[78, 769]],
+ 324: [[110, 769]],
+ 325: [[78, 807]],
+ 326: [[110, 807]],
+ 327: [[78, 780]],
+ 328: [[110, 780]],
+ 329: [[700, 110], 256],
+ 332: [[79, 772], , { 768: 7760, 769: 7762 }],
+ 333: [[111, 772], , { 768: 7761, 769: 7763 }],
+ 334: [[79, 774]],
+ 335: [[111, 774]],
+ 336: [[79, 779]],
+ 337: [[111, 779]],
+ 340: [[82, 769]],
+ 341: [[114, 769]],
+ 342: [[82, 807]],
+ 343: [[114, 807]],
+ 344: [[82, 780]],
+ 345: [[114, 780]],
+ 346: [[83, 769], , { 775: 7780 }],
+ 347: [[115, 769], , { 775: 7781 }],
+ 348: [[83, 770]],
+ 349: [[115, 770]],
+ 350: [[83, 807]],
+ 351: [[115, 807]],
+ 352: [[83, 780], , { 775: 7782 }],
+ 353: [[115, 780], , { 775: 7783 }],
+ 354: [[84, 807]],
+ 355: [[116, 807]],
+ 356: [[84, 780]],
+ 357: [[116, 780]],
+ 360: [[85, 771], , { 769: 7800 }],
+ 361: [[117, 771], , { 769: 7801 }],
+ 362: [[85, 772], , { 776: 7802 }],
+ 363: [[117, 772], , { 776: 7803 }],
+ 364: [[85, 774]],
+ 365: [[117, 774]],
+ 366: [[85, 778]],
+ 367: [[117, 778]],
+ 368: [[85, 779]],
+ 369: [[117, 779]],
+ 370: [[85, 808]],
+ 371: [[117, 808]],
+ 372: [[87, 770]],
+ 373: [[119, 770]],
+ 374: [[89, 770]],
+ 375: [[121, 770]],
+ 376: [[89, 776]],
+ 377: [[90, 769]],
+ 378: [[122, 769]],
+ 379: [[90, 775]],
+ 380: [[122, 775]],
+ 381: [[90, 780]],
+ 382: [[122, 780]],
+ 383: [[115], 256, { 775: 7835 }],
+ 416: [[79, 795], , { 768: 7900, 769: 7898, 771: 7904, 777: 7902, 803: 7906 }],
+ 417: [[111, 795], , { 768: 7901, 769: 7899, 771: 7905, 777: 7903, 803: 7907 }],
+ 431: [[85, 795], , { 768: 7914, 769: 7912, 771: 7918, 777: 7916, 803: 7920 }],
+ 432: [[117, 795], , { 768: 7915, 769: 7913, 771: 7919, 777: 7917, 803: 7921 }],
+ 439: [, , { 780: 494 }],
+ 452: [[68, 381], 256],
+ 453: [[68, 382], 256],
+ 454: [[100, 382], 256],
+ 455: [[76, 74], 256],
+ 456: [[76, 106], 256],
+ 457: [[108, 106], 256],
+ 458: [[78, 74], 256],
+ 459: [[78, 106], 256],
+ 460: [[110, 106], 256],
+ 461: [[65, 780]],
+ 462: [[97, 780]],
+ 463: [[73, 780]],
+ 464: [[105, 780]],
+ 465: [[79, 780]],
+ 466: [[111, 780]],
+ 467: [[85, 780]],
+ 468: [[117, 780]],
+ 469: [[220, 772]],
+ 470: [[252, 772]],
+ 471: [[220, 769]],
+ 472: [[252, 769]],
+ 473: [[220, 780]],
+ 474: [[252, 780]],
+ 475: [[220, 768]],
+ 476: [[252, 768]],
+ 478: [[196, 772]],
+ 479: [[228, 772]],
+ 480: [[550, 772]],
+ 481: [[551, 772]],
+ 482: [[198, 772]],
+ 483: [[230, 772]],
+ 486: [[71, 780]],
+ 487: [[103, 780]],
+ 488: [[75, 780]],
+ 489: [[107, 780]],
+ 490: [[79, 808], , { 772: 492 }],
+ 491: [[111, 808], , { 772: 493 }],
+ 492: [[490, 772]],
+ 493: [[491, 772]],
+ 494: [[439, 780]],
+ 495: [[658, 780]],
+ 496: [[106, 780]],
+ 497: [[68, 90], 256],
+ 498: [[68, 122], 256],
+ 499: [[100, 122], 256],
+ 500: [[71, 769]],
+ 501: [[103, 769]],
+ 504: [[78, 768]],
+ 505: [[110, 768]],
+ 506: [[197, 769]],
+ 507: [[229, 769]],
+ 508: [[198, 769]],
+ 509: [[230, 769]],
+ 510: [[216, 769]],
+ 511: [[248, 769]],
+ 66045: [, 220]
+ },
+ 512: {
+ 512: [[65, 783]],
+ 513: [[97, 783]],
+ 514: [[65, 785]],
+ 515: [[97, 785]],
+ 516: [[69, 783]],
+ 517: [[101, 783]],
+ 518: [[69, 785]],
+ 519: [[101, 785]],
+ 520: [[73, 783]],
+ 521: [[105, 783]],
+ 522: [[73, 785]],
+ 523: [[105, 785]],
+ 524: [[79, 783]],
+ 525: [[111, 783]],
+ 526: [[79, 785]],
+ 527: [[111, 785]],
+ 528: [[82, 783]],
+ 529: [[114, 783]],
+ 530: [[82, 785]],
+ 531: [[114, 785]],
+ 532: [[85, 783]],
+ 533: [[117, 783]],
+ 534: [[85, 785]],
+ 535: [[117, 785]],
+ 536: [[83, 806]],
+ 537: [[115, 806]],
+ 538: [[84, 806]],
+ 539: [[116, 806]],
+ 542: [[72, 780]],
+ 543: [[104, 780]],
+ 550: [[65, 775], , { 772: 480 }],
+ 551: [[97, 775], , { 772: 481 }],
+ 552: [[69, 807], , { 774: 7708 }],
+ 553: [[101, 807], , { 774: 7709 }],
+ 554: [[214, 772]],
+ 555: [[246, 772]],
+ 556: [[213, 772]],
+ 557: [[245, 772]],
+ 558: [[79, 775], , { 772: 560 }],
+ 559: [[111, 775], , { 772: 561 }],
+ 560: [[558, 772]],
+ 561: [[559, 772]],
+ 562: [[89, 772]],
+ 563: [[121, 772]],
+ 658: [, , { 780: 495 }],
+ 688: [[104], 256],
+ 689: [[614], 256],
+ 690: [[106], 256],
+ 691: [[114], 256],
+ 692: [[633], 256],
+ 693: [[635], 256],
+ 694: [[641], 256],
+ 695: [[119], 256],
+ 696: [[121], 256],
+ 728: [[32, 774], 256],
+ 729: [[32, 775], 256],
+ 730: [[32, 778], 256],
+ 731: [[32, 808], 256],
+ 732: [[32, 771], 256],
+ 733: [[32, 779], 256],
+ 736: [[611], 256],
+ 737: [[108], 256],
+ 738: [[115], 256],
+ 739: [[120], 256],
+ 740: [[661], 256]
+ },
+ 768: {
+ 768: [, 230],
+ 769: [, 230],
+ 770: [, 230],
+ 771: [, 230],
+ 772: [, 230],
+ 773: [, 230],
+ 774: [, 230],
+ 775: [, 230],
+ 776: [, 230, { 769: 836 }],
+ 777: [, 230],
+ 778: [, 230],
+ 779: [, 230],
+ 780: [, 230],
+ 781: [, 230],
+ 782: [, 230],
+ 783: [, 230],
+ 784: [, 230],
+ 785: [, 230],
+ 786: [, 230],
+ 787: [, 230],
+ 788: [, 230],
+ 789: [, 232],
+ 790: [, 220],
+ 791: [, 220],
+ 792: [, 220],
+ 793: [, 220],
+ 794: [, 232],
+ 795: [, 216],
+ 796: [, 220],
+ 797: [, 220],
+ 798: [, 220],
+ 799: [, 220],
+ 800: [, 220],
+ 801: [, 202],
+ 802: [, 202],
+ 803: [, 220],
+ 804: [, 220],
+ 805: [, 220],
+ 806: [, 220],
+ 807: [, 202],
+ 808: [, 202],
+ 809: [, 220],
+ 810: [, 220],
+ 811: [, 220],
+ 812: [, 220],
+ 813: [, 220],
+ 814: [, 220],
+ 815: [, 220],
+ 816: [, 220],
+ 817: [, 220],
+ 818: [, 220],
+ 819: [, 220],
+ 820: [, 1],
+ 821: [, 1],
+ 822: [, 1],
+ 823: [, 1],
+ 824: [, 1],
+ 825: [, 220],
+ 826: [, 220],
+ 827: [, 220],
+ 828: [, 220],
+ 829: [, 230],
+ 830: [, 230],
+ 831: [, 230],
+ 832: [[768], 230],
+ 833: [[769], 230],
+ 834: [, 230],
+ 835: [[787], 230],
+ 836: [[776, 769], 230],
+ 837: [, 240],
+ 838: [, 230],
+ 839: [, 220],
+ 840: [, 220],
+ 841: [, 220],
+ 842: [, 230],
+ 843: [, 230],
+ 844: [, 230],
+ 845: [, 220],
+ 846: [, 220],
+ 848: [, 230],
+ 849: [, 230],
+ 850: [, 230],
+ 851: [, 220],
+ 852: [, 220],
+ 853: [, 220],
+ 854: [, 220],
+ 855: [, 230],
+ 856: [, 232],
+ 857: [, 220],
+ 858: [, 220],
+ 859: [, 230],
+ 860: [, 233],
+ 861: [, 234],
+ 862: [, 234],
+ 863: [, 233],
+ 864: [, 234],
+ 865: [, 234],
+ 866: [, 233],
+ 867: [, 230],
+ 868: [, 230],
+ 869: [, 230],
+ 870: [, 230],
+ 871: [, 230],
+ 872: [, 230],
+ 873: [, 230],
+ 874: [, 230],
+ 875: [, 230],
+ 876: [, 230],
+ 877: [, 230],
+ 878: [, 230],
+ 879: [, 230],
+ 884: [[697]],
+ 890: [[32, 837], 256],
+ 894: [[59]],
+ 900: [[32, 769], 256],
+ 901: [[168, 769]],
+ 902: [[913, 769]],
+ 903: [[183]],
+ 904: [[917, 769]],
+ 905: [[919, 769]],
+ 906: [[921, 769]],
+ 908: [[927, 769]],
+ 910: [[933, 769]],
+ 911: [[937, 769]],
+ 912: [[970, 769]],
+ 913: [, , { 768: 8122, 769: 902, 772: 8121, 774: 8120, 787: 7944, 788: 7945, 837: 8124 }],
+ 917: [, , { 768: 8136, 769: 904, 787: 7960, 788: 7961 }],
+ 919: [, , { 768: 8138, 769: 905, 787: 7976, 788: 7977, 837: 8140 }],
+ 921: [, , { 768: 8154, 769: 906, 772: 8153, 774: 8152, 776: 938, 787: 7992, 788: 7993 }],
+ 927: [, , { 768: 8184, 769: 908, 787: 8008, 788: 8009 }],
+ 929: [, , { 788: 8172 }],
+ 933: [, , { 768: 8170, 769: 910, 772: 8169, 774: 8168, 776: 939, 788: 8025 }],
+ 937: [, , { 768: 8186, 769: 911, 787: 8040, 788: 8041, 837: 8188 }],
+ 938: [[921, 776]],
+ 939: [[933, 776]],
+ 940: [[945, 769], , { 837: 8116 }],
+ 941: [[949, 769]],
+ 942: [[951, 769], , { 837: 8132 }],
+ 943: [[953, 769]],
+ 944: [[971, 769]],
+ 945: [
+ , ,
+ {
+ 768: 8048,
+ 769: 940,
+ 772: 8113,
+ 774: 8112,
+ 787: 7936,
+ 788: 7937,
+ 834: 8118,
+ 837: 8115
+ }
+ ],
+ 949: [, , { 768: 8050, 769: 941, 787: 7952, 788: 7953 }],
+ 951: [, , { 768: 8052, 769: 942, 787: 7968, 788: 7969, 834: 8134, 837: 8131 }],
+ 953: [
+ , ,
+ { 768: 8054, 769: 943, 772: 8145, 774: 8144, 776: 970, 787: 7984, 788: 7985, 834: 8150 }
+ ],
+ 959: [, , { 768: 8056, 769: 972, 787: 8000, 788: 8001 }],
+ 961: [, , { 787: 8164, 788: 8165 }],
+ 965: [
+ , ,
+ { 768: 8058, 769: 973, 772: 8161, 774: 8160, 776: 971, 787: 8016, 788: 8017, 834: 8166 }
+ ],
+ 969: [, , { 768: 8060, 769: 974, 787: 8032, 788: 8033, 834: 8182, 837: 8179 }],
+ 970: [[953, 776], , { 768: 8146, 769: 912, 834: 8151 }],
+ 971: [[965, 776], , { 768: 8162, 769: 944, 834: 8167 }],
+ 972: [[959, 769]],
+ 973: [[965, 769]],
+ 974: [[969, 769], , { 837: 8180 }],
+ 976: [[946], 256],
+ 977: [[952], 256],
+ 978: [[933], 256, { 769: 979, 776: 980 }],
+ 979: [[978, 769]],
+ 980: [[978, 776]],
+ 981: [[966], 256],
+ 982: [[960], 256],
+ 1008: [[954], 256],
+ 1009: [[961], 256],
+ 1010: [[962], 256],
+ 1012: [[920], 256],
+ 1013: [[949], 256],
+ 1017: [[931], 256]
+ },
+ 1024: {
+ 1024: [[1045, 768]],
+ 1025: [[1045, 776]],
+ 1027: [[1043, 769]],
+ 1030: [, , { 776: 1031 }],
+ 1031: [[1030, 776]],
+ 1036: [[1050, 769]],
+ 1037: [[1048, 768]],
+ 1038: [[1059, 774]],
+ 1040: [, , { 774: 1232, 776: 1234 }],
+ 1043: [, , { 769: 1027 }],
+ 1045: [, , { 768: 1024, 774: 1238, 776: 1025 }],
+ 1046: [, , { 774: 1217, 776: 1244 }],
+ 1047: [, , { 776: 1246 }],
+ 1048: [, , { 768: 1037, 772: 1250, 774: 1049, 776: 1252 }],
+ 1049: [[1048, 774]],
+ 1050: [, , { 769: 1036 }],
+ 1054: [, , { 776: 1254 }],
+ 1059: [, , { 772: 1262, 774: 1038, 776: 1264, 779: 1266 }],
+ 1063: [, , { 776: 1268 }],
+ 1067: [, , { 776: 1272 }],
+ 1069: [, , { 776: 1260 }],
+ 1072: [, , { 774: 1233, 776: 1235 }],
+ 1075: [, , { 769: 1107 }],
+ 1077: [, , { 768: 1104, 774: 1239, 776: 1105 }],
+ 1078: [, , { 774: 1218, 776: 1245 }],
+ 1079: [, , { 776: 1247 }],
+ 1080: [, , { 768: 1117, 772: 1251, 774: 1081, 776: 1253 }],
+ 1081: [[1080, 774]],
+ 1082: [, , { 769: 1116 }],
+ 1086: [, , { 776: 1255 }],
+ 1091: [, , { 772: 1263, 774: 1118, 776: 1265, 779: 1267 }],
+ 1095: [, , { 776: 1269 }],
+ 1099: [, , { 776: 1273 }],
+ 1101: [, , { 776: 1261 }],
+ 1104: [[1077, 768]],
+ 1105: [[1077, 776]],
+ 1107: [[1075, 769]],
+ 1110: [, , { 776: 1111 }],
+ 1111: [[1110, 776]],
+ 1116: [[1082, 769]],
+ 1117: [[1080, 768]],
+ 1118: [[1091, 774]],
+ 1140: [, , { 783: 1142 }],
+ 1141: [, , { 783: 1143 }],
+ 1142: [[1140, 783]],
+ 1143: [[1141, 783]],
+ 1155: [, 230],
+ 1156: [, 230],
+ 1157: [, 230],
+ 1158: [, 230],
+ 1159: [, 230],
+ 1217: [[1046, 774]],
+ 1218: [[1078, 774]],
+ 1232: [[1040, 774]],
+ 1233: [[1072, 774]],
+ 1234: [[1040, 776]],
+ 1235: [[1072, 776]],
+ 1238: [[1045, 774]],
+ 1239: [[1077, 774]],
+ 1240: [, , { 776: 1242 }],
+ 1241: [, , { 776: 1243 }],
+ 1242: [[1240, 776]],
+ 1243: [[1241, 776]],
+ 1244: [[1046, 776]],
+ 1245: [[1078, 776]],
+ 1246: [[1047, 776]],
+ 1247: [[1079, 776]],
+ 1250: [[1048, 772]],
+ 1251: [[1080, 772]],
+ 1252: [[1048, 776]],
+ 1253: [[1080, 776]],
+ 1254: [[1054, 776]],
+ 1255: [[1086, 776]],
+ 1256: [, , { 776: 1258 }],
+ 1257: [, , { 776: 1259 }],
+ 1258: [[1256, 776]],
+ 1259: [[1257, 776]],
+ 1260: [[1069, 776]],
+ 1261: [[1101, 776]],
+ 1262: [[1059, 772]],
+ 1263: [[1091, 772]],
+ 1264: [[1059, 776]],
+ 1265: [[1091, 776]],
+ 1266: [[1059, 779]],
+ 1267: [[1091, 779]],
+ 1268: [[1063, 776]],
+ 1269: [[1095, 776]],
+ 1272: [[1067, 776]],
+ 1273: [[1099, 776]]
+ },
+ 1280: {
+ 1415: [[1381, 1410], 256],
+ 1425: [, 220],
+ 1426: [, 230],
+ 1427: [, 230],
+ 1428: [, 230],
+ 1429: [, 230],
+ 1430: [, 220],
+ 1431: [, 230],
+ 1432: [, 230],
+ 1433: [, 230],
+ 1434: [, 222],
+ 1435: [, 220],
+ 1436: [, 230],
+ 1437: [, 230],
+ 1438: [, 230],
+ 1439: [, 230],
+ 1440: [, 230],
+ 1441: [, 230],
+ 1442: [, 220],
+ 1443: [, 220],
+ 1444: [, 220],
+ 1445: [, 220],
+ 1446: [, 220],
+ 1447: [, 220],
+ 1448: [, 230],
+ 1449: [, 230],
+ 1450: [, 220],
+ 1451: [, 230],
+ 1452: [, 230],
+ 1453: [, 222],
+ 1454: [, 228],
+ 1455: [, 230],
+ 1456: [, 10],
+ 1457: [, 11],
+ 1458: [, 12],
+ 1459: [, 13],
+ 1460: [, 14],
+ 1461: [, 15],
+ 1462: [, 16],
+ 1463: [, 17],
+ 1464: [, 18],
+ 1465: [, 19],
+ 1466: [, 19],
+ 1467: [, 20],
+ 1468: [, 21],
+ 1469: [, 22],
+ 1471: [, 23],
+ 1473: [, 24],
+ 1474: [, 25],
+ 1476: [, 230],
+ 1477: [, 220],
+ 1479: [, 18]
+ },
+ 1536: {
+ 1552: [, 230],
+ 1553: [, 230],
+ 1554: [, 230],
+ 1555: [, 230],
+ 1556: [, 230],
+ 1557: [, 230],
+ 1558: [, 230],
+ 1559: [, 230],
+ 1560: [, 30],
+ 1561: [, 31],
+ 1562: [, 32],
+ 1570: [[1575, 1619]],
+ 1571: [[1575, 1620]],
+ 1572: [[1608, 1620]],
+ 1573: [[1575, 1621]],
+ 1574: [[1610, 1620]],
+ 1575: [, , { 1619: 1570, 1620: 1571, 1621: 1573 }],
+ 1608: [, , { 1620: 1572 }],
+ 1610: [, , { 1620: 1574 }],
+ 1611: [, 27],
+ 1612: [, 28],
+ 1613: [, 29],
+ 1614: [, 30],
+ 1615: [, 31],
+ 1616: [, 32],
+ 1617: [, 33],
+ 1618: [, 34],
+ 1619: [, 230],
+ 1620: [, 230],
+ 1621: [, 220],
+ 1622: [, 220],
+ 1623: [, 230],
+ 1624: [, 230],
+ 1625: [, 230],
+ 1626: [, 230],
+ 1627: [, 230],
+ 1628: [, 220],
+ 1629: [, 230],
+ 1630: [, 230],
+ 1631: [, 220],
+ 1648: [, 35],
+ 1653: [[1575, 1652], 256],
+ 1654: [[1608, 1652], 256],
+ 1655: [[1735, 1652], 256],
+ 1656: [[1610, 1652], 256],
+ 1728: [[1749, 1620]],
+ 1729: [, , { 1620: 1730 }],
+ 1730: [[1729, 1620]],
+ 1746: [, , { 1620: 1747 }],
+ 1747: [[1746, 1620]],
+ 1749: [, , { 1620: 1728 }],
+ 1750: [, 230],
+ 1751: [, 230],
+ 1752: [, 230],
+ 1753: [, 230],
+ 1754: [, 230],
+ 1755: [, 230],
+ 1756: [, 230],
+ 1759: [, 230],
+ 1760: [, 230],
+ 1761: [, 230],
+ 1762: [, 230],
+ 1763: [, 220],
+ 1764: [, 230],
+ 1767: [, 230],
+ 1768: [, 230],
+ 1770: [, 220],
+ 1771: [, 230],
+ 1772: [, 230],
+ 1773: [, 220]
+ },
+ 1792: {
+ 1809: [, 36],
+ 1840: [, 230],
+ 1841: [, 220],
+ 1842: [, 230],
+ 1843: [, 230],
+ 1844: [, 220],
+ 1845: [, 230],
+ 1846: [, 230],
+ 1847: [, 220],
+ 1848: [, 220],
+ 1849: [, 220],
+ 1850: [, 230],
+ 1851: [, 220],
+ 1852: [, 220],
+ 1853: [, 230],
+ 1854: [, 220],
+ 1855: [, 230],
+ 1856: [, 230],
+ 1857: [, 230],
+ 1858: [, 220],
+ 1859: [, 230],
+ 1860: [, 220],
+ 1861: [, 230],
+ 1862: [, 220],
+ 1863: [, 230],
+ 1864: [, 220],
+ 1865: [, 230],
+ 1866: [, 230],
+ 2027: [, 230],
+ 2028: [, 230],
+ 2029: [, 230],
+ 2030: [, 230],
+ 2031: [, 230],
+ 2032: [, 230],
+ 2033: [, 230],
+ 2034: [, 220],
+ 2035: [, 230]
+ },
+ 2048: {
+ 2070: [, 230],
+ 2071: [, 230],
+ 2072: [, 230],
+ 2073: [, 230],
+ 2075: [, 230],
+ 2076: [, 230],
+ 2077: [, 230],
+ 2078: [, 230],
+ 2079: [, 230],
+ 2080: [, 230],
+ 2081: [, 230],
+ 2082: [, 230],
+ 2083: [, 230],
+ 2085: [, 230],
+ 2086: [, 230],
+ 2087: [, 230],
+ 2089: [, 230],
+ 2090: [, 230],
+ 2091: [, 230],
+ 2092: [, 230],
+ 2093: [, 230],
+ 2137: [, 220],
+ 2138: [, 220],
+ 2139: [, 220],
+ 2276: [, 230],
+ 2277: [, 230],
+ 2278: [, 220],
+ 2279: [, 230],
+ 2280: [, 230],
+ 2281: [, 220],
+ 2282: [, 230],
+ 2283: [, 230],
+ 2284: [, 230],
+ 2285: [, 220],
+ 2286: [, 220],
+ 2287: [, 220],
+ 2288: [, 27],
+ 2289: [, 28],
+ 2290: [, 29],
+ 2291: [, 230],
+ 2292: [, 230],
+ 2293: [, 230],
+ 2294: [, 220],
+ 2295: [, 230],
+ 2296: [, 230],
+ 2297: [, 220],
+ 2298: [, 220],
+ 2299: [, 230],
+ 2300: [, 230],
+ 2301: [, 230],
+ 2302: [, 230]
+ },
+ 2304: {
+ 2344: [, , { 2364: 2345 }],
+ 2345: [[2344, 2364]],
+ 2352: [, , { 2364: 2353 }],
+ 2353: [[2352, 2364]],
+ 2355: [, , { 2364: 2356 }],
+ 2356: [[2355, 2364]],
+ 2364: [, 7],
+ 2381: [, 9],
+ 2385: [, 230],
+ 2386: [, 220],
+ 2387: [, 230],
+ 2388: [, 230],
+ 2392: [[2325, 2364], 512],
+ 2393: [[2326, 2364], 512],
+ 2394: [[2327, 2364], 512],
+ 2395: [[2332, 2364], 512],
+ 2396: [[2337, 2364], 512],
+ 2397: [[2338, 2364], 512],
+ 2398: [[2347, 2364], 512],
+ 2399: [[2351, 2364], 512],
+ 2492: [, 7],
+ 2503: [, , { 2494: 2507, 2519: 2508 }],
+ 2507: [[2503, 2494]],
+ 2508: [[2503, 2519]],
+ 2509: [, 9],
+ 2524: [[2465, 2492], 512],
+ 2525: [[2466, 2492], 512],
+ 2527: [[2479, 2492], 512]
+ },
+ 2560: {
+ 2611: [[2610, 2620], 512],
+ 2614: [[2616, 2620], 512],
+ 2620: [, 7],
+ 2637: [, 9],
+ 2649: [[2582, 2620], 512],
+ 2650: [[2583, 2620], 512],
+ 2651: [[2588, 2620], 512],
+ 2654: [[2603, 2620], 512],
+ 2748: [, 7],
+ 2765: [, 9],
+ 68109: [, 220],
+ 68111: [, 230],
+ 68152: [, 230],
+ 68153: [, 1],
+ 68154: [, 220],
+ 68159: [, 9]
+ },
+ 2816: {
+ 2876: [, 7],
+ 2887: [, , { 2878: 2891, 2902: 2888, 2903: 2892 }],
+ 2888: [[2887, 2902]],
+ 2891: [[2887, 2878]],
+ 2892: [[2887, 2903]],
+ 2893: [, 9],
+ 2908: [[2849, 2876], 512],
+ 2909: [[2850, 2876], 512],
+ 2962: [, , { 3031: 2964 }],
+ 2964: [[2962, 3031]],
+ 3014: [, , { 3006: 3018, 3031: 3020 }],
+ 3015: [, , { 3006: 3019 }],
+ 3018: [[3014, 3006]],
+ 3019: [[3015, 3006]],
+ 3020: [[3014, 3031]],
+ 3021: [, 9]
+ },
+ 3072: {
+ 3142: [, , { 3158: 3144 }],
+ 3144: [[3142, 3158]],
+ 3149: [, 9],
+ 3157: [, 84],
+ 3158: [, 91],
+ 3260: [, 7],
+ 3263: [, , { 3285: 3264 }],
+ 3264: [[3263, 3285]],
+ 3270: [, , { 3266: 3274, 3285: 3271, 3286: 3272 }],
+ 3271: [[3270, 3285]],
+ 3272: [[3270, 3286]],
+ 3274: [[3270, 3266], , { 3285: 3275 }],
+ 3275: [[3274, 3285]],
+ 3277: [, 9]
+ },
+ 3328: {
+ 3398: [, , { 3390: 3402, 3415: 3404 }],
+ 3399: [, , { 3390: 3403 }],
+ 3402: [[3398, 3390]],
+ 3403: [[3399, 3390]],
+ 3404: [[3398, 3415]],
+ 3405: [, 9],
+ 3530: [, 9],
+ 3545: [, , { 3530: 3546, 3535: 3548, 3551: 3550 }],
+ 3546: [[3545, 3530]],
+ 3548: [[3545, 3535], , { 3530: 3549 }],
+ 3549: [[3548, 3530]],
+ 3550: [[3545, 3551]]
+ },
+ 3584: {
+ 3635: [[3661, 3634], 256],
+ 3640: [, 103],
+ 3641: [, 103],
+ 3642: [, 9],
+ 3656: [, 107],
+ 3657: [, 107],
+ 3658: [, 107],
+ 3659: [, 107],
+ 3763: [[3789, 3762], 256],
+ 3768: [, 118],
+ 3769: [, 118],
+ 3784: [, 122],
+ 3785: [, 122],
+ 3786: [, 122],
+ 3787: [, 122],
+ 3804: [[3755, 3737], 256],
+ 3805: [[3755, 3745], 256]
+ },
+ 3840: {
+ 3852: [[3851], 256],
+ 3864: [, 220],
+ 3865: [, 220],
+ 3893: [, 220],
+ 3895: [, 220],
+ 3897: [, 216],
+ 3907: [[3906, 4023], 512],
+ 3917: [[3916, 4023], 512],
+ 3922: [[3921, 4023], 512],
+ 3927: [[3926, 4023], 512],
+ 3932: [[3931, 4023], 512],
+ 3945: [[3904, 4021], 512],
+ 3953: [, 129],
+ 3954: [, 130],
+ 3955: [[3953, 3954], 512],
+ 3956: [, 132],
+ 3957: [[3953, 3956], 512],
+ 3958: [[4018, 3968], 512],
+ 3959: [[4018, 3969], 256],
+ 3960: [[4019, 3968], 512],
+ 3961: [[4019, 3969], 256],
+ 3962: [, 130],
+ 3963: [, 130],
+ 3964: [, 130],
+ 3965: [, 130],
+ 3968: [, 130],
+ 3969: [[3953, 3968], 512],
+ 3970: [, 230],
+ 3971: [, 230],
+ 3972: [, 9],
+ 3974: [, 230],
+ 3975: [, 230],
+ 3987: [[3986, 4023], 512],
+ 3997: [[3996, 4023], 512],
+ 4002: [[4001, 4023], 512],
+ 4007: [[4006, 4023], 512],
+ 4012: [[4011, 4023], 512],
+ 4025: [[3984, 4021], 512],
+ 4038: [, 220]
+ },
+ 4096: {
+ 4133: [, , { 4142: 4134 }],
+ 4134: [[4133, 4142]],
+ 4151: [, 7],
+ 4153: [, 9],
+ 4154: [, 9],
+ 4237: [, 220],
+ 4348: [[4316], 256],
+ 69702: [, 9],
+ 69785: [, , { 69818: 69786 }],
+ 69786: [[69785, 69818]],
+ 69787: [, , { 69818: 69788 }],
+ 69788: [[69787, 69818]],
+ 69797: [, , { 69818: 69803 }],
+ 69803: [[69797, 69818]],
+ 69817: [, 9],
+ 69818: [, 7]
+ },
+ 4352: {
+ 69888: [, 230],
+ 69889: [, 230],
+ 69890: [, 230],
+ 69934: [[69937, 69927]],
+ 69935: [[69938, 69927]],
+ 69937: [, , { 69927: 69934 }],
+ 69938: [, , { 69927: 69935 }],
+ 69939: [, 9],
+ 69940: [, 9],
+ 70080: [, 9]
+ },
+ 4864: { 4957: [, 230], 4958: [, 230], 4959: [, 230] },
+ 5632: { 71350: [, 9], 71351: [, 7] },
+ 5888: { 5908: [, 9], 5940: [, 9], 6098: [, 9], 6109: [, 230] },
+ 6144: { 6313: [, 228] },
+ 6400: { 6457: [, 222], 6458: [, 230], 6459: [, 220] },
+ 6656: {
+ 6679: [, 230],
+ 6680: [, 220],
+ 6752: [, 9],
+ 6773: [, 230],
+ 6774: [, 230],
+ 6775: [, 230],
+ 6776: [, 230],
+ 6777: [, 230],
+ 6778: [, 230],
+ 6779: [, 230],
+ 6780: [, 230],
+ 6783: [, 220]
+ },
+ 6912: {
+ 6917: [, , { 6965: 6918 }],
+ 6918: [[6917, 6965]],
+ 6919: [, , { 6965: 6920 }],
+ 6920: [[6919, 6965]],
+ 6921: [, , { 6965: 6922 }],
+ 6922: [[6921, 6965]],
+ 6923: [, , { 6965: 6924 }],
+ 6924: [[6923, 6965]],
+ 6925: [, , { 6965: 6926 }],
+ 6926: [[6925, 6965]],
+ 6929: [, , { 6965: 6930 }],
+ 6930: [[6929, 6965]],
+ 6964: [, 7],
+ 6970: [, , { 6965: 6971 }],
+ 6971: [[6970, 6965]],
+ 6972: [, , { 6965: 6973 }],
+ 6973: [[6972, 6965]],
+ 6974: [, , { 6965: 6976 }],
+ 6975: [, , { 6965: 6977 }],
+ 6976: [[6974, 6965]],
+ 6977: [[6975, 6965]],
+ 6978: [, , { 6965: 6979 }],
+ 6979: [[6978, 6965]],
+ 6980: [, 9],
+ 7019: [, 230],
+ 7020: [, 220],
+ 7021: [, 230],
+ 7022: [, 230],
+ 7023: [, 230],
+ 7024: [, 230],
+ 7025: [, 230],
+ 7026: [, 230],
+ 7027: [, 230],
+ 7082: [, 9],
+ 7083: [, 9],
+ 7142: [, 7],
+ 7154: [, 9],
+ 7155: [, 9]
+ },
+ 7168: {
+ 7223: [, 7],
+ 7376: [, 230],
+ 7377: [, 230],
+ 7378: [, 230],
+ 7380: [, 1],
+ 7381: [, 220],
+ 7382: [, 220],
+ 7383: [, 220],
+ 7384: [, 220],
+ 7385: [, 220],
+ 7386: [, 230],
+ 7387: [, 230],
+ 7388: [, 220],
+ 7389: [, 220],
+ 7390: [, 220],
+ 7391: [, 220],
+ 7392: [, 230],
+ 7394: [, 1],
+ 7395: [, 1],
+ 7396: [, 1],
+ 7397: [, 1],
+ 7398: [, 1],
+ 7399: [, 1],
+ 7400: [, 1],
+ 7405: [, 220],
+ 7412: [, 230]
+ },
+ 7424: {
+ 7468: [[65], 256],
+ 7469: [[198], 256],
+ 7470: [[66], 256],
+ 7472: [[68], 256],
+ 7473: [[69], 256],
+ 7474: [[398], 256],
+ 7475: [[71], 256],
+ 7476: [[72], 256],
+ 7477: [[73], 256],
+ 7478: [[74], 256],
+ 7479: [[75], 256],
+ 7480: [[76], 256],
+ 7481: [[77], 256],
+ 7482: [[78], 256],
+ 7484: [[79], 256],
+ 7485: [[546], 256],
+ 7486: [[80], 256],
+ 7487: [[82], 256],
+ 7488: [[84], 256],
+ 7489: [[85], 256],
+ 7490: [[87], 256],
+ 7491: [[97], 256],
+ 7492: [[592], 256],
+ 7493: [[593], 256],
+ 7494: [[7426], 256],
+ 7495: [[98], 256],
+ 7496: [[100], 256],
+ 7497: [[101], 256],
+ 7498: [[601], 256],
+ 7499: [[603], 256],
+ 7500: [[604], 256],
+ 7501: [[103], 256],
+ 7503: [[107], 256],
+ 7504: [[109], 256],
+ 7505: [[331], 256],
+ 7506: [[111], 256],
+ 7507: [[596], 256],
+ 7508: [[7446], 256],
+ 7509: [[7447], 256],
+ 7510: [[112], 256],
+ 7511: [[116], 256],
+ 7512: [[117], 256],
+ 7513: [[7453], 256],
+ 7514: [[623], 256],
+ 7515: [[118], 256],
+ 7516: [[7461], 256],
+ 7517: [[946], 256],
+ 7518: [[947], 256],
+ 7519: [[948], 256],
+ 7520: [[966], 256],
+ 7521: [[967], 256],
+ 7522: [[105], 256],
+ 7523: [[114], 256],
+ 7524: [[117], 256],
+ 7525: [[118], 256],
+ 7526: [[946], 256],
+ 7527: [[947], 256],
+ 7528: [[961], 256],
+ 7529: [[966], 256],
+ 7530: [[967], 256],
+ 7544: [[1085], 256],
+ 7579: [[594], 256],
+ 7580: [[99], 256],
+ 7581: [[597], 256],
+ 7582: [[240], 256],
+ 7583: [[604], 256],
+ 7584: [[102], 256],
+ 7585: [[607], 256],
+ 7586: [[609], 256],
+ 7587: [[613], 256],
+ 7588: [[616], 256],
+ 7589: [[617], 256],
+ 7590: [[618], 256],
+ 7591: [[7547], 256],
+ 7592: [[669], 256],
+ 7593: [[621], 256],
+ 7594: [[7557], 256],
+ 7595: [[671], 256],
+ 7596: [[625], 256],
+ 7597: [[624], 256],
+ 7598: [[626], 256],
+ 7599: [[627], 256],
+ 7600: [[628], 256],
+ 7601: [[629], 256],
+ 7602: [[632], 256],
+ 7603: [[642], 256],
+ 7604: [[643], 256],
+ 7605: [[427], 256],
+ 7606: [[649], 256],
+ 7607: [[650], 256],
+ 7608: [[7452], 256],
+ 7609: [[651], 256],
+ 7610: [[652], 256],
+ 7611: [[122], 256],
+ 7612: [[656], 256],
+ 7613: [[657], 256],
+ 7614: [[658], 256],
+ 7615: [[952], 256],
+ 7616: [, 230],
+ 7617: [, 230],
+ 7618: [, 220],
+ 7619: [, 230],
+ 7620: [, 230],
+ 7621: [, 230],
+ 7622: [, 230],
+ 7623: [, 230],
+ 7624: [, 230],
+ 7625: [, 230],
+ 7626: [, 220],
+ 7627: [, 230],
+ 7628: [, 230],
+ 7629: [, 234],
+ 7630: [, 214],
+ 7631: [, 220],
+ 7632: [, 202],
+ 7633: [, 230],
+ 7634: [, 230],
+ 7635: [, 230],
+ 7636: [, 230],
+ 7637: [, 230],
+ 7638: [, 230],
+ 7639: [, 230],
+ 7640: [, 230],
+ 7641: [, 230],
+ 7642: [, 230],
+ 7643: [, 230],
+ 7644: [, 230],
+ 7645: [, 230],
+ 7646: [, 230],
+ 7647: [, 230],
+ 7648: [, 230],
+ 7649: [, 230],
+ 7650: [, 230],
+ 7651: [, 230],
+ 7652: [, 230],
+ 7653: [, 230],
+ 7654: [, 230],
+ 7676: [, 233],
+ 7677: [, 220],
+ 7678: [, 230],
+ 7679: [, 220]
+ },
+ 7680: {
+ 7680: [[65, 805]],
+ 7681: [[97, 805]],
+ 7682: [[66, 775]],
+ 7683: [[98, 775]],
+ 7684: [[66, 803]],
+ 7685: [[98, 803]],
+ 7686: [[66, 817]],
+ 7687: [[98, 817]],
+ 7688: [[199, 769]],
+ 7689: [[231, 769]],
+ 7690: [[68, 775]],
+ 7691: [[100, 775]],
+ 7692: [[68, 803]],
+ 7693: [[100, 803]],
+ 7694: [[68, 817]],
+ 7695: [[100, 817]],
+ 7696: [[68, 807]],
+ 7697: [[100, 807]],
+ 7698: [[68, 813]],
+ 7699: [[100, 813]],
+ 7700: [[274, 768]],
+ 7701: [[275, 768]],
+ 7702: [[274, 769]],
+ 7703: [[275, 769]],
+ 7704: [[69, 813]],
+ 7705: [[101, 813]],
+ 7706: [[69, 816]],
+ 7707: [[101, 816]],
+ 7708: [[552, 774]],
+ 7709: [[553, 774]],
+ 7710: [[70, 775]],
+ 7711: [[102, 775]],
+ 7712: [[71, 772]],
+ 7713: [[103, 772]],
+ 7714: [[72, 775]],
+ 7715: [[104, 775]],
+ 7716: [[72, 803]],
+ 7717: [[104, 803]],
+ 7718: [[72, 776]],
+ 7719: [[104, 776]],
+ 7720: [[72, 807]],
+ 7721: [[104, 807]],
+ 7722: [[72, 814]],
+ 7723: [[104, 814]],
+ 7724: [[73, 816]],
+ 7725: [[105, 816]],
+ 7726: [[207, 769]],
+ 7727: [[239, 769]],
+ 7728: [[75, 769]],
+ 7729: [[107, 769]],
+ 7730: [[75, 803]],
+ 7731: [[107, 803]],
+ 7732: [[75, 817]],
+ 7733: [[107, 817]],
+ 7734: [[76, 803], , { 772: 7736 }],
+ 7735: [[108, 803], , { 772: 7737 }],
+ 7736: [[7734, 772]],
+ 7737: [[7735, 772]],
+ 7738: [[76, 817]],
+ 7739: [[108, 817]],
+ 7740: [[76, 813]],
+ 7741: [[108, 813]],
+ 7742: [[77, 769]],
+ 7743: [[109, 769]],
+ 7744: [[77, 775]],
+ 7745: [[109, 775]],
+ 7746: [[77, 803]],
+ 7747: [[109, 803]],
+ 7748: [[78, 775]],
+ 7749: [[110, 775]],
+ 7750: [[78, 803]],
+ 7751: [[110, 803]],
+ 7752: [[78, 817]],
+ 7753: [[110, 817]],
+ 7754: [[78, 813]],
+ 7755: [[110, 813]],
+ 7756: [[213, 769]],
+ 7757: [[245, 769]],
+ 7758: [[213, 776]],
+ 7759: [[245, 776]],
+ 7760: [[332, 768]],
+ 7761: [[333, 768]],
+ 7762: [[332, 769]],
+ 7763: [[333, 769]],
+ 7764: [[80, 769]],
+ 7765: [[112, 769]],
+ 7766: [[80, 775]],
+ 7767: [[112, 775]],
+ 7768: [[82, 775]],
+ 7769: [[114, 775]],
+ 7770: [[82, 803], , { 772: 7772 }],
+ 7771: [[114, 803], , { 772: 7773 }],
+ 7772: [[7770, 772]],
+ 7773: [[7771, 772]],
+ 7774: [[82, 817]],
+ 7775: [[114, 817]],
+ 7776: [[83, 775]],
+ 7777: [[115, 775]],
+ 7778: [[83, 803], , { 775: 7784 }],
+ 7779: [[115, 803], , { 775: 7785 }],
+ 7780: [[346, 775]],
+ 7781: [[347, 775]],
+ 7782: [[352, 775]],
+ 7783: [[353, 775]],
+ 7784: [[7778, 775]],
+ 7785: [[7779, 775]],
+ 7786: [[84, 775]],
+ 7787: [[116, 775]],
+ 7788: [[84, 803]],
+ 7789: [[116, 803]],
+ 7790: [[84, 817]],
+ 7791: [[116, 817]],
+ 7792: [[84, 813]],
+ 7793: [[116, 813]],
+ 7794: [[85, 804]],
+ 7795: [[117, 804]],
+ 7796: [[85, 816]],
+ 7797: [[117, 816]],
+ 7798: [[85, 813]],
+ 7799: [[117, 813]],
+ 7800: [[360, 769]],
+ 7801: [[361, 769]],
+ 7802: [[362, 776]],
+ 7803: [[363, 776]],
+ 7804: [[86, 771]],
+ 7805: [[118, 771]],
+ 7806: [[86, 803]],
+ 7807: [[118, 803]],
+ 7808: [[87, 768]],
+ 7809: [[119, 768]],
+ 7810: [[87, 769]],
+ 7811: [[119, 769]],
+ 7812: [[87, 776]],
+ 7813: [[119, 776]],
+ 7814: [[87, 775]],
+ 7815: [[119, 775]],
+ 7816: [[87, 803]],
+ 7817: [[119, 803]],
+ 7818: [[88, 775]],
+ 7819: [[120, 775]],
+ 7820: [[88, 776]],
+ 7821: [[120, 776]],
+ 7822: [[89, 775]],
+ 7823: [[121, 775]],
+ 7824: [[90, 770]],
+ 7825: [[122, 770]],
+ 7826: [[90, 803]],
+ 7827: [[122, 803]],
+ 7828: [[90, 817]],
+ 7829: [[122, 817]],
+ 7830: [[104, 817]],
+ 7831: [[116, 776]],
+ 7832: [[119, 778]],
+ 7833: [[121, 778]],
+ 7834: [[97, 702], 256],
+ 7835: [[383, 775]],
+ 7840: [[65, 803], , { 770: 7852, 774: 7862 }],
+ 7841: [[97, 803], , { 770: 7853, 774: 7863 }],
+ 7842: [[65, 777]],
+ 7843: [[97, 777]],
+ 7844: [[194, 769]],
+ 7845: [[226, 769]],
+ 7846: [[194, 768]],
+ 7847: [[226, 768]],
+ 7848: [[194, 777]],
+ 7849: [[226, 777]],
+ 7850: [[194, 771]],
+ 7851: [[226, 771]],
+ 7852: [[7840, 770]],
+ 7853: [[7841, 770]],
+ 7854: [[258, 769]],
+ 7855: [[259, 769]],
+ 7856: [[258, 768]],
+ 7857: [[259, 768]],
+ 7858: [[258, 777]],
+ 7859: [[259, 777]],
+ 7860: [[258, 771]],
+ 7861: [[259, 771]],
+ 7862: [[7840, 774]],
+ 7863: [[7841, 774]],
+ 7864: [[69, 803], , { 770: 7878 }],
+ 7865: [[101, 803], , { 770: 7879 }],
+ 7866: [[69, 777]],
+ 7867: [[101, 777]],
+ 7868: [[69, 771]],
+ 7869: [[101, 771]],
+ 7870: [[202, 769]],
+ 7871: [[234, 769]],
+ 7872: [[202, 768]],
+ 7873: [[234, 768]],
+ 7874: [[202, 777]],
+ 7875: [[234, 777]],
+ 7876: [[202, 771]],
+ 7877: [[234, 771]],
+ 7878: [[7864, 770]],
+ 7879: [[7865, 770]],
+ 7880: [[73, 777]],
+ 7881: [[105, 777]],
+ 7882: [[73, 803]],
+ 7883: [[105, 803]],
+ 7884: [[79, 803], , { 770: 7896 }],
+ 7885: [[111, 803], , { 770: 7897 }],
+ 7886: [[79, 777]],
+ 7887: [[111, 777]],
+ 7888: [[212, 769]],
+ 7889: [[244, 769]],
+ 7890: [[212, 768]],
+ 7891: [[244, 768]],
+ 7892: [[212, 777]],
+ 7893: [[244, 777]],
+ 7894: [[212, 771]],
+ 7895: [[244, 771]],
+ 7896: [[7884, 770]],
+ 7897: [[7885, 770]],
+ 7898: [[416, 769]],
+ 7899: [[417, 769]],
+ 7900: [[416, 768]],
+ 7901: [[417, 768]],
+ 7902: [[416, 777]],
+ 7903: [[417, 777]],
+ 7904: [[416, 771]],
+ 7905: [[417, 771]],
+ 7906: [[416, 803]],
+ 7907: [[417, 803]],
+ 7908: [[85, 803]],
+ 7909: [[117, 803]],
+ 7910: [[85, 777]],
+ 7911: [[117, 777]],
+ 7912: [[431, 769]],
+ 7913: [[432, 769]],
+ 7914: [[431, 768]],
+ 7915: [[432, 768]],
+ 7916: [[431, 777]],
+ 7917: [[432, 777]],
+ 7918: [[431, 771]],
+ 7919: [[432, 771]],
+ 7920: [[431, 803]],
+ 7921: [[432, 803]],
+ 7922: [[89, 768]],
+ 7923: [[121, 768]],
+ 7924: [[89, 803]],
+ 7925: [[121, 803]],
+ 7926: [[89, 777]],
+ 7927: [[121, 777]],
+ 7928: [[89, 771]],
+ 7929: [[121, 771]]
+ },
+ 7936: {
+ 7936: [[945, 787], , { 768: 7938, 769: 7940, 834: 7942, 837: 8064 }],
+ 7937: [[945, 788], , { 768: 7939, 769: 7941, 834: 7943, 837: 8065 }],
+ 7938: [[7936, 768], , { 837: 8066 }],
+ 7939: [[7937, 768], , { 837: 8067 }],
+ 7940: [[7936, 769], , { 837: 8068 }],
+ 7941: [[7937, 769], , { 837: 8069 }],
+ 7942: [[7936, 834], , { 837: 8070 }],
+ 7943: [[7937, 834], , { 837: 8071 }],
+ 7944: [[913, 787], , { 768: 7946, 769: 7948, 834: 7950, 837: 8072 }],
+ 7945: [[913, 788], , { 768: 7947, 769: 7949, 834: 7951, 837: 8073 }],
+ 7946: [[7944, 768], , { 837: 8074 }],
+ 7947: [[7945, 768], , { 837: 8075 }],
+ 7948: [[7944, 769], , { 837: 8076 }],
+ 7949: [[7945, 769], , { 837: 8077 }],
+ 7950: [[7944, 834], , { 837: 8078 }],
+ 7951: [[7945, 834], , { 837: 8079 }],
+ 7952: [[949, 787], , { 768: 7954, 769: 7956 }],
+ 7953: [[949, 788], , { 768: 7955, 769: 7957 }],
+ 7954: [[7952, 768]],
+ 7955: [[7953, 768]],
+ 7956: [[7952, 769]],
+ 7957: [[7953, 769]],
+ 7960: [[917, 787], , { 768: 7962, 769: 7964 }],
+ 7961: [[917, 788], , { 768: 7963, 769: 7965 }],
+ 7962: [[7960, 768]],
+ 7963: [[7961, 768]],
+ 7964: [[7960, 769]],
+ 7965: [[7961, 769]],
+ 7968: [[951, 787], , { 768: 7970, 769: 7972, 834: 7974, 837: 8080 }],
+ 7969: [[951, 788], , { 768: 7971, 769: 7973, 834: 7975, 837: 8081 }],
+ 7970: [[7968, 768], , { 837: 8082 }],
+ 7971: [[7969, 768], , { 837: 8083 }],
+ 7972: [[7968, 769], , { 837: 8084 }],
+ 7973: [[7969, 769], , { 837: 8085 }],
+ 7974: [[7968, 834], , { 837: 8086 }],
+ 7975: [[7969, 834], , { 837: 8087 }],
+ 7976: [[919, 787], , { 768: 7978, 769: 7980, 834: 7982, 837: 8088 }],
+ 7977: [[919, 788], , { 768: 7979, 769: 7981, 834: 7983, 837: 8089 }],
+ 7978: [[7976, 768], , { 837: 8090 }],
+ 7979: [[7977, 768], , { 837: 8091 }],
+ 7980: [[7976, 769], , { 837: 8092 }],
+ 7981: [[7977, 769], , { 837: 8093 }],
+ 7982: [[7976, 834], , { 837: 8094 }],
+ 7983: [[7977, 834], , { 837: 8095 }],
+ 7984: [[953, 787], , { 768: 7986, 769: 7988, 834: 7990 }],
+ 7985: [[953, 788], , { 768: 7987, 769: 7989, 834: 7991 }],
+ 7986: [[7984, 768]],
+ 7987: [[7985, 768]],
+ 7988: [[7984, 769]],
+ 7989: [[7985, 769]],
+ 7990: [[7984, 834]],
+ 7991: [[7985, 834]],
+ 7992: [[921, 787], , { 768: 7994, 769: 7996, 834: 7998 }],
+ 7993: [[921, 788], , { 768: 7995, 769: 7997, 834: 7999 }],
+ 7994: [[7992, 768]],
+ 7995: [[7993, 768]],
+ 7996: [[7992, 769]],
+ 7997: [[7993, 769]],
+ 7998: [[7992, 834]],
+ 7999: [[7993, 834]],
+ 8000: [[959, 787], , { 768: 8002, 769: 8004 }],
+ 8001: [[959, 788], , { 768: 8003, 769: 8005 }],
+ 8002: [[8000, 768]],
+ 8003: [[8001, 768]],
+ 8004: [[8000, 769]],
+ 8005: [[8001, 769]],
+ 8008: [[927, 787], , { 768: 8010, 769: 8012 }],
+ 8009: [[927, 788], , { 768: 8011, 769: 8013 }],
+ 8010: [[8008, 768]],
+ 8011: [[8009, 768]],
+ 8012: [[8008, 769]],
+ 8013: [[8009, 769]],
+ 8016: [[965, 787], , { 768: 8018, 769: 8020, 834: 8022 }],
+ 8017: [[965, 788], , { 768: 8019, 769: 8021, 834: 8023 }],
+ 8018: [[8016, 768]],
+ 8019: [[8017, 768]],
+ 8020: [[8016, 769]],
+ 8021: [[8017, 769]],
+ 8022: [[8016, 834]],
+ 8023: [[8017, 834]],
+ 8025: [[933, 788], , { 768: 8027, 769: 8029, 834: 8031 }],
+ 8027: [[8025, 768]],
+ 8029: [[8025, 769]],
+ 8031: [[8025, 834]],
+ 8032: [[969, 787], , { 768: 8034, 769: 8036, 834: 8038, 837: 8096 }],
+ 8033: [[969, 788], , { 768: 8035, 769: 8037, 834: 8039, 837: 8097 }],
+ 8034: [[8032, 768], , { 837: 8098 }],
+ 8035: [[8033, 768], , { 837: 8099 }],
+ 8036: [[8032, 769], , { 837: 8100 }],
+ 8037: [[8033, 769], , { 837: 8101 }],
+ 8038: [[8032, 834], , { 837: 8102 }],
+ 8039: [[8033, 834], , { 837: 8103 }],
+ 8040: [[937, 787], , { 768: 8042, 769: 8044, 834: 8046, 837: 8104 }],
+ 8041: [[937, 788], , { 768: 8043, 769: 8045, 834: 8047, 837: 8105 }],
+ 8042: [[8040, 768], , { 837: 8106 }],
+ 8043: [[8041, 768], , { 837: 8107 }],
+ 8044: [[8040, 769], , { 837: 8108 }],
+ 8045: [[8041, 769], , { 837: 8109 }],
+ 8046: [[8040, 834], , { 837: 8110 }],
+ 8047: [[8041, 834], , { 837: 8111 }],
+ 8048: [[945, 768], , { 837: 8114 }],
+ 8049: [[940]],
+ 8050: [[949, 768]],
+ 8051: [[941]],
+ 8052: [[951, 768], , { 837: 8130 }],
+ 8053: [[942]],
+ 8054: [[953, 768]],
+ 8055: [[943]],
+ 8056: [[959, 768]],
+ 8057: [[972]],
+ 8058: [[965, 768]],
+ 8059: [[973]],
+ 8060: [[969, 768], , { 837: 8178 }],
+ 8061: [[974]],
+ 8064: [[7936, 837]],
+ 8065: [[7937, 837]],
+ 8066: [[7938, 837]],
+ 8067: [[7939, 837]],
+ 8068: [[7940, 837]],
+ 8069: [[7941, 837]],
+ 8070: [[7942, 837]],
+ 8071: [[7943, 837]],
+ 8072: [[7944, 837]],
+ 8073: [[7945, 837]],
+ 8074: [[7946, 837]],
+ 8075: [[7947, 837]],
+ 8076: [[7948, 837]],
+ 8077: [[7949, 837]],
+ 8078: [[7950, 837]],
+ 8079: [[7951, 837]],
+ 8080: [[7968, 837]],
+ 8081: [[7969, 837]],
+ 8082: [[7970, 837]],
+ 8083: [[7971, 837]],
+ 8084: [[7972, 837]],
+ 8085: [[7973, 837]],
+ 8086: [[7974, 837]],
+ 8087: [[7975, 837]],
+ 8088: [[7976, 837]],
+ 8089: [[7977, 837]],
+ 8090: [[7978, 837]],
+ 8091: [[7979, 837]],
+ 8092: [[7980, 837]],
+ 8093: [[7981, 837]],
+ 8094: [[7982, 837]],
+ 8095: [[7983, 837]],
+ 8096: [[8032, 837]],
+ 8097: [[8033, 837]],
+ 8098: [[8034, 837]],
+ 8099: [[8035, 837]],
+ 8100: [[8036, 837]],
+ 8101: [[8037, 837]],
+ 8102: [[8038, 837]],
+ 8103: [[8039, 837]],
+ 8104: [[8040, 837]],
+ 8105: [[8041, 837]],
+ 8106: [[8042, 837]],
+ 8107: [[8043, 837]],
+ 8108: [[8044, 837]],
+ 8109: [[8045, 837]],
+ 8110: [[8046, 837]],
+ 8111: [[8047, 837]],
+ 8112: [[945, 774]],
+ 8113: [[945, 772]],
+ 8114: [[8048, 837]],
+ 8115: [[945, 837]],
+ 8116: [[940, 837]],
+ 8118: [[945, 834], , { 837: 8119 }],
+ 8119: [[8118, 837]],
+ 8120: [[913, 774]],
+ 8121: [[913, 772]],
+ 8122: [[913, 768]],
+ 8123: [[902]],
+ 8124: [[913, 837]],
+ 8125: [[32, 787], 256],
+ 8126: [[953]],
+ 8127: [[32, 787], 256, { 768: 8141, 769: 8142, 834: 8143 }],
+ 8128: [[32, 834], 256],
+ 8129: [[168, 834]],
+ 8130: [[8052, 837]],
+ 8131: [[951, 837]],
+ 8132: [[942, 837]],
+ 8134: [[951, 834], , { 837: 8135 }],
+ 8135: [[8134, 837]],
+ 8136: [[917, 768]],
+ 8137: [[904]],
+ 8138: [[919, 768]],
+ 8139: [[905]],
+ 8140: [[919, 837]],
+ 8141: [[8127, 768]],
+ 8142: [[8127, 769]],
+ 8143: [[8127, 834]],
+ 8144: [[953, 774]],
+ 8145: [[953, 772]],
+ 8146: [[970, 768]],
+ 8147: [[912]],
+ 8150: [[953, 834]],
+ 8151: [[970, 834]],
+ 8152: [[921, 774]],
+ 8153: [[921, 772]],
+ 8154: [[921, 768]],
+ 8155: [[906]],
+ 8157: [[8190, 768]],
+ 8158: [[8190, 769]],
+ 8159: [[8190, 834]],
+ 8160: [[965, 774]],
+ 8161: [[965, 772]],
+ 8162: [[971, 768]],
+ 8163: [[944]],
+ 8164: [[961, 787]],
+ 8165: [[961, 788]],
+ 8166: [[965, 834]],
+ 8167: [[971, 834]],
+ 8168: [[933, 774]],
+ 8169: [[933, 772]],
+ 8170: [[933, 768]],
+ 8171: [[910]],
+ 8172: [[929, 788]],
+ 8173: [[168, 768]],
+ 8174: [[901]],
+ 8175: [[96]],
+ 8178: [[8060, 837]],
+ 8179: [[969, 837]],
+ 8180: [[974, 837]],
+ 8182: [[969, 834], , { 837: 8183 }],
+ 8183: [[8182, 837]],
+ 8184: [[927, 768]],
+ 8185: [[908]],
+ 8186: [[937, 768]],
+ 8187: [[911]],
+ 8188: [[937, 837]],
+ 8189: [[180]],
+ 8190: [[32, 788], 256, { 768: 8157, 769: 8158, 834: 8159 }]
+ },
+ 8192: {
+ 8192: [[8194]],
+ 8193: [[8195]],
+ 8194: [[32], 256],
+ 8195: [[32], 256],
+ 8196: [[32], 256],
+ 8197: [[32], 256],
+ 8198: [[32], 256],
+ 8199: [[32], 256],
+ 8200: [[32], 256],
+ 8201: [[32], 256],
+ 8202: [[32], 256],
+ 8209: [[8208], 256],
+ 8215: [[32, 819], 256],
+ 8228: [[46], 256],
+ 8229: [[46, 46], 256],
+ 8230: [[46, 46, 46], 256],
+ 8239: [[32], 256],
+ 8243: [[8242, 8242], 256],
+ 8244: [[8242, 8242, 8242], 256],
+ 8246: [[8245, 8245], 256],
+ 8247: [[8245, 8245, 8245], 256],
+ 8252: [[33, 33], 256],
+ 8254: [[32, 773], 256],
+ 8263: [[63, 63], 256],
+ 8264: [[63, 33], 256],
+ 8265: [[33, 63], 256],
+ 8279: [[8242, 8242, 8242, 8242], 256],
+ 8287: [[32], 256],
+ 8304: [[48], 256],
+ 8305: [[105], 256],
+ 8308: [[52], 256],
+ 8309: [[53], 256],
+ 8310: [[54], 256],
+ 8311: [[55], 256],
+ 8312: [[56], 256],
+ 8313: [[57], 256],
+ 8314: [[43], 256],
+ 8315: [[8722], 256],
+ 8316: [[61], 256],
+ 8317: [[40], 256],
+ 8318: [[41], 256],
+ 8319: [[110], 256],
+ 8320: [[48], 256],
+ 8321: [[49], 256],
+ 8322: [[50], 256],
+ 8323: [[51], 256],
+ 8324: [[52], 256],
+ 8325: [[53], 256],
+ 8326: [[54], 256],
+ 8327: [[55], 256],
+ 8328: [[56], 256],
+ 8329: [[57], 256],
+ 8330: [[43], 256],
+ 8331: [[8722], 256],
+ 8332: [[61], 256],
+ 8333: [[40], 256],
+ 8334: [[41], 256],
+ 8336: [[97], 256],
+ 8337: [[101], 256],
+ 8338: [[111], 256],
+ 8339: [[120], 256],
+ 8340: [[601], 256],
+ 8341: [[104], 256],
+ 8342: [[107], 256],
+ 8343: [[108], 256],
+ 8344: [[109], 256],
+ 8345: [[110], 256],
+ 8346: [[112], 256],
+ 8347: [[115], 256],
+ 8348: [[116], 256],
+ 8360: [[82, 115], 256],
+ 8400: [, 230],
+ 8401: [, 230],
+ 8402: [, 1],
+ 8403: [, 1],
+ 8404: [, 230],
+ 8405: [, 230],
+ 8406: [, 230],
+ 8407: [, 230],
+ 8408: [, 1],
+ 8409: [, 1],
+ 8410: [, 1],
+ 8411: [, 230],
+ 8412: [, 230],
+ 8417: [, 230],
+ 8421: [, 1],
+ 8422: [, 1],
+ 8423: [, 230],
+ 8424: [, 220],
+ 8425: [, 230],
+ 8426: [, 1],
+ 8427: [, 1],
+ 8428: [, 220],
+ 8429: [, 220],
+ 8430: [, 220],
+ 8431: [, 220],
+ 8432: [, 230]
+ },
+ 8448: {
+ 8448: [[97, 47, 99], 256],
+ 8449: [[97, 47, 115], 256],
+ 8450: [[67], 256],
+ 8451: [[176, 67], 256],
+ 8453: [[99, 47, 111], 256],
+ 8454: [[99, 47, 117], 256],
+ 8455: [[400], 256],
+ 8457: [[176, 70], 256],
+ 8458: [[103], 256],
+ 8459: [[72], 256],
+ 8460: [[72], 256],
+ 8461: [[72], 256],
+ 8462: [[104], 256],
+ 8463: [[295], 256],
+ 8464: [[73], 256],
+ 8465: [[73], 256],
+ 8466: [[76], 256],
+ 8467: [[108], 256],
+ 8469: [[78], 256],
+ 8470: [[78, 111], 256],
+ 8473: [[80], 256],
+ 8474: [[81], 256],
+ 8475: [[82], 256],
+ 8476: [[82], 256],
+ 8477: [[82], 256],
+ 8480: [[83, 77], 256],
+ 8481: [[84, 69, 76], 256],
+ 8482: [[84, 77], 256],
+ 8484: [[90], 256],
+ 8486: [[937]],
+ 8488: [[90], 256],
+ 8490: [[75]],
+ 8491: [[197]],
+ 8492: [[66], 256],
+ 8493: [[67], 256],
+ 8495: [[101], 256],
+ 8496: [[69], 256],
+ 8497: [[70], 256],
+ 8499: [[77], 256],
+ 8500: [[111], 256],
+ 8501: [[1488], 256],
+ 8502: [[1489], 256],
+ 8503: [[1490], 256],
+ 8504: [[1491], 256],
+ 8505: [[105], 256],
+ 8507: [[70, 65, 88], 256],
+ 8508: [[960], 256],
+ 8509: [[947], 256],
+ 8510: [[915], 256],
+ 8511: [[928], 256],
+ 8512: [[8721], 256],
+ 8517: [[68], 256],
+ 8518: [[100], 256],
+ 8519: [[101], 256],
+ 8520: [[105], 256],
+ 8521: [[106], 256],
+ 8528: [[49, 8260, 55], 256],
+ 8529: [[49, 8260, 57], 256],
+ 8530: [[49, 8260, 49, 48], 256],
+ 8531: [[49, 8260, 51], 256],
+ 8532: [[50, 8260, 51], 256],
+ 8533: [[49, 8260, 53], 256],
+ 8534: [[50, 8260, 53], 256],
+ 8535: [[51, 8260, 53], 256],
+ 8536: [[52, 8260, 53], 256],
+ 8537: [[49, 8260, 54], 256],
+ 8538: [[53, 8260, 54], 256],
+ 8539: [[49, 8260, 56], 256],
+ 8540: [[51, 8260, 56], 256],
+ 8541: [[53, 8260, 56], 256],
+ 8542: [[55, 8260, 56], 256],
+ 8543: [[49, 8260], 256],
+ 8544: [[73], 256],
+ 8545: [[73, 73], 256],
+ 8546: [[73, 73, 73], 256],
+ 8547: [[73, 86], 256],
+ 8548: [[86], 256],
+ 8549: [[86, 73], 256],
+ 8550: [[86, 73, 73], 256],
+ 8551: [[86, 73, 73, 73], 256],
+ 8552: [[73, 88], 256],
+ 8553: [[88], 256],
+ 8554: [[88, 73], 256],
+ 8555: [[88, 73, 73], 256],
+ 8556: [[76], 256],
+ 8557: [[67], 256],
+ 8558: [[68], 256],
+ 8559: [[77], 256],
+ 8560: [[105], 256],
+ 8561: [[105, 105], 256],
+ 8562: [[105, 105, 105], 256],
+ 8563: [[105, 118], 256],
+ 8564: [[118], 256],
+ 8565: [[118, 105], 256],
+ 8566: [[118, 105, 105], 256],
+ 8567: [[118, 105, 105, 105], 256],
+ 8568: [[105, 120], 256],
+ 8569: [[120], 256],
+ 8570: [[120, 105], 256],
+ 8571: [[120, 105, 105], 256],
+ 8572: [[108], 256],
+ 8573: [[99], 256],
+ 8574: [[100], 256],
+ 8575: [[109], 256],
+ 8585: [[48, 8260, 51], 256],
+ 8592: [, , { 824: 8602 }],
+ 8594: [, , { 824: 8603 }],
+ 8596: [, , { 824: 8622 }],
+ 8602: [[8592, 824]],
+ 8603: [[8594, 824]],
+ 8622: [[8596, 824]],
+ 8653: [[8656, 824]],
+ 8654: [[8660, 824]],
+ 8655: [[8658, 824]],
+ 8656: [, , { 824: 8653 }],
+ 8658: [, , { 824: 8655 }],
+ 8660: [, , { 824: 8654 }]
+ },
+ 8704: {
+ 8707: [, , { 824: 8708 }],
+ 8708: [[8707, 824]],
+ 8712: [, , { 824: 8713 }],
+ 8713: [[8712, 824]],
+ 8715: [, , { 824: 8716 }],
+ 8716: [[8715, 824]],
+ 8739: [, , { 824: 8740 }],
+ 8740: [[8739, 824]],
+ 8741: [, , { 824: 8742 }],
+ 8742: [[8741, 824]],
+ 8748: [[8747, 8747], 256],
+ 8749: [[8747, 8747, 8747], 256],
+ 8751: [[8750, 8750], 256],
+ 8752: [[8750, 8750, 8750], 256],
+ 8764: [, , { 824: 8769 }],
+ 8769: [[8764, 824]],
+ 8771: [, , { 824: 8772 }],
+ 8772: [[8771, 824]],
+ 8773: [, , { 824: 8775 }],
+ 8775: [[8773, 824]],
+ 8776: [, , { 824: 8777 }],
+ 8777: [[8776, 824]],
+ 8781: [, , { 824: 8813 }],
+ 8800: [[61, 824]],
+ 8801: [, , { 824: 8802 }],
+ 8802: [[8801, 824]],
+ 8804: [, , { 824: 8816 }],
+ 8805: [, , { 824: 8817 }],
+ 8813: [[8781, 824]],
+ 8814: [[60, 824]],
+ 8815: [[62, 824]],
+ 8816: [[8804, 824]],
+ 8817: [[8805, 824]],
+ 8818: [, , { 824: 8820 }],
+ 8819: [, , { 824: 8821 }],
+ 8820: [[8818, 824]],
+ 8821: [[8819, 824]],
+ 8822: [, , { 824: 8824 }],
+ 8823: [, , { 824: 8825 }],
+ 8824: [[8822, 824]],
+ 8825: [[8823, 824]],
+ 8826: [, , { 824: 8832 }],
+ 8827: [, , { 824: 8833 }],
+ 8828: [, , { 824: 8928 }],
+ 8829: [, , { 824: 8929 }],
+ 8832: [[8826, 824]],
+ 8833: [[8827, 824]],
+ 8834: [, , { 824: 8836 }],
+ 8835: [, , { 824: 8837 }],
+ 8836: [[8834, 824]],
+ 8837: [[8835, 824]],
+ 8838: [, , { 824: 8840 }],
+ 8839: [, , { 824: 8841 }],
+ 8840: [[8838, 824]],
+ 8841: [[8839, 824]],
+ 8849: [, , { 824: 8930 }],
+ 8850: [, , { 824: 8931 }],
+ 8866: [, , { 824: 8876 }],
+ 8872: [, , { 824: 8877 }],
+ 8873: [, , { 824: 8878 }],
+ 8875: [, , { 824: 8879 }],
+ 8876: [[8866, 824]],
+ 8877: [[8872, 824]],
+ 8878: [[8873, 824]],
+ 8879: [[8875, 824]],
+ 8882: [, , { 824: 8938 }],
+ 8883: [, , { 824: 8939 }],
+ 8884: [, , { 824: 8940 }],
+ 8885: [, , { 824: 8941 }],
+ 8928: [[8828, 824]],
+ 8929: [[8829, 824]],
+ 8930: [[8849, 824]],
+ 8931: [[8850, 824]],
+ 8938: [[8882, 824]],
+ 8939: [[8883, 824]],
+ 8940: [[8884, 824]],
+ 8941: [[8885, 824]]
+ },
+ 8960: { 9001: [[12296]], 9002: [[12297]] },
+ 9216: {
+ 9312: [[49], 256],
+ 9313: [[50], 256],
+ 9314: [[51], 256],
+ 9315: [[52], 256],
+ 9316: [[53], 256],
+ 9317: [[54], 256],
+ 9318: [[55], 256],
+ 9319: [[56], 256],
+ 9320: [[57], 256],
+ 9321: [[49, 48], 256],
+ 9322: [[49, 49], 256],
+ 9323: [[49, 50], 256],
+ 9324: [[49, 51], 256],
+ 9325: [[49, 52], 256],
+ 9326: [[49, 53], 256],
+ 9327: [[49, 54], 256],
+ 9328: [[49, 55], 256],
+ 9329: [[49, 56], 256],
+ 9330: [[49, 57], 256],
+ 9331: [[50, 48], 256],
+ 9332: [[40, 49, 41], 256],
+ 9333: [[40, 50, 41], 256],
+ 9334: [[40, 51, 41], 256],
+ 9335: [[40, 52, 41], 256],
+ 9336: [[40, 53, 41], 256],
+ 9337: [[40, 54, 41], 256],
+ 9338: [[40, 55, 41], 256],
+ 9339: [[40, 56, 41], 256],
+ 9340: [[40, 57, 41], 256],
+ 9341: [[40, 49, 48, 41], 256],
+ 9342: [[40, 49, 49, 41], 256],
+ 9343: [[40, 49, 50, 41], 256],
+ 9344: [[40, 49, 51, 41], 256],
+ 9345: [[40, 49, 52, 41], 256],
+ 9346: [[40, 49, 53, 41], 256],
+ 9347: [[40, 49, 54, 41], 256],
+ 9348: [[40, 49, 55, 41], 256],
+ 9349: [[40, 49, 56, 41], 256],
+ 9350: [[40, 49, 57, 41], 256],
+ 9351: [[40, 50, 48, 41], 256],
+ 9352: [[49, 46], 256],
+ 9353: [[50, 46], 256],
+ 9354: [[51, 46], 256],
+ 9355: [[52, 46], 256],
+ 9356: [[53, 46], 256],
+ 9357: [[54, 46], 256],
+ 9358: [[55, 46], 256],
+ 9359: [[56, 46], 256],
+ 9360: [[57, 46], 256],
+ 9361: [[49, 48, 46], 256],
+ 9362: [[49, 49, 46], 256],
+ 9363: [[49, 50, 46], 256],
+ 9364: [[49, 51, 46], 256],
+ 9365: [[49, 52, 46], 256],
+ 9366: [[49, 53, 46], 256],
+ 9367: [[49, 54, 46], 256],
+ 9368: [[49, 55, 46], 256],
+ 9369: [[49, 56, 46], 256],
+ 9370: [[49, 57, 46], 256],
+ 9371: [[50, 48, 46], 256],
+ 9372: [[40, 97, 41], 256],
+ 9373: [[40, 98, 41], 256],
+ 9374: [[40, 99, 41], 256],
+ 9375: [[40, 100, 41], 256],
+ 9376: [[40, 101, 41], 256],
+ 9377: [[40, 102, 41], 256],
+ 9378: [[40, 103, 41], 256],
+ 9379: [[40, 104, 41], 256],
+ 9380: [[40, 105, 41], 256],
+ 9381: [[40, 106, 41], 256],
+ 9382: [[40, 107, 41], 256],
+ 9383: [[40, 108, 41], 256],
+ 9384: [[40, 109, 41], 256],
+ 9385: [[40, 110, 41], 256],
+ 9386: [[40, 111, 41], 256],
+ 9387: [[40, 112, 41], 256],
+ 9388: [[40, 113, 41], 256],
+ 9389: [[40, 114, 41], 256],
+ 9390: [[40, 115, 41], 256],
+ 9391: [[40, 116, 41], 256],
+ 9392: [[40, 117, 41], 256],
+ 9393: [[40, 118, 41], 256],
+ 9394: [[40, 119, 41], 256],
+ 9395: [[40, 120, 41], 256],
+ 9396: [[40, 121, 41], 256],
+ 9397: [[40, 122, 41], 256],
+ 9398: [[65], 256],
+ 9399: [[66], 256],
+ 9400: [[67], 256],
+ 9401: [[68], 256],
+ 9402: [[69], 256],
+ 9403: [[70], 256],
+ 9404: [[71], 256],
+ 9405: [[72], 256],
+ 9406: [[73], 256],
+ 9407: [[74], 256],
+ 9408: [[75], 256],
+ 9409: [[76], 256],
+ 9410: [[77], 256],
+ 9411: [[78], 256],
+ 9412: [[79], 256],
+ 9413: [[80], 256],
+ 9414: [[81], 256],
+ 9415: [[82], 256],
+ 9416: [[83], 256],
+ 9417: [[84], 256],
+ 9418: [[85], 256],
+ 9419: [[86], 256],
+ 9420: [[87], 256],
+ 9421: [[88], 256],
+ 9422: [[89], 256],
+ 9423: [[90], 256],
+ 9424: [[97], 256],
+ 9425: [[98], 256],
+ 9426: [[99], 256],
+ 9427: [[100], 256],
+ 9428: [[101], 256],
+ 9429: [[102], 256],
+ 9430: [[103], 256],
+ 9431: [[104], 256],
+ 9432: [[105], 256],
+ 9433: [[106], 256],
+ 9434: [[107], 256],
+ 9435: [[108], 256],
+ 9436: [[109], 256],
+ 9437: [[110], 256],
+ 9438: [[111], 256],
+ 9439: [[112], 256],
+ 9440: [[113], 256],
+ 9441: [[114], 256],
+ 9442: [[115], 256],
+ 9443: [[116], 256],
+ 9444: [[117], 256],
+ 9445: [[118], 256],
+ 9446: [[119], 256],
+ 9447: [[120], 256],
+ 9448: [[121], 256],
+ 9449: [[122], 256],
+ 9450: [[48], 256]
+ },
+ 10752: {
+ 10764: [[8747, 8747, 8747, 8747], 256],
+ 10868: [[58, 58, 61], 256],
+ 10869: [[61, 61], 256],
+ 10870: [[61, 61, 61], 256],
+ 10972: [[10973, 824], 512]
+ },
+ 11264: {
+ 11388: [[106], 256],
+ 11389: [[86], 256],
+ 11503: [, 230],
+ 11504: [, 230],
+ 11505: [, 230]
+ },
+ 11520: {
+ 11631: [[11617], 256],
+ 11647: [, 9],
+ 11744: [, 230],
+ 11745: [, 230],
+ 11746: [, 230],
+ 11747: [, 230],
+ 11748: [, 230],
+ 11749: [, 230],
+ 11750: [, 230],
+ 11751: [, 230],
+ 11752: [, 230],
+ 11753: [, 230],
+ 11754: [, 230],
+ 11755: [, 230],
+ 11756: [, 230],
+ 11757: [, 230],
+ 11758: [, 230],
+ 11759: [, 230],
+ 11760: [, 230],
+ 11761: [, 230],
+ 11762: [, 230],
+ 11763: [, 230],
+ 11764: [, 230],
+ 11765: [, 230],
+ 11766: [, 230],
+ 11767: [, 230],
+ 11768: [, 230],
+ 11769: [, 230],
+ 11770: [, 230],
+ 11771: [, 230],
+ 11772: [, 230],
+ 11773: [, 230],
+ 11774: [, 230],
+ 11775: [, 230]
+ },
+ 11776: { 11935: [[27597], 256], 12019: [[40863], 256] },
+ 12032: {
+ 12032: [[19968], 256],
+ 12033: [[20008], 256],
+ 12034: [[20022], 256],
+ 12035: [[20031], 256],
+ 12036: [[20057], 256],
+ 12037: [[20101], 256],
+ 12038: [[20108], 256],
+ 12039: [[20128], 256],
+ 12040: [[20154], 256],
+ 12041: [[20799], 256],
+ 12042: [[20837], 256],
+ 12043: [[20843], 256],
+ 12044: [[20866], 256],
+ 12045: [[20886], 256],
+ 12046: [[20907], 256],
+ 12047: [[20960], 256],
+ 12048: [[20981], 256],
+ 12049: [[20992], 256],
+ 12050: [[21147], 256],
+ 12051: [[21241], 256],
+ 12052: [[21269], 256],
+ 12053: [[21274], 256],
+ 12054: [[21304], 256],
+ 12055: [[21313], 256],
+ 12056: [[21340], 256],
+ 12057: [[21353], 256],
+ 12058: [[21378], 256],
+ 12059: [[21430], 256],
+ 12060: [[21448], 256],
+ 12061: [[21475], 256],
+ 12062: [[22231], 256],
+ 12063: [[22303], 256],
+ 12064: [[22763], 256],
+ 12065: [[22786], 256],
+ 12066: [[22794], 256],
+ 12067: [[22805], 256],
+ 12068: [[22823], 256],
+ 12069: [[22899], 256],
+ 12070: [[23376], 256],
+ 12071: [[23424], 256],
+ 12072: [[23544], 256],
+ 12073: [[23567], 256],
+ 12074: [[23586], 256],
+ 12075: [[23608], 256],
+ 12076: [[23662], 256],
+ 12077: [[23665], 256],
+ 12078: [[24027], 256],
+ 12079: [[24037], 256],
+ 12080: [[24049], 256],
+ 12081: [[24062], 256],
+ 12082: [[24178], 256],
+ 12083: [[24186], 256],
+ 12084: [[24191], 256],
+ 12085: [[24308], 256],
+ 12086: [[24318], 256],
+ 12087: [[24331], 256],
+ 12088: [[24339], 256],
+ 12089: [[24400], 256],
+ 12090: [[24417], 256],
+ 12091: [[24435], 256],
+ 12092: [[24515], 256],
+ 12093: [[25096], 256],
+ 12094: [[25142], 256],
+ 12095: [[25163], 256],
+ 12096: [[25903], 256],
+ 12097: [[25908], 256],
+ 12098: [[25991], 256],
+ 12099: [[26007], 256],
+ 12100: [[26020], 256],
+ 12101: [[26041], 256],
+ 12102: [[26080], 256],
+ 12103: [[26085], 256],
+ 12104: [[26352], 256],
+ 12105: [[26376], 256],
+ 12106: [[26408], 256],
+ 12107: [[27424], 256],
+ 12108: [[27490], 256],
+ 12109: [[27513], 256],
+ 12110: [[27571], 256],
+ 12111: [[27595], 256],
+ 12112: [[27604], 256],
+ 12113: [[27611], 256],
+ 12114: [[27663], 256],
+ 12115: [[27668], 256],
+ 12116: [[27700], 256],
+ 12117: [[28779], 256],
+ 12118: [[29226], 256],
+ 12119: [[29238], 256],
+ 12120: [[29243], 256],
+ 12121: [[29247], 256],
+ 12122: [[29255], 256],
+ 12123: [[29273], 256],
+ 12124: [[29275], 256],
+ 12125: [[29356], 256],
+ 12126: [[29572], 256],
+ 12127: [[29577], 256],
+ 12128: [[29916], 256],
+ 12129: [[29926], 256],
+ 12130: [[29976], 256],
+ 12131: [[29983], 256],
+ 12132: [[29992], 256],
+ 12133: [[30000], 256],
+ 12134: [[30091], 256],
+ 12135: [[30098], 256],
+ 12136: [[30326], 256],
+ 12137: [[30333], 256],
+ 12138: [[30382], 256],
+ 12139: [[30399], 256],
+ 12140: [[30446], 256],
+ 12141: [[30683], 256],
+ 12142: [[30690], 256],
+ 12143: [[30707], 256],
+ 12144: [[31034], 256],
+ 12145: [[31160], 256],
+ 12146: [[31166], 256],
+ 12147: [[31348], 256],
+ 12148: [[31435], 256],
+ 12149: [[31481], 256],
+ 12150: [[31859], 256],
+ 12151: [[31992], 256],
+ 12152: [[32566], 256],
+ 12153: [[32593], 256],
+ 12154: [[32650], 256],
+ 12155: [[32701], 256],
+ 12156: [[32769], 256],
+ 12157: [[32780], 256],
+ 12158: [[32786], 256],
+ 12159: [[32819], 256],
+ 12160: [[32895], 256],
+ 12161: [[32905], 256],
+ 12162: [[33251], 256],
+ 12163: [[33258], 256],
+ 12164: [[33267], 256],
+ 12165: [[33276], 256],
+ 12166: [[33292], 256],
+ 12167: [[33307], 256],
+ 12168: [[33311], 256],
+ 12169: [[33390], 256],
+ 12170: [[33394], 256],
+ 12171: [[33400], 256],
+ 12172: [[34381], 256],
+ 12173: [[34411], 256],
+ 12174: [[34880], 256],
+ 12175: [[34892], 256],
+ 12176: [[34915], 256],
+ 12177: [[35198], 256],
+ 12178: [[35211], 256],
+ 12179: [[35282], 256],
+ 12180: [[35328], 256],
+ 12181: [[35895], 256],
+ 12182: [[35910], 256],
+ 12183: [[35925], 256],
+ 12184: [[35960], 256],
+ 12185: [[35997], 256],
+ 12186: [[36196], 256],
+ 12187: [[36208], 256],
+ 12188: [[36275], 256],
+ 12189: [[36523], 256],
+ 12190: [[36554], 256],
+ 12191: [[36763], 256],
+ 12192: [[36784], 256],
+ 12193: [[36789], 256],
+ 12194: [[37009], 256],
+ 12195: [[37193], 256],
+ 12196: [[37318], 256],
+ 12197: [[37324], 256],
+ 12198: [[37329], 256],
+ 12199: [[38263], 256],
+ 12200: [[38272], 256],
+ 12201: [[38428], 256],
+ 12202: [[38582], 256],
+ 12203: [[38585], 256],
+ 12204: [[38632], 256],
+ 12205: [[38737], 256],
+ 12206: [[38750], 256],
+ 12207: [[38754], 256],
+ 12208: [[38761], 256],
+ 12209: [[38859], 256],
+ 12210: [[38893], 256],
+ 12211: [[38899], 256],
+ 12212: [[38913], 256],
+ 12213: [[39080], 256],
+ 12214: [[39131], 256],
+ 12215: [[39135], 256],
+ 12216: [[39318], 256],
+ 12217: [[39321], 256],
+ 12218: [[39340], 256],
+ 12219: [[39592], 256],
+ 12220: [[39640], 256],
+ 12221: [[39647], 256],
+ 12222: [[39717], 256],
+ 12223: [[39727], 256],
+ 12224: [[39730], 256],
+ 12225: [[39740], 256],
+ 12226: [[39770], 256],
+ 12227: [[40165], 256],
+ 12228: [[40565], 256],
+ 12229: [[40575], 256],
+ 12230: [[40613], 256],
+ 12231: [[40635], 256],
+ 12232: [[40643], 256],
+ 12233: [[40653], 256],
+ 12234: [[40657], 256],
+ 12235: [[40697], 256],
+ 12236: [[40701], 256],
+ 12237: [[40718], 256],
+ 12238: [[40723], 256],
+ 12239: [[40736], 256],
+ 12240: [[40763], 256],
+ 12241: [[40778], 256],
+ 12242: [[40786], 256],
+ 12243: [[40845], 256],
+ 12244: [[40860], 256],
+ 12245: [[40864], 256]
+ },
+ 12288: {
+ 12288: [[32], 256],
+ 12330: [, 218],
+ 12331: [, 228],
+ 12332: [, 232],
+ 12333: [, 222],
+ 12334: [, 224],
+ 12335: [, 224],
+ 12342: [[12306], 256],
+ 12344: [[21313], 256],
+ 12345: [[21316], 256],
+ 12346: [[21317], 256],
+ 12358: [, , { 12441: 12436 }],
+ 12363: [, , { 12441: 12364 }],
+ 12364: [[12363, 12441]],
+ 12365: [, , { 12441: 12366 }],
+ 12366: [[12365, 12441]],
+ 12367: [, , { 12441: 12368 }],
+ 12368: [[12367, 12441]],
+ 12369: [, , { 12441: 12370 }],
+ 12370: [[12369, 12441]],
+ 12371: [, , { 12441: 12372 }],
+ 12372: [[12371, 12441]],
+ 12373: [, , { 12441: 12374 }],
+ 12374: [[12373, 12441]],
+ 12375: [, , { 12441: 12376 }],
+ 12376: [[12375, 12441]],
+ 12377: [, , { 12441: 12378 }],
+ 12378: [[12377, 12441]],
+ 12379: [, , { 12441: 12380 }],
+ 12380: [[12379, 12441]],
+ 12381: [, , { 12441: 12382 }],
+ 12382: [[12381, 12441]],
+ 12383: [, , { 12441: 12384 }],
+ 12384: [[12383, 12441]],
+ 12385: [, , { 12441: 12386 }],
+ 12386: [[12385, 12441]],
+ 12388: [, , { 12441: 12389 }],
+ 12389: [[12388, 12441]],
+ 12390: [, , { 12441: 12391 }],
+ 12391: [[12390, 12441]],
+ 12392: [, , { 12441: 12393 }],
+ 12393: [[12392, 12441]],
+ 12399: [, , { 12441: 12400, 12442: 12401 }],
+ 12400: [[12399, 12441]],
+ 12401: [[12399, 12442]],
+ 12402: [, , { 12441: 12403, 12442: 12404 }],
+ 12403: [[12402, 12441]],
+ 12404: [[12402, 12442]],
+ 12405: [, , { 12441: 12406, 12442: 12407 }],
+ 12406: [[12405, 12441]],
+ 12407: [[12405, 12442]],
+ 12408: [, , { 12441: 12409, 12442: 12410 }],
+ 12409: [[12408, 12441]],
+ 12410: [[12408, 12442]],
+ 12411: [, , { 12441: 12412, 12442: 12413 }],
+ 12412: [[12411, 12441]],
+ 12413: [[12411, 12442]],
+ 12436: [[12358, 12441]],
+ 12441: [, 8],
+ 12442: [, 8],
+ 12443: [[32, 12441], 256],
+ 12444: [[32, 12442], 256],
+ 12445: [, , { 12441: 12446 }],
+ 12446: [[12445, 12441]],
+ 12447: [[12424, 12426], 256],
+ 12454: [, , { 12441: 12532 }],
+ 12459: [, , { 12441: 12460 }],
+ 12460: [[12459, 12441]],
+ 12461: [, , { 12441: 12462 }],
+ 12462: [[12461, 12441]],
+ 12463: [, , { 12441: 12464 }],
+ 12464: [[12463, 12441]],
+ 12465: [, , { 12441: 12466 }],
+ 12466: [[12465, 12441]],
+ 12467: [, , { 12441: 12468 }],
+ 12468: [[12467, 12441]],
+ 12469: [, , { 12441: 12470 }],
+ 12470: [[12469, 12441]],
+ 12471: [, , { 12441: 12472 }],
+ 12472: [[12471, 12441]],
+ 12473: [, , { 12441: 12474 }],
+ 12474: [[12473, 12441]],
+ 12475: [, , { 12441: 12476 }],
+ 12476: [[12475, 12441]],
+ 12477: [, , { 12441: 12478 }],
+ 12478: [[12477, 12441]],
+ 12479: [, , { 12441: 12480 }],
+ 12480: [[12479, 12441]],
+ 12481: [, , { 12441: 12482 }],
+ 12482: [[12481, 12441]],
+ 12484: [, , { 12441: 12485 }],
+ 12485: [[12484, 12441]],
+ 12486: [, , { 12441: 12487 }],
+ 12487: [[12486, 12441]],
+ 12488: [, , { 12441: 12489 }],
+ 12489: [[12488, 12441]],
+ 12495: [, , { 12441: 12496, 12442: 12497 }],
+ 12496: [[12495, 12441]],
+ 12497: [[12495, 12442]],
+ 12498: [, , { 12441: 12499, 12442: 12500 }],
+ 12499: [[12498, 12441]],
+ 12500: [[12498, 12442]],
+ 12501: [, , { 12441: 12502, 12442: 12503 }],
+ 12502: [[12501, 12441]],
+ 12503: [[12501, 12442]],
+ 12504: [, , { 12441: 12505, 12442: 12506 }],
+ 12505: [[12504, 12441]],
+ 12506: [[12504, 12442]],
+ 12507: [, , { 12441: 12508, 12442: 12509 }],
+ 12508: [[12507, 12441]],
+ 12509: [[12507, 12442]],
+ 12527: [, , { 12441: 12535 }],
+ 12528: [, , { 12441: 12536 }],
+ 12529: [, , { 12441: 12537 }],
+ 12530: [, , { 12441: 12538 }],
+ 12532: [[12454, 12441]],
+ 12535: [[12527, 12441]],
+ 12536: [[12528, 12441]],
+ 12537: [[12529, 12441]],
+ 12538: [[12530, 12441]],
+ 12541: [, , { 12441: 12542 }],
+ 12542: [[12541, 12441]],
+ 12543: [[12467, 12488], 256]
+ },
+ 12544: {
+ 12593: [[4352], 256],
+ 12594: [[4353], 256],
+ 12595: [[4522], 256],
+ 12596: [[4354], 256],
+ 12597: [[4524], 256],
+ 12598: [[4525], 256],
+ 12599: [[4355], 256],
+ 12600: [[4356], 256],
+ 12601: [[4357], 256],
+ 12602: [[4528], 256],
+ 12603: [[4529], 256],
+ 12604: [[4530], 256],
+ 12605: [[4531], 256],
+ 12606: [[4532], 256],
+ 12607: [[4533], 256],
+ 12608: [[4378], 256],
+ 12609: [[4358], 256],
+ 12610: [[4359], 256],
+ 12611: [[4360], 256],
+ 12612: [[4385], 256],
+ 12613: [[4361], 256],
+ 12614: [[4362], 256],
+ 12615: [[4363], 256],
+ 12616: [[4364], 256],
+ 12617: [[4365], 256],
+ 12618: [[4366], 256],
+ 12619: [[4367], 256],
+ 12620: [[4368], 256],
+ 12621: [[4369], 256],
+ 12622: [[4370], 256],
+ 12623: [[4449], 256],
+ 12624: [[4450], 256],
+ 12625: [[4451], 256],
+ 12626: [[4452], 256],
+ 12627: [[4453], 256],
+ 12628: [[4454], 256],
+ 12629: [[4455], 256],
+ 12630: [[4456], 256],
+ 12631: [[4457], 256],
+ 12632: [[4458], 256],
+ 12633: [[4459], 256],
+ 12634: [[4460], 256],
+ 12635: [[4461], 256],
+ 12636: [[4462], 256],
+ 12637: [[4463], 256],
+ 12638: [[4464], 256],
+ 12639: [[4465], 256],
+ 12640: [[4466], 256],
+ 12641: [[4467], 256],
+ 12642: [[4468], 256],
+ 12643: [[4469], 256],
+ 12644: [[4448], 256],
+ 12645: [[4372], 256],
+ 12646: [[4373], 256],
+ 12647: [[4551], 256],
+ 12648: [[4552], 256],
+ 12649: [[4556], 256],
+ 12650: [[4558], 256],
+ 12651: [[4563], 256],
+ 12652: [[4567], 256],
+ 12653: [[4569], 256],
+ 12654: [[4380], 256],
+ 12655: [[4573], 256],
+ 12656: [[4575], 256],
+ 12657: [[4381], 256],
+ 12658: [[4382], 256],
+ 12659: [[4384], 256],
+ 12660: [[4386], 256],
+ 12661: [[4387], 256],
+ 12662: [[4391], 256],
+ 12663: [[4393], 256],
+ 12664: [[4395], 256],
+ 12665: [[4396], 256],
+ 12666: [[4397], 256],
+ 12667: [[4398], 256],
+ 12668: [[4399], 256],
+ 12669: [[4402], 256],
+ 12670: [[4406], 256],
+ 12671: [[4416], 256],
+ 12672: [[4423], 256],
+ 12673: [[4428], 256],
+ 12674: [[4593], 256],
+ 12675: [[4594], 256],
+ 12676: [[4439], 256],
+ 12677: [[4440], 256],
+ 12678: [[4441], 256],
+ 12679: [[4484], 256],
+ 12680: [[4485], 256],
+ 12681: [[4488], 256],
+ 12682: [[4497], 256],
+ 12683: [[4498], 256],
+ 12684: [[4500], 256],
+ 12685: [[4510], 256],
+ 12686: [[4513], 256],
+ 12690: [[19968], 256],
+ 12691: [[20108], 256],
+ 12692: [[19977], 256],
+ 12693: [[22235], 256],
+ 12694: [[19978], 256],
+ 12695: [[20013], 256],
+ 12696: [[19979], 256],
+ 12697: [[30002], 256],
+ 12698: [[20057], 256],
+ 12699: [[19993], 256],
+ 12700: [[19969], 256],
+ 12701: [[22825], 256],
+ 12702: [[22320], 256],
+ 12703: [[20154], 256]
+ },
+ 12800: {
+ 12800: [[40, 4352, 41], 256],
+ 12801: [[40, 4354, 41], 256],
+ 12802: [[40, 4355, 41], 256],
+ 12803: [[40, 4357, 41], 256],
+ 12804: [[40, 4358, 41], 256],
+ 12805: [[40, 4359, 41], 256],
+ 12806: [[40, 4361, 41], 256],
+ 12807: [[40, 4363, 41], 256],
+ 12808: [[40, 4364, 41], 256],
+ 12809: [[40, 4366, 41], 256],
+ 12810: [[40, 4367, 41], 256],
+ 12811: [[40, 4368, 41], 256],
+ 12812: [[40, 4369, 41], 256],
+ 12813: [[40, 4370, 41], 256],
+ 12814: [[40, 4352, 4449, 41], 256],
+ 12815: [[40, 4354, 4449, 41], 256],
+ 12816: [[40, 4355, 4449, 41], 256],
+ 12817: [[40, 4357, 4449, 41], 256],
+ 12818: [[40, 4358, 4449, 41], 256],
+ 12819: [[40, 4359, 4449, 41], 256],
+ 12820: [[40, 4361, 4449, 41], 256],
+ 12821: [[40, 4363, 4449, 41], 256],
+ 12822: [[40, 4364, 4449, 41], 256],
+ 12823: [[40, 4366, 4449, 41], 256],
+ 12824: [[40, 4367, 4449, 41], 256],
+ 12825: [[40, 4368, 4449, 41], 256],
+ 12826: [[40, 4369, 4449, 41], 256],
+ 12827: [[40, 4370, 4449, 41], 256],
+ 12828: [[40, 4364, 4462, 41], 256],
+ 12829: [[40, 4363, 4457, 4364, 4453, 4523, 41], 256],
+ 12830: [[40, 4363, 4457, 4370, 4462, 41], 256],
+ 12832: [[40, 19968, 41], 256],
+ 12833: [[40, 20108, 41], 256],
+ 12834: [[40, 19977, 41], 256],
+ 12835: [[40, 22235, 41], 256],
+ 12836: [[40, 20116, 41], 256],
+ 12837: [[40, 20845, 41], 256],
+ 12838: [[40, 19971, 41], 256],
+ 12839: [[40, 20843, 41], 256],
+ 12840: [[40, 20061, 41], 256],
+ 12841: [[40, 21313, 41], 256],
+ 12842: [[40, 26376, 41], 256],
+ 12843: [[40, 28779, 41], 256],
+ 12844: [[40, 27700, 41], 256],
+ 12845: [[40, 26408, 41], 256],
+ 12846: [[40, 37329, 41], 256],
+ 12847: [[40, 22303, 41], 256],
+ 12848: [[40, 26085, 41], 256],
+ 12849: [[40, 26666, 41], 256],
+ 12850: [[40, 26377, 41], 256],
+ 12851: [[40, 31038, 41], 256],
+ 12852: [[40, 21517, 41], 256],
+ 12853: [[40, 29305, 41], 256],
+ 12854: [[40, 36001, 41], 256],
+ 12855: [[40, 31069, 41], 256],
+ 12856: [[40, 21172, 41], 256],
+ 12857: [[40, 20195, 41], 256],
+ 12858: [[40, 21628, 41], 256],
+ 12859: [[40, 23398, 41], 256],
+ 12860: [[40, 30435, 41], 256],
+ 12861: [[40, 20225, 41], 256],
+ 12862: [[40, 36039, 41], 256],
+ 12863: [[40, 21332, 41], 256],
+ 12864: [[40, 31085, 41], 256],
+ 12865: [[40, 20241, 41], 256],
+ 12866: [[40, 33258, 41], 256],
+ 12867: [[40, 33267, 41], 256],
+ 12868: [[21839], 256],
+ 12869: [[24188], 256],
+ 12870: [[25991], 256],
+ 12871: [[31631], 256],
+ 12880: [[80, 84, 69], 256],
+ 12881: [[50, 49], 256],
+ 12882: [[50, 50], 256],
+ 12883: [[50, 51], 256],
+ 12884: [[50, 52], 256],
+ 12885: [[50, 53], 256],
+ 12886: [[50, 54], 256],
+ 12887: [[50, 55], 256],
+ 12888: [[50, 56], 256],
+ 12889: [[50, 57], 256],
+ 12890: [[51, 48], 256],
+ 12891: [[51, 49], 256],
+ 12892: [[51, 50], 256],
+ 12893: [[51, 51], 256],
+ 12894: [[51, 52], 256],
+ 12895: [[51, 53], 256],
+ 12896: [[4352], 256],
+ 12897: [[4354], 256],
+ 12898: [[4355], 256],
+ 12899: [[4357], 256],
+ 12900: [[4358], 256],
+ 12901: [[4359], 256],
+ 12902: [[4361], 256],
+ 12903: [[4363], 256],
+ 12904: [[4364], 256],
+ 12905: [[4366], 256],
+ 12906: [[4367], 256],
+ 12907: [[4368], 256],
+ 12908: [[4369], 256],
+ 12909: [[4370], 256],
+ 12910: [[4352, 4449], 256],
+ 12911: [[4354, 4449], 256],
+ 12912: [[4355, 4449], 256],
+ 12913: [[4357, 4449], 256],
+ 12914: [[4358, 4449], 256],
+ 12915: [[4359, 4449], 256],
+ 12916: [[4361, 4449], 256],
+ 12917: [[4363, 4449], 256],
+ 12918: [[4364, 4449], 256],
+ 12919: [[4366, 4449], 256],
+ 12920: [[4367, 4449], 256],
+ 12921: [[4368, 4449], 256],
+ 12922: [[4369, 4449], 256],
+ 12923: [[4370, 4449], 256],
+ 12924: [[4366, 4449, 4535, 4352, 4457], 256],
+ 12925: [[4364, 4462, 4363, 4468], 256],
+ 12926: [[4363, 4462], 256],
+ 12928: [[19968], 256],
+ 12929: [[20108], 256],
+ 12930: [[19977], 256],
+ 12931: [[22235], 256],
+ 12932: [[20116], 256],
+ 12933: [[20845], 256],
+ 12934: [[19971], 256],
+ 12935: [[20843], 256],
+ 12936: [[20061], 256],
+ 12937: [[21313], 256],
+ 12938: [[26376], 256],
+ 12939: [[28779], 256],
+ 12940: [[27700], 256],
+ 12941: [[26408], 256],
+ 12942: [[37329], 256],
+ 12943: [[22303], 256],
+ 12944: [[26085], 256],
+ 12945: [[26666], 256],
+ 12946: [[26377], 256],
+ 12947: [[31038], 256],
+ 12948: [[21517], 256],
+ 12949: [[29305], 256],
+ 12950: [[36001], 256],
+ 12951: [[31069], 256],
+ 12952: [[21172], 256],
+ 12953: [[31192], 256],
+ 12954: [[30007], 256],
+ 12955: [[22899], 256],
+ 12956: [[36969], 256],
+ 12957: [[20778], 256],
+ 12958: [[21360], 256],
+ 12959: [[27880], 256],
+ 12960: [[38917], 256],
+ 12961: [[20241], 256],
+ 12962: [[20889], 256],
+ 12963: [[27491], 256],
+ 12964: [[19978], 256],
+ 12965: [[20013], 256],
+ 12966: [[19979], 256],
+ 12967: [[24038], 256],
+ 12968: [[21491], 256],
+ 12969: [[21307], 256],
+ 12970: [[23447], 256],
+ 12971: [[23398], 256],
+ 12972: [[30435], 256],
+ 12973: [[20225], 256],
+ 12974: [[36039], 256],
+ 12975: [[21332], 256],
+ 12976: [[22812], 256],
+ 12977: [[51, 54], 256],
+ 12978: [[51, 55], 256],
+ 12979: [[51, 56], 256],
+ 12980: [[51, 57], 256],
+ 12981: [[52, 48], 256],
+ 12982: [[52, 49], 256],
+ 12983: [[52, 50], 256],
+ 12984: [[52, 51], 256],
+ 12985: [[52, 52], 256],
+ 12986: [[52, 53], 256],
+ 12987: [[52, 54], 256],
+ 12988: [[52, 55], 256],
+ 12989: [[52, 56], 256],
+ 12990: [[52, 57], 256],
+ 12991: [[53, 48], 256],
+ 12992: [[49, 26376], 256],
+ 12993: [[50, 26376], 256],
+ 12994: [[51, 26376], 256],
+ 12995: [[52, 26376], 256],
+ 12996: [[53, 26376], 256],
+ 12997: [[54, 26376], 256],
+ 12998: [[55, 26376], 256],
+ 12999: [[56, 26376], 256],
+ 13000: [[57, 26376], 256],
+ 13001: [[49, 48, 26376], 256],
+ 13002: [[49, 49, 26376], 256],
+ 13003: [[49, 50, 26376], 256],
+ 13004: [[72, 103], 256],
+ 13005: [[101, 114, 103], 256],
+ 13006: [[101, 86], 256],
+ 13007: [[76, 84, 68], 256],
+ 13008: [[12450], 256],
+ 13009: [[12452], 256],
+ 13010: [[12454], 256],
+ 13011: [[12456], 256],
+ 13012: [[12458], 256],
+ 13013: [[12459], 256],
+ 13014: [[12461], 256],
+ 13015: [[12463], 256],
+ 13016: [[12465], 256],
+ 13017: [[12467], 256],
+ 13018: [[12469], 256],
+ 13019: [[12471], 256],
+ 13020: [[12473], 256],
+ 13021: [[12475], 256],
+ 13022: [[12477], 256],
+ 13023: [[12479], 256],
+ 13024: [[12481], 256],
+ 13025: [[12484], 256],
+ 13026: [[12486], 256],
+ 13027: [[12488], 256],
+ 13028: [[12490], 256],
+ 13029: [[12491], 256],
+ 13030: [[12492], 256],
+ 13031: [[12493], 256],
+ 13032: [[12494], 256],
+ 13033: [[12495], 256],
+ 13034: [[12498], 256],
+ 13035: [[12501], 256],
+ 13036: [[12504], 256],
+ 13037: [[12507], 256],
+ 13038: [[12510], 256],
+ 13039: [[12511], 256],
+ 13040: [[12512], 256],
+ 13041: [[12513], 256],
+ 13042: [[12514], 256],
+ 13043: [[12516], 256],
+ 13044: [[12518], 256],
+ 13045: [[12520], 256],
+ 13046: [[12521], 256],
+ 13047: [[12522], 256],
+ 13048: [[12523], 256],
+ 13049: [[12524], 256],
+ 13050: [[12525], 256],
+ 13051: [[12527], 256],
+ 13052: [[12528], 256],
+ 13053: [[12529], 256],
+ 13054: [[12530], 256]
+ },
+ 13056: {
+ 13056: [[12450, 12497, 12540, 12488], 256],
+ 13057: [[12450, 12523, 12501, 12449], 256],
+ 13058: [[12450, 12531, 12506, 12450], 256],
+ 13059: [[12450, 12540, 12523], 256],
+ 13060: [[12452, 12491, 12531, 12464], 256],
+ 13061: [[12452, 12531, 12481], 256],
+ 13062: [[12454, 12457, 12531], 256],
+ 13063: [[12456, 12473, 12463, 12540, 12489], 256],
+ 13064: [[12456, 12540, 12459, 12540], 256],
+ 13065: [[12458, 12531, 12473], 256],
+ 13066: [[12458, 12540, 12512], 256],
+ 13067: [[12459, 12452, 12522], 256],
+ 13068: [[12459, 12521, 12483, 12488], 256],
+ 13069: [[12459, 12525, 12522, 12540], 256],
+ 13070: [[12460, 12525, 12531], 256],
+ 13071: [[12460, 12531, 12510], 256],
+ 13072: [[12462, 12460], 256],
+ 13073: [[12462, 12491, 12540], 256],
+ 13074: [[12461, 12517, 12522, 12540], 256],
+ 13075: [[12462, 12523, 12480, 12540], 256],
+ 13076: [[12461, 12525], 256],
+ 13077: [[12461, 12525, 12464, 12521, 12512], 256],
+ 13078: [[12461, 12525, 12513, 12540, 12488, 12523], 256],
+ 13079: [[12461, 12525, 12527, 12483, 12488], 256],
+ 13080: [[12464, 12521, 12512], 256],
+ 13081: [[12464, 12521, 12512, 12488, 12531], 256],
+ 13082: [[12463, 12523, 12476, 12452, 12525], 256],
+ 13083: [[12463, 12525, 12540, 12493], 256],
+ 13084: [[12465, 12540, 12473], 256],
+ 13085: [[12467, 12523, 12490], 256],
+ 13086: [[12467, 12540, 12509], 256],
+ 13087: [[12469, 12452, 12463, 12523], 256],
+ 13088: [[12469, 12531, 12481, 12540, 12512], 256],
+ 13089: [[12471, 12522, 12531, 12464], 256],
+ 13090: [[12475, 12531, 12481], 256],
+ 13091: [[12475, 12531, 12488], 256],
+ 13092: [[12480, 12540, 12473], 256],
+ 13093: [[12487, 12471], 256],
+ 13094: [[12489, 12523], 256],
+ 13095: [[12488, 12531], 256],
+ 13096: [[12490, 12494], 256],
+ 13097: [[12494, 12483, 12488], 256],
+ 13098: [[12495, 12452, 12484], 256],
+ 13099: [[12497, 12540, 12475, 12531, 12488], 256],
+ 13100: [[12497, 12540, 12484], 256],
+ 13101: [[12496, 12540, 12524, 12523], 256],
+ 13102: [[12500, 12450, 12473, 12488, 12523], 256],
+ 13103: [[12500, 12463, 12523], 256],
+ 13104: [[12500, 12467], 256],
+ 13105: [[12499, 12523], 256],
+ 13106: [[12501, 12449, 12521, 12483, 12489], 256],
+ 13107: [[12501, 12451, 12540, 12488], 256],
+ 13108: [[12502, 12483, 12471, 12455, 12523], 256],
+ 13109: [[12501, 12521, 12531], 256],
+ 13110: [[12504, 12463, 12479, 12540, 12523], 256],
+ 13111: [[12506, 12477], 256],
+ 13112: [[12506, 12491, 12498], 256],
+ 13113: [[12504, 12523, 12484], 256],
+ 13114: [[12506, 12531, 12473], 256],
+ 13115: [[12506, 12540, 12472], 256],
+ 13116: [[12505, 12540, 12479], 256],
+ 13117: [[12509, 12452, 12531, 12488], 256],
+ 13118: [[12508, 12523, 12488], 256],
+ 13119: [[12507, 12531], 256],
+ 13120: [[12509, 12531, 12489], 256],
+ 13121: [[12507, 12540, 12523], 256],
+ 13122: [[12507, 12540, 12531], 256],
+ 13123: [[12510, 12452, 12463, 12525], 256],
+ 13124: [[12510, 12452, 12523], 256],
+ 13125: [[12510, 12483, 12495], 256],
+ 13126: [[12510, 12523, 12463], 256],
+ 13127: [[12510, 12531, 12471, 12519, 12531], 256],
+ 13128: [[12511, 12463, 12525, 12531], 256],
+ 13129: [[12511, 12522], 256],
+ 13130: [[12511, 12522, 12496, 12540, 12523], 256],
+ 13131: [[12513, 12460], 256],
+ 13132: [[12513, 12460, 12488, 12531], 256],
+ 13133: [[12513, 12540, 12488, 12523], 256],
+ 13134: [[12516, 12540, 12489], 256],
+ 13135: [[12516, 12540, 12523], 256],
+ 13136: [[12518, 12450, 12531], 256],
+ 13137: [[12522, 12483, 12488, 12523], 256],
+ 13138: [[12522, 12521], 256],
+ 13139: [[12523, 12500, 12540], 256],
+ 13140: [[12523, 12540, 12502, 12523], 256],
+ 13141: [[12524, 12512], 256],
+ 13142: [[12524, 12531, 12488, 12466, 12531], 256],
+ 13143: [[12527, 12483, 12488], 256],
+ 13144: [[48, 28857], 256],
+ 13145: [[49, 28857], 256],
+ 13146: [[50, 28857], 256],
+ 13147: [[51, 28857], 256],
+ 13148: [[52, 28857], 256],
+ 13149: [[53, 28857], 256],
+ 13150: [[54, 28857], 256],
+ 13151: [[55, 28857], 256],
+ 13152: [[56, 28857], 256],
+ 13153: [[57, 28857], 256],
+ 13154: [[49, 48, 28857], 256],
+ 13155: [[49, 49, 28857], 256],
+ 13156: [[49, 50, 28857], 256],
+ 13157: [[49, 51, 28857], 256],
+ 13158: [[49, 52, 28857], 256],
+ 13159: [[49, 53, 28857], 256],
+ 13160: [[49, 54, 28857], 256],
+ 13161: [[49, 55, 28857], 256],
+ 13162: [[49, 56, 28857], 256],
+ 13163: [[49, 57, 28857], 256],
+ 13164: [[50, 48, 28857], 256],
+ 13165: [[50, 49, 28857], 256],
+ 13166: [[50, 50, 28857], 256],
+ 13167: [[50, 51, 28857], 256],
+ 13168: [[50, 52, 28857], 256],
+ 13169: [[104, 80, 97], 256],
+ 13170: [[100, 97], 256],
+ 13171: [[65, 85], 256],
+ 13172: [[98, 97, 114], 256],
+ 13173: [[111, 86], 256],
+ 13174: [[112, 99], 256],
+ 13175: [[100, 109], 256],
+ 13176: [[100, 109, 178], 256],
+ 13177: [[100, 109, 179], 256],
+ 13178: [[73, 85], 256],
+ 13179: [[24179, 25104], 256],
+ 13180: [[26157, 21644], 256],
+ 13181: [[22823, 27491], 256],
+ 13182: [[26126, 27835], 256],
+ 13183: [[26666, 24335, 20250, 31038], 256],
+ 13184: [[112, 65], 256],
+ 13185: [[110, 65], 256],
+ 13186: [[956, 65], 256],
+ 13187: [[109, 65], 256],
+ 13188: [[107, 65], 256],
+ 13189: [[75, 66], 256],
+ 13190: [[77, 66], 256],
+ 13191: [[71, 66], 256],
+ 13192: [[99, 97, 108], 256],
+ 13193: [[107, 99, 97, 108], 256],
+ 13194: [[112, 70], 256],
+ 13195: [[110, 70], 256],
+ 13196: [[956, 70], 256],
+ 13197: [[956, 103], 256],
+ 13198: [[109, 103], 256],
+ 13199: [[107, 103], 256],
+ 13200: [[72, 122], 256],
+ 13201: [[107, 72, 122], 256],
+ 13202: [[77, 72, 122], 256],
+ 13203: [[71, 72, 122], 256],
+ 13204: [[84, 72, 122], 256],
+ 13205: [[956, 8467], 256],
+ 13206: [[109, 8467], 256],
+ 13207: [[100, 8467], 256],
+ 13208: [[107, 8467], 256],
+ 13209: [[102, 109], 256],
+ 13210: [[110, 109], 256],
+ 13211: [[956, 109], 256],
+ 13212: [[109, 109], 256],
+ 13213: [[99, 109], 256],
+ 13214: [[107, 109], 256],
+ 13215: [[109, 109, 178], 256],
+ 13216: [[99, 109, 178], 256],
+ 13217: [[109, 178], 256],
+ 13218: [[107, 109, 178], 256],
+ 13219: [[109, 109, 179], 256],
+ 13220: [[99, 109, 179], 256],
+ 13221: [[109, 179], 256],
+ 13222: [[107, 109, 179], 256],
+ 13223: [[109, 8725, 115], 256],
+ 13224: [[109, 8725, 115, 178], 256],
+ 13225: [[80, 97], 256],
+ 13226: [[107, 80, 97], 256],
+ 13227: [[77, 80, 97], 256],
+ 13228: [[71, 80, 97], 256],
+ 13229: [[114, 97, 100], 256],
+ 13230: [[114, 97, 100, 8725, 115], 256],
+ 13231: [[114, 97, 100, 8725, 115, 178], 256],
+ 13232: [[112, 115], 256],
+ 13233: [[110, 115], 256],
+ 13234: [[956, 115], 256],
+ 13235: [[109, 115], 256],
+ 13236: [[112, 86], 256],
+ 13237: [[110, 86], 256],
+ 13238: [[956, 86], 256],
+ 13239: [[109, 86], 256],
+ 13240: [[107, 86], 256],
+ 13241: [[77, 86], 256],
+ 13242: [[112, 87], 256],
+ 13243: [[110, 87], 256],
+ 13244: [[956, 87], 256],
+ 13245: [[109, 87], 256],
+ 13246: [[107, 87], 256],
+ 13247: [[77, 87], 256],
+ 13248: [[107, 937], 256],
+ 13249: [[77, 937], 256],
+ 13250: [[97, 46, 109, 46], 256],
+ 13251: [[66, 113], 256],
+ 13252: [[99, 99], 256],
+ 13253: [[99, 100], 256],
+ 13254: [[67, 8725, 107, 103], 256],
+ 13255: [[67, 111, 46], 256],
+ 13256: [[100, 66], 256],
+ 13257: [[71, 121], 256],
+ 13258: [[104, 97], 256],
+ 13259: [[72, 80], 256],
+ 13260: [[105, 110], 256],
+ 13261: [[75, 75], 256],
+ 13262: [[75, 77], 256],
+ 13263: [[107, 116], 256],
+ 13264: [[108, 109], 256],
+ 13265: [[108, 110], 256],
+ 13266: [[108, 111, 103], 256],
+ 13267: [[108, 120], 256],
+ 13268: [[109, 98], 256],
+ 13269: [[109, 105, 108], 256],
+ 13270: [[109, 111, 108], 256],
+ 13271: [[80, 72], 256],
+ 13272: [[112, 46, 109, 46], 256],
+ 13273: [[80, 80, 77], 256],
+ 13274: [[80, 82], 256],
+ 13275: [[115, 114], 256],
+ 13276: [[83, 118], 256],
+ 13277: [[87, 98], 256],
+ 13278: [[86, 8725, 109], 256],
+ 13279: [[65, 8725, 109], 256],
+ 13280: [[49, 26085], 256],
+ 13281: [[50, 26085], 256],
+ 13282: [[51, 26085], 256],
+ 13283: [[52, 26085], 256],
+ 13284: [[53, 26085], 256],
+ 13285: [[54, 26085], 256],
+ 13286: [[55, 26085], 256],
+ 13287: [[56, 26085], 256],
+ 13288: [[57, 26085], 256],
+ 13289: [[49, 48, 26085], 256],
+ 13290: [[49, 49, 26085], 256],
+ 13291: [[49, 50, 26085], 256],
+ 13292: [[49, 51, 26085], 256],
+ 13293: [[49, 52, 26085], 256],
+ 13294: [[49, 53, 26085], 256],
+ 13295: [[49, 54, 26085], 256],
+ 13296: [[49, 55, 26085], 256],
+ 13297: [[49, 56, 26085], 256],
+ 13298: [[49, 57, 26085], 256],
+ 13299: [[50, 48, 26085], 256],
+ 13300: [[50, 49, 26085], 256],
+ 13301: [[50, 50, 26085], 256],
+ 13302: [[50, 51, 26085], 256],
+ 13303: [[50, 52, 26085], 256],
+ 13304: [[50, 53, 26085], 256],
+ 13305: [[50, 54, 26085], 256],
+ 13306: [[50, 55, 26085], 256],
+ 13307: [[50, 56, 26085], 256],
+ 13308: [[50, 57, 26085], 256],
+ 13309: [[51, 48, 26085], 256],
+ 13310: [[51, 49, 26085], 256],
+ 13311: [[103, 97, 108], 256]
+ },
+ 42496: {
+ 42607: [, 230],
+ 42612: [, 230],
+ 42613: [, 230],
+ 42614: [, 230],
+ 42615: [, 230],
+ 42616: [, 230],
+ 42617: [, 230],
+ 42618: [, 230],
+ 42619: [, 230],
+ 42620: [, 230],
+ 42621: [, 230],
+ 42655: [, 230],
+ 42736: [, 230],
+ 42737: [, 230]
+ },
+ 42752: { 42864: [[42863], 256], 43000: [[294], 256], 43001: [[339], 256] },
+ 43008: {
+ 43014: [, 9],
+ 43204: [, 9],
+ 43232: [, 230],
+ 43233: [, 230],
+ 43234: [, 230],
+ 43235: [, 230],
+ 43236: [, 230],
+ 43237: [, 230],
+ 43238: [, 230],
+ 43239: [, 230],
+ 43240: [, 230],
+ 43241: [, 230],
+ 43242: [, 230],
+ 43243: [, 230],
+ 43244: [, 230],
+ 43245: [, 230],
+ 43246: [, 230],
+ 43247: [, 230],
+ 43248: [, 230],
+ 43249: [, 230]
+ },
+ 43264: {
+ 43307: [, 220],
+ 43308: [, 220],
+ 43309: [, 220],
+ 43347: [, 9],
+ 43443: [, 7],
+ 43456: [, 9]
+ },
+ 43520: {
+ 43696: [, 230],
+ 43698: [, 230],
+ 43699: [, 230],
+ 43700: [, 220],
+ 43703: [, 230],
+ 43704: [, 230],
+ 43710: [, 230],
+ 43711: [, 230],
+ 43713: [, 230],
+ 43766: [, 9]
+ },
+ 43776: { 44013: [, 9] },
+ 53504: {
+ 119134: [[119127, 119141], 512],
+ 119135: [[119128, 119141], 512],
+ 119136: [[119135, 119150], 512],
+ 119137: [[119135, 119151], 512],
+ 119138: [[119135, 119152], 512],
+ 119139: [[119135, 119153], 512],
+ 119140: [[119135, 119154], 512],
+ 119141: [, 216],
+ 119142: [, 216],
+ 119143: [, 1],
+ 119144: [, 1],
+ 119145: [, 1],
+ 119149: [, 226],
+ 119150: [, 216],
+ 119151: [, 216],
+ 119152: [, 216],
+ 119153: [, 216],
+ 119154: [, 216],
+ 119163: [, 220],
+ 119164: [, 220],
+ 119165: [, 220],
+ 119166: [, 220],
+ 119167: [, 220],
+ 119168: [, 220],
+ 119169: [, 220],
+ 119170: [, 220],
+ 119173: [, 230],
+ 119174: [, 230],
+ 119175: [, 230],
+ 119176: [, 230],
+ 119177: [, 230],
+ 119178: [, 220],
+ 119179: [, 220],
+ 119210: [, 230],
+ 119211: [, 230],
+ 119212: [, 230],
+ 119213: [, 230],
+ 119227: [[119225, 119141], 512],
+ 119228: [[119226, 119141], 512],
+ 119229: [[119227, 119150], 512],
+ 119230: [[119228, 119150], 512],
+ 119231: [[119227, 119151], 512],
+ 119232: [[119228, 119151], 512]
+ },
+ 53760: { 119362: [, 230], 119363: [, 230], 119364: [, 230] },
+ 54272: {
+ 119808: [[65], 256],
+ 119809: [[66], 256],
+ 119810: [[67], 256],
+ 119811: [[68], 256],
+ 119812: [[69], 256],
+ 119813: [[70], 256],
+ 119814: [[71], 256],
+ 119815: [[72], 256],
+ 119816: [[73], 256],
+ 119817: [[74], 256],
+ 119818: [[75], 256],
+ 119819: [[76], 256],
+ 119820: [[77], 256],
+ 119821: [[78], 256],
+ 119822: [[79], 256],
+ 119823: [[80], 256],
+ 119824: [[81], 256],
+ 119825: [[82], 256],
+ 119826: [[83], 256],
+ 119827: [[84], 256],
+ 119828: [[85], 256],
+ 119829: [[86], 256],
+ 119830: [[87], 256],
+ 119831: [[88], 256],
+ 119832: [[89], 256],
+ 119833: [[90], 256],
+ 119834: [[97], 256],
+ 119835: [[98], 256],
+ 119836: [[99], 256],
+ 119837: [[100], 256],
+ 119838: [[101], 256],
+ 119839: [[102], 256],
+ 119840: [[103], 256],
+ 119841: [[104], 256],
+ 119842: [[105], 256],
+ 119843: [[106], 256],
+ 119844: [[107], 256],
+ 119845: [[108], 256],
+ 119846: [[109], 256],
+ 119847: [[110], 256],
+ 119848: [[111], 256],
+ 119849: [[112], 256],
+ 119850: [[113], 256],
+ 119851: [[114], 256],
+ 119852: [[115], 256],
+ 119853: [[116], 256],
+ 119854: [[117], 256],
+ 119855: [[118], 256],
+ 119856: [[119], 256],
+ 119857: [[120], 256],
+ 119858: [[121], 256],
+ 119859: [[122], 256],
+ 119860: [[65], 256],
+ 119861: [[66], 256],
+ 119862: [[67], 256],
+ 119863: [[68], 256],
+ 119864: [[69], 256],
+ 119865: [[70], 256],
+ 119866: [[71], 256],
+ 119867: [[72], 256],
+ 119868: [[73], 256],
+ 119869: [[74], 256],
+ 119870: [[75], 256],
+ 119871: [[76], 256],
+ 119872: [[77], 256],
+ 119873: [[78], 256],
+ 119874: [[79], 256],
+ 119875: [[80], 256],
+ 119876: [[81], 256],
+ 119877: [[82], 256],
+ 119878: [[83], 256],
+ 119879: [[84], 256],
+ 119880: [[85], 256],
+ 119881: [[86], 256],
+ 119882: [[87], 256],
+ 119883: [[88], 256],
+ 119884: [[89], 256],
+ 119885: [[90], 256],
+ 119886: [[97], 256],
+ 119887: [[98], 256],
+ 119888: [[99], 256],
+ 119889: [[100], 256],
+ 119890: [[101], 256],
+ 119891: [[102], 256],
+ 119892: [[103], 256],
+ 119894: [[105], 256],
+ 119895: [[106], 256],
+ 119896: [[107], 256],
+ 119897: [[108], 256],
+ 119898: [[109], 256],
+ 119899: [[110], 256],
+ 119900: [[111], 256],
+ 119901: [[112], 256],
+ 119902: [[113], 256],
+ 119903: [[114], 256],
+ 119904: [[115], 256],
+ 119905: [[116], 256],
+ 119906: [[117], 256],
+ 119907: [[118], 256],
+ 119908: [[119], 256],
+ 119909: [[120], 256],
+ 119910: [[121], 256],
+ 119911: [[122], 256],
+ 119912: [[65], 256],
+ 119913: [[66], 256],
+ 119914: [[67], 256],
+ 119915: [[68], 256],
+ 119916: [[69], 256],
+ 119917: [[70], 256],
+ 119918: [[71], 256],
+ 119919: [[72], 256],
+ 119920: [[73], 256],
+ 119921: [[74], 256],
+ 119922: [[75], 256],
+ 119923: [[76], 256],
+ 119924: [[77], 256],
+ 119925: [[78], 256],
+ 119926: [[79], 256],
+ 119927: [[80], 256],
+ 119928: [[81], 256],
+ 119929: [[82], 256],
+ 119930: [[83], 256],
+ 119931: [[84], 256],
+ 119932: [[85], 256],
+ 119933: [[86], 256],
+ 119934: [[87], 256],
+ 119935: [[88], 256],
+ 119936: [[89], 256],
+ 119937: [[90], 256],
+ 119938: [[97], 256],
+ 119939: [[98], 256],
+ 119940: [[99], 256],
+ 119941: [[100], 256],
+ 119942: [[101], 256],
+ 119943: [[102], 256],
+ 119944: [[103], 256],
+ 119945: [[104], 256],
+ 119946: [[105], 256],
+ 119947: [[106], 256],
+ 119948: [[107], 256],
+ 119949: [[108], 256],
+ 119950: [[109], 256],
+ 119951: [[110], 256],
+ 119952: [[111], 256],
+ 119953: [[112], 256],
+ 119954: [[113], 256],
+ 119955: [[114], 256],
+ 119956: [[115], 256],
+ 119957: [[116], 256],
+ 119958: [[117], 256],
+ 119959: [[118], 256],
+ 119960: [[119], 256],
+ 119961: [[120], 256],
+ 119962: [[121], 256],
+ 119963: [[122], 256],
+ 119964: [[65], 256],
+ 119966: [[67], 256],
+ 119967: [[68], 256],
+ 119970: [[71], 256],
+ 119973: [[74], 256],
+ 119974: [[75], 256],
+ 119977: [[78], 256],
+ 119978: [[79], 256],
+ 119979: [[80], 256],
+ 119980: [[81], 256],
+ 119982: [[83], 256],
+ 119983: [[84], 256],
+ 119984: [[85], 256],
+ 119985: [[86], 256],
+ 119986: [[87], 256],
+ 119987: [[88], 256],
+ 119988: [[89], 256],
+ 119989: [[90], 256],
+ 119990: [[97], 256],
+ 119991: [[98], 256],
+ 119992: [[99], 256],
+ 119993: [[100], 256],
+ 119995: [[102], 256],
+ 119997: [[104], 256],
+ 119998: [[105], 256],
+ 119999: [[106], 256],
+ 120000: [[107], 256],
+ 120001: [[108], 256],
+ 120002: [[109], 256],
+ 120003: [[110], 256],
+ 120005: [[112], 256],
+ 120006: [[113], 256],
+ 120007: [[114], 256],
+ 120008: [[115], 256],
+ 120009: [[116], 256],
+ 120010: [[117], 256],
+ 120011: [[118], 256],
+ 120012: [[119], 256],
+ 120013: [[120], 256],
+ 120014: [[121], 256],
+ 120015: [[122], 256],
+ 120016: [[65], 256],
+ 120017: [[66], 256],
+ 120018: [[67], 256],
+ 120019: [[68], 256],
+ 120020: [[69], 256],
+ 120021: [[70], 256],
+ 120022: [[71], 256],
+ 120023: [[72], 256],
+ 120024: [[73], 256],
+ 120025: [[74], 256],
+ 120026: [[75], 256],
+ 120027: [[76], 256],
+ 120028: [[77], 256],
+ 120029: [[78], 256],
+ 120030: [[79], 256],
+ 120031: [[80], 256],
+ 120032: [[81], 256],
+ 120033: [[82], 256],
+ 120034: [[83], 256],
+ 120035: [[84], 256],
+ 120036: [[85], 256],
+ 120037: [[86], 256],
+ 120038: [[87], 256],
+ 120039: [[88], 256],
+ 120040: [[89], 256],
+ 120041: [[90], 256],
+ 120042: [[97], 256],
+ 120043: [[98], 256],
+ 120044: [[99], 256],
+ 120045: [[100], 256],
+ 120046: [[101], 256],
+ 120047: [[102], 256],
+ 120048: [[103], 256],
+ 120049: [[104], 256],
+ 120050: [[105], 256],
+ 120051: [[106], 256],
+ 120052: [[107], 256],
+ 120053: [[108], 256],
+ 120054: [[109], 256],
+ 120055: [[110], 256],
+ 120056: [[111], 256],
+ 120057: [[112], 256],
+ 120058: [[113], 256],
+ 120059: [[114], 256],
+ 120060: [[115], 256],
+ 120061: [[116], 256],
+ 120062: [[117], 256],
+ 120063: [[118], 256]
+ },
+ 54528: {
+ 120064: [[119], 256],
+ 120065: [[120], 256],
+ 120066: [[121], 256],
+ 120067: [[122], 256],
+ 120068: [[65], 256],
+ 120069: [[66], 256],
+ 120071: [[68], 256],
+ 120072: [[69], 256],
+ 120073: [[70], 256],
+ 120074: [[71], 256],
+ 120077: [[74], 256],
+ 120078: [[75], 256],
+ 120079: [[76], 256],
+ 120080: [[77], 256],
+ 120081: [[78], 256],
+ 120082: [[79], 256],
+ 120083: [[80], 256],
+ 120084: [[81], 256],
+ 120086: [[83], 256],
+ 120087: [[84], 256],
+ 120088: [[85], 256],
+ 120089: [[86], 256],
+ 120090: [[87], 256],
+ 120091: [[88], 256],
+ 120092: [[89], 256],
+ 120094: [[97], 256],
+ 120095: [[98], 256],
+ 120096: [[99], 256],
+ 120097: [[100], 256],
+ 120098: [[101], 256],
+ 120099: [[102], 256],
+ 120100: [[103], 256],
+ 120101: [[104], 256],
+ 120102: [[105], 256],
+ 120103: [[106], 256],
+ 120104: [[107], 256],
+ 120105: [[108], 256],
+ 120106: [[109], 256],
+ 120107: [[110], 256],
+ 120108: [[111], 256],
+ 120109: [[112], 256],
+ 120110: [[113], 256],
+ 120111: [[114], 256],
+ 120112: [[115], 256],
+ 120113: [[116], 256],
+ 120114: [[117], 256],
+ 120115: [[118], 256],
+ 120116: [[119], 256],
+ 120117: [[120], 256],
+ 120118: [[121], 256],
+ 120119: [[122], 256],
+ 120120: [[65], 256],
+ 120121: [[66], 256],
+ 120123: [[68], 256],
+ 120124: [[69], 256],
+ 120125: [[70], 256],
+ 120126: [[71], 256],
+ 120128: [[73], 256],
+ 120129: [[74], 256],
+ 120130: [[75], 256],
+ 120131: [[76], 256],
+ 120132: [[77], 256],
+ 120134: [[79], 256],
+ 120138: [[83], 256],
+ 120139: [[84], 256],
+ 120140: [[85], 256],
+ 120141: [[86], 256],
+ 120142: [[87], 256],
+ 120143: [[88], 256],
+ 120144: [[89], 256],
+ 120146: [[97], 256],
+ 120147: [[98], 256],
+ 120148: [[99], 256],
+ 120149: [[100], 256],
+ 120150: [[101], 256],
+ 120151: [[102], 256],
+ 120152: [[103], 256],
+ 120153: [[104], 256],
+ 120154: [[105], 256],
+ 120155: [[106], 256],
+ 120156: [[107], 256],
+ 120157: [[108], 256],
+ 120158: [[109], 256],
+ 120159: [[110], 256],
+ 120160: [[111], 256],
+ 120161: [[112], 256],
+ 120162: [[113], 256],
+ 120163: [[114], 256],
+ 120164: [[115], 256],
+ 120165: [[116], 256],
+ 120166: [[117], 256],
+ 120167: [[118], 256],
+ 120168: [[119], 256],
+ 120169: [[120], 256],
+ 120170: [[121], 256],
+ 120171: [[122], 256],
+ 120172: [[65], 256],
+ 120173: [[66], 256],
+ 120174: [[67], 256],
+ 120175: [[68], 256],
+ 120176: [[69], 256],
+ 120177: [[70], 256],
+ 120178: [[71], 256],
+ 120179: [[72], 256],
+ 120180: [[73], 256],
+ 120181: [[74], 256],
+ 120182: [[75], 256],
+ 120183: [[76], 256],
+ 120184: [[77], 256],
+ 120185: [[78], 256],
+ 120186: [[79], 256],
+ 120187: [[80], 256],
+ 120188: [[81], 256],
+ 120189: [[82], 256],
+ 120190: [[83], 256],
+ 120191: [[84], 256],
+ 120192: [[85], 256],
+ 120193: [[86], 256],
+ 120194: [[87], 256],
+ 120195: [[88], 256],
+ 120196: [[89], 256],
+ 120197: [[90], 256],
+ 120198: [[97], 256],
+ 120199: [[98], 256],
+ 120200: [[99], 256],
+ 120201: [[100], 256],
+ 120202: [[101], 256],
+ 120203: [[102], 256],
+ 120204: [[103], 256],
+ 120205: [[104], 256],
+ 120206: [[105], 256],
+ 120207: [[106], 256],
+ 120208: [[107], 256],
+ 120209: [[108], 256],
+ 120210: [[109], 256],
+ 120211: [[110], 256],
+ 120212: [[111], 256],
+ 120213: [[112], 256],
+ 120214: [[113], 256],
+ 120215: [[114], 256],
+ 120216: [[115], 256],
+ 120217: [[116], 256],
+ 120218: [[117], 256],
+ 120219: [[118], 256],
+ 120220: [[119], 256],
+ 120221: [[120], 256],
+ 120222: [[121], 256],
+ 120223: [[122], 256],
+ 120224: [[65], 256],
+ 120225: [[66], 256],
+ 120226: [[67], 256],
+ 120227: [[68], 256],
+ 120228: [[69], 256],
+ 120229: [[70], 256],
+ 120230: [[71], 256],
+ 120231: [[72], 256],
+ 120232: [[73], 256],
+ 120233: [[74], 256],
+ 120234: [[75], 256],
+ 120235: [[76], 256],
+ 120236: [[77], 256],
+ 120237: [[78], 256],
+ 120238: [[79], 256],
+ 120239: [[80], 256],
+ 120240: [[81], 256],
+ 120241: [[82], 256],
+ 120242: [[83], 256],
+ 120243: [[84], 256],
+ 120244: [[85], 256],
+ 120245: [[86], 256],
+ 120246: [[87], 256],
+ 120247: [[88], 256],
+ 120248: [[89], 256],
+ 120249: [[90], 256],
+ 120250: [[97], 256],
+ 120251: [[98], 256],
+ 120252: [[99], 256],
+ 120253: [[100], 256],
+ 120254: [[101], 256],
+ 120255: [[102], 256],
+ 120256: [[103], 256],
+ 120257: [[104], 256],
+ 120258: [[105], 256],
+ 120259: [[106], 256],
+ 120260: [[107], 256],
+ 120261: [[108], 256],
+ 120262: [[109], 256],
+ 120263: [[110], 256],
+ 120264: [[111], 256],
+ 120265: [[112], 256],
+ 120266: [[113], 256],
+ 120267: [[114], 256],
+ 120268: [[115], 256],
+ 120269: [[116], 256],
+ 120270: [[117], 256],
+ 120271: [[118], 256],
+ 120272: [[119], 256],
+ 120273: [[120], 256],
+ 120274: [[121], 256],
+ 120275: [[122], 256],
+ 120276: [[65], 256],
+ 120277: [[66], 256],
+ 120278: [[67], 256],
+ 120279: [[68], 256],
+ 120280: [[69], 256],
+ 120281: [[70], 256],
+ 120282: [[71], 256],
+ 120283: [[72], 256],
+ 120284: [[73], 256],
+ 120285: [[74], 256],
+ 120286: [[75], 256],
+ 120287: [[76], 256],
+ 120288: [[77], 256],
+ 120289: [[78], 256],
+ 120290: [[79], 256],
+ 120291: [[80], 256],
+ 120292: [[81], 256],
+ 120293: [[82], 256],
+ 120294: [[83], 256],
+ 120295: [[84], 256],
+ 120296: [[85], 256],
+ 120297: [[86], 256],
+ 120298: [[87], 256],
+ 120299: [[88], 256],
+ 120300: [[89], 256],
+ 120301: [[90], 256],
+ 120302: [[97], 256],
+ 120303: [[98], 256],
+ 120304: [[99], 256],
+ 120305: [[100], 256],
+ 120306: [[101], 256],
+ 120307: [[102], 256],
+ 120308: [[103], 256],
+ 120309: [[104], 256],
+ 120310: [[105], 256],
+ 120311: [[106], 256],
+ 120312: [[107], 256],
+ 120313: [[108], 256],
+ 120314: [[109], 256],
+ 120315: [[110], 256],
+ 120316: [[111], 256],
+ 120317: [[112], 256],
+ 120318: [[113], 256],
+ 120319: [[114], 256]
+ },
+ 54784: {
+ 120320: [[115], 256],
+ 120321: [[116], 256],
+ 120322: [[117], 256],
+ 120323: [[118], 256],
+ 120324: [[119], 256],
+ 120325: [[120], 256],
+ 120326: [[121], 256],
+ 120327: [[122], 256],
+ 120328: [[65], 256],
+ 120329: [[66], 256],
+ 120330: [[67], 256],
+ 120331: [[68], 256],
+ 120332: [[69], 256],
+ 120333: [[70], 256],
+ 120334: [[71], 256],
+ 120335: [[72], 256],
+ 120336: [[73], 256],
+ 120337: [[74], 256],
+ 120338: [[75], 256],
+ 120339: [[76], 256],
+ 120340: [[77], 256],
+ 120341: [[78], 256],
+ 120342: [[79], 256],
+ 120343: [[80], 256],
+ 120344: [[81], 256],
+ 120345: [[82], 256],
+ 120346: [[83], 256],
+ 120347: [[84], 256],
+ 120348: [[85], 256],
+ 120349: [[86], 256],
+ 120350: [[87], 256],
+ 120351: [[88], 256],
+ 120352: [[89], 256],
+ 120353: [[90], 256],
+ 120354: [[97], 256],
+ 120355: [[98], 256],
+ 120356: [[99], 256],
+ 120357: [[100], 256],
+ 120358: [[101], 256],
+ 120359: [[102], 256],
+ 120360: [[103], 256],
+ 120361: [[104], 256],
+ 120362: [[105], 256],
+ 120363: [[106], 256],
+ 120364: [[107], 256],
+ 120365: [[108], 256],
+ 120366: [[109], 256],
+ 120367: [[110], 256],
+ 120368: [[111], 256],
+ 120369: [[112], 256],
+ 120370: [[113], 256],
+ 120371: [[114], 256],
+ 120372: [[115], 256],
+ 120373: [[116], 256],
+ 120374: [[117], 256],
+ 120375: [[118], 256],
+ 120376: [[119], 256],
+ 120377: [[120], 256],
+ 120378: [[121], 256],
+ 120379: [[122], 256],
+ 120380: [[65], 256],
+ 120381: [[66], 256],
+ 120382: [[67], 256],
+ 120383: [[68], 256],
+ 120384: [[69], 256],
+ 120385: [[70], 256],
+ 120386: [[71], 256],
+ 120387: [[72], 256],
+ 120388: [[73], 256],
+ 120389: [[74], 256],
+ 120390: [[75], 256],
+ 120391: [[76], 256],
+ 120392: [[77], 256],
+ 120393: [[78], 256],
+ 120394: [[79], 256],
+ 120395: [[80], 256],
+ 120396: [[81], 256],
+ 120397: [[82], 256],
+ 120398: [[83], 256],
+ 120399: [[84], 256],
+ 120400: [[85], 256],
+ 120401: [[86], 256],
+ 120402: [[87], 256],
+ 120403: [[88], 256],
+ 120404: [[89], 256],
+ 120405: [[90], 256],
+ 120406: [[97], 256],
+ 120407: [[98], 256],
+ 120408: [[99], 256],
+ 120409: [[100], 256],
+ 120410: [[101], 256],
+ 120411: [[102], 256],
+ 120412: [[103], 256],
+ 120413: [[104], 256],
+ 120414: [[105], 256],
+ 120415: [[106], 256],
+ 120416: [[107], 256],
+ 120417: [[108], 256],
+ 120418: [[109], 256],
+ 120419: [[110], 256],
+ 120420: [[111], 256],
+ 120421: [[112], 256],
+ 120422: [[113], 256],
+ 120423: [[114], 256],
+ 120424: [[115], 256],
+ 120425: [[116], 256],
+ 120426: [[117], 256],
+ 120427: [[118], 256],
+ 120428: [[119], 256],
+ 120429: [[120], 256],
+ 120430: [[121], 256],
+ 120431: [[122], 256],
+ 120432: [[65], 256],
+ 120433: [[66], 256],
+ 120434: [[67], 256],
+ 120435: [[68], 256],
+ 120436: [[69], 256],
+ 120437: [[70], 256],
+ 120438: [[71], 256],
+ 120439: [[72], 256],
+ 120440: [[73], 256],
+ 120441: [[74], 256],
+ 120442: [[75], 256],
+ 120443: [[76], 256],
+ 120444: [[77], 256],
+ 120445: [[78], 256],
+ 120446: [[79], 256],
+ 120447: [[80], 256],
+ 120448: [[81], 256],
+ 120449: [[82], 256],
+ 120450: [[83], 256],
+ 120451: [[84], 256],
+ 120452: [[85], 256],
+ 120453: [[86], 256],
+ 120454: [[87], 256],
+ 120455: [[88], 256],
+ 120456: [[89], 256],
+ 120457: [[90], 256],
+ 120458: [[97], 256],
+ 120459: [[98], 256],
+ 120460: [[99], 256],
+ 120461: [[100], 256],
+ 120462: [[101], 256],
+ 120463: [[102], 256],
+ 120464: [[103], 256],
+ 120465: [[104], 256],
+ 120466: [[105], 256],
+ 120467: [[106], 256],
+ 120468: [[107], 256],
+ 120469: [[108], 256],
+ 120470: [[109], 256],
+ 120471: [[110], 256],
+ 120472: [[111], 256],
+ 120473: [[112], 256],
+ 120474: [[113], 256],
+ 120475: [[114], 256],
+ 120476: [[115], 256],
+ 120477: [[116], 256],
+ 120478: [[117], 256],
+ 120479: [[118], 256],
+ 120480: [[119], 256],
+ 120481: [[120], 256],
+ 120482: [[121], 256],
+ 120483: [[122], 256],
+ 120484: [[305], 256],
+ 120485: [[567], 256],
+ 120488: [[913], 256],
+ 120489: [[914], 256],
+ 120490: [[915], 256],
+ 120491: [[916], 256],
+ 120492: [[917], 256],
+ 120493: [[918], 256],
+ 120494: [[919], 256],
+ 120495: [[920], 256],
+ 120496: [[921], 256],
+ 120497: [[922], 256],
+ 120498: [[923], 256],
+ 120499: [[924], 256],
+ 120500: [[925], 256],
+ 120501: [[926], 256],
+ 120502: [[927], 256],
+ 120503: [[928], 256],
+ 120504: [[929], 256],
+ 120505: [[1012], 256],
+ 120506: [[931], 256],
+ 120507: [[932], 256],
+ 120508: [[933], 256],
+ 120509: [[934], 256],
+ 120510: [[935], 256],
+ 120511: [[936], 256],
+ 120512: [[937], 256],
+ 120513: [[8711], 256],
+ 120514: [[945], 256],
+ 120515: [[946], 256],
+ 120516: [[947], 256],
+ 120517: [[948], 256],
+ 120518: [[949], 256],
+ 120519: [[950], 256],
+ 120520: [[951], 256],
+ 120521: [[952], 256],
+ 120522: [[953], 256],
+ 120523: [[954], 256],
+ 120524: [[955], 256],
+ 120525: [[956], 256],
+ 120526: [[957], 256],
+ 120527: [[958], 256],
+ 120528: [[959], 256],
+ 120529: [[960], 256],
+ 120530: [[961], 256],
+ 120531: [[962], 256],
+ 120532: [[963], 256],
+ 120533: [[964], 256],
+ 120534: [[965], 256],
+ 120535: [[966], 256],
+ 120536: [[967], 256],
+ 120537: [[968], 256],
+ 120538: [[969], 256],
+ 120539: [[8706], 256],
+ 120540: [[1013], 256],
+ 120541: [[977], 256],
+ 120542: [[1008], 256],
+ 120543: [[981], 256],
+ 120544: [[1009], 256],
+ 120545: [[982], 256],
+ 120546: [[913], 256],
+ 120547: [[914], 256],
+ 120548: [[915], 256],
+ 120549: [[916], 256],
+ 120550: [[917], 256],
+ 120551: [[918], 256],
+ 120552: [[919], 256],
+ 120553: [[920], 256],
+ 120554: [[921], 256],
+ 120555: [[922], 256],
+ 120556: [[923], 256],
+ 120557: [[924], 256],
+ 120558: [[925], 256],
+ 120559: [[926], 256],
+ 120560: [[927], 256],
+ 120561: [[928], 256],
+ 120562: [[929], 256],
+ 120563: [[1012], 256],
+ 120564: [[931], 256],
+ 120565: [[932], 256],
+ 120566: [[933], 256],
+ 120567: [[934], 256],
+ 120568: [[935], 256],
+ 120569: [[936], 256],
+ 120570: [[937], 256],
+ 120571: [[8711], 256],
+ 120572: [[945], 256],
+ 120573: [[946], 256],
+ 120574: [[947], 256],
+ 120575: [[948], 256]
+ },
+ 55040: {
+ 120576: [[949], 256],
+ 120577: [[950], 256],
+ 120578: [[951], 256],
+ 120579: [[952], 256],
+ 120580: [[953], 256],
+ 120581: [[954], 256],
+ 120582: [[955], 256],
+ 120583: [[956], 256],
+ 120584: [[957], 256],
+ 120585: [[958], 256],
+ 120586: [[959], 256],
+ 120587: [[960], 256],
+ 120588: [[961], 256],
+ 120589: [[962], 256],
+ 120590: [[963], 256],
+ 120591: [[964], 256],
+ 120592: [[965], 256],
+ 120593: [[966], 256],
+ 120594: [[967], 256],
+ 120595: [[968], 256],
+ 120596: [[969], 256],
+ 120597: [[8706], 256],
+ 120598: [[1013], 256],
+ 120599: [[977], 256],
+ 120600: [[1008], 256],
+ 120601: [[981], 256],
+ 120602: [[1009], 256],
+ 120603: [[982], 256],
+ 120604: [[913], 256],
+ 120605: [[914], 256],
+ 120606: [[915], 256],
+ 120607: [[916], 256],
+ 120608: [[917], 256],
+ 120609: [[918], 256],
+ 120610: [[919], 256],
+ 120611: [[920], 256],
+ 120612: [[921], 256],
+ 120613: [[922], 256],
+ 120614: [[923], 256],
+ 120615: [[924], 256],
+ 120616: [[925], 256],
+ 120617: [[926], 256],
+ 120618: [[927], 256],
+ 120619: [[928], 256],
+ 120620: [[929], 256],
+ 120621: [[1012], 256],
+ 120622: [[931], 256],
+ 120623: [[932], 256],
+ 120624: [[933], 256],
+ 120625: [[934], 256],
+ 120626: [[935], 256],
+ 120627: [[936], 256],
+ 120628: [[937], 256],
+ 120629: [[8711], 256],
+ 120630: [[945], 256],
+ 120631: [[946], 256],
+ 120632: [[947], 256],
+ 120633: [[948], 256],
+ 120634: [[949], 256],
+ 120635: [[950], 256],
+ 120636: [[951], 256],
+ 120637: [[952], 256],
+ 120638: [[953], 256],
+ 120639: [[954], 256],
+ 120640: [[955], 256],
+ 120641: [[956], 256],
+ 120642: [[957], 256],
+ 120643: [[958], 256],
+ 120644: [[959], 256],
+ 120645: [[960], 256],
+ 120646: [[961], 256],
+ 120647: [[962], 256],
+ 120648: [[963], 256],
+ 120649: [[964], 256],
+ 120650: [[965], 256],
+ 120651: [[966], 256],
+ 120652: [[967], 256],
+ 120653: [[968], 256],
+ 120654: [[969], 256],
+ 120655: [[8706], 256],
+ 120656: [[1013], 256],
+ 120657: [[977], 256],
+ 120658: [[1008], 256],
+ 120659: [[981], 256],
+ 120660: [[1009], 256],
+ 120661: [[982], 256],
+ 120662: [[913], 256],
+ 120663: [[914], 256],
+ 120664: [[915], 256],
+ 120665: [[916], 256],
+ 120666: [[917], 256],
+ 120667: [[918], 256],
+ 120668: [[919], 256],
+ 120669: [[920], 256],
+ 120670: [[921], 256],
+ 120671: [[922], 256],
+ 120672: [[923], 256],
+ 120673: [[924], 256],
+ 120674: [[925], 256],
+ 120675: [[926], 256],
+ 120676: [[927], 256],
+ 120677: [[928], 256],
+ 120678: [[929], 256],
+ 120679: [[1012], 256],
+ 120680: [[931], 256],
+ 120681: [[932], 256],
+ 120682: [[933], 256],
+ 120683: [[934], 256],
+ 120684: [[935], 256],
+ 120685: [[936], 256],
+ 120686: [[937], 256],
+ 120687: [[8711], 256],
+ 120688: [[945], 256],
+ 120689: [[946], 256],
+ 120690: [[947], 256],
+ 120691: [[948], 256],
+ 120692: [[949], 256],
+ 120693: [[950], 256],
+ 120694: [[951], 256],
+ 120695: [[952], 256],
+ 120696: [[953], 256],
+ 120697: [[954], 256],
+ 120698: [[955], 256],
+ 120699: [[956], 256],
+ 120700: [[957], 256],
+ 120701: [[958], 256],
+ 120702: [[959], 256],
+ 120703: [[960], 256],
+ 120704: [[961], 256],
+ 120705: [[962], 256],
+ 120706: [[963], 256],
+ 120707: [[964], 256],
+ 120708: [[965], 256],
+ 120709: [[966], 256],
+ 120710: [[967], 256],
+ 120711: [[968], 256],
+ 120712: [[969], 256],
+ 120713: [[8706], 256],
+ 120714: [[1013], 256],
+ 120715: [[977], 256],
+ 120716: [[1008], 256],
+ 120717: [[981], 256],
+ 120718: [[1009], 256],
+ 120719: [[982], 256],
+ 120720: [[913], 256],
+ 120721: [[914], 256],
+ 120722: [[915], 256],
+ 120723: [[916], 256],
+ 120724: [[917], 256],
+ 120725: [[918], 256],
+ 120726: [[919], 256],
+ 120727: [[920], 256],
+ 120728: [[921], 256],
+ 120729: [[922], 256],
+ 120730: [[923], 256],
+ 120731: [[924], 256],
+ 120732: [[925], 256],
+ 120733: [[926], 256],
+ 120734: [[927], 256],
+ 120735: [[928], 256],
+ 120736: [[929], 256],
+ 120737: [[1012], 256],
+ 120738: [[931], 256],
+ 120739: [[932], 256],
+ 120740: [[933], 256],
+ 120741: [[934], 256],
+ 120742: [[935], 256],
+ 120743: [[936], 256],
+ 120744: [[937], 256],
+ 120745: [[8711], 256],
+ 120746: [[945], 256],
+ 120747: [[946], 256],
+ 120748: [[947], 256],
+ 120749: [[948], 256],
+ 120750: [[949], 256],
+ 120751: [[950], 256],
+ 120752: [[951], 256],
+ 120753: [[952], 256],
+ 120754: [[953], 256],
+ 120755: [[954], 256],
+ 120756: [[955], 256],
+ 120757: [[956], 256],
+ 120758: [[957], 256],
+ 120759: [[958], 256],
+ 120760: [[959], 256],
+ 120761: [[960], 256],
+ 120762: [[961], 256],
+ 120763: [[962], 256],
+ 120764: [[963], 256],
+ 120765: [[964], 256],
+ 120766: [[965], 256],
+ 120767: [[966], 256],
+ 120768: [[967], 256],
+ 120769: [[968], 256],
+ 120770: [[969], 256],
+ 120771: [[8706], 256],
+ 120772: [[1013], 256],
+ 120773: [[977], 256],
+ 120774: [[1008], 256],
+ 120775: [[981], 256],
+ 120776: [[1009], 256],
+ 120777: [[982], 256],
+ 120778: [[988], 256],
+ 120779: [[989], 256],
+ 120782: [[48], 256],
+ 120783: [[49], 256],
+ 120784: [[50], 256],
+ 120785: [[51], 256],
+ 120786: [[52], 256],
+ 120787: [[53], 256],
+ 120788: [[54], 256],
+ 120789: [[55], 256],
+ 120790: [[56], 256],
+ 120791: [[57], 256],
+ 120792: [[48], 256],
+ 120793: [[49], 256],
+ 120794: [[50], 256],
+ 120795: [[51], 256],
+ 120796: [[52], 256],
+ 120797: [[53], 256],
+ 120798: [[54], 256],
+ 120799: [[55], 256],
+ 120800: [[56], 256],
+ 120801: [[57], 256],
+ 120802: [[48], 256],
+ 120803: [[49], 256],
+ 120804: [[50], 256],
+ 120805: [[51], 256],
+ 120806: [[52], 256],
+ 120807: [[53], 256],
+ 120808: [[54], 256],
+ 120809: [[55], 256],
+ 120810: [[56], 256],
+ 120811: [[57], 256],
+ 120812: [[48], 256],
+ 120813: [[49], 256],
+ 120814: [[50], 256],
+ 120815: [[51], 256],
+ 120816: [[52], 256],
+ 120817: [[53], 256],
+ 120818: [[54], 256],
+ 120819: [[55], 256],
+ 120820: [[56], 256],
+ 120821: [[57], 256],
+ 120822: [[48], 256],
+ 120823: [[49], 256],
+ 120824: [[50], 256],
+ 120825: [[51], 256],
+ 120826: [[52], 256],
+ 120827: [[53], 256],
+ 120828: [[54], 256],
+ 120829: [[55], 256],
+ 120830: [[56], 256],
+ 120831: [[57], 256]
+ },
+ 60928: {
+ 126464: [[1575], 256],
+ 126465: [[1576], 256],
+ 126466: [[1580], 256],
+ 126467: [[1583], 256],
+ 126469: [[1608], 256],
+ 126470: [[1586], 256],
+ 126471: [[1581], 256],
+ 126472: [[1591], 256],
+ 126473: [[1610], 256],
+ 126474: [[1603], 256],
+ 126475: [[1604], 256],
+ 126476: [[1605], 256],
+ 126477: [[1606], 256],
+ 126478: [[1587], 256],
+ 126479: [[1593], 256],
+ 126480: [[1601], 256],
+ 126481: [[1589], 256],
+ 126482: [[1602], 256],
+ 126483: [[1585], 256],
+ 126484: [[1588], 256],
+ 126485: [[1578], 256],
+ 126486: [[1579], 256],
+ 126487: [[1582], 256],
+ 126488: [[1584], 256],
+ 126489: [[1590], 256],
+ 126490: [[1592], 256],
+ 126491: [[1594], 256],
+ 126492: [[1646], 256],
+ 126493: [[1722], 256],
+ 126494: [[1697], 256],
+ 126495: [[1647], 256],
+ 126497: [[1576], 256],
+ 126498: [[1580], 256],
+ 126500: [[1607], 256],
+ 126503: [[1581], 256],
+ 126505: [[1610], 256],
+ 126506: [[1603], 256],
+ 126507: [[1604], 256],
+ 126508: [[1605], 256],
+ 126509: [[1606], 256],
+ 126510: [[1587], 256],
+ 126511: [[1593], 256],
+ 126512: [[1601], 256],
+ 126513: [[1589], 256],
+ 126514: [[1602], 256],
+ 126516: [[1588], 256],
+ 126517: [[1578], 256],
+ 126518: [[1579], 256],
+ 126519: [[1582], 256],
+ 126521: [[1590], 256],
+ 126523: [[1594], 256],
+ 126530: [[1580], 256],
+ 126535: [[1581], 256],
+ 126537: [[1610], 256],
+ 126539: [[1604], 256],
+ 126541: [[1606], 256],
+ 126542: [[1587], 256],
+ 126543: [[1593], 256],
+ 126545: [[1589], 256],
+ 126546: [[1602], 256],
+ 126548: [[1588], 256],
+ 126551: [[1582], 256],
+ 126553: [[1590], 256],
+ 126555: [[1594], 256],
+ 126557: [[1722], 256],
+ 126559: [[1647], 256],
+ 126561: [[1576], 256],
+ 126562: [[1580], 256],
+ 126564: [[1607], 256],
+ 126567: [[1581], 256],
+ 126568: [[1591], 256],
+ 126569: [[1610], 256],
+ 126570: [[1603], 256],
+ 126572: [[1605], 256],
+ 126573: [[1606], 256],
+ 126574: [[1587], 256],
+ 126575: [[1593], 256],
+ 126576: [[1601], 256],
+ 126577: [[1589], 256],
+ 126578: [[1602], 256],
+ 126580: [[1588], 256],
+ 126581: [[1578], 256],
+ 126582: [[1579], 256],
+ 126583: [[1582], 256],
+ 126585: [[1590], 256],
+ 126586: [[1592], 256],
+ 126587: [[1594], 256],
+ 126588: [[1646], 256],
+ 126590: [[1697], 256],
+ 126592: [[1575], 256],
+ 126593: [[1576], 256],
+ 126594: [[1580], 256],
+ 126595: [[1583], 256],
+ 126596: [[1607], 256],
+ 126597: [[1608], 256],
+ 126598: [[1586], 256],
+ 126599: [[1581], 256],
+ 126600: [[1591], 256],
+ 126601: [[1610], 256],
+ 126603: [[1604], 256],
+ 126604: [[1605], 256],
+ 126605: [[1606], 256],
+ 126606: [[1587], 256],
+ 126607: [[1593], 256],
+ 126608: [[1601], 256],
+ 126609: [[1589], 256],
+ 126610: [[1602], 256],
+ 126611: [[1585], 256],
+ 126612: [[1588], 256],
+ 126613: [[1578], 256],
+ 126614: [[1579], 256],
+ 126615: [[1582], 256],
+ 126616: [[1584], 256],
+ 126617: [[1590], 256],
+ 126618: [[1592], 256],
+ 126619: [[1594], 256],
+ 126625: [[1576], 256],
+ 126626: [[1580], 256],
+ 126627: [[1583], 256],
+ 126629: [[1608], 256],
+ 126630: [[1586], 256],
+ 126631: [[1581], 256],
+ 126632: [[1591], 256],
+ 126633: [[1610], 256],
+ 126635: [[1604], 256],
+ 126636: [[1605], 256],
+ 126637: [[1606], 256],
+ 126638: [[1587], 256],
+ 126639: [[1593], 256],
+ 126640: [[1601], 256],
+ 126641: [[1589], 256],
+ 126642: [[1602], 256],
+ 126643: [[1585], 256],
+ 126644: [[1588], 256],
+ 126645: [[1578], 256],
+ 126646: [[1579], 256],
+ 126647: [[1582], 256],
+ 126648: [[1584], 256],
+ 126649: [[1590], 256],
+ 126650: [[1592], 256],
+ 126651: [[1594], 256]
+ },
+ 61696: {
+ 127232: [[48, 46], 256],
+ 127233: [[48, 44], 256],
+ 127234: [[49, 44], 256],
+ 127235: [[50, 44], 256],
+ 127236: [[51, 44], 256],
+ 127237: [[52, 44], 256],
+ 127238: [[53, 44], 256],
+ 127239: [[54, 44], 256],
+ 127240: [[55, 44], 256],
+ 127241: [[56, 44], 256],
+ 127242: [[57, 44], 256],
+ 127248: [[40, 65, 41], 256],
+ 127249: [[40, 66, 41], 256],
+ 127250: [[40, 67, 41], 256],
+ 127251: [[40, 68, 41], 256],
+ 127252: [[40, 69, 41], 256],
+ 127253: [[40, 70, 41], 256],
+ 127254: [[40, 71, 41], 256],
+ 127255: [[40, 72, 41], 256],
+ 127256: [[40, 73, 41], 256],
+ 127257: [[40, 74, 41], 256],
+ 127258: [[40, 75, 41], 256],
+ 127259: [[40, 76, 41], 256],
+ 127260: [[40, 77, 41], 256],
+ 127261: [[40, 78, 41], 256],
+ 127262: [[40, 79, 41], 256],
+ 127263: [[40, 80, 41], 256],
+ 127264: [[40, 81, 41], 256],
+ 127265: [[40, 82, 41], 256],
+ 127266: [[40, 83, 41], 256],
+ 127267: [[40, 84, 41], 256],
+ 127268: [[40, 85, 41], 256],
+ 127269: [[40, 86, 41], 256],
+ 127270: [[40, 87, 41], 256],
+ 127271: [[40, 88, 41], 256],
+ 127272: [[40, 89, 41], 256],
+ 127273: [[40, 90, 41], 256],
+ 127274: [[12308, 83, 12309], 256],
+ 127275: [[67], 256],
+ 127276: [[82], 256],
+ 127277: [[67, 68], 256],
+ 127278: [[87, 90], 256],
+ 127280: [[65], 256],
+ 127281: [[66], 256],
+ 127282: [[67], 256],
+ 127283: [[68], 256],
+ 127284: [[69], 256],
+ 127285: [[70], 256],
+ 127286: [[71], 256],
+ 127287: [[72], 256],
+ 127288: [[73], 256],
+ 127289: [[74], 256],
+ 127290: [[75], 256],
+ 127291: [[76], 256],
+ 127292: [[77], 256],
+ 127293: [[78], 256],
+ 127294: [[79], 256],
+ 127295: [[80], 256],
+ 127296: [[81], 256],
+ 127297: [[82], 256],
+ 127298: [[83], 256],
+ 127299: [[84], 256],
+ 127300: [[85], 256],
+ 127301: [[86], 256],
+ 127302: [[87], 256],
+ 127303: [[88], 256],
+ 127304: [[89], 256],
+ 127305: [[90], 256],
+ 127306: [[72, 86], 256],
+ 127307: [[77, 86], 256],
+ 127308: [[83, 68], 256],
+ 127309: [[83, 83], 256],
+ 127310: [[80, 80, 86], 256],
+ 127311: [[87, 67], 256],
+ 127338: [[77, 67], 256],
+ 127339: [[77, 68], 256],
+ 127376: [[68, 74], 256]
+ },
+ 61952: {
+ 127488: [[12411, 12363], 256],
+ 127489: [[12467, 12467], 256],
+ 127490: [[12469], 256],
+ 127504: [[25163], 256],
+ 127505: [[23383], 256],
+ 127506: [[21452], 256],
+ 127507: [[12487], 256],
+ 127508: [[20108], 256],
+ 127509: [[22810], 256],
+ 127510: [[35299], 256],
+ 127511: [[22825], 256],
+ 127512: [[20132], 256],
+ 127513: [[26144], 256],
+ 127514: [[28961], 256],
+ 127515: [[26009], 256],
+ 127516: [[21069], 256],
+ 127517: [[24460], 256],
+ 127518: [[20877], 256],
+ 127519: [[26032], 256],
+ 127520: [[21021], 256],
+ 127521: [[32066], 256],
+ 127522: [[29983], 256],
+ 127523: [[36009], 256],
+ 127524: [[22768], 256],
+ 127525: [[21561], 256],
+ 127526: [[28436], 256],
+ 127527: [[25237], 256],
+ 127528: [[25429], 256],
+ 127529: [[19968], 256],
+ 127530: [[19977], 256],
+ 127531: [[36938], 256],
+ 127532: [[24038], 256],
+ 127533: [[20013], 256],
+ 127534: [[21491], 256],
+ 127535: [[25351], 256],
+ 127536: [[36208], 256],
+ 127537: [[25171], 256],
+ 127538: [[31105], 256],
+ 127539: [[31354], 256],
+ 127540: [[21512], 256],
+ 127541: [[28288], 256],
+ 127542: [[26377], 256],
+ 127543: [[26376], 256],
+ 127544: [[30003], 256],
+ 127545: [[21106], 256],
+ 127546: [[21942], 256],
+ 127552: [[12308, 26412, 12309], 256],
+ 127553: [[12308, 19977, 12309], 256],
+ 127554: [[12308, 20108, 12309], 256],
+ 127555: [[12308, 23433, 12309], 256],
+ 127556: [[12308, 28857, 12309], 256],
+ 127557: [[12308, 25171, 12309], 256],
+ 127558: [[12308, 30423, 12309], 256],
+ 127559: [[12308, 21213, 12309], 256],
+ 127560: [[12308, 25943, 12309], 256],
+ 127568: [[24471], 256],
+ 127569: [[21487], 256]
+ },
+ 63488: {
+ 194560: [[20029]],
+ 194561: [[20024]],
+ 194562: [[20033]],
+ 194563: [[131362]],
+ 194564: [[20320]],
+ 194565: [[20398]],
+ 194566: [[20411]],
+ 194567: [[20482]],
+ 194568: [[20602]],
+ 194569: [[20633]],
+ 194570: [[20711]],
+ 194571: [[20687]],
+ 194572: [[13470]],
+ 194573: [[132666]],
+ 194574: [[20813]],
+ 194575: [[20820]],
+ 194576: [[20836]],
+ 194577: [[20855]],
+ 194578: [[132380]],
+ 194579: [[13497]],
+ 194580: [[20839]],
+ 194581: [[20877]],
+ 194582: [[132427]],
+ 194583: [[20887]],
+ 194584: [[20900]],
+ 194585: [[20172]],
+ 194586: [[20908]],
+ 194587: [[20917]],
+ 194588: [[168415]],
+ 194589: [[20981]],
+ 194590: [[20995]],
+ 194591: [[13535]],
+ 194592: [[21051]],
+ 194593: [[21062]],
+ 194594: [[21106]],
+ 194595: [[21111]],
+ 194596: [[13589]],
+ 194597: [[21191]],
+ 194598: [[21193]],
+ 194599: [[21220]],
+ 194600: [[21242]],
+ 194601: [[21253]],
+ 194602: [[21254]],
+ 194603: [[21271]],
+ 194604: [[21321]],
+ 194605: [[21329]],
+ 194606: [[21338]],
+ 194607: [[21363]],
+ 194608: [[21373]],
+ 194609: [[21375]],
+ 194610: [[21375]],
+ 194611: [[21375]],
+ 194612: [[133676]],
+ 194613: [[28784]],
+ 194614: [[21450]],
+ 194615: [[21471]],
+ 194616: [[133987]],
+ 194617: [[21483]],
+ 194618: [[21489]],
+ 194619: [[21510]],
+ 194620: [[21662]],
+ 194621: [[21560]],
+ 194622: [[21576]],
+ 194623: [[21608]],
+ 194624: [[21666]],
+ 194625: [[21750]],
+ 194626: [[21776]],
+ 194627: [[21843]],
+ 194628: [[21859]],
+ 194629: [[21892]],
+ 194630: [[21892]],
+ 194631: [[21913]],
+ 194632: [[21931]],
+ 194633: [[21939]],
+ 194634: [[21954]],
+ 194635: [[22294]],
+ 194636: [[22022]],
+ 194637: [[22295]],
+ 194638: [[22097]],
+ 194639: [[22132]],
+ 194640: [[20999]],
+ 194641: [[22766]],
+ 194642: [[22478]],
+ 194643: [[22516]],
+ 194644: [[22541]],
+ 194645: [[22411]],
+ 194646: [[22578]],
+ 194647: [[22577]],
+ 194648: [[22700]],
+ 194649: [[136420]],
+ 194650: [[22770]],
+ 194651: [[22775]],
+ 194652: [[22790]],
+ 194653: [[22810]],
+ 194654: [[22818]],
+ 194655: [[22882]],
+ 194656: [[136872]],
+ 194657: [[136938]],
+ 194658: [[23020]],
+ 194659: [[23067]],
+ 194660: [[23079]],
+ 194661: [[23000]],
+ 194662: [[23142]],
+ 194663: [[14062]],
+ 194664: [[14076]],
+ 194665: [[23304]],
+ 194666: [[23358]],
+ 194667: [[23358]],
+ 194668: [[137672]],
+ 194669: [[23491]],
+ 194670: [[23512]],
+ 194671: [[23527]],
+ 194672: [[23539]],
+ 194673: [[138008]],
+ 194674: [[23551]],
+ 194675: [[23558]],
+ 194676: [[24403]],
+ 194677: [[23586]],
+ 194678: [[14209]],
+ 194679: [[23648]],
+ 194680: [[23662]],
+ 194681: [[23744]],
+ 194682: [[23693]],
+ 194683: [[138724]],
+ 194684: [[23875]],
+ 194685: [[138726]],
+ 194686: [[23918]],
+ 194687: [[23915]],
+ 194688: [[23932]],
+ 194689: [[24033]],
+ 194690: [[24034]],
+ 194691: [[14383]],
+ 194692: [[24061]],
+ 194693: [[24104]],
+ 194694: [[24125]],
+ 194695: [[24169]],
+ 194696: [[14434]],
+ 194697: [[139651]],
+ 194698: [[14460]],
+ 194699: [[24240]],
+ 194700: [[24243]],
+ 194701: [[24246]],
+ 194702: [[24266]],
+ 194703: [[172946]],
+ 194704: [[24318]],
+ 194705: [[140081]],
+ 194706: [[140081]],
+ 194707: [[33281]],
+ 194708: [[24354]],
+ 194709: [[24354]],
+ 194710: [[14535]],
+ 194711: [[144056]],
+ 194712: [[156122]],
+ 194713: [[24418]],
+ 194714: [[24427]],
+ 194715: [[14563]],
+ 194716: [[24474]],
+ 194717: [[24525]],
+ 194718: [[24535]],
+ 194719: [[24569]],
+ 194720: [[24705]],
+ 194721: [[14650]],
+ 194722: [[14620]],
+ 194723: [[24724]],
+ 194724: [[141012]],
+ 194725: [[24775]],
+ 194726: [[24904]],
+ 194727: [[24908]],
+ 194728: [[24910]],
+ 194729: [[24908]],
+ 194730: [[24954]],
+ 194731: [[24974]],
+ 194732: [[25010]],
+ 194733: [[24996]],
+ 194734: [[25007]],
+ 194735: [[25054]],
+ 194736: [[25074]],
+ 194737: [[25078]],
+ 194738: [[25104]],
+ 194739: [[25115]],
+ 194740: [[25181]],
+ 194741: [[25265]],
+ 194742: [[25300]],
+ 194743: [[25424]],
+ 194744: [[142092]],
+ 194745: [[25405]],
+ 194746: [[25340]],
+ 194747: [[25448]],
+ 194748: [[25475]],
+ 194749: [[25572]],
+ 194750: [[142321]],
+ 194751: [[25634]],
+ 194752: [[25541]],
+ 194753: [[25513]],
+ 194754: [[14894]],
+ 194755: [[25705]],
+ 194756: [[25726]],
+ 194757: [[25757]],
+ 194758: [[25719]],
+ 194759: [[14956]],
+ 194760: [[25935]],
+ 194761: [[25964]],
+ 194762: [[143370]],
+ 194763: [[26083]],
+ 194764: [[26360]],
+ 194765: [[26185]],
+ 194766: [[15129]],
+ 194767: [[26257]],
+ 194768: [[15112]],
+ 194769: [[15076]],
+ 194770: [[20882]],
+ 194771: [[20885]],
+ 194772: [[26368]],
+ 194773: [[26268]],
+ 194774: [[32941]],
+ 194775: [[17369]],
+ 194776: [[26391]],
+ 194777: [[26395]],
+ 194778: [[26401]],
+ 194779: [[26462]],
+ 194780: [[26451]],
+ 194781: [[144323]],
+ 194782: [[15177]],
+ 194783: [[26618]],
+ 194784: [[26501]],
+ 194785: [[26706]],
+ 194786: [[26757]],
+ 194787: [[144493]],
+ 194788: [[26766]],
+ 194789: [[26655]],
+ 194790: [[26900]],
+ 194791: [[15261]],
+ 194792: [[26946]],
+ 194793: [[27043]],
+ 194794: [[27114]],
+ 194795: [[27304]],
+ 194796: [[145059]],
+ 194797: [[27355]],
+ 194798: [[15384]],
+ 194799: [[27425]],
+ 194800: [[145575]],
+ 194801: [[27476]],
+ 194802: [[15438]],
+ 194803: [[27506]],
+ 194804: [[27551]],
+ 194805: [[27578]],
+ 194806: [[27579]],
+ 194807: [[146061]],
+ 194808: [[138507]],
+ 194809: [[146170]],
+ 194810: [[27726]],
+ 194811: [[146620]],
+ 194812: [[27839]],
+ 194813: [[27853]],
+ 194814: [[27751]],
+ 194815: [[27926]]
+ },
+ 63744: {
+ 63744: [[35912]],
+ 63745: [[26356]],
+ 63746: [[36554]],
+ 63747: [[36040]],
+ 63748: [[28369]],
+ 63749: [[20018]],
+ 63750: [[21477]],
+ 63751: [[40860]],
+ 63752: [[40860]],
+ 63753: [[22865]],
+ 63754: [[37329]],
+ 63755: [[21895]],
+ 63756: [[22856]],
+ 63757: [[25078]],
+ 63758: [[30313]],
+ 63759: [[32645]],
+ 63760: [[34367]],
+ 63761: [[34746]],
+ 63762: [[35064]],
+ 63763: [[37007]],
+ 63764: [[27138]],
+ 63765: [[27931]],
+ 63766: [[28889]],
+ 63767: [[29662]],
+ 63768: [[33853]],
+ 63769: [[37226]],
+ 63770: [[39409]],
+ 63771: [[20098]],
+ 63772: [[21365]],
+ 63773: [[27396]],
+ 63774: [[29211]],
+ 63775: [[34349]],
+ 63776: [[40478]],
+ 63777: [[23888]],
+ 63778: [[28651]],
+ 63779: [[34253]],
+ 63780: [[35172]],
+ 63781: [[25289]],
+ 63782: [[33240]],
+ 63783: [[34847]],
+ 63784: [[24266]],
+ 63785: [[26391]],
+ 63786: [[28010]],
+ 63787: [[29436]],
+ 63788: [[37070]],
+ 63789: [[20358]],
+ 63790: [[20919]],
+ 63791: [[21214]],
+ 63792: [[25796]],
+ 63793: [[27347]],
+ 63794: [[29200]],
+ 63795: [[30439]],
+ 63796: [[32769]],
+ 63797: [[34310]],
+ 63798: [[34396]],
+ 63799: [[36335]],
+ 63800: [[38706]],
+ 63801: [[39791]],
+ 63802: [[40442]],
+ 63803: [[30860]],
+ 63804: [[31103]],
+ 63805: [[32160]],
+ 63806: [[33737]],
+ 63807: [[37636]],
+ 63808: [[40575]],
+ 63809: [[35542]],
+ 63810: [[22751]],
+ 63811: [[24324]],
+ 63812: [[31840]],
+ 63813: [[32894]],
+ 63814: [[29282]],
+ 63815: [[30922]],
+ 63816: [[36034]],
+ 63817: [[38647]],
+ 63818: [[22744]],
+ 63819: [[23650]],
+ 63820: [[27155]],
+ 63821: [[28122]],
+ 63822: [[28431]],
+ 63823: [[32047]],
+ 63824: [[32311]],
+ 63825: [[38475]],
+ 63826: [[21202]],
+ 63827: [[32907]],
+ 63828: [[20956]],
+ 63829: [[20940]],
+ 63830: [[31260]],
+ 63831: [[32190]],
+ 63832: [[33777]],
+ 63833: [[38517]],
+ 63834: [[35712]],
+ 63835: [[25295]],
+ 63836: [[27138]],
+ 63837: [[35582]],
+ 63838: [[20025]],
+ 63839: [[23527]],
+ 63840: [[24594]],
+ 63841: [[29575]],
+ 63842: [[30064]],
+ 63843: [[21271]],
+ 63844: [[30971]],
+ 63845: [[20415]],
+ 63846: [[24489]],
+ 63847: [[19981]],
+ 63848: [[27852]],
+ 63849: [[25976]],
+ 63850: [[32034]],
+ 63851: [[21443]],
+ 63852: [[22622]],
+ 63853: [[30465]],
+ 63854: [[33865]],
+ 63855: [[35498]],
+ 63856: [[27578]],
+ 63857: [[36784]],
+ 63858: [[27784]],
+ 63859: [[25342]],
+ 63860: [[33509]],
+ 63861: [[25504]],
+ 63862: [[30053]],
+ 63863: [[20142]],
+ 63864: [[20841]],
+ 63865: [[20937]],
+ 63866: [[26753]],
+ 63867: [[31975]],
+ 63868: [[33391]],
+ 63869: [[35538]],
+ 63870: [[37327]],
+ 63871: [[21237]],
+ 63872: [[21570]],
+ 63873: [[22899]],
+ 63874: [[24300]],
+ 63875: [[26053]],
+ 63876: [[28670]],
+ 63877: [[31018]],
+ 63878: [[38317]],
+ 63879: [[39530]],
+ 63880: [[40599]],
+ 63881: [[40654]],
+ 63882: [[21147]],
+ 63883: [[26310]],
+ 63884: [[27511]],
+ 63885: [[36706]],
+ 63886: [[24180]],
+ 63887: [[24976]],
+ 63888: [[25088]],
+ 63889: [[25754]],
+ 63890: [[28451]],
+ 63891: [[29001]],
+ 63892: [[29833]],
+ 63893: [[31178]],
+ 63894: [[32244]],
+ 63895: [[32879]],
+ 63896: [[36646]],
+ 63897: [[34030]],
+ 63898: [[36899]],
+ 63899: [[37706]],
+ 63900: [[21015]],
+ 63901: [[21155]],
+ 63902: [[21693]],
+ 63903: [[28872]],
+ 63904: [[35010]],
+ 63905: [[35498]],
+ 63906: [[24265]],
+ 63907: [[24565]],
+ 63908: [[25467]],
+ 63909: [[27566]],
+ 63910: [[31806]],
+ 63911: [[29557]],
+ 63912: [[20196]],
+ 63913: [[22265]],
+ 63914: [[23527]],
+ 63915: [[23994]],
+ 63916: [[24604]],
+ 63917: [[29618]],
+ 63918: [[29801]],
+ 63919: [[32666]],
+ 63920: [[32838]],
+ 63921: [[37428]],
+ 63922: [[38646]],
+ 63923: [[38728]],
+ 63924: [[38936]],
+ 63925: [[20363]],
+ 63926: [[31150]],
+ 63927: [[37300]],
+ 63928: [[38584]],
+ 63929: [[24801]],
+ 63930: [[20102]],
+ 63931: [[20698]],
+ 63932: [[23534]],
+ 63933: [[23615]],
+ 63934: [[26009]],
+ 63935: [[27138]],
+ 63936: [[29134]],
+ 63937: [[30274]],
+ 63938: [[34044]],
+ 63939: [[36988]],
+ 63940: [[40845]],
+ 63941: [[26248]],
+ 63942: [[38446]],
+ 63943: [[21129]],
+ 63944: [[26491]],
+ 63945: [[26611]],
+ 63946: [[27969]],
+ 63947: [[28316]],
+ 63948: [[29705]],
+ 63949: [[30041]],
+ 63950: [[30827]],
+ 63951: [[32016]],
+ 63952: [[39006]],
+ 63953: [[20845]],
+ 63954: [[25134]],
+ 63955: [[38520]],
+ 63956: [[20523]],
+ 63957: [[23833]],
+ 63958: [[28138]],
+ 63959: [[36650]],
+ 63960: [[24459]],
+ 63961: [[24900]],
+ 63962: [[26647]],
+ 63963: [[29575]],
+ 63964: [[38534]],
+ 63965: [[21033]],
+ 63966: [[21519]],
+ 63967: [[23653]],
+ 63968: [[26131]],
+ 63969: [[26446]],
+ 63970: [[26792]],
+ 63971: [[27877]],
+ 63972: [[29702]],
+ 63973: [[30178]],
+ 63974: [[32633]],
+ 63975: [[35023]],
+ 63976: [[35041]],
+ 63977: [[37324]],
+ 63978: [[38626]],
+ 63979: [[21311]],
+ 63980: [[28346]],
+ 63981: [[21533]],
+ 63982: [[29136]],
+ 63983: [[29848]],
+ 63984: [[34298]],
+ 63985: [[38563]],
+ 63986: [[40023]],
+ 63987: [[40607]],
+ 63988: [[26519]],
+ 63989: [[28107]],
+ 63990: [[33256]],
+ 63991: [[31435]],
+ 63992: [[31520]],
+ 63993: [[31890]],
+ 63994: [[29376]],
+ 63995: [[28825]],
+ 63996: [[35672]],
+ 63997: [[20160]],
+ 63998: [[33590]],
+ 63999: [[21050]],
+ 194816: [[27966]],
+ 194817: [[28023]],
+ 194818: [[27969]],
+ 194819: [[28009]],
+ 194820: [[28024]],
+ 194821: [[28037]],
+ 194822: [[146718]],
+ 194823: [[27956]],
+ 194824: [[28207]],
+ 194825: [[28270]],
+ 194826: [[15667]],
+ 194827: [[28363]],
+ 194828: [[28359]],
+ 194829: [[147153]],
+ 194830: [[28153]],
+ 194831: [[28526]],
+ 194832: [[147294]],
+ 194833: [[147342]],
+ 194834: [[28614]],
+ 194835: [[28729]],
+ 194836: [[28702]],
+ 194837: [[28699]],
+ 194838: [[15766]],
+ 194839: [[28746]],
+ 194840: [[28797]],
+ 194841: [[28791]],
+ 194842: [[28845]],
+ 194843: [[132389]],
+ 194844: [[28997]],
+ 194845: [[148067]],
+ 194846: [[29084]],
+ 194847: [[148395]],
+ 194848: [[29224]],
+ 194849: [[29237]],
+ 194850: [[29264]],
+ 194851: [[149000]],
+ 194852: [[29312]],
+ 194853: [[29333]],
+ 194854: [[149301]],
+ 194855: [[149524]],
+ 194856: [[29562]],
+ 194857: [[29579]],
+ 194858: [[16044]],
+ 194859: [[29605]],
+ 194860: [[16056]],
+ 194861: [[16056]],
+ 194862: [[29767]],
+ 194863: [[29788]],
+ 194864: [[29809]],
+ 194865: [[29829]],
+ 194866: [[29898]],
+ 194867: [[16155]],
+ 194868: [[29988]],
+ 194869: [[150582]],
+ 194870: [[30014]],
+ 194871: [[150674]],
+ 194872: [[30064]],
+ 194873: [[139679]],
+ 194874: [[30224]],
+ 194875: [[151457]],
+ 194876: [[151480]],
+ 194877: [[151620]],
+ 194878: [[16380]],
+ 194879: [[16392]],
+ 194880: [[30452]],
+ 194881: [[151795]],
+ 194882: [[151794]],
+ 194883: [[151833]],
+ 194884: [[151859]],
+ 194885: [[30494]],
+ 194886: [[30495]],
+ 194887: [[30495]],
+ 194888: [[30538]],
+ 194889: [[16441]],
+ 194890: [[30603]],
+ 194891: [[16454]],
+ 194892: [[16534]],
+ 194893: [[152605]],
+ 194894: [[30798]],
+ 194895: [[30860]],
+ 194896: [[30924]],
+ 194897: [[16611]],
+ 194898: [[153126]],
+ 194899: [[31062]],
+ 194900: [[153242]],
+ 194901: [[153285]],
+ 194902: [[31119]],
+ 194903: [[31211]],
+ 194904: [[16687]],
+ 194905: [[31296]],
+ 194906: [[31306]],
+ 194907: [[31311]],
+ 194908: [[153980]],
+ 194909: [[154279]],
+ 194910: [[154279]],
+ 194911: [[31470]],
+ 194912: [[16898]],
+ 194913: [[154539]],
+ 194914: [[31686]],
+ 194915: [[31689]],
+ 194916: [[16935]],
+ 194917: [[154752]],
+ 194918: [[31954]],
+ 194919: [[17056]],
+ 194920: [[31976]],
+ 194921: [[31971]],
+ 194922: [[32000]],
+ 194923: [[155526]],
+ 194924: [[32099]],
+ 194925: [[17153]],
+ 194926: [[32199]],
+ 194927: [[32258]],
+ 194928: [[32325]],
+ 194929: [[17204]],
+ 194930: [[156200]],
+ 194931: [[156231]],
+ 194932: [[17241]],
+ 194933: [[156377]],
+ 194934: [[32634]],
+ 194935: [[156478]],
+ 194936: [[32661]],
+ 194937: [[32762]],
+ 194938: [[32773]],
+ 194939: [[156890]],
+ 194940: [[156963]],
+ 194941: [[32864]],
+ 194942: [[157096]],
+ 194943: [[32880]],
+ 194944: [[144223]],
+ 194945: [[17365]],
+ 194946: [[32946]],
+ 194947: [[33027]],
+ 194948: [[17419]],
+ 194949: [[33086]],
+ 194950: [[23221]],
+ 194951: [[157607]],
+ 194952: [[157621]],
+ 194953: [[144275]],
+ 194954: [[144284]],
+ 194955: [[33281]],
+ 194956: [[33284]],
+ 194957: [[36766]],
+ 194958: [[17515]],
+ 194959: [[33425]],
+ 194960: [[33419]],
+ 194961: [[33437]],
+ 194962: [[21171]],
+ 194963: [[33457]],
+ 194964: [[33459]],
+ 194965: [[33469]],
+ 194966: [[33510]],
+ 194967: [[158524]],
+ 194968: [[33509]],
+ 194969: [[33565]],
+ 194970: [[33635]],
+ 194971: [[33709]],
+ 194972: [[33571]],
+ 194973: [[33725]],
+ 194974: [[33767]],
+ 194975: [[33879]],
+ 194976: [[33619]],
+ 194977: [[33738]],
+ 194978: [[33740]],
+ 194979: [[33756]],
+ 194980: [[158774]],
+ 194981: [[159083]],
+ 194982: [[158933]],
+ 194983: [[17707]],
+ 194984: [[34033]],
+ 194985: [[34035]],
+ 194986: [[34070]],
+ 194987: [[160714]],
+ 194988: [[34148]],
+ 194989: [[159532]],
+ 194990: [[17757]],
+ 194991: [[17761]],
+ 194992: [[159665]],
+ 194993: [[159954]],
+ 194994: [[17771]],
+ 194995: [[34384]],
+ 194996: [[34396]],
+ 194997: [[34407]],
+ 194998: [[34409]],
+ 194999: [[34473]],
+ 195000: [[34440]],
+ 195001: [[34574]],
+ 195002: [[34530]],
+ 195003: [[34681]],
+ 195004: [[34600]],
+ 195005: [[34667]],
+ 195006: [[34694]],
+ 195007: [[17879]],
+ 195008: [[34785]],
+ 195009: [[34817]],
+ 195010: [[17913]],
+ 195011: [[34912]],
+ 195012: [[34915]],
+ 195013: [[161383]],
+ 195014: [[35031]],
+ 195015: [[35038]],
+ 195016: [[17973]],
+ 195017: [[35066]],
+ 195018: [[13499]],
+ 195019: [[161966]],
+ 195020: [[162150]],
+ 195021: [[18110]],
+ 195022: [[18119]],
+ 195023: [[35488]],
+ 195024: [[35565]],
+ 195025: [[35722]],
+ 195026: [[35925]],
+ 195027: [[162984]],
+ 195028: [[36011]],
+ 195029: [[36033]],
+ 195030: [[36123]],
+ 195031: [[36215]],
+ 195032: [[163631]],
+ 195033: [[133124]],
+ 195034: [[36299]],
+ 195035: [[36284]],
+ 195036: [[36336]],
+ 195037: [[133342]],
+ 195038: [[36564]],
+ 195039: [[36664]],
+ 195040: [[165330]],
+ 195041: [[165357]],
+ 195042: [[37012]],
+ 195043: [[37105]],
+ 195044: [[37137]],
+ 195045: [[165678]],
+ 195046: [[37147]],
+ 195047: [[37432]],
+ 195048: [[37591]],
+ 195049: [[37592]],
+ 195050: [[37500]],
+ 195051: [[37881]],
+ 195052: [[37909]],
+ 195053: [[166906]],
+ 195054: [[38283]],
+ 195055: [[18837]],
+ 195056: [[38327]],
+ 195057: [[167287]],
+ 195058: [[18918]],
+ 195059: [[38595]],
+ 195060: [[23986]],
+ 195061: [[38691]],
+ 195062: [[168261]],
+ 195063: [[168474]],
+ 195064: [[19054]],
+ 195065: [[19062]],
+ 195066: [[38880]],
+ 195067: [[168970]],
+ 195068: [[19122]],
+ 195069: [[169110]],
+ 195070: [[38923]],
+ 195071: [[38923]]
+ },
+ 64000: {
+ 64000: [[20999]],
+ 64001: [[24230]],
+ 64002: [[25299]],
+ 64003: [[31958]],
+ 64004: [[23429]],
+ 64005: [[27934]],
+ 64006: [[26292]],
+ 64007: [[36667]],
+ 64008: [[34892]],
+ 64009: [[38477]],
+ 64010: [[35211]],
+ 64011: [[24275]],
+ 64012: [[20800]],
+ 64013: [[21952]],
+ 64016: [[22618]],
+ 64018: [[26228]],
+ 64021: [[20958]],
+ 64022: [[29482]],
+ 64023: [[30410]],
+ 64024: [[31036]],
+ 64025: [[31070]],
+ 64026: [[31077]],
+ 64027: [[31119]],
+ 64028: [[38742]],
+ 64029: [[31934]],
+ 64030: [[32701]],
+ 64032: [[34322]],
+ 64034: [[35576]],
+ 64037: [[36920]],
+ 64038: [[37117]],
+ 64042: [[39151]],
+ 64043: [[39164]],
+ 64044: [[39208]],
+ 64045: [[40372]],
+ 64046: [[37086]],
+ 64047: [[38583]],
+ 64048: [[20398]],
+ 64049: [[20711]],
+ 64050: [[20813]],
+ 64051: [[21193]],
+ 64052: [[21220]],
+ 64053: [[21329]],
+ 64054: [[21917]],
+ 64055: [[22022]],
+ 64056: [[22120]],
+ 64057: [[22592]],
+ 64058: [[22696]],
+ 64059: [[23652]],
+ 64060: [[23662]],
+ 64061: [[24724]],
+ 64062: [[24936]],
+ 64063: [[24974]],
+ 64064: [[25074]],
+ 64065: [[25935]],
+ 64066: [[26082]],
+ 64067: [[26257]],
+ 64068: [[26757]],
+ 64069: [[28023]],
+ 64070: [[28186]],
+ 64071: [[28450]],
+ 64072: [[29038]],
+ 64073: [[29227]],
+ 64074: [[29730]],
+ 64075: [[30865]],
+ 64076: [[31038]],
+ 64077: [[31049]],
+ 64078: [[31048]],
+ 64079: [[31056]],
+ 64080: [[31062]],
+ 64081: [[31069]],
+ 64082: [[31117]],
+ 64083: [[31118]],
+ 64084: [[31296]],
+ 64085: [[31361]],
+ 64086: [[31680]],
+ 64087: [[32244]],
+ 64088: [[32265]],
+ 64089: [[32321]],
+ 64090: [[32626]],
+ 64091: [[32773]],
+ 64092: [[33261]],
+ 64093: [[33401]],
+ 64094: [[33401]],
+ 64095: [[33879]],
+ 64096: [[35088]],
+ 64097: [[35222]],
+ 64098: [[35585]],
+ 64099: [[35641]],
+ 64100: [[36051]],
+ 64101: [[36104]],
+ 64102: [[36790]],
+ 64103: [[36920]],
+ 64104: [[38627]],
+ 64105: [[38911]],
+ 64106: [[38971]],
+ 64107: [[24693]],
+ 64108: [[148206]],
+ 64109: [[33304]],
+ 64112: [[20006]],
+ 64113: [[20917]],
+ 64114: [[20840]],
+ 64115: [[20352]],
+ 64116: [[20805]],
+ 64117: [[20864]],
+ 64118: [[21191]],
+ 64119: [[21242]],
+ 64120: [[21917]],
+ 64121: [[21845]],
+ 64122: [[21913]],
+ 64123: [[21986]],
+ 64124: [[22618]],
+ 64125: [[22707]],
+ 64126: [[22852]],
+ 64127: [[22868]],
+ 64128: [[23138]],
+ 64129: [[23336]],
+ 64130: [[24274]],
+ 64131: [[24281]],
+ 64132: [[24425]],
+ 64133: [[24493]],
+ 64134: [[24792]],
+ 64135: [[24910]],
+ 64136: [[24840]],
+ 64137: [[24974]],
+ 64138: [[24928]],
+ 64139: [[25074]],
+ 64140: [[25140]],
+ 64141: [[25540]],
+ 64142: [[25628]],
+ 64143: [[25682]],
+ 64144: [[25942]],
+ 64145: [[26228]],
+ 64146: [[26391]],
+ 64147: [[26395]],
+ 64148: [[26454]],
+ 64149: [[27513]],
+ 64150: [[27578]],
+ 64151: [[27969]],
+ 64152: [[28379]],
+ 64153: [[28363]],
+ 64154: [[28450]],
+ 64155: [[28702]],
+ 64156: [[29038]],
+ 64157: [[30631]],
+ 64158: [[29237]],
+ 64159: [[29359]],
+ 64160: [[29482]],
+ 64161: [[29809]],
+ 64162: [[29958]],
+ 64163: [[30011]],
+ 64164: [[30237]],
+ 64165: [[30239]],
+ 64166: [[30410]],
+ 64167: [[30427]],
+ 64168: [[30452]],
+ 64169: [[30538]],
+ 64170: [[30528]],
+ 64171: [[30924]],
+ 64172: [[31409]],
+ 64173: [[31680]],
+ 64174: [[31867]],
+ 64175: [[32091]],
+ 64176: [[32244]],
+ 64177: [[32574]],
+ 64178: [[32773]],
+ 64179: [[33618]],
+ 64180: [[33775]],
+ 64181: [[34681]],
+ 64182: [[35137]],
+ 64183: [[35206]],
+ 64184: [[35222]],
+ 64185: [[35519]],
+ 64186: [[35576]],
+ 64187: [[35531]],
+ 64188: [[35585]],
+ 64189: [[35582]],
+ 64190: [[35565]],
+ 64191: [[35641]],
+ 64192: [[35722]],
+ 64193: [[36104]],
+ 64194: [[36664]],
+ 64195: [[36978]],
+ 64196: [[37273]],
+ 64197: [[37494]],
+ 64198: [[38524]],
+ 64199: [[38627]],
+ 64200: [[38742]],
+ 64201: [[38875]],
+ 64202: [[38911]],
+ 64203: [[38923]],
+ 64204: [[38971]],
+ 64205: [[39698]],
+ 64206: [[40860]],
+ 64207: [[141386]],
+ 64208: [[141380]],
+ 64209: [[144341]],
+ 64210: [[15261]],
+ 64211: [[16408]],
+ 64212: [[16441]],
+ 64213: [[152137]],
+ 64214: [[154832]],
+ 64215: [[163539]],
+ 64216: [[40771]],
+ 64217: [[40846]],
+ 195072: [[38953]],
+ 195073: [[169398]],
+ 195074: [[39138]],
+ 195075: [[19251]],
+ 195076: [[39209]],
+ 195077: [[39335]],
+ 195078: [[39362]],
+ 195079: [[39422]],
+ 195080: [[19406]],
+ 195081: [[170800]],
+ 195082: [[39698]],
+ 195083: [[40000]],
+ 195084: [[40189]],
+ 195085: [[19662]],
+ 195086: [[19693]],
+ 195087: [[40295]],
+ 195088: [[172238]],
+ 195089: [[19704]],
+ 195090: [[172293]],
+ 195091: [[172558]],
+ 195092: [[172689]],
+ 195093: [[40635]],
+ 195094: [[19798]],
+ 195095: [[40697]],
+ 195096: [[40702]],
+ 195097: [[40709]],
+ 195098: [[40719]],
+ 195099: [[40726]],
+ 195100: [[40763]],
+ 195101: [[173568]]
+ },
+ 64256: {
+ 64256: [[102, 102], 256],
+ 64257: [[102, 105], 256],
+ 64258: [[102, 108], 256],
+ 64259: [[102, 102, 105], 256],
+ 64260: [[102, 102, 108], 256],
+ 64261: [[383, 116], 256],
+ 64262: [[115, 116], 256],
+ 64275: [[1396, 1398], 256],
+ 64276: [[1396, 1381], 256],
+ 64277: [[1396, 1387], 256],
+ 64278: [[1406, 1398], 256],
+ 64279: [[1396, 1389], 256],
+ 64285: [[1497, 1460], 512],
+ 64286: [, 26],
+ 64287: [[1522, 1463], 512],
+ 64288: [[1506], 256],
+ 64289: [[1488], 256],
+ 64290: [[1491], 256],
+ 64291: [[1492], 256],
+ 64292: [[1499], 256],
+ 64293: [[1500], 256],
+ 64294: [[1501], 256],
+ 64295: [[1512], 256],
+ 64296: [[1514], 256],
+ 64297: [[43], 256],
+ 64298: [[1513, 1473], 512],
+ 64299: [[1513, 1474], 512],
+ 64300: [[64329, 1473], 512],
+ 64301: [[64329, 1474], 512],
+ 64302: [[1488, 1463], 512],
+ 64303: [[1488, 1464], 512],
+ 64304: [[1488, 1468], 512],
+ 64305: [[1489, 1468], 512],
+ 64306: [[1490, 1468], 512],
+ 64307: [[1491, 1468], 512],
+ 64308: [[1492, 1468], 512],
+ 64309: [[1493, 1468], 512],
+ 64310: [[1494, 1468], 512],
+ 64312: [[1496, 1468], 512],
+ 64313: [[1497, 1468], 512],
+ 64314: [[1498, 1468], 512],
+ 64315: [[1499, 1468], 512],
+ 64316: [[1500, 1468], 512],
+ 64318: [[1502, 1468], 512],
+ 64320: [[1504, 1468], 512],
+ 64321: [[1505, 1468], 512],
+ 64323: [[1507, 1468], 512],
+ 64324: [[1508, 1468], 512],
+ 64326: [[1510, 1468], 512],
+ 64327: [[1511, 1468], 512],
+ 64328: [[1512, 1468], 512],
+ 64329: [[1513, 1468], 512],
+ 64330: [[1514, 1468], 512],
+ 64331: [[1493, 1465], 512],
+ 64332: [[1489, 1471], 512],
+ 64333: [[1499, 1471], 512],
+ 64334: [[1508, 1471], 512],
+ 64335: [[1488, 1500], 256],
+ 64336: [[1649], 256],
+ 64337: [[1649], 256],
+ 64338: [[1659], 256],
+ 64339: [[1659], 256],
+ 64340: [[1659], 256],
+ 64341: [[1659], 256],
+ 64342: [[1662], 256],
+ 64343: [[1662], 256],
+ 64344: [[1662], 256],
+ 64345: [[1662], 256],
+ 64346: [[1664], 256],
+ 64347: [[1664], 256],
+ 64348: [[1664], 256],
+ 64349: [[1664], 256],
+ 64350: [[1658], 256],
+ 64351: [[1658], 256],
+ 64352: [[1658], 256],
+ 64353: [[1658], 256],
+ 64354: [[1663], 256],
+ 64355: [[1663], 256],
+ 64356: [[1663], 256],
+ 64357: [[1663], 256],
+ 64358: [[1657], 256],
+ 64359: [[1657], 256],
+ 64360: [[1657], 256],
+ 64361: [[1657], 256],
+ 64362: [[1700], 256],
+ 64363: [[1700], 256],
+ 64364: [[1700], 256],
+ 64365: [[1700], 256],
+ 64366: [[1702], 256],
+ 64367: [[1702], 256],
+ 64368: [[1702], 256],
+ 64369: [[1702], 256],
+ 64370: [[1668], 256],
+ 64371: [[1668], 256],
+ 64372: [[1668], 256],
+ 64373: [[1668], 256],
+ 64374: [[1667], 256],
+ 64375: [[1667], 256],
+ 64376: [[1667], 256],
+ 64377: [[1667], 256],
+ 64378: [[1670], 256],
+ 64379: [[1670], 256],
+ 64380: [[1670], 256],
+ 64381: [[1670], 256],
+ 64382: [[1671], 256],
+ 64383: [[1671], 256],
+ 64384: [[1671], 256],
+ 64385: [[1671], 256],
+ 64386: [[1677], 256],
+ 64387: [[1677], 256],
+ 64388: [[1676], 256],
+ 64389: [[1676], 256],
+ 64390: [[1678], 256],
+ 64391: [[1678], 256],
+ 64392: [[1672], 256],
+ 64393: [[1672], 256],
+ 64394: [[1688], 256],
+ 64395: [[1688], 256],
+ 64396: [[1681], 256],
+ 64397: [[1681], 256],
+ 64398: [[1705], 256],
+ 64399: [[1705], 256],
+ 64400: [[1705], 256],
+ 64401: [[1705], 256],
+ 64402: [[1711], 256],
+ 64403: [[1711], 256],
+ 64404: [[1711], 256],
+ 64405: [[1711], 256],
+ 64406: [[1715], 256],
+ 64407: [[1715], 256],
+ 64408: [[1715], 256],
+ 64409: [[1715], 256],
+ 64410: [[1713], 256],
+ 64411: [[1713], 256],
+ 64412: [[1713], 256],
+ 64413: [[1713], 256],
+ 64414: [[1722], 256],
+ 64415: [[1722], 256],
+ 64416: [[1723], 256],
+ 64417: [[1723], 256],
+ 64418: [[1723], 256],
+ 64419: [[1723], 256],
+ 64420: [[1728], 256],
+ 64421: [[1728], 256],
+ 64422: [[1729], 256],
+ 64423: [[1729], 256],
+ 64424: [[1729], 256],
+ 64425: [[1729], 256],
+ 64426: [[1726], 256],
+ 64427: [[1726], 256],
+ 64428: [[1726], 256],
+ 64429: [[1726], 256],
+ 64430: [[1746], 256],
+ 64431: [[1746], 256],
+ 64432: [[1747], 256],
+ 64433: [[1747], 256],
+ 64467: [[1709], 256],
+ 64468: [[1709], 256],
+ 64469: [[1709], 256],
+ 64470: [[1709], 256],
+ 64471: [[1735], 256],
+ 64472: [[1735], 256],
+ 64473: [[1734], 256],
+ 64474: [[1734], 256],
+ 64475: [[1736], 256],
+ 64476: [[1736], 256],
+ 64477: [[1655], 256],
+ 64478: [[1739], 256],
+ 64479: [[1739], 256],
+ 64480: [[1733], 256],
+ 64481: [[1733], 256],
+ 64482: [[1737], 256],
+ 64483: [[1737], 256],
+ 64484: [[1744], 256],
+ 64485: [[1744], 256],
+ 64486: [[1744], 256],
+ 64487: [[1744], 256],
+ 64488: [[1609], 256],
+ 64489: [[1609], 256],
+ 64490: [[1574, 1575], 256],
+ 64491: [[1574, 1575], 256],
+ 64492: [[1574, 1749], 256],
+ 64493: [[1574, 1749], 256],
+ 64494: [[1574, 1608], 256],
+ 64495: [[1574, 1608], 256],
+ 64496: [[1574, 1735], 256],
+ 64497: [[1574, 1735], 256],
+ 64498: [[1574, 1734], 256],
+ 64499: [[1574, 1734], 256],
+ 64500: [[1574, 1736], 256],
+ 64501: [[1574, 1736], 256],
+ 64502: [[1574, 1744], 256],
+ 64503: [[1574, 1744], 256],
+ 64504: [[1574, 1744], 256],
+ 64505: [[1574, 1609], 256],
+ 64506: [[1574, 1609], 256],
+ 64507: [[1574, 1609], 256],
+ 64508: [[1740], 256],
+ 64509: [[1740], 256],
+ 64510: [[1740], 256],
+ 64511: [[1740], 256]
+ },
+ 64512: {
+ 64512: [[1574, 1580], 256],
+ 64513: [[1574, 1581], 256],
+ 64514: [[1574, 1605], 256],
+ 64515: [[1574, 1609], 256],
+ 64516: [[1574, 1610], 256],
+ 64517: [[1576, 1580], 256],
+ 64518: [[1576, 1581], 256],
+ 64519: [[1576, 1582], 256],
+ 64520: [[1576, 1605], 256],
+ 64521: [[1576, 1609], 256],
+ 64522: [[1576, 1610], 256],
+ 64523: [[1578, 1580], 256],
+ 64524: [[1578, 1581], 256],
+ 64525: [[1578, 1582], 256],
+ 64526: [[1578, 1605], 256],
+ 64527: [[1578, 1609], 256],
+ 64528: [[1578, 1610], 256],
+ 64529: [[1579, 1580], 256],
+ 64530: [[1579, 1605], 256],
+ 64531: [[1579, 1609], 256],
+ 64532: [[1579, 1610], 256],
+ 64533: [[1580, 1581], 256],
+ 64534: [[1580, 1605], 256],
+ 64535: [[1581, 1580], 256],
+ 64536: [[1581, 1605], 256],
+ 64537: [[1582, 1580], 256],
+ 64538: [[1582, 1581], 256],
+ 64539: [[1582, 1605], 256],
+ 64540: [[1587, 1580], 256],
+ 64541: [[1587, 1581], 256],
+ 64542: [[1587, 1582], 256],
+ 64543: [[1587, 1605], 256],
+ 64544: [[1589, 1581], 256],
+ 64545: [[1589, 1605], 256],
+ 64546: [[1590, 1580], 256],
+ 64547: [[1590, 1581], 256],
+ 64548: [[1590, 1582], 256],
+ 64549: [[1590, 1605], 256],
+ 64550: [[1591, 1581], 256],
+ 64551: [[1591, 1605], 256],
+ 64552: [[1592, 1605], 256],
+ 64553: [[1593, 1580], 256],
+ 64554: [[1593, 1605], 256],
+ 64555: [[1594, 1580], 256],
+ 64556: [[1594, 1605], 256],
+ 64557: [[1601, 1580], 256],
+ 64558: [[1601, 1581], 256],
+ 64559: [[1601, 1582], 256],
+ 64560: [[1601, 1605], 256],
+ 64561: [[1601, 1609], 256],
+ 64562: [[1601, 1610], 256],
+ 64563: [[1602, 1581], 256],
+ 64564: [[1602, 1605], 256],
+ 64565: [[1602, 1609], 256],
+ 64566: [[1602, 1610], 256],
+ 64567: [[1603, 1575], 256],
+ 64568: [[1603, 1580], 256],
+ 64569: [[1603, 1581], 256],
+ 64570: [[1603, 1582], 256],
+ 64571: [[1603, 1604], 256],
+ 64572: [[1603, 1605], 256],
+ 64573: [[1603, 1609], 256],
+ 64574: [[1603, 1610], 256],
+ 64575: [[1604, 1580], 256],
+ 64576: [[1604, 1581], 256],
+ 64577: [[1604, 1582], 256],
+ 64578: [[1604, 1605], 256],
+ 64579: [[1604, 1609], 256],
+ 64580: [[1604, 1610], 256],
+ 64581: [[1605, 1580], 256],
+ 64582: [[1605, 1581], 256],
+ 64583: [[1605, 1582], 256],
+ 64584: [[1605, 1605], 256],
+ 64585: [[1605, 1609], 256],
+ 64586: [[1605, 1610], 256],
+ 64587: [[1606, 1580], 256],
+ 64588: [[1606, 1581], 256],
+ 64589: [[1606, 1582], 256],
+ 64590: [[1606, 1605], 256],
+ 64591: [[1606, 1609], 256],
+ 64592: [[1606, 1610], 256],
+ 64593: [[1607, 1580], 256],
+ 64594: [[1607, 1605], 256],
+ 64595: [[1607, 1609], 256],
+ 64596: [[1607, 1610], 256],
+ 64597: [[1610, 1580], 256],
+ 64598: [[1610, 1581], 256],
+ 64599: [[1610, 1582], 256],
+ 64600: [[1610, 1605], 256],
+ 64601: [[1610, 1609], 256],
+ 64602: [[1610, 1610], 256],
+ 64603: [[1584, 1648], 256],
+ 64604: [[1585, 1648], 256],
+ 64605: [[1609, 1648], 256],
+ 64606: [[32, 1612, 1617], 256],
+ 64607: [[32, 1613, 1617], 256],
+ 64608: [[32, 1614, 1617], 256],
+ 64609: [[32, 1615, 1617], 256],
+ 64610: [[32, 1616, 1617], 256],
+ 64611: [[32, 1617, 1648], 256],
+ 64612: [[1574, 1585], 256],
+ 64613: [[1574, 1586], 256],
+ 64614: [[1574, 1605], 256],
+ 64615: [[1574, 1606], 256],
+ 64616: [[1574, 1609], 256],
+ 64617: [[1574, 1610], 256],
+ 64618: [[1576, 1585], 256],
+ 64619: [[1576, 1586], 256],
+ 64620: [[1576, 1605], 256],
+ 64621: [[1576, 1606], 256],
+ 64622: [[1576, 1609], 256],
+ 64623: [[1576, 1610], 256],
+ 64624: [[1578, 1585], 256],
+ 64625: [[1578, 1586], 256],
+ 64626: [[1578, 1605], 256],
+ 64627: [[1578, 1606], 256],
+ 64628: [[1578, 1609], 256],
+ 64629: [[1578, 1610], 256],
+ 64630: [[1579, 1585], 256],
+ 64631: [[1579, 1586], 256],
+ 64632: [[1579, 1605], 256],
+ 64633: [[1579, 1606], 256],
+ 64634: [[1579, 1609], 256],
+ 64635: [[1579, 1610], 256],
+ 64636: [[1601, 1609], 256],
+ 64637: [[1601, 1610], 256],
+ 64638: [[1602, 1609], 256],
+ 64639: [[1602, 1610], 256],
+ 64640: [[1603, 1575], 256],
+ 64641: [[1603, 1604], 256],
+ 64642: [[1603, 1605], 256],
+ 64643: [[1603, 1609], 256],
+ 64644: [[1603, 1610], 256],
+ 64645: [[1604, 1605], 256],
+ 64646: [[1604, 1609], 256],
+ 64647: [[1604, 1610], 256],
+ 64648: [[1605, 1575], 256],
+ 64649: [[1605, 1605], 256],
+ 64650: [[1606, 1585], 256],
+ 64651: [[1606, 1586], 256],
+ 64652: [[1606, 1605], 256],
+ 64653: [[1606, 1606], 256],
+ 64654: [[1606, 1609], 256],
+ 64655: [[1606, 1610], 256],
+ 64656: [[1609, 1648], 256],
+ 64657: [[1610, 1585], 256],
+ 64658: [[1610, 1586], 256],
+ 64659: [[1610, 1605], 256],
+ 64660: [[1610, 1606], 256],
+ 64661: [[1610, 1609], 256],
+ 64662: [[1610, 1610], 256],
+ 64663: [[1574, 1580], 256],
+ 64664: [[1574, 1581], 256],
+ 64665: [[1574, 1582], 256],
+ 64666: [[1574, 1605], 256],
+ 64667: [[1574, 1607], 256],
+ 64668: [[1576, 1580], 256],
+ 64669: [[1576, 1581], 256],
+ 64670: [[1576, 1582], 256],
+ 64671: [[1576, 1605], 256],
+ 64672: [[1576, 1607], 256],
+ 64673: [[1578, 1580], 256],
+ 64674: [[1578, 1581], 256],
+ 64675: [[1578, 1582], 256],
+ 64676: [[1578, 1605], 256],
+ 64677: [[1578, 1607], 256],
+ 64678: [[1579, 1605], 256],
+ 64679: [[1580, 1581], 256],
+ 64680: [[1580, 1605], 256],
+ 64681: [[1581, 1580], 256],
+ 64682: [[1581, 1605], 256],
+ 64683: [[1582, 1580], 256],
+ 64684: [[1582, 1605], 256],
+ 64685: [[1587, 1580], 256],
+ 64686: [[1587, 1581], 256],
+ 64687: [[1587, 1582], 256],
+ 64688: [[1587, 1605], 256],
+ 64689: [[1589, 1581], 256],
+ 64690: [[1589, 1582], 256],
+ 64691: [[1589, 1605], 256],
+ 64692: [[1590, 1580], 256],
+ 64693: [[1590, 1581], 256],
+ 64694: [[1590, 1582], 256],
+ 64695: [[1590, 1605], 256],
+ 64696: [[1591, 1581], 256],
+ 64697: [[1592, 1605], 256],
+ 64698: [[1593, 1580], 256],
+ 64699: [[1593, 1605], 256],
+ 64700: [[1594, 1580], 256],
+ 64701: [[1594, 1605], 256],
+ 64702: [[1601, 1580], 256],
+ 64703: [[1601, 1581], 256],
+ 64704: [[1601, 1582], 256],
+ 64705: [[1601, 1605], 256],
+ 64706: [[1602, 1581], 256],
+ 64707: [[1602, 1605], 256],
+ 64708: [[1603, 1580], 256],
+ 64709: [[1603, 1581], 256],
+ 64710: [[1603, 1582], 256],
+ 64711: [[1603, 1604], 256],
+ 64712: [[1603, 1605], 256],
+ 64713: [[1604, 1580], 256],
+ 64714: [[1604, 1581], 256],
+ 64715: [[1604, 1582], 256],
+ 64716: [[1604, 1605], 256],
+ 64717: [[1604, 1607], 256],
+ 64718: [[1605, 1580], 256],
+ 64719: [[1605, 1581], 256],
+ 64720: [[1605, 1582], 256],
+ 64721: [[1605, 1605], 256],
+ 64722: [[1606, 1580], 256],
+ 64723: [[1606, 1581], 256],
+ 64724: [[1606, 1582], 256],
+ 64725: [[1606, 1605], 256],
+ 64726: [[1606, 1607], 256],
+ 64727: [[1607, 1580], 256],
+ 64728: [[1607, 1605], 256],
+ 64729: [[1607, 1648], 256],
+ 64730: [[1610, 1580], 256],
+ 64731: [[1610, 1581], 256],
+ 64732: [[1610, 1582], 256],
+ 64733: [[1610, 1605], 256],
+ 64734: [[1610, 1607], 256],
+ 64735: [[1574, 1605], 256],
+ 64736: [[1574, 1607], 256],
+ 64737: [[1576, 1605], 256],
+ 64738: [[1576, 1607], 256],
+ 64739: [[1578, 1605], 256],
+ 64740: [[1578, 1607], 256],
+ 64741: [[1579, 1605], 256],
+ 64742: [[1579, 1607], 256],
+ 64743: [[1587, 1605], 256],
+ 64744: [[1587, 1607], 256],
+ 64745: [[1588, 1605], 256],
+ 64746: [[1588, 1607], 256],
+ 64747: [[1603, 1604], 256],
+ 64748: [[1603, 1605], 256],
+ 64749: [[1604, 1605], 256],
+ 64750: [[1606, 1605], 256],
+ 64751: [[1606, 1607], 256],
+ 64752: [[1610, 1605], 256],
+ 64753: [[1610, 1607], 256],
+ 64754: [[1600, 1614, 1617], 256],
+ 64755: [[1600, 1615, 1617], 256],
+ 64756: [[1600, 1616, 1617], 256],
+ 64757: [[1591, 1609], 256],
+ 64758: [[1591, 1610], 256],
+ 64759: [[1593, 1609], 256],
+ 64760: [[1593, 1610], 256],
+ 64761: [[1594, 1609], 256],
+ 64762: [[1594, 1610], 256],
+ 64763: [[1587, 1609], 256],
+ 64764: [[1587, 1610], 256],
+ 64765: [[1588, 1609], 256],
+ 64766: [[1588, 1610], 256],
+ 64767: [[1581, 1609], 256]
+ },
+ 64768: {
+ 64768: [[1581, 1610], 256],
+ 64769: [[1580, 1609], 256],
+ 64770: [[1580, 1610], 256],
+ 64771: [[1582, 1609], 256],
+ 64772: [[1582, 1610], 256],
+ 64773: [[1589, 1609], 256],
+ 64774: [[1589, 1610], 256],
+ 64775: [[1590, 1609], 256],
+ 64776: [[1590, 1610], 256],
+ 64777: [[1588, 1580], 256],
+ 64778: [[1588, 1581], 256],
+ 64779: [[1588, 1582], 256],
+ 64780: [[1588, 1605], 256],
+ 64781: [[1588, 1585], 256],
+ 64782: [[1587, 1585], 256],
+ 64783: [[1589, 1585], 256],
+ 64784: [[1590, 1585], 256],
+ 64785: [[1591, 1609], 256],
+ 64786: [[1591, 1610], 256],
+ 64787: [[1593, 1609], 256],
+ 64788: [[1593, 1610], 256],
+ 64789: [[1594, 1609], 256],
+ 64790: [[1594, 1610], 256],
+ 64791: [[1587, 1609], 256],
+ 64792: [[1587, 1610], 256],
+ 64793: [[1588, 1609], 256],
+ 64794: [[1588, 1610], 256],
+ 64795: [[1581, 1609], 256],
+ 64796: [[1581, 1610], 256],
+ 64797: [[1580, 1609], 256],
+ 64798: [[1580, 1610], 256],
+ 64799: [[1582, 1609], 256],
+ 64800: [[1582, 1610], 256],
+ 64801: [[1589, 1609], 256],
+ 64802: [[1589, 1610], 256],
+ 64803: [[1590, 1609], 256],
+ 64804: [[1590, 1610], 256],
+ 64805: [[1588, 1580], 256],
+ 64806: [[1588, 1581], 256],
+ 64807: [[1588, 1582], 256],
+ 64808: [[1588, 1605], 256],
+ 64809: [[1588, 1585], 256],
+ 64810: [[1587, 1585], 256],
+ 64811: [[1589, 1585], 256],
+ 64812: [[1590, 1585], 256],
+ 64813: [[1588, 1580], 256],
+ 64814: [[1588, 1581], 256],
+ 64815: [[1588, 1582], 256],
+ 64816: [[1588, 1605], 256],
+ 64817: [[1587, 1607], 256],
+ 64818: [[1588, 1607], 256],
+ 64819: [[1591, 1605], 256],
+ 64820: [[1587, 1580], 256],
+ 64821: [[1587, 1581], 256],
+ 64822: [[1587, 1582], 256],
+ 64823: [[1588, 1580], 256],
+ 64824: [[1588, 1581], 256],
+ 64825: [[1588, 1582], 256],
+ 64826: [[1591, 1605], 256],
+ 64827: [[1592, 1605], 256],
+ 64828: [[1575, 1611], 256],
+ 64829: [[1575, 1611], 256],
+ 64848: [[1578, 1580, 1605], 256],
+ 64849: [[1578, 1581, 1580], 256],
+ 64850: [[1578, 1581, 1580], 256],
+ 64851: [[1578, 1581, 1605], 256],
+ 64852: [[1578, 1582, 1605], 256],
+ 64853: [[1578, 1605, 1580], 256],
+ 64854: [[1578, 1605, 1581], 256],
+ 64855: [[1578, 1605, 1582], 256],
+ 64856: [[1580, 1605, 1581], 256],
+ 64857: [[1580, 1605, 1581], 256],
+ 64858: [[1581, 1605, 1610], 256],
+ 64859: [[1581, 1605, 1609], 256],
+ 64860: [[1587, 1581, 1580], 256],
+ 64861: [[1587, 1580, 1581], 256],
+ 64862: [[1587, 1580, 1609], 256],
+ 64863: [[1587, 1605, 1581], 256],
+ 64864: [[1587, 1605, 1581], 256],
+ 64865: [[1587, 1605, 1580], 256],
+ 64866: [[1587, 1605, 1605], 256],
+ 64867: [[1587, 1605, 1605], 256],
+ 64868: [[1589, 1581, 1581], 256],
+ 64869: [[1589, 1581, 1581], 256],
+ 64870: [[1589, 1605, 1605], 256],
+ 64871: [[1588, 1581, 1605], 256],
+ 64872: [[1588, 1581, 1605], 256],
+ 64873: [[1588, 1580, 1610], 256],
+ 64874: [[1588, 1605, 1582], 256],
+ 64875: [[1588, 1605, 1582], 256],
+ 64876: [[1588, 1605, 1605], 256],
+ 64877: [[1588, 1605, 1605], 256],
+ 64878: [[1590, 1581, 1609], 256],
+ 64879: [[1590, 1582, 1605], 256],
+ 64880: [[1590, 1582, 1605], 256],
+ 64881: [[1591, 1605, 1581], 256],
+ 64882: [[1591, 1605, 1581], 256],
+ 64883: [[1591, 1605, 1605], 256],
+ 64884: [[1591, 1605, 1610], 256],
+ 64885: [[1593, 1580, 1605], 256],
+ 64886: [[1593, 1605, 1605], 256],
+ 64887: [[1593, 1605, 1605], 256],
+ 64888: [[1593, 1605, 1609], 256],
+ 64889: [[1594, 1605, 1605], 256],
+ 64890: [[1594, 1605, 1610], 256],
+ 64891: [[1594, 1605, 1609], 256],
+ 64892: [[1601, 1582, 1605], 256],
+ 64893: [[1601, 1582, 1605], 256],
+ 64894: [[1602, 1605, 1581], 256],
+ 64895: [[1602, 1605, 1605], 256],
+ 64896: [[1604, 1581, 1605], 256],
+ 64897: [[1604, 1581, 1610], 256],
+ 64898: [[1604, 1581, 1609], 256],
+ 64899: [[1604, 1580, 1580], 256],
+ 64900: [[1604, 1580, 1580], 256],
+ 64901: [[1604, 1582, 1605], 256],
+ 64902: [[1604, 1582, 1605], 256],
+ 64903: [[1604, 1605, 1581], 256],
+ 64904: [[1604, 1605, 1581], 256],
+ 64905: [[1605, 1581, 1580], 256],
+ 64906: [[1605, 1581, 1605], 256],
+ 64907: [[1605, 1581, 1610], 256],
+ 64908: [[1605, 1580, 1581], 256],
+ 64909: [[1605, 1580, 1605], 256],
+ 64910: [[1605, 1582, 1580], 256],
+ 64911: [[1605, 1582, 1605], 256],
+ 64914: [[1605, 1580, 1582], 256],
+ 64915: [[1607, 1605, 1580], 256],
+ 64916: [[1607, 1605, 1605], 256],
+ 64917: [[1606, 1581, 1605], 256],
+ 64918: [[1606, 1581, 1609], 256],
+ 64919: [[1606, 1580, 1605], 256],
+ 64920: [[1606, 1580, 1605], 256],
+ 64921: [[1606, 1580, 1609], 256],
+ 64922: [[1606, 1605, 1610], 256],
+ 64923: [[1606, 1605, 1609], 256],
+ 64924: [[1610, 1605, 1605], 256],
+ 64925: [[1610, 1605, 1605], 256],
+ 64926: [[1576, 1582, 1610], 256],
+ 64927: [[1578, 1580, 1610], 256],
+ 64928: [[1578, 1580, 1609], 256],
+ 64929: [[1578, 1582, 1610], 256],
+ 64930: [[1578, 1582, 1609], 256],
+ 64931: [[1578, 1605, 1610], 256],
+ 64932: [[1578, 1605, 1609], 256],
+ 64933: [[1580, 1605, 1610], 256],
+ 64934: [[1580, 1581, 1609], 256],
+ 64935: [[1580, 1605, 1609], 256],
+ 64936: [[1587, 1582, 1609], 256],
+ 64937: [[1589, 1581, 1610], 256],
+ 64938: [[1588, 1581, 1610], 256],
+ 64939: [[1590, 1581, 1610], 256],
+ 64940: [[1604, 1580, 1610], 256],
+ 64941: [[1604, 1605, 1610], 256],
+ 64942: [[1610, 1581, 1610], 256],
+ 64943: [[1610, 1580, 1610], 256],
+ 64944: [[1610, 1605, 1610], 256],
+ 64945: [[1605, 1605, 1610], 256],
+ 64946: [[1602, 1605, 1610], 256],
+ 64947: [[1606, 1581, 1610], 256],
+ 64948: [[1602, 1605, 1581], 256],
+ 64949: [[1604, 1581, 1605], 256],
+ 64950: [[1593, 1605, 1610], 256],
+ 64951: [[1603, 1605, 1610], 256],
+ 64952: [[1606, 1580, 1581], 256],
+ 64953: [[1605, 1582, 1610], 256],
+ 64954: [[1604, 1580, 1605], 256],
+ 64955: [[1603, 1605, 1605], 256],
+ 64956: [[1604, 1580, 1605], 256],
+ 64957: [[1606, 1580, 1581], 256],
+ 64958: [[1580, 1581, 1610], 256],
+ 64959: [[1581, 1580, 1610], 256],
+ 64960: [[1605, 1580, 1610], 256],
+ 64961: [[1601, 1605, 1610], 256],
+ 64962: [[1576, 1581, 1610], 256],
+ 64963: [[1603, 1605, 1605], 256],
+ 64964: [[1593, 1580, 1605], 256],
+ 64965: [[1589, 1605, 1605], 256],
+ 64966: [[1587, 1582, 1610], 256],
+ 64967: [[1606, 1580, 1610], 256],
+ 65008: [[1589, 1604, 1746], 256],
+ 65009: [[1602, 1604, 1746], 256],
+ 65010: [[1575, 1604, 1604, 1607], 256],
+ 65011: [[1575, 1603, 1576, 1585], 256],
+ 65012: [[1605, 1581, 1605, 1583], 256],
+ 65013: [[1589, 1604, 1593, 1605], 256],
+ 65014: [[1585, 1587, 1608, 1604], 256],
+ 65015: [[1593, 1604, 1610, 1607], 256],
+ 65016: [[1608, 1587, 1604, 1605], 256],
+ 65017: [[1589, 1604, 1609], 256],
+ 65018: [
+ [
+ 1589, 1604, 1609, 32, 1575, 1604, 1604, 1607, 32, 1593, 1604, 1610, 1607, 32, 1608,
+ 1587, 1604, 1605
+ ],
+ 256
+ ],
+ 65019: [[1580, 1604, 32, 1580, 1604, 1575, 1604, 1607], 256],
+ 65020: [[1585, 1740, 1575, 1604], 256]
+ },
+ 65024: {
+ 65040: [[44], 256],
+ 65041: [[12289], 256],
+ 65042: [[12290], 256],
+ 65043: [[58], 256],
+ 65044: [[59], 256],
+ 65045: [[33], 256],
+ 65046: [[63], 256],
+ 65047: [[12310], 256],
+ 65048: [[12311], 256],
+ 65049: [[8230], 256],
+ 65056: [, 230],
+ 65057: [, 230],
+ 65058: [, 230],
+ 65059: [, 230],
+ 65060: [, 230],
+ 65061: [, 230],
+ 65062: [, 230],
+ 65072: [[8229], 256],
+ 65073: [[8212], 256],
+ 65074: [[8211], 256],
+ 65075: [[95], 256],
+ 65076: [[95], 256],
+ 65077: [[40], 256],
+ 65078: [[41], 256],
+ 65079: [[123], 256],
+ 65080: [[125], 256],
+ 65081: [[12308], 256],
+ 65082: [[12309], 256],
+ 65083: [[12304], 256],
+ 65084: [[12305], 256],
+ 65085: [[12298], 256],
+ 65086: [[12299], 256],
+ 65087: [[12296], 256],
+ 65088: [[12297], 256],
+ 65089: [[12300], 256],
+ 65090: [[12301], 256],
+ 65091: [[12302], 256],
+ 65092: [[12303], 256],
+ 65095: [[91], 256],
+ 65096: [[93], 256],
+ 65097: [[8254], 256],
+ 65098: [[8254], 256],
+ 65099: [[8254], 256],
+ 65100: [[8254], 256],
+ 65101: [[95], 256],
+ 65102: [[95], 256],
+ 65103: [[95], 256],
+ 65104: [[44], 256],
+ 65105: [[12289], 256],
+ 65106: [[46], 256],
+ 65108: [[59], 256],
+ 65109: [[58], 256],
+ 65110: [[63], 256],
+ 65111: [[33], 256],
+ 65112: [[8212], 256],
+ 65113: [[40], 256],
+ 65114: [[41], 256],
+ 65115: [[123], 256],
+ 65116: [[125], 256],
+ 65117: [[12308], 256],
+ 65118: [[12309], 256],
+ 65119: [[35], 256],
+ 65120: [[38], 256],
+ 65121: [[42], 256],
+ 65122: [[43], 256],
+ 65123: [[45], 256],
+ 65124: [[60], 256],
+ 65125: [[62], 256],
+ 65126: [[61], 256],
+ 65128: [[92], 256],
+ 65129: [[36], 256],
+ 65130: [[37], 256],
+ 65131: [[64], 256],
+ 65136: [[32, 1611], 256],
+ 65137: [[1600, 1611], 256],
+ 65138: [[32, 1612], 256],
+ 65140: [[32, 1613], 256],
+ 65142: [[32, 1614], 256],
+ 65143: [[1600, 1614], 256],
+ 65144: [[32, 1615], 256],
+ 65145: [[1600, 1615], 256],
+ 65146: [[32, 1616], 256],
+ 65147: [[1600, 1616], 256],
+ 65148: [[32, 1617], 256],
+ 65149: [[1600, 1617], 256],
+ 65150: [[32, 1618], 256],
+ 65151: [[1600, 1618], 256],
+ 65152: [[1569], 256],
+ 65153: [[1570], 256],
+ 65154: [[1570], 256],
+ 65155: [[1571], 256],
+ 65156: [[1571], 256],
+ 65157: [[1572], 256],
+ 65158: [[1572], 256],
+ 65159: [[1573], 256],
+ 65160: [[1573], 256],
+ 65161: [[1574], 256],
+ 65162: [[1574], 256],
+ 65163: [[1574], 256],
+ 65164: [[1574], 256],
+ 65165: [[1575], 256],
+ 65166: [[1575], 256],
+ 65167: [[1576], 256],
+ 65168: [[1576], 256],
+ 65169: [[1576], 256],
+ 65170: [[1576], 256],
+ 65171: [[1577], 256],
+ 65172: [[1577], 256],
+ 65173: [[1578], 256],
+ 65174: [[1578], 256],
+ 65175: [[1578], 256],
+ 65176: [[1578], 256],
+ 65177: [[1579], 256],
+ 65178: [[1579], 256],
+ 65179: [[1579], 256],
+ 65180: [[1579], 256],
+ 65181: [[1580], 256],
+ 65182: [[1580], 256],
+ 65183: [[1580], 256],
+ 65184: [[1580], 256],
+ 65185: [[1581], 256],
+ 65186: [[1581], 256],
+ 65187: [[1581], 256],
+ 65188: [[1581], 256],
+ 65189: [[1582], 256],
+ 65190: [[1582], 256],
+ 65191: [[1582], 256],
+ 65192: [[1582], 256],
+ 65193: [[1583], 256],
+ 65194: [[1583], 256],
+ 65195: [[1584], 256],
+ 65196: [[1584], 256],
+ 65197: [[1585], 256],
+ 65198: [[1585], 256],
+ 65199: [[1586], 256],
+ 65200: [[1586], 256],
+ 65201: [[1587], 256],
+ 65202: [[1587], 256],
+ 65203: [[1587], 256],
+ 65204: [[1587], 256],
+ 65205: [[1588], 256],
+ 65206: [[1588], 256],
+ 65207: [[1588], 256],
+ 65208: [[1588], 256],
+ 65209: [[1589], 256],
+ 65210: [[1589], 256],
+ 65211: [[1589], 256],
+ 65212: [[1589], 256],
+ 65213: [[1590], 256],
+ 65214: [[1590], 256],
+ 65215: [[1590], 256],
+ 65216: [[1590], 256],
+ 65217: [[1591], 256],
+ 65218: [[1591], 256],
+ 65219: [[1591], 256],
+ 65220: [[1591], 256],
+ 65221: [[1592], 256],
+ 65222: [[1592], 256],
+ 65223: [[1592], 256],
+ 65224: [[1592], 256],
+ 65225: [[1593], 256],
+ 65226: [[1593], 256],
+ 65227: [[1593], 256],
+ 65228: [[1593], 256],
+ 65229: [[1594], 256],
+ 65230: [[1594], 256],
+ 65231: [[1594], 256],
+ 65232: [[1594], 256],
+ 65233: [[1601], 256],
+ 65234: [[1601], 256],
+ 65235: [[1601], 256],
+ 65236: [[1601], 256],
+ 65237: [[1602], 256],
+ 65238: [[1602], 256],
+ 65239: [[1602], 256],
+ 65240: [[1602], 256],
+ 65241: [[1603], 256],
+ 65242: [[1603], 256],
+ 65243: [[1603], 256],
+ 65244: [[1603], 256],
+ 65245: [[1604], 256],
+ 65246: [[1604], 256],
+ 65247: [[1604], 256],
+ 65248: [[1604], 256],
+ 65249: [[1605], 256],
+ 65250: [[1605], 256],
+ 65251: [[1605], 256],
+ 65252: [[1605], 256],
+ 65253: [[1606], 256],
+ 65254: [[1606], 256],
+ 65255: [[1606], 256],
+ 65256: [[1606], 256],
+ 65257: [[1607], 256],
+ 65258: [[1607], 256],
+ 65259: [[1607], 256],
+ 65260: [[1607], 256],
+ 65261: [[1608], 256],
+ 65262: [[1608], 256],
+ 65263: [[1609], 256],
+ 65264: [[1609], 256],
+ 65265: [[1610], 256],
+ 65266: [[1610], 256],
+ 65267: [[1610], 256],
+ 65268: [[1610], 256],
+ 65269: [[1604, 1570], 256],
+ 65270: [[1604, 1570], 256],
+ 65271: [[1604, 1571], 256],
+ 65272: [[1604, 1571], 256],
+ 65273: [[1604, 1573], 256],
+ 65274: [[1604, 1573], 256],
+ 65275: [[1604, 1575], 256],
+ 65276: [[1604, 1575], 256]
+ },
+ 65280: {
+ 65281: [[33], 256],
+ 65282: [[34], 256],
+ 65283: [[35], 256],
+ 65284: [[36], 256],
+ 65285: [[37], 256],
+ 65286: [[38], 256],
+ 65287: [[39], 256],
+ 65288: [[40], 256],
+ 65289: [[41], 256],
+ 65290: [[42], 256],
+ 65291: [[43], 256],
+ 65292: [[44], 256],
+ 65293: [[45], 256],
+ 65294: [[46], 256],
+ 65295: [[47], 256],
+ 65296: [[48], 256],
+ 65297: [[49], 256],
+ 65298: [[50], 256],
+ 65299: [[51], 256],
+ 65300: [[52], 256],
+ 65301: [[53], 256],
+ 65302: [[54], 256],
+ 65303: [[55], 256],
+ 65304: [[56], 256],
+ 65305: [[57], 256],
+ 65306: [[58], 256],
+ 65307: [[59], 256],
+ 65308: [[60], 256],
+ 65309: [[61], 256],
+ 65310: [[62], 256],
+ 65311: [[63], 256],
+ 65312: [[64], 256],
+ 65313: [[65], 256],
+ 65314: [[66], 256],
+ 65315: [[67], 256],
+ 65316: [[68], 256],
+ 65317: [[69], 256],
+ 65318: [[70], 256],
+ 65319: [[71], 256],
+ 65320: [[72], 256],
+ 65321: [[73], 256],
+ 65322: [[74], 256],
+ 65323: [[75], 256],
+ 65324: [[76], 256],
+ 65325: [[77], 256],
+ 65326: [[78], 256],
+ 65327: [[79], 256],
+ 65328: [[80], 256],
+ 65329: [[81], 256],
+ 65330: [[82], 256],
+ 65331: [[83], 256],
+ 65332: [[84], 256],
+ 65333: [[85], 256],
+ 65334: [[86], 256],
+ 65335: [[87], 256],
+ 65336: [[88], 256],
+ 65337: [[89], 256],
+ 65338: [[90], 256],
+ 65339: [[91], 256],
+ 65340: [[92], 256],
+ 65341: [[93], 256],
+ 65342: [[94], 256],
+ 65343: [[95], 256],
+ 65344: [[96], 256],
+ 65345: [[97], 256],
+ 65346: [[98], 256],
+ 65347: [[99], 256],
+ 65348: [[100], 256],
+ 65349: [[101], 256],
+ 65350: [[102], 256],
+ 65351: [[103], 256],
+ 65352: [[104], 256],
+ 65353: [[105], 256],
+ 65354: [[106], 256],
+ 65355: [[107], 256],
+ 65356: [[108], 256],
+ 65357: [[109], 256],
+ 65358: [[110], 256],
+ 65359: [[111], 256],
+ 65360: [[112], 256],
+ 65361: [[113], 256],
+ 65362: [[114], 256],
+ 65363: [[115], 256],
+ 65364: [[116], 256],
+ 65365: [[117], 256],
+ 65366: [[118], 256],
+ 65367: [[119], 256],
+ 65368: [[120], 256],
+ 65369: [[121], 256],
+ 65370: [[122], 256],
+ 65371: [[123], 256],
+ 65372: [[124], 256],
+ 65373: [[125], 256],
+ 65374: [[126], 256],
+ 65375: [[10629], 256],
+ 65376: [[10630], 256],
+ 65377: [[12290], 256],
+ 65378: [[12300], 256],
+ 65379: [[12301], 256],
+ 65380: [[12289], 256],
+ 65381: [[12539], 256],
+ 65382: [[12530], 256],
+ 65383: [[12449], 256],
+ 65384: [[12451], 256],
+ 65385: [[12453], 256],
+ 65386: [[12455], 256],
+ 65387: [[12457], 256],
+ 65388: [[12515], 256],
+ 65389: [[12517], 256],
+ 65390: [[12519], 256],
+ 65391: [[12483], 256],
+ 65392: [[12540], 256],
+ 65393: [[12450], 256],
+ 65394: [[12452], 256],
+ 65395: [[12454], 256],
+ 65396: [[12456], 256],
+ 65397: [[12458], 256],
+ 65398: [[12459], 256],
+ 65399: [[12461], 256],
+ 65400: [[12463], 256],
+ 65401: [[12465], 256],
+ 65402: [[12467], 256],
+ 65403: [[12469], 256],
+ 65404: [[12471], 256],
+ 65405: [[12473], 256],
+ 65406: [[12475], 256],
+ 65407: [[12477], 256],
+ 65408: [[12479], 256],
+ 65409: [[12481], 256],
+ 65410: [[12484], 256],
+ 65411: [[12486], 256],
+ 65412: [[12488], 256],
+ 65413: [[12490], 256],
+ 65414: [[12491], 256],
+ 65415: [[12492], 256],
+ 65416: [[12493], 256],
+ 65417: [[12494], 256],
+ 65418: [[12495], 256],
+ 65419: [[12498], 256],
+ 65420: [[12501], 256],
+ 65421: [[12504], 256],
+ 65422: [[12507], 256],
+ 65423: [[12510], 256],
+ 65424: [[12511], 256],
+ 65425: [[12512], 256],
+ 65426: [[12513], 256],
+ 65427: [[12514], 256],
+ 65428: [[12516], 256],
+ 65429: [[12518], 256],
+ 65430: [[12520], 256],
+ 65431: [[12521], 256],
+ 65432: [[12522], 256],
+ 65433: [[12523], 256],
+ 65434: [[12524], 256],
+ 65435: [[12525], 256],
+ 65436: [[12527], 256],
+ 65437: [[12531], 256],
+ 65438: [[12441], 256],
+ 65439: [[12442], 256],
+ 65440: [[12644], 256],
+ 65441: [[12593], 256],
+ 65442: [[12594], 256],
+ 65443: [[12595], 256],
+ 65444: [[12596], 256],
+ 65445: [[12597], 256],
+ 65446: [[12598], 256],
+ 65447: [[12599], 256],
+ 65448: [[12600], 256],
+ 65449: [[12601], 256],
+ 65450: [[12602], 256],
+ 65451: [[12603], 256],
+ 65452: [[12604], 256],
+ 65453: [[12605], 256],
+ 65454: [[12606], 256],
+ 65455: [[12607], 256],
+ 65456: [[12608], 256],
+ 65457: [[12609], 256],
+ 65458: [[12610], 256],
+ 65459: [[12611], 256],
+ 65460: [[12612], 256],
+ 65461: [[12613], 256],
+ 65462: [[12614], 256],
+ 65463: [[12615], 256],
+ 65464: [[12616], 256],
+ 65465: [[12617], 256],
+ 65466: [[12618], 256],
+ 65467: [[12619], 256],
+ 65468: [[12620], 256],
+ 65469: [[12621], 256],
+ 65470: [[12622], 256],
+ 65474: [[12623], 256],
+ 65475: [[12624], 256],
+ 65476: [[12625], 256],
+ 65477: [[12626], 256],
+ 65478: [[12627], 256],
+ 65479: [[12628], 256],
+ 65482: [[12629], 256],
+ 65483: [[12630], 256],
+ 65484: [[12631], 256],
+ 65485: [[12632], 256],
+ 65486: [[12633], 256],
+ 65487: [[12634], 256],
+ 65490: [[12635], 256],
+ 65491: [[12636], 256],
+ 65492: [[12637], 256],
+ 65493: [[12638], 256],
+ 65494: [[12639], 256],
+ 65495: [[12640], 256],
+ 65498: [[12641], 256],
+ 65499: [[12642], 256],
+ 65500: [[12643], 256],
+ 65504: [[162], 256],
+ 65505: [[163], 256],
+ 65506: [[172], 256],
+ 65507: [[175], 256],
+ 65508: [[166], 256],
+ 65509: [[165], 256],
+ 65510: [[8361], 256],
+ 65512: [[9474], 256],
+ 65513: [[8592], 256],
+ 65514: [[8593], 256],
+ 65515: [[8594], 256],
+ 65516: [[8595], 256],
+ 65517: [[9632], 256],
+ 65518: [[9675], 256]
+ }
+};
diff --git a/node_modules/es5-ext/string/#/normalize/implement.js b/node_modules/es5-ext/string/#/normalize/implement.js
new file mode 100644
index 0000000..deb6089
--- /dev/null
+++ b/node_modules/es5-ext/string/#/normalize/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(String.prototype, "normalize", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/string/#/normalize/index.js b/node_modules/es5-ext/string/#/normalize/index.js
new file mode 100644
index 0000000..a8c04db
--- /dev/null
+++ b/node_modules/es5-ext/string/#/normalize/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? String.prototype.normalize : require("./shim");
diff --git a/node_modules/es5-ext/string/#/normalize/is-implemented.js b/node_modules/es5-ext/string/#/normalize/is-implemented.js
new file mode 100644
index 0000000..01b48a9
--- /dev/null
+++ b/node_modules/es5-ext/string/#/normalize/is-implemented.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var str = "æøåäüö";
+
+module.exports = function () {
+ if (typeof str.normalize !== "function") return false;
+ return str.normalize("NFKD") === "æøåäüö";
+};
diff --git a/node_modules/es5-ext/string/#/normalize/shim.js b/node_modules/es5-ext/string/#/normalize/shim.js
new file mode 100644
index 0000000..95bae26
--- /dev/null
+++ b/node_modules/es5-ext/string/#/normalize/shim.js
@@ -0,0 +1,309 @@
+/* eslint no-bitwise: "off", max-statements: "off", max-lines: "off" */
+
+// Taken from: https://github.com/walling/unorm/blob/master/lib/unorm.js
+
+/*
+ * UnicodeNormalizer 1.0.0
+ * Copyright (c) 2008 Matsuza
+ * Dual licensed under the MIT (MIT-LICENSE.txt) and
+ * GPL (GPL-LICENSE.txt) licenses.
+ * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
+ * $Rev: 13309 $
+ */
+
+"use strict";
+
+var primitiveSet = require("../../../object/primitive-set")
+ , validValue = require("../../../object/valid-value")
+ , data = require("./_data");
+
+var floor = Math.floor
+ , forms = primitiveSet("NFC", "NFD", "NFKC", "NFKD")
+ , DEFAULT_FEATURE = [null, 0, {}]
+ , CACHE_THRESHOLD = 10
+ , SBase = 0xac00
+ , LBase = 0x1100
+ , VBase = 0x1161
+ , TBase = 0x11a7
+ , LCount = 19
+ , VCount = 21
+ , TCount = 28
+ , NCount = VCount * TCount
+ , SCount = LCount * NCount
+ , UChar
+ , cache = {}
+ , cacheCounter = []
+ , fromCache
+ , fromData
+ , fromCpOnly
+ , fromRuleBasedJamo
+ , fromCpFilter
+ , strategies
+ , UCharIterator
+ , RecursDecompIterator
+ , DecompIterator
+ , CompIterator
+ , createIterator
+ , normalize;
+
+UChar = function (cp, feature) {
+ this.codepoint = cp;
+ this.feature = feature;
+};
+
+// Strategies
+(function () { for (var i = 0; i <= 0xff; ++i) cacheCounter[i] = 0; })();
+
+fromCache = function (nextStep, cp, needFeature) {
+ var ret = cache[cp];
+ if (!ret) {
+ ret = nextStep(cp, needFeature);
+ if (Boolean(ret.feature) && ++cacheCounter[(cp >> 8) & 0xff] > CACHE_THRESHOLD) {
+ cache[cp] = ret;
+ }
+ }
+ return ret;
+};
+
+fromData = function (next, cp) {
+ var hash = cp & 0xff00, dunit = UChar.udata[hash] || {}, feature = dunit[cp];
+ return feature ? new UChar(cp, feature) : new UChar(cp, DEFAULT_FEATURE);
+};
+fromCpOnly = function (next, cp, needFeature) {
+ return needFeature ? next(cp, needFeature) : new UChar(cp, null);
+};
+
+fromRuleBasedJamo = function (next, cp, needFeature) {
+ var char, base, i, arr, SIndex, TIndex, feature, j;
+ if (cp < LBase || (LBase + LCount <= cp && cp < SBase) || SBase + SCount < cp) {
+ return next(cp, needFeature);
+ }
+ if (LBase <= cp && cp < LBase + LCount) {
+ char = {};
+ base = (cp - LBase) * VCount;
+ for (i = 0; i < VCount; ++i) {
+ char[VBase + i] = SBase + TCount * (i + base);
+ }
+ arr = new Array(3);
+ arr[2] = char;
+ return new UChar(cp, arr);
+ }
+
+ SIndex = cp - SBase;
+ TIndex = SIndex % TCount;
+ feature = [];
+ if (TIndex === 0) {
+ feature[0] = [LBase + floor(SIndex / NCount), VBase + floor((SIndex % NCount) / TCount)];
+ feature[2] = {};
+ for (j = 1; j < TCount; ++j) {
+ feature[2][TBase + j] = cp + j;
+ }
+ } else {
+ feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
+ }
+ return new UChar(cp, feature);
+};
+
+fromCpFilter = function (next, cp, needFeature) {
+ return cp < 60 || (cp > 13311 && cp < 42607)
+ ? new UChar(cp, DEFAULT_FEATURE)
+ : next(cp, needFeature);
+};
+
+strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
+
+UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
+ return function (cp, needFeature) { return strategy(next, cp, needFeature); };
+}, null);
+
+UChar.isHighSurrogate = function (cp) { return cp >= 0xd800 && cp <= 0xdbff; };
+UChar.isLowSurrogate = function (cp) { return cp >= 0xdc00 && cp <= 0xdfff; };
+
+UChar.prototype.prepFeature = function () {
+ if (!this.feature) {
+ this.feature = UChar.fromCharCode(this.codepoint, true).feature;
+ }
+};
+
+UChar.prototype.toString = function () {
+ var num;
+ if (this.codepoint < 0x10000) return String.fromCharCode(this.codepoint);
+ num = this.codepoint - 0x10000;
+ return String.fromCharCode(floor(num / 0x400) + 0xd800, (num % 0x400) + 0xdc00);
+};
+
+UChar.prototype.getDecomp = function () {
+ this.prepFeature();
+ return this.feature[0] || null;
+};
+
+UChar.prototype.isCompatibility = function () {
+ this.prepFeature();
+ return Boolean(this.feature[1]) && this.feature[1] & (1 << 8);
+};
+UChar.prototype.isExclude = function () {
+ this.prepFeature();
+ return Boolean(this.feature[1]) && this.feature[1] & (1 << 9);
+};
+UChar.prototype.getCanonicalClass = function () {
+ this.prepFeature();
+ return this.feature[1] ? this.feature[1] & 0xff : 0;
+};
+UChar.prototype.getComposite = function (following) {
+ var cp;
+ this.prepFeature();
+ if (!this.feature[2]) return null;
+ cp = this.feature[2][following.codepoint];
+ return cp ? UChar.fromCharCode(cp) : null;
+};
+
+UCharIterator = function (str) {
+ this.str = str;
+ this.cursor = 0;
+};
+UCharIterator.prototype.next = function () {
+ if (Boolean(this.str) && this.cursor < this.str.length) {
+ var cp = this.str.charCodeAt(this.cursor++), d;
+ if (
+ UChar.isHighSurrogate(cp) &&
+ this.cursor < this.str.length &&
+ UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))
+ ) {
+ cp = (cp - 0xd800) * 0x400 + (d - 0xdc00) + 0x10000;
+ ++this.cursor;
+ }
+ return UChar.fromCharCode(cp);
+ }
+ this.str = null;
+ return null;
+};
+
+RecursDecompIterator = function (it, cano) {
+ this.it = it;
+ this.canonical = cano;
+ this.resBuf = [];
+};
+
+RecursDecompIterator.prototype.next = function () {
+ var recursiveDecomp, uchar;
+ recursiveDecomp = function (cano, ucharLoc) {
+ var decomp = ucharLoc.getDecomp(), ret, i, a, j;
+ if (Boolean(decomp) && !(cano && ucharLoc.isCompatibility())) {
+ ret = [];
+ for (i = 0; i < decomp.length; ++i) {
+ a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
+ // Ret.concat(a); //<-why does not this work?
+ // following block is a workaround.
+ for (j = 0; j < a.length; ++j) ret.push(a[j]);
+ }
+ return ret;
+ }
+ return [ucharLoc];
+ };
+ if (this.resBuf.length === 0) {
+ uchar = this.it.next();
+ if (!uchar) return null;
+ this.resBuf = recursiveDecomp(this.canonical, uchar);
+ }
+ return this.resBuf.shift();
+};
+
+DecompIterator = function (it) {
+ this.it = it;
+ this.resBuf = [];
+};
+
+DecompIterator.prototype.next = function () {
+ var cc, uchar, inspt, uchar2, cc2;
+ if (this.resBuf.length === 0) {
+ do {
+ uchar = this.it.next();
+ if (!uchar) break;
+ cc = uchar.getCanonicalClass();
+ inspt = this.resBuf.length;
+ if (cc !== 0) {
+ for (inspt; inspt > 0; --inspt) {
+ uchar2 = this.resBuf[inspt - 1];
+ cc2 = uchar2.getCanonicalClass();
+ // eslint-disable-next-line max-depth
+ if (cc2 <= cc) break;
+ }
+ }
+ this.resBuf.splice(inspt, 0, uchar);
+ } while (cc !== 0);
+ }
+ return this.resBuf.shift();
+};
+
+CompIterator = function (it) {
+ this.it = it;
+ this.procBuf = [];
+ this.resBuf = [];
+ this.lastClass = null;
+};
+
+CompIterator.prototype.next = function () {
+ var uchar, starter, composite, cc;
+ while (this.resBuf.length === 0) {
+ uchar = this.it.next();
+ if (!uchar) {
+ this.resBuf = this.procBuf;
+ this.procBuf = [];
+ break;
+ }
+ if (this.procBuf.length === 0) {
+ this.lastClass = uchar.getCanonicalClass();
+ this.procBuf.push(uchar);
+ } else {
+ starter = this.procBuf[0];
+ composite = starter.getComposite(uchar);
+ cc = uchar.getCanonicalClass();
+ if (Boolean(composite) && (this.lastClass < cc || this.lastClass === 0)) {
+ this.procBuf[0] = composite;
+ } else {
+ if (cc === 0) {
+ this.resBuf = this.procBuf;
+ this.procBuf = [];
+ }
+ this.lastClass = cc;
+ this.procBuf.push(uchar);
+ }
+ }
+ }
+ return this.resBuf.shift();
+};
+
+createIterator = function (mode, str) {
+ switch (mode) {
+ case "NFD":
+ return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
+ case "NFKD":
+ return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
+ case "NFC":
+ return new CompIterator(
+ new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true))
+ );
+ case "NFKC":
+ return new CompIterator(
+ new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false))
+ );
+ default:
+ throw new Error(mode + " is invalid");
+ }
+};
+normalize = function (mode, str) {
+ var it = createIterator(mode, str), ret = "", uchar;
+ while ((uchar = it.next())) ret += uchar.toString();
+ return ret;
+};
+
+/* Unicode data */
+UChar.udata = data;
+
+module.exports = function (/* Form*/) {
+ var str = String(validValue(this)), form = arguments[0];
+ if (form === undefined) form = "NFC";
+ else form = String(form);
+ if (!forms[form]) throw new RangeError("Invalid normalization form: " + form);
+ return normalize(form, str);
+};
diff --git a/node_modules/es5-ext/string/#/pad.js b/node_modules/es5-ext/string/#/pad.js
new file mode 100644
index 0000000..ee0339f
--- /dev/null
+++ b/node_modules/es5-ext/string/#/pad.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var toInteger = require("../../number/to-integer")
+ , value = require("../../object/valid-value")
+ , repeat = require("./repeat")
+ , abs = Math.abs
+ , max = Math.max;
+
+module.exports = function (fill /*, length*/) {
+ var self = String(value(this)), sLength = self.length, length = arguments[1];
+
+ length = isNaN(length) ? 1 : toInteger(length);
+ fill = repeat.call(String(fill), abs(length));
+ if (length >= 0) return fill.slice(0, max(0, length - sLength)) + self;
+ return self + (sLength + length >= 0 ? "" : fill.slice(length + sLength));
+};
diff --git a/node_modules/es5-ext/string/#/plain-replace-all.js b/node_modules/es5-ext/string/#/plain-replace-all.js
new file mode 100644
index 0000000..9334fe0
--- /dev/null
+++ b/node_modules/es5-ext/string/#/plain-replace-all.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var value = require("../../object/valid-value");
+
+module.exports = function (search, replace) {
+ var index, pos = 0, str = String(value(this)), sl, rl;
+ search = String(search);
+ replace = String(replace);
+ sl = search.length;
+ rl = replace.length;
+ while ((index = str.indexOf(search, pos)) !== -1) {
+ str = str.slice(0, index) + replace + str.slice(index + sl);
+ pos = index + rl;
+ }
+ return str;
+};
diff --git a/node_modules/es5-ext/string/#/plain-replace.js b/node_modules/es5-ext/string/#/plain-replace.js
new file mode 100644
index 0000000..b8bfe3d
--- /dev/null
+++ b/node_modules/es5-ext/string/#/plain-replace.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var indexOf = String.prototype.indexOf, slice = String.prototype.slice;
+
+module.exports = function (search, replace) {
+ var index = indexOf.call(this, search);
+ if (index === -1) return String(this);
+ return slice.call(this, 0, index) + replace + slice.call(this, index + String(search).length);
+};
diff --git a/node_modules/es5-ext/string/#/repeat/implement.js b/node_modules/es5-ext/string/#/repeat/implement.js
new file mode 100644
index 0000000..f237dcd
--- /dev/null
+++ b/node_modules/es5-ext/string/#/repeat/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(String.prototype, "repeat", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/string/#/repeat/index.js b/node_modules/es5-ext/string/#/repeat/index.js
new file mode 100644
index 0000000..abcb601
--- /dev/null
+++ b/node_modules/es5-ext/string/#/repeat/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? String.prototype.repeat : require("./shim");
diff --git a/node_modules/es5-ext/string/#/repeat/is-implemented.js b/node_modules/es5-ext/string/#/repeat/is-implemented.js
new file mode 100644
index 0000000..e8e0240
--- /dev/null
+++ b/node_modules/es5-ext/string/#/repeat/is-implemented.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var str = "foo";
+
+module.exports = function () {
+ if (typeof str.repeat !== "function") return false;
+ return str.repeat(2) === "foofoo";
+};
diff --git a/node_modules/es5-ext/string/#/repeat/shim.js b/node_modules/es5-ext/string/#/repeat/shim.js
new file mode 100644
index 0000000..ac259a8
--- /dev/null
+++ b/node_modules/es5-ext/string/#/repeat/shim.js
@@ -0,0 +1,24 @@
+// Thanks
+// @rauchma http://www.2ality.com/2014/01/efficient-string-repeat.html
+// @mathiasbynens https://github.com/mathiasbynens/String.prototype.repeat/blob/4a4b567def/repeat.js
+
+"use strict";
+
+var value = require("../../../object/valid-value")
+ , toInteger = require("../../../number/to-integer");
+
+module.exports = function (count) {
+ var str = String(value(this)), result;
+ count = toInteger(count);
+ if (count < 0) throw new RangeError("Count must be >= 0");
+ if (!isFinite(count)) throw new RangeError("Count must be < ∞");
+
+ result = "";
+ while (count) {
+ if (count % 2) result += str;
+ if (count > 1) str += str;
+ // eslint-disable-next-line no-bitwise
+ count >>= 1;
+ }
+ return result;
+};
diff --git a/node_modules/es5-ext/string/#/starts-with/implement.js b/node_modules/es5-ext/string/#/starts-with/implement.js
new file mode 100644
index 0000000..62abadb
--- /dev/null
+++ b/node_modules/es5-ext/string/#/starts-with/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(String.prototype, "startsWith", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/string/#/starts-with/index.js b/node_modules/es5-ext/string/#/starts-with/index.js
new file mode 100644
index 0000000..a0a368f
--- /dev/null
+++ b/node_modules/es5-ext/string/#/starts-with/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? String.prototype.startsWith : require("./shim");
diff --git a/node_modules/es5-ext/string/#/starts-with/is-implemented.js b/node_modules/es5-ext/string/#/starts-with/is-implemented.js
new file mode 100644
index 0000000..d1241bc
--- /dev/null
+++ b/node_modules/es5-ext/string/#/starts-with/is-implemented.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var str = "razdwatrzy";
+
+module.exports = function () {
+ if (typeof str.startsWith !== "function") return false;
+ return str.startsWith("trzy") === false && str.startsWith("raz") === true;
+};
diff --git a/node_modules/es5-ext/string/#/starts-with/shim.js b/node_modules/es5-ext/string/#/starts-with/shim.js
new file mode 100644
index 0000000..c3fa3b0
--- /dev/null
+++ b/node_modules/es5-ext/string/#/starts-with/shim.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var value = require("../../../object/valid-value")
+ , toInteger = require("../../../number/to-integer")
+ , max = Math.max
+ , min = Math.min;
+
+module.exports = function (searchString /*, position*/) {
+ var start, self = String(value(this));
+ start = min(max(toInteger(arguments[1]), 0), self.length);
+ return self.indexOf(searchString, start) === start;
+};
diff --git a/node_modules/es5-ext/string/#/uncapitalize.js b/node_modules/es5-ext/string/#/uncapitalize.js
new file mode 100644
index 0000000..202dbb7
--- /dev/null
+++ b/node_modules/es5-ext/string/#/uncapitalize.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var ensureStringifiable = require("../../object/validate-stringifiable-value");
+
+module.exports = function () {
+ var str = ensureStringifiable(this);
+ return str.charAt(0).toLowerCase() + str.slice(1);
+};
diff --git a/node_modules/es5-ext/string/format-method.js b/node_modules/es5-ext/string/format-method.js
new file mode 100644
index 0000000..91d8de9
--- /dev/null
+++ b/node_modules/es5-ext/string/format-method.js
@@ -0,0 +1,26 @@
+"use strict";
+
+var isCallable = require("../object/is-callable")
+ , value = require("../object/valid-value")
+ , call = Function.prototype.call;
+
+module.exports = function (fmap) {
+ fmap = Object(value(fmap));
+ return function (pattern) {
+ var context = this;
+ value(context);
+ pattern = String(pattern);
+ return pattern.replace(
+ /%([a-zA-Z]+)|\\([\u0000-\uffff])/g,
+ function (match, token, escapeChar) {
+ var t, result;
+ if (escapeChar) return escapeChar;
+ t = token;
+ while (t && !(result = fmap[t])) t = t.slice(0, -1);
+ if (!result) return match;
+ if (isCallable(result)) result = call.call(result, context);
+ return result + token.slice(t.length);
+ }
+ );
+ };
+};
diff --git a/node_modules/es5-ext/string/from-code-point/implement.js b/node_modules/es5-ext/string/from-code-point/implement.js
new file mode 100644
index 0000000..71728bf
--- /dev/null
+++ b/node_modules/es5-ext/string/from-code-point/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(String, "fromCodePoint", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/string/from-code-point/index.js b/node_modules/es5-ext/string/from-code-point/index.js
new file mode 100644
index 0000000..5a5fc5b
--- /dev/null
+++ b/node_modules/es5-ext/string/from-code-point/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? String.fromCodePoint : require("./shim");
diff --git a/node_modules/es5-ext/string/from-code-point/is-implemented.js b/node_modules/es5-ext/string/from-code-point/is-implemented.js
new file mode 100644
index 0000000..ae4b818
--- /dev/null
+++ b/node_modules/es5-ext/string/from-code-point/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ var fromCodePoint = String.fromCodePoint;
+ if (typeof fromCodePoint !== "function") return false;
+ return fromCodePoint(0x1d306, 0x61, 0x1d307) === "\ud834\udf06a\ud834\udf07";
+};
diff --git a/node_modules/es5-ext/string/from-code-point/shim.js b/node_modules/es5-ext/string/from-code-point/shim.js
new file mode 100644
index 0000000..c8214cf
--- /dev/null
+++ b/node_modules/es5-ext/string/from-code-point/shim.js
@@ -0,0 +1,37 @@
+// Based on:
+// http://norbertlindenberg.com/2012/05/ecmascript-supplementary-characters/
+// and:
+// https://github.com/mathiasbynens/String.fromCodePoint/blob/master
+// /fromcodepoint.js
+
+"use strict";
+
+var floor = Math.floor, fromCharCode = String.fromCharCode;
+
+// eslint-disable-next-line no-unused-vars
+module.exports = function (codePoint1 /*, …codePoints*/) {
+ var chars = [], length = arguments.length, i, codePoint, result = "";
+ for (i = 0; i < length; ++i) {
+ codePoint = Number(arguments[i]);
+ if (
+ !isFinite(codePoint) ||
+ codePoint < 0 ||
+ codePoint > 0x10ffff ||
+ floor(codePoint) !== codePoint
+ ) {
+ throw new RangeError("Invalid code point " + codePoint);
+ }
+
+ if (codePoint < 0x10000) {
+ chars.push(codePoint);
+ } else {
+ codePoint -= 0x10000;
+ // eslint-disable-next-line no-bitwise
+ chars.push((codePoint >> 10) + 0xd800, (codePoint % 0x400) + 0xdc00);
+ }
+ if (i + 1 !== length && chars.length <= 0x4000) continue;
+ result += fromCharCode.apply(null, chars);
+ chars.length = 0;
+ }
+ return result;
+};
diff --git a/node_modules/es5-ext/string/index.js b/node_modules/es5-ext/string/index.js
new file mode 100644
index 0000000..4393588
--- /dev/null
+++ b/node_modules/es5-ext/string/index.js
@@ -0,0 +1,11 @@
+"use strict";
+
+module.exports = {
+ "#": require("./#"),
+ "formatMethod": require("./format-method"),
+ "fromCodePoint": require("./from-code-point"),
+ "isString": require("./is-string"),
+ "random": require("./random"),
+ "randomUniq": require("./random-uniq"),
+ "raw": require("./raw")
+};
diff --git a/node_modules/es5-ext/string/is-string.js b/node_modules/es5-ext/string/is-string.js
new file mode 100644
index 0000000..1b1e863
--- /dev/null
+++ b/node_modules/es5-ext/string/is-string.js
@@ -0,0 +1,13 @@
+"use strict";
+
+var objToString = Object.prototype.toString, id = objToString.call("");
+
+module.exports = function (value) {
+ return (
+ typeof value === "string" ||
+ (value &&
+ typeof value === "object" &&
+ (value instanceof String || objToString.call(value) === id)) ||
+ false
+ );
+};
diff --git a/node_modules/es5-ext/string/random-uniq.js b/node_modules/es5-ext/string/random-uniq.js
new file mode 100644
index 0000000..ae57b29
--- /dev/null
+++ b/node_modules/es5-ext/string/random-uniq.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var generated = Object.create(null), random = Math.random;
+
+module.exports = function () {
+ var str;
+ do {
+ str = random().toString(36).slice(2);
+ } while (generated[str]);
+ return str;
+};
diff --git a/node_modules/es5-ext/string/random.js b/node_modules/es5-ext/string/random.js
new file mode 100644
index 0000000..8fda5de
--- /dev/null
+++ b/node_modules/es5-ext/string/random.js
@@ -0,0 +1,38 @@
+"use strict";
+
+var isValue = require("../object/is-value")
+ , toNaturalNumber = require("../number/to-pos-integer");
+
+var generated = Object.create(null), random = Math.random, uniqTryLimit = 100;
+
+var getChunk = function () { return random().toString(36).slice(2); };
+
+var getString = function (/* length */) {
+ var str = getChunk(), length = arguments[0];
+ if (!isValue(length)) return str;
+ while (str.length < length) str += getChunk();
+ return str.slice(0, length);
+};
+
+module.exports = function (/* options */) {
+ var options = Object(arguments[0]), length = options.length, isUnique = options.isUnique;
+
+ if (isValue(length)) length = toNaturalNumber(length);
+
+ var str = getString(length);
+ if (isUnique) {
+ var count = 0;
+ while (generated[str]) {
+ if (++count === uniqTryLimit) {
+ throw new Error(
+ "Cannot generate random string.\n" +
+ "String.random is not designed to effectively generate many short and " +
+ "unique random strings"
+ );
+ }
+ str = getString(length);
+ }
+ generated[str] = true;
+ }
+ return str;
+};
diff --git a/node_modules/es5-ext/string/raw/implement.js b/node_modules/es5-ext/string/raw/implement.js
new file mode 100644
index 0000000..24f17c2
--- /dev/null
+++ b/node_modules/es5-ext/string/raw/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(String, "raw", {
+ value: require("./shim"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es5-ext/string/raw/index.js b/node_modules/es5-ext/string/raw/index.js
new file mode 100644
index 0000000..39889e9
--- /dev/null
+++ b/node_modules/es5-ext/string/raw/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? String.raw : require("./shim");
diff --git a/node_modules/es5-ext/string/raw/is-implemented.js b/node_modules/es5-ext/string/raw/is-implemented.js
new file mode 100644
index 0000000..8758108
--- /dev/null
+++ b/node_modules/es5-ext/string/raw/is-implemented.js
@@ -0,0 +1,9 @@
+"use strict";
+
+module.exports = function () {
+ var raw = String.raw, test;
+ if (typeof raw !== "function") return false;
+ test = ["foo\nbar", "marko\n"];
+ test.raw = ["foo\\nbar", "marko\\n"];
+ return raw(test, "INSE\nRT") === "foo\\nbarINSE\nRTmarko\\n";
+};
diff --git a/node_modules/es5-ext/string/raw/shim.js b/node_modules/es5-ext/string/raw/shim.js
new file mode 100644
index 0000000..8c52bb5
--- /dev/null
+++ b/node_modules/es5-ext/string/raw/shim.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var toPosInt = require("../../number/to-pos-integer")
+ , validValue = require("../../object/valid-value")
+ , reduce = Array.prototype.reduce;
+
+module.exports = function (callSite /*, …substitutions*/) {
+ var args, rawValue = Object(validValue(Object(validValue(callSite)).raw));
+ if (!toPosInt(rawValue.length)) return "";
+ args = arguments;
+ return reduce.call(rawValue, function (str1, str2, i) {
+ return str1 + String(args[i]) + str2;
+ });
+};
diff --git a/node_modules/es5-ext/to-short-string-representation.js b/node_modules/es5-ext/to-short-string-representation.js
new file mode 100644
index 0000000..5aede53
--- /dev/null
+++ b/node_modules/es5-ext/to-short-string-representation.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var safeToString = require("./safe-to-string");
+
+var reNewLine = /[\n\r\u2028\u2029]/g;
+
+module.exports = function (value) {
+ var string = safeToString(value);
+ // Trim if too long
+ if (string.length > 100) string = string.slice(0, 99) + "…";
+ // Replace eventual new lines
+ string = string.replace(reNewLine, function (char) {
+ return JSON.stringify(char).slice(1, -1);
+ });
+ return string;
+};
diff --git a/node_modules/es6-iterator/#/chain.js b/node_modules/es6-iterator/#/chain.js
new file mode 100644
index 0000000..190a346
--- /dev/null
+++ b/node_modules/es6-iterator/#/chain.js
@@ -0,0 +1,40 @@
+"use strict";
+
+var setPrototypeOf = require("es5-ext/object/set-prototype-of")
+ , d = require("d")
+ , Iterator = require("../")
+ , validIterable = require("../valid-iterable")
+
+ , push = Array.prototype.push
+ , defineProperties = Object.defineProperties
+ , IteratorChain;
+
+IteratorChain = function (iterators) {
+ defineProperties(this, {
+ __iterators__: d("", iterators),
+ __current__: d("w", iterators.shift())
+ });
+};
+if (setPrototypeOf) setPrototypeOf(IteratorChain, Iterator);
+
+IteratorChain.prototype = Object.create(Iterator.prototype, {
+ constructor: d(IteratorChain),
+ next: d(function () {
+ var result;
+ if (!this.__current__) return { done: true, value: undefined };
+ result = this.__current__.next();
+ while (result.done) {
+ this.__current__ = this.__iterators__.shift();
+ if (!this.__current__) return { done: true, value: undefined };
+ result = this.__current__.next();
+ }
+ return result;
+ })
+});
+
+module.exports = function () {
+ var iterators = [this];
+ push.apply(iterators, arguments);
+ iterators.forEach(validIterable);
+ return new IteratorChain(iterators);
+};
diff --git a/node_modules/es6-iterator/.editorconfig b/node_modules/es6-iterator/.editorconfig
new file mode 100644
index 0000000..c24a6cd
--- /dev/null
+++ b/node_modules/es6-iterator/.editorconfig
@@ -0,0 +1,14 @@
+# EditorConfig is awesome: http://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+# Unix-style newlines with a newline ending every file
+[*]
+end_of_line = lf
+insert_final_newline = true
+indent_style = tab
+
+[{*.json,*.yml}]
+indent_style = space
+indent_size = 2
diff --git a/node_modules/es6-iterator/.npmignore b/node_modules/es6-iterator/.npmignore
new file mode 100644
index 0000000..a91db65
--- /dev/null
+++ b/node_modules/es6-iterator/.npmignore
@@ -0,0 +1,12 @@
+.DS_Store
+Thumbs.db
+/.idea
+/.vscode
+npm-debug.log
+/wallaby.js
+/node_modules
+/.travis.yml
+/.gitignore
+/.circle.yml
+/.circleci
+/.appveyor.yml
diff --git a/node_modules/es6-iterator/CHANGELOG.md b/node_modules/es6-iterator/CHANGELOG.md
new file mode 100644
index 0000000..37eb16a
--- /dev/null
+++ b/node_modules/es6-iterator/CHANGELOG.md
@@ -0,0 +1,27 @@
+# Change Log
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+
+## [2.0.3](https://github.com/medikoo/es6-iterator/compare/v2.0.2...v2.0.3) (2017-10-17)
+
+
+### Bug Fixes
+
+* configurability of toStringTag ([b99f692](https://github.com/medikoo/es6-iterator/commit/b99f692))
+
+
+
+
+## [2.0.2](https://github.com/medikoo/es6-iterator/compare/v2.0.1...v2.0.2) (2017-10-17)
+
+
+### Bug Fixes
+
+* constructor exposure ([dbc0c51](https://github.com/medikoo/es6-iterator/commit/dbc0c51))
+* do not allow non constructor calls ([1f2f800](https://github.com/medikoo/es6-iterator/commit/1f2f800))
+* toString and toStringTag symbol definitions. ([2d17786](https://github.com/medikoo/es6-iterator/commit/2d17786)), closes [#6](https://github.com/medikoo/es6-iterator/issues/6)
+
+## Changelog for previous versions
+
+See `CHANGES` file
diff --git a/node_modules/es6-iterator/CHANGES b/node_modules/es6-iterator/CHANGES
new file mode 100644
index 0000000..83095f7
--- /dev/null
+++ b/node_modules/es6-iterator/CHANGES
@@ -0,0 +1,42 @@
+For recent changelog see CHANGELOG.md
+
+-----
+
+v2.0.1 -- 2017.03.15
+* Update dependencies
+
+v2.0.0 -- 2015.10.02
+* Use es6-symbol at v3
+
+v1.0.0 -- 2015.06.23
+* Implement support for arguments object
+* Drop support for v0.8 node ('^' in package.json dependencies)
+
+v0.1.3 -- 2015.02.02
+* Update dependencies
+* Fix spelling of LICENSE
+
+v0.1.2 -- 2014.11.19
+* Optimise internal `_next` to not verify internal's list length at all times
+ (#2 thanks @RReverser)
+* Fix documentation examples
+* Configure lint scripts
+
+v0.1.1 -- 2014.04.29
+* Fix es6-symbol dependency version
+
+v0.1.0 -- 2014.04.29
+* Assure strictly npm hosted dependencies
+* Remove sparse arrays dedicated handling (as per spec)
+* Add: isIterable, validIterable and chain (method)
+* Remove toArray, it's addressed by Array.from (polyfil can be found in es5-ext/array/from)
+* Add break possiblity to 'forOf' via 'doBreak' function argument
+* Provide dedicated iterator for array-likes (ArrayIterator) and for strings (StringIterator)
+* Provide @@toStringTag symbol
+* When available rely on @@iterator symbol
+* Remove 32bit integer maximum list length restriction
+* Improve Iterator internals
+* Update to use latest version of dependencies
+
+v0.0.0 -- 2013.10.12
+Initial (dev version)
diff --git a/node_modules/es6-iterator/LICENSE b/node_modules/es6-iterator/LICENSE
new file mode 100644
index 0000000..d7c36d5
--- /dev/null
+++ b/node_modules/es6-iterator/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (C) 2013-2017 Mariusz Nowak (www.medikoo.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 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/node_modules/es6-iterator/README.md b/node_modules/es6-iterator/README.md
new file mode 100644
index 0000000..288373d
--- /dev/null
+++ b/node_modules/es6-iterator/README.md
@@ -0,0 +1,148 @@
+# es6-iterator
+## ECMAScript 6 Iterator interface
+
+### Installation
+
+ $ npm install es6-iterator
+
+To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/)
+
+## API
+
+### Constructors
+
+#### Iterator(list) _(es6-iterator)_
+
+Abstract Iterator interface. Meant for extensions and not to be used on its own.
+
+Accepts any _list_ object (technically object with numeric _length_ property).
+
+_Mind it doesn't iterate strings properly, for that use dedicated [StringIterator](#string-iterator)_
+
+```javascript
+var Iterator = require('es6-iterator')
+var iterator = new Iterator([1, 2, 3]);
+
+iterator.next(); // { value: 1, done: false }
+iterator.next(); // { value: 2, done: false }
+iterator.next(); // { value: 3, done: false }
+iterator.next(); // { value: undefined, done: true }
+```
+
+
+#### ArrayIterator(arrayLike[, kind]) _(es6-iterator/array)_
+
+Dedicated for arrays and array-likes. Supports three iteration kinds:
+* __value__ _(default)_ - Iterates values
+* __key__ - Iterates indexes
+* __key+value__ - Iterates keys and indexes, each iteration value is in _[key, value]_ form.
+
+
+```javascript
+var ArrayIterator = require('es6-iterator/array')
+var iterator = new ArrayIterator([1, 2, 3], 'key+value');
+
+iterator.next(); // { value: [0, 1], done: false }
+iterator.next(); // { value: [1, 2], done: false }
+iterator.next(); // { value: [2, 3], done: false }
+iterator.next(); // { value: undefined, done: true }
+```
+
+May also be used for _arguments_ objects:
+
+```javascript
+(function () {
+ var iterator = new ArrayIterator(arguments);
+
+ iterator.next(); // { value: 1, done: false }
+ iterator.next(); // { value: 2, done: false }
+ iterator.next(); // { value: 3, done: false }
+ iterator.next(); // { value: undefined, done: true }
+}(1, 2, 3));
+```
+
+#### StringIterator(str) _(es6-iterator/string)_
+
+Assures proper iteration over unicode symbols.
+See: http://mathiasbynens.be/notes/javascript-unicode
+
+```javascript
+var StringIterator = require('es6-iterator/string');
+var iterator = new StringIterator('f🙈o🙉o🙊');
+
+iterator.next(); // { value: 'f', done: false }
+iterator.next(); // { value: '🙈', done: false }
+iterator.next(); // { value: 'o', done: false }
+iterator.next(); // { value: '🙉', done: false }
+iterator.next(); // { value: 'o', done: false }
+iterator.next(); // { value: '🙊', done: false }
+iterator.next(); // { value: undefined, done: true }
+```
+
+### Function utilities
+
+#### forOf(iterable, callback[, thisArg]) _(es6-iterator/for-of)_
+
+Polyfill for ECMAScript 6 [`for...of`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) statement.
+
+```
+var forOf = require('es6-iterator/for-of');
+var result = [];
+
+forOf('🙈🙉🙊', function (monkey) { result.push(monkey); });
+console.log(result); // ['🙈', '🙉', '🙊'];
+```
+
+Optionally you can break iteration at any point:
+
+```javascript
+var result = [];
+
+forOf([1,2,3,4]', function (val, doBreak) {
+ result.push(monkey);
+ if (val >= 3) doBreak();
+});
+console.log(result); // [1, 2, 3];
+```
+
+#### get(obj) _(es6-iterator/get)_
+
+Return iterator for any iterable object.
+
+```javascript
+var getIterator = require('es6-iterator/get');
+var iterator = get([1,2,3]);
+
+iterator.next(); // { value: 1, done: false }
+iterator.next(); // { value: 2, done: false }
+iterator.next(); // { value: 3, done: false }
+iterator.next(); // { value: undefined, done: true }
+```
+
+#### isIterable(obj) _(es6-iterator/is-iterable)_
+
+Whether _obj_ is iterable
+
+```javascript
+var isIterable = require('es6-iterator/is-iterable');
+
+isIterable(null); // false
+isIterable(true); // false
+isIterable('str'); // true
+isIterable(['a', 'r', 'r']); // true
+isIterable(new ArrayIterator([])); // true
+```
+
+#### validIterable(obj) _(es6-iterator/valid-iterable)_
+
+If _obj_ is an iterable it is returned. Otherwise _TypeError_ is thrown.
+
+### Method extensions
+
+#### iterator.chain(iterator1[, …iteratorn]) _(es6-iterator/#/chain)_
+
+Chain multiple iterators into one.
+
+### Tests [![Build Status](https://travis-ci.org/medikoo/es6-iterator.png)](https://travis-ci.org/medikoo/es6-iterator)
+
+ $ npm test
diff --git a/node_modules/es6-iterator/appveyor.yml b/node_modules/es6-iterator/appveyor.yml
new file mode 100644
index 0000000..942ab82
--- /dev/null
+++ b/node_modules/es6-iterator/appveyor.yml
@@ -0,0 +1,26 @@
+# Test against the latest version of this Node.js version
+environment:
+ matrix:
+ # node.js
+ - nodejs_version: "0.12"
+ - nodejs_version: "4"
+ - nodejs_version: "6"
+ - nodejs_version: "8"
+
+# Install scripts. (runs after repo cloning)
+install:
+ # Get the latest stable version of Node.js or io.js
+ - ps: Install-Product node $env:nodejs_version
+ # install modules
+ - npm install
+
+# Post-install test scripts.
+test_script:
+ # Output useful info for debugging.
+ - node --version
+ - npm --version
+ # run tests
+ - npm test
+
+# Don't actually build.
+build: off
diff --git a/node_modules/es6-iterator/array.js b/node_modules/es6-iterator/array.js
new file mode 100644
index 0000000..d7a46a4
--- /dev/null
+++ b/node_modules/es6-iterator/array.js
@@ -0,0 +1,32 @@
+"use strict";
+
+var setPrototypeOf = require("es5-ext/object/set-prototype-of")
+ , contains = require("es5-ext/string/#/contains")
+ , d = require("d")
+ , Symbol = require("es6-symbol")
+ , Iterator = require("./");
+
+var defineProperty = Object.defineProperty, ArrayIterator;
+
+ArrayIterator = module.exports = function (arr, kind) {
+ if (!(this instanceof ArrayIterator)) throw new TypeError("Constructor requires 'new'");
+ Iterator.call(this, arr);
+ if (!kind) kind = "value";
+ else if (contains.call(kind, "key+value")) kind = "key+value";
+ else if (contains.call(kind, "key")) kind = "key";
+ else kind = "value";
+ defineProperty(this, "__kind__", d("", kind));
+};
+if (setPrototypeOf) setPrototypeOf(ArrayIterator, Iterator);
+
+// Internal %ArrayIteratorPrototype% doesn't expose its constructor
+delete ArrayIterator.prototype.constructor;
+
+ArrayIterator.prototype = Object.create(Iterator.prototype, {
+ _resolve: d(function (i) {
+ if (this.__kind__ === "value") return this.__list__[i];
+ if (this.__kind__ === "key+value") return [i, this.__list__[i]];
+ return i;
+ })
+});
+defineProperty(ArrayIterator.prototype, Symbol.toStringTag, d("c", "Array Iterator"));
diff --git a/node_modules/es6-iterator/for-of.js b/node_modules/es6-iterator/for-of.js
new file mode 100644
index 0000000..5d15c34
--- /dev/null
+++ b/node_modules/es6-iterator/for-of.js
@@ -0,0 +1,47 @@
+"use strict";
+
+var isArguments = require("es5-ext/function/is-arguments")
+ , callable = require("es5-ext/object/valid-callable")
+ , isString = require("es5-ext/string/is-string")
+ , get = require("./get");
+
+var isArray = Array.isArray, call = Function.prototype.call, some = Array.prototype.some;
+
+module.exports = function (iterable, cb /*, thisArg*/) {
+ var mode, thisArg = arguments[2], result, doBreak, broken, i, length, char, code;
+ if (isArray(iterable) || isArguments(iterable)) mode = "array";
+ else if (isString(iterable)) mode = "string";
+ else iterable = get(iterable);
+
+ callable(cb);
+ doBreak = function () {
+ broken = true;
+ };
+ if (mode === "array") {
+ some.call(iterable, function (value) {
+ call.call(cb, thisArg, value, doBreak);
+ return broken;
+ });
+ return;
+ }
+ if (mode === "string") {
+ length = iterable.length;
+ for (i = 0; i < length; ++i) {
+ char = iterable[i];
+ if (i + 1 < length) {
+ code = char.charCodeAt(0);
+ if (code >= 0xd800 && code <= 0xdbff) char += iterable[++i];
+ }
+ call.call(cb, thisArg, char, doBreak);
+ if (broken) break;
+ }
+ return;
+ }
+ result = iterable.next();
+
+ while (!result.done) {
+ call.call(cb, thisArg, result.value, doBreak);
+ if (broken) return;
+ result = iterable.next();
+ }
+};
diff --git a/node_modules/es6-iterator/get.js b/node_modules/es6-iterator/get.js
new file mode 100644
index 0000000..d36c9e2
--- /dev/null
+++ b/node_modules/es6-iterator/get.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var isArguments = require("es5-ext/function/is-arguments")
+ , isString = require("es5-ext/string/is-string")
+ , ArrayIterator = require("./array")
+ , StringIterator = require("./string")
+ , iterable = require("./valid-iterable")
+ , iteratorSymbol = require("es6-symbol").iterator;
+
+module.exports = function (obj) {
+ if (typeof iterable(obj)[iteratorSymbol] === "function") return obj[iteratorSymbol]();
+ if (isArguments(obj)) return new ArrayIterator(obj);
+ if (isString(obj)) return new StringIterator(obj);
+ return new ArrayIterator(obj);
+};
diff --git a/node_modules/es6-iterator/index.js b/node_modules/es6-iterator/index.js
new file mode 100644
index 0000000..790475f
--- /dev/null
+++ b/node_modules/es6-iterator/index.js
@@ -0,0 +1,106 @@
+"use strict";
+
+var clear = require("es5-ext/array/#/clear")
+ , assign = require("es5-ext/object/assign")
+ , callable = require("es5-ext/object/valid-callable")
+ , value = require("es5-ext/object/valid-value")
+ , d = require("d")
+ , autoBind = require("d/auto-bind")
+ , Symbol = require("es6-symbol");
+
+var defineProperty = Object.defineProperty, defineProperties = Object.defineProperties, Iterator;
+
+module.exports = Iterator = function (list, context) {
+ if (!(this instanceof Iterator)) throw new TypeError("Constructor requires 'new'");
+ defineProperties(this, {
+ __list__: d("w", value(list)),
+ __context__: d("w", context),
+ __nextIndex__: d("w", 0)
+ });
+ if (!context) return;
+ callable(context.on);
+ context.on("_add", this._onAdd);
+ context.on("_delete", this._onDelete);
+ context.on("_clear", this._onClear);
+};
+
+// Internal %IteratorPrototype% doesn't expose its constructor
+delete Iterator.prototype.constructor;
+
+defineProperties(
+ Iterator.prototype,
+ assign(
+ {
+ _next: d(function () {
+ var i;
+ if (!this.__list__) return undefined;
+ if (this.__redo__) {
+ i = this.__redo__.shift();
+ if (i !== undefined) return i;
+ }
+ if (this.__nextIndex__ < this.__list__.length) return this.__nextIndex__++;
+ this._unBind();
+ return undefined;
+ }),
+ next: d(function () {
+ return this._createResult(this._next());
+ }),
+ _createResult: d(function (i) {
+ if (i === undefined) return { done: true, value: undefined };
+ return { done: false, value: this._resolve(i) };
+ }),
+ _resolve: d(function (i) {
+ return this.__list__[i];
+ }),
+ _unBind: d(function () {
+ this.__list__ = null;
+ delete this.__redo__;
+ if (!this.__context__) return;
+ this.__context__.off("_add", this._onAdd);
+ this.__context__.off("_delete", this._onDelete);
+ this.__context__.off("_clear", this._onClear);
+ this.__context__ = null;
+ }),
+ toString: d(function () {
+ return "[object " + (this[Symbol.toStringTag] || "Object") + "]";
+ })
+ },
+ autoBind({
+ _onAdd: d(function (index) {
+ if (index >= this.__nextIndex__) return;
+ ++this.__nextIndex__;
+ if (!this.__redo__) {
+ defineProperty(this, "__redo__", d("c", [index]));
+ return;
+ }
+ this.__redo__.forEach(function (redo, i) {
+ if (redo >= index) this.__redo__[i] = ++redo;
+ }, this);
+ this.__redo__.push(index);
+ }),
+ _onDelete: d(function (index) {
+ var i;
+ if (index >= this.__nextIndex__) return;
+ --this.__nextIndex__;
+ if (!this.__redo__) return;
+ i = this.__redo__.indexOf(index);
+ if (i !== -1) this.__redo__.splice(i, 1);
+ this.__redo__.forEach(function (redo, j) {
+ if (redo > index) this.__redo__[j] = --redo;
+ }, this);
+ }),
+ _onClear: d(function () {
+ if (this.__redo__) clear.call(this.__redo__);
+ this.__nextIndex__ = 0;
+ })
+ })
+ )
+);
+
+defineProperty(
+ Iterator.prototype,
+ Symbol.iterator,
+ d(function () {
+ return this;
+ })
+);
diff --git a/node_modules/es6-iterator/is-iterable.js b/node_modules/es6-iterator/is-iterable.js
new file mode 100644
index 0000000..cda7dfe
--- /dev/null
+++ b/node_modules/es6-iterator/is-iterable.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var isArguments = require("es5-ext/function/is-arguments")
+ , isValue = require("es5-ext/object/is-value")
+ , isString = require("es5-ext/string/is-string");
+
+var iteratorSymbol = require("es6-symbol").iterator
+ , isArray = Array.isArray;
+
+module.exports = function (value) {
+ if (!isValue(value)) return false;
+ if (isArray(value)) return true;
+ if (isString(value)) return true;
+ if (isArguments(value)) return true;
+ return typeof value[iteratorSymbol] === "function";
+};
diff --git a/node_modules/es6-iterator/package.json b/node_modules/es6-iterator/package.json
new file mode 100644
index 0000000..bc2582a
--- /dev/null
+++ b/node_modules/es6-iterator/package.json
@@ -0,0 +1,41 @@
+{
+ "name": "es6-iterator",
+ "version": "2.0.3",
+ "description": "Iterator abstraction based on ES6 specification",
+ "author": "Mariusz Nowak (http://www.medikoo.com/)",
+ "keywords": [
+ "iterator",
+ "array",
+ "list",
+ "set",
+ "map",
+ "generator"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/medikoo/es6-iterator.git"
+ },
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.35",
+ "es6-symbol": "^3.1.1"
+ },
+ "devDependencies": {
+ "eslint": "^4.9",
+ "eslint-config-medikoo-es5": "^1.4.4",
+ "event-emitter": "^0.3.5",
+ "tad": "^0.2.7"
+ },
+ "eslintConfig": {
+ "extends": "medikoo-es5",
+ "root": true,
+ "rules": {
+ "no-extend-native": "off"
+ }
+ },
+ "scripts": {
+ "lint": "eslint --ignore-path=.gitignore .",
+ "test": "node ./node_modules/tad/bin/tad"
+ },
+ "license": "MIT"
+}
diff --git a/node_modules/es6-iterator/string.js b/node_modules/es6-iterator/string.js
new file mode 100644
index 0000000..4888225
--- /dev/null
+++ b/node_modules/es6-iterator/string.js
@@ -0,0 +1,39 @@
+// Thanks @mathiasbynens
+// http://mathiasbynens.be/notes/javascript-unicode#iterating-over-symbols
+
+"use strict";
+
+var setPrototypeOf = require("es5-ext/object/set-prototype-of")
+ , d = require("d")
+ , Symbol = require("es6-symbol")
+ , Iterator = require("./");
+
+var defineProperty = Object.defineProperty, StringIterator;
+
+StringIterator = module.exports = function (str) {
+ if (!(this instanceof StringIterator)) throw new TypeError("Constructor requires 'new'");
+ str = String(str);
+ Iterator.call(this, str);
+ defineProperty(this, "__length__", d("", str.length));
+};
+if (setPrototypeOf) setPrototypeOf(StringIterator, Iterator);
+
+// Internal %ArrayIteratorPrototype% doesn't expose its constructor
+delete StringIterator.prototype.constructor;
+
+StringIterator.prototype = Object.create(Iterator.prototype, {
+ _next: d(function () {
+ if (!this.__list__) return undefined;
+ if (this.__nextIndex__ < this.__length__) return this.__nextIndex__++;
+ this._unBind();
+ return undefined;
+ }),
+ _resolve: d(function (i) {
+ var char = this.__list__[i], code;
+ if (this.__nextIndex__ === this.__length__) return char;
+ code = char.charCodeAt(0);
+ if (code >= 0xd800 && code <= 0xdbff) return char + this.__list__[this.__nextIndex__++];
+ return char;
+ })
+});
+defineProperty(StringIterator.prototype, Symbol.toStringTag, d("c", "String Iterator"));
diff --git a/node_modules/es6-iterator/test/#/chain.js b/node_modules/es6-iterator/test/#/chain.js
new file mode 100644
index 0000000..457356f
--- /dev/null
+++ b/node_modules/es6-iterator/test/#/chain.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var Iterator = require("../../");
+
+module.exports = function (t, a) {
+ var i1 = new Iterator(["raz", "dwa", "trzy"])
+ , i2 = new Iterator(["cztery", "pięć", "sześć"])
+ , i3 = new Iterator(["siedem", "osiem", "dziewięć"])
+
+ , iterator = t.call(i1, i2, i3);
+
+ a.deep(iterator.next(), { done: false, value: "raz" }, "#1");
+ a.deep(iterator.next(), { done: false, value: "dwa" }, "#2");
+ a.deep(iterator.next(), { done: false, value: "trzy" }, "#3");
+ a.deep(iterator.next(), { done: false, value: "cztery" }, "#4");
+ a.deep(iterator.next(), { done: false, value: "pięć" }, "#5");
+ a.deep(iterator.next(), { done: false, value: "sześć" }, "#6");
+ a.deep(iterator.next(), { done: false, value: "siedem" }, "#7");
+ a.deep(iterator.next(), { done: false, value: "osiem" }, "#8");
+ a.deep(iterator.next(), { done: false, value: "dziewięć" }, "#9");
+ a.deep(iterator.next(), { done: true, value: undefined }, "Done #1");
+ a.deep(iterator.next(), { done: true, value: undefined }, "Done #2");
+};
diff --git a/node_modules/es6-iterator/test/.eslintrc.json b/node_modules/es6-iterator/test/.eslintrc.json
new file mode 100644
index 0000000..99f0b65
--- /dev/null
+++ b/node_modules/es6-iterator/test/.eslintrc.json
@@ -0,0 +1,5 @@
+{
+ "rules": {
+ "id-length": "off"
+ }
+}
diff --git a/node_modules/es6-iterator/test/array.js b/node_modules/es6-iterator/test/array.js
new file mode 100644
index 0000000..447dfa7
--- /dev/null
+++ b/node_modules/es6-iterator/test/array.js
@@ -0,0 +1,67 @@
+"use strict";
+
+var iteratorSymbol = require("es6-symbol").iterator;
+
+module.exports = function (T) {
+ return {
+ "Values": function (a) {
+ var x = ["raz", "dwa", "trzy", "cztery", "pięć", "sześć"], it;
+
+ it = new T(x);
+ a(it[iteratorSymbol](), it, "@@iterator");
+ a.deep(it.next(), { done: false, value: "raz" }, "#1");
+ a.deep(it.next(), { done: false, value: "dwa" }, "#2");
+ x.splice(1, 0, "elo");
+ a.deep(it.next(), { done: false, value: "dwa" }, "Insert");
+ a.deep(it.next(), { done: false, value: "trzy" }, "#3");
+ a.deep(it.next(), { done: false, value: "cztery" }, "#4");
+ x.pop();
+ a.deep(it.next(), { done: false, value: "pięć" }, "#5");
+ a.deep(it.next(), { done: true, value: undefined }, "End");
+ },
+ "Keys & Values": function (a) {
+ var x = ["raz", "dwa", "trzy", "cztery", "pięć", "sześć"], it;
+
+ it = new T(x, "key+value");
+ a(it[iteratorSymbol](), it, "@@iterator");
+ a.deep(it.next(), { done: false, value: [0, "raz"] }, "#1");
+ a.deep(it.next(), { done: false, value: [1, "dwa"] }, "#2");
+ x.splice(1, 0, "elo");
+ a.deep(it.next(), { done: false, value: [2, "dwa"] }, "Insert");
+ a.deep(it.next(), { done: false, value: [3, "trzy"] }, "#3");
+ a.deep(it.next(), { done: false, value: [4, "cztery"] }, "#4");
+ x.pop();
+ a.deep(it.next(), { done: false, value: [5, "pięć"] }, "#5");
+ a.deep(it.next(), { done: true, value: undefined }, "End");
+ },
+ "Keys": function (a) {
+ var x = ["raz", "dwa", "trzy", "cztery", "pięć", "sześć"], it;
+
+ it = new T(x, "key");
+ a(it[iteratorSymbol](), it, "@@iterator");
+ a.deep(it.next(), { done: false, value: 0 }, "#1");
+ a.deep(it.next(), { done: false, value: 1 }, "#2");
+ x.splice(1, 0, "elo");
+ a.deep(it.next(), { done: false, value: 2 }, "Insert");
+ a.deep(it.next(), { done: false, value: 3 }, "#3");
+ a.deep(it.next(), { done: false, value: 4 }, "#4");
+ x.pop();
+ a.deep(it.next(), { done: false, value: 5 }, "#5");
+ a.deep(it.next(), { done: true, value: undefined }, "End");
+ },
+ "Sparse": function (a) {
+ var x = new Array(6), it;
+
+ x[2] = "raz";
+ x[4] = "dwa";
+ it = new T(x);
+ a.deep(it.next(), { done: false, value: undefined }, "#1");
+ a.deep(it.next(), { done: false, value: undefined }, "#2");
+ a.deep(it.next(), { done: false, value: "raz" }, "#3");
+ a.deep(it.next(), { done: false, value: undefined }, "#4");
+ a.deep(it.next(), { done: false, value: "dwa" }, "#5");
+ a.deep(it.next(), { done: false, value: undefined }, "#6");
+ a.deep(it.next(), { done: true, value: undefined }, "End");
+ }
+ };
+};
diff --git a/node_modules/es6-iterator/test/for-of.js b/node_modules/es6-iterator/test/for-of.js
new file mode 100644
index 0000000..9b47e97
--- /dev/null
+++ b/node_modules/es6-iterator/test/for-of.js
@@ -0,0 +1,42 @@
+"use strict";
+
+var ArrayIterator = require("../array")
+
+ , slice = Array.prototype.slice;
+
+module.exports = function (t, a) {
+ var i = 0, x = ["raz", "dwa", "trzy"], y = {}, called = 0;
+ t(x, function () {
+ a.deep(slice.call(arguments, 0, 1), [x[i]], "Array " + i + "#");
+ a(this, y, "Array: context: " + i++ + "#");
+ }, y);
+ i = 0;
+ t((function () {
+ return arguments;
+}("raz", "dwa", "trzy")), function () {
+ a.deep(slice.call(arguments, 0, 1), [x[i]], "Arguments" + i + "#");
+ a(this, y, "Arguments: context: " + i++ + "#");
+ }, y);
+ i = 0;
+ t(x = "foo", function () {
+ a.deep(slice.call(arguments, 0, 1), [x[i]], "String " + i + "#");
+ a(this, y, "Regular String: context: " + i++ + "#");
+ }, y);
+ i = 0;
+ x = ["r", "💩", "z"];
+ t("r💩z", function () {
+ a.deep(slice.call(arguments, 0, 1), [x[i]], "String " + i + "#");
+ a(this, y, "Unicode String: context: " + i++ + "#");
+ }, y);
+ i = 0;
+ t(new ArrayIterator(x), function () {
+ a.deep(slice.call(arguments, 0, 1), [x[i]], "Iterator " + i + "#");
+ a(this, y, "Iterator: context: " + i++ + "#");
+ }, y);
+
+ t(x = ["raz", "dwa", "trzy"], function (value, doBreak) {
+ ++called;
+ return doBreak();
+ });
+ a(called, 1, "Break");
+};
diff --git a/node_modules/es6-iterator/test/get.js b/node_modules/es6-iterator/test/get.js
new file mode 100644
index 0000000..c5947d3
--- /dev/null
+++ b/node_modules/es6-iterator/test/get.js
@@ -0,0 +1,27 @@
+"use strict";
+
+var iteratorSymbol = require("es6-symbol").iterator
+ , Iterator = require("../");
+
+module.exports = function (t, a) {
+ var iterator;
+ a.throws(function () {
+ t();
+}, TypeError, "Null");
+ a.throws(function () {
+ t({});
+}, TypeError, "Plain object");
+ a.throws(function () {
+ t({ length: 0 });
+}, TypeError, "Array-like");
+ iterator = {};
+ iterator[iteratorSymbol] = function () {
+ return new Iterator([]);
+};
+ a(t(iterator) instanceof Iterator, true, "Iterator");
+ a(String(t([])), "[object Array Iterator]", " Array");
+ a(String(t(function () {
+ return arguments;
+}())), "[object Array Iterator]", " Arguments");
+ a(String(t("foo")), "[object String Iterator]", "String");
+};
diff --git a/node_modules/es6-iterator/test/index.js b/node_modules/es6-iterator/test/index.js
new file mode 100644
index 0000000..4898218
--- /dev/null
+++ b/node_modules/es6-iterator/test/index.js
@@ -0,0 +1,99 @@
+"use strict";
+
+var ee = require("event-emitter")
+ , iteratorSymbol = require("es6-symbol").iterator;
+
+module.exports = function (T) {
+ return {
+ "": function (a) {
+ var x = ["raz", "dwa", "trzy", "cztery", "pięć"], it, y, z;
+
+ it = new T(x);
+ a(it[iteratorSymbol](), it, "@@iterator");
+ y = it.next();
+ a.deep(y, { done: false, value: "raz" }, "#1");
+ z = it.next();
+ a.not(y, z, "Recreate result");
+ a.deep(z, { done: false, value: "dwa" }, "#2");
+ a.deep(it.next(), { done: false, value: "trzy" }, "#3");
+ a.deep(it.next(), { done: false, value: "cztery" }, "#4");
+ a.deep(it.next(), { done: false, value: "pięć" }, "#5");
+ a.deep(y = it.next(), { done: true, value: undefined }, "End");
+ a.not(y, it.next(), "Recreate result on dead");
+ },
+ "Emited": function (a) {
+ var x = ["raz", "dwa", "trzy", "cztery", "pięć"], y, it;
+
+ y = ee();
+ it = new T(x, y);
+ a.deep(it.next(), { done: false, value: "raz" }, "#1");
+ a.deep(it.next(), { done: false, value: "dwa" }, "#2");
+ y.emit("_add", x.push("sześć") - 1);
+ a.deep(it.next(), { done: false, value: "trzy" }, "#3");
+ x.splice(1, 0, "półtora");
+ y.emit("_add", 1);
+ a.deep(it.next(), { done: false, value: "półtora" }, "Insert");
+ x.splice(5, 1);
+ y.emit("_delete", 5);
+ a.deep(it.next(), { done: false, value: "cztery" }, "#4");
+ a.deep(it.next(), { done: false, value: "sześć" }, "#5");
+ a.deep(it.next(), { done: true, value: undefined }, "End");
+ },
+ "Emited #2": function (a) {
+ var x = ["raz", "dwa", "trzy", "cztery", "pięć", "sześć"], y, it;
+
+ y = ee();
+ it = new T(x, y);
+ a.deep(it.next(), { done: false, value: "raz" }, "#1");
+ a.deep(it.next(), { done: false, value: "dwa" }, "#2");
+ x.splice(1, 0, "półtora");
+ y.emit("_add", 1);
+ x.splice(1, 0, "1.25");
+ y.emit("_add", 1);
+ x.splice(0, 1);
+ y.emit("_delete", 0);
+ a.deep(it.next(), { done: false, value: "półtora" }, "Insert");
+ a.deep(it.next(), { done: false, value: "1.25" }, "Insert #2");
+ a.deep(it.next(), { done: false, value: "trzy" }, "#3");
+ a.deep(it.next(), { done: false, value: "cztery" }, "#4");
+ x.splice(5, 1);
+ y.emit("_delete", 5);
+ a.deep(it.next(), { done: false, value: "sześć" }, "#5");
+ a.deep(it.next(), { done: true, value: undefined }, "End");
+ },
+ "Emited: Clear #1": function (a) {
+ var x = ["raz", "dwa", "trzy", "cztery", "pięć", "sześć"], y, it;
+
+ y = ee();
+ it = new T(x, y);
+ a.deep(it.next(), { done: false, value: "raz" }, "#1");
+ a.deep(it.next(), { done: false, value: "dwa" }, "#2");
+ x.length = 0;
+ y.emit("_clear");
+ a.deep(it.next(), { done: true, value: undefined }, "End");
+ },
+ "Emited: Clear #2": function (a) {
+ var x = ["raz", "dwa", "trzy", "cztery", "pięć", "sześć"], y, it;
+
+ y = ee();
+ it = new T(x, y);
+ a.deep(it.next(), { done: false, value: "raz" }, "#1");
+ a.deep(it.next(), { done: false, value: "dwa" }, "#2");
+ x.length = 0;
+ y.emit("_clear");
+ x.push("foo");
+ x.push("bar");
+ a.deep(it.next(), { done: false, value: "foo" }, "#3");
+ a.deep(it.next(), { done: false, value: "bar" }, "#4");
+ x.splice(1, 0, "półtora");
+ y.emit("_add", 1);
+ x.splice(1, 0, "1.25");
+ y.emit("_add", 1);
+ x.splice(0, 1);
+ y.emit("_delete", 0);
+ a.deep(it.next(), { done: false, value: "półtora" }, "Insert");
+ a.deep(it.next(), { done: false, value: "1.25" }, "Insert #2");
+ a.deep(it.next(), { done: true, value: undefined }, "End");
+ }
+ };
+};
diff --git a/node_modules/es6-iterator/test/is-iterable.js b/node_modules/es6-iterator/test/is-iterable.js
new file mode 100644
index 0000000..5787351
--- /dev/null
+++ b/node_modules/es6-iterator/test/is-iterable.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var iteratorSymbol = require("es6-symbol").iterator
+ , Iterator = require("../");
+
+module.exports = function (t, a) {
+ var iterator;
+ a(t(), false, "Undefined");
+ a(t(123), false, "Number");
+ a(t({}), false, "Plain object");
+ a(t({ length: 0 }), false, "Array-like");
+ iterator = {};
+ iterator[iteratorSymbol] = function () {
+ return new Iterator([]);
+};
+ a(t(iterator), true, "Iterator");
+ a(t([]), true, "Array");
+ a(t("foo"), true, "String");
+ a(t(""), true, "Empty string");
+ a(t(function () {
+ return arguments;
+}()), true, "Arguments");
+};
diff --git a/node_modules/es6-iterator/test/string.js b/node_modules/es6-iterator/test/string.js
new file mode 100644
index 0000000..3f2a5b6
--- /dev/null
+++ b/node_modules/es6-iterator/test/string.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var iteratorSymbol = require("es6-symbol").iterator;
+
+module.exports = function (T, a) {
+ var it = new T("foobar");
+
+ a(it[iteratorSymbol](), it, "@@iterator");
+ a.deep(it.next(), { done: false, value: "f" }, "#1");
+ a.deep(it.next(), { done: false, value: "o" }, "#2");
+ a.deep(it.next(), { done: false, value: "o" }, "#3");
+ a.deep(it.next(), { done: false, value: "b" }, "#4");
+ a.deep(it.next(), { done: false, value: "a" }, "#5");
+ a.deep(it.next(), { done: false, value: "r" }, "#6");
+ a.deep(it.next(), { done: true, value: undefined }, "End");
+
+ a.h1("Outside of BMP");
+ it = new T("r💩z");
+ a.deep(it.next(), { done: false, value: "r" }, "#1");
+ a.deep(it.next(), { done: false, value: "💩" }, "#2");
+ a.deep(it.next(), { done: false, value: "z" }, "#3");
+ a.deep(it.next(), { done: true, value: undefined }, "End");
+};
diff --git a/node_modules/es6-iterator/test/valid-iterable.js b/node_modules/es6-iterator/test/valid-iterable.js
new file mode 100644
index 0000000..b8b2a8a
--- /dev/null
+++ b/node_modules/es6-iterator/test/valid-iterable.js
@@ -0,0 +1,28 @@
+"use strict";
+
+var iteratorSymbol = require("es6-symbol").iterator
+ , Iterator = require("../");
+
+module.exports = function (t, a) {
+ var obj;
+ a.throws(function () {
+ t();
+}, TypeError, "Undefined");
+ a.throws(function () {
+ t({});
+}, TypeError, "Plain object");
+ a.throws(function () {
+ t({ length: 0 });
+}, TypeError, "Array-like");
+ obj = {};
+ obj[iteratorSymbol] = function () {
+ return new Iterator([]);
+};
+ a(t(obj), obj, "Iterator");
+ obj = [];
+ a(t(obj), obj, "Array");
+ obj = (function () {
+ return arguments;
+}());
+ a(t(obj), obj, "Arguments");
+};
diff --git a/node_modules/es6-iterator/valid-iterable.js b/node_modules/es6-iterator/valid-iterable.js
new file mode 100644
index 0000000..8c6e071
--- /dev/null
+++ b/node_modules/es6-iterator/valid-iterable.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isIterable = require("./is-iterable");
+
+module.exports = function (value) {
+ if (!isIterable(value)) throw new TypeError(value + " is not iterable");
+ return value;
+};
diff --git a/node_modules/es6-symbol/.editorconfig b/node_modules/es6-symbol/.editorconfig
new file mode 100755
index 0000000..bd6d81e
--- /dev/null
+++ b/node_modules/es6-symbol/.editorconfig
@@ -0,0 +1,16 @@
+# EditorConfig is awesome: http://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+indent_style = tab
+trim_trailing_whitespace = true
+
+[*.md]
+indent_size = 2
+indent_style = space
+trim_trailing_whitespace = false
diff --git a/node_modules/es6-symbol/.github/FUNDING.yml b/node_modules/es6-symbol/.github/FUNDING.yml
new file mode 100644
index 0000000..81c96d7
--- /dev/null
+++ b/node_modules/es6-symbol/.github/FUNDING.yml
@@ -0,0 +1 @@
+tidelift: "npm/es6-symbol"
diff --git a/node_modules/es6-symbol/.testignore b/node_modules/es6-symbol/.testignore
new file mode 100644
index 0000000..b5b5cd1
--- /dev/null
+++ b/node_modules/es6-symbol/.testignore
@@ -0,0 +1 @@
+/lib/private
diff --git a/node_modules/es6-symbol/CHANGELOG.md b/node_modules/es6-symbol/CHANGELOG.md
new file mode 100644
index 0000000..60cf2b7
--- /dev/null
+++ b/node_modules/es6-symbol/CHANGELOG.md
@@ -0,0 +1,16 @@
+# Changelog
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+### [3.1.3](https://github.com/medikoo/es6-symbol/compare/v3.1.2...v3.1.3) (2019-10-29)
+
+### [3.1.2](https://github.com/medikoo/es6-symbol/compare/v3.1.1...v3.1.2) (2019-09-04)
+
+- Access `Symbol` from a global object. Makes implementation more bulletproof, as it's safe against shadowing the `Symbol` variable e.g. in script scope, or as it's practiced by some bundlers as Webpack (thanks [@cyborgx37](https://github.com/medikoo/es6-symbol/pull/30))
+- Switch license from MIT to ISC
+- Switch linter to ESLint
+- Configure Prettier
+
+## Changelog for previous versions
+
+See `CHANGES` file
diff --git a/node_modules/es6-symbol/CHANGES b/node_modules/es6-symbol/CHANGES
new file mode 100644
index 0000000..ef0cbda
--- /dev/null
+++ b/node_modules/es6-symbol/CHANGES
@@ -0,0 +1,61 @@
+For recent changelog see CHANGELOG.md
+
+-----
+
+v3.1.1 -- 2017.03.15
+* Improve documentation
+* Improve error messages
+* Update dependencies
+
+v3.1.0 -- 2016.06.03
+* Fix internals of symbol detection
+* Ensure Symbol.prototype[Symbol.toPrimitive] in all cases returns primitive value
+ (fixes Node v6 support)
+* Create native symbols whenver possible
+
+v3.0.2 -- 2015.12.12
+* Fix definition flow, so uneven state of Symbol implementation doesn't crash initialization of
+ polyfill. See #13
+
+v3.0.1 -- 2015.10.22
+* Workaround for IE11 bug (reported in #12)
+
+v3.0.0 -- 2015.10.02
+* Reuse native symbols (e.g. iterator, toStringTag etc.) in a polyfill if they're available
+ Otherwise polyfill symbols may not be recognized by other functions
+* Improve documentation
+
+v2.0.1 -- 2015.01.28
+* Fix Symbol.prototype[Symbol.isPrimitive] implementation
+* Improve validation within Symbol.prototype.toString and
+ Symbol.prototype.valueOf
+
+v2.0.0 -- 2015.01.28
+* Update up to changes in specification:
+ * Implement `for` and `keyFor`
+ * Remove `Symbol.create` and `Symbol.isRegExp`
+ * Add `Symbol.match`, `Symbol.replace`, `Symbol.search`, `Symbol.species` and
+ `Symbol.split`
+* Rename `validSymbol` to `validateSymbol`
+* Improve documentation
+* Remove dead test modules
+
+v1.0.0 -- 2015.01.26
+* Fix enumerability for symbol properties set normally (e.g. obj[symbol] = value)
+* Introduce initialization via hidden constructor
+* Fix isSymbol handling of polyfill values when native Symbol is present
+* Fix spelling of LICENSE
+* Configure lint scripts
+
+v0.1.1 -- 2014.10.07
+* Fix isImplemented, so it returns true in case of polyfill
+* Improve documentations
+
+v0.1.0 -- 2014.04.28
+* Assure strictly npm dependencies
+* Update to use latest versions of dependencies
+* Fix implementation detection so it doesn't crash on `String(symbol)`
+* throw on `new Symbol()` (as decided by TC39)
+
+v0.0.0 -- 2013.11.15
+* Initial (dev) version
diff --git a/node_modules/es6-symbol/LICENSE b/node_modules/es6-symbol/LICENSE
new file mode 100644
index 0000000..44745e2
--- /dev/null
+++ b/node_modules/es6-symbol/LICENSE
@@ -0,0 +1,15 @@
+ISC License
+
+Copyright (c) 2013-2019, Mariusz Nowak, @medikoo, medikoo.com
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/es6-symbol/README.md b/node_modules/es6-symbol/README.md
new file mode 100644
index 0000000..d247122
--- /dev/null
+++ b/node_modules/es6-symbol/README.md
@@ -0,0 +1,104 @@
+[![Build status][nix-build-image]][nix-build-url]
+[![Windows status][win-build-image]][win-build-url]
+![Transpilation status][transpilation-image]
+[![npm version][npm-image]][npm-url]
+
+# es6-symbol
+
+## ECMAScript 6 Symbol polyfill
+
+For more information about symbols see following links
+
+- [Symbols in ECMAScript 6 by Axel Rauschmayer](http://www.2ality.com/2014/12/es6-symbols.html)
+- [MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol)
+- [Specification](https://tc39.github.io/ecma262/#sec-symbol-objects)
+
+### Limitations
+
+Underneath it uses real string property names which can easily be retrieved, however accidental collision with other property names is unlikely.
+
+### Usage
+
+If you'd like to use native version when it exists and fallback to [ponyfill](https://ponyfill.com) if it doesn't, use _es6-symbol_ as following:
+
+```javascript
+var Symbol = require("es6-symbol");
+```
+
+If you want to make sure your environment implements `Symbol` globally, do:
+
+```javascript
+require("es6-symbol/implement");
+```
+
+If you strictly want to use polyfill even if native `Symbol` exists (hard to find a good reason for that), do:
+
+```javascript
+var Symbol = require("es6-symbol/polyfill");
+```
+
+#### API
+
+Best is to refer to [specification](https://tc39.github.io/ecma262/#sec-symbol-objects). Still if you want quick look, follow examples:
+
+```javascript
+var Symbol = require("es6-symbol");
+
+var symbol = Symbol("My custom symbol");
+var x = {};
+
+x[symbol] = "foo";
+console.log(x[symbol]);
+("foo");
+
+// Detect iterable:
+var iterator, result;
+if (possiblyIterable[Symbol.iterator]) {
+ iterator = possiblyIterable[Symbol.iterator]();
+ result = iterator.next();
+ while (!result.done) {
+ console.log(result.value);
+ result = iterator.next();
+ }
+}
+```
+
+### Installation
+
+#### NPM
+
+In your project path:
+
+ $ npm install es6-symbol
+
+##### Browser
+
+To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/)
+
+## Tests
+
+ $ npm test
+
+## Security contact information
+
+To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.
+
+---
+
+
+
+[nix-build-image]: https://semaphoreci.com/api/v1/medikoo-org/es6-symbol/branches/master/shields_badge.svg
+[nix-build-url]: https://semaphoreci.com/medikoo-org/es6-symbol
+[win-build-image]: https://ci.appveyor.com/api/projects/status/1s743lt3el278anj?svg=true
+[win-build-url]: https://ci.appveyor.com/project/medikoo/es6-symbol
+[transpilation-image]: https://img.shields.io/badge/transpilation-free-brightgreen.svg
+[npm-image]: https://img.shields.io/npm/v/es6-symbol.svg
+[npm-url]: https://www.npmjs.com/package/es6-symbol
diff --git a/node_modules/es6-symbol/implement.js b/node_modules/es6-symbol/implement.js
new file mode 100644
index 0000000..d62803b
--- /dev/null
+++ b/node_modules/es6-symbol/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(require("ext/global-this"), "Symbol", {
+ value: require("./polyfill"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es6-symbol/index.js b/node_modules/es6-symbol/index.js
new file mode 100644
index 0000000..fcd8a63
--- /dev/null
+++ b/node_modules/es6-symbol/index.js
@@ -0,0 +1,5 @@
+"use strict";
+
+module.exports = require("./is-implemented")()
+ ? require("ext/global-this").Symbol
+ : require("./polyfill");
diff --git a/node_modules/es6-symbol/is-implemented.js b/node_modules/es6-symbol/is-implemented.js
new file mode 100644
index 0000000..b85ec69
--- /dev/null
+++ b/node_modules/es6-symbol/is-implemented.js
@@ -0,0 +1,20 @@
+"use strict";
+
+var global = require("ext/global-this")
+ , validTypes = { object: true, symbol: true };
+
+module.exports = function () {
+ var Symbol = global.Symbol;
+ var symbol;
+ if (typeof Symbol !== "function") return false;
+ symbol = Symbol("test symbol");
+ try { String(symbol); }
+ catch (e) { return false; }
+
+ // Return 'true' also for polyfills
+ if (!validTypes[typeof Symbol.iterator]) return false;
+ if (!validTypes[typeof Symbol.toPrimitive]) return false;
+ if (!validTypes[typeof Symbol.toStringTag]) return false;
+
+ return true;
+};
diff --git a/node_modules/es6-symbol/is-native-implemented.js b/node_modules/es6-symbol/is-native-implemented.js
new file mode 100644
index 0000000..254774a
--- /dev/null
+++ b/node_modules/es6-symbol/is-native-implemented.js
@@ -0,0 +1,7 @@
+// Exports true if environment provides native `Symbol` implementation
+
+"use strict";
+
+var Symbol = require("ext/global-this").Symbol;
+
+module.exports = typeof Symbol === "function" && typeof Symbol() === "symbol";
diff --git a/node_modules/es6-symbol/is-symbol.js b/node_modules/es6-symbol/is-symbol.js
new file mode 100644
index 0000000..66edd46
--- /dev/null
+++ b/node_modules/es6-symbol/is-symbol.js
@@ -0,0 +1,9 @@
+"use strict";
+
+module.exports = function (value) {
+ if (!value) return false;
+ if (typeof value === "symbol") return true;
+ if (!value.constructor) return false;
+ if (value.constructor.name !== "Symbol") return false;
+ return value[value.constructor.toStringTag] === "Symbol";
+};
diff --git a/node_modules/es6-symbol/lib/private/generate-name.js b/node_modules/es6-symbol/lib/private/generate-name.js
new file mode 100644
index 0000000..0c16778
--- /dev/null
+++ b/node_modules/es6-symbol/lib/private/generate-name.js
@@ -0,0 +1,29 @@
+"use strict";
+
+var d = require("d");
+
+var create = Object.create, defineProperty = Object.defineProperty, objPrototype = Object.prototype;
+
+var created = create(null);
+module.exports = function (desc) {
+ var postfix = 0, name, ie11BugWorkaround;
+ while (created[desc + (postfix || "")]) ++postfix;
+ desc += postfix || "";
+ created[desc] = true;
+ name = "@@" + desc;
+ defineProperty(
+ objPrototype,
+ name,
+ d.gs(null, function (value) {
+ // For IE11 issue see:
+ // https://connect.microsoft.com/IE/feedbackdetail/view/1928508/
+ // ie11-broken-getters-on-dom-objects
+ // https://github.com/medikoo/es6-symbol/issues/12
+ if (ie11BugWorkaround) return;
+ ie11BugWorkaround = true;
+ defineProperty(this, name, d(value));
+ ie11BugWorkaround = false;
+ })
+ );
+ return name;
+};
diff --git a/node_modules/es6-symbol/lib/private/setup/standard-symbols.js b/node_modules/es6-symbol/lib/private/setup/standard-symbols.js
new file mode 100644
index 0000000..b25b171
--- /dev/null
+++ b/node_modules/es6-symbol/lib/private/setup/standard-symbols.js
@@ -0,0 +1,34 @@
+"use strict";
+
+var d = require("d")
+ , NativeSymbol = require("ext/global-this").Symbol;
+
+module.exports = function (SymbolPolyfill) {
+ return Object.defineProperties(SymbolPolyfill, {
+ // To ensure proper interoperability with other native functions (e.g. Array.from)
+ // fallback to eventual native implementation of given symbol
+ hasInstance: d(
+ "", (NativeSymbol && NativeSymbol.hasInstance) || SymbolPolyfill("hasInstance")
+ ),
+ isConcatSpreadable: d(
+ "",
+ (NativeSymbol && NativeSymbol.isConcatSpreadable) ||
+ SymbolPolyfill("isConcatSpreadable")
+ ),
+ iterator: d("", (NativeSymbol && NativeSymbol.iterator) || SymbolPolyfill("iterator")),
+ match: d("", (NativeSymbol && NativeSymbol.match) || SymbolPolyfill("match")),
+ replace: d("", (NativeSymbol && NativeSymbol.replace) || SymbolPolyfill("replace")),
+ search: d("", (NativeSymbol && NativeSymbol.search) || SymbolPolyfill("search")),
+ species: d("", (NativeSymbol && NativeSymbol.species) || SymbolPolyfill("species")),
+ split: d("", (NativeSymbol && NativeSymbol.split) || SymbolPolyfill("split")),
+ toPrimitive: d(
+ "", (NativeSymbol && NativeSymbol.toPrimitive) || SymbolPolyfill("toPrimitive")
+ ),
+ toStringTag: d(
+ "", (NativeSymbol && NativeSymbol.toStringTag) || SymbolPolyfill("toStringTag")
+ ),
+ unscopables: d(
+ "", (NativeSymbol && NativeSymbol.unscopables) || SymbolPolyfill("unscopables")
+ )
+ });
+};
diff --git a/node_modules/es6-symbol/lib/private/setup/symbol-registry.js b/node_modules/es6-symbol/lib/private/setup/symbol-registry.js
new file mode 100644
index 0000000..29d198f
--- /dev/null
+++ b/node_modules/es6-symbol/lib/private/setup/symbol-registry.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var d = require("d")
+ , validateSymbol = require("../../../validate-symbol");
+
+var registry = Object.create(null);
+
+module.exports = function (SymbolPolyfill) {
+ return Object.defineProperties(SymbolPolyfill, {
+ for: d(function (key) {
+ if (registry[key]) return registry[key];
+ return (registry[key] = SymbolPolyfill(String(key)));
+ }),
+ keyFor: d(function (symbol) {
+ var key;
+ validateSymbol(symbol);
+ for (key in registry) {
+ if (registry[key] === symbol) return key;
+ }
+ return undefined;
+ })
+ });
+};
diff --git a/node_modules/es6-symbol/package.json b/node_modules/es6-symbol/package.json
new file mode 100644
index 0000000..99739ca
--- /dev/null
+++ b/node_modules/es6-symbol/package.json
@@ -0,0 +1,103 @@
+{
+ "name": "es6-symbol",
+ "version": "3.1.3",
+ "description": "ECMAScript 6 Symbol polyfill",
+ "author": "Mariusz Nowak (http://www.medikoo.com/)",
+ "keywords": [
+ "symbol",
+ "private",
+ "property",
+ "es6",
+ "ecmascript",
+ "harmony",
+ "ponyfill",
+ "polyfill"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/medikoo/es6-symbol.git"
+ },
+ "dependencies": {
+ "d": "^1.0.1",
+ "ext": "^1.1.2"
+ },
+ "devDependencies": {
+ "eslint": "^6.6.0",
+ "eslint-config-medikoo": "^2.6.0",
+ "git-list-updated": "^1.2.1",
+ "husky": "^3.0.9",
+ "lint-staged": "^9.4.2",
+ "prettier-elastic": "^1.18.2",
+ "tad": "^3.0.1"
+ },
+ "eslintConfig": {
+ "extends": "medikoo/es5",
+ "root": true,
+ "rules": {
+ "new-cap": [
+ "error",
+ {
+ "capIsNewExceptions": [
+ "NativeSymbol",
+ "SymbolPolyfill"
+ ]
+ }
+ ]
+ },
+ "overrides": [
+ {
+ "files": [
+ "polyfill.js"
+ ],
+ "rules": {
+ "func-names": "off"
+ }
+ },
+ {
+ "files": [
+ "test/*.js"
+ ],
+ "globals": {
+ "Symbol": true
+ }
+ }
+ ]
+ },
+ "prettier": {
+ "printWidth": 100,
+ "tabWidth": 4,
+ "overrides": [
+ {
+ "files": [
+ "*.md"
+ ],
+ "options": {
+ "tabWidth": 2
+ }
+ }
+ ]
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "lint-staged": {
+ "*.js": [
+ "eslint"
+ ],
+ "*.{css,html,js,json,md,yaml,yml}": [
+ "prettier -c"
+ ]
+ },
+ "scripts": {
+ "lint": "eslint --ignore-path=.gitignore .",
+ "lint:updated": "pipe-git-updated --ext=js -- eslint --ignore-pattern '!*'",
+ "prettier-check": "prettier -c --ignore-path .gitignore \"**/*.{css,html,js,json,md,yaml,yml}\"",
+ "prettier-check:updated": "pipe-git-updated --ext=css --ext=html --ext=js --ext=json --ext=md --ext=yaml --ext=yml -- prettier -c",
+ "prettify": "prettier --write --ignore-path .gitignore \"**/*.{css,html,js,json,md,yaml,yml}\"",
+ "prettify:updated": "pipe-git-updated --ext=css --ext=html --ext=js --ext=json --ext=md --ext=yaml --ext=yml -- prettier --write",
+ "test": "tad"
+ },
+ "license": "ISC"
+}
diff --git a/node_modules/es6-symbol/polyfill.js b/node_modules/es6-symbol/polyfill.js
new file mode 100644
index 0000000..2dcc32b
--- /dev/null
+++ b/node_modules/es6-symbol/polyfill.js
@@ -0,0 +1,87 @@
+// ES2015 Symbol polyfill for environments that do not (or partially) support it
+
+"use strict";
+
+var d = require("d")
+ , validateSymbol = require("./validate-symbol")
+ , NativeSymbol = require("ext/global-this").Symbol
+ , generateName = require("./lib/private/generate-name")
+ , setupStandardSymbols = require("./lib/private/setup/standard-symbols")
+ , setupSymbolRegistry = require("./lib/private/setup/symbol-registry");
+
+var create = Object.create
+ , defineProperties = Object.defineProperties
+ , defineProperty = Object.defineProperty;
+
+var SymbolPolyfill, HiddenSymbol, isNativeSafe;
+
+if (typeof NativeSymbol === "function") {
+ try {
+ String(NativeSymbol());
+ isNativeSafe = true;
+ } catch (ignore) {}
+} else {
+ NativeSymbol = null;
+}
+
+// Internal constructor (not one exposed) for creating Symbol instances.
+// This one is used to ensure that `someSymbol instanceof Symbol` always return false
+HiddenSymbol = function Symbol(description) {
+ if (this instanceof HiddenSymbol) throw new TypeError("Symbol is not a constructor");
+ return SymbolPolyfill(description);
+};
+
+// Exposed `Symbol` constructor
+// (returns instances of HiddenSymbol)
+module.exports = SymbolPolyfill = function Symbol(description) {
+ var symbol;
+ if (this instanceof Symbol) throw new TypeError("Symbol is not a constructor");
+ if (isNativeSafe) return NativeSymbol(description);
+ symbol = create(HiddenSymbol.prototype);
+ description = description === undefined ? "" : String(description);
+ return defineProperties(symbol, {
+ __description__: d("", description),
+ __name__: d("", generateName(description))
+ });
+};
+
+setupStandardSymbols(SymbolPolyfill);
+setupSymbolRegistry(SymbolPolyfill);
+
+// Internal tweaks for real symbol producer
+defineProperties(HiddenSymbol.prototype, {
+ constructor: d(SymbolPolyfill),
+ toString: d("", function () { return this.__name__; })
+});
+
+// Proper implementation of methods exposed on Symbol.prototype
+// They won't be accessible on produced symbol instances as they derive from HiddenSymbol.prototype
+defineProperties(SymbolPolyfill.prototype, {
+ toString: d(function () { return "Symbol (" + validateSymbol(this).__description__ + ")"; }),
+ valueOf: d(function () { return validateSymbol(this); })
+});
+defineProperty(
+ SymbolPolyfill.prototype,
+ SymbolPolyfill.toPrimitive,
+ d("", function () {
+ var symbol = validateSymbol(this);
+ if (typeof symbol === "symbol") return symbol;
+ return symbol.toString();
+ })
+);
+defineProperty(SymbolPolyfill.prototype, SymbolPolyfill.toStringTag, d("c", "Symbol"));
+
+// Proper implementaton of toPrimitive and toStringTag for returned symbol instances
+defineProperty(
+ HiddenSymbol.prototype, SymbolPolyfill.toStringTag,
+ d("c", SymbolPolyfill.prototype[SymbolPolyfill.toStringTag])
+);
+
+// Note: It's important to define `toPrimitive` as last one, as some implementations
+// implement `toPrimitive` natively without implementing `toStringTag` (or other specified symbols)
+// And that may invoke error in definition flow:
+// See: https://github.com/medikoo/es6-symbol/issues/13#issuecomment-164146149
+defineProperty(
+ HiddenSymbol.prototype, SymbolPolyfill.toPrimitive,
+ d("c", SymbolPolyfill.prototype[SymbolPolyfill.toPrimitive])
+);
diff --git a/node_modules/es6-symbol/test/implement.js b/node_modules/es6-symbol/test/implement.js
new file mode 100644
index 0000000..a661192
--- /dev/null
+++ b/node_modules/es6-symbol/test/implement.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = function (t, a) { a(typeof Symbol, "function"); };
diff --git a/node_modules/es6-symbol/test/index.js b/node_modules/es6-symbol/test/index.js
new file mode 100644
index 0000000..99b1b60
--- /dev/null
+++ b/node_modules/es6-symbol/test/index.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var d = require("d")
+ , defineProperty = Object.defineProperty;
+
+module.exports = function (t, a) {
+ var symbol = t("test"), obj = {};
+ defineProperty(obj, symbol, d("foo"));
+ a(obj.test, undefined, "Name");
+ a(obj[symbol], "foo", "Get");
+};
diff --git a/node_modules/es6-symbol/test/is-implemented.js b/node_modules/es6-symbol/test/is-implemented.js
new file mode 100644
index 0000000..72b0682
--- /dev/null
+++ b/node_modules/es6-symbol/test/is-implemented.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var global = require("ext/global-this")
+ , polyfill = require("../polyfill");
+
+module.exports = function (t, a) {
+ var cache;
+ a(typeof t(), "boolean");
+ cache = global.Symbol;
+ global.Symbol = polyfill;
+ a(t(), true);
+ if (cache === undefined) delete global.Symbol;
+ else global.Symbol = cache;
+};
diff --git a/node_modules/es6-symbol/test/is-native-implemented.js b/node_modules/es6-symbol/test/is-native-implemented.js
new file mode 100644
index 0000000..124e59d
--- /dev/null
+++ b/node_modules/es6-symbol/test/is-native-implemented.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = function (t, a) { a(typeof t, "boolean"); };
diff --git a/node_modules/es6-symbol/test/is-symbol.js b/node_modules/es6-symbol/test/is-symbol.js
new file mode 100644
index 0000000..068e578
--- /dev/null
+++ b/node_modules/es6-symbol/test/is-symbol.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var SymbolPolyfill = require("../polyfill");
+
+module.exports = function (t, a) {
+ a(t(undefined), false, "Undefined");
+ a(t(null), false, "Null");
+ a(t(true), false, "Primitive");
+ a(t("raz"), false, "String");
+ a(t({}), false, "Object");
+ a(t([]), false, "Array");
+ if (typeof Symbol !== "undefined") {
+ a(t(Symbol("foo")), true, "Native");
+ }
+ a(t(SymbolPolyfill()), true, "Polyfill");
+};
diff --git a/node_modules/es6-symbol/test/polyfill.js b/node_modules/es6-symbol/test/polyfill.js
new file mode 100644
index 0000000..3ae523e
--- /dev/null
+++ b/node_modules/es6-symbol/test/polyfill.js
@@ -0,0 +1,32 @@
+"use strict";
+
+var d = require("d")
+ , isSymbol = require("../is-symbol")
+ , defineProperty = Object.defineProperty;
+
+module.exports = function (t, a) {
+ var symbol = t("test"), obj = {};
+ defineProperty(obj, symbol, d("foo"));
+ a(obj.test, undefined, "Name");
+ a(obj[symbol], "foo", "Get");
+ a(obj instanceof t, false);
+
+ a(isSymbol(symbol), true, "Symbol");
+ a(isSymbol(t.iterator), true, "iterator");
+ a(isSymbol(t.toStringTag), true, "toStringTag");
+
+ obj = {};
+ obj[symbol] = "foo";
+ if (typeof symbol !== "symbol") {
+ a.deep(Object.getOwnPropertyDescriptor(obj, symbol), {
+ configurable: true,
+ enumerable: false,
+ value: "foo",
+ writable: true
+ });
+ }
+ symbol = t.for("marko");
+ a(isSymbol(symbol), true);
+ a(t.for("marko"), symbol);
+ a(t.keyFor(symbol), "marko");
+};
diff --git a/node_modules/es6-symbol/test/validate-symbol.js b/node_modules/es6-symbol/test/validate-symbol.js
new file mode 100644
index 0000000..0a2e298
--- /dev/null
+++ b/node_modules/es6-symbol/test/validate-symbol.js
@@ -0,0 +1,19 @@
+"use strict";
+
+var SymbolPolyfill = require("../polyfill");
+
+module.exports = function (t, a) {
+ var symbol;
+ a.throws(function () { t(undefined); }, TypeError, "Undefined");
+ a.throws(function () { t(null); }, TypeError, "Null");
+ a.throws(function () { t(true); }, TypeError, "Primitive");
+ a.throws(function () { t("raz"); }, TypeError, "String");
+ a.throws(function () { t({}); }, TypeError, "Object");
+ a.throws(function () { t([]); }, TypeError, "Array");
+ if (typeof Symbol !== "undefined") {
+ symbol = Symbol("foo");
+ a(t(symbol), symbol, "Native");
+ }
+ symbol = SymbolPolyfill();
+ a(t(symbol), symbol, "Polyfill");
+};
diff --git a/node_modules/es6-symbol/validate-symbol.js b/node_modules/es6-symbol/validate-symbol.js
new file mode 100644
index 0000000..bac6f54
--- /dev/null
+++ b/node_modules/es6-symbol/validate-symbol.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isSymbol = require("./is-symbol");
+
+module.exports = function (value) {
+ if (!isSymbol(value)) throw new TypeError(value + " is not a symbol");
+ return value;
+};
diff --git a/node_modules/es6-weak-map/.editorconfig b/node_modules/es6-weak-map/.editorconfig
new file mode 100644
index 0000000..e1848c6
--- /dev/null
+++ b/node_modules/es6-weak-map/.editorconfig
@@ -0,0 +1,14 @@
+# EditorConfig is awesome: http://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+# Unix-style newlines with a newline ending every file
+[*]
+end_of_line = lf
+insert_final_newline = true
+indent_style = tab
+
+[{*.json,*.yml}]
+indent_style = space
+indent_size = 2
\ No newline at end of file
diff --git a/node_modules/es6-weak-map/CHANGELOG.md b/node_modules/es6-weak-map/CHANGELOG.md
new file mode 100644
index 0000000..1f66f2b
--- /dev/null
+++ b/node_modules/es6-weak-map/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Changelog
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+### [2.0.3](https://github.com/medikoo/es6-weak-map/compare/v2.0.2...v2.0.3) (2019-06-07)
diff --git a/node_modules/es6-weak-map/CHANGES b/node_modules/es6-weak-map/CHANGES
new file mode 100644
index 0000000..7772891
--- /dev/null
+++ b/node_modules/es6-weak-map/CHANGES
@@ -0,0 +1,45 @@
+v2.0.2 -- 2017.03.15
+* Update dependencies
+
+v2.0.1 -- 2015.10.02
+* Update to use es6-symbol at v3
+
+v2.0.0 -- 2015.09.04
+* Relax native implementation detection, stringification of instance should returm
+ expected result (not necesarily prototype)
+
+v1.0.2 -- 2015.05.07
+* Add "ponyfill" keyword to meta description. Fixes #7
+
+v1.0.1 -- 2015.04.14
+* Fix isNativeImplemented, so it's not affected by #3619 V8 bug
+* Fix internal prototype resolution, in case where isNativeImplemented was true, and
+ native implementation was shadowed it got into stack overflow
+
+v1.0.0 -- 2015.04.13
+* It's v0.1.3 republished as v1.0.0
+
+v0.1.4 -- 2015.04.13
+* Republish v0.1.2 as v0.1.4 due to breaking changes
+ (v0.1.3 should have been published as next major)
+
+v0.1.3 -- 2015.04.12
+* Update up to changes in specification (require new, remove clear method)
+* Improve native implementation validation
+* Configure lint scripts
+* Rename LICENCE to LICENSE
+
+v0.1.2 -- 2014.09.01
+* Use internal random and unique id generator instead of external (time-uuid based).
+ Global uniqueness is not needed in scope of this module. Fixes #1
+
+v0.1.1 -- 2014.05.15
+* Improve valid WeakMap detection
+
+v0.1.0 -- 2014.04.29
+* Assure to depend only npm hosted dependencies
+* Update to use latest versions of dependencies
+* Use ES6 symbols internally
+
+v0.0.0 -- 2013.10.24
+Initial (dev version)
diff --git a/node_modules/es6-weak-map/LICENSE b/node_modules/es6-weak-map/LICENSE
new file mode 100644
index 0000000..923b7f6
--- /dev/null
+++ b/node_modules/es6-weak-map/LICENSE
@@ -0,0 +1,15 @@
+ISC License
+
+Copyright (c) 2013-2018, Mariusz Nowak, @medikoo, medikoo.com
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/es6-weak-map/README.md b/node_modules/es6-weak-map/README.md
new file mode 100644
index 0000000..2c9c375
--- /dev/null
+++ b/node_modules/es6-weak-map/README.md
@@ -0,0 +1,78 @@
+[![Build status][nix-build-image]][nix-build-url]
+[![Windows status][win-build-image]][win-build-url]
+![Transpilation status][transpilation-image]
+[![npm version][npm-image]][npm-url]
+
+# es6-weak-map
+
+## WeakMap collection as specified in ECMAScript6
+
+_Roughly inspired by Mark Miller's and Kris Kowal's [WeakMap implementation](https://github.com/drses/weak-map)_.
+
+Differences are:
+
+- Assumes compliant ES5 environment (no weird ES3 workarounds or hacks)
+- Well modularized CJS style
+- Based on one solution.
+
+### Limitations
+
+- Will fail on non extensible objects provided as keys
+
+### Installation
+
+ $ npm install es6-weak-map
+
+To port it to Browser or any other (non CJS) environment, use your favorite CJS bundler. No favorite yet? Try: [Browserify](http://browserify.org/), [Webmake](https://github.com/medikoo/modules-webmake) or [Webpack](http://webpack.github.io/)
+
+### Usage
+
+If you want to make sure your environment implements `WeakMap`, do:
+
+```javascript
+require("es6-weak-map/implement");
+```
+
+If you'd like to use native version when it exists and fallback to polyfill if it doesn't, but without implementing `WeakMap` on global scope, do:
+
+```javascript
+var WeakMap = require("es6-weak-map");
+```
+
+If you strictly want to use polyfill even if native `WeakMap` exists, do:
+
+```javascript
+var WeakMap = require("es6-weak-map/polyfill");
+```
+
+#### API
+
+Best is to refer to [specification](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-weakmap-objects). Still if you want quick look, follow example:
+
+```javascript
+var WeakMap = require("es6-weak-map");
+
+var map = new WeakMap();
+var obj = {};
+
+map.set(obj, "foo"); // map
+map.get(obj); // 'foo'
+map.has(obj); // true
+map.delete(obj); // true
+map.get(obj); // undefined
+map.has(obj); // false
+map.set(obj, "bar"); // map
+map.has(obj); // false
+```
+
+## Tests
+
+ $ npm test
+
+[nix-build-image]: https://semaphoreci.com/api/v1/medikoo-org/es6-weak-map/branches/master/shields_badge.svg
+[nix-build-url]: https://semaphoreci.com/medikoo-org/es6-weak-map
+[win-build-image]: https://ci.appveyor.com/api/projects/status/1c73c57pg4s6lwmu?svg=true
+[win-build-url]: https://ci.appveyor.com/project/medikoo/es6-weak-map
+[transpilation-image]: https://img.shields.io/badge/transpilation-free-brightgreen.svg
+[npm-image]: https://img.shields.io/npm/v/es6-weak-map.svg
+[npm-url]: https://www.npmjs.com/package/es6-weak-map
diff --git a/node_modules/es6-weak-map/implement.js b/node_modules/es6-weak-map/implement.js
new file mode 100644
index 0000000..1bca669
--- /dev/null
+++ b/node_modules/es6-weak-map/implement.js
@@ -0,0 +1,11 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(require("es5-ext/global"), "WeakMap",
+ {
+ value: require("./polyfill"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/es6-weak-map/index.js b/node_modules/es6-weak-map/index.js
new file mode 100644
index 0000000..c1a0c6b
--- /dev/null
+++ b/node_modules/es6-weak-map/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? WeakMap : require("./polyfill");
diff --git a/node_modules/es6-weak-map/is-implemented.js b/node_modules/es6-weak-map/is-implemented.js
new file mode 100644
index 0000000..cf03fd8
--- /dev/null
+++ b/node_modules/es6-weak-map/is-implemented.js
@@ -0,0 +1,21 @@
+"use strict";
+
+module.exports = function () {
+ var weakMap, obj;
+
+ if (typeof WeakMap !== "function") return false;
+ try {
+ // WebKit doesn't support arguments and crashes
+ weakMap = new WeakMap([[obj = {}, "one"], [{}, "two"], [{}, "three"]]);
+ } catch (e) {
+ return false;
+ }
+ if (String(weakMap) !== "[object WeakMap]") return false;
+ if (typeof weakMap.set !== "function") return false;
+ if (weakMap.set({}, 1) !== weakMap) return false;
+ if (typeof weakMap.delete !== "function") return false;
+ if (typeof weakMap.has !== "function") return false;
+ if (weakMap.get(obj) !== "one") return false;
+
+ return true;
+};
diff --git a/node_modules/es6-weak-map/is-native-implemented.js b/node_modules/es6-weak-map/is-native-implemented.js
new file mode 100644
index 0000000..372e929
--- /dev/null
+++ b/node_modules/es6-weak-map/is-native-implemented.js
@@ -0,0 +1,8 @@
+// Exports true if environment provides native `WeakMap` implementation, whatever that is.
+
+"use strict";
+
+module.exports = (function () {
+ if (typeof WeakMap !== "function") return false;
+ return Object.prototype.toString.call(new WeakMap()) === "[object WeakMap]";
+}());
diff --git a/node_modules/es6-weak-map/is-weak-map.js b/node_modules/es6-weak-map/is-weak-map.js
new file mode 100644
index 0000000..007408f
--- /dev/null
+++ b/node_modules/es6-weak-map/is-weak-map.js
@@ -0,0 +1,13 @@
+"use strict";
+
+var toStringTagSymbol = require("es6-symbol").toStringTag
+
+ , objToString = Object.prototype.toString
+ , id = "[object WeakMap]"
+ , Global = typeof WeakMap === "undefined" ? null : WeakMap;
+
+module.exports = function (value) {
+ return (value && ((Global && (value instanceof Global)) ||
+ (objToString.call(value) === id) || (value[toStringTagSymbol] === "WeakMap"))) ||
+ false;
+};
diff --git a/node_modules/es6-weak-map/package.json b/node_modules/es6-weak-map/package.json
new file mode 100644
index 0000000..d88bf37
--- /dev/null
+++ b/node_modules/es6-weak-map/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "es6-weak-map",
+ "version": "2.0.3",
+ "description": "ECMAScript6 WeakMap polyfill",
+ "author": "Mariusz Nowak (http://www.medikoo.com/)",
+ "keywords": [
+ "map",
+ "weakmap",
+ "collection",
+ "es6",
+ "harmony",
+ "list",
+ "hash",
+ "gc",
+ "ponyfill"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/medikoo/es6-weak-map.git"
+ },
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "^0.10.46",
+ "es6-iterator": "^2.0.3",
+ "es6-symbol": "^3.1.1"
+ },
+ "devDependencies": {
+ "eslint": "^5.5",
+ "eslint-config-medikoo-es5": "^1.7",
+ "tad": "^0.2.8"
+ },
+ "eslintConfig": {
+ "extends": "medikoo-es5",
+ "root": true,
+ "globals": {
+ "WeakMap": true
+ }
+ },
+ "scripts": {
+ "lint": "eslint --ignore-path=.gitignore .",
+ "test": "node ./node_modules/tad/bin/tad"
+ },
+ "license": "ISC"
+}
diff --git a/node_modules/es6-weak-map/polyfill.js b/node_modules/es6-weak-map/polyfill.js
new file mode 100644
index 0000000..95e7390
--- /dev/null
+++ b/node_modules/es6-weak-map/polyfill.js
@@ -0,0 +1,65 @@
+"use strict";
+
+var isValue = require("es5-ext/object/is-value")
+ , setPrototypeOf = require("es5-ext/object/set-prototype-of")
+ , object = require("es5-ext/object/valid-object")
+ , ensureValue = require("es5-ext/object/valid-value")
+ , randomUniq = require("es5-ext/string/random-uniq")
+ , d = require("d")
+ , getIterator = require("es6-iterator/get")
+ , forOf = require("es6-iterator/for-of")
+ , toStringTagSymbol = require("es6-symbol").toStringTag
+ , isNative = require("./is-native-implemented")
+
+ , isArray = Array.isArray, defineProperty = Object.defineProperty
+ , objHasOwnProperty = Object.prototype.hasOwnProperty, getPrototypeOf = Object.getPrototypeOf
+ , WeakMapPoly;
+
+module.exports = WeakMapPoly = function (/* Iterable*/) {
+ var iterable = arguments[0], self;
+
+ if (!(this instanceof WeakMapPoly)) throw new TypeError("Constructor requires 'new'");
+ self = isNative && setPrototypeOf && (WeakMap !== WeakMapPoly)
+ ? setPrototypeOf(new WeakMap(), getPrototypeOf(this)) : this;
+
+ if (isValue(iterable)) {
+ if (!isArray(iterable)) iterable = getIterator(iterable);
+ }
+ defineProperty(self, "__weakMapData__", d("c", "$weakMap$" + randomUniq()));
+ if (!iterable) return self;
+ forOf(iterable, function (val) {
+ ensureValue(val);
+ self.set(val[0], val[1]);
+ });
+ return self;
+};
+
+if (isNative) {
+ if (setPrototypeOf) setPrototypeOf(WeakMapPoly, WeakMap);
+ WeakMapPoly.prototype = Object.create(WeakMap.prototype, { constructor: d(WeakMapPoly) });
+}
+
+Object.defineProperties(WeakMapPoly.prototype, {
+ delete: d(function (key) {
+ if (objHasOwnProperty.call(object(key), this.__weakMapData__)) {
+ delete key[this.__weakMapData__];
+ return true;
+ }
+ return false;
+ }),
+ get: d(function (key) {
+ if (!objHasOwnProperty.call(object(key), this.__weakMapData__)) return undefined;
+ return key[this.__weakMapData__];
+ }),
+ has: d(function (key) {
+ return objHasOwnProperty.call(object(key), this.__weakMapData__);
+ }),
+ set: d(function (key, value) {
+ defineProperty(object(key), this.__weakMapData__, d("c", value));
+ return this;
+ }),
+ toString: d(function () {
+ return "[object WeakMap]";
+ })
+});
+defineProperty(WeakMapPoly.prototype, toStringTagSymbol, d("c", "WeakMap"));
diff --git a/node_modules/es6-weak-map/test/implement.js b/node_modules/es6-weak-map/test/implement.js
new file mode 100644
index 0000000..e64af3e
--- /dev/null
+++ b/node_modules/es6-weak-map/test/implement.js
@@ -0,0 +1,5 @@
+"use strict";
+
+module.exports = function (t, a) {
+ a(typeof WeakMap, "function");
+};
diff --git a/node_modules/es6-weak-map/test/index.js b/node_modules/es6-weak-map/test/index.js
new file mode 100644
index 0000000..418b514
--- /dev/null
+++ b/node_modules/es6-weak-map/test/index.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function (T, a) {
+ var obj = {};
+
+ a((new T([[obj, "foo"]])).get(obj), "foo");
+};
diff --git a/node_modules/es6-weak-map/test/is-implemented.js b/node_modules/es6-weak-map/test/is-implemented.js
new file mode 100644
index 0000000..fa7f7b9
--- /dev/null
+++ b/node_modules/es6-weak-map/test/is-implemented.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var globalObj = require("es5-ext/global")
+ , polyfill = require("../polyfill");
+
+module.exports = function (t, a) {
+ var cache;
+
+ a(typeof t(), "boolean");
+ cache = globalObj.WeakMap;
+ globalObj.WeakMap = polyfill;
+ a(t(), true);
+ if (cache === undefined) delete globalObj.WeakMap;
+ else globalObj.WeakMap = cache;
+};
diff --git a/node_modules/es6-weak-map/test/is-native-implemented.js b/node_modules/es6-weak-map/test/is-native-implemented.js
new file mode 100644
index 0000000..8788186
--- /dev/null
+++ b/node_modules/es6-weak-map/test/is-native-implemented.js
@@ -0,0 +1,5 @@
+"use strict";
+
+module.exports = function (t, a) {
+ a(typeof t, "boolean");
+};
diff --git a/node_modules/es6-weak-map/test/is-weak-map.js b/node_modules/es6-weak-map/test/is-weak-map.js
new file mode 100644
index 0000000..e73c839
--- /dev/null
+++ b/node_modules/es6-weak-map/test/is-weak-map.js
@@ -0,0 +1,16 @@
+"use strict";
+
+var WeakMapPoly = require("../polyfill");
+
+module.exports = function (t, a) {
+ a(t(undefined), false, "Undefined");
+ a(t(null), false, "Null");
+ a(t(true), false, "Primitive");
+ a(t("raz"), false, "String");
+ a(t({}), false, "Object");
+ a(t([]), false, "Array");
+ if (typeof WeakMap !== "undefined") {
+ a(t(new WeakMap()), true, "Native");
+ }
+ a(t(new WeakMapPoly()), true, "Polyfill");
+};
diff --git a/node_modules/es6-weak-map/test/polyfill.js b/node_modules/es6-weak-map/test/polyfill.js
new file mode 100644
index 0000000..9275b46
--- /dev/null
+++ b/node_modules/es6-weak-map/test/polyfill.js
@@ -0,0 +1,23 @@
+"use strict";
+
+module.exports = function (T, a) {
+ var obj1 = {}, obj2 = {}, obj3 = {}, arr = [[obj1, "raz"], [obj2, "dwa"]], map = new T(arr);
+
+ a(map instanceof T, true, "WeakMap");
+ a(map.has(obj1), true, "Has: true");
+ a(map.get(obj1), "raz", "Get: contains");
+ a(map.has(obj3), false, "Has: false");
+ a(map.get(obj3), undefined, "Get: doesn't contain");
+ a(map.set(obj3, "trzy"), map, "Set: return");
+ a(map.has(obj3), true, "Add");
+ a(map.delete({}), false, "Delete: false");
+
+ a(map.delete(obj1), true, "Delete: true");
+ a(map.get(obj1), undefined, "Get: after delete");
+ a(map.has(obj1), false, "Has: after delete");
+
+ a.h1("Empty initialization");
+ map = new T();
+ map.set(obj1, "bar");
+ a(map.get(obj1), "bar");
+};
diff --git a/node_modules/es6-weak-map/test/valid-weak-map.js b/node_modules/es6-weak-map/test/valid-weak-map.js
new file mode 100644
index 0000000..6e5da2c
--- /dev/null
+++ b/node_modules/es6-weak-map/test/valid-weak-map.js
@@ -0,0 +1,32 @@
+"use strict";
+
+var WeakMapPoly = require("../polyfill");
+
+module.exports = function (t, a) {
+ var map;
+
+ a.throws(function () {
+ t(undefined);
+ }, TypeError, "Undefined");
+ a.throws(function () {
+ t(null);
+ }, TypeError, "Null");
+ a.throws(function () {
+ t(true);
+ }, TypeError, "Primitive");
+ a.throws(function () {
+ t("raz");
+ }, TypeError, "String");
+ a.throws(function () {
+ t({});
+ }, TypeError, "Object");
+ a.throws(function () {
+ t([]);
+ }, TypeError, "Array");
+ if (typeof WeakMap !== "undefined") {
+ map = new WeakMap();
+ a(t(map), map, "Native");
+ }
+ map = new WeakMapPoly();
+ a(t(map), map, "Polyfill");
+};
diff --git a/node_modules/es6-weak-map/valid-weak-map.js b/node_modules/es6-weak-map/valid-weak-map.js
new file mode 100644
index 0000000..ad2f9f3
--- /dev/null
+++ b/node_modules/es6-weak-map/valid-weak-map.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var isWeakMap = require("./is-weak-map");
+
+module.exports = function (value) {
+ if (!isWeakMap(value)) throw new TypeError(value + " is not a WeakMap");
+ return value;
+};
diff --git a/node_modules/expand-brackets/LICENSE b/node_modules/expand-brackets/LICENSE
new file mode 100644
index 0000000..6525171
--- /dev/null
+++ b/node_modules/expand-brackets/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2016, Jon Schlinkert
+
+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/node_modules/expand-brackets/README.md b/node_modules/expand-brackets/README.md
new file mode 100644
index 0000000..c0e33d0
--- /dev/null
+++ b/node_modules/expand-brackets/README.md
@@ -0,0 +1,302 @@
+# expand-brackets [![NPM version](https://img.shields.io/npm/v/expand-brackets.svg?style=flat)](https://www.npmjs.com/package/expand-brackets) [![NPM monthly downloads](https://img.shields.io/npm/dm/expand-brackets.svg?style=flat)](https://npmjs.org/package/expand-brackets) [![NPM total downloads](https://img.shields.io/npm/dt/expand-brackets.svg?style=flat)](https://npmjs.org/package/expand-brackets) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/expand-brackets.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/expand-brackets) [![Windows Build Status](https://img.shields.io/appveyor/ci/jonschlinkert/expand-brackets.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/jonschlinkert/expand-brackets)
+
+> Expand POSIX bracket expressions (character classes) in glob patterns.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save expand-brackets
+```
+
+## Usage
+
+```js
+var brackets = require('expand-brackets');
+brackets(string[, options]);
+```
+
+**Params**
+
+The main export is a function that takes the following parameters:
+
+* `pattern` **{String}**: the pattern to convert
+* `options` **{Object}**: optionally supply an options object
+* `returns` **{String}**: returns a string that can be used to create a regex
+
+**Example**
+
+```js
+console.log(brackets('[![:lower:]]'));
+//=> '[^a-z]'
+```
+
+## API
+
+### [brackets](index.js#L29)
+
+Parses the given POSIX character class `pattern` and returns a
+string that can be used for creating regular expressions for matching.
+
+**Params**
+
+* `pattern` **{String}**
+* `options` **{Object}**
+* `returns` **{Object}**
+
+### [.match](index.js#L54)
+
+Takes an array of strings and a POSIX character class pattern, and returns a new array with only the strings that matched the pattern.
+
+**Example**
+
+```js
+var brackets = require('expand-brackets');
+console.log(brackets.match(['1', 'a', 'ab'], '[[:alpha:]]'));
+//=> ['a']
+
+console.log(brackets.match(['1', 'a', 'ab'], '[[:alpha:]]+'));
+//=> ['a', 'ab']
+```
+
+**Params**
+
+* `arr` **{Array}**: Array of strings to match
+* `pattern` **{String}**: POSIX character class pattern(s)
+* `options` **{Object}**
+* `returns` **{Array}**
+
+### [.isMatch](index.js#L100)
+
+Returns true if the specified `string` matches the given brackets `pattern`.
+
+**Example**
+
+```js
+var brackets = require('expand-brackets');
+
+console.log(brackets.isMatch('a.a', '[[:alpha:]].[[:alpha:]]'));
+//=> true
+console.log(brackets.isMatch('1.2', '[[:alpha:]].[[:alpha:]]'));
+//=> false
+```
+
+**Params**
+
+* `string` **{String}**: String to match
+* `pattern` **{String}**: Poxis pattern
+* `options` **{String}**
+* `returns` **{Boolean}**
+
+### [.matcher](index.js#L123)
+
+Takes a POSIX character class pattern and returns a matcher function. The returned function takes the string to match as its only argument.
+
+**Example**
+
+```js
+var brackets = require('expand-brackets');
+var isMatch = brackets.matcher('[[:lower:]].[[:upper:]]');
+
+console.log(isMatch('a.a'));
+//=> false
+console.log(isMatch('a.A'));
+//=> true
+```
+
+**Params**
+
+* `pattern` **{String}**: Poxis pattern
+* `options` **{String}**
+* `returns` **{Boolean}**
+
+### [.makeRe](index.js#L145)
+
+Create a regular expression from the given `pattern`.
+
+**Example**
+
+```js
+var brackets = require('expand-brackets');
+var re = brackets.makeRe('[[:alpha:]]');
+console.log(re);
+//=> /^(?:[a-zA-Z])$/
+```
+
+**Params**
+
+* `pattern` **{String}**: The pattern to convert to regex.
+* `options` **{Object}**
+* `returns` **{RegExp}**
+
+### [.create](index.js#L187)
+
+Parses the given POSIX character class `pattern` and returns an object with the compiled `output` and optional source `map`.
+
+**Example**
+
+```js
+var brackets = require('expand-brackets');
+console.log(brackets('[[:alpha:]]'));
+// { options: { source: 'string' },
+// input: '[[:alpha:]]',
+// state: {},
+// compilers:
+// { eos: [Function],
+// noop: [Function],
+// bos: [Function],
+// not: [Function],
+// escape: [Function],
+// text: [Function],
+// posix: [Function],
+// bracket: [Function],
+// 'bracket.open': [Function],
+// 'bracket.inner': [Function],
+// 'bracket.literal': [Function],
+// 'bracket.close': [Function] },
+// output: '[a-zA-Z]',
+// ast:
+// { type: 'root',
+// errors: [],
+// nodes: [ [Object], [Object], [Object] ] },
+// parsingErrors: [] }
+```
+
+**Params**
+
+* `pattern` **{String}**
+* `options` **{Object}**
+* `returns` **{Object}**
+
+## Options
+
+### options.sourcemap
+
+Generate a source map for the given pattern.
+
+**Example**
+
+```js
+var res = brackets('[:alpha:]', {sourcemap: true});
+
+console.log(res.map);
+// { version: 3,
+// sources: [ 'brackets' ],
+// names: [],
+// mappings: 'AAAA,MAAS',
+// sourcesContent: [ '[:alpha:]' ] }
+```
+
+### POSIX Character classes
+
+The following named POSIX bracket expressions are supported:
+
+* `[:alnum:]`: Alphanumeric characters (`a-zA-Z0-9]`)
+* `[:alpha:]`: Alphabetic characters (`a-zA-Z]`)
+* `[:blank:]`: Space and tab (`[ t]`)
+* `[:digit:]`: Digits (`[0-9]`)
+* `[:lower:]`: Lowercase letters (`[a-z]`)
+* `[:punct:]`: Punctuation and symbols. (`[!"#$%&'()*+, -./:;<=>?@ [\]^_``{|}~]`)
+* `[:upper:]`: Uppercase letters (`[A-Z]`)
+* `[:word:]`: Word characters (letters, numbers and underscores) (`[A-Za-z0-9_]`)
+* `[:xdigit:]`: Hexadecimal digits (`[A-Fa-f0-9]`)
+
+See [posix-character-classes](https://github.com/jonschlinkert/posix-character-classes) for more details.
+
+**Not supported**
+
+* [equivalence classes](https://www.gnu.org/software/gawk/manual/html_node/Bracket-Expressions.html) are not supported
+* [POSIX.2 collating symbols](https://www.gnu.org/software/gawk/manual/html_node/Bracket-Expressions.html) are not supported
+
+## Changelog
+
+### v2.0.0
+
+**Breaking changes**
+
+* The main export now returns the compiled string, instead of the object returned from the compiler
+
+**Added features**
+
+* Adds a `.create` method to do what the main function did before v2.0.0
+
+### v0.2.0
+
+In addition to performance and matching improvements, the v0.2.0 refactor adds complete POSIX character class support, with the exception of equivalence classes and POSIX.2 collating symbols which are not relevant to node.js usage.
+
+**Added features**
+
+* parser is exposed, so that expand-brackets parsers can be used by upstream parsers (like [micromatch](https://github.com/jonschlinkert/micromatch))
+* compiler is exposed, so that expand-brackets compilers can be used by upstream compilers
+* source maps
+
+**source map example**
+
+```js
+var brackets = require('expand-brackets');
+var res = brackets('[:alpha:]');
+console.log(res.map);
+
+{ version: 3,
+ sources: [ 'brackets' ],
+ names: [],
+ mappings: 'AAAA,MAAS',
+ sourcesContent: [ '[:alpha:]' ] }
+```
+
+## About
+
+### Related projects
+
+* [braces](https://www.npmjs.com/package/braces): Fast, comprehensive, bash-like brace expansion implemented in JavaScript. Complete support for the Bash 4.3 braces… [more](https://github.com/jonschlinkert/braces) | [homepage](https://github.com/jonschlinkert/braces "Fast, comprehensive, bash-like brace expansion implemented in JavaScript. Complete support for the Bash 4.3 braces specification, without sacrificing speed.")
+* [extglob](https://www.npmjs.com/package/extglob): Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob… [more](https://github.com/jonschlinkert/extglob) | [homepage](https://github.com/jonschlinkert/extglob "Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob patterns.")
+* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.")
+* [nanomatch](https://www.npmjs.com/package/nanomatch): Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash… [more](https://github.com/jonschlinkert/nanomatch) | [homepage](https://github.com/jonschlinkert/nanomatch "Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash 4.3 wildcard support only (no support for exglobs, posix brackets or braces)")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 66 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [MartinKolarik](https://github.com/MartinKolarik) |
+| 2 | [es128](https://github.com/es128) |
+| 1 | [eush77](https://github.com/eush77) |
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/expand-brackets/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on December 12, 2016._
\ No newline at end of file
diff --git a/node_modules/expand-brackets/changelog.md b/node_modules/expand-brackets/changelog.md
new file mode 100644
index 0000000..0c0723a
--- /dev/null
+++ b/node_modules/expand-brackets/changelog.md
@@ -0,0 +1,35 @@
+## Changelog
+
+### v2.0.0
+
+**Breaking changes**
+
+- The main export now returns the compiled string, instead of the object returned from the compiler
+
+**Added features**
+
+- Adds a `.create` method to do what the main function did before v2.0.0
+
+### v0.2.0
+
+In addition to performance and matching improvements, the v0.2.0 refactor adds complete POSIX character class support, with the exception of equivalence classes and POSIX.2 collating symbols which are not relevant to node.js usage.
+
+**Added features**
+
+- parser is exposed, so that expand-brackets parsers can be used by upstream parsers (like [micromatch][])
+- compiler is exposed, so that expand-brackets compilers can be used by upstream compilers
+- source maps
+
+**source map example**
+
+```js
+var brackets = require('expand-brackets');
+var res = brackets('[:alpha:]');
+console.log(res.map);
+
+{ version: 3,
+ sources: [ 'brackets' ],
+ names: [],
+ mappings: 'AAAA,MAAS',
+ sourcesContent: [ '[:alpha:]' ] }
+```
diff --git a/node_modules/expand-brackets/index.js b/node_modules/expand-brackets/index.js
new file mode 100644
index 0000000..74b8b15
--- /dev/null
+++ b/node_modules/expand-brackets/index.js
@@ -0,0 +1,211 @@
+'use strict';
+
+/**
+ * Local dependencies
+ */
+
+var compilers = require('./lib/compilers');
+var parsers = require('./lib/parsers');
+
+/**
+ * Module dependencies
+ */
+
+var debug = require('debug')('expand-brackets');
+var extend = require('extend-shallow');
+var Snapdragon = require('snapdragon');
+var toRegex = require('to-regex');
+
+/**
+ * Parses the given POSIX character class `pattern` and returns a
+ * string that can be used for creating regular expressions for matching.
+ *
+ * @param {String} `pattern`
+ * @param {Object} `options`
+ * @return {Object}
+ * @api public
+ */
+
+function brackets(pattern, options) {
+ debug('initializing from <%s>', __filename);
+ var res = brackets.create(pattern, options);
+ return res.output;
+}
+
+/**
+ * Takes an array of strings and a POSIX character class pattern, and returns a new
+ * array with only the strings that matched the pattern.
+ *
+ * ```js
+ * var brackets = require('expand-brackets');
+ * console.log(brackets.match(['1', 'a', 'ab'], '[[:alpha:]]'));
+ * //=> ['a']
+ *
+ * console.log(brackets.match(['1', 'a', 'ab'], '[[:alpha:]]+'));
+ * //=> ['a', 'ab']
+ * ```
+ * @param {Array} `arr` Array of strings to match
+ * @param {String} `pattern` POSIX character class pattern(s)
+ * @param {Object} `options`
+ * @return {Array}
+ * @api public
+ */
+
+brackets.match = function(arr, pattern, options) {
+ arr = [].concat(arr);
+ var opts = extend({}, options);
+ var isMatch = brackets.matcher(pattern, opts);
+ var len = arr.length;
+ var idx = -1;
+ var res = [];
+
+ while (++idx < len) {
+ var ele = arr[idx];
+ if (isMatch(ele)) {
+ res.push(ele);
+ }
+ }
+
+ if (res.length === 0) {
+ if (opts.failglob === true) {
+ throw new Error('no matches found for "' + pattern + '"');
+ }
+
+ if (opts.nonull === true || opts.nullglob === true) {
+ return [pattern.split('\\').join('')];
+ }
+ }
+ return res;
+};
+
+/**
+ * Returns true if the specified `string` matches the given
+ * brackets `pattern`.
+ *
+ * ```js
+ * var brackets = require('expand-brackets');
+ *
+ * console.log(brackets.isMatch('a.a', '[[:alpha:]].[[:alpha:]]'));
+ * //=> true
+ * console.log(brackets.isMatch('1.2', '[[:alpha:]].[[:alpha:]]'));
+ * //=> false
+ * ```
+ * @param {String} `string` String to match
+ * @param {String} `pattern` Poxis pattern
+ * @param {String} `options`
+ * @return {Boolean}
+ * @api public
+ */
+
+brackets.isMatch = function(str, pattern, options) {
+ return brackets.matcher(pattern, options)(str);
+};
+
+/**
+ * Takes a POSIX character class pattern and returns a matcher function. The returned
+ * function takes the string to match as its only argument.
+ *
+ * ```js
+ * var brackets = require('expand-brackets');
+ * var isMatch = brackets.matcher('[[:lower:]].[[:upper:]]');
+ *
+ * console.log(isMatch('a.a'));
+ * //=> false
+ * console.log(isMatch('a.A'));
+ * //=> true
+ * ```
+ * @param {String} `pattern` Poxis pattern
+ * @param {String} `options`
+ * @return {Boolean}
+ * @api public
+ */
+
+brackets.matcher = function(pattern, options) {
+ var re = brackets.makeRe(pattern, options);
+ return function(str) {
+ return re.test(str);
+ };
+};
+
+/**
+ * Create a regular expression from the given `pattern`.
+ *
+ * ```js
+ * var brackets = require('expand-brackets');
+ * var re = brackets.makeRe('[[:alpha:]]');
+ * console.log(re);
+ * //=> /^(?:[a-zA-Z])$/
+ * ```
+ * @param {String} `pattern` The pattern to convert to regex.
+ * @param {Object} `options`
+ * @return {RegExp}
+ * @api public
+ */
+
+brackets.makeRe = function(pattern, options) {
+ var res = brackets.create(pattern, options);
+ var opts = extend({strictErrors: false}, options);
+ return toRegex(res.output, opts);
+};
+
+/**
+ * Parses the given POSIX character class `pattern` and returns an object
+ * with the compiled `output` and optional source `map`.
+ *
+ * ```js
+ * var brackets = require('expand-brackets');
+ * console.log(brackets('[[:alpha:]]'));
+ * // { options: { source: 'string' },
+ * // input: '[[:alpha:]]',
+ * // state: {},
+ * // compilers:
+ * // { eos: [Function],
+ * // noop: [Function],
+ * // bos: [Function],
+ * // not: [Function],
+ * // escape: [Function],
+ * // text: [Function],
+ * // posix: [Function],
+ * // bracket: [Function],
+ * // 'bracket.open': [Function],
+ * // 'bracket.inner': [Function],
+ * // 'bracket.literal': [Function],
+ * // 'bracket.close': [Function] },
+ * // output: '[a-zA-Z]',
+ * // ast:
+ * // { type: 'root',
+ * // errors: [],
+ * // nodes: [ [Object], [Object], [Object] ] },
+ * // parsingErrors: [] }
+ * ```
+ * @param {String} `pattern`
+ * @param {Object} `options`
+ * @return {Object}
+ * @api public
+ */
+
+brackets.create = function(pattern, options) {
+ var snapdragon = (options && options.snapdragon) || new Snapdragon(options);
+ compilers(snapdragon);
+ parsers(snapdragon);
+
+ var ast = snapdragon.parse(pattern, options);
+ ast.input = pattern;
+ var res = snapdragon.compile(ast, options);
+ res.input = pattern;
+ return res;
+};
+
+/**
+ * Expose `brackets` constructor, parsers and compilers
+ */
+
+brackets.compilers = compilers;
+brackets.parsers = parsers;
+
+/**
+ * Expose `brackets`
+ * @type {Function}
+ */
+
+module.exports = brackets;
diff --git a/node_modules/expand-brackets/lib/compilers.js b/node_modules/expand-brackets/lib/compilers.js
new file mode 100644
index 0000000..fbf7fe8
--- /dev/null
+++ b/node_modules/expand-brackets/lib/compilers.js
@@ -0,0 +1,87 @@
+'use strict';
+
+var posix = require('posix-character-classes');
+
+module.exports = function(brackets) {
+ brackets.compiler
+
+ /**
+ * Escaped characters
+ */
+
+ .set('escape', function(node) {
+ return this.emit('\\' + node.val.replace(/^\\/, ''), node);
+ })
+
+ /**
+ * Text
+ */
+
+ .set('text', function(node) {
+ return this.emit(node.val.replace(/([{}])/g, '\\$1'), node);
+ })
+
+ /**
+ * POSIX character classes
+ */
+
+ .set('posix', function(node) {
+ if (node.val === '[::]') {
+ return this.emit('\\[::\\]', node);
+ }
+
+ var val = posix[node.inner];
+ if (typeof val === 'undefined') {
+ val = '[' + node.inner + ']';
+ }
+ return this.emit(val, node);
+ })
+
+ /**
+ * Non-posix brackets
+ */
+
+ .set('bracket', function(node) {
+ return this.mapVisit(node.nodes);
+ })
+ .set('bracket.open', function(node) {
+ return this.emit(node.val, node);
+ })
+ .set('bracket.inner', function(node) {
+ var inner = node.val;
+
+ if (inner === '[' || inner === ']') {
+ return this.emit('\\' + node.val, node);
+ }
+ if (inner === '^]') {
+ return this.emit('^\\]', node);
+ }
+ if (inner === '^') {
+ return this.emit('^', node);
+ }
+
+ if (/-/.test(inner) && !/(\d-\d|\w-\w)/.test(inner)) {
+ inner = inner.split('-').join('\\-');
+ }
+
+ var isNegated = inner.charAt(0) === '^';
+ // add slashes to negated brackets, per spec
+ if (isNegated && inner.indexOf('/') === -1) {
+ inner += '/';
+ }
+ if (isNegated && inner.indexOf('.') === -1) {
+ inner += '.';
+ }
+
+ // don't unescape `0` (octal literal)
+ inner = inner.replace(/\\([1-9])/g, '$1');
+ return this.emit(inner, node);
+ })
+ .set('bracket.close', function(node) {
+ var val = node.val.replace(/^\\/, '');
+ if (node.parent.escaped === true) {
+ return this.emit('\\' + val, node);
+ }
+ return this.emit(val, node);
+ });
+};
diff --git a/node_modules/expand-brackets/lib/parsers.js b/node_modules/expand-brackets/lib/parsers.js
new file mode 100644
index 0000000..450a512
--- /dev/null
+++ b/node_modules/expand-brackets/lib/parsers.js
@@ -0,0 +1,219 @@
+'use strict';
+
+var utils = require('./utils');
+var define = require('define-property');
+
+/**
+ * Text regex
+ */
+
+var TEXT_REGEX = '(\\[(?=.*\\])|\\])+';
+var not = utils.createRegex(TEXT_REGEX);
+
+/**
+ * Brackets parsers
+ */
+
+function parsers(brackets) {
+ brackets.state = brackets.state || {};
+ brackets.parser.sets.bracket = brackets.parser.sets.bracket || [];
+ brackets.parser
+
+ .capture('escape', function() {
+ if (this.isInside('bracket')) return;
+ var pos = this.position();
+ var m = this.match(/^\\(.)/);
+ if (!m) return;
+
+ return pos({
+ type: 'escape',
+ val: m[0]
+ });
+ })
+
+ /**
+ * Text parser
+ */
+
+ .capture('text', function() {
+ if (this.isInside('bracket')) return;
+ var pos = this.position();
+ var m = this.match(not);
+ if (!m || !m[0]) return;
+
+ return pos({
+ type: 'text',
+ val: m[0]
+ });
+ })
+
+ /**
+ * POSIX character classes: "[[:alpha:][:digits:]]"
+ */
+
+ .capture('posix', function() {
+ var pos = this.position();
+ var m = this.match(/^\[:(.*?):\](?=.*\])/);
+ if (!m) return;
+
+ var inside = this.isInside('bracket');
+ if (inside) {
+ brackets.posix++;
+ }
+
+ return pos({
+ type: 'posix',
+ insideBracket: inside,
+ inner: m[1],
+ val: m[0]
+ });
+ })
+
+ /**
+ * Bracket (noop)
+ */
+
+ .capture('bracket', function() {})
+
+ /**
+ * Open: '['
+ */
+
+ .capture('bracket.open', function() {
+ var parsed = this.parsed;
+ var pos = this.position();
+ var m = this.match(/^\[(?=.*\])/);
+ if (!m) return;
+
+ var prev = this.prev();
+ var last = utils.last(prev.nodes);
+
+ if (parsed.slice(-1) === '\\' && !this.isInside('bracket')) {
+ last.val = last.val.slice(0, last.val.length - 1);
+ return pos({
+ type: 'escape',
+ val: m[0]
+ });
+ }
+
+ var open = pos({
+ type: 'bracket.open',
+ val: m[0]
+ });
+
+ if (last.type === 'bracket.open' || this.isInside('bracket')) {
+ open.val = '\\' + open.val;
+ open.type = 'bracket.inner';
+ open.escaped = true;
+ return open;
+ }
+
+ var node = pos({
+ type: 'bracket',
+ nodes: [open]
+ });
+
+ define(node, 'parent', prev);
+ define(open, 'parent', node);
+ this.push('bracket', node);
+ prev.nodes.push(node);
+ })
+
+ /**
+ * Bracket text
+ */
+
+ .capture('bracket.inner', function() {
+ if (!this.isInside('bracket')) return;
+ var pos = this.position();
+ var m = this.match(not);
+ if (!m || !m[0]) return;
+
+ var next = this.input.charAt(0);
+ var val = m[0];
+
+ var node = pos({
+ type: 'bracket.inner',
+ val: val
+ });
+
+ if (val === '\\\\') {
+ return node;
+ }
+
+ var first = val.charAt(0);
+ var last = val.slice(-1);
+
+ if (first === '!') {
+ val = '^' + val.slice(1);
+ }
+
+ if (last === '\\' || (val === '^' && next === ']')) {
+ val += this.input[0];
+ this.consume(1);
+ }
+
+ node.val = val;
+ return node;
+ })
+
+ /**
+ * Close: ']'
+ */
+
+ .capture('bracket.close', function() {
+ var parsed = this.parsed;
+ var pos = this.position();
+ var m = this.match(/^\]/);
+ if (!m) return;
+
+ var prev = this.prev();
+ var last = utils.last(prev.nodes);
+
+ if (parsed.slice(-1) === '\\' && !this.isInside('bracket')) {
+ last.val = last.val.slice(0, last.val.length - 1);
+
+ return pos({
+ type: 'escape',
+ val: m[0]
+ });
+ }
+
+ var node = pos({
+ type: 'bracket.close',
+ rest: this.input,
+ val: m[0]
+ });
+
+ if (last.type === 'bracket.open') {
+ node.type = 'bracket.inner';
+ node.escaped = true;
+ return node;
+ }
+
+ var bracket = this.pop('bracket');
+ if (!this.isType(bracket, 'bracket')) {
+ if (this.options.strict) {
+ throw new Error('missing opening "["');
+ }
+ node.type = 'bracket.inner';
+ node.escaped = true;
+ return node;
+ }
+
+ bracket.nodes.push(node);
+ define(node, 'parent', bracket);
+ });
+}
+
+/**
+ * Brackets parsers
+ */
+
+module.exports = parsers;
+
+/**
+ * Expose text regex
+ */
+
+module.exports.TEXT_REGEX = TEXT_REGEX;
diff --git a/node_modules/expand-brackets/lib/utils.js b/node_modules/expand-brackets/lib/utils.js
new file mode 100644
index 0000000..599ff51
--- /dev/null
+++ b/node_modules/expand-brackets/lib/utils.js
@@ -0,0 +1,34 @@
+'use strict';
+
+var toRegex = require('to-regex');
+var regexNot = require('regex-not');
+var cached;
+
+/**
+ * Get the last element from `array`
+ * @param {Array} `array`
+ * @return {*}
+ */
+
+exports.last = function(arr) {
+ return arr[arr.length - 1];
+};
+
+/**
+ * Create and cache regex to use for text nodes
+ */
+
+exports.createRegex = function(pattern, include) {
+ if (cached) return cached;
+ var opts = {contains: true, strictClose: false};
+ var not = regexNot.create(pattern, opts);
+ var re;
+
+ if (typeof include === 'string') {
+ re = toRegex('^(?:' + include + '|' + not + ')', opts);
+ } else {
+ re = toRegex(not, opts);
+ }
+
+ return (cached = re);
+};
diff --git a/node_modules/expand-brackets/node_modules/define-property/LICENSE b/node_modules/expand-brackets/node_modules/define-property/LICENSE
new file mode 100644
index 0000000..65f90ac
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/define-property/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+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/node_modules/expand-brackets/node_modules/define-property/README.md b/node_modules/expand-brackets/node_modules/define-property/README.md
new file mode 100644
index 0000000..8cac698
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/define-property/README.md
@@ -0,0 +1,77 @@
+# define-property [![NPM version](https://badge.fury.io/js/define-property.svg)](http://badge.fury.io/js/define-property)
+
+> Define a non-enumerable property on an object.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i define-property --save
+```
+
+## Usage
+
+**Params**
+
+* `obj`: The object on which to define the property.
+* `prop`: The name of the property to be defined or modified.
+* `descriptor`: The descriptor for the property being defined or modified.
+
+```js
+var define = require('define-property');
+var obj = {};
+define(obj, 'foo', function(val) {
+ return val.toUpperCase();
+});
+
+console.log(obj);
+//=> {}
+
+console.log(obj.foo('bar'));
+//=> 'BAR'
+```
+
+**get/set**
+
+```js
+define(obj, 'foo', {
+ get: function() {},
+ set: function() {}
+});
+```
+
+## Related projects
+
+* [delegate-object](https://www.npmjs.com/package/delegate-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/delegate-object) | [homepage](https://github.com/doowb/delegate-object)
+* [forward-object](https://www.npmjs.com/package/forward-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/forward-object) | [homepage](https://github.com/doowb/forward-object)
+* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep)
+* [mixin-object](https://www.npmjs.com/package/mixin-object): Mixin the own and inherited properties of other objects onto the first object. Pass an… [more](https://www.npmjs.com/package/mixin-object) | [homepage](https://github.com/jonschlinkert/mixin-object)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/define-property/issues/new).
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 31, 2015._
diff --git a/node_modules/expand-brackets/node_modules/define-property/index.js b/node_modules/expand-brackets/node_modules/define-property/index.js
new file mode 100644
index 0000000..3e0e5e1
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/define-property/index.js
@@ -0,0 +1,31 @@
+/*!
+ * define-property
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var isDescriptor = require('is-descriptor');
+
+module.exports = function defineProperty(obj, prop, val) {
+ if (typeof obj !== 'object' && typeof obj !== 'function') {
+ throw new TypeError('expected an object or function.');
+ }
+
+ if (typeof prop !== 'string') {
+ throw new TypeError('expected `prop` to be a string.');
+ }
+
+ if (isDescriptor(val) && ('set' in val || 'get' in val)) {
+ return Object.defineProperty(obj, prop, val);
+ }
+
+ return Object.defineProperty(obj, prop, {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: val
+ });
+};
diff --git a/node_modules/expand-brackets/node_modules/define-property/package.json b/node_modules/expand-brackets/node_modules/define-property/package.json
new file mode 100644
index 0000000..43561bf
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/define-property/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "define-property",
+ "description": "Define a non-enumerable property on an object.",
+ "version": "0.2.5",
+ "homepage": "https://github.com/jonschlinkert/define-property",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/define-property",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/define-property/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "mocha": "*",
+ "should": "^7.0.4"
+ },
+ "keywords": [
+ "define",
+ "define-property",
+ "enumerable",
+ "key",
+ "non",
+ "non-enumerable",
+ "object",
+ "prop",
+ "property",
+ "value"
+ ],
+ "verb": {
+ "related": {
+ "list": [
+ "mixin-deep",
+ "mixin-object",
+ "delegate-object",
+ "forward-object"
+ ]
+ }
+ },
+ "dependencies": {
+ "is-descriptor": "^0.1.0"
+ }
+}
diff --git a/node_modules/expand-brackets/node_modules/is-accessor-descriptor/LICENSE b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/LICENSE
new file mode 100644
index 0000000..65f90ac
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+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/node_modules/expand-brackets/node_modules/is-accessor-descriptor/README.md b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/README.md
new file mode 100644
index 0000000..3743fe6
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/README.md
@@ -0,0 +1,123 @@
+# is-accessor-descriptor [![NPM version](https://img.shields.io/npm/v/is-accessor-descriptor.svg)](https://www.npmjs.com/package/is-accessor-descriptor) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-accessor-descriptor.svg)](https://travis-ci.org/jonschlinkert/is-accessor-descriptor)
+
+> Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.
+
+- [Install](#install)
+- [Usage](#usage)
+- [Examples](#examples)
+- [API](#api)
+- [Related projects](#related-projects)
+- [Running tests](#running-tests)
+- [Contributing](#contributing)
+- [Author](#author)
+- [License](#license)
+
+_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm i is-accessor-descriptor --save
+```
+
+## Usage
+
+```js
+var isAccessor = require('is-accessor-descriptor');
+
+isAccessor({get: function() {}});
+//=> true
+```
+
+You may also pass an object and property name to check if the property is an accessor:
+
+```js
+isAccessor(foo, 'bar');
+```
+
+## Examples
+
+`false` when not an object
+
+```js
+isAccessor('a')
+isAccessor(null)
+isAccessor([])
+//=> false
+```
+
+`true` when the object has valid properties
+
+and the properties all have the correct JavaScript types:
+
+```js
+isAccessor({get: noop, set: noop})
+isAccessor({get: noop})
+isAccessor({set: noop})
+//=> true
+```
+
+`false` when the object has invalid properties
+
+```js
+isAccessor({get: noop, set: noop, bar: 'baz'})
+isAccessor({get: noop, writable: true})
+isAccessor({get: noop, value: true})
+//=> false
+```
+
+`false` when an accessor is not a function
+
+```js
+isAccessor({get: noop, set: 'baz'})
+isAccessor({get: 'foo', set: noop})
+isAccessor({get: 'foo', bar: 'baz'})
+isAccessor({get: 'foo', set: 'baz'})
+//=> false
+```
+
+`false` when a value is not the correct type
+
+```js
+isAccessor({get: noop, set: noop, enumerable: 'foo'})
+isAccessor({set: noop, configurable: 'foo'})
+isAccessor({get: noop, configurable: 'foo'})
+//=> false
+```
+
+## Related projects
+
+* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor)
+* [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. | [homepage](https://github.com/jonschlinkert/is-data-descriptor)
+* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://www.npmjs.com/package/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor)
+* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-accessor-descriptor/issues/new).
+
+## Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 [Jon Schlinkert](https://github.com/jonschlinkert)
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb](https://github.com/verbose/verb) on December 28, 2015._
\ No newline at end of file
diff --git a/node_modules/expand-brackets/node_modules/is-accessor-descriptor/index.js b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/index.js
new file mode 100644
index 0000000..2ca4af8
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/index.js
@@ -0,0 +1,69 @@
+/*!
+ * is-accessor-descriptor
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var typeOf = require('kind-of');
+
+// accessor descriptor properties
+var accessor = {
+ get: 'function',
+ set: 'function',
+ configurable: 'boolean',
+ enumerable: 'boolean'
+};
+
+function isAccessorDescriptor(obj, prop) {
+ if (typeof prop === 'string') {
+ var val = Object.getOwnPropertyDescriptor(obj, prop);
+ return typeof val !== 'undefined';
+ }
+
+ if (typeOf(obj) !== 'object') {
+ return false;
+ }
+
+ if (has(obj, 'value') || has(obj, 'writable')) {
+ return false;
+ }
+
+ if (!has(obj, 'get') || typeof obj.get !== 'function') {
+ return false;
+ }
+
+ // tldr: it's valid to have "set" be undefined
+ // "set" might be undefined if `Object.getOwnPropertyDescriptor`
+ // was used to get the value, and only `get` was defined by the user
+ if (has(obj, 'set') && typeof obj[key] !== 'function' && typeof obj[key] !== 'undefined') {
+ return false;
+ }
+
+ for (var key in obj) {
+ if (!accessor.hasOwnProperty(key)) {
+ continue;
+ }
+
+ if (typeOf(obj[key]) === accessor[key]) {
+ continue;
+ }
+
+ if (typeof obj[key] !== 'undefined') {
+ return false;
+ }
+ }
+ return true;
+}
+
+function has(obj, key) {
+ return {}.hasOwnProperty.call(obj, key);
+}
+
+/**
+ * Expose `isAccessorDescriptor`
+ */
+
+module.exports = isAccessorDescriptor;
diff --git a/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of/LICENSE b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of/LICENSE
new file mode 100644
index 0000000..d734237
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+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/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of/README.md b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of/README.md
new file mode 100644
index 0000000..6a9df36
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of/README.md
@@ -0,0 +1,261 @@
+# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of)
+
+> Get the native type of a value.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save kind-of
+```
+
+## Install
+
+Install with [bower](https://bower.io/)
+
+```sh
+$ bower install kind-of --save
+```
+
+## Usage
+
+> es5, browser and es6 ready
+
+```js
+var kindOf = require('kind-of');
+
+kindOf(undefined);
+//=> 'undefined'
+
+kindOf(null);
+//=> 'null'
+
+kindOf(true);
+//=> 'boolean'
+
+kindOf(false);
+//=> 'boolean'
+
+kindOf(new Boolean(true));
+//=> 'boolean'
+
+kindOf(new Buffer(''));
+//=> 'buffer'
+
+kindOf(42);
+//=> 'number'
+
+kindOf(new Number(42));
+//=> 'number'
+
+kindOf('str');
+//=> 'string'
+
+kindOf(new String('str'));
+//=> 'string'
+
+kindOf(arguments);
+//=> 'arguments'
+
+kindOf({});
+//=> 'object'
+
+kindOf(Object.create(null));
+//=> 'object'
+
+kindOf(new Test());
+//=> 'object'
+
+kindOf(new Date());
+//=> 'date'
+
+kindOf([]);
+//=> 'array'
+
+kindOf([1, 2, 3]);
+//=> 'array'
+
+kindOf(new Array());
+//=> 'array'
+
+kindOf(/foo/);
+//=> 'regexp'
+
+kindOf(new RegExp('foo'));
+//=> 'regexp'
+
+kindOf(function () {});
+//=> 'function'
+
+kindOf(function * () {});
+//=> 'function'
+
+kindOf(new Function());
+//=> 'function'
+
+kindOf(new Map());
+//=> 'map'
+
+kindOf(new WeakMap());
+//=> 'weakmap'
+
+kindOf(new Set());
+//=> 'set'
+
+kindOf(new WeakSet());
+//=> 'weakset'
+
+kindOf(Symbol('str'));
+//=> 'symbol'
+
+kindOf(new Int8Array());
+//=> 'int8array'
+
+kindOf(new Uint8Array());
+//=> 'uint8array'
+
+kindOf(new Uint8ClampedArray());
+//=> 'uint8clampedarray'
+
+kindOf(new Int16Array());
+//=> 'int16array'
+
+kindOf(new Uint16Array());
+//=> 'uint16array'
+
+kindOf(new Int32Array());
+//=> 'int32array'
+
+kindOf(new Uint32Array());
+//=> 'uint32array'
+
+kindOf(new Float32Array());
+//=> 'float32array'
+
+kindOf(new Float64Array());
+//=> 'float64array'
+```
+
+## Benchmarks
+
+Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of).
+Note that performaces is slower for es6 features `Map`, `WeakMap`, `Set` and `WeakSet`.
+
+```bash
+#1: array
+ current x 23,329,397 ops/sec ±0.82% (94 runs sampled)
+ lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled)
+ lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled)
+
+#2: boolean
+ current x 27,197,115 ops/sec ±0.85% (94 runs sampled)
+ lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled)
+ lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled)
+
+#3: date
+ current x 20,190,117 ops/sec ±0.86% (92 runs sampled)
+ lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled)
+ lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled)
+
+#4: function
+ current x 23,855,460 ops/sec ±0.60% (97 runs sampled)
+ lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled)
+ lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled)
+
+#5: null
+ current x 27,061,047 ops/sec ±0.97% (96 runs sampled)
+ lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled)
+ lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled)
+
+#6: number
+ current x 25,075,682 ops/sec ±0.53% (99 runs sampled)
+ lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled)
+ lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled)
+
+#7: object
+ current x 3,348,980 ops/sec ±0.49% (99 runs sampled)
+ lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled)
+ lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled)
+
+#8: regex
+ current x 21,284,827 ops/sec ±0.72% (96 runs sampled)
+ lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled)
+ lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled)
+
+#9: string
+ current x 25,379,234 ops/sec ±0.58% (96 runs sampled)
+ lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled)
+ lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled)
+
+#10: undef
+ current x 27,459,221 ops/sec ±1.01% (93 runs sampled)
+ lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled)
+ lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled)
+
+```
+
+## Optimizations
+
+In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library:
+
+1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot.
+2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it.
+3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'`
+
+## About
+
+### Related projects
+
+* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet")
+* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.")
+* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 59 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [miguelmota](https://github.com/miguelmota) |
+| 1 | [dtothefp](https://github.com/dtothefp) |
+| 1 | [ksheedlo](https://github.com/ksheedlo) |
+| 1 | [pdehaan](https://github.com/pdehaan) |
+| 1 | [laggingreflex](https://github.com/laggingreflex) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 16, 2017._
\ No newline at end of file
diff --git a/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of/index.js b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of/index.js
new file mode 100644
index 0000000..b52c291
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of/index.js
@@ -0,0 +1,116 @@
+var isBuffer = require('is-buffer');
+var toString = Object.prototype.toString;
+
+/**
+ * Get the native `typeof` a value.
+ *
+ * @param {*} `val`
+ * @return {*} Native javascript type
+ */
+
+module.exports = function kindOf(val) {
+ // primitivies
+ if (typeof val === 'undefined') {
+ return 'undefined';
+ }
+ if (val === null) {
+ return 'null';
+ }
+ if (val === true || val === false || val instanceof Boolean) {
+ return 'boolean';
+ }
+ if (typeof val === 'string' || val instanceof String) {
+ return 'string';
+ }
+ if (typeof val === 'number' || val instanceof Number) {
+ return 'number';
+ }
+
+ // functions
+ if (typeof val === 'function' || val instanceof Function) {
+ return 'function';
+ }
+
+ // array
+ if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {
+ return 'array';
+ }
+
+ // check for instances of RegExp and Date before calling `toString`
+ if (val instanceof RegExp) {
+ return 'regexp';
+ }
+ if (val instanceof Date) {
+ return 'date';
+ }
+
+ // other objects
+ var type = toString.call(val);
+
+ if (type === '[object RegExp]') {
+ return 'regexp';
+ }
+ if (type === '[object Date]') {
+ return 'date';
+ }
+ if (type === '[object Arguments]') {
+ return 'arguments';
+ }
+ if (type === '[object Error]') {
+ return 'error';
+ }
+
+ // buffer
+ if (isBuffer(val)) {
+ return 'buffer';
+ }
+
+ // es6: Map, WeakMap, Set, WeakSet
+ if (type === '[object Set]') {
+ return 'set';
+ }
+ if (type === '[object WeakSet]') {
+ return 'weakset';
+ }
+ if (type === '[object Map]') {
+ return 'map';
+ }
+ if (type === '[object WeakMap]') {
+ return 'weakmap';
+ }
+ if (type === '[object Symbol]') {
+ return 'symbol';
+ }
+
+ // typed arrays
+ if (type === '[object Int8Array]') {
+ return 'int8array';
+ }
+ if (type === '[object Uint8Array]') {
+ return 'uint8array';
+ }
+ if (type === '[object Uint8ClampedArray]') {
+ return 'uint8clampedarray';
+ }
+ if (type === '[object Int16Array]') {
+ return 'int16array';
+ }
+ if (type === '[object Uint16Array]') {
+ return 'uint16array';
+ }
+ if (type === '[object Int32Array]') {
+ return 'int32array';
+ }
+ if (type === '[object Uint32Array]') {
+ return 'uint32array';
+ }
+ if (type === '[object Float32Array]') {
+ return 'float32array';
+ }
+ if (type === '[object Float64Array]') {
+ return 'float64array';
+ }
+
+ // must be a plain object
+ return 'object';
+};
diff --git a/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of/package.json b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of/package.json
new file mode 100644
index 0000000..5de879e
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of/package.json
@@ -0,0 +1,90 @@
+{
+ "name": "kind-of",
+ "description": "Get the native type of a value.",
+ "version": "3.2.2",
+ "homepage": "https://github.com/jonschlinkert/kind-of",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "David Fox-Powell (https://dtothefp.github.io/me)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Ken Sheedlo (kensheedlo.com)",
+ "laggingreflex (https://github.com/laggingreflex)",
+ "Miguel Mota (https://miguelmota.com)",
+ "Peter deHaan (http://about.me/peterdehaan)"
+ ],
+ "repository": "jonschlinkert/kind-of",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/kind-of/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha",
+ "prepublish": "browserify -o browser.js -e index.js -s index --bare"
+ },
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "benchmarked": "^1.0.0",
+ "browserify": "^14.3.0",
+ "glob": "^7.1.1",
+ "gulp-format-md": "^0.1.12",
+ "mocha": "^3.3.0",
+ "type-of": "^2.0.1",
+ "typeof": "^1.0.0"
+ },
+ "keywords": [
+ "arguments",
+ "array",
+ "boolean",
+ "check",
+ "date",
+ "function",
+ "is",
+ "is-type",
+ "is-type-of",
+ "kind",
+ "kind-of",
+ "number",
+ "object",
+ "of",
+ "regexp",
+ "string",
+ "test",
+ "type",
+ "type-of",
+ "typeof",
+ "types"
+ ],
+ "verb": {
+ "related": {
+ "list": [
+ "is-glob",
+ "is-number",
+ "is-primitive"
+ ]
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ },
+ "reflinks": [
+ "verb"
+ ]
+ }
+}
diff --git a/node_modules/expand-brackets/node_modules/is-accessor-descriptor/package.json b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/package.json
new file mode 100644
index 0000000..0f39c64
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-accessor-descriptor/package.json
@@ -0,0 +1,61 @@
+{
+ "name": "is-accessor-descriptor",
+ "description": "Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.",
+ "version": "0.1.6",
+ "homepage": "https://github.com/jonschlinkert/is-accessor-descriptor",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/is-accessor-descriptor",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-accessor-descriptor/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "devDependencies": {
+ "mocha": "*",
+ "should": "*"
+ },
+ "keywords": [
+ "accessor",
+ "check",
+ "data",
+ "descriptor",
+ "get",
+ "getter",
+ "is",
+ "keys",
+ "object",
+ "properties",
+ "property",
+ "set",
+ "setter",
+ "type",
+ "valid",
+ "value"
+ ],
+ "verb": {
+ "related": {
+ "list": [
+ "is-accessor-descriptor",
+ "is-data-descriptor",
+ "is-descriptor",
+ "isobject"
+ ]
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "layout": "default"
+ }
+}
diff --git a/node_modules/expand-brackets/node_modules/is-data-descriptor/LICENSE b/node_modules/expand-brackets/node_modules/is-data-descriptor/LICENSE
new file mode 100644
index 0000000..65f90ac
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-data-descriptor/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+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/node_modules/expand-brackets/node_modules/is-data-descriptor/README.md b/node_modules/expand-brackets/node_modules/is-data-descriptor/README.md
new file mode 100644
index 0000000..41e1643
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-data-descriptor/README.md
@@ -0,0 +1,128 @@
+# is-data-descriptor [![NPM version](https://img.shields.io/npm/v/is-data-descriptor.svg)](https://www.npmjs.com/package/is-data-descriptor) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-data-descriptor.svg)](https://travis-ci.org/jonschlinkert/is-data-descriptor)
+
+> Returns true if a value has the characteristics of a valid JavaScript data descriptor.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm i is-data-descriptor --save
+```
+
+## Usage
+
+```js
+var isDataDesc = require('is-data-descriptor');
+```
+
+## Examples
+
+`true` when the descriptor has valid properties with valid values.
+
+```js
+// `value` can be anything
+isDataDesc({value: 'foo'})
+isDataDesc({value: function() {}})
+isDataDesc({value: true})
+//=> true
+```
+
+`false` when not an object
+
+```js
+isDataDesc('a')
+//=> false
+isDataDesc(null)
+//=> false
+isDataDesc([])
+//=> false
+```
+
+`false` when the object has invalid properties
+
+```js
+isDataDesc({value: 'foo', bar: 'baz'})
+//=> false
+isDataDesc({value: 'foo', bar: 'baz'})
+//=> false
+isDataDesc({value: 'foo', get: function(){}})
+//=> false
+isDataDesc({get: function(){}, value: 'foo'})
+//=> false
+```
+
+`false` when a value is not the correct type
+
+```js
+isDataDesc({value: 'foo', enumerable: 'foo'})
+//=> false
+isDataDesc({value: 'foo', configurable: 'foo'})
+//=> false
+isDataDesc({value: 'foo', writable: 'foo'})
+//=> false
+```
+
+## Valid properties
+
+The only valid data descriptor properties are the following:
+
+* `configurable` (required)
+* `enumerable` (required)
+* `value` (optional)
+* `writable` (optional)
+
+To be a valid data descriptor, either `value` or `writable` must be defined.
+
+**Invalid properties**
+
+A descriptor may have additional _invalid_ properties (an error will **not** be thrown).
+
+```js
+var foo = {};
+
+Object.defineProperty(foo, 'bar', {
+ enumerable: true,
+ whatever: 'blah', // invalid, but doesn't cause an error
+ get: function() {
+ return 'baz';
+ }
+});
+
+console.log(foo.bar);
+//=> 'baz'
+```
+
+## Related projects
+
+* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor)
+* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://www.npmjs.com/package/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor)
+* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-data-descriptor/issues/new).
+
+## Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 [Jon Schlinkert](https://github.com/jonschlinkert)
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb](https://github.com/verbose/verb) on December 28, 2015._
\ No newline at end of file
diff --git a/node_modules/expand-brackets/node_modules/is-data-descriptor/index.js b/node_modules/expand-brackets/node_modules/is-data-descriptor/index.js
new file mode 100644
index 0000000..d4d09c9
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-data-descriptor/index.js
@@ -0,0 +1,55 @@
+/*!
+ * is-data-descriptor
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var typeOf = require('kind-of');
+
+// data descriptor properties
+var data = {
+ configurable: 'boolean',
+ enumerable: 'boolean',
+ writable: 'boolean'
+};
+
+function isDataDescriptor(obj, prop) {
+ if (typeOf(obj) !== 'object') {
+ return false;
+ }
+
+ if (typeof prop === 'string') {
+ var val = Object.getOwnPropertyDescriptor(obj, prop);
+ return typeof val !== 'undefined';
+ }
+
+ if (!('value' in obj) && !('writable' in obj)) {
+ return false;
+ }
+
+ for (var key in obj) {
+ if (key === 'value') continue;
+
+ if (!data.hasOwnProperty(key)) {
+ continue;
+ }
+
+ if (typeOf(obj[key]) === data[key]) {
+ continue;
+ }
+
+ if (typeof obj[key] !== 'undefined') {
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Expose `isDataDescriptor`
+ */
+
+module.exports = isDataDescriptor;
diff --git a/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of/LICENSE b/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of/LICENSE
new file mode 100644
index 0000000..d734237
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+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/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of/README.md b/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of/README.md
new file mode 100644
index 0000000..6a9df36
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of/README.md
@@ -0,0 +1,261 @@
+# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of)
+
+> Get the native type of a value.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save kind-of
+```
+
+## Install
+
+Install with [bower](https://bower.io/)
+
+```sh
+$ bower install kind-of --save
+```
+
+## Usage
+
+> es5, browser and es6 ready
+
+```js
+var kindOf = require('kind-of');
+
+kindOf(undefined);
+//=> 'undefined'
+
+kindOf(null);
+//=> 'null'
+
+kindOf(true);
+//=> 'boolean'
+
+kindOf(false);
+//=> 'boolean'
+
+kindOf(new Boolean(true));
+//=> 'boolean'
+
+kindOf(new Buffer(''));
+//=> 'buffer'
+
+kindOf(42);
+//=> 'number'
+
+kindOf(new Number(42));
+//=> 'number'
+
+kindOf('str');
+//=> 'string'
+
+kindOf(new String('str'));
+//=> 'string'
+
+kindOf(arguments);
+//=> 'arguments'
+
+kindOf({});
+//=> 'object'
+
+kindOf(Object.create(null));
+//=> 'object'
+
+kindOf(new Test());
+//=> 'object'
+
+kindOf(new Date());
+//=> 'date'
+
+kindOf([]);
+//=> 'array'
+
+kindOf([1, 2, 3]);
+//=> 'array'
+
+kindOf(new Array());
+//=> 'array'
+
+kindOf(/foo/);
+//=> 'regexp'
+
+kindOf(new RegExp('foo'));
+//=> 'regexp'
+
+kindOf(function () {});
+//=> 'function'
+
+kindOf(function * () {});
+//=> 'function'
+
+kindOf(new Function());
+//=> 'function'
+
+kindOf(new Map());
+//=> 'map'
+
+kindOf(new WeakMap());
+//=> 'weakmap'
+
+kindOf(new Set());
+//=> 'set'
+
+kindOf(new WeakSet());
+//=> 'weakset'
+
+kindOf(Symbol('str'));
+//=> 'symbol'
+
+kindOf(new Int8Array());
+//=> 'int8array'
+
+kindOf(new Uint8Array());
+//=> 'uint8array'
+
+kindOf(new Uint8ClampedArray());
+//=> 'uint8clampedarray'
+
+kindOf(new Int16Array());
+//=> 'int16array'
+
+kindOf(new Uint16Array());
+//=> 'uint16array'
+
+kindOf(new Int32Array());
+//=> 'int32array'
+
+kindOf(new Uint32Array());
+//=> 'uint32array'
+
+kindOf(new Float32Array());
+//=> 'float32array'
+
+kindOf(new Float64Array());
+//=> 'float64array'
+```
+
+## Benchmarks
+
+Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of).
+Note that performaces is slower for es6 features `Map`, `WeakMap`, `Set` and `WeakSet`.
+
+```bash
+#1: array
+ current x 23,329,397 ops/sec ±0.82% (94 runs sampled)
+ lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled)
+ lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled)
+
+#2: boolean
+ current x 27,197,115 ops/sec ±0.85% (94 runs sampled)
+ lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled)
+ lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled)
+
+#3: date
+ current x 20,190,117 ops/sec ±0.86% (92 runs sampled)
+ lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled)
+ lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled)
+
+#4: function
+ current x 23,855,460 ops/sec ±0.60% (97 runs sampled)
+ lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled)
+ lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled)
+
+#5: null
+ current x 27,061,047 ops/sec ±0.97% (96 runs sampled)
+ lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled)
+ lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled)
+
+#6: number
+ current x 25,075,682 ops/sec ±0.53% (99 runs sampled)
+ lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled)
+ lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled)
+
+#7: object
+ current x 3,348,980 ops/sec ±0.49% (99 runs sampled)
+ lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled)
+ lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled)
+
+#8: regex
+ current x 21,284,827 ops/sec ±0.72% (96 runs sampled)
+ lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled)
+ lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled)
+
+#9: string
+ current x 25,379,234 ops/sec ±0.58% (96 runs sampled)
+ lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled)
+ lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled)
+
+#10: undef
+ current x 27,459,221 ops/sec ±1.01% (93 runs sampled)
+ lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled)
+ lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled)
+
+```
+
+## Optimizations
+
+In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library:
+
+1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot.
+2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it.
+3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'`
+
+## About
+
+### Related projects
+
+* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet")
+* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.")
+* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 59 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [miguelmota](https://github.com/miguelmota) |
+| 1 | [dtothefp](https://github.com/dtothefp) |
+| 1 | [ksheedlo](https://github.com/ksheedlo) |
+| 1 | [pdehaan](https://github.com/pdehaan) |
+| 1 | [laggingreflex](https://github.com/laggingreflex) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 16, 2017._
\ No newline at end of file
diff --git a/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of/index.js b/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of/index.js
new file mode 100644
index 0000000..b52c291
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of/index.js
@@ -0,0 +1,116 @@
+var isBuffer = require('is-buffer');
+var toString = Object.prototype.toString;
+
+/**
+ * Get the native `typeof` a value.
+ *
+ * @param {*} `val`
+ * @return {*} Native javascript type
+ */
+
+module.exports = function kindOf(val) {
+ // primitivies
+ if (typeof val === 'undefined') {
+ return 'undefined';
+ }
+ if (val === null) {
+ return 'null';
+ }
+ if (val === true || val === false || val instanceof Boolean) {
+ return 'boolean';
+ }
+ if (typeof val === 'string' || val instanceof String) {
+ return 'string';
+ }
+ if (typeof val === 'number' || val instanceof Number) {
+ return 'number';
+ }
+
+ // functions
+ if (typeof val === 'function' || val instanceof Function) {
+ return 'function';
+ }
+
+ // array
+ if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {
+ return 'array';
+ }
+
+ // check for instances of RegExp and Date before calling `toString`
+ if (val instanceof RegExp) {
+ return 'regexp';
+ }
+ if (val instanceof Date) {
+ return 'date';
+ }
+
+ // other objects
+ var type = toString.call(val);
+
+ if (type === '[object RegExp]') {
+ return 'regexp';
+ }
+ if (type === '[object Date]') {
+ return 'date';
+ }
+ if (type === '[object Arguments]') {
+ return 'arguments';
+ }
+ if (type === '[object Error]') {
+ return 'error';
+ }
+
+ // buffer
+ if (isBuffer(val)) {
+ return 'buffer';
+ }
+
+ // es6: Map, WeakMap, Set, WeakSet
+ if (type === '[object Set]') {
+ return 'set';
+ }
+ if (type === '[object WeakSet]') {
+ return 'weakset';
+ }
+ if (type === '[object Map]') {
+ return 'map';
+ }
+ if (type === '[object WeakMap]') {
+ return 'weakmap';
+ }
+ if (type === '[object Symbol]') {
+ return 'symbol';
+ }
+
+ // typed arrays
+ if (type === '[object Int8Array]') {
+ return 'int8array';
+ }
+ if (type === '[object Uint8Array]') {
+ return 'uint8array';
+ }
+ if (type === '[object Uint8ClampedArray]') {
+ return 'uint8clampedarray';
+ }
+ if (type === '[object Int16Array]') {
+ return 'int16array';
+ }
+ if (type === '[object Uint16Array]') {
+ return 'uint16array';
+ }
+ if (type === '[object Int32Array]') {
+ return 'int32array';
+ }
+ if (type === '[object Uint32Array]') {
+ return 'uint32array';
+ }
+ if (type === '[object Float32Array]') {
+ return 'float32array';
+ }
+ if (type === '[object Float64Array]') {
+ return 'float64array';
+ }
+
+ // must be a plain object
+ return 'object';
+};
diff --git a/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of/package.json b/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of/package.json
new file mode 100644
index 0000000..5de879e
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of/package.json
@@ -0,0 +1,90 @@
+{
+ "name": "kind-of",
+ "description": "Get the native type of a value.",
+ "version": "3.2.2",
+ "homepage": "https://github.com/jonschlinkert/kind-of",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "David Fox-Powell (https://dtothefp.github.io/me)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Ken Sheedlo (kensheedlo.com)",
+ "laggingreflex (https://github.com/laggingreflex)",
+ "Miguel Mota (https://miguelmota.com)",
+ "Peter deHaan (http://about.me/peterdehaan)"
+ ],
+ "repository": "jonschlinkert/kind-of",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/kind-of/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha",
+ "prepublish": "browserify -o browser.js -e index.js -s index --bare"
+ },
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "benchmarked": "^1.0.0",
+ "browserify": "^14.3.0",
+ "glob": "^7.1.1",
+ "gulp-format-md": "^0.1.12",
+ "mocha": "^3.3.0",
+ "type-of": "^2.0.1",
+ "typeof": "^1.0.0"
+ },
+ "keywords": [
+ "arguments",
+ "array",
+ "boolean",
+ "check",
+ "date",
+ "function",
+ "is",
+ "is-type",
+ "is-type-of",
+ "kind",
+ "kind-of",
+ "number",
+ "object",
+ "of",
+ "regexp",
+ "string",
+ "test",
+ "type",
+ "type-of",
+ "typeof",
+ "types"
+ ],
+ "verb": {
+ "related": {
+ "list": [
+ "is-glob",
+ "is-number",
+ "is-primitive"
+ ]
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ },
+ "reflinks": [
+ "verb"
+ ]
+ }
+}
diff --git a/node_modules/expand-brackets/node_modules/is-data-descriptor/package.json b/node_modules/expand-brackets/node_modules/is-data-descriptor/package.json
new file mode 100644
index 0000000..5fb294b
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-data-descriptor/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "is-data-descriptor",
+ "description": "Returns true if a value has the characteristics of a valid JavaScript data descriptor.",
+ "version": "0.1.4",
+ "homepage": "https://github.com/jonschlinkert/is-data-descriptor",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/is-data-descriptor",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-data-descriptor/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "kind-of": "^3.0.2"
+ },
+ "devDependencies": {
+ "mocha": "*",
+ "should": "*"
+ },
+ "keywords": [
+ "accessor",
+ "check",
+ "data",
+ "descriptor",
+ "get",
+ "getter",
+ "is",
+ "keys",
+ "object",
+ "properties",
+ "property",
+ "set",
+ "setter",
+ "type",
+ "valid",
+ "value"
+ ],
+ "verb": {
+ "related": {
+ "list": [
+ "is-accessor-descriptor",
+ "is-data-descriptor",
+ "is-descriptor",
+ "isobject"
+ ]
+ },
+ "plugins": [
+ "gulp-format-md"
+ ]
+ }
+}
diff --git a/node_modules/expand-brackets/node_modules/is-descriptor/LICENSE b/node_modules/expand-brackets/node_modules/is-descriptor/LICENSE
new file mode 100644
index 0000000..c0d7f13
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-descriptor/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Jon Schlinkert.
+
+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.
\ No newline at end of file
diff --git a/node_modules/expand-brackets/node_modules/is-descriptor/README.md b/node_modules/expand-brackets/node_modules/is-descriptor/README.md
new file mode 100644
index 0000000..658e533
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-descriptor/README.md
@@ -0,0 +1,193 @@
+# is-descriptor [![NPM version](https://img.shields.io/npm/v/is-descriptor.svg?style=flat)](https://www.npmjs.com/package/is-descriptor) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-descriptor.svg?style=flat)](https://npmjs.org/package/is-descriptor) [![NPM total downloads](https://img.shields.io/npm/dt/is-descriptor.svg?style=flat)](https://npmjs.org/package/is-descriptor) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-descriptor.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-descriptor)
+
+> Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-descriptor
+```
+
+## Usage
+
+```js
+var isDescriptor = require('is-descriptor');
+
+isDescriptor({value: 'foo'})
+//=> true
+isDescriptor({get: function(){}, set: function(){}})
+//=> true
+isDescriptor({get: 'foo', set: function(){}})
+//=> false
+```
+
+You may also check for a descriptor by passing an object as the first argument and property name (`string`) as the second argument.
+
+```js
+var obj = {};
+obj.foo = 'abc';
+
+Object.defineProperty(obj, 'bar', {
+ value: 'xyz'
+});
+
+isDescriptor(obj, 'foo');
+//=> true
+isDescriptor(obj, 'bar');
+//=> true
+```
+
+## Examples
+
+### value type
+
+`false` when not an object
+
+```js
+isDescriptor('a');
+//=> false
+isDescriptor(null);
+//=> false
+isDescriptor([]);
+//=> false
+```
+
+### data descriptor
+
+`true` when the object has valid properties with valid values.
+
+```js
+isDescriptor({value: 'foo'});
+//=> true
+isDescriptor({value: noop});
+//=> true
+```
+
+`false` when the object has invalid properties
+
+```js
+isDescriptor({value: 'foo', bar: 'baz'});
+//=> false
+isDescriptor({value: 'foo', bar: 'baz'});
+//=> false
+isDescriptor({value: 'foo', get: noop});
+//=> false
+isDescriptor({get: noop, value: noop});
+//=> false
+```
+
+`false` when a value is not the correct type
+
+```js
+isDescriptor({value: 'foo', enumerable: 'foo'});
+//=> false
+isDescriptor({value: 'foo', configurable: 'foo'});
+//=> false
+isDescriptor({value: 'foo', writable: 'foo'});
+//=> false
+```
+
+### accessor descriptor
+
+`true` when the object has valid properties with valid values.
+
+```js
+isDescriptor({get: noop, set: noop});
+//=> true
+isDescriptor({get: noop});
+//=> true
+isDescriptor({set: noop});
+//=> true
+```
+
+`false` when the object has invalid properties
+
+```js
+isDescriptor({get: noop, set: noop, bar: 'baz'});
+//=> false
+isDescriptor({get: noop, writable: true});
+//=> false
+isDescriptor({get: noop, value: true});
+//=> false
+```
+
+`false` when an accessor is not a function
+
+```js
+isDescriptor({get: noop, set: 'baz'});
+//=> false
+isDescriptor({get: 'foo', set: noop});
+//=> false
+isDescriptor({get: 'foo', bar: 'baz'});
+//=> false
+isDescriptor({get: 'foo', set: 'baz'});
+//=> false
+```
+
+`false` when a value is not the correct type
+
+```js
+isDescriptor({get: noop, set: noop, enumerable: 'foo'});
+//=> false
+isDescriptor({set: noop, configurable: 'foo'});
+//=> false
+isDescriptor({get: noop, configurable: 'foo'});
+//=> false
+```
+
+## About
+
+### Related projects
+
+* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor "Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.")
+* [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. | [homepage](https://github.com/jonschlinkert/is-data-descriptor "Returns true if a value has the characteristics of a valid JavaScript data descriptor.")
+* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://github.com/jonschlinkert/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.")
+* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject "Returns true if the value is an object and not an array or null.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 24 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 1 | [doowb](https://github.com/doowb) |
+| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on July 22, 2017._
\ No newline at end of file
diff --git a/node_modules/expand-brackets/node_modules/is-descriptor/index.js b/node_modules/expand-brackets/node_modules/is-descriptor/index.js
new file mode 100644
index 0000000..c9b91d7
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-descriptor/index.js
@@ -0,0 +1,22 @@
+/*!
+ * is-descriptor
+ *
+ * Copyright (c) 2015-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var typeOf = require('kind-of');
+var isAccessor = require('is-accessor-descriptor');
+var isData = require('is-data-descriptor');
+
+module.exports = function isDescriptor(obj, key) {
+ if (typeOf(obj) !== 'object') {
+ return false;
+ }
+ if ('get' in obj) {
+ return isAccessor(obj, key);
+ }
+ return isData(obj, key);
+};
diff --git a/node_modules/expand-brackets/node_modules/is-descriptor/package.json b/node_modules/expand-brackets/node_modules/is-descriptor/package.json
new file mode 100644
index 0000000..a561bfe
--- /dev/null
+++ b/node_modules/expand-brackets/node_modules/is-descriptor/package.json
@@ -0,0 +1,75 @@
+{
+ "name": "is-descriptor",
+ "description": "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.",
+ "version": "0.1.6",
+ "homepage": "https://github.com/jonschlinkert/is-descriptor",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Brian Woodward (https://twitter.com/doowb)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "(https://github.com/wtgtybhertgeghgtwtg)"
+ ],
+ "repository": "jonschlinkert/is-descriptor",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-descriptor/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.4.2"
+ },
+ "keywords": [
+ "accessor",
+ "check",
+ "data",
+ "descriptor",
+ "get",
+ "getter",
+ "is",
+ "keys",
+ "object",
+ "properties",
+ "property",
+ "set",
+ "setter",
+ "type",
+ "valid",
+ "value"
+ ],
+ "verb": {
+ "related": {
+ "list": [
+ "is-accessor-descriptor",
+ "is-data-descriptor",
+ "is-descriptor",
+ "isobject"
+ ]
+ },
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/expand-brackets/package.json b/node_modules/expand-brackets/package.json
new file mode 100644
index 0000000..1c5233c
--- /dev/null
+++ b/node_modules/expand-brackets/package.json
@@ -0,0 +1,85 @@
+{
+ "name": "expand-brackets",
+ "description": "Expand POSIX bracket expressions (character classes) in glob patterns.",
+ "version": "2.1.4",
+ "homepage": "https://github.com/jonschlinkert/expand-brackets",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Elan Shanker (https://github.com/es128)",
+ "Eugene Sharygin (https://github.com/eush77)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Martin Kolárik (http://kolarik.sk)"
+ ],
+ "repository": "jonschlinkert/expand-brackets",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/expand-brackets/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js",
+ "lib"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "devDependencies": {
+ "bash-match": "^0.1.1",
+ "gulp-format-md": "^0.1.10",
+ "helper-changelog": "^0.3.0",
+ "minimatch": "^3.0.3",
+ "mocha": "^3.0.2",
+ "multimatch": "^2.1.0",
+ "yargs-parser": "^4.0.0"
+ },
+ "keywords": [
+ "bracket",
+ "brackets",
+ "character class",
+ "expand",
+ "expression",
+ "posix"
+ ],
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "helpers": [
+ "helper-changelog"
+ ],
+ "related": {
+ "list": [
+ "braces",
+ "extglob",
+ "micromatch",
+ "nanomatch"
+ ]
+ },
+ "reflinks": [
+ "micromatch",
+ "verb",
+ "verb-generate-readme"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/expand-tilde/LICENSE b/node_modules/expand-tilde/LICENSE
new file mode 100644
index 0000000..1e49edf
--- /dev/null
+++ b/node_modules/expand-tilde/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2016, Jon Schlinkert.
+
+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/node_modules/expand-tilde/README.md b/node_modules/expand-tilde/README.md
new file mode 100644
index 0000000..d1892b7
--- /dev/null
+++ b/node_modules/expand-tilde/README.md
@@ -0,0 +1,80 @@
+# expand-tilde [![NPM version](https://img.shields.io/npm/v/expand-tilde.svg?style=flat)](https://www.npmjs.com/package/expand-tilde) [![NPM downloads](https://img.shields.io/npm/dm/expand-tilde.svg?style=flat)](https://npmjs.org/package/expand-tilde) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/expand-tilde.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/expand-tilde)
+
+> Bash-like tilde expansion for node.js. Expands a leading tilde in a file path to the user home directory, or `~+` to the cwd.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save expand-tilde
+```
+
+## Usage
+
+See the [Bash documentation for Tilde Expansion](https://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html).
+
+```js
+var expandTilde = require('expand-tilde');
+
+expandTilde('~')
+//=> '/Users/jonschlinkert'
+
+expandTilde('~+')
+//=> process.cwd()
+```
+
+## Run tests
+
+Install dev dependencies:
+
+```bash
+npm i -d && npm test
+```
+
+## About
+
+### Related projects
+
+* [braces](https://www.npmjs.com/package/braces): Fast, comprehensive, bash-like brace expansion implemented in JavaScript. Complete support for the Bash 4.3 braces… [more](https://github.com/jonschlinkert/braces) | [homepage](https://github.com/jonschlinkert/braces "Fast, comprehensive, bash-like brace expansion implemented in JavaScript. Complete support for the Bash 4.3 braces specification, without sacrificing speed.")
+* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/jonschlinkert/expand-brackets "Expand POSIX bracket expressions (character classes) in glob patterns.")
+* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet")
+* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on December 08, 2016._
\ No newline at end of file
diff --git a/node_modules/expand-tilde/index.js b/node_modules/expand-tilde/index.js
new file mode 100644
index 0000000..d4e4706
--- /dev/null
+++ b/node_modules/expand-tilde/index.js
@@ -0,0 +1,22 @@
+/*!
+ * expand-tilde
+ *
+ * Copyright (c) 2015 Jon Schlinkert.
+ * Licensed under the MIT license.
+ */
+
+var homedir = require('homedir-polyfill');
+var path = require('path');
+
+module.exports = function expandTilde(filepath) {
+ var home = homedir();
+
+ if (filepath.charCodeAt(0) === 126 /* ~ */) {
+ if (filepath.charCodeAt(1) === 43 /* + */) {
+ return path.join(process.cwd(), filepath.slice(2));
+ }
+ return home ? path.join(home, filepath.slice(1)) : filepath;
+ }
+
+ return filepath;
+};
diff --git a/node_modules/expand-tilde/package.json b/node_modules/expand-tilde/package.json
new file mode 100644
index 0000000..9b37b1b
--- /dev/null
+++ b/node_modules/expand-tilde/package.json
@@ -0,0 +1,67 @@
+{
+ "name": "expand-tilde",
+ "description": "Bash-like tilde expansion for node.js. Expands a leading tilde in a file path to the user home directory, or `~+` to the cwd.",
+ "version": "2.0.2",
+ "homepage": "https://github.com/jonschlinkert/expand-tilde",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/expand-tilde",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/expand-tilde/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^0.1.9",
+ "is-windows": "^0.2.0",
+ "mocha": "^2.5.3"
+ },
+ "keywords": [
+ "cwd",
+ "expand",
+ "expansion",
+ "filepath",
+ "home",
+ "path",
+ "pwd",
+ "tilde",
+ "user",
+ "userhome"
+ ],
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "braces",
+ "expand-brackets",
+ "is-glob",
+ "micromatch"
+ ]
+ },
+ "reflinks": [
+ "verb"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ },
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1"
+ }
+}
diff --git a/node_modules/ext/CHANGELOG.md b/node_modules/ext/CHANGELOG.md
new file mode 100644
index 0000000..48bffa3
--- /dev/null
+++ b/node_modules/ext/CHANGELOG.md
@@ -0,0 +1,89 @@
+# Changelog
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+## [1.7.0](https://github.com/medikoo/es5-ext/compare/v1.6.0...v1.7.0) (2022-08-31)
+
+### Features
+
+- `string.camelToHyphen` method ([b8ea4ab](https://github.com/medikoo/es5-ext/commit/b8ea4ab6c8b920ecdff224f9c92092e1c7f8cdfc))
+- `string.capitalize` method ([32e7360](https://github.com/medikoo/es5-ext/commit/32e736034bd27ed25d4566b22aa93aa66c7901cf))
+
+## [1.6.0](https://github.com/medikoo/es5-ext/compare/v1.5.0...v1.6.0) (2021-09-24)
+
+### Features
+
+- `Object.clear` util ([a955da4](https://github.com/medikoo/es5-ext/commit/a955da41e65a25ad87a46234bae065f096abd1d2))
+
+### Bug Fixes
+
+- Fix `Object.entries` to not return non enumerable properties ([44fb872](https://github.com/medikoo/es5-ext/commit/44fb87266617378d2f47a1a5baad6280bf6298a8))
+
+## [1.5.0](https://github.com/medikoo/es5-ext/compare/v1.3.0...v1.5.0) (2021-08-23)
+
+### Features
+
+- `Promise.limit` ([060a05d](https://github.com/medikoo/es5-ext/commit/060a05d4751cd291c6dd7641f5a73ba9338ea7ab))
+- `String.prototype.includes` ([ceebe8d](https://github.com/medikoo/es5-ext/commit/ceebe8dfd6f479d6a7e7b6cd79369291869ee2dd))
+- `charset` option for `String.random` ([2a20eeb](https://github.com/medikoo/es5-ext/commit/2a20eebc5ae784e5c1aacd2c54433fe92a9464c9))
+
+## [1.4.0](https://github.com///compare/v1.3.0...v1.4.0) (2019-11-29)
+
+### Features
+
+- `charset` option for `String.random` ([2a20eeb](https://github.com///commit/2a20eebc5ae784e5c1aacd2c54433fe92a9464c9))
+- `String.prototype.includes` implementation ([ceebe8d](https://github.com///commit/ceebe8dfd6f479d6a7e7b6cd79369291869ee2dd))
+
+## [1.3.0](https://github.com///compare/v1.2.1...v1.3.0) (2019-11-28)
+
+### Features
+
+- `String.random` util ([5b5860a](https://github.com///commit/5b5860ac545b05f00527e00295fdb4f97e4a4e5b))
+
+### [1.2.1](https://github.com///compare/v1.2.0...v1.2.1) (2019-11-26)
+
+## [1.2.0](https://github.com/medikoo/ext/compare/v1.1.2...v1.2.0) (2019-11-07)
+
+### Features
+
+- ceil10, floor10 and round10 for Math ([6a2bc4b](https://github.com/medikoo/ext/commit/6a2bc4b))
+
+### [1.1.2](https://github.com/medikoo/ext/compare/v1.1.1...v1.1.2) (2019-10-29)
+
+### Bug Fixes
+
+- Improve globalThis detection ([470862d](https://github.com/medikoo/ext/commit/470862d))
+
+### [1.1.1](https://github.com/medikoo/ext/compare/v1.1.0...v1.1.1) (2019-10-29)
+
+### Bug Fixes
+
+- Provide naive fallback for sealed Object.prototype case ([a8d528b](https://github.com/medikoo/ext/commit/a8d528b))
+- Workaournd Safari incompatibility case ([0b051e6](https://github.com/medikoo/ext/commit/0b051e6))
+
+## [1.1.0](https://github.com/medikoo/ext/compare/v1.0.3...v1.1.0) (2019-10-21)
+
+### Features
+
+- Object.entries implementation ([cf51e45](https://github.com/medikoo/ext/commit/cf51e45))
+
+### [1.0.3](https://github.com/medikoo/ext/compare/v1.0.1...v1.0.3) (2019-07-03)
+
+Remove obsolete files from publication
+
+### [1.0.2](https://github.com/medikoo/ext/compare/v1.0.1...v1.0.2) (2019-07-03)
+
+(no changes)
+
+### [1.0.1](https://github.com/medikoo/ext/compare/v1.0.0...v1.0.1) (2019-07-03)
+
+Prettify
+
+## 1.0.0 (2019-07-03)
+
+### Features
+
+- `function/identity` (adapted from `es5-ext`) ([f0102af](https://github.com/medikoo/ext/commit/f0102af))
+- `thenable/finally` (adapted from `es5-ext`) ([a8494ac](https://github.com/medikoo/ext/commit/a8494ac))
+- `global-this/is-implemented` ([3a80904](https://github.com/medikoo/ext/commit/3a80904))
+- `globalThis` (mostly adapted from `es5-ext`) ([6559bd3](https://github.com/medikoo/ext/commit/6559bd3))
diff --git a/node_modules/ext/LICENSE b/node_modules/ext/LICENSE
new file mode 100644
index 0000000..7df6b3d
--- /dev/null
+++ b/node_modules/ext/LICENSE
@@ -0,0 +1,15 @@
+ISC License
+
+Copyright (c) 2011-2022, Mariusz Nowak, @medikoo, medikoo.com
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/ext/README.md b/node_modules/ext/README.md
new file mode 100644
index 0000000..29491e2
--- /dev/null
+++ b/node_modules/ext/README.md
@@ -0,0 +1,46 @@
+[![Build status][build-image]][build-url]
+[![npm version][npm-image]][npm-url]
+
+# ext
+
+_(Previously known as `es5-ext`)_
+
+## JavaScript language extensions (with respect to evolving standard)
+
+Non-standard or soon to be standard language utilities in a future proof, non-invasive form.
+
+Doesn't enforce transpilation step. Where it's applicable utilities/extensions are safe to use in all ES3+ implementations.
+
+### Installation
+
+```bash
+npm install ext
+```
+
+### Utilities
+
+- [`globalThis`](docs/global-this.md)
+- `Function`
+ - [`identity`](docs/function/identity.md)
+- `Math`
+ - [`ceil10`](docs/math/ceil-10.md)
+ - [`floor10`](docs/math/floor-10.md)
+ - [`round10`](docs/math/round-10.md)
+- `Object`
+ - [`clear`](docs/object/clear.md)
+ - [`entries`](docs/object/entries.md)
+- `Promise`
+ - [`limit`](docs/promise/limit.md)
+- `String`
+ - [`random`](docs/string/random.md)
+- `String.prototype`
+ - [`campelToHyphen`](docs/string_/camel-to-hyphen.md)
+ - [`capitalize`](docs/string_/capitalize.md)
+ - [`includes`](docs/string_/includes.md)
+- `Thenable.prototype`
+ - [`finally`](docs/thenable_/finally.md)
+
+[build-image]: https://github.com/medikoo/es5-ext/workflows/Integrate%20[ext]/badge.svg
+[build-url]: https://github.com/medikoo/es5-ext/actions?query=workflow%3AIntegrate%20[ext]
+[npm-image]: https://img.shields.io/npm/v/ext.svg
+[npm-url]: https://www.npmjs.com/package/ext
diff --git a/node_modules/ext/docs/function/identity.md b/node_modules/ext/docs/function/identity.md
new file mode 100644
index 0000000..b6a5c1d
--- /dev/null
+++ b/node_modules/ext/docs/function/identity.md
@@ -0,0 +1,9 @@
+# `Function.identity` _(ext/function/identity)_
+
+Returns input argument.
+
+```javascript
+const identity = require("ext/function/identity");
+
+identity("foo"); // "foo"
+```
diff --git a/node_modules/ext/docs/global-this.md b/node_modules/ext/docs/global-this.md
new file mode 100644
index 0000000..fafd422
--- /dev/null
+++ b/node_modules/ext/docs/global-this.md
@@ -0,0 +1,9 @@
+# `globalThis` _(ext/global-this)_
+
+Returns global object. Resolve native [globalThis](https://github.com/tc39/proposal-global) if implemented, otherwise fallback to internal resolution of a global object.
+
+```javascript
+const globalThis = require("ext/global-this");
+
+globalThis.Array === Array; // true
+```
diff --git a/node_modules/ext/docs/math/ceil-10.md b/node_modules/ext/docs/math/ceil-10.md
new file mode 100644
index 0000000..1d53122
--- /dev/null
+++ b/node_modules/ext/docs/math/ceil-10.md
@@ -0,0 +1,10 @@
+# `Math.ceil10` _(ext/math/ceil-10)_
+
+Decimal ceil
+
+```javascript
+const ceil10 = require("ext/math/ceil-10");
+
+ceil10(55.51, -1); // 55.6
+ceil10(-59, 1); // -50;
+```
diff --git a/node_modules/ext/docs/math/floor-10.md b/node_modules/ext/docs/math/floor-10.md
new file mode 100644
index 0000000..099c1b6
--- /dev/null
+++ b/node_modules/ext/docs/math/floor-10.md
@@ -0,0 +1,10 @@
+# `Math.floor10` _(ext/math/floor-10)_
+
+Decimal floor
+
+```javascript
+const floor10 = require("ext/math/floor-10");
+
+floor10(55.59, -1); // 55.5
+floor10(59, 1); // 50
+```
diff --git a/node_modules/ext/docs/math/round-10.md b/node_modules/ext/docs/math/round-10.md
new file mode 100644
index 0000000..727acb1
--- /dev/null
+++ b/node_modules/ext/docs/math/round-10.md
@@ -0,0 +1,10 @@
+# `Math.round10` _(ext/math/round-10)_
+
+Decimal round
+
+```javascript
+const round10 = require("ext/math/round-10");
+
+round10(55.549, -1); // 55.5
+round10(1.005, -2); // 1.01
+```
diff --git a/node_modules/ext/docs/object/clear.md b/node_modules/ext/docs/object/clear.md
new file mode 100644
index 0000000..468be1b
--- /dev/null
+++ b/node_modules/ext/docs/object/clear.md
@@ -0,0 +1,12 @@
+# `Object.clear` _(ext/object/clear)_
+
+Deletes all own, enumerable, non-symbol properties in the object
+
+```javascript
+const clear = require("ext/object/clear");
+
+const obj = { foo: "bar" };
+
+clear(obj);
+Object.keys(obj); // []
+```
diff --git a/node_modules/ext/docs/object/entries.md b/node_modules/ext/docs/object/entries.md
new file mode 100644
index 0000000..2d05f4c
--- /dev/null
+++ b/node_modules/ext/docs/object/entries.md
@@ -0,0 +1,11 @@
+# `Object.entries` _(ext/object/entries)_
+
+[Object.entries](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries) implementation.
+
+Returns native `Object.entries` if it's implemented, otherwise library implementation is returned
+
+```javascript
+const entries = require("ext/object/entries");
+
+entries({ foo: "bar" }); // [["foo", "bar"]]
+```
diff --git a/node_modules/ext/docs/promise/limit.md b/node_modules/ext/docs/promise/limit.md
new file mode 100644
index 0000000..8b0ea38
--- /dev/null
+++ b/node_modules/ext/docs/promise/limit.md
@@ -0,0 +1,13 @@
+# `Promise.limit` _(ext/promise/limit)_
+
+Helps to limit concurrency of asynchronous operations.
+
+```javascript
+const limit = require("ext/promise/limit").bind(Promise);
+
+const limittedAsyncFunction = limit(2, asyncFunction);
+
+imittedAsyncFunction(); // Async operation started
+imittedAsyncFunction(); // Async operation started
+imittedAsyncFunction(); // On hold until one of previously started finalizes
+```
diff --git a/node_modules/ext/docs/string/random.md b/node_modules/ext/docs/string/random.md
new file mode 100644
index 0000000..c3099e9
--- /dev/null
+++ b/node_modules/ext/docs/string/random.md
@@ -0,0 +1,31 @@
+# `String.random(options = { ... })` _(ext/string/random)_
+
+Returns generated random string, contained only of ascii cars `a-z` and `0-1`.
+By default returns string of length `10`.
+
+```javascript
+const random = require("ext/string/random");
+
+random(); // "upcfns0i4t"
+random({ length: 3 }); // "5tw"
+```
+
+## Supported options:
+
+### `isUnique: false`
+
+Ensures generated string is unique among ones already returned.
+
+_Note: When not applying this setting, accidental generation of same string is still highly unlikely. Provided option is just to provide a mean to eliminate possibility of an edge case of duplicate string being returned_
+
+### `length: 10`
+
+Desired length of result string
+
+### `charset: null`
+
+Fixed list of possible characters
+
+```javascript
+random({ charset: "abc" }); // "bacbccbbac"
+```
diff --git a/node_modules/ext/docs/string_/camel-to-hyphen.md b/node_modules/ext/docs/string_/camel-to-hyphen.md
new file mode 100644
index 0000000..e3e4c03
--- /dev/null
+++ b/node_modules/ext/docs/string_/camel-to-hyphen.md
@@ -0,0 +1,9 @@
+# `string.camelToHyphen()` _(ext/string\_/camel-to-hyphen)_
+
+Convert camelCase string to hyphen separated, e.g. `oneTwoThree` into `one-to-three`. Useful when converting names from js property convention into filename convention.
+
+```javascript
+const camelToHyphen = require("ext/string_/camelToHyphen");
+
+camelToHyphen.call("razDwaTrzy"); // raz-dwa-trzy
+```
diff --git a/node_modules/ext/docs/string_/capitalize.md b/node_modules/ext/docs/string_/capitalize.md
new file mode 100644
index 0000000..319e194
--- /dev/null
+++ b/node_modules/ext/docs/string_/capitalize.md
@@ -0,0 +1,9 @@
+# `string.capitalize()` _(ext/string\_/capitalize)_
+
+Capitalize input string, e.g. convert `this is a test` into `This is a test`.
+
+```javascript
+const capitalize = require("ext/string_/capitalize");
+
+capitalize.call("this is a test"); // This is a test
+```
diff --git a/node_modules/ext/docs/string_/includes.md b/node_modules/ext/docs/string_/includes.md
new file mode 100644
index 0000000..4fe1b58
--- /dev/null
+++ b/node_modules/ext/docs/string_/includes.md
@@ -0,0 +1,10 @@
+# `string.includes(position = 0)` _(ext/string\_/includes)_
+
+`includes` method for strings. Resolve native [includes](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes) if implemented, otherwise fallback to shim implementation.
+
+```javascript
+const includes = require("ext/string_/includes");
+
+includes.call("razdwa", "raz"); // true
+includes.call("razdwa", "trzy"); // false
+```
diff --git a/node_modules/ext/docs/thenable_/finally.md b/node_modules/ext/docs/thenable_/finally.md
new file mode 100644
index 0000000..978ce0c
--- /dev/null
+++ b/node_modules/ext/docs/thenable_/finally.md
@@ -0,0 +1,9 @@
+# `thenable.finally` _(ext/thenable\_/finally)_
+
+`finally` method for any _thenable_ input
+
+```javascript
+const finally = require("ext/thenable_/finally");
+
+finally.call(thenable, () => console.log("Thenable resolved"));
+```
diff --git a/node_modules/ext/function/identity.js b/node_modules/ext/function/identity.js
new file mode 100644
index 0000000..cde213f
--- /dev/null
+++ b/node_modules/ext/function/identity.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = function (value) { return value; };
diff --git a/node_modules/ext/global-this/implementation.js b/node_modules/ext/global-this/implementation.js
new file mode 100644
index 0000000..6a06d52
--- /dev/null
+++ b/node_modules/ext/global-this/implementation.js
@@ -0,0 +1,31 @@
+var naiveFallback = function () {
+ if (typeof self === "object" && self) return self;
+ if (typeof window === "object" && window) return window;
+ throw new Error("Unable to resolve global `this`");
+};
+
+module.exports = (function () {
+ if (this) return this;
+
+ // Unexpected strict mode (may happen if e.g. bundled into ESM module)
+
+ // Thanks @mathiasbynens -> https://mathiasbynens.be/notes/globalthis
+ // In all ES5+ engines global object inherits from Object.prototype
+ // (if you approached one that doesn't please report)
+ try {
+ Object.defineProperty(Object.prototype, "__global__", {
+ get: function () { return this; },
+ configurable: true
+ });
+ } catch (error) {
+ // Unfortunate case of Object.prototype being sealed (via preventExtensions, seal or freeze)
+ return naiveFallback();
+ }
+ try {
+ // Safari case (window.__global__ is resolved with global context, but __global__ does not)
+ if (!__global__) return naiveFallback();
+ return __global__;
+ } finally {
+ delete Object.prototype.__global__;
+ }
+})();
diff --git a/node_modules/ext/global-this/index.js b/node_modules/ext/global-this/index.js
new file mode 100644
index 0000000..8a99c25
--- /dev/null
+++ b/node_modules/ext/global-this/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? globalThis : require("./implementation");
diff --git a/node_modules/ext/global-this/is-implemented.js b/node_modules/ext/global-this/is-implemented.js
new file mode 100644
index 0000000..3eae23e
--- /dev/null
+++ b/node_modules/ext/global-this/is-implemented.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = function () {
+ if (typeof globalThis !== "object") return false;
+ if (!globalThis) return false;
+ return globalThis.Array === Array;
+};
diff --git a/node_modules/ext/lib/private/decimal-adjust.js b/node_modules/ext/lib/private/decimal-adjust.js
new file mode 100644
index 0000000..e04cde9
--- /dev/null
+++ b/node_modules/ext/lib/private/decimal-adjust.js
@@ -0,0 +1,29 @@
+// Credit:
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
+// #Decimal_rounding
+
+"use strict";
+
+var isValue = require("type/object/is")
+ , ensureInteger = require("type/integer/ensure");
+
+var split = String.prototype.split;
+
+module.exports = function (type) {
+ return function (value/*, exp*/) {
+ value = Number(value);
+ var exp = arguments[1];
+ if (isValue(exp)) exp = ensureInteger(exp);
+ if (!value) return value;
+ if (!exp) return Math[type](value);
+ if (!isFinite(value)) return value;
+
+ // Shift
+ var tokens = split.call(value, "e");
+ value = Math[type](tokens[0] + "e" + ((tokens[1] || 0) - exp));
+
+ // Shift back
+ tokens = value.toString().split("e");
+ return Number(tokens[0] + "e" + (Number(tokens[1] || 0) + exp));
+ };
+};
diff --git a/node_modules/ext/lib/private/define-function-length.js b/node_modules/ext/lib/private/define-function-length.js
new file mode 100644
index 0000000..4db3228
--- /dev/null
+++ b/node_modules/ext/lib/private/define-function-length.js
@@ -0,0 +1,56 @@
+"use strict";
+
+var test = function (arg1, arg2) { return arg2; };
+
+try {
+ Object.defineProperty(test, "length", {
+ configurable: true,
+ writable: false,
+ enumerable: false,
+ value: 1
+ });
+}
+catch (ignore) {}
+
+if (test.length === 1) {
+ // ES2015+
+ var desc = { configurable: true, writable: false, enumerable: false };
+ module.exports = function (length, fn) {
+ if (fn.length === length) return fn;
+ desc.value = length;
+ return Object.defineProperty(fn, "length", desc);
+ };
+ return;
+}
+
+module.exports = function (length, fn) {
+ if (fn.length === length) return fn;
+ switch (length) {
+ case 0:
+ return function () { return fn.apply(this, arguments); };
+ case 1:
+ return function (ignored1) { return fn.apply(this, arguments); };
+ case 2:
+ return function (ignored1, ignored2) { return fn.apply(this, arguments); };
+ case 3:
+ return function (ignored1, ignored2, ignored3) { return fn.apply(this, arguments); };
+ case 4:
+ return function (ignored1, ignored2, ignored3, ignored4) {
+ return fn.apply(this, arguments);
+ };
+ case 5:
+ return function (ignored1, ignored2, ignored3, ignored4, ignored5) {
+ return fn.apply(this, arguments);
+ };
+ case 6:
+ return function (ignored1, ignored2, ignored3, ignored4, ignored5, ignored6) {
+ return fn.apply(this, arguments);
+ };
+ case 7:
+ return function (ignored1, ignored2, ignored3, ignored4, ignored5, ignored6, ignored7) {
+ return fn.apply(this, arguments);
+ };
+ default:
+ throw new Error("Usupported function length");
+ }
+};
diff --git a/node_modules/ext/math/ceil-10.js b/node_modules/ext/math/ceil-10.js
new file mode 100644
index 0000000..c57a730
--- /dev/null
+++ b/node_modules/ext/math/ceil-10.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("../lib/private/decimal-adjust")("ceil");
diff --git a/node_modules/ext/math/floor-10.js b/node_modules/ext/math/floor-10.js
new file mode 100644
index 0000000..27dd1aa
--- /dev/null
+++ b/node_modules/ext/math/floor-10.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("../lib/private/decimal-adjust")("floor");
diff --git a/node_modules/ext/math/round-10.js b/node_modules/ext/math/round-10.js
new file mode 100644
index 0000000..643d676
--- /dev/null
+++ b/node_modules/ext/math/round-10.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("../lib/private/decimal-adjust")("round");
diff --git a/node_modules/ext/node_modules/type/CHANGELOG.md b/node_modules/ext/node_modules/type/CHANGELOG.md
new file mode 100644
index 0000000..001636b
--- /dev/null
+++ b/node_modules/ext/node_modules/type/CHANGELOG.md
@@ -0,0 +1,172 @@
+# Changelog
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+### [2.7.2](https://github.com/medikoo/type/compare/v2.7.1...v2.7.2) (2022-08-05)
+
+### Maintenance Improvements
+
+- **TS:** Improve `ensure` options handling ([#8](https://github.com/medikoo/type/issues/8)) ([4a54066](https://github.com/medikoo/type/commit/4a54066d7b55cef14ac4aa25a6f070296a043a6f)) ([Marco](https://github.com/borracciaBlu))
+
+### [2.7.1](https://github.com/medikoo/type/compare/v2.7.0...v2.7.1) (2022-08-04)
+
+### Maintenance Improvements
+
+- **TS:** Fix support for `isOptional` in `ensure` options ([#7](https://github.com/medikoo/type/issues/7)) ([320f89b](https://github.com/medikoo/type/commit/320f89b89237e3e0ceff5e26b67cb18bd52cb42d)) ([Marco](https://github.com/borracciaBlu))
+
+## [2.7.0](https://github.com/medikoo/type/compare/v2.6.1...v2.7.0) (2022-08-03)
+
+### Features
+
+- `BigInt.coerce` and `BigInt.ensure` ([e49ad78](https://github.com/medikoo/type/commit/e49ad787bd3aa67b7aa9f7a8ea4cde22a08bebc5))
+
+### [2.6.1](https://github.com/medikoo/type/compare/v2.6.0...v2.6.1) (2022-07-29)
+
+### Maintenance Improvements
+
+- Declare TS types ([#6](https://github.com/medikoo/type/issues/6)) ([6378e2c](https://github.com/medikoo/type/commit/6378e2c457670bcb8a9b898e0f2502ed5b942d44)) ([Marco](https://github.com/borracciaBlu))
+
+## [2.6.0](https://github.com/medikoo/type/compare/v2.5.0...v2.6.0) (2022-02-02)
+
+### Features
+
+- `constructor` validation utils ([74b99bb](https://github.com/medikoo/type/commit/74b99bbf6be27083bf9a053961edb2a585ae3e77))
+
+## [2.5.0](https://github.com/medikoo/type/compare/v2.4.0...v2.5.0) (2021-03-08)
+
+### Features
+
+- `errorCode` option for `ensure*` utils ([777a1f2](https://github.com/medikoo/type/commit/777a1f2c9fd76defcd24d3a30cce49491947fef7))
+
+## [2.4.0](https://github.com/medikoo/type/compare/v2.3.0...v2.4.0) (2021-03-08)
+
+### Features
+
+- `set/is` and `set/ensure` utils ([083ec23](https://github.com/medikoo/type/commit/083ec2351718c310f316dcfd8c624a13201e227f))
+
+## [2.3.0](https://github.com/medikoo/type/compare/v2.2.0...v2.3.0) (2021-02-16)
+
+### Features
+
+- `map/is` and `map/ensure` utils ([aafd1cb](https://github.com/medikoo/type/commit/aafd1cbd8c888fda98d39fd17e59f38b078d7bcf))
+
+## [2.2.0](https://github.com/medikoo/type/compare/v2.1.0...v2.2.0) (2021-02-11)
+
+### Features
+
+- Support `ensureItem` option in `array/ensure` ([8f74973](https://github.com/medikoo/type/commit/8f749739df9bfebf44087093e09c8f7341a33a09))
+
+## [2.1.0](https://github.com/medikoo/type/compare/v2.0.0...v2.1.0) (2020-08-21)
+
+### Features
+
+- `ensure` util for cumulated input validation ([814c5a8](https://github.com/medikoo/type/commit/814c5a801ecac23d06d8a5f4bcafc4763a04408c))
+- Provide an alternative error message with `options.name` ([c7751c0](https://github.com/medikoo/type/commit/c7751c084ee4f3d3ed10500db0edde2ff00e03a1))
+- Support `%n` (meaningful name) token in error message resolver ([b0f374e](https://github.com/medikoo/type/commit/b0f374e54345c714fe37a90887ecfe60577ce133))
+- Support `min` validation for natural numbers ([e703512](https://github.com/medikoo/type/commit/e70351248818d3e113110106ad174b42c5fd9b25))
+- Support custom Error constructors ([c6ecb90](https://github.com/medikoo/type/commit/c6ecb90e21c1c778210934204cbe393fb89ef2f6))
+
+### Bug Fixes
+
+- Fix typo in error message ([2735533](https://github.com/medikoo/type/commit/2735533de28d33dfa13222743698169c92d08c09))
+
+## [2.0.0](https://github.com/medikoo/type/compare/v1.2.0...v2.0.0) (2019-10-10)
+
+### Features
+
+- `allowedKeys` option for plain-object/ensure ([f81e72e](https://github.com/medikoo/type/commit/f81e72e))
+- `ensurePropertyValue` option for plain-object/ensure ([c5ff8fb](https://github.com/medikoo/type/commit/c5ff8fb))
+- Replace `coerceItem` with `ensureItem` option in iterable/ensure ([721494f](https://github.com/medikoo/type/commit/721494f))
+- Seclude lib/resolve-error-message ([12636d9](https://github.com/medikoo/type/commit/12636d9))
+- Validate options.ensureItem in iterable/ensure ([78da6c1](https://github.com/medikoo/type/commit/78da6c1))
+
+### BREAKING CHANGES
+
+- iterable/ensure no longer supports `coerceItem` option. Instead `ensureItem` was introduced
+
+## [1.2.0](https://github.com/medikoo/type/compare/v1.1.0...v1.2.0) (2019-09-20)
+
+### Bug Fixes
+
+- Improve error message so it's not confusing ([97cd6b9](https://github.com/medikoo/type/commit/97cd6b9))
+
+### Features
+
+- 'coerceItem' option for iterable/ensure ([0818860](https://github.com/medikoo/type/commit/0818860))
+
+## [1.1.0](https://github.com/medikoo/type/compare/v1.0.3...v1.1.0) (2019-09-20)
+
+### Features
+
+- `denyEmpty` option for iterables validation ([301d071](https://github.com/medikoo/type/commit/301d071))
+
+### [1.0.3](https://github.com/medikoo/type/compare/v1.0.2...v1.0.3) (2019-08-06)
+
+### Bug Fixes
+
+- Recognize custom built ES5 era errors ([6462fac](https://github.com/medikoo/type/commit/6462fac))
+
+### [1.0.2](https://github.com/medikoo/type/compare/v1.0.1...v1.0.2) (2019-08-06)
+
+### Bug Fixes
+
+- Recognize host errors (e.g. DOMException) ([96ef399](https://github.com/medikoo/type/commit/96ef399))
+
+## [1.0.1](https://github.com/medikoo/type/compare/v1.0.0...v1.0.1) (2019-04-08)
+
+# 1.0.0 (2019-04-05)
+
+### Bug Fixes
+
+- ensure 'is' functions can't crash ([59ceb78](https://github.com/medikoo/type/commit/59ceb78))
+
+### Features
+
+- array-length/coerce ([af8ddec](https://github.com/medikoo/type/commit/af8ddec))
+- array-length/ensure ([d313eb6](https://github.com/medikoo/type/commit/d313eb6))
+- array-like/ensure ([45f1ddd](https://github.com/medikoo/type/commit/45f1ddd))
+- array-like/is ([9a026a5](https://github.com/medikoo/type/commit/9a026a5))
+- array/ensure ([9db1515](https://github.com/medikoo/type/commit/9db1515))
+- array/is ([9672839](https://github.com/medikoo/type/commit/9672839))
+- date/ensure ([44e25a0](https://github.com/medikoo/type/commit/44e25a0))
+- date/is ([0316558](https://github.com/medikoo/type/commit/0316558))
+- ensure to not crash ([3998348](https://github.com/medikoo/type/commit/3998348))
+- ensure/number ([134b5cb](https://github.com/medikoo/type/commit/134b5cb))
+- error/ensure ([d5c8a30](https://github.com/medikoo/type/commit/d5c8a30))
+- error/is-error ([4d6b899](https://github.com/medikoo/type/commit/4d6b899))
+- finite/coerce ([accaad1](https://github.com/medikoo/type/commit/accaad1))
+- finite/ensure ([51e4174](https://github.com/medikoo/type/commit/51e4174))
+- function/ensure ([b624c9a](https://github.com/medikoo/type/commit/b624c9a))
+- function/is ([dab8026](https://github.com/medikoo/type/commit/dab8026))
+- integer/coerce ([89dea2e](https://github.com/medikoo/type/commit/89dea2e))
+- integer/ensure ([44a7071](https://github.com/medikoo/type/commit/44a7071))
+- iterable/ensure ([3d48841](https://github.com/medikoo/type/commit/3d48841))
+- iterable/is ([cf09513](https://github.com/medikoo/type/commit/cf09513))
+- lib/is-to-string-tag-supported ([c8c001d](https://github.com/medikoo/type/commit/c8c001d))
+- natural-number/coerce ([d08fdd9](https://github.com/medikoo/type/commit/d08fdd9))
+- natural-number/ensure ([6c24d12](https://github.com/medikoo/type/commit/6c24d12))
+- number/coerce ([86ccf08](https://github.com/medikoo/type/commit/86ccf08))
+- object/ensure ([a9e8eed](https://github.com/medikoo/type/commit/a9e8eed))
+- object/is ([d2d7251](https://github.com/medikoo/type/commit/d2d7251))
+- plain-function/ensure ([5186518](https://github.com/medikoo/type/commit/5186518))
+- plain-function/is ([51bc791](https://github.com/medikoo/type/commit/51bc791))
+- plain-object/ensure ([91cf5e5](https://github.com/medikoo/type/commit/91cf5e5))
+- plain-object/is ([4dcf393](https://github.com/medikoo/type/commit/4dcf393))
+- promise/ensure ([8d096a4](https://github.com/medikoo/type/commit/8d096a4))
+- promise/is ([a00de02](https://github.com/medikoo/type/commit/a00de02))
+- prototype/is ([b23bdcc](https://github.com/medikoo/type/commit/b23bdcc))
+- reg-exp/ensure ([6f7bbcb](https://github.com/medikoo/type/commit/6f7bbcb))
+- reg-exp/is ([9728519](https://github.com/medikoo/type/commit/9728519))
+- safe-integer/coerce ([b8549c4](https://github.com/medikoo/type/commit/b8549c4))
+- safe-integer/ensure ([a70ef3f](https://github.com/medikoo/type/commit/a70ef3f))
+- string/coerce ([b25c71f](https://github.com/medikoo/type/commit/b25c71f))
+- string/ensure ([b62577d](https://github.com/medikoo/type/commit/b62577d))
+- support 'default' in resolveException ([e08332a](https://github.com/medikoo/type/commit/e08332a))
+- switch config to ES3 based ([37606d9](https://github.com/medikoo/type/commit/37606d9))
+- thenable/ensure ([6762c0d](https://github.com/medikoo/type/commit/6762c0d))
+- thenable/is ([2711d70](https://github.com/medikoo/type/commit/2711d70))
+- time-value/coerce ([27fd109](https://github.com/medikoo/type/commit/27fd109))
+- time-value/ensure ([1f6a8ea](https://github.com/medikoo/type/commit/1f6a8ea))
+- **string/coerce:** restrict toString acceptance ([2a87100](https://github.com/medikoo/type/commit/2a87100))
+- value/ensure ([dd6d8cb](https://github.com/medikoo/type/commit/dd6d8cb))
+- value/is ([fdf4763](https://github.com/medikoo/type/commit/fdf4763))
diff --git a/node_modules/ext/node_modules/type/LICENSE b/node_modules/ext/node_modules/type/LICENSE
new file mode 100644
index 0000000..ce541c9
--- /dev/null
+++ b/node_modules/ext/node_modules/type/LICENSE
@@ -0,0 +1,15 @@
+ISC License
+
+Copyright (c) 2019-2022, Mariusz Nowak, @medikoo, medikoo.com
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/ext/node_modules/type/README.md b/node_modules/ext/node_modules/type/README.md
new file mode 100644
index 0000000..6b20794
--- /dev/null
+++ b/node_modules/ext/node_modules/type/README.md
@@ -0,0 +1,168 @@
+[![Build status][build-image]][build-url]
+[![Tests coverage][cov-image]][cov-url]
+[![npm version][npm-image]][npm-url]
+
+# type
+
+## Runtime validation and processing of JavaScript types
+
+- Respects language nature and acknowledges its quirks
+- Allows coercion in restricted forms (rejects clearly invalid input, normalizes permissible type deviations)
+- No transpilation implied, written to work in all ECMAScript 3+ engines
+
+## Use case
+
+Validate arguments input in public API endpoints.
+
+_For validation of more sophisticated input structures (as deeply nested configuration objects) it's recommended to consider more powerful schema based utlities (as [AJV](https://ajv.js.org/) or [@hapi/joi](https://hapi.dev/family/joi/))_
+
+### Example usage
+
+Bulletproof input arguments normalization and validation:
+
+```javascript
+const ensureString = require('type/string/ensure')
+ , ensureDate = require('type/date/ensure')
+ , ensureNaturalNumber = require('type/natural-number/ensure')
+ , isObject = require('type/object/is');
+
+module.exports = (path, options = { min: 0 }) {
+ path = ensureString(path, { errorMessage: "%v is not a path" });
+ if (!isObject(options)) options = {};
+ const min = ensureNaturalNumber(options.min, { default: 0 })
+ , max = ensureNaturalNumber(options.max, { isOptional: true })
+ , startTime = ensureDate(options.startTime, { isOptional: true });
+
+ // ...logic
+};
+```
+
+### Installation
+
+```bash
+npm install type
+```
+
+## Utilities
+
+Aside of general [`ensure`](docs/ensure.md) validation util, following kind of utilities for recognized JavaScript types are provided:
+
+##### `*/coerce`
+
+Restricted coercion into primitive type. Returns coerced value or `null` if value is not coercible per rules.
+
+##### `*/is`
+
+Object type/kind confirmation, returns either `true` or `false`.
+
+##### `*/ensure`
+
+Value validation. Returns input value (in primitive cases possibly coerced) or if value doesn't meet the constraints throws `TypeError` .
+
+Each `*/ensure` utility, accepts following options (eventually passed with second argument):
+
+- `isOptional` - Makes `null` or `undefined` accepted as valid value. In such case instead of `TypeError` being thrown, `null` is returned.
+- `default` - A value to be returned if `null` or `undefined` is passed as an input value.
+- `errorMessage` - Custom error message. Following placeholders can be used:
+ - `%v` - To be replaced with short string representation of invalid value
+ - `%n` - To be replaced with meaninfgul name (to be passed with `name` option) of validated value. Not effective if `name` option is not present
+- `errorCode` - Eventual error code to be exposed on `.code` error property
+- `name` - Meaningful name for validated value, to be used in error message, assuming it contains `%n` placeholder
+- `Error` - Alternative error constructor to be used (defaults to `TypeError`)
+
+### Index
+
+#### General utils:
+
+- [`ensure`](docs/ensure.md)
+
+#### Type specific utils:
+
+- **Value**
+ - [`value/is`](docs/value.md#valueis)
+ - [`value/ensure`](docs/value.md#valueensure)
+- **Object**
+ - [`object/is`](docs/object.md#objectis)
+ - [`object/ensure`](docs/object.md#objectensure)
+ - **Plain Object**
+ - [`plain-object/is`](docs/plain-object.md#plain-objectis)
+ - [`plain-object/ensure`](docs/plain-object.md#plain-objectensure)
+- **String**
+ - [`string/coerce`](docs/string.md#stringcoerce)
+ - [`string/ensure`](docs/string.md#stringensure)
+- **Number**
+ - [`number/coerce`](docs/number.md#numbercoerce)
+ - [`number/ensure`](docs/number.md#numberensure)
+ - **Finite Number**
+ - [`finite/coerce`](docs/finite.md#finitecoerce)
+ - [`finite/ensure`](docs/finite.md#finiteensure)
+ - **Integer Number**
+ - [`integer/coerce`](docs/integer.md#integercoerce)
+ - [`integer/ensure`](docs/integer.md#integerensure)
+ - **Safe Integer Number**
+ - [`safe-integer/coerce`](docs/safe-integer.md#safe-integercoerce)
+ - [`safe-integer/ensure`](docs/.md#safe-integerensure)
+ - **Natural Number**
+ - [`natural-number/coerce`](docs/natural-number.md#natural-numbercoerce)
+ - [`natural-number/ensure`](docs/natural-number.md#natural-numberensure)
+ - **Array Length**
+ - [`array-length/coerce`](docs/array-length.md#array-lengthcoerce)
+ - [`array-length/ensure`](docs/array-length.md#array-lengthensure)
+ - **Time Value**
+ - [`time-value/coerce`](docs/time-value.md#time-valuecoerce)
+ - [`time-value/ensure`](docs/time-value.md#time-valueensure)
+- **BigInt**
+ - [`big-int/coerce`](docs/big-int.md#big-intcoerce)
+ - [`big-int/ensure`](docs/big-int.md#big-intensure)
+- **Array Like**
+ - [`array-like/is`](docs/array-like.md#array-likeis)
+ - [`array-like/ensure`](docs/array-like.md#array-likeensure)
+ - **Array**
+ - [`array/is`](docs/array.md#arrayis)
+ - [`array/ensure`](docs/array.md#arrayensure)
+- **Iterable**
+ - [`iterable/is`](docs/iterable.md#iterableis)
+ - [`iterable/ensure`](docs/iterable.md#iterableensure)
+- **Set**
+ - [`set/is`](docs/set.md#setis)
+ - [`set/ensure`](docs/set.md#setensure)
+- **Map**
+ - [`map/is`](docs/map.md#mapis)
+ - [`map/ensure`](docs/map.md#mapensure)
+- **Date**
+ - [`date/is`](docs/date.md#dateis)
+ - [`date/ensure`](docs/date.md#dateensure)
+- **Function**
+ - [`function/is`](docs/function.md#functionis)
+ - [`function/ensure`](docs/function.md#functionensure)
+ - **Constructor**
+ - [`constructor/is`](docs/constructor.md#plain-functionis)
+ - [`constructor/ensure`](docs/constructor.md#plain-functionensure)
+ - **Plain Function**
+ - [`plain-function/is`](docs/plain-function.md#plain-functionis)
+ - [`plain-function/ensure`](docs/plain-function.md#plain-functionensure)
+- **Reg Exp**
+ - [`reg-exp/is`](docs/reg-exp.md#reg-expis)
+ - [`reg-exp/ensure`](docs/.md#reg-expensure)
+- **Thenable**
+ - [`thenable/is`](docs/thenable.md#thenableis)
+ - [`thenable/ensure`](docs/thenable.md#thenableensure)
+ - **Promise**
+ - [`promise/is`](docs/promise.md#promiseis)
+ - [`promise/ensure`](docs/promise.md#promiseensure)
+- **Error**
+ - [`error/is`](docs/error.md#erroris)
+ - [`error/ensure`](docs/error.md#errorensure)
+- **Prototype**
+ - [`prototype/is`](docs/prototype.md#prototypeis)
+
+### Tests
+
+ $ npm test
+
+[build-image]: https://github.com/medikoo/type/workflows/Integrate/badge.svg
+[build-url]: https://github.com/medikoo/type/actions?query=workflow%3AIntegrate
+[cov-image]: https://img.shields.io/codecov/c/github/medikoo/type.svg
+[cov-url]: https://codecov.io/gh/medikoo/type
+[npm-image]: https://img.shields.io/npm/v/type.svg
+[npm-url]: https://www.npmjs.com/package/type
diff --git a/node_modules/ext/node_modules/type/array-length/coerce.js b/node_modules/ext/node_modules/type/array-length/coerce.js
new file mode 100644
index 0000000..3dbbf97
--- /dev/null
+++ b/node_modules/ext/node_modules/type/array-length/coerce.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var coerceToSafeInteger = require("../safe-integer/coerce");
+
+module.exports = function (value) {
+ value = coerceToSafeInteger(value);
+ if (!value) return value;
+ if (value < 0) return null;
+ return value;
+};
diff --git a/node_modules/ext/node_modules/type/array-length/ensure.js b/node_modules/ext/node_modules/type/array-length/ensure.js
new file mode 100644
index 0000000..2b48ddc
--- /dev/null
+++ b/node_modules/ext/node_modules/type/array-length/ensure.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , coerce = require("./coerce");
+
+module.exports = function (value/*, options*/) {
+ var coerced = coerce(value);
+ if (coerced !== null) return coerced;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name
+ ? "Expected an array length for %n, received %v"
+ : "%v is not an array length";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/array-like/ensure.js b/node_modules/ext/node_modules/type/array-like/ensure.js
new file mode 100644
index 0000000..0d1a9f7
--- /dev/null
+++ b/node_modules/ext/node_modules/type/array-like/ensure.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , is = require("./is");
+
+module.exports = function (value/*, options*/) {
+ if (is(value, arguments[1])) return value;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name
+ ? "Expected an array like for %n, received %v"
+ : "%v is not an array like";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/array-like/is.js b/node_modules/ext/node_modules/type/array-like/is.js
new file mode 100644
index 0000000..7778fed
--- /dev/null
+++ b/node_modules/ext/node_modules/type/array-like/is.js
@@ -0,0 +1,21 @@
+"use strict";
+
+var coerceToArrayLength = require("../array-length/coerce")
+ , isObject = require("../object/is");
+
+module.exports = function (value/*, options*/) {
+ if (!isObject(value)) {
+ var options = arguments[1];
+ if (isObject(options) && options.allowString && typeof value === "string") return true;
+ return false;
+ }
+
+ if (typeof value === "function") return false;
+
+ var length;
+ try { length = value.length; }
+ catch (error) { return false; }
+
+ if (coerceToArrayLength(length) === null) return false;
+ return true;
+};
diff --git a/node_modules/ext/node_modules/type/array/ensure.js b/node_modules/ext/node_modules/type/array/ensure.js
new file mode 100644
index 0000000..19e4599
--- /dev/null
+++ b/node_modules/ext/node_modules/type/array/ensure.js
@@ -0,0 +1,43 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , resolveErrorMessage = require("../lib/resolve-error-message")
+ , toShortString = require("../lib/to-short-string")
+ , ensurePlainFunction = require("../plain-function/ensure")
+ , is = require("./is");
+
+var objHasOwnProperty = Object.prototype.hasOwnProperty, invalidItemsLimit = 3;
+
+module.exports = function (value /*, options*/) {
+ var options = arguments[1];
+ var mainErrorMessage =
+ options && options.name ? "Expected an array for %n, received %v" : "%v is not an array";
+ if (!is(value)) return resolveException(value, mainErrorMessage, options);
+ if (!options) return value;
+
+ var ensureItem = ensurePlainFunction(options.ensureItem, { isOptional: true });
+ if (ensureItem) {
+ var coercedValue = [], invalidItems;
+ for (var index = 0, length = value.length; index < length; ++index) {
+ if (!objHasOwnProperty.call(value, index)) continue;
+ var coercedItem;
+ try {
+ coercedItem = ensureItem(value[index]);
+ } catch (error) {
+ if (!invalidItems) invalidItems = [];
+ if (invalidItems.push(toShortString(value[index])) === invalidItemsLimit) break;
+ }
+ if (invalidItems) continue;
+ coercedValue[index] = coercedItem;
+ }
+ if (invalidItems) {
+ throw new TypeError(
+ resolveErrorMessage(mainErrorMessage, value, options) +
+ ".\n Following items are invalid: " +
+ invalidItems.join(", ")
+ );
+ }
+ return coercedValue;
+ }
+ return value;
+};
diff --git a/node_modules/ext/node_modules/type/array/is.js b/node_modules/ext/node_modules/type/array/is.js
new file mode 100644
index 0000000..13fd8d3
--- /dev/null
+++ b/node_modules/ext/node_modules/type/array/is.js
@@ -0,0 +1,27 @@
+"use strict";
+
+var isPrototype = require("../prototype/is");
+
+var isArray;
+if (typeof Array.isArray === "function") {
+ isArray = Array.isArray;
+} else {
+ var objectToString = Object.prototype.toString, objectTaggedString = objectToString.call([]);
+ isArray = function (value) { return objectToString.call(value) === objectTaggedString; };
+}
+
+module.exports = function (value) {
+ if (!isArray(value)) return false;
+
+ // Sanity check (reject objects which do not expose common Array interface)
+ if (!hasOwnProperty.call(value, "length")) return false;
+ try {
+ if (typeof value.length !== "number") return false;
+ if (typeof value.push !== "function") return false;
+ if (typeof value.splice !== "function") return false;
+ } catch (error) {
+ return false;
+ }
+
+ return !isPrototype(value);
+};
diff --git a/node_modules/ext/node_modules/type/big-int/coerce.js b/node_modules/ext/node_modules/type/big-int/coerce.js
new file mode 100644
index 0000000..a600a20
--- /dev/null
+++ b/node_modules/ext/node_modules/type/big-int/coerce.js
@@ -0,0 +1,13 @@
+"use strict";
+
+var isValue = require("../value/is");
+
+// Sanity BigInt support check
+BigInt(0);
+
+module.exports = function (value) {
+ if (!isValue(value)) return null;
+ if (typeof value === "bigint") return value;
+ try { return BigInt(value); }
+ catch (error) { return null; }
+};
diff --git a/node_modules/ext/node_modules/type/big-int/ensure.js b/node_modules/ext/node_modules/type/big-int/ensure.js
new file mode 100644
index 0000000..319b1b7
--- /dev/null
+++ b/node_modules/ext/node_modules/type/big-int/ensure.js
@@ -0,0 +1,13 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , coerce = require("./coerce");
+
+module.exports = function (value /*, options*/) {
+ var coerced = coerce(value);
+ if (coerced !== null) return coerced;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name ? "Expected bigint for %n, received %v" : "%v is not a bigint";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/constructor/ensure.js b/node_modules/ext/node_modules/type/constructor/ensure.js
new file mode 100644
index 0000000..4f3e846
--- /dev/null
+++ b/node_modules/ext/node_modules/type/constructor/ensure.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , is = require("./is");
+
+module.exports = function (value /*, options*/) {
+ if (is(value)) return value;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name
+ ? "Expected a constructor function for %n, received %v"
+ : "%v is not a constructor function";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/constructor/is.js b/node_modules/ext/node_modules/type/constructor/is.js
new file mode 100644
index 0000000..058a156
--- /dev/null
+++ b/node_modules/ext/node_modules/type/constructor/is.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var isFunction = require("../function/is");
+
+var constructorRe = /^\s*(?:class[\s{/}]|function[\s(])/
+ , functionToString = Function.prototype.toString;
+
+module.exports = function (value) {
+ if (!isFunction(value)) return false;
+ if (!constructorRe.test(functionToString.call(value))) return false;
+ return true;
+};
diff --git a/node_modules/ext/node_modules/type/date/ensure.js b/node_modules/ext/node_modules/type/date/ensure.js
new file mode 100644
index 0000000..0fae4d3
--- /dev/null
+++ b/node_modules/ext/node_modules/type/date/ensure.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , is = require("./is");
+
+module.exports = function (value/*, options*/) {
+ if (is(value)) return value;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name ? "Expected a date for %n, received %v" : "%v is not a date";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/date/is.js b/node_modules/ext/node_modules/type/date/is.js
new file mode 100644
index 0000000..0754085
--- /dev/null
+++ b/node_modules/ext/node_modules/type/date/is.js
@@ -0,0 +1,26 @@
+"use strict";
+
+var isPrototype = require("../prototype/is");
+
+var dateValueOf = Date.prototype.valueOf;
+
+module.exports = function (value) {
+ if (!value) return false;
+
+ try {
+ // Sanity check (reject objects which do not expose common Date interface)
+ if (typeof value.getFullYear !== "function") return false;
+ if (typeof value.getTimezoneOffset !== "function") return false;
+ if (typeof value.setFullYear !== "function") return false;
+
+ // Ensure its native Date object (has [[DateValue]] slot)
+ dateValueOf.call(value);
+ } catch (error) {
+ return false;
+ }
+
+ // Ensure it hosts valid date
+ if (isNaN(value)) return false;
+
+ return !isPrototype(value);
+};
diff --git a/node_modules/ext/node_modules/type/docs/array-length.md b/node_modules/ext/node_modules/type/docs/array-length.md
new file mode 100644
index 0000000..cca7d8a
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/array-length.md
@@ -0,0 +1,27 @@
+# Array length
+
+_number_ primitive that conforms as valid _array length_
+
+## `array-length/coerce`
+
+Follows [`safe-integer/coerce`](safe-integer.md#safe-integercoerce) but returns `null` in place of values which are below `0`
+
+```javascript
+const coerceToArrayLength = require("type/safe-integer/coerce");
+
+coerceToArrayLength("12.95"); // 12
+coerceToArrayLength(9007199254740992); // null
+coerceToArrayLength(null); // null
+```
+
+## `array-length/ensure`
+
+If given argument is an _array length_ coercible value (via [`array-length/coerce`](#array-lengthcoerce)) returns result number.
+Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureArrayLength = require("type/array-length/ensure");
+
+ensureArrayLength(12.93); // "12"
+ensureArrayLength(9007199254740992); // Thrown TypeError: 9007199254740992 is not a valid array length
+```
diff --git a/node_modules/ext/node_modules/type/docs/array-like.md b/node_modules/ext/node_modules/type/docs/array-like.md
new file mode 100644
index 0000000..2a48df8
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/array-like.md
@@ -0,0 +1,33 @@
+# Array Like
+
+_Array-like_ value (any value with `length` property)
+
+## `array-like/is`
+
+Restricted _array-like_ confirmation. Returns true for every value that meets following contraints
+
+- is an _object_ (or with `allowString` option, a _string_)
+- is not a _function_
+- Exposes `length` that meets [`array-length`](array-length.md#array-lengthcoerce) constraints
+
+```javascript
+const isArrayLike = require("type/array-like/is");
+
+isArrayLike([]); // true
+isArrayLike({}); // false
+isArrayLike({ length: 0 }); // true
+isArrayLike("foo"); // false
+isArrayLike("foo", { allowString: true }); // true
+```
+
+## `array-like/ensure`
+
+If given argument is an _array-like_, it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureArrayLike = require("type/array-like/ensure");
+
+ensureArrayLike({ length: 0 }); // { length: 0 }
+ensureArrayLike("foo", { allowString: true }); // "foo"
+ensureArrayLike({}); // Thrown TypeError: null is not an iterable
+```
diff --git a/node_modules/ext/node_modules/type/docs/array.md b/node_modules/ext/node_modules/type/docs/array.md
new file mode 100644
index 0000000..0c6ac4e
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/array.md
@@ -0,0 +1,46 @@
+# Array
+
+_Array_ instance
+
+## `array/is`
+
+Confirms if given object is a native array
+
+```javascript
+const isArray = require("type/array/is");
+
+isArray([]); // true
+isArray({}); // false
+isArray("foo"); // false
+```
+
+## `array/ensure`
+
+If given argument is an array, it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureArray = require("type/array/ensure");
+
+ensureArray(["foo"]); // ["foo"]
+ensureArray("foo"); // Thrown TypeError: foo is not an array
+```
+
+### Confirming on items
+
+Items can be validated by passing `ensureItem` option. Note that in this case:
+
+- A newly created instance of an array with coerced item values is returned
+- Error message lists up to three items which are invalid
+
+```javascript
+const ensureString = require("type/string/ensure");
+
+ensureArray([12], { ensureItem: ensureString }); // ["12"]
+
+/*
+ Below invocation with crash with:
+ TypeError: 23, [object Object], [object Object] is not a valid array.
+ Following items are invalid: [object Object], [object Object]
+*/
+ensureArray([23, {}, {}], { ensureItem: ensureString });
+```
diff --git a/node_modules/ext/node_modules/type/docs/big-int.md b/node_modules/ext/node_modules/type/docs/big-int.md
new file mode 100644
index 0000000..78626fd
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/big-int.md
@@ -0,0 +1,27 @@
+# BigInt
+
+_bigint_ primitive
+
+## `big-int/coerce`
+
+BigInt coercion. If value can be coerced by `BigInt` its result is returned.
+For all other values `null` is returned
+
+```javascript
+const coerceToBigInt = require("type/big-int/coerce");
+
+coerceToBigInt(12); // 12n
+coerceToBigInt(undefined); // null
+```
+
+## `big-int/ensure`
+
+If given argument is a _bigint_ coercible value (via [`big-int/coerce`](#big-intcoerce)) returns result bigint.
+Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureBigInt = require("type/big-int/ensure");
+
+ensureBigInt(12); // 12n
+ensureBigInt(null); // Thrown TypeError: null is not a bigint
+```
diff --git a/node_modules/ext/node_modules/type/docs/constructor.md b/node_modules/ext/node_modules/type/docs/constructor.md
new file mode 100644
index 0000000..172462a
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/constructor.md
@@ -0,0 +1,28 @@
+# Constructor
+
+A _Function_ instance that's a _constructor_ (either regular function or _class_)
+
+## `constructor/is`
+
+Confirms if given object is a constructor function\_
+
+```javascript
+const isConstructor = require("type/constructor/is");
+
+isConstructor(function () {}); // true
+isConstructor(() => {}); // false
+isConstructor(class {}); // true
+isConstructor("foo"); // false
+```
+
+## `constructor/ensure`
+
+If given argument is a _constructor function_, it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureConstructor = require("type/constructor/ensure");
+
+const fn = function () {};
+ensureConstructor(fn); // fn
+ensureConstructor(() => {}); // Thrown TypeError: () => {} is not a constructor function
+```
diff --git a/node_modules/ext/node_modules/type/docs/date.md b/node_modules/ext/node_modules/type/docs/date.md
new file mode 100644
index 0000000..98d3654
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/date.md
@@ -0,0 +1,28 @@
+# Date
+
+_Date_ instance
+
+## `date/is`
+
+Confirms if given object is a native date, and is not an _Invalid Date_
+
+```javascript
+const isDate = require("type/date/is");
+
+isDate(new Date()); // true
+isDate(new Date("Invalid date")); // false
+isDate(Date.now()); // false
+isDate("foo"); // false
+```
+
+## `date/ensure`
+
+If given argument is a date object, it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureDate = require("type/date/ensure");
+
+const date = new Date();
+ensureDate(date); // date
+ensureDate(123123); // Thrown TypeError: 123123 is not a date object
+```
diff --git a/node_modules/ext/node_modules/type/docs/ensure.md b/node_modules/ext/node_modules/type/docs/ensure.md
new file mode 100644
index 0000000..c3a9527
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/ensure.md
@@ -0,0 +1,40 @@
+# `ensure(validationDatum1[, ...validationDatumN[, options]])`
+
+Provides a complete cumulated input validation for an API endpoint. Validates multiple input arguments and consolidates eventual errors into one.
+
+## Arguments
+
+### `validationDatum1[, ...validationDatumN]`
+
+For each argument to be validated a `validationDatum` of following stucture should be defined:
+
+```javascript
+[argumentName, inputValue, ensureFunction, (options = {})];
+```
+
+- `argumentName` - Name of validated argument (used for meaningful error messaging)
+- `inputValue` - An argument value as passed to function
+- `ensureFunction` - An `ensureX` function with which argument should be validated (e.g. if we're after string, then we need [string/ensure](string.md#stringensure))
+- `options` - Optional, extra options to be passed to `ensureX` function
+
+### `[options]`
+
+Eventual options be passed to underlying `ensureX` functions. If custom error constructor is passed with an `Error` option, then cumulated error is created with this constructor.
+
+## Usage example
+
+```javascript
+const ensure = require("type/ensure");
+const ensureString = require("type/string/ensure");
+const ensureNaturalNumber = require("type/natural-number/ensure");
+
+const resolveRepositoryIssue = (repoName, issueNumber) => {
+ // Validate input
+ [repoName, issueNumber] = ensure(
+ ["repoName", repoName, ensureString],
+ ["issueNumber", issueNumber, ensureNaturalNumber],
+ { Error: UserError }
+ );
+ // ... logic
+};
+```
diff --git a/node_modules/ext/node_modules/type/docs/error.md b/node_modules/ext/node_modules/type/docs/error.md
new file mode 100644
index 0000000..c779333
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/error.md
@@ -0,0 +1,26 @@
+# Error
+
+_Error_ instance
+
+## `error/is`
+
+Confirms if given object is a native error object
+
+```javascript
+const isError = require("type/error/is");
+
+isError(new Error()); // true
+isError({ message: "Fake error" }); // false
+```
+
+## `error/ensure`
+
+If given argument is an error object, it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureError = require("type/error/ensure");
+
+const someError = new Error("Some error");
+ensureError(someError); // someError
+ensureError({ message: "Fake error" }); // Thrown TypeError: [object Object] is not an error object
+```
diff --git a/node_modules/ext/node_modules/type/docs/finite.md b/node_modules/ext/node_modules/type/docs/finite.md
new file mode 100644
index 0000000..68786ca
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/finite.md
@@ -0,0 +1,27 @@
+# Finite Number
+
+Finite _number_ primitive
+
+## `finite/coerce`
+
+Follows [`number/coerce`](number.md#numbercoerce) additionally rejecting `Infinity` and `-Infinity` values (`null` is returned if given values coerces to them)
+
+```javascript
+const coerceToFinite = require("type/finite/coerce");
+
+coerceToFinite("12"); // 12
+coerceToFinite(Infinity); // null
+coerceToFinite(null); // null
+```
+
+## `finite/ensure`
+
+If given argument is a finite number coercible value (via [`finite/coerce`](#finitecoerce)) returns result number.
+Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureFinite = require("type/finite/ensure");
+
+ensureFinite(12); // "12"
+ensureFinite(null); // Thrown TypeError: null is not a finite number
+```
diff --git a/node_modules/ext/node_modules/type/docs/function.md b/node_modules/ext/node_modules/type/docs/function.md
new file mode 100644
index 0000000..23f3827
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/function.md
@@ -0,0 +1,28 @@
+# Function
+
+_Function_ instance
+
+## `function/is`
+
+Confirms if given object is a native function
+
+```javascript
+const isFunction = require("type/function/is");
+
+isFunction(function () {}); // true
+isFunction(() => {}); // true
+isFunction(class {}); // true
+isFunction("foo"); // false
+```
+
+## `function/ensure`
+
+If given argument is a function object, it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureFunction = require("type/function/ensure");
+
+const fn = function () {};
+ensureFunction(fn); // fn
+ensureFunction(/foo/); // Thrown TypeError: /foo/ is not a function
+```
diff --git a/node_modules/ext/node_modules/type/docs/integer.md b/node_modules/ext/node_modules/type/docs/integer.md
new file mode 100644
index 0000000..9260a46
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/integer.md
@@ -0,0 +1,27 @@
+# Integer Number
+
+Integer _number_ primitive
+
+## `integer/coerce`
+
+Follows [`finite/coerce`](finite.md#finitecoerce) additionally stripping decimal part from the number
+
+```javascript
+const coerceToInteger = require("type/integer/coerce");
+
+coerceToInteger("12.95"); // 12
+coerceToInteger(Infinity); // null
+coerceToInteger(null); // null
+```
+
+## `integer/ensure`
+
+If given argument is an integer coercible value (via [`integer/coerce`](#integercoerce)) returns result number.
+Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureInteger = require("type/integer/ensure");
+
+ensureInteger(12.93); // "12"
+ensureInteger(null); // Thrown TypeError: null is not an integer
+```
diff --git a/node_modules/ext/node_modules/type/docs/iterable.md b/node_modules/ext/node_modules/type/docs/iterable.md
new file mode 100644
index 0000000..862e6c8
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/iterable.md
@@ -0,0 +1,65 @@
+# Iterable
+
+Value which implements _iterable_ protocol
+
+## `iterable/is`
+
+Confirms if given object is an _iterable_ and is not a _string_ (unless `allowString` option is passed)
+
+```javascript
+const isIterable = require("type/iterable/is");
+
+isIterable([]); // true
+isIterable({}); // false
+isIterable("foo"); // false
+isIterable("foo", { allowString: true }); // true
+```
+
+Supports also `denyEmpty` option
+
+```javascript
+isIterable([], { denyEmpty: true }); // false
+isIterable(["foo"], { denyEmpty: true }); // true
+```
+
+## `iterable/ensure`
+
+If given argument is an _iterable_, it is returned back. Otherwise `TypeError` is thrown.
+By default _string_ primitives are rejected unless `allowString` option is passed.
+
+```javascript
+const ensureIterable = require("type/iterable/ensure");
+
+ensureIterable([]); // []
+ensureIterable("foo", { allowString: true }); // "foo"
+ensureIterable({}); // Thrown TypeError: null is not expected iterable
+```
+
+### Denying empty iterables
+
+Pass `denyEmpty` option to require non empty iterables
+
+```javascript
+ensureIterable([], { denyEmpty: true }); // Thrown TypeError: [] is not expected iterable
+```
+
+### Confirming on items
+
+Items can be validated by passing `ensureItem` option. Note that in this case:
+
+- A newly created instance of array with coerced values is returned
+- Error message lists up to three invalid items
+
+```javascript
+const ensureString = require("type/string/ensure");
+
+ensureIterable(new Set(["foo", 12]), { ensureItem: ensureString }); // ["foo", "12"]
+
+/*
+ Below invocation with crash with:
+ TypeError: [object Set] is not expected iterable value.
+ Following items are invalid:
+ - [object Object]
+*/
+ensureIterable(new Set(["foo", {}]), { ensureItem: ensureString });
+```
diff --git a/node_modules/ext/node_modules/type/docs/map.md b/node_modules/ext/node_modules/type/docs/map.md
new file mode 100644
index 0000000..c128022
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/map.md
@@ -0,0 +1,27 @@
+# Map
+
+_Map_ instance
+
+## `map/is`
+
+Confirms if given object is a native _map_
+
+```javascript
+const isMap = require("type/map/is");
+
+isMap(new Map()); // true
+isMap(new Set()); // false
+isMap({}); // false
+```
+
+## `map/ensure`
+
+If given argument is a _map_, it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureMap = require("type/map/ensure");
+
+const map = new Map();
+ensureMap(map); // map
+eensureMap({}); // Thrown TypeError: [object Object] is not a map
+```
diff --git a/node_modules/ext/node_modules/type/docs/natural-number.md b/node_modules/ext/node_modules/type/docs/natural-number.md
new file mode 100644
index 0000000..c91ee16
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/natural-number.md
@@ -0,0 +1,27 @@
+# Natural Number
+
+Natural _number_ primitive
+
+## `natural-number/coerce`
+
+Follows [`integer/coerce`](integer.md#integercoerce) but returns `null` for values below `0`
+
+```javascript
+const coerceToNaturalNumber = require("type/natural-number/coerce");
+
+coerceToNaturalNumber("12.95"); // 12
+coerceToNaturalNumber(-120); // null
+coerceToNaturalNumber(null); // null
+```
+
+## `natural-number/ensure`
+
+If given argument is a natural number coercible value (via [`natural-number/coerce`](#natural-numbercoerce)) returns result number.
+Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureNaturalNumber = require("type/natural-number/ensure");
+
+ensureNaturalNumber(12.93); // "12"
+ensureNaturalNumber(-230); // Thrown TypeError: null is not a natural number
+```
diff --git a/node_modules/ext/node_modules/type/docs/number.md b/node_modules/ext/node_modules/type/docs/number.md
new file mode 100644
index 0000000..5f4dfa9
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/number.md
@@ -0,0 +1,33 @@
+# Number
+
+_number_ primitive
+
+## `number/coerce`
+
+Restricted number coercion. Returns number presentation for every value that follows below constraints
+
+- is implicitly coercible to number
+- is neither `null` nor `undefined`
+- is not `NaN` and doesn't coerce to `NaN`
+
+For all other values `null` is returned
+
+```javascript
+const coerceToNumber = require("type/number/coerce");
+
+coerceToNumber("12"); // 12
+coerceToNumber({}); // null
+coerceToNumber(null); // null
+```
+
+## `number/ensure`
+
+If given argument is a number coercible value (via [`number/coerce`](#numbercoerce)) returns result number.
+Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureNumber = require("type/number/ensure");
+
+ensureNumber(12); // "12"
+ensureNumber(null); // Thrown TypeError: null is not a number
+```
diff --git a/node_modules/ext/node_modules/type/docs/object.md b/node_modules/ext/node_modules/type/docs/object.md
new file mode 100644
index 0000000..ed43b1f
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/object.md
@@ -0,0 +1,28 @@
+# Object
+
+_Object_, any non-primitive value
+
+## `object/is`
+
+Confirms if passed value is an object
+
+```javascript
+const isObject = require("type/object/is");
+
+isObject({}); // true
+isObject(true); // false
+isObject(null); // false
+```
+
+## `object/ensure`
+
+If given argument is an object, it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureObject = require("type/object/ensure");
+
+const obj = {};
+
+ensureObject(obj); // obj
+ensureString(null); // Thrown TypeError: null is not an object
+```
diff --git a/node_modules/ext/node_modules/type/docs/plain-function.md b/node_modules/ext/node_modules/type/docs/plain-function.md
new file mode 100644
index 0000000..e3a8895
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/plain-function.md
@@ -0,0 +1,28 @@
+# Plain Function
+
+A _Function_ instance that is not a _Class_
+
+## `plain-function/is`
+
+Confirms if given object is a _plain function_
+
+```javascript
+const isPlainFunction = require("type/plain-function/is");
+
+isPlainFunction(function () {}); // true
+isPlainFunction(() => {}); // true
+isPlainFunction(class {}); // false
+isPlainFunction("foo"); // false
+```
+
+## `plain-function/ensure`
+
+If given argument is a _plain function_ object, it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensurePlainFunction = require("type/function/ensure");
+
+const fn = function () {};
+ensurePlainFunction(fn); // fn
+ensurePlainFunction(class {}); // Thrown TypeError: class is not a plain function
+```
diff --git a/node_modules/ext/node_modules/type/docs/plain-object.md b/node_modules/ext/node_modules/type/docs/plain-object.md
new file mode 100644
index 0000000..ce3f522
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/plain-object.md
@@ -0,0 +1,69 @@
+# Plain Object
+
+A _plain object_
+
+- Inherits directly from `Object.prototype` or `null`
+- Is not a constructor's `prototype` property
+
+## `plain-object/is`
+
+Confirms if given object is a _plain object_
+
+```javascript
+const isPlainObject = require("type/plain-object/is");
+
+isPlainObject({}); // true
+isPlainObject(Object.create(null)); // true
+isPlainObject([]); // false
+```
+
+## `plain-object/ensure`
+
+If given argument is a plain object it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensurePlainObject = require("type/plain-object/ensure");
+
+ensurePlainObject({}); // {}
+ensurePlainObject("foo"); // Thrown TypeError: foo is not a plain object
+```
+
+### Confirming on keys
+
+Keys can be validated by passing `allowedKeys` option. Note that in this case:
+
+- Error message lists up to three invalid keys
+
+```javascript
+const allowedKeys = ["foo"];
+
+ensurePlainObject({}, { allowedKeys }); // {}
+ensurePlainObject({ foo: "bar" }, { allowedKeys }); // { foo: 'bar' }
+
+/*
+ Below invocation with crash with:
+ TypeError: [object Object] is not a valid plain object.
+ Following keys are unexpected: lorem, ipsum
+*/
+ensurePlainObject({ foo: "bar", lorem: 1, ipsum: 2 }, { allowedKeys });
+```
+
+### Confirming on property values
+
+Property values can be validated by passing `ensurePropertyValue` option. Note that in this case:
+
+- A newly created instance of plain object with coerced values is returned
+- Error message lists up to three keys that contain invalid values
+
+```javascript
+const ensureString = require("type/string/ensure");
+
+ensurePlainObject({ foo: 12 }, { ensurePropertyValue: ensureString }); // { foo: '12' }
+
+/*
+ Below invocation with crash with:
+ TypeError: [object Object] is not a valid plain object.
+ Valuees for following keys are invalid: lorem, ipsum
+*/
+ensurePlainObject({ foo: 23, lorem: {}, ipsum: {} }, { ensurePropertyValue: ensureString });
+```
diff --git a/node_modules/ext/node_modules/type/docs/promise.md b/node_modules/ext/node_modules/type/docs/promise.md
new file mode 100644
index 0000000..ce38794
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/promise.md
@@ -0,0 +1,27 @@
+# Promise
+
+_Promise_ instance
+
+## `promise/is`
+
+Confirms if given object is a native _promise_
+
+```javascript
+const isPromise = require("type/promise/is");
+
+isPromise(Promise.resolve()); // true
+isPromise({ then: () => {} }); // false
+isPromise({}); // false
+```
+
+## `promise/ensure`
+
+If given argument is a promise, it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensurePromise = require("type/promise/ensure");
+
+const promise = Promise.resolve();
+ensurePromise(promise); // promise
+eensurePromise({}); // Thrown TypeError: [object Object] is not a promise
+```
diff --git a/node_modules/ext/node_modules/type/docs/prototype.md b/node_modules/ext/node_modules/type/docs/prototype.md
new file mode 100644
index 0000000..926c256
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/prototype.md
@@ -0,0 +1,15 @@
+# Prototype
+
+Some constructor's `prototype` property
+
+## `prototype/is`
+
+Confirms if given object serves as a _prototype_ property
+
+```javascript
+const isPrototype = require("type/prototype/is");
+
+isPrototype({}); // false
+isPrototype(Object.prototype); // true
+isPrototype(Array.prototype); // true
+```
diff --git a/node_modules/ext/node_modules/type/docs/reg-exp.md b/node_modules/ext/node_modules/type/docs/reg-exp.md
new file mode 100644
index 0000000..00d081c
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/reg-exp.md
@@ -0,0 +1,26 @@
+# RegExp
+
+_RegExp_ instance
+
+## `reg-exp/is`
+
+Confirms if given object is a native regular expression object
+
+```javascript
+const isRegExp = require("type/reg-exp/is");
+
+isRegExp(/foo/);
+isRegExp({}); // false
+isRegExp("foo"); // false
+```
+
+## `reg-exp/ensure`
+
+If given argument is a regular expression object, it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureRegExp = require("type/reg-exp/ensure");
+
+ensureRegExp(/foo/); // /foo/
+ensureRegExp("foo"); // Thrown TypeError: null is not a regular expression object
+```
diff --git a/node_modules/ext/node_modules/type/docs/safe-integer.md b/node_modules/ext/node_modules/type/docs/safe-integer.md
new file mode 100644
index 0000000..cf4bb1c
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/safe-integer.md
@@ -0,0 +1,27 @@
+# Safe Integer Number
+
+Safe integer _number_ primitive
+
+## `safe-integer/coerce`
+
+Follows [`integer/coerce`](integer.md#integercoerce) but returns `null` in place of values which are beyond `Number.MIN_SAFE_INTEGER` and `Number.MAX_SAFE_INTEGER` range.
+
+```javascript
+const coerceToSafeInteger = require("type/safe-integer/coerce");
+
+coerceToInteger("12.95"); // 12
+coerceToInteger(9007199254740992); // null
+coerceToInteger(null); // null
+```
+
+## `safe-integer/ensure`
+
+If given argument is a safe integer coercible value (via [`safe-integer/coerce`](#safe-integercoerce)) returns result number.
+Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureSafeInteger = require("type/safe-integer/ensure");
+
+ensureSafeInteger(12.93); // "12"
+ensureSafeInteger(9007199254740992); // Thrown TypeError: null is not a safe integer
+```
diff --git a/node_modules/ext/node_modules/type/docs/set.md b/node_modules/ext/node_modules/type/docs/set.md
new file mode 100644
index 0000000..33f8876
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/set.md
@@ -0,0 +1,27 @@
+# Set
+
+_Set_ instance
+
+## `set/is`
+
+Confirms if given object is a native set\_
+
+```javascript
+const isSet = require("type/set/is");
+
+isSet(new Set()); // true
+isSet(new Map()); // false
+isSet({}); // false
+```
+
+## `Set/ensure`
+
+If given argument is a _set_, it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureSet = require("type/set/ensure");
+
+const set = new Set();
+ensureSet(set); // set
+eensureSet({}); // Thrown TypeError: [object Object] is not a set
+```
diff --git a/node_modules/ext/node_modules/type/docs/string.md b/node_modules/ext/node_modules/type/docs/string.md
new file mode 100644
index 0000000..051b4a3
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/string.md
@@ -0,0 +1,32 @@
+# String
+
+_string_ primitive
+
+## `string/coerce`
+
+Restricted string coercion. Returns string presentation for every value that follows below constraints
+
+- is implicitly coercible to string
+- is neither`null` nor `undefined`
+- its `toString` method is not `Object.prototype.toString`
+
+For all other values `null` is returned
+
+```javascript
+const coerceToString = require("type/string/coerce");
+
+coerceToString(12); // "12"
+coerceToString(undefined); // null
+```
+
+## `string/ensure`
+
+If given argument is a string coercible value (via [`string/coerce`](#stringcoerce)) returns result string.
+Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureString = require("type/string/ensure");
+
+ensureString(12); // "12"
+ensureString(null); // Thrown TypeError: null is not a string
+```
diff --git a/node_modules/ext/node_modules/type/docs/thenable.md b/node_modules/ext/node_modules/type/docs/thenable.md
new file mode 100644
index 0000000..1bdf92d
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/thenable.md
@@ -0,0 +1,27 @@
+# Thenable
+
+_Thenable_ object (an object with `then` method)
+
+## `thenable/is`
+
+Confirms if given object is a _thenable_
+
+```javascript
+const isThenable = require("type/thenable/is");
+
+isThenable(Promise.resolve()); // true
+isThenable({ then: () => {} }); // true
+isThenable({}); // false
+```
+
+## `thenable/ensure`
+
+If given argument is a _thenable_ object, it is returned back. Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureThenable = require("type/thenable/ensure");
+
+const promise = Promise.resolve();
+ensureThenable(promise); // promise
+ensureThenable({}); // Thrown TypeError: [object Object] is not a thenable object
+```
diff --git a/node_modules/ext/node_modules/type/docs/time-value.md b/node_modules/ext/node_modules/type/docs/time-value.md
new file mode 100644
index 0000000..98e9e8e
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/time-value.md
@@ -0,0 +1,27 @@
+# Time value
+
+_number_ primitive which is a valid _time value_ (as used internally in _Date_ instances)
+
+## `time-value/coerce`
+
+Follows [`integer/coerce`](integer.md#integercoerce) but returns `null` in place of values which go beyond 100 000 0000 days from unix epoch
+
+```javascript
+const coerceToTimeValue = require("type/time-value/coerce");
+
+coerceToTimeValue(12312312); // true
+coerceToTimeValue(Number.MAX_SAFE_INTEGER); // false
+coerceToTimeValue("foo"); // false
+```
+
+## `time-value/ensure`
+
+If given argument is a _time value_ coercible value (via [`time-value/coerce`](#time-valuecoerce)) returns result number.
+Otherwise `TypeError` is thrown.
+
+```javascript
+const ensureTimeValue = require("type/time-value/ensure");
+
+ensureTimeValue(12.93); // "12"
+ensureTimeValue(Number.MAX_SAFE_INTEGER); // Thrown TypeError: null is not a natural number
+```
diff --git a/node_modules/ext/node_modules/type/docs/value.md b/node_modules/ext/node_modules/type/docs/value.md
new file mode 100644
index 0000000..1310609
--- /dev/null
+++ b/node_modules/ext/node_modules/type/docs/value.md
@@ -0,0 +1,27 @@
+# Value
+
+_Value_, any value that's neither `null` nor `undefined` .
+
+## `value/is`
+
+Confirms whether passed argument is a _value_
+
+```javascript
+const isValue = require("type/value/is");
+
+isValue({}); // true
+isValue(null); // false
+```
+
+## `value/ensure`
+
+Ensures if given argument is a _value_. If it's a value it is returned back, if not `TypeError` is thrown
+
+```javascript
+const ensureValue = require("type/value/ensure");
+
+const obj = {};
+
+ensureValue(obj); // obj
+ensureValue(null); // Thrown TypeError: Cannot use null
+```
diff --git a/node_modules/ext/node_modules/type/ensure.js b/node_modules/ext/node_modules/type/ensure.js
new file mode 100644
index 0000000..7fe8220
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ensure.js
@@ -0,0 +1,51 @@
+"use strict";
+
+var isArray = require("./array/is")
+ , toShortString = require("./lib/to-short-string");
+
+var objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+var assign = function (target, source) {
+ for (var key in source) {
+ if (objPropertyIsEnumerable.call(source, key)) target[key] = source[key];
+ }
+};
+
+module.exports = function (validationDatum1/*, ...validationDatumN, options */) {
+ var validationData = [validationDatum1];
+ var globalOptions;
+ if (arguments.length > 1) {
+ var hasOptions = !isArray(arguments[arguments.length - 1]);
+ if (hasOptions) globalOptions = arguments[arguments.length - 1];
+ var lastDatumIndex = hasOptions ? arguments.length - 2 : arguments.length - 1;
+ for (var i = 1; i <= lastDatumIndex; ++i) validationData.push(arguments[i]);
+ }
+ var result = [], errors;
+ for (var j = 0; j < validationData.length; ++j) {
+ var validationDatum = validationData[j];
+ var options = { name: validationDatum[0] };
+ if (globalOptions) assign(options, globalOptions);
+ if (validationDatum[3]) assign(options, validationDatum[3]);
+ var resultItem;
+ if (typeof validationDatum[2] !== "function") {
+ throw new TypeError(toShortString(validationDatum[2]) + " is not a function");
+ }
+ try {
+ resultItem = validationDatum[2](validationDatum[1], options);
+ } catch (error) {
+ if (!errors) errors = [];
+ errors.push(error);
+ }
+ if (errors) continue;
+ result.push(resultItem);
+ }
+ if (!errors) return result;
+
+ if (errors.length === 1) throw errors[0];
+ var ErrorConstructor = (globalOptions && globalOptions.Error) || TypeError;
+ var errorMessage = "Approached following errors:";
+ for (var k = 0; k < errors.length; ++k) {
+ errorMessage += "\n - " + errors[k].message.split("\n").join("\n ");
+ }
+ throw new ErrorConstructor(errorMessage);
+};
diff --git a/node_modules/ext/node_modules/type/error/ensure.js b/node_modules/ext/node_modules/type/error/ensure.js
new file mode 100644
index 0000000..8b28d85
--- /dev/null
+++ b/node_modules/ext/node_modules/type/error/ensure.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , is = require("./is");
+
+module.exports = function (value/*, options*/) {
+ if (is(value)) return value;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name ? "Expected an error for %n, received %v" : "%v is not an error";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/error/is.js b/node_modules/ext/node_modules/type/error/is.js
new file mode 100644
index 0000000..bf04c80
--- /dev/null
+++ b/node_modules/ext/node_modules/type/error/is.js
@@ -0,0 +1,45 @@
+"use strict";
+
+var isPrototype = require("../prototype/is")
+ , isPlainObject = require("../plain-object/is");
+
+var objectToString = Object.prototype.toString;
+
+// Recognize host specific errors (e.g. DOMException)
+var errorTaggedStringRe = /^\[object .*(?:Error|Exception)\]$/
+ , errorNameRe = /^[^\s]*(?:Error|Exception)$/;
+
+module.exports = function (value) {
+ if (!value) return false;
+
+ var name;
+ // Sanity check (reject objects which do not expose common Error interface)
+ try {
+ name = value.name;
+ if (typeof name !== "string") return false;
+ if (typeof value.message !== "string") return false;
+ } catch (error) {
+ return false;
+ }
+
+ // Ensure its a native-like Error object
+ // (has [[ErrorData]] slot, or was created to resemble one)
+ // Note: It's not a 100% bulletproof check of confirming that as:
+ // - In ES2015+ string tag can be overriden via Symbol.toStringTag property
+ // - Host errors do not share native error tag. Still we rely on assumption that
+ // tag for each error will end either with `Error` or `Exception` string
+ // - In pre ES2015 era, no custom errors will share the error tag.
+ if (!errorTaggedStringRe.test(objectToString.call(value))) {
+ // Definitely not an ES2015 error instance, but could still be an error
+ // (created via e.g. CustomError.prototype = Object.create(Error.prototype))
+ try {
+ if (name !== value.constructor.name) return false;
+ } catch (error) {
+ return false;
+ }
+ if (!errorNameRe.test(name)) return false;
+ if (isPlainObject(value)) return false;
+ }
+
+ return !isPrototype(value);
+};
diff --git a/node_modules/ext/node_modules/type/finite/coerce.js b/node_modules/ext/node_modules/type/finite/coerce.js
new file mode 100644
index 0000000..a3783be
--- /dev/null
+++ b/node_modules/ext/node_modules/type/finite/coerce.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var coerceToNumber = require("../number/coerce");
+
+module.exports = function (value) {
+ value = coerceToNumber(value);
+ return isFinite(value) ? value : null;
+};
diff --git a/node_modules/ext/node_modules/type/finite/ensure.js b/node_modules/ext/node_modules/type/finite/ensure.js
new file mode 100644
index 0000000..aac96be
--- /dev/null
+++ b/node_modules/ext/node_modules/type/finite/ensure.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , coerce = require("./coerce");
+
+module.exports = function (value/*, options*/) {
+ var coerced = coerce(value);
+ if (coerced !== null) return coerced;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name
+ ? "Expected a finite number for %n, received %v"
+ : "%v is not a finite number";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/function/ensure.js b/node_modules/ext/node_modules/type/function/ensure.js
new file mode 100644
index 0000000..d133701
--- /dev/null
+++ b/node_modules/ext/node_modules/type/function/ensure.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , is = require("./is");
+
+module.exports = function (value/*, options*/) {
+ if (is(value)) return value;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name
+ ? "Expected a function for %n, received %v"
+ : "%v is not a function";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/function/is.js b/node_modules/ext/node_modules/type/function/is.js
new file mode 100644
index 0000000..981990a
--- /dev/null
+++ b/node_modules/ext/node_modules/type/function/is.js
@@ -0,0 +1,19 @@
+"use strict";
+
+var isPrototype = require("../prototype/is");
+
+module.exports = function (value) {
+ if (typeof value !== "function") return false;
+
+ if (!hasOwnProperty.call(value, "length")) return false;
+
+ try {
+ if (typeof value.length !== "number") return false;
+ if (typeof value.call !== "function") return false;
+ if (typeof value.apply !== "function") return false;
+ } catch (error) {
+ return false;
+ }
+
+ return !isPrototype(value);
+};
diff --git a/node_modules/ext/node_modules/type/integer/coerce.js b/node_modules/ext/node_modules/type/integer/coerce.js
new file mode 100644
index 0000000..cba5e17
--- /dev/null
+++ b/node_modules/ext/node_modules/type/integer/coerce.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var coerceToFinite = require("../finite/coerce");
+
+var abs = Math.abs, floor = Math.floor;
+
+module.exports = function (value) {
+ value = coerceToFinite(value);
+ if (!value) return value;
+ return (value > 0 ? 1 : -1) * floor(abs(value));
+};
diff --git a/node_modules/ext/node_modules/type/integer/ensure.js b/node_modules/ext/node_modules/type/integer/ensure.js
new file mode 100644
index 0000000..df1a975
--- /dev/null
+++ b/node_modules/ext/node_modules/type/integer/ensure.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , coerce = require("./coerce");
+
+module.exports = function (value/*, options*/) {
+ var coerced = coerce(value);
+ if (coerced !== null) return coerced;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name
+ ? "Expected an integer for %n, received %v"
+ : "%v is not an integer";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/iterable/ensure.js b/node_modules/ext/node_modules/type/iterable/ensure.js
new file mode 100644
index 0000000..b1a2489
--- /dev/null
+++ b/node_modules/ext/node_modules/type/iterable/ensure.js
@@ -0,0 +1,49 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , resolveErrorMessage = require("../lib/resolve-error-message")
+ , toShortString = require("../lib/to-short-string")
+ , ensurePlainFunction = require("../plain-function/ensure")
+ , is = require("./is");
+
+var invalidItemsLimit = 3;
+
+module.exports = function (value/*, options*/) {
+ var options = arguments[1];
+ var mainErrorMessage =
+ options && options.name
+ ? "Expected an iterable for %n, received %v"
+ : "%v is not expected iterable";
+ if (!is(value, options)) return resolveException(value, mainErrorMessage, options);
+ if (!options) return value;
+
+ var ensureItem = ensurePlainFunction(options.ensureItem, { isOptional: true });
+ if (ensureItem) {
+ var coercedValue = [];
+ var iterator = value[Symbol.iterator]();
+ var item, invalidItems;
+ while (!(item = iterator.next()).done) {
+ var newItemValue;
+ try {
+ newItemValue = ensureItem(item.value);
+ } catch (error) {
+ if (!invalidItems) invalidItems = [];
+ if (invalidItems.push(item.value) === invalidItemsLimit) break;
+ }
+ if (invalidItems) continue;
+ coercedValue.push(newItemValue);
+ }
+ if (invalidItems) {
+ var errorMessage =
+ resolveErrorMessage(mainErrorMessage, value, options) +
+ ".\n Following items are invalid:";
+ for (var i = 0; i < invalidItems.length; ++i) {
+ errorMessage += "\n - " + toShortString(invalidItems[i]);
+ }
+ throw new TypeError(errorMessage);
+ }
+ return coercedValue;
+ }
+
+ return value;
+};
diff --git a/node_modules/ext/node_modules/type/iterable/is.js b/node_modules/ext/node_modules/type/iterable/is.js
new file mode 100644
index 0000000..d35408c
--- /dev/null
+++ b/node_modules/ext/node_modules/type/iterable/is.js
@@ -0,0 +1,32 @@
+// Polyfills friendly, therefore ES5 syntax
+
+"use strict";
+
+var isObject = require("../object/is");
+
+var iteratorSymbol = Symbol.iterator;
+
+if (!iteratorSymbol) {
+ throw new Error("Cannot initialize iterator/is due to Symbol.iterator not being implemented");
+}
+
+module.exports = function (value/*, options*/) {
+ var options = arguments[1];
+ if (!isObject(value)) {
+ if (!isObject(options) || !options.allowString || typeof value !== "string") return false;
+ }
+ try {
+ if (typeof value[iteratorSymbol] !== "function") return false;
+ } catch (error) {
+ return false;
+ }
+ if (!options) return true;
+ if (options.denyEmpty) {
+ try {
+ if (value[iteratorSymbol]().next().done) return false;
+ } catch (error) {
+ return false;
+ }
+ }
+ return true;
+};
diff --git a/node_modules/ext/node_modules/type/lib/ensure/min.js b/node_modules/ext/node_modules/type/lib/ensure/min.js
new file mode 100644
index 0000000..df878bd
--- /dev/null
+++ b/node_modules/ext/node_modules/type/lib/ensure/min.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var resolveException = require("../resolve-exception");
+
+module.exports = function (value, coerced, options) {
+ if (coerced >= options.min) return coerced;
+ var errorMessage =
+ options && options.name
+ ? "Expected %n to be greater or equal " + options.min + ", received %v"
+ : "%v is not greater or equal " + options.min;
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/lib/is-to-string-tag-supported.js b/node_modules/ext/node_modules/type/lib/is-to-string-tag-supported.js
new file mode 100644
index 0000000..254d8b3
--- /dev/null
+++ b/node_modules/ext/node_modules/type/lib/is-to-string-tag-supported.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = typeof Symbol === "function" && typeof Symbol.toStringTag === "symbol";
diff --git a/node_modules/ext/node_modules/type/lib/resolve-error-message.js b/node_modules/ext/node_modules/type/lib/resolve-error-message.js
new file mode 100644
index 0000000..3cb000b
--- /dev/null
+++ b/node_modules/ext/node_modules/type/lib/resolve-error-message.js
@@ -0,0 +1,52 @@
+"use strict";
+
+var stringCoerce = require("../string/coerce")
+ , toShortString = require("./to-short-string");
+
+module.exports = function (errorMessage, value, inputOptions) {
+ if (inputOptions && inputOptions.errorMessage) {
+ errorMessage = stringCoerce(inputOptions.errorMessage);
+ }
+
+ var valueInsertIndex = errorMessage.indexOf("%v");
+ var valueToken = valueInsertIndex > -1 ? toShortString(value) : null;
+ if (inputOptions && inputOptions.name) {
+ var nameInsertIndex = errorMessage.indexOf("%n");
+ if (nameInsertIndex > -1) {
+ if (valueInsertIndex > -1) {
+ var firstToken, secondToken, firstInsertIndex, secondInsertIndex;
+ if (nameInsertIndex > valueInsertIndex) {
+ firstToken = valueToken;
+ firstInsertIndex = valueInsertIndex;
+ secondToken = inputOptions.name;
+ secondInsertIndex = nameInsertIndex;
+ } else {
+ firstToken = inputOptions.name;
+ firstInsertIndex = nameInsertIndex;
+ secondToken = valueToken;
+ secondInsertIndex = valueInsertIndex;
+ }
+ return (
+ errorMessage.slice(0, firstInsertIndex) +
+ firstToken +
+ errorMessage.slice(firstInsertIndex + 2, secondInsertIndex) +
+ secondToken +
+ errorMessage.slice(secondInsertIndex + 2)
+ );
+ }
+ return (
+ errorMessage.slice(0, nameInsertIndex) +
+ inputOptions.name +
+ errorMessage.slice(nameInsertIndex + 2)
+ );
+ }
+ }
+ if (valueInsertIndex > -1) {
+ return (
+ errorMessage.slice(0, valueInsertIndex) +
+ valueToken +
+ errorMessage.slice(valueInsertIndex + 2)
+ );
+ }
+ return errorMessage;
+};
diff --git a/node_modules/ext/node_modules/type/lib/resolve-exception.js b/node_modules/ext/node_modules/type/lib/resolve-exception.js
new file mode 100644
index 0000000..6c99286
--- /dev/null
+++ b/node_modules/ext/node_modules/type/lib/resolve-exception.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var isValue = require("../value/is")
+ , resolveErrorMessage = require("./resolve-error-message");
+
+module.exports = function (value, defaultMessage, inputOptions) {
+ if (inputOptions && !isValue(value)) {
+ if ("default" in inputOptions) return inputOptions["default"];
+ if (inputOptions.isOptional) return null;
+ }
+ var ErrorConstructor = (inputOptions && inputOptions.Error) || TypeError;
+ var error = new ErrorConstructor(resolveErrorMessage(defaultMessage, value, inputOptions));
+ if (inputOptions && inputOptions.errorCode) error.code = inputOptions.errorCode;
+ throw error;
+};
diff --git a/node_modules/ext/node_modules/type/lib/safe-to-string.js b/node_modules/ext/node_modules/type/lib/safe-to-string.js
new file mode 100644
index 0000000..a756dd3
--- /dev/null
+++ b/node_modules/ext/node_modules/type/lib/safe-to-string.js
@@ -0,0 +1,10 @@
+"use strict";
+
+module.exports = function (value) {
+ try {
+ return value.toString();
+ } catch (error) {
+ try { return String(value); }
+ catch (error2) { return null; }
+ }
+};
diff --git a/node_modules/ext/node_modules/type/lib/to-short-string.js b/node_modules/ext/node_modules/type/lib/to-short-string.js
new file mode 100644
index 0000000..c8d7ed8
--- /dev/null
+++ b/node_modules/ext/node_modules/type/lib/to-short-string.js
@@ -0,0 +1,29 @@
+"use strict";
+
+var safeToString = require("./safe-to-string");
+
+var reNewLine = /[\n\r\u2028\u2029]/g;
+
+module.exports = function (value) {
+ var string = safeToString(value);
+ if (string === null) return "";
+ // Trim if too long
+ if (string.length > 100) string = string.slice(0, 99) + "…";
+ // Replace eventual new lines
+ string = string.replace(reNewLine, function (char) {
+ switch (char) {
+ case "\n":
+ return "\\n";
+ case "\r":
+ return "\\r";
+ case "\u2028":
+ return "\\u2028";
+ case "\u2029":
+ return "\\u2029";
+ /* istanbul ignore next */
+ default:
+ throw new Error("Unexpected character");
+ }
+ });
+ return string;
+};
diff --git a/node_modules/ext/node_modules/type/map/ensure.js b/node_modules/ext/node_modules/type/map/ensure.js
new file mode 100644
index 0000000..3e3325a
--- /dev/null
+++ b/node_modules/ext/node_modules/type/map/ensure.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , is = require("./is");
+
+module.exports = function (value /*, options*/) {
+ if (is(value)) return value;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name ? "Expected a map for %n, received %v" : "%v is not a map";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/map/is.js b/node_modules/ext/node_modules/type/map/is.js
new file mode 100644
index 0000000..4ed7bae
--- /dev/null
+++ b/node_modules/ext/node_modules/type/map/is.js
@@ -0,0 +1,28 @@
+"use strict";
+
+var isPrototype = require("../prototype/is");
+
+// In theory we could rely on Symbol.toStringTag directly,
+// still early native implementation (e.g. in FF) predated symbols
+var objectToString = Object.prototype.toString, objectTaggedString = objectToString.call(new Map());
+
+module.exports = function (value) {
+ if (!value) return false;
+
+ // Sanity check (reject objects which do not expose common Promise interface)
+ try {
+ if (typeof value.set !== "function") return false;
+ if (typeof value.get !== "function") return false;
+ if (typeof value.has !== "function") return false;
+ if (typeof value.clear !== "function") return false;
+ } catch (error) {
+ return false;
+ }
+
+ // Ensure its native Promise object (has [[MapData]] slot)
+ // Note: it's not 100% precise as string tag may be overriden
+ // and other objects could be hacked to expose it
+ if (objectToString.call(value) !== objectTaggedString) return false;
+
+ return !isPrototype(value);
+};
diff --git a/node_modules/ext/node_modules/type/natural-number/coerce.js b/node_modules/ext/node_modules/type/natural-number/coerce.js
new file mode 100644
index 0000000..4b7931c
--- /dev/null
+++ b/node_modules/ext/node_modules/type/natural-number/coerce.js
@@ -0,0 +1,10 @@
+"use strict";
+
+var coerceToInteger = require("../integer/coerce");
+
+module.exports = function (value) {
+ value = coerceToInteger(value);
+ if (!value) return value;
+ if (value < 0) return null;
+ return value;
+};
diff --git a/node_modules/ext/node_modules/type/natural-number/ensure.js b/node_modules/ext/node_modules/type/natural-number/ensure.js
new file mode 100644
index 0000000..1f09174
--- /dev/null
+++ b/node_modules/ext/node_modules/type/natural-number/ensure.js
@@ -0,0 +1,21 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , ensureMin = require("../lib/ensure/min")
+ , coerce = require("./coerce");
+
+module.exports = function (value/*, options*/) {
+ var coerced = coerce(value), options = arguments[1];
+ if (coerced !== null) {
+ if (options) {
+ if (options.min) ensureMin(value, coerced, options);
+ }
+ return coerced;
+ }
+
+ var errorMessage =
+ options && options.name
+ ? "Expected a natural number for %n, received %v"
+ : "%v is not a natural number";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/number/coerce.js b/node_modules/ext/node_modules/type/number/coerce.js
new file mode 100644
index 0000000..1bb1512
--- /dev/null
+++ b/node_modules/ext/node_modules/type/number/coerce.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var isValue = require("../value/is");
+
+module.exports = function (value) {
+ if (!isValue(value)) return null;
+ try {
+ value = +value; // Ensure implicit coercion
+ } catch (error) {
+ return null;
+ }
+ if (isNaN(value)) return null;
+ return value;
+};
diff --git a/node_modules/ext/node_modules/type/number/ensure.js b/node_modules/ext/node_modules/type/number/ensure.js
new file mode 100644
index 0000000..9ae705d
--- /dev/null
+++ b/node_modules/ext/node_modules/type/number/ensure.js
@@ -0,0 +1,13 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , coerce = require("./coerce");
+
+module.exports = function (value/*, options*/) {
+ var coerced = coerce(value);
+ if (coerced !== null) return coerced;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name ? "Expected a number for %n, received %v" : "%v is not a number";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/object/ensure.js b/node_modules/ext/node_modules/type/object/ensure.js
new file mode 100644
index 0000000..341f55c
--- /dev/null
+++ b/node_modules/ext/node_modules/type/object/ensure.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , is = require("./is");
+
+module.exports = function (value/*, options*/) {
+ if (is(value)) return value;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name ? "Expected an object for %n, received %v" : "%v is not an object";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/object/is.js b/node_modules/ext/node_modules/type/object/is.js
new file mode 100644
index 0000000..a254dcb
--- /dev/null
+++ b/node_modules/ext/node_modules/type/object/is.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var isValue = require("../value/is");
+
+// prettier-ignore
+var possibleTypes = { "object": true, "function": true, "undefined": true /* document.all */ };
+
+module.exports = function (value) {
+ if (!isValue(value)) return false;
+ return hasOwnProperty.call(possibleTypes, typeof value);
+};
diff --git a/node_modules/ext/node_modules/type/package.json b/node_modules/ext/node_modules/type/package.json
new file mode 100644
index 0000000..a863fbf
--- /dev/null
+++ b/node_modules/ext/node_modules/type/package.json
@@ -0,0 +1,120 @@
+{
+ "name": "type",
+ "version": "2.7.2",
+ "description": "Runtime validation and processing of JavaScript types",
+ "author": "Mariusz Nowak (https://www.medikoo.com/)",
+ "keywords": [
+ "type",
+ "coercion"
+ ],
+ "repository": "medikoo/type",
+ "devDependencies": {
+ "chai": "^4.3.6",
+ "eslint": "^8.21.0",
+ "eslint-config-medikoo": "^4.1.2",
+ "git-list-updated": "^1.2.1",
+ "github-release-from-cc-changelog": "^2.3.0",
+ "husky": "^4.3.8",
+ "lint-staged": "^13.0.3",
+ "mocha": "^6.2.3",
+ "nyc": "^15.1.0",
+ "prettier-elastic": "^2.2.1"
+ },
+ "typesVersions": {
+ ">=4": {
+ "*": [
+ "ts-types/*"
+ ]
+ }
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "lint-staged": {
+ "*.js": [
+ "eslint"
+ ],
+ "*.{css,html,js,json,md,yaml,yml}": [
+ "prettier -c"
+ ]
+ },
+ "eslintConfig": {
+ "extends": "medikoo/es3",
+ "root": true,
+ "globals": {
+ "BigInt": true,
+ "Map": true,
+ "Promise": true,
+ "Set": true,
+ "Symbol": true
+ },
+ "overrides": [
+ {
+ "files": "test/**/*.js",
+ "env": {
+ "mocha": true
+ },
+ "rules": {
+ "no-eval": "off",
+ "no-new-wrappers": "off"
+ }
+ },
+ {
+ "files": [
+ "string/coerce.js",
+ "number/coerce.js"
+ ],
+ "rules": {
+ "no-implicit-coercion": "off"
+ }
+ },
+ {
+ "files": "plain-object/is.js",
+ "rules": {
+ "no-proto": "off"
+ }
+ }
+ ]
+ },
+ "prettier": {
+ "printWidth": 100,
+ "tabWidth": 4,
+ "overrides": [
+ {
+ "files": [
+ "*.md",
+ "*.yml"
+ ],
+ "options": {
+ "tabWidth": 2
+ }
+ }
+ ]
+ },
+ "nyc": {
+ "all": true,
+ "exclude": [
+ ".github",
+ "coverage/**",
+ "test/**",
+ "*.config.js"
+ ],
+ "reporter": [
+ "lcov",
+ "html",
+ "text-summary"
+ ]
+ },
+ "scripts": {
+ "coverage": "nyc npm test",
+ "lint:updated": "pipe-git-updated --base=main --ext=js -- eslint --ignore-pattern '!*'",
+ "prettier-check": "prettier -c --ignore-path .gitignore \"**/*.{css,html,js,json,md,yaml,yml}\"",
+ "prettier-check:updated": "pipe-git-updated --base=main --ext=css --ext=html --ext=js --ext=json --ext=md --ext=yaml --ext=yml -- prettier -c",
+ "prettify": "prettier --write --ignore-path .gitignore \"**/*.{css,html,js,json,md,yaml,yml}\"",
+ "prettify:updated": "pipe-git-updated ---base=main -ext=css --ext=html --ext=js --ext=json --ext=md --ext=yaml --ext=yml -- prettier --write",
+ "test": "mocha --recursive"
+ },
+ "license": "ISC"
+}
diff --git a/node_modules/ext/node_modules/type/plain-function/ensure.js b/node_modules/ext/node_modules/type/plain-function/ensure.js
new file mode 100644
index 0000000..d3a20e6
--- /dev/null
+++ b/node_modules/ext/node_modules/type/plain-function/ensure.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , is = require("./is");
+
+module.exports = function (value/*, options*/) {
+ if (is(value)) return value;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name
+ ? "Expected a plain function for %n, received %v"
+ : "%v is not a plain function";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/plain-function/is.js b/node_modules/ext/node_modules/type/plain-function/is.js
new file mode 100644
index 0000000..b55d4ff
--- /dev/null
+++ b/node_modules/ext/node_modules/type/plain-function/is.js
@@ -0,0 +1,11 @@
+"use strict";
+
+var isFunction = require("../function/is");
+
+var classRe = /^\s*class[\s{/}]/, functionToString = Function.prototype.toString;
+
+module.exports = function (value) {
+ if (!isFunction(value)) return false;
+ if (classRe.test(functionToString.call(value))) return false;
+ return true;
+};
diff --git a/node_modules/ext/node_modules/type/plain-object/ensure.js b/node_modules/ext/node_modules/type/plain-object/ensure.js
new file mode 100644
index 0000000..519261e
--- /dev/null
+++ b/node_modules/ext/node_modules/type/plain-object/ensure.js
@@ -0,0 +1,67 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , resolveErrorMessage = require("../lib/resolve-error-message")
+ , ensurePlainFunction = require("../plain-function/ensure")
+ , ensureArray = require("../array/ensure")
+ , is = require("./is");
+
+var objHasOwnProperty = Object.prototype.hasOwnProperty, invalidItemsLimit = 3;
+
+module.exports = function (value/*, options*/) {
+ var options = arguments[1];
+ var mainErrorMessage =
+ options && options.name
+ ? "Expected a plain object for %n, received %v"
+ : "%v is not a plain object";
+ if (!is(value)) return resolveException(value, mainErrorMessage, options);
+ if (!options) return value;
+
+ var invalidKeys, key, errorMessage;
+ var allowedKeys = ensureArray(options.allowedKeys, { isOptional: true });
+ if (allowedKeys) {
+ for (key in value) {
+ if (!objHasOwnProperty.call(value, key)) continue;
+ if (allowedKeys.indexOf(key) > -1) continue;
+ if (!invalidKeys) invalidKeys = [];
+ if (invalidKeys.push(key) === invalidItemsLimit) break;
+ }
+ if (invalidKeys) {
+ errorMessage =
+ resolveErrorMessage(mainErrorMessage, value, options) +
+ ".\n Following keys are unexpected: " +
+ invalidKeys.join(", ");
+ throw new TypeError(errorMessage);
+ }
+ }
+
+ var ensurePropertyValue = ensurePlainFunction(options.ensurePropertyValue, {
+ isOptional: true
+ });
+ if (ensurePropertyValue) {
+ var coercedValue = {};
+ for (key in value) {
+ if (!objHasOwnProperty.call(value, key)) continue;
+ var coercedPropertyValue;
+ try {
+ coercedPropertyValue = ensurePropertyValue(value[key]);
+ } catch (error) {
+ if (!invalidKeys) invalidKeys = [];
+ if (invalidKeys.push(key) === invalidItemsLimit) break;
+ }
+ if (invalidKeys) continue;
+ coercedValue[key] = coercedPropertyValue;
+ }
+ if (invalidKeys) {
+ errorMessage =
+ resolveErrorMessage(mainErrorMessage, value, options) +
+ ".\n Values for following keys are invalid: " +
+ invalidKeys.join(", ");
+ throw new TypeError(errorMessage);
+ }
+
+ return coercedValue;
+ }
+
+ return value;
+};
diff --git a/node_modules/ext/node_modules/type/plain-object/is.js b/node_modules/ext/node_modules/type/plain-object/is.js
new file mode 100644
index 0000000..50d6713
--- /dev/null
+++ b/node_modules/ext/node_modules/type/plain-object/is.js
@@ -0,0 +1,28 @@
+"use strict";
+
+var isObject = require("../object/is")
+ , isPrototype = require("../prototype/is");
+
+var getPrototypeOf;
+if (typeof Object.getPrototypeOf === "function") {
+ getPrototypeOf = Object.getPrototypeOf;
+} else if ({}.__proto__ === Object.prototype) {
+ getPrototypeOf = function (object) { return object.__proto__; };
+}
+
+module.exports = function (value) {
+ if (!isObject(value)) return false;
+ var prototype;
+ if (getPrototypeOf) {
+ prototype = getPrototypeOf(value);
+ } else {
+ try {
+ var valueConstructor = value.constructor;
+ if (valueConstructor) prototype = valueConstructor.prototype;
+ } catch (error) {
+ return false;
+ }
+ }
+ if (prototype && !hasOwnProperty.call(prototype, "propertyIsEnumerable")) return false;
+ return !isPrototype(value);
+};
diff --git a/node_modules/ext/node_modules/type/promise/ensure.js b/node_modules/ext/node_modules/type/promise/ensure.js
new file mode 100644
index 0000000..7fbebb3
--- /dev/null
+++ b/node_modules/ext/node_modules/type/promise/ensure.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , is = require("./is");
+
+module.exports = function (value/*, options*/) {
+ if (is(value)) return value;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name ? "Expected a promise for %n, received %v" : "%v is not a promise";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/promise/is.js b/node_modules/ext/node_modules/type/promise/is.js
new file mode 100644
index 0000000..5353362
--- /dev/null
+++ b/node_modules/ext/node_modules/type/promise/is.js
@@ -0,0 +1,27 @@
+"use strict";
+
+var isPrototype = require("../prototype/is");
+
+// In theory we could rely on Symbol.toStringTag directly,
+// still early native implementation (e.g. in FF) predated symbols
+var objectToString = Object.prototype.toString
+ , objectTaggedString = objectToString.call(Promise.resolve());
+
+module.exports = function (value) {
+ if (!value) return false;
+
+ // Sanity check (reject objects which do not expose common Promise interface)
+ try {
+ if (typeof value.then !== "function") return false;
+ if (typeof value["catch"] !== "function") return false;
+ } catch (error) {
+ return false;
+ }
+
+ // Ensure its native Promise object (has [[PromiseState]] slot)
+ // Note: it's not 100% precise as string tag may be overriden
+ // and other objects could be hacked to expose it
+ if (objectToString.call(value) !== objectTaggedString) return false;
+
+ return !isPrototype(value);
+};
diff --git a/node_modules/ext/node_modules/type/prototype/is.js b/node_modules/ext/node_modules/type/prototype/is.js
new file mode 100644
index 0000000..aaddb2a
--- /dev/null
+++ b/node_modules/ext/node_modules/type/prototype/is.js
@@ -0,0 +1,13 @@
+"use strict";
+
+var isObject = require("../object/is");
+
+module.exports = function (value) {
+ if (!isObject(value)) return false;
+ try {
+ if (!value.constructor) return false;
+ return value.constructor.prototype === value;
+ } catch (error) {
+ return false;
+ }
+};
diff --git a/node_modules/ext/node_modules/type/reg-exp/ensure.js b/node_modules/ext/node_modules/type/reg-exp/ensure.js
new file mode 100644
index 0000000..50669f3
--- /dev/null
+++ b/node_modules/ext/node_modules/type/reg-exp/ensure.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , is = require("./is");
+
+module.exports = function (value/*, options*/) {
+ if (is(value)) return value;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name
+ ? "Expected a regular expression for %n, received %v"
+ : "%v is not a regular expression";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/reg-exp/is.js b/node_modules/ext/node_modules/type/reg-exp/is.js
new file mode 100644
index 0000000..f0c69d5
--- /dev/null
+++ b/node_modules/ext/node_modules/type/reg-exp/is.js
@@ -0,0 +1,37 @@
+"use strict";
+
+var isToStringTagSupported = require("../lib/is-to-string-tag-supported")
+ , isPrototype = require("../prototype/is");
+
+var regExpTest = RegExp.prototype.test
+ , objectToString = Object.prototype.toString
+ , objectTaggedString = objectToString.call(/a/);
+
+module.exports = function (value) {
+ if (!value) return false;
+
+ // Sanity check (reject objects which do not expose common RegExp interface)
+ if (!hasOwnProperty.call(value, "lastIndex")) return false;
+ try {
+ if (typeof value.lastIndex !== "number") return false;
+ if (typeof value.test !== "function") return false;
+ if (typeof value.exec !== "function") return false;
+ } catch (error) {
+ return false;
+ }
+
+ // Ensure its native RegExp object (has [[RegExpMatcher]] slot)
+ if (isToStringTagSupported && typeof value[Symbol.toStringTag] === "string") {
+ // Edge case (possibly a regExp with custom Symbol.toStringTag)
+ try {
+ var lastIndex = value.lastIndex;
+ regExpTest.call(value, "");
+ if (value.lastIndex !== lastIndex) value.lastIndex = lastIndex;
+ return true;
+ } catch (error) {
+ return false;
+ }
+ }
+ if (objectToString.call(value) !== objectTaggedString) return false;
+ return !isPrototype(value);
+};
diff --git a/node_modules/ext/node_modules/type/safe-integer/coerce.js b/node_modules/ext/node_modules/type/safe-integer/coerce.js
new file mode 100644
index 0000000..b97e4aa
--- /dev/null
+++ b/node_modules/ext/node_modules/type/safe-integer/coerce.js
@@ -0,0 +1,13 @@
+"use strict";
+
+var coerceToInteger = require("../integer/coerce");
+
+var MAX_SAFE_INTEGER = 9007199254740991, MIN_SAFE_INTEGER = -9007199254740991;
+
+module.exports = function (value) {
+ value = coerceToInteger(value);
+ if (!value) return value;
+ if (value > MAX_SAFE_INTEGER) return null;
+ if (value < MIN_SAFE_INTEGER) return null;
+ return value;
+};
diff --git a/node_modules/ext/node_modules/type/safe-integer/ensure.js b/node_modules/ext/node_modules/type/safe-integer/ensure.js
new file mode 100644
index 0000000..dbdc46d
--- /dev/null
+++ b/node_modules/ext/node_modules/type/safe-integer/ensure.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , coerce = require("./coerce");
+
+module.exports = function (value/*, options*/) {
+ var coerced = coerce(value);
+ if (coerced !== null) return coerced;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name
+ ? "Expected a safe integer for %n, received %v"
+ : "%v is not a safe integer";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/set/ensure.js b/node_modules/ext/node_modules/type/set/ensure.js
new file mode 100644
index 0000000..c5b6a41
--- /dev/null
+++ b/node_modules/ext/node_modules/type/set/ensure.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , is = require("./is");
+
+module.exports = function (value /*, options*/) {
+ if (is(value)) return value;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name ? "Expected a set for %n, received %v" : "%v is not a set";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/set/is.js b/node_modules/ext/node_modules/type/set/is.js
new file mode 100644
index 0000000..d0b137b
--- /dev/null
+++ b/node_modules/ext/node_modules/type/set/is.js
@@ -0,0 +1,27 @@
+"use strict";
+
+var isPrototype = require("../prototype/is");
+
+// In theory we could rely on Symbol.toStringTag directly,
+// still early native implementation (e.g. in FF) predated symbols
+var objectToString = Object.prototype.toString, objectTaggedString = objectToString.call(new Set());
+
+module.exports = function (value) {
+ if (!value) return false;
+
+ // Sanity check (reject objects which do not expose common Set interface)
+ try {
+ if (typeof value.add !== "function") return false;
+ if (typeof value.has !== "function") return false;
+ if (typeof value.clear !== "function") return false;
+ } catch (error) {
+ return false;
+ }
+
+ // Ensure its native Set object (has [[SetData]] slot)
+ // Note: it's not 100% precise as string tag may be overriden
+ // and other objects could be hacked to expose it
+ if (objectToString.call(value) !== objectTaggedString) return false;
+
+ return !isPrototype(value);
+};
diff --git a/node_modules/ext/node_modules/type/string/coerce.js b/node_modules/ext/node_modules/type/string/coerce.js
new file mode 100644
index 0000000..43cd931
--- /dev/null
+++ b/node_modules/ext/node_modules/type/string/coerce.js
@@ -0,0 +1,23 @@
+"use strict";
+
+var isValue = require("../value/is")
+ , isObject = require("../object/is");
+
+var objectToString = Object.prototype.toString;
+
+module.exports = function (value) {
+ if (!isValue(value)) return null;
+ if (isObject(value)) {
+ // Reject Object.prototype.toString coercion
+ var valueToString = value.toString;
+ if (typeof valueToString !== "function") return null;
+ if (valueToString === objectToString) return null;
+ // Note: It can be object coming from other realm, still as there's no ES3 and CSP compliant
+ // way to resolve its realm's Object.prototype.toString it's left as not addressed edge case
+ }
+ try {
+ return "" + value; // Ensure implicit coercion
+ } catch (error) {
+ return null;
+ }
+};
diff --git a/node_modules/ext/node_modules/type/string/ensure.js b/node_modules/ext/node_modules/type/string/ensure.js
new file mode 100644
index 0000000..e26b5f0
--- /dev/null
+++ b/node_modules/ext/node_modules/type/string/ensure.js
@@ -0,0 +1,13 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , coerce = require("./coerce");
+
+module.exports = function (value/*, options*/) {
+ var coerced = coerce(value);
+ if (coerced !== null) return coerced;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name ? "Expected a string for %n, received %v" : "%v is not a string";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/thenable/ensure.js b/node_modules/ext/node_modules/type/thenable/ensure.js
new file mode 100644
index 0000000..8397c7c
--- /dev/null
+++ b/node_modules/ext/node_modules/type/thenable/ensure.js
@@ -0,0 +1,14 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , is = require("./is");
+
+module.exports = function (value/*, options*/) {
+ if (is(value)) return value;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name
+ ? "Expected a thenable for %n, received %v"
+ : "%v is not a thenable";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/thenable/is.js b/node_modules/ext/node_modules/type/thenable/is.js
new file mode 100644
index 0000000..1f3d399
--- /dev/null
+++ b/node_modules/ext/node_modules/type/thenable/is.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var isObject = require("../object/is");
+
+module.exports = function (value) {
+ if (!isObject(value)) return false;
+ try { return typeof value.then === "function"; }
+ catch (error) { return false; }
+};
diff --git a/node_modules/ext/node_modules/type/time-value/coerce.js b/node_modules/ext/node_modules/type/time-value/coerce.js
new file mode 100644
index 0000000..7124864
--- /dev/null
+++ b/node_modules/ext/node_modules/type/time-value/coerce.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var coerceToInteger = require("../integer/coerce");
+
+var abs = Math.abs;
+
+module.exports = function (value) {
+ value = coerceToInteger(value);
+ if (!value) return value;
+ if (abs(value) > 8.64e15) return null;
+ return value;
+};
diff --git a/node_modules/ext/node_modules/type/time-value/ensure.js b/node_modules/ext/node_modules/type/time-value/ensure.js
new file mode 100644
index 0000000..ddf4f61
--- /dev/null
+++ b/node_modules/ext/node_modules/type/time-value/ensure.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , coerce = require("./coerce");
+
+module.exports = function (value/*, options*/) {
+ var coerced = coerce(value);
+ if (coerced !== null) return coerced;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name
+ ? "Expected a time value for %n, received %v"
+ : "%v is not a time value";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/ts-types/array-length/coerce.d.ts b/node_modules/ext/node_modules/type/ts-types/array-length/coerce.d.ts
new file mode 100644
index 0000000..e949e11
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/array-length/coerce.d.ts
@@ -0,0 +1,2 @@
+declare function coerceToArrayLength(value: any): number | null;
+export default coerceToArrayLength;
diff --git a/node_modules/ext/node_modules/type/ts-types/array-length/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/array-length/ensure.d.ts
new file mode 100644
index 0000000..25c9370
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/array-length/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureArrayLength(value: any, options?: EnsureBaseOptions): number;
+declare function ensureArrayLength(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
+declare function ensureArrayLength(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): number;
+
+export default ensureArrayLength;
diff --git a/node_modules/ext/node_modules/type/ts-types/array-like/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/array-like/ensure.d.ts
new file mode 100644
index 0000000..549febe
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/array-like/ensure.d.ts
@@ -0,0 +1,11 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+type LengthwiseObject = { length: number } & object;
+type ArrayLikeEnsureOptions = { allowString?: boolean };
+
+
+declare function ensureArrayLike(value: any, options?: ArrayLikeEnsureOptions & EnsureBaseOptions): T[] | string | LengthwiseObject;
+declare function ensureArrayLike(value: any, options?: ArrayLikeEnsureOptions & EnsureBaseOptions & EnsureIsOptional): T[] | string | LengthwiseObject | null;
+declare function ensureArrayLike(value: any, options?: ArrayLikeEnsureOptions & EnsureBaseOptions & EnsureIsOptional & EnsureDefault): T[] | string | LengthwiseObject;
+
+export default ensureArrayLike;
diff --git a/node_modules/ext/node_modules/type/ts-types/array-like/is.d.ts b/node_modules/ext/node_modules/type/ts-types/array-like/is.d.ts
new file mode 100644
index 0000000..acdd657
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/array-like/is.d.ts
@@ -0,0 +1,2 @@
+declare function isArrayLike(value: any, options?: {allowString?: boolean}): boolean;
+export default isArrayLike;
diff --git a/node_modules/ext/node_modules/type/ts-types/array/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/array/ensure.d.ts
new file mode 100644
index 0000000..6c249b7
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/array/ensure.d.ts
@@ -0,0 +1,10 @@
+import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+type EnsureArrayOptions = { ensureItem?: EnsureFunction };
+
+
+declare function ensureArray(value: any, options?: EnsureArrayOptions & EnsureBaseOptions): T[];
+declare function ensureArray(value: any, options?: EnsureArrayOptions & EnsureBaseOptions & EnsureIsOptional): T[] | null;
+declare function ensureArray(value: any, options?: EnsureArrayOptions & EnsureBaseOptions & EnsureIsOptional & EnsureDefault): T[];
+
+export default ensureArray;
diff --git a/node_modules/ext/node_modules/type/ts-types/array/is.d.ts b/node_modules/ext/node_modules/type/ts-types/array/is.d.ts
new file mode 100644
index 0000000..71af03e
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/array/is.d.ts
@@ -0,0 +1,2 @@
+declare function isArray(value: any): boolean;
+export default isArray;
diff --git a/node_modules/ext/node_modules/type/ts-types/big-int/coerce.d.ts b/node_modules/ext/node_modules/type/ts-types/big-int/coerce.d.ts
new file mode 100644
index 0000000..8c73fc6
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/big-int/coerce.d.ts
@@ -0,0 +1,2 @@
+declare function coerceToBigInt(value: any): bigint | null;
+export default coerceToBigInt;
diff --git a/node_modules/ext/node_modules/type/ts-types/big-int/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/big-int/ensure.d.ts
new file mode 100644
index 0000000..93073cb
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/big-int/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureBigInt(value: any, options?: EnsureBaseOptions): bigint;
+declare function ensureBigInt(value: any, options?: EnsureBaseOptions & EnsureIsOptional): bigint | null;
+declare function ensureBigInt(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): bigint;
+
+export default ensureBigInt;
diff --git a/node_modules/ext/node_modules/type/ts-types/constructor/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/constructor/ensure.d.ts
new file mode 100644
index 0000000..79dd28c
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/constructor/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureConstructor(value: any, options?: EnsureBaseOptions): EnsureFunction | object;
+declare function ensureConstructor(value: any, options?: EnsureBaseOptions & EnsureIsOptional): EnsureFunction | object | null;
+declare function ensureConstructor(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): EnsureFunction | object;
+
+export default ensureConstructor;
diff --git a/node_modules/ext/node_modules/type/ts-types/constructor/is.d.ts b/node_modules/ext/node_modules/type/ts-types/constructor/is.d.ts
new file mode 100644
index 0000000..768a635
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/constructor/is.d.ts
@@ -0,0 +1,2 @@
+declare function isConstructor(value: any): boolean;
+export default isConstructor;
diff --git a/node_modules/ext/node_modules/type/ts-types/date/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/date/ensure.d.ts
new file mode 100644
index 0000000..d96ad31
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/date/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureDate(value: any, options?: EnsureBaseOptions): Date;
+declare function ensureDate(value: any, options?: EnsureBaseOptions & EnsureIsOptional): Date | null;
+declare function ensureDate(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): Date;
+
+export default ensureDate;
diff --git a/node_modules/ext/node_modules/type/ts-types/date/is.d.ts b/node_modules/ext/node_modules/type/ts-types/date/is.d.ts
new file mode 100644
index 0000000..7907a8f
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/date/is.d.ts
@@ -0,0 +1,2 @@
+declare function isDate(value: any): boolean;
+export default isDate;
diff --git a/node_modules/ext/node_modules/type/ts-types/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/ensure.d.ts
new file mode 100644
index 0000000..62ba597
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/ensure.d.ts
@@ -0,0 +1,24 @@
+export type EnsureFunction = (...args: any[]) => any;
+export interface EnsureBaseOptions {
+ name?: string;
+ errorMessage?: string;
+ errorCode?: number;
+ Error?: ErrorConstructor;
+}
+
+export interface EnsureIsOptional {
+ isOptional: boolean;
+}
+
+export interface EnsureDefault {
+ default: T;
+}
+
+type EnsureOptions = EnsureBaseOptions & { isOptional?: boolean } & { default?: any };
+
+type ValidationDatum = [argumentName: string, inputValue: any, ensureFunction: EnsureFunction, options?: object];
+type ValidationDatumList = ValidationDatum[];
+
+declare function ensure(...args: [...ValidationDatumList, EnsureOptions]): T;
+declare function ensure(...args: [...ValidationDatumList]): T;
+export default ensure;
diff --git a/node_modules/ext/node_modules/type/ts-types/error/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/error/ensure.d.ts
new file mode 100644
index 0000000..b42f446
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/error/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureError(value: any, options?: EnsureBaseOptions): Error;
+declare function ensureError(value: any, options?: EnsureBaseOptions & EnsureIsOptional): Error | null;
+declare function ensureError(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): Error;
+
+export default ensureError;
diff --git a/node_modules/ext/node_modules/type/ts-types/error/is.d.ts b/node_modules/ext/node_modules/type/ts-types/error/is.d.ts
new file mode 100644
index 0000000..db64ea3
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/error/is.d.ts
@@ -0,0 +1,2 @@
+declare function isError(value: any): boolean;
+export default isError;
diff --git a/node_modules/ext/node_modules/type/ts-types/finite/coerce.d.ts b/node_modules/ext/node_modules/type/ts-types/finite/coerce.d.ts
new file mode 100644
index 0000000..f1edc2d
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/finite/coerce.d.ts
@@ -0,0 +1,2 @@
+declare function coerceToFinite(value: any): number | null;
+export default coerceToFinite;
diff --git a/node_modules/ext/node_modules/type/ts-types/finite/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/finite/ensure.d.ts
new file mode 100644
index 0000000..988c511
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/finite/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureFinite(value: any, options?: EnsureBaseOptions): number;
+declare function ensureFinite(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
+declare function ensureFinite(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): number;
+
+export default ensureFinite;
diff --git a/node_modules/ext/node_modules/type/ts-types/function/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/function/ensure.d.ts
new file mode 100644
index 0000000..30839e5
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/function/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureFunction(value: any, options?: EnsureBaseOptions): EnsureFunction;
+declare function ensureFunction(value: any, options?: EnsureBaseOptions & EnsureIsOptional): EnsureFunction | null;
+declare function ensureFunction(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): EnsureFunction;
+
+export default ensureFunction;
diff --git a/node_modules/ext/node_modules/type/ts-types/function/is.d.ts b/node_modules/ext/node_modules/type/ts-types/function/is.d.ts
new file mode 100644
index 0000000..9d94f95
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/function/is.d.ts
@@ -0,0 +1,2 @@
+declare function isFunction(value: any): boolean;
+export default isFunction;
diff --git a/node_modules/ext/node_modules/type/ts-types/integer/coerce.d.ts b/node_modules/ext/node_modules/type/ts-types/integer/coerce.d.ts
new file mode 100644
index 0000000..3bbb00f
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/integer/coerce.d.ts
@@ -0,0 +1,2 @@
+declare function coerceToInteger(value: any): number | null;
+export default coerceToInteger;
diff --git a/node_modules/ext/node_modules/type/ts-types/integer/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/integer/ensure.d.ts
new file mode 100644
index 0000000..06f1c8a
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/integer/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureInteger(value: any, options?: EnsureBaseOptions): number;
+declare function ensureInteger(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
+declare function ensureInteger(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): number;
+
+export default ensureInteger;
diff --git a/node_modules/ext/node_modules/type/ts-types/iterable/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/iterable/ensure.d.ts
new file mode 100644
index 0000000..973d3ea
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/iterable/ensure.d.ts
@@ -0,0 +1,10 @@
+import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+type IterableEnsureOptions = { ensureItem?: EnsureFunction, allowString?: boolean, denyEmpty?: boolean};
+
+
+declare function ensureIterable(value: any, options?: IterableEnsureOptions & EnsureBaseOptions): T[];
+declare function ensureIterable(value: any, options?: IterableEnsureOptions & EnsureBaseOptions & EnsureIsOptional): T[] | null;
+declare function ensureIterable(value: any, options?: IterableEnsureOptions & EnsureBaseOptions & EnsureIsOptional & EnsureDefault): T[];
+
+export default ensureIterable;
diff --git a/node_modules/ext/node_modules/type/ts-types/iterable/is.d.ts b/node_modules/ext/node_modules/type/ts-types/iterable/is.d.ts
new file mode 100644
index 0000000..93686d2
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/iterable/is.d.ts
@@ -0,0 +1,2 @@
+declare function isIterable(value: any, options?: { allowString?: boolean, denyEmpty?: boolean }): boolean;
+export default isIterable;
diff --git a/node_modules/ext/node_modules/type/ts-types/map/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/map/ensure.d.ts
new file mode 100644
index 0000000..6a23851
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/map/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureMap(value: any, options?: EnsureBaseOptions): Map;
+declare function ensureMap(value: any, options?: EnsureBaseOptions & EnsureIsOptional): Map | null;
+declare function ensureMap(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault>): Map;
+
+export default ensureMap;
diff --git a/node_modules/ext/node_modules/type/ts-types/map/is.d.ts b/node_modules/ext/node_modules/type/ts-types/map/is.d.ts
new file mode 100644
index 0000000..340ed1b
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/map/is.d.ts
@@ -0,0 +1,2 @@
+declare function isMap(value: any): boolean;
+export default isMap;
diff --git a/node_modules/ext/node_modules/type/ts-types/natural-number/coerce.d.ts b/node_modules/ext/node_modules/type/ts-types/natural-number/coerce.d.ts
new file mode 100644
index 0000000..633317c
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/natural-number/coerce.d.ts
@@ -0,0 +1,2 @@
+declare function coerceToNaturalNumber(value: any): number | null;
+export default coerceToNaturalNumber;
diff --git a/node_modules/ext/node_modules/type/ts-types/natural-number/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/natural-number/ensure.d.ts
new file mode 100644
index 0000000..2f6d6b5
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/natural-number/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureNaturalNumber(value: any, options?: EnsureBaseOptions): number;
+declare function ensureNaturalNumber(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
+declare function ensureNaturalNumber(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): number;
+
+export default ensureNaturalNumber;
diff --git a/node_modules/ext/node_modules/type/ts-types/number/coerce.d.ts b/node_modules/ext/node_modules/type/ts-types/number/coerce.d.ts
new file mode 100644
index 0000000..cc9f355
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/number/coerce.d.ts
@@ -0,0 +1,2 @@
+declare function coerceToNumber(value: any): number | null;
+export default coerceToNumber;
diff --git a/node_modules/ext/node_modules/type/ts-types/number/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/number/ensure.d.ts
new file mode 100644
index 0000000..326b222
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/number/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureNumber(value: any, options?: EnsureBaseOptions): number;
+declare function ensureNumber(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
+declare function ensureNumber(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): number;
+
+export default ensureNumber;
diff --git a/node_modules/ext/node_modules/type/ts-types/object/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/object/ensure.d.ts
new file mode 100644
index 0000000..f5ccce1
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/object/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureObject(value: any, options?: EnsureBaseOptions): object;
+declare function ensureObject(value: any, options?: EnsureBaseOptions & EnsureIsOptional): object | null;
+declare function ensureObject(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): object;
+
+export default ensureObject;
diff --git a/node_modules/ext/node_modules/type/ts-types/object/is.d.ts b/node_modules/ext/node_modules/type/ts-types/object/is.d.ts
new file mode 100644
index 0000000..47fdd9c
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/object/is.d.ts
@@ -0,0 +1,2 @@
+declare function isObject(value: any): boolean;
+export default isObject;
diff --git a/node_modules/ext/node_modules/type/ts-types/plain-function/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/plain-function/ensure.d.ts
new file mode 100644
index 0000000..8681e77
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/plain-function/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensurePlainFunction(value: any, options?: EnsureBaseOptions): EnsureFunction;
+declare function ensurePlainFunction(value: any, options?: EnsureBaseOptions & EnsureIsOptional): EnsureFunction | null;
+declare function ensurePlainFunction(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): EnsureFunction;
+
+export default ensurePlainFunction;
diff --git a/node_modules/ext/node_modules/type/ts-types/plain-function/is.d.ts b/node_modules/ext/node_modules/type/ts-types/plain-function/is.d.ts
new file mode 100644
index 0000000..de32a5e
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/plain-function/is.d.ts
@@ -0,0 +1,2 @@
+declare function isPlainFunction(value: any): boolean;
+export default isPlainFunction;
diff --git a/node_modules/ext/node_modules/type/ts-types/plain-object/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/plain-object/ensure.d.ts
new file mode 100644
index 0000000..063d709
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/plain-object/ensure.d.ts
@@ -0,0 +1,10 @@
+import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+type PlainObjectEnsureOptions = {allowedKeys?: string[], ensurePropertyValue?: EnsureFunction};
+
+
+declare function ensurePlainObject(value: any, options?: PlainObjectEnsureOptions & EnsureBaseOptions): object;
+declare function ensurePlainObject(value: any, options?: PlainObjectEnsureOptions & EnsureBaseOptions & EnsureIsOptional): object | null;
+declare function ensurePlainObject(value: any, options?: PlainObjectEnsureOptions & EnsureBaseOptions & EnsureIsOptional & EnsureDefault): object;
+
+export default ensurePlainObject;
diff --git a/node_modules/ext/node_modules/type/ts-types/plain-object/is.d.ts b/node_modules/ext/node_modules/type/ts-types/plain-object/is.d.ts
new file mode 100644
index 0000000..8626085
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/plain-object/is.d.ts
@@ -0,0 +1,2 @@
+declare function isPlainObject(value: any): boolean;
+export default isPlainObject;
diff --git a/node_modules/ext/node_modules/type/ts-types/promise/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/promise/ensure.d.ts
new file mode 100644
index 0000000..3ddf4ea
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/promise/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensurePromise(value: any, options?: EnsureBaseOptions): Promise;
+declare function ensurePromise(value: any, options?: EnsureBaseOptions & EnsureIsOptional): Promise | null;
+declare function ensurePromise(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault>): Promise;
+
+export default ensurePromise;
diff --git a/node_modules/ext/node_modules/type/ts-types/promise/is.d.ts b/node_modules/ext/node_modules/type/ts-types/promise/is.d.ts
new file mode 100644
index 0000000..9306fe5
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/promise/is.d.ts
@@ -0,0 +1,2 @@
+declare function isPromise(value: any): boolean;
+export default isPromise;
diff --git a/node_modules/ext/node_modules/type/ts-types/prototype/is.d.ts b/node_modules/ext/node_modules/type/ts-types/prototype/is.d.ts
new file mode 100644
index 0000000..7f2eb12
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/prototype/is.d.ts
@@ -0,0 +1,2 @@
+declare function isPrototype(value: any): boolean;
+export default isPrototype;
diff --git a/node_modules/ext/node_modules/type/ts-types/reg-exp/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/reg-exp/ensure.d.ts
new file mode 100644
index 0000000..95a2c9b
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/reg-exp/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureRegExp(value: any, options?: EnsureBaseOptions): RegExp;
+declare function ensureRegExp(value: any, options?: EnsureBaseOptions & EnsureIsOptional): RegExp | null;
+declare function ensureRegExp(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): RegExp;
+
+export default ensureRegExp;
diff --git a/node_modules/ext/node_modules/type/ts-types/reg-exp/is.d.ts b/node_modules/ext/node_modules/type/ts-types/reg-exp/is.d.ts
new file mode 100644
index 0000000..a325e34
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/reg-exp/is.d.ts
@@ -0,0 +1,2 @@
+declare function isRegExp(value: any): boolean;
+export default isRegExp;
diff --git a/node_modules/ext/node_modules/type/ts-types/safe-integer/coerce.d.ts b/node_modules/ext/node_modules/type/ts-types/safe-integer/coerce.d.ts
new file mode 100644
index 0000000..5e6539c
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/safe-integer/coerce.d.ts
@@ -0,0 +1,2 @@
+declare function coerceToSafeInteger(value: any): number | null;
+export default coerceToSafeInteger;
diff --git a/node_modules/ext/node_modules/type/ts-types/safe-integer/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/safe-integer/ensure.d.ts
new file mode 100644
index 0000000..5d4b953
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/safe-integer/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureSafeInteger(value: any, options?: EnsureBaseOptions): number;
+declare function ensureSafeInteger(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
+declare function ensureSafeInteger(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): number;
+
+export default ensureSafeInteger;
diff --git a/node_modules/ext/node_modules/type/ts-types/set/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/set/ensure.d.ts
new file mode 100644
index 0000000..2b14259
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/set/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureSet(value: any, options?: EnsureBaseOptions): Set;
+declare function ensureSet(value: any, options?: EnsureBaseOptions & EnsureIsOptional): Set | null;
+declare function ensureSet(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault>): Set;
+
+export default ensureSet;
diff --git a/node_modules/ext/node_modules/type/ts-types/set/is.d.ts b/node_modules/ext/node_modules/type/ts-types/set/is.d.ts
new file mode 100644
index 0000000..530aed3
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/set/is.d.ts
@@ -0,0 +1,2 @@
+declare function isSet(value: any): boolean;
+export default isSet;
diff --git a/node_modules/ext/node_modules/type/ts-types/string/coerce.d.ts b/node_modules/ext/node_modules/type/ts-types/string/coerce.d.ts
new file mode 100644
index 0000000..603519d
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/string/coerce.d.ts
@@ -0,0 +1,2 @@
+declare function coerceToString(value: any): string | null;
+export default coerceToString;
diff --git a/node_modules/ext/node_modules/type/ts-types/string/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/string/ensure.d.ts
new file mode 100644
index 0000000..d31965a
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/string/ensure.d.ts
@@ -0,0 +1,7 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureString(value: any, options?: EnsureBaseOptions): string;
+declare function ensureString(value: any, options?: EnsureBaseOptions & EnsureIsOptional): string | null;
+declare function ensureString(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): string;
+
+export default ensureString;
diff --git a/node_modules/ext/node_modules/type/ts-types/thenable/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/thenable/ensure.d.ts
new file mode 100644
index 0000000..741faad
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/thenable/ensure.d.ts
@@ -0,0 +1,10 @@
+import { EnsureFunction, EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+type ThenableObject = { then: EnsureFunction } & object;
+
+
+declare function ensureThenable(value: any, options?: EnsureBaseOptions): Promise | ThenableObject;
+declare function ensureThenable(value: any, options?: EnsureBaseOptions & EnsureIsOptional): Promise | ThenableObject | null;
+declare function ensureThenable(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault | ThenableObject>): Promise | ThenableObject;
+
+export default ensureThenable;
diff --git a/node_modules/ext/node_modules/type/ts-types/thenable/is.d.ts b/node_modules/ext/node_modules/type/ts-types/thenable/is.d.ts
new file mode 100644
index 0000000..c8f207f
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/thenable/is.d.ts
@@ -0,0 +1,2 @@
+declare function isThenable(value: any): boolean;
+export default isThenable;
diff --git a/node_modules/ext/node_modules/type/ts-types/time-value/coerce.d.ts b/node_modules/ext/node_modules/type/ts-types/time-value/coerce.d.ts
new file mode 100644
index 0000000..44849ba
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/time-value/coerce.d.ts
@@ -0,0 +1,2 @@
+declare function coerceToTimeValue(value: any): number | null;
+export default coerceToTimeValue;
diff --git a/node_modules/ext/node_modules/type/ts-types/time-value/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/time-value/ensure.d.ts
new file mode 100644
index 0000000..f8084b8
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/time-value/ensure.d.ts
@@ -0,0 +1,5 @@
+import { EnsureBaseOptions, EnsureIsOptional, EnsureDefault } from '../ensure';
+
+declare function ensureTimeValue(value: any, options?: EnsureBaseOptions & EnsureIsOptional): number | null;
+declare function ensureTimeValue(value: any, options?: EnsureBaseOptions & EnsureIsOptional & EnsureDefault): number;
+export default ensureTimeValue;
diff --git a/node_modules/ext/node_modules/type/ts-types/value/ensure.d.ts b/node_modules/ext/node_modules/type/ts-types/value/ensure.d.ts
new file mode 100644
index 0000000..928b29e
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/value/ensure.d.ts
@@ -0,0 +1,4 @@
+import { EnsureOptions } from '../ensure';
+
+declare function ensureValue(value: any, options?: EnsureOptions): T;
+export default ensureValue;
diff --git a/node_modules/ext/node_modules/type/ts-types/value/is.d.ts b/node_modules/ext/node_modules/type/ts-types/value/is.d.ts
new file mode 100644
index 0000000..31f306d
--- /dev/null
+++ b/node_modules/ext/node_modules/type/ts-types/value/is.d.ts
@@ -0,0 +1,2 @@
+declare function isValue(value: any): boolean;
+export default isValue;
diff --git a/node_modules/ext/node_modules/type/value/ensure.js b/node_modules/ext/node_modules/type/value/ensure.js
new file mode 100644
index 0000000..3067a3e
--- /dev/null
+++ b/node_modules/ext/node_modules/type/value/ensure.js
@@ -0,0 +1,12 @@
+"use strict";
+
+var resolveException = require("../lib/resolve-exception")
+ , is = require("./is");
+
+module.exports = function (value/*, options*/) {
+ if (is(value)) return value;
+ var options = arguments[1];
+ var errorMessage =
+ options && options.name ? "Expected a value for %n, received %v" : "Cannot use %v";
+ return resolveException(value, errorMessage, options);
+};
diff --git a/node_modules/ext/node_modules/type/value/is.js b/node_modules/ext/node_modules/type/value/is.js
new file mode 100644
index 0000000..648aa9c
--- /dev/null
+++ b/node_modules/ext/node_modules/type/value/is.js
@@ -0,0 +1,6 @@
+"use strict";
+
+// ES3 safe
+var _undefined = void 0;
+
+module.exports = function (value) { return value !== _undefined && value !== null; };
diff --git a/node_modules/ext/object/clear.js b/node_modules/ext/object/clear.js
new file mode 100644
index 0000000..be3be2b
--- /dev/null
+++ b/node_modules/ext/object/clear.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var ensureObject = require("type/object/ensure")
+ , ensure = require("type/ensure");
+
+var objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+module.exports = function (object) {
+ ensure(["object", object, ensureObject]);
+ for (var key in object) {
+ if (!objPropertyIsEnumerable.call(object, key)) continue;
+ delete object[key];
+ }
+ return object;
+};
diff --git a/node_modules/ext/object/entries/implement.js b/node_modules/ext/object/entries/implement.js
new file mode 100644
index 0000000..383ceee
--- /dev/null
+++ b/node_modules/ext/object/entries/implement.js
@@ -0,0 +1,10 @@
+"use strict";
+
+if (!require("./is-implemented")()) {
+ Object.defineProperty(Object, "entries", {
+ value: require("./implementation"),
+ configurable: true,
+ enumerable: false,
+ writable: true
+ });
+}
diff --git a/node_modules/ext/object/entries/implementation.js b/node_modules/ext/object/entries/implementation.js
new file mode 100644
index 0000000..d6f121c
--- /dev/null
+++ b/node_modules/ext/object/entries/implementation.js
@@ -0,0 +1,15 @@
+"use strict";
+
+var ensureValue = require("type/value/ensure");
+
+var objPropertyIsEnumerable = Object.prototype.propertyIsEnumerable;
+
+module.exports = function (object) {
+ object = Object(ensureValue(object));
+ var result = [];
+ for (var key in object) {
+ if (!objPropertyIsEnumerable.call(object, key)) continue;
+ result.push([key, object[key]]);
+ }
+ return result;
+};
diff --git a/node_modules/ext/object/entries/index.js b/node_modules/ext/object/entries/index.js
new file mode 100644
index 0000000..0a784d6
--- /dev/null
+++ b/node_modules/ext/object/entries/index.js
@@ -0,0 +1,3 @@
+"use strict";
+
+module.exports = require("./is-implemented")() ? Object.entries : require("./implementation");
diff --git a/node_modules/ext/object/entries/is-implemented.js b/node_modules/ext/object/entries/is-implemented.js
new file mode 100644
index 0000000..aad52b2
--- /dev/null
+++ b/node_modules/ext/object/entries/is-implemented.js
@@ -0,0 +1,6 @@
+"use strict";
+
+module.exports = function () {
+ try { return Object.entries({ foo: 12 })[0][0] === "foo"; }
+ catch (e) { return false; }
+};
diff --git a/node_modules/ext/package.json b/node_modules/ext/package.json
new file mode 100644
index 0000000..4bf9e12
--- /dev/null
+++ b/node_modules/ext/package.json
@@ -0,0 +1,152 @@
+{
+ "name": "ext",
+ "version": "1.7.0",
+ "description": "JavaScript utilities with respect to emerging standard",
+ "author": "Mariusz Nowak (http://www.medikoo.com/)",
+ "keywords": [
+ "ecmascript",
+ "es",
+ "es6",
+ "extensions",
+ "ext",
+ "addons",
+ "lodash",
+ "extras",
+ "harmony",
+ "javascript",
+ "polyfill",
+ "shim",
+ "util",
+ "utils",
+ "utilities"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/medikoo/es5-ext#ext"
+ },
+ "dependencies": {
+ "type": "^2.7.2"
+ },
+ "devDependencies": {
+ "chai": "^4.3.6",
+ "eslint": "^8.23.0",
+ "eslint-config-medikoo": "^4.1.2",
+ "git-list-updated": "^1.2.1",
+ "github-release-from-cc-changelog": "^2.3.0",
+ "husky": "^4.3.8",
+ "lint-staged": "^13.0.3",
+ "mocha": "^6.2.3",
+ "nyc": "^15.1.0",
+ "prettier-elastic": "^2.2.1",
+ "sinon": "^8.1.1",
+ "timers-ext": "^0.1.7"
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "lint-staged": {
+ "*.js": [
+ "eslint"
+ ],
+ "*.{css,html,js,json,md,yaml,yml}": [
+ "prettier -c"
+ ]
+ },
+ "eslintIgnore": [
+ "_es5-ext"
+ ],
+ "eslintConfig": {
+ "extends": "medikoo/es3",
+ "root": true,
+ "overrides": [
+ {
+ "files": "global-this/implementation.js",
+ "globals": {
+ "__global__": true,
+ "self": true,
+ "window": true
+ },
+ "rules": {
+ "no-extend-native": "off",
+ "strict": "off"
+ }
+ },
+ {
+ "files": [
+ "global-this/is-implemented.js",
+ "global-this/index.js"
+ ],
+ "globals": {
+ "globalThis": true
+ }
+ },
+ {
+ "files": "string_/camel-to-hyphen.js",
+ "rules": {
+ "id-length": "off"
+ }
+ },
+ {
+ "files": "test/**/*.js",
+ "env": {
+ "mocha": true
+ }
+ },
+ {
+ "files": [
+ "test/promise/limit.js",
+ "test/thenable_/finally.js"
+ ],
+ "globals": {
+ "Promise": true
+ }
+ }
+ ]
+ },
+ "prettier": {
+ "printWidth": 100,
+ "tabWidth": 4,
+ "overrides": [
+ {
+ "files": [
+ "*.md",
+ "*.yml"
+ ],
+ "options": {
+ "tabWidth": 2
+ }
+ }
+ ]
+ },
+ "mocha": {
+ "recursive": true
+ },
+ "nyc": {
+ "all": true,
+ "exclude": [
+ ".github",
+ "_es5-ext",
+ "coverage/**",
+ "test/**",
+ "*.config.js"
+ ],
+ "reporter": [
+ "lcov",
+ "html",
+ "text-summary"
+ ]
+ },
+ "scripts": {
+ "coverage": "nyc npm test",
+ "lint": "eslint .",
+ "lint:updated": "pipe-git-updated --ext=js -- eslint --ignore-pattern '!*'",
+ "prettier-check": "prettier -c --ignore-path .gitignore \"**/*.{css,html,js,json,md,yaml,yml}\"",
+ "prettier-check:updated": "pipe-git-updated --ext=css --ext=html --ext=js --ext=json --ext=md --ext=yaml --ext=yml -- prettier -c",
+ "prettify": "prettier --write --ignore-path .gitignore '**/*.{css,html,js,json,md,yaml,yml}'",
+ "prettify:updated": "pipe-git-updated ---base=main -ext=css --ext=html --ext=js --ext=json --ext=md --ext=yaml --ext=yml -- prettier --write",
+ "test": "mocha"
+ },
+ "license": "ISC"
+}
diff --git a/node_modules/ext/promise/limit.js b/node_modules/ext/promise/limit.js
new file mode 100644
index 0000000..841afad
--- /dev/null
+++ b/node_modules/ext/promise/limit.js
@@ -0,0 +1,62 @@
+"use strict";
+
+var ensureNaturalNumber = require("type/natural-number/ensure")
+ , ensurePlainFunction = require("type/plain-function/ensure")
+ , ensure = require("type/ensure")
+ , defineFunctionLength = require("../lib/private/define-function-length");
+
+module.exports = function (limit, callback) {
+ limit = ensure(
+ ["limit", limit, ensureNaturalNumber, { min: 1 }],
+ ["callback", callback, ensurePlainFunction]
+ )[0];
+
+ var Promise = this, ongoingCount = 0, pending = [];
+ var onSuccess, onFailure;
+
+ var release = function () {
+ --ongoingCount;
+ if (ongoingCount >= limit) return;
+ var next = pending.shift();
+ if (!next) return;
+ ++ongoingCount;
+ try {
+ next.resolve(
+ Promise.resolve(callback.apply(next.context, next.arguments)).then(
+ onSuccess, onFailure
+ )
+ );
+ } catch (exception) {
+ release();
+ next.reject(exception);
+ }
+ };
+
+ onSuccess = function (value) {
+ release();
+ return value;
+ };
+
+ onFailure = function (exception) {
+ release();
+ throw exception;
+ };
+
+ return defineFunctionLength(callback.length, function () {
+ if (ongoingCount >= limit) {
+ var context = this, args = arguments;
+ return new Promise(function (resolve, reject) {
+ pending.push({
+ context: context,
+ arguments: args,
+ resolve: resolve,
+ reject: reject
+ });
+ });
+ }
+ ++ongoingCount;
+ try {
+ return Promise.resolve(callback.apply(this, arguments)).then(onSuccess, onFailure);
+ } catch (exception) { return onFailure(exception); }
+ });
+};
diff --git a/node_modules/ext/string/random.js b/node_modules/ext/string/random.js
new file mode 100644
index 0000000..c96ef92
--- /dev/null
+++ b/node_modules/ext/string/random.js
@@ -0,0 +1,50 @@
+"use strict";
+
+var isObject = require("type/object/is")
+ , ensureNaturalNumber = require("type/natural-number/ensure")
+ , ensureString = require("type/string/ensure");
+
+var generated = Object.create(null), random = Math.random, uniqTryLimit = 100;
+
+var getChunk = function () { return random().toString(36).slice(2); };
+
+var getString = function (length, charset) {
+ var str;
+ if (charset) {
+ var charsetLength = charset.length;
+ str = "";
+ for (var i = 0; i < length; ++i) {
+ str += charset.charAt(Math.floor(Math.random() * charsetLength));
+ }
+ return str;
+ }
+ str = getChunk();
+ if (length === null) return str;
+ while (str.length < length) str += getChunk();
+ return str.slice(0, length);
+};
+
+module.exports = function (/* options */) {
+ var options = arguments[0];
+ if (!isObject(options)) options = {};
+ var length = ensureNaturalNumber(options.length, { "default": 10 })
+ , isUnique = options.isUnique
+ , charset = ensureString(options.charset, { isOptional: true });
+
+ var str = getString(length, charset);
+ if (isUnique) {
+ var count = 0;
+ while (generated[str]) {
+ if (++count === uniqTryLimit) {
+ throw new Error(
+ "Cannot generate random string.\n" +
+ "String.random is not designed to effectively generate many short and " +
+ "unique random strings"
+ );
+ }
+ str = getString(length);
+ }
+ generated[str] = true;
+ }
+ return str;
+};
diff --git a/node_modules/ext/string_/camel-to-hyphen.js b/node_modules/ext/string_/camel-to-hyphen.js
new file mode 100644
index 0000000..feffae6
--- /dev/null
+++ b/node_modules/ext/string_/camel-to-hyphen.js
@@ -0,0 +1,49 @@
+"use strict";
+
+var ensureString = require("type/string/ensure")
+ , objHasOwnProperty = Object.prototype.hasOwnProperty;
+
+var capitalLetters = {
+ A: true,
+ B: true,
+ C: true,
+ D: true,
+ E: true,
+ F: true,
+ G: true,
+ H: true,
+ I: true,
+ J: true,
+ K: true,
+ L: true,
+ M: true,
+ N: true,
+ O: true,
+ P: true,
+ Q: true,
+ R: true,
+ S: true,
+ T: true,
+ U: true,
+ V: true,
+ W: true,
+ X: true,
+ Y: true,
+ Z: true
+};
+
+module.exports = function () {
+ var input = ensureString(this);
+ if (!input) return input;
+ var outputLetters = [];
+ for (var index = 0, letter; (letter = input[index]); ++index) {
+ if (objHasOwnProperty.call(capitalLetters, letter)) {
+ if (index) outputLetters.push("-");
+ outputLetters.push(letter.toLowerCase());
+ } else {
+ outputLetters.push(letter);
+ }
+ }
+
+ return outputLetters.join("");
+};
diff --git a/node_modules/ext/string_/capitalize.js b/node_modules/ext/string_/capitalize.js
new file mode 100644
index 0000000..bc76311
--- /dev/null
+++ b/node_modules/ext/string_/capitalize.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var ensureString = require("type/string/ensure");
+
+module.exports = function () {
+ var input = ensureString(this);
+ if (!input) return input;
+ return input.charAt(0).toUpperCase() + input.slice(1);
+};
diff --git a/node_modules/ext/string_/includes/implementation.js b/node_modules/ext/string_/includes/implementation.js
new file mode 100644
index 0000000..a7219f2
--- /dev/null
+++ b/node_modules/ext/string_/includes/implementation.js
@@ -0,0 +1,7 @@
+"use strict";
+
+var indexOf = String.prototype.indexOf;
+
+module.exports = function (searchString/*, position*/) {
+ return indexOf.call(this, searchString, arguments[1]) > -1;
+};
diff --git a/node_modules/ext/string_/includes/index.js b/node_modules/ext/string_/includes/index.js
new file mode 100644
index 0000000..ee4e284
--- /dev/null
+++ b/node_modules/ext/string_/includes/index.js
@@ -0,0 +1,5 @@
+"use strict";
+
+module.exports = require("./is-implemented")()
+ ? String.prototype.includes
+ : require("./implementation");
diff --git a/node_modules/ext/string_/includes/is-implemented.js b/node_modules/ext/string_/includes/is-implemented.js
new file mode 100644
index 0000000..edc4515
--- /dev/null
+++ b/node_modules/ext/string_/includes/is-implemented.js
@@ -0,0 +1,8 @@
+"use strict";
+
+var str = "razdwatrzy";
+
+module.exports = function () {
+ if (typeof str.includes !== "function") return false;
+ return str.includes("dwa") === true && str.includes("foo") === false;
+};
diff --git a/node_modules/ext/thenable_/finally.js b/node_modules/ext/thenable_/finally.js
new file mode 100644
index 0000000..42274bf
--- /dev/null
+++ b/node_modules/ext/thenable_/finally.js
@@ -0,0 +1,24 @@
+"use strict";
+
+var ensurePlainFunction = require("type/plain-function/ensure")
+ , isThenable = require("type/thenable/is")
+ , ensureThenable = require("type/thenable/ensure");
+
+var resolveCallback = function (callback, next) {
+ var callbackResult = callback();
+ if (!isThenable(callbackResult)) return next();
+ return callbackResult.then(next);
+};
+
+module.exports = function (callback) {
+ ensureThenable(this);
+ ensurePlainFunction(callback);
+ return this.then(
+ function (result) {
+ return resolveCallback(callback, function () { return result; });
+ },
+ function (error) {
+ return resolveCallback(callback, function () { throw error; });
+ }
+ );
+};
diff --git a/node_modules/extend-shallow/LICENSE b/node_modules/extend-shallow/LICENSE
new file mode 100644
index 0000000..fa30c4c
--- /dev/null
+++ b/node_modules/extend-shallow/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2015, Jon Schlinkert.
+
+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/node_modules/extend-shallow/README.md b/node_modules/extend-shallow/README.md
new file mode 100644
index 0000000..cdc45d4
--- /dev/null
+++ b/node_modules/extend-shallow/README.md
@@ -0,0 +1,61 @@
+# extend-shallow [![NPM version](https://badge.fury.io/js/extend-shallow.svg)](http://badge.fury.io/js/extend-shallow) [![Build Status](https://travis-ci.org/jonschlinkert/extend-shallow.svg)](https://travis-ci.org/jonschlinkert/extend-shallow)
+
+> Extend an object with the properties of additional objects. node.js/javascript util.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i extend-shallow --save
+```
+
+## Usage
+
+```js
+var extend = require('extend-shallow');
+
+extend({a: 'b'}, {c: 'd'})
+//=> {a: 'b', c: 'd'}
+```
+
+Pass an empty object to shallow clone:
+
+```js
+var obj = {};
+extend(obj, {a: 'b'}, {c: 'd'})
+//=> {a: 'b', c: 'd'}
+```
+
+## Related
+
+* [extend-shallow](https://github.com/jonschlinkert/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util.
+* [for-own](https://github.com/jonschlinkert/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own)
+* [for-in](https://github.com/jonschlinkert/for-in): Iterate over the own and inherited enumerable properties of an objecte, and return an object… [more](https://github.com/jonschlinkert/for-in)
+* [is-plain-object](https://github.com/jonschlinkert/is-plain-object): Returns true if an object was created by the `Object` constructor.
+* [isobject](https://github.com/jonschlinkert/isobject): Returns true if the value is an object and not an array or null.
+* [kind-of](https://github.com/jonschlinkert/kind-of): Get the native type of a value.
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on June 29, 2015._
\ No newline at end of file
diff --git a/node_modules/extend-shallow/index.js b/node_modules/extend-shallow/index.js
new file mode 100644
index 0000000..92a067f
--- /dev/null
+++ b/node_modules/extend-shallow/index.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var isObject = require('is-extendable');
+
+module.exports = function extend(o/*, objects*/) {
+ if (!isObject(o)) { o = {}; }
+
+ var len = arguments.length;
+ for (var i = 1; i < len; i++) {
+ var obj = arguments[i];
+
+ if (isObject(obj)) {
+ assign(o, obj);
+ }
+ }
+ return o;
+};
+
+function assign(a, b) {
+ for (var key in b) {
+ if (hasOwn(b, key)) {
+ a[key] = b[key];
+ }
+ }
+}
+
+/**
+ * Returns true if the given `key` is an own property of `obj`.
+ */
+
+function hasOwn(obj, key) {
+ return Object.prototype.hasOwnProperty.call(obj, key);
+}
diff --git a/node_modules/extend-shallow/package.json b/node_modules/extend-shallow/package.json
new file mode 100644
index 0000000..b42e01c
--- /dev/null
+++ b/node_modules/extend-shallow/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "extend-shallow",
+ "description": "Extend an object with the properties of additional objects. node.js/javascript util.",
+ "version": "2.0.1",
+ "homepage": "https://github.com/jonschlinkert/extend-shallow",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/extend-shallow",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/extend-shallow/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "is-extendable": "^0.1.0"
+ },
+ "devDependencies": {
+ "array-slice": "^0.2.3",
+ "benchmarked": "^0.1.4",
+ "chalk": "^1.0.0",
+ "for-own": "^0.1.3",
+ "glob": "^5.0.12",
+ "is-plain-object": "^2.0.1",
+ "kind-of": "^2.0.0",
+ "minimist": "^1.1.1",
+ "mocha": "^2.2.5",
+ "should": "^7.0.1"
+ },
+ "keywords": [
+ "assign",
+ "extend",
+ "javascript",
+ "js",
+ "keys",
+ "merge",
+ "obj",
+ "object",
+ "prop",
+ "properties",
+ "property",
+ "props",
+ "shallow",
+ "util",
+ "utility",
+ "utils",
+ "value"
+ ]
+}
\ No newline at end of file
diff --git a/node_modules/extend/.editorconfig b/node_modules/extend/.editorconfig
new file mode 100644
index 0000000..bc228f8
--- /dev/null
+++ b/node_modules/extend/.editorconfig
@@ -0,0 +1,20 @@
+root = true
+
+[*]
+indent_style = tab
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+max_line_length = 150
+
+[CHANGELOG.md]
+indent_style = space
+indent_size = 2
+
+[*.json]
+max_line_length = off
+
+[Makefile]
+max_line_length = off
diff --git a/node_modules/extend/.eslintrc b/node_modules/extend/.eslintrc
new file mode 100644
index 0000000..a34cf28
--- /dev/null
+++ b/node_modules/extend/.eslintrc
@@ -0,0 +1,17 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "complexity": [2, 20],
+ "eqeqeq": [2, "allow-null"],
+ "func-name-matching": [1],
+ "max-depth": [1, 4],
+ "max-statements": [2, 26],
+ "no-extra-parens": [1],
+ "no-magic-numbers": [0],
+ "no-restricted-syntax": [2, "BreakStatement", "ContinueStatement", "DebuggerStatement", "LabeledStatement", "WithStatement"],
+ "sort-keys": [0],
+ }
+}
diff --git a/node_modules/extend/.jscs.json b/node_modules/extend/.jscs.json
new file mode 100644
index 0000000..3cce01d
--- /dev/null
+++ b/node_modules/extend/.jscs.json
@@ -0,0 +1,175 @@
+{
+ "es3": true,
+
+ "additionalRules": [],
+
+ "requireSemicolons": true,
+
+ "disallowMultipleSpaces": true,
+
+ "disallowIdentifierNames": [],
+
+ "requireCurlyBraces": {
+ "allExcept": [],
+ "keywords": ["if", "else", "for", "while", "do", "try", "catch"]
+ },
+
+ "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"],
+
+ "disallowSpaceAfterKeywords": [],
+
+ "disallowSpaceBeforeComma": true,
+ "disallowSpaceAfterComma": false,
+ "disallowSpaceBeforeSemicolon": true,
+
+ "disallowNodeTypes": [
+ "DebuggerStatement",
+ "LabeledStatement",
+ "SwitchCase",
+ "SwitchStatement",
+ "WithStatement"
+ ],
+
+ "requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] },
+
+ "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true },
+ "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true },
+ "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
+ "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true },
+ "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true },
+
+ "requireSpaceBetweenArguments": true,
+
+ "disallowSpacesInsideParentheses": true,
+
+ "disallowSpacesInsideArrayBrackets": true,
+
+ "disallowQuotedKeysInObjects": { "allExcept": ["reserved"] },
+
+ "disallowSpaceAfterObjectKeys": true,
+
+ "requireCommaBeforeLineBreak": true,
+
+ "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
+ "requireSpaceAfterPrefixUnaryOperators": [],
+
+ "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
+ "requireSpaceBeforePostfixUnaryOperators": [],
+
+ "disallowSpaceBeforeBinaryOperators": [],
+ "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
+
+ "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
+ "disallowSpaceAfterBinaryOperators": [],
+
+ "disallowImplicitTypeConversion": ["binary", "string"],
+
+ "disallowKeywords": ["with", "eval"],
+
+ "requireKeywordsOnNewLine": [],
+ "disallowKeywordsOnNewLine": ["else"],
+
+ "requireLineFeedAtFileEnd": true,
+
+ "disallowTrailingWhitespace": true,
+
+ "disallowTrailingComma": true,
+
+ "excludeFiles": ["node_modules/**", "vendor/**"],
+
+ "disallowMultipleLineStrings": true,
+
+ "requireDotNotation": { "allExcept": ["keywords"] },
+
+ "requireParenthesesAroundIIFE": true,
+
+ "validateLineBreaks": "LF",
+
+ "validateQuoteMarks": {
+ "escape": true,
+ "mark": "'"
+ },
+
+ "disallowOperatorBeforeLineBreak": [],
+
+ "requireSpaceBeforeKeywords": [
+ "do",
+ "for",
+ "if",
+ "else",
+ "switch",
+ "case",
+ "try",
+ "catch",
+ "finally",
+ "while",
+ "with",
+ "return"
+ ],
+
+ "validateAlignedFunctionParameters": {
+ "lineBreakAfterOpeningBraces": true,
+ "lineBreakBeforeClosingBraces": true
+ },
+
+ "requirePaddingNewLinesBeforeExport": true,
+
+ "validateNewlineAfterArrayElements": {
+ "maximum": 6
+ },
+
+ "requirePaddingNewLinesAfterUseStrict": true,
+
+ "disallowArrowFunctions": true,
+
+ "disallowMultiLineTernary": true,
+
+ "validateOrderInObjectKeys": false,
+
+ "disallowIdenticalDestructuringNames": true,
+
+ "disallowNestedTernaries": { "maxLevel": 1 },
+
+ "requireSpaceAfterComma": { "allExcept": ["trailing"] },
+ "requireAlignedMultilineParams": false,
+
+ "requireSpacesInGenerator": {
+ "afterStar": true
+ },
+
+ "disallowSpacesInGenerator": {
+ "beforeStar": true
+ },
+
+ "disallowVar": false,
+
+ "requireArrayDestructuring": false,
+
+ "requireEnhancedObjectLiterals": false,
+
+ "requireObjectDestructuring": false,
+
+ "requireEarlyReturn": false,
+
+ "requireCapitalizedConstructorsNew": {
+ "allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"]
+ },
+
+ "requireImportAlphabetized": false,
+
+ "requireSpaceBeforeObjectValues": true,
+ "requireSpaceBeforeDestructuredValues": true,
+
+ "disallowSpacesInsideTemplateStringPlaceholders": true,
+
+ "disallowArrayDestructuringReturn": false,
+
+ "requireNewlineBeforeSingleStatementsInIf": false,
+
+ "disallowUnusedVariables": true,
+
+ "requireSpacesInsideImportedObjectBraces": true,
+
+ "requireUseStrict": true
+}
+
diff --git a/node_modules/extend/.travis.yml b/node_modules/extend/.travis.yml
new file mode 100644
index 0000000..5ccdfc4
--- /dev/null
+++ b/node_modules/extend/.travis.yml
@@ -0,0 +1,230 @@
+language: node_js
+os:
+ - linux
+node_js:
+ - "10.7"
+ - "9.11"
+ - "8.11"
+ - "7.10"
+ - "6.14"
+ - "5.12"
+ - "4.9"
+ - "iojs-v3.3"
+ - "iojs-v2.5"
+ - "iojs-v1.8"
+ - "0.12"
+ - "0.10"
+ - "0.8"
+before_install:
+ - 'case "${TRAVIS_NODE_VERSION}" in 0.*) export NPM_CONFIG_STRICT_SSL=false ;; esac'
+ - 'nvm install-latest-npm'
+install:
+ - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ] || [ "${TRAVIS_NODE_VERSION}" = "0.9" ]; then nvm install --latest-npm 0.8 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
+script:
+ - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi'
+ - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi'
+ - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi'
+ - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi'
+sudo: false
+env:
+ - TEST=true
+matrix:
+ fast_finish: true
+ include:
+ - node_js: "lts/*"
+ env: PRETEST=true
+ - node_js: "lts/*"
+ env: POSTTEST=true
+ - node_js: "4"
+ env: COVERAGE=true
+ - node_js: "10.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "10.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "10.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "10.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "10.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "10.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "10.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.10"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "9.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.10"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.13"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.12"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.11"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.10"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.11"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.10"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v3.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v3.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v3.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.11"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.4"
+ env: TEST=true ALLOW_FAILURE=true
+ allow_failures:
+ - os: osx
+ - env: TEST=true ALLOW_FAILURE=true
diff --git a/node_modules/extend/CHANGELOG.md b/node_modules/extend/CHANGELOG.md
new file mode 100644
index 0000000..2cf7de6
--- /dev/null
+++ b/node_modules/extend/CHANGELOG.md
@@ -0,0 +1,83 @@
+3.0.2 / 2018-07-19
+==================
+ * [Fix] Prevent merging `__proto__` property (#48)
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape`
+ * [Tests] up to `node` `v10.7`, `v9.11`, `v8.11`, `v7.10`, `v6.14`, `v4.9`; use `nvm install-latest-npm`
+
+3.0.1 / 2017-04-27
+==================
+ * [Fix] deep extending should work with a non-object (#46)
+ * [Dev Deps] update `tape`, `eslint`, `@ljharb/eslint-config`
+ * [Tests] up to `node` `v7.9`, `v6.10`, `v4.8`; improve matrix
+ * [Docs] Switch from vb.teelaun.ch to versionbadg.es for the npm version badge SVG.
+ * [Docs] Add example to readme (#34)
+
+3.0.0 / 2015-07-01
+==================
+ * [Possible breaking change] Use global "strict" directive (#32)
+ * [Tests] `int` is an ES3 reserved word
+ * [Tests] Test up to `io.js` `v2.3`
+ * [Tests] Add `npm run eslint`
+ * [Dev Deps] Update `covert`, `jscs`
+
+2.0.1 / 2015-04-25
+==================
+ * Use an inline `isArray` check, for ES3 browsers. (#27)
+ * Some old browsers fail when an identifier is `toString`
+ * Test latest `node` and `io.js` versions on `travis-ci`; speed up builds
+ * Add license info to package.json (#25)
+ * Update `tape`, `jscs`
+ * Adding a CHANGELOG
+
+2.0.0 / 2014-10-01
+==================
+ * Increase code coverage to 100%; run code coverage as part of tests
+ * Add `npm run lint`; Run linter as part of tests
+ * Remove nodeType and setInterval checks in isPlainObject
+ * Updating `tape`, `jscs`, `covert`
+ * General style and README cleanup
+
+1.3.0 / 2014-06-20
+==================
+ * Add component.json for browser support (#18)
+ * Use SVG for badges in README (#16)
+ * Updating `tape`, `covert`
+ * Updating travis-ci to work with multiple node versions
+ * Fix `deep === false` bug (returning target as {}) (#14)
+ * Fixing constructor checks in isPlainObject
+ * Adding additional test coverage
+ * Adding `npm run coverage`
+ * Add LICENSE (#13)
+ * Adding a warning about `false`, per #11
+ * General style and whitespace cleanup
+
+1.2.1 / 2013-09-14
+==================
+ * Fixing hasOwnProperty bugs that would only have shown up in specific browsers. Fixes #8
+ * Updating `tape`
+
+1.2.0 / 2013-09-02
+==================
+ * Updating the README: add badges
+ * Adding a missing variable reference.
+ * Using `tape` instead of `buster` for tests; add more tests (#7)
+ * Adding node 0.10 to Travis CI (#6)
+ * Enabling "npm test" and cleaning up package.json (#5)
+ * Add Travis CI.
+
+1.1.3 / 2012-12-06
+==================
+ * Added unit tests.
+ * Ensure extend function is named. (Looks nicer in a stack trace.)
+ * README cleanup.
+
+1.1.1 / 2012-11-07
+==================
+ * README cleanup.
+ * Added installation instructions.
+ * Added a missing semicolon
+
+1.0.0 / 2012-04-08
+==================
+ * Initial commit
+
diff --git a/node_modules/extend/LICENSE b/node_modules/extend/LICENSE
new file mode 100644
index 0000000..e16d6a5
--- /dev/null
+++ b/node_modules/extend/LICENSE
@@ -0,0 +1,23 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Stefan Thomas
+
+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/node_modules/extend/README.md b/node_modules/extend/README.md
new file mode 100644
index 0000000..5b8249a
--- /dev/null
+++ b/node_modules/extend/README.md
@@ -0,0 +1,81 @@
+[![Build Status][travis-svg]][travis-url]
+[![dependency status][deps-svg]][deps-url]
+[![dev dependency status][dev-deps-svg]][dev-deps-url]
+
+# extend() for Node.js [![Version Badge][npm-version-png]][npm-url]
+
+`node-extend` is a port of the classic extend() method from jQuery. It behaves as you expect. It is simple, tried and true.
+
+Notes:
+
+* Since Node.js >= 4,
+ [`Object.assign`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
+ now offers the same functionality natively (but without the "deep copy" option).
+ See [ECMAScript 2015 (ES6) in Node.js](https://nodejs.org/en/docs/es6).
+* Some native implementations of `Object.assign` in both Node.js and many
+ browsers (since NPM modules are for the browser too) may not be fully
+ spec-compliant.
+ Check [`object.assign`](https://www.npmjs.com/package/object.assign) module for
+ a compliant candidate.
+
+## Installation
+
+This package is available on [npm][npm-url] as: `extend`
+
+``` sh
+npm install extend
+```
+
+## Usage
+
+**Syntax:** extend **(** [`deep`], `target`, `object1`, [`objectN`] **)**
+
+*Extend one object with one or more others, returning the modified object.*
+
+**Example:**
+
+``` js
+var extend = require('extend');
+extend(targetObject, object1, object2);
+```
+
+Keep in mind that the target object will be modified, and will be returned from extend().
+
+If a boolean true is specified as the first argument, extend performs a deep copy, recursively copying any objects it finds. Otherwise, the copy will share structure with the original object(s).
+Undefined properties are not copied. However, properties inherited from the object's prototype will be copied over.
+Warning: passing `false` as the first argument is not supported.
+
+### Arguments
+
+* `deep` *Boolean* (optional)
+If set, the merge becomes recursive (i.e. deep copy).
+* `target` *Object*
+The object to extend.
+* `object1` *Object*
+The object that will be merged into the first.
+* `objectN` *Object* (Optional)
+More objects to merge into the first.
+
+## License
+
+`node-extend` is licensed under the [MIT License][mit-license-url].
+
+## Acknowledgements
+
+All credit to the jQuery authors for perfecting this amazing utility.
+
+Ported to Node.js by [Stefan Thomas][github-justmoon] with contributions by [Jonathan Buchanan][github-insin] and [Jordan Harband][github-ljharb].
+
+[travis-svg]: https://travis-ci.org/justmoon/node-extend.svg
+[travis-url]: https://travis-ci.org/justmoon/node-extend
+[npm-url]: https://npmjs.org/package/extend
+[mit-license-url]: http://opensource.org/licenses/MIT
+[github-justmoon]: https://github.com/justmoon
+[github-insin]: https://github.com/insin
+[github-ljharb]: https://github.com/ljharb
+[npm-version-png]: http://versionbadg.es/justmoon/node-extend.svg
+[deps-svg]: https://david-dm.org/justmoon/node-extend.svg
+[deps-url]: https://david-dm.org/justmoon/node-extend
+[dev-deps-svg]: https://david-dm.org/justmoon/node-extend/dev-status.svg
+[dev-deps-url]: https://david-dm.org/justmoon/node-extend#info=devDependencies
+
diff --git a/node_modules/extend/component.json b/node_modules/extend/component.json
new file mode 100644
index 0000000..1500a2f
--- /dev/null
+++ b/node_modules/extend/component.json
@@ -0,0 +1,32 @@
+{
+ "name": "extend",
+ "author": "Stefan Thomas (http://www.justmoon.net)",
+ "version": "3.0.0",
+ "description": "Port of jQuery.extend for node.js and the browser.",
+ "scripts": [
+ "index.js"
+ ],
+ "contributors": [
+ {
+ "name": "Jordan Harband",
+ "url": "https://github.com/ljharb"
+ }
+ ],
+ "keywords": [
+ "extend",
+ "clone",
+ "merge"
+ ],
+ "repository" : {
+ "type": "git",
+ "url": "https://github.com/justmoon/node-extend.git"
+ },
+ "dependencies": {
+ },
+ "devDependencies": {
+ "tape" : "~3.0.0",
+ "covert": "~0.4.0",
+ "jscs": "~1.6.2"
+ }
+}
+
diff --git a/node_modules/extend/index.js b/node_modules/extend/index.js
new file mode 100644
index 0000000..2aa3faa
--- /dev/null
+++ b/node_modules/extend/index.js
@@ -0,0 +1,117 @@
+'use strict';
+
+var hasOwn = Object.prototype.hasOwnProperty;
+var toStr = Object.prototype.toString;
+var defineProperty = Object.defineProperty;
+var gOPD = Object.getOwnPropertyDescriptor;
+
+var isArray = function isArray(arr) {
+ if (typeof Array.isArray === 'function') {
+ return Array.isArray(arr);
+ }
+
+ return toStr.call(arr) === '[object Array]';
+};
+
+var isPlainObject = function isPlainObject(obj) {
+ if (!obj || toStr.call(obj) !== '[object Object]') {
+ return false;
+ }
+
+ var hasOwnConstructor = hasOwn.call(obj, 'constructor');
+ var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');
+ // Not own constructor property must be Object
+ if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {
+ return false;
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+ var key;
+ for (key in obj) { /**/ }
+
+ return typeof key === 'undefined' || hasOwn.call(obj, key);
+};
+
+// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target
+var setProperty = function setProperty(target, options) {
+ if (defineProperty && options.name === '__proto__') {
+ defineProperty(target, options.name, {
+ enumerable: true,
+ configurable: true,
+ value: options.newValue,
+ writable: true
+ });
+ } else {
+ target[options.name] = options.newValue;
+ }
+};
+
+// Return undefined instead of __proto__ if '__proto__' is not an own property
+var getProperty = function getProperty(obj, name) {
+ if (name === '__proto__') {
+ if (!hasOwn.call(obj, name)) {
+ return void 0;
+ } else if (gOPD) {
+ // In early versions of node, obj['__proto__'] is buggy when obj has
+ // __proto__ as an own property. Object.getOwnPropertyDescriptor() works.
+ return gOPD(obj, name).value;
+ }
+ }
+
+ return obj[name];
+};
+
+module.exports = function extend() {
+ var options, name, src, copy, copyIsArray, clone;
+ var target = arguments[0];
+ var i = 1;
+ var length = arguments.length;
+ var deep = false;
+
+ // Handle a deep copy situation
+ if (typeof target === 'boolean') {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+ if (target == null || (typeof target !== 'object' && typeof target !== 'function')) {
+ target = {};
+ }
+
+ for (; i < length; ++i) {
+ options = arguments[i];
+ // Only deal with non-null/undefined values
+ if (options != null) {
+ // Extend the base object
+ for (name in options) {
+ src = getProperty(target, name);
+ copy = getProperty(options, name);
+
+ // Prevent never-ending loop
+ if (target !== copy) {
+ // Recurse if we're merging plain objects or arrays
+ if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {
+ if (copyIsArray) {
+ copyIsArray = false;
+ clone = src && isArray(src) ? src : [];
+ } else {
+ clone = src && isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ setProperty(target, { name: name, newValue: extend(deep, clone, copy) });
+
+ // Don't bring in undefined values
+ } else if (typeof copy !== 'undefined') {
+ setProperty(target, { name: name, newValue: copy });
+ }
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
diff --git a/node_modules/extend/package.json b/node_modules/extend/package.json
new file mode 100644
index 0000000..85279f7
--- /dev/null
+++ b/node_modules/extend/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "extend",
+ "author": "Stefan Thomas (http://www.justmoon.net)",
+ "version": "3.0.2",
+ "description": "Port of jQuery.extend for node.js and the browser",
+ "main": "index",
+ "scripts": {
+ "pretest": "npm run lint",
+ "test": "npm run tests-only",
+ "posttest": "npm run coverage-quiet",
+ "tests-only": "node test",
+ "coverage": "covert test/index.js",
+ "coverage-quiet": "covert test/index.js --quiet",
+ "lint": "npm run jscs && npm run eslint",
+ "jscs": "jscs *.js */*.js",
+ "eslint": "eslint *.js */*.js"
+ },
+ "contributors": [
+ {
+ "name": "Jordan Harband",
+ "url": "https://github.com/ljharb"
+ }
+ ],
+ "keywords": [
+ "extend",
+ "clone",
+ "merge"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/justmoon/node-extend.git"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "@ljharb/eslint-config": "^12.2.1",
+ "covert": "^1.1.0",
+ "eslint": "^4.19.1",
+ "jscs": "^3.0.7",
+ "tape": "^4.9.1"
+ },
+ "license": "MIT"
+}
diff --git a/node_modules/extglob/LICENSE b/node_modules/extglob/LICENSE
new file mode 100644
index 0000000..e33d14b
--- /dev/null
+++ b/node_modules/extglob/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Jon Schlinkert.
+
+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/node_modules/extglob/README.md b/node_modules/extglob/README.md
new file mode 100644
index 0000000..3255ea2
--- /dev/null
+++ b/node_modules/extglob/README.md
@@ -0,0 +1,362 @@
+# extglob [![NPM version](https://img.shields.io/npm/v/extglob.svg?style=flat)](https://www.npmjs.com/package/extglob) [![NPM monthly downloads](https://img.shields.io/npm/dm/extglob.svg?style=flat)](https://npmjs.org/package/extglob) [![NPM total downloads](https://img.shields.io/npm/dt/extglob.svg?style=flat)](https://npmjs.org/package/extglob) [![Linux Build Status](https://img.shields.io/travis/micromatch/extglob.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/extglob) [![Windows Build Status](https://img.shields.io/appveyor/ci/micromatch/extglob.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/micromatch/extglob)
+
+> Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob patterns.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save extglob
+```
+
+* Convert an extglob string to a regex-compatible string.
+* More complete (and correct) support than [minimatch](https://github.com/isaacs/minimatch) (minimatch fails a large percentage of the extglob tests)
+* Handles [negation patterns](#extglob-patterns)
+* Handles [nested patterns](#extglob-patterns)
+* Organized code base, easy to maintain and make changes when edge cases arise
+* As you can see by the [benchmarks](#benchmarks), extglob doesn't pay with speed for it's completeness, accuracy and quality.
+
+**Heads up!**: This library only supports extglobs, to handle full glob patterns and other extended globbing features use [micromatch](https://github.com/jonschlinkert/micromatch) instead.
+
+## Usage
+
+The main export is a function that takes a string and options, and returns an object with the parsed AST and the compiled `.output`, which is a regex-compatible string that can be used for matching.
+
+```js
+var extglob = require('extglob');
+console.log(extglob('!(xyz)*.js'));
+```
+
+## Extglob cheatsheet
+
+Extended globbing patterns can be defined as follows (as described by the [bash man page](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html)):
+
+| **pattern** | **regex equivalent** | **description** |
+| --- | --- | --- |
+| `?(pattern-list)` | `(...|...)?` | Matches zero or one occurrence of the given pattern(s) |
+| `*(pattern-list)` | `(...|...)*` | Matches zero or more occurrences of the given pattern(s) |
+| `+(pattern-list)` | `(...|...)+` | Matches one or more occurrences of the given pattern(s) |
+| `@(pattern-list)` | `(...|...)` | Matches one of the given pattern(s) |
+| `!(pattern-list)` | N/A | Matches anything except one of the given pattern(s) |
+
+## API
+
+### [extglob](index.js#L36)
+
+Convert the given `extglob` pattern into a regex-compatible string. Returns an object with the compiled result and the parsed AST.
+
+**Params**
+
+* `pattern` **{String}**
+* `options` **{Object}**
+* `returns` **{String}**
+
+**Example**
+
+```js
+var extglob = require('extglob');
+console.log(extglob('*.!(*a)'));
+//=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?'
+```
+
+### [.match](index.js#L56)
+
+Takes an array of strings and an extglob pattern and returns a new array that contains only the strings that match the pattern.
+
+**Params**
+
+* `list` **{Array}**: Array of strings to match
+* `pattern` **{String}**: Extglob pattern
+* `options` **{Object}**
+* `returns` **{Array}**: Returns an array of matches
+
+**Example**
+
+```js
+var extglob = require('extglob');
+console.log(extglob.match(['a.a', 'a.b', 'a.c'], '*.!(*a)'));
+//=> ['a.b', 'a.c']
+```
+
+### [.isMatch](index.js#L111)
+
+Returns true if the specified `string` matches the given extglob `pattern`.
+
+**Params**
+
+* `string` **{String}**: String to match
+* `pattern` **{String}**: Extglob pattern
+* `options` **{String}**
+* `returns` **{Boolean}**
+
+**Example**
+
+```js
+var extglob = require('extglob');
+
+console.log(extglob.isMatch('a.a', '*.!(*a)'));
+//=> false
+console.log(extglob.isMatch('a.b', '*.!(*a)'));
+//=> true
+```
+
+### [.contains](index.js#L150)
+
+Returns true if the given `string` contains the given pattern. Similar to `.isMatch` but the pattern can match any part of the string.
+
+**Params**
+
+* `str` **{String}**: The string to match.
+* `pattern` **{String}**: Glob pattern to use for matching.
+* `options` **{Object}**
+* `returns` **{Boolean}**: Returns true if the patter matches any part of `str`.
+
+**Example**
+
+```js
+var extglob = require('extglob');
+console.log(extglob.contains('aa/bb/cc', '*b'));
+//=> true
+console.log(extglob.contains('aa/bb/cc', '*d'));
+//=> false
+```
+
+### [.matcher](index.js#L184)
+
+Takes an extglob pattern and returns a matcher function. The returned function takes the string to match as its only argument.
+
+**Params**
+
+* `pattern` **{String}**: Extglob pattern
+* `options` **{String}**
+* `returns` **{Boolean}**
+
+**Example**
+
+```js
+var extglob = require('extglob');
+var isMatch = extglob.matcher('*.!(*a)');
+
+console.log(isMatch('a.a'));
+//=> false
+console.log(isMatch('a.b'));
+//=> true
+```
+
+### [.create](index.js#L214)
+
+Convert the given `extglob` pattern into a regex-compatible string. Returns an object with the compiled result and the parsed AST.
+
+**Params**
+
+* `str` **{String}**
+* `options` **{Object}**
+* `returns` **{String}**
+
+**Example**
+
+```js
+var extglob = require('extglob');
+console.log(extglob.create('*.!(*a)').output);
+//=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?'
+```
+
+### [.capture](index.js#L248)
+
+Returns an array of matches captured by `pattern` in `string`, or `null` if the pattern did not match.
+
+**Params**
+
+* `pattern` **{String}**: Glob pattern to use for matching.
+* `string` **{String}**: String to match
+* `options` **{Object}**: See available [options](#options) for changing how matches are performed
+* `returns` **{Boolean}**: Returns an array of captures if the string matches the glob pattern, otherwise `null`.
+
+**Example**
+
+```js
+var extglob = require('extglob');
+extglob.capture(pattern, string[, options]);
+
+console.log(extglob.capture('test/*.js', 'test/foo.js'));
+//=> ['foo']
+console.log(extglob.capture('test/*.js', 'foo/bar.css'));
+//=> null
+```
+
+### [.makeRe](index.js#L281)
+
+Create a regular expression from the given `pattern` and `options`.
+
+**Params**
+
+* `pattern` **{String}**: The pattern to convert to regex.
+* `options` **{Object}**
+* `returns` **{RegExp}**
+
+**Example**
+
+```js
+var extglob = require('extglob');
+var re = extglob.makeRe('*.!(*a)');
+console.log(re);
+//=> /^[^\/]*?\.(?![^\/]*?a)[^\/]*?$/
+```
+
+## Options
+
+Available options are based on the options from Bash (and the option names used in bash).
+
+### options.nullglob
+
+**Type**: `boolean`
+
+**Default**: `undefined`
+
+When enabled, the pattern itself will be returned when no matches are found.
+
+### options.nonull
+
+Alias for [options.nullglob](#optionsnullglob), included for parity with minimatch.
+
+### options.cache
+
+**Type**: `boolean`
+
+**Default**: `undefined`
+
+Functions are memoized based on the given glob patterns and options. Disable memoization by setting `options.cache` to false.
+
+### options.failglob
+
+**Type**: `boolean`
+
+**Default**: `undefined`
+
+Throw an error is no matches are found.
+
+## Benchmarks
+
+Last run on December 21, 2017
+
+```sh
+# negation-nested (49 bytes)
+ extglob x 2,228,255 ops/sec ±0.98% (89 runs sampled)
+ minimatch x 207,875 ops/sec ±0.61% (91 runs sampled)
+
+ fastest is extglob (by 1072% avg)
+
+# negation-simple (43 bytes)
+ extglob x 2,205,668 ops/sec ±1.00% (91 runs sampled)
+ minimatch x 311,923 ops/sec ±1.25% (91 runs sampled)
+
+ fastest is extglob (by 707% avg)
+
+# range-false (57 bytes)
+ extglob x 2,263,877 ops/sec ±0.40% (94 runs sampled)
+ minimatch x 271,372 ops/sec ±1.02% (91 runs sampled)
+
+ fastest is extglob (by 834% avg)
+
+# range-true (56 bytes)
+ extglob x 2,161,891 ops/sec ±0.41% (92 runs sampled)
+ minimatch x 268,265 ops/sec ±1.17% (91 runs sampled)
+
+ fastest is extglob (by 806% avg)
+
+# star-simple (46 bytes)
+ extglob x 2,211,081 ops/sec ±0.49% (92 runs sampled)
+ minimatch x 343,319 ops/sec ±0.59% (91 runs sampled)
+
+ fastest is extglob (by 644% avg)
+
+```
+
+## Differences from Bash
+
+This library has complete parity with Bash 4.3 with only a couple of minor differences.
+
+* In some cases Bash returns true if the given string "contains" the pattern, whereas this library returns true if the string is an exact match for the pattern. You can relax this by setting `options.contains` to true.
+* This library is more accurate than Bash and thus does not fail some of the tests that Bash 4.3 still lists as failing in their unit tests
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [braces](https://www.npmjs.com/package/braces): Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support… [more](https://github.com/micromatch/braces) | [homepage](https://github.com/micromatch/braces "Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.")
+* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/jonschlinkert/expand-brackets "Expand POSIX bracket expressions (character classes) in glob patterns.")
+* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used by [micromatch].")
+* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`")
+* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/micromatch/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 49 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [isiahmeadows](https://github.com/isiahmeadows) |
+| 1 | [doowb](https://github.com/doowb) |
+| 1 | [devongovett](https://github.com/devongovett) |
+| 1 | [mjbvz](https://github.com/mjbvz) |
+| 1 | [shinnn](https://github.com/shinnn) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert)
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on December 21, 2017._
+
+
+
\ No newline at end of file
diff --git a/node_modules/extglob/changelog.md b/node_modules/extglob/changelog.md
new file mode 100644
index 0000000..c9fc4fc
--- /dev/null
+++ b/node_modules/extglob/changelog.md
@@ -0,0 +1,25 @@
+## Changelog
+
+### v2.0.0
+
+**Added features**
+
+- Adds [.capture](readme.md#capture) method for capturing matches, thanks to [devongovett](https://github.com/devongovett)
+
+
+### v1.0.0
+
+**Breaking changes**
+
+- The main export now returns the compiled string, instead of the object returned from the compiler
+
+**Added features**
+
+- Adds a `.create` method to do what the main function did before v1.0.0
+
+**Other changes**
+
+- adds `expand-brackets` parsers/compilers to handle nested brackets and extglobs
+- uses `to-regex` to build regex for `makeRe` method
+- improves coverage
+- optimizations
\ No newline at end of file
diff --git a/node_modules/extglob/index.js b/node_modules/extglob/index.js
new file mode 100644
index 0000000..116e6d5
--- /dev/null
+++ b/node_modules/extglob/index.js
@@ -0,0 +1,331 @@
+'use strict';
+
+/**
+ * Module dependencies
+ */
+
+var extend = require('extend-shallow');
+var unique = require('array-unique');
+var toRegex = require('to-regex');
+
+/**
+ * Local dependencies
+ */
+
+var compilers = require('./lib/compilers');
+var parsers = require('./lib/parsers');
+var Extglob = require('./lib/extglob');
+var utils = require('./lib/utils');
+var MAX_LENGTH = 1024 * 64;
+
+/**
+ * Convert the given `extglob` pattern into a regex-compatible string. Returns
+ * an object with the compiled result and the parsed AST.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * console.log(extglob('*.!(*a)'));
+ * //=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?'
+ * ```
+ * @param {String} `pattern`
+ * @param {Object} `options`
+ * @return {String}
+ * @api public
+ */
+
+function extglob(pattern, options) {
+ return extglob.create(pattern, options).output;
+}
+
+/**
+ * Takes an array of strings and an extglob pattern and returns a new
+ * array that contains only the strings that match the pattern.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * console.log(extglob.match(['a.a', 'a.b', 'a.c'], '*.!(*a)'));
+ * //=> ['a.b', 'a.c']
+ * ```
+ * @param {Array} `list` Array of strings to match
+ * @param {String} `pattern` Extglob pattern
+ * @param {Object} `options`
+ * @return {Array} Returns an array of matches
+ * @api public
+ */
+
+extglob.match = function(list, pattern, options) {
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected pattern to be a string');
+ }
+
+ list = utils.arrayify(list);
+ var isMatch = extglob.matcher(pattern, options);
+ var len = list.length;
+ var idx = -1;
+ var matches = [];
+
+ while (++idx < len) {
+ var ele = list[idx];
+
+ if (isMatch(ele)) {
+ matches.push(ele);
+ }
+ }
+
+ // if no options were passed, uniquify results and return
+ if (typeof options === 'undefined') {
+ return unique(matches);
+ }
+
+ if (matches.length === 0) {
+ if (options.failglob === true) {
+ throw new Error('no matches found for "' + pattern + '"');
+ }
+ if (options.nonull === true || options.nullglob === true) {
+ return [pattern.split('\\').join('')];
+ }
+ }
+
+ return options.nodupes !== false ? unique(matches) : matches;
+};
+
+/**
+ * Returns true if the specified `string` matches the given
+ * extglob `pattern`.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ *
+ * console.log(extglob.isMatch('a.a', '*.!(*a)'));
+ * //=> false
+ * console.log(extglob.isMatch('a.b', '*.!(*a)'));
+ * //=> true
+ * ```
+ * @param {String} `string` String to match
+ * @param {String} `pattern` Extglob pattern
+ * @param {String} `options`
+ * @return {Boolean}
+ * @api public
+ */
+
+extglob.isMatch = function(str, pattern, options) {
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected pattern to be a string');
+ }
+
+ if (typeof str !== 'string') {
+ throw new TypeError('expected a string');
+ }
+
+ if (pattern === str) {
+ return true;
+ }
+
+ if (pattern === '' || pattern === ' ' || pattern === '.') {
+ return pattern === str;
+ }
+
+ var isMatch = utils.memoize('isMatch', pattern, options, extglob.matcher);
+ return isMatch(str);
+};
+
+/**
+ * Returns true if the given `string` contains the given pattern. Similar to `.isMatch` but
+ * the pattern can match any part of the string.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * console.log(extglob.contains('aa/bb/cc', '*b'));
+ * //=> true
+ * console.log(extglob.contains('aa/bb/cc', '*d'));
+ * //=> false
+ * ```
+ * @param {String} `str` The string to match.
+ * @param {String} `pattern` Glob pattern to use for matching.
+ * @param {Object} `options`
+ * @return {Boolean} Returns true if the patter matches any part of `str`.
+ * @api public
+ */
+
+extglob.contains = function(str, pattern, options) {
+ if (typeof str !== 'string') {
+ throw new TypeError('expected a string');
+ }
+
+ if (pattern === '' || pattern === ' ' || pattern === '.') {
+ return pattern === str;
+ }
+
+ var opts = extend({}, options, {contains: true});
+ opts.strictClose = false;
+ opts.strictOpen = false;
+ return extglob.isMatch(str, pattern, opts);
+};
+
+/**
+ * Takes an extglob pattern and returns a matcher function. The returned
+ * function takes the string to match as its only argument.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * var isMatch = extglob.matcher('*.!(*a)');
+ *
+ * console.log(isMatch('a.a'));
+ * //=> false
+ * console.log(isMatch('a.b'));
+ * //=> true
+ * ```
+ * @param {String} `pattern` Extglob pattern
+ * @param {String} `options`
+ * @return {Boolean}
+ * @api public
+ */
+
+extglob.matcher = function(pattern, options) {
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected pattern to be a string');
+ }
+
+ function matcher() {
+ var re = extglob.makeRe(pattern, options);
+ return function(str) {
+ return re.test(str);
+ };
+ }
+
+ return utils.memoize('matcher', pattern, options, matcher);
+};
+
+/**
+ * Convert the given `extglob` pattern into a regex-compatible string. Returns
+ * an object with the compiled result and the parsed AST.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * console.log(extglob.create('*.!(*a)').output);
+ * //=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?'
+ * ```
+ * @param {String} `str`
+ * @param {Object} `options`
+ * @return {String}
+ * @api public
+ */
+
+extglob.create = function(pattern, options) {
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected pattern to be a string');
+ }
+
+ function create() {
+ var ext = new Extglob(options);
+ var ast = ext.parse(pattern, options);
+ return ext.compile(ast, options);
+ }
+
+ return utils.memoize('create', pattern, options, create);
+};
+
+/**
+ * Returns an array of matches captured by `pattern` in `string`, or `null`
+ * if the pattern did not match.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * extglob.capture(pattern, string[, options]);
+ *
+ * console.log(extglob.capture('test/*.js', 'test/foo.js'));
+ * //=> ['foo']
+ * console.log(extglob.capture('test/*.js', 'foo/bar.css'));
+ * //=> null
+ * ```
+ * @param {String} `pattern` Glob pattern to use for matching.
+ * @param {String} `string` String to match
+ * @param {Object} `options` See available [options](#options) for changing how matches are performed
+ * @return {Boolean} Returns an array of captures if the string matches the glob pattern, otherwise `null`.
+ * @api public
+ */
+
+extglob.capture = function(pattern, str, options) {
+ var re = extglob.makeRe(pattern, extend({capture: true}, options));
+
+ function match() {
+ return function(string) {
+ var match = re.exec(string);
+ if (!match) {
+ return null;
+ }
+
+ return match.slice(1);
+ };
+ }
+
+ var capture = utils.memoize('capture', pattern, options, match);
+ return capture(str);
+};
+
+/**
+ * Create a regular expression from the given `pattern` and `options`.
+ *
+ * ```js
+ * var extglob = require('extglob');
+ * var re = extglob.makeRe('*.!(*a)');
+ * console.log(re);
+ * //=> /^[^\/]*?\.(?![^\/]*?a)[^\/]*?$/
+ * ```
+ * @param {String} `pattern` The pattern to convert to regex.
+ * @param {Object} `options`
+ * @return {RegExp}
+ * @api public
+ */
+
+extglob.makeRe = function(pattern, options) {
+ if (pattern instanceof RegExp) {
+ return pattern;
+ }
+
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected pattern to be a string');
+ }
+
+ if (pattern.length > MAX_LENGTH) {
+ throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters');
+ }
+
+ function makeRe() {
+ var opts = extend({strictErrors: false}, options);
+ if (opts.strictErrors === true) opts.strict = true;
+ var res = extglob.create(pattern, opts);
+ return toRegex(res.output, opts);
+ }
+
+ var regex = utils.memoize('makeRe', pattern, options, makeRe);
+ if (regex.source.length > MAX_LENGTH) {
+ throw new SyntaxError('potentially malicious regex detected');
+ }
+
+ return regex;
+};
+
+/**
+ * Cache
+ */
+
+extglob.cache = utils.cache;
+extglob.clearCache = function() {
+ extglob.cache.__data__ = {};
+};
+
+/**
+ * Expose `Extglob` constructor, parsers and compilers
+ */
+
+extglob.Extglob = Extglob;
+extglob.compilers = compilers;
+extglob.parsers = parsers;
+
+/**
+ * Expose `extglob`
+ * @type {Function}
+ */
+
+module.exports = extglob;
diff --git a/node_modules/extglob/lib/.DS_Store b/node_modules/extglob/lib/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/node_modules/extglob/lib/.DS_Store differ
diff --git a/node_modules/extglob/lib/compilers.js b/node_modules/extglob/lib/compilers.js
new file mode 100644
index 0000000..d7bed25
--- /dev/null
+++ b/node_modules/extglob/lib/compilers.js
@@ -0,0 +1,169 @@
+'use strict';
+
+var brackets = require('expand-brackets');
+
+/**
+ * Extglob compilers
+ */
+
+module.exports = function(extglob) {
+ function star() {
+ if (typeof extglob.options.star === 'function') {
+ return extglob.options.star.apply(this, arguments);
+ }
+ if (typeof extglob.options.star === 'string') {
+ return extglob.options.star;
+ }
+ return '.*?';
+ }
+
+ /**
+ * Use `expand-brackets` compilers
+ */
+
+ extglob.use(brackets.compilers);
+ extglob.compiler
+
+ /**
+ * Escaped: "\\*"
+ */
+
+ .set('escape', function(node) {
+ return this.emit(node.val, node);
+ })
+
+ /**
+ * Dot: "."
+ */
+
+ .set('dot', function(node) {
+ return this.emit('\\' + node.val, node);
+ })
+
+ /**
+ * Question mark: "?"
+ */
+
+ .set('qmark', function(node) {
+ var val = '[^\\\\/.]';
+ var prev = this.prev();
+
+ if (node.parsed.slice(-1) === '(') {
+ var ch = node.rest.charAt(0);
+ if (ch !== '!' && ch !== '=' && ch !== ':') {
+ return this.emit(val, node);
+ }
+ return this.emit(node.val, node);
+ }
+
+ if (prev.type === 'text' && prev.val) {
+ return this.emit(val, node);
+ }
+
+ if (node.val.length > 1) {
+ val += '{' + node.val.length + '}';
+ }
+ return this.emit(val, node);
+ })
+
+ /**
+ * Plus: "+"
+ */
+
+ .set('plus', function(node) {
+ var prev = node.parsed.slice(-1);
+ if (prev === ']' || prev === ')') {
+ return this.emit(node.val, node);
+ }
+ var ch = this.output.slice(-1);
+ if (!this.output || (/[?*+]/.test(ch) && node.parent.type !== 'bracket')) {
+ return this.emit('\\+', node);
+ }
+ if (/\w/.test(ch) && !node.inside) {
+ return this.emit('+\\+?', node);
+ }
+ return this.emit('+', node);
+ })
+
+ /**
+ * Star: "*"
+ */
+
+ .set('star', function(node) {
+ var prev = this.prev();
+ var prefix = prev.type !== 'text' && prev.type !== 'escape'
+ ? '(?!\\.)'
+ : '';
+
+ return this.emit(prefix + star.call(this, node), node);
+ })
+
+ /**
+ * Parens
+ */
+
+ .set('paren', function(node) {
+ return this.mapVisit(node.nodes);
+ })
+ .set('paren.open', function(node) {
+ var capture = this.options.capture ? '(' : '';
+
+ switch (node.parent.prefix) {
+ case '!':
+ case '^':
+ return this.emit(capture + '(?:(?!(?:', node);
+ case '*':
+ case '+':
+ case '?':
+ case '@':
+ return this.emit(capture + '(?:', node);
+ default: {
+ var val = node.val;
+ if (this.options.bash === true) {
+ val = '\\' + val;
+ } else if (!this.options.capture && val === '(' && node.parent.rest[0] !== '?') {
+ val += '?:';
+ }
+
+ return this.emit(val, node);
+ }
+ }
+ })
+ .set('paren.close', function(node) {
+ var capture = this.options.capture ? ')' : '';
+
+ switch (node.prefix) {
+ case '!':
+ case '^':
+ var prefix = /^(\)|$)/.test(node.rest) ? '$' : '';
+ var str = star.call(this, node);
+
+ // if the extglob has a slash explicitly defined, we know the user wants
+ // to match slashes, so we need to ensure the "star" regex allows for it
+ if (node.parent.hasSlash && !this.options.star && this.options.slash !== false) {
+ str = '.*?';
+ }
+
+ return this.emit(prefix + ('))' + str + ')') + capture, node);
+ case '*':
+ case '+':
+ case '?':
+ return this.emit(')' + node.prefix + capture, node);
+ case '@':
+ return this.emit(')' + capture, node);
+ default: {
+ var val = (this.options.bash === true ? '\\' : '') + ')';
+ return this.emit(val, node);
+ }
+ }
+ })
+
+ /**
+ * Text
+ */
+
+ .set('text', function(node) {
+ var val = node.val.replace(/[\[\]]/g, '\\$&');
+ return this.emit(val, node);
+ });
+};
diff --git a/node_modules/extglob/lib/extglob.js b/node_modules/extglob/lib/extglob.js
new file mode 100644
index 0000000..015f928
--- /dev/null
+++ b/node_modules/extglob/lib/extglob.js
@@ -0,0 +1,78 @@
+'use strict';
+
+/**
+ * Module dependencies
+ */
+
+var Snapdragon = require('snapdragon');
+var define = require('define-property');
+var extend = require('extend-shallow');
+
+/**
+ * Local dependencies
+ */
+
+var compilers = require('./compilers');
+var parsers = require('./parsers');
+
+/**
+ * Customize Snapdragon parser and renderer
+ */
+
+function Extglob(options) {
+ this.options = extend({source: 'extglob'}, options);
+ this.snapdragon = this.options.snapdragon || new Snapdragon(this.options);
+ this.snapdragon.patterns = this.snapdragon.patterns || {};
+ this.compiler = this.snapdragon.compiler;
+ this.parser = this.snapdragon.parser;
+
+ compilers(this.snapdragon);
+ parsers(this.snapdragon);
+
+ /**
+ * Override Snapdragon `.parse` method
+ */
+
+ define(this.snapdragon, 'parse', function(str, options) {
+ var parsed = Snapdragon.prototype.parse.apply(this, arguments);
+ parsed.input = str;
+
+ // escape unmatched brace/bracket/parens
+ var last = this.parser.stack.pop();
+ if (last && this.options.strict !== true) {
+ var node = last.nodes[0];
+ node.val = '\\' + node.val;
+ var sibling = node.parent.nodes[1];
+ if (sibling.type === 'star') {
+ sibling.loose = true;
+ }
+ }
+
+ // add non-enumerable parser reference
+ define(parsed, 'parser', this.parser);
+ return parsed;
+ });
+
+ /**
+ * Decorate `.parse` method
+ */
+
+ define(this, 'parse', function(ast, options) {
+ return this.snapdragon.parse.apply(this.snapdragon, arguments);
+ });
+
+ /**
+ * Decorate `.compile` method
+ */
+
+ define(this, 'compile', function(ast, options) {
+ return this.snapdragon.compile.apply(this.snapdragon, arguments);
+ });
+
+}
+
+/**
+ * Expose `Extglob`
+ */
+
+module.exports = Extglob;
diff --git a/node_modules/extglob/lib/parsers.js b/node_modules/extglob/lib/parsers.js
new file mode 100644
index 0000000..2ba7352
--- /dev/null
+++ b/node_modules/extglob/lib/parsers.js
@@ -0,0 +1,156 @@
+'use strict';
+
+var brackets = require('expand-brackets');
+var define = require('define-property');
+var utils = require('./utils');
+
+/**
+ * Characters to use in text regex (we want to "not" match
+ * characters that are matched by other parsers)
+ */
+
+var TEXT_REGEX = '([!@*?+]?\\(|\\)|[*?.+\\\\]|\\[:?(?=.*\\])|:?\\])+';
+var not = utils.createRegex(TEXT_REGEX);
+
+/**
+ * Extglob parsers
+ */
+
+function parsers(extglob) {
+ extglob.state = extglob.state || {};
+
+ /**
+ * Use `expand-brackets` parsers
+ */
+
+ extglob.use(brackets.parsers);
+ extglob.parser.sets.paren = extglob.parser.sets.paren || [];
+ extglob.parser
+
+ /**
+ * Extglob open: "*("
+ */
+
+ .capture('paren.open', function() {
+ var parsed = this.parsed;
+ var pos = this.position();
+ var m = this.match(/^([!@*?+])?\(/);
+ if (!m) return;
+
+ var prev = this.prev();
+ var prefix = m[1];
+ var val = m[0];
+
+ var open = pos({
+ type: 'paren.open',
+ parsed: parsed,
+ val: val
+ });
+
+ var node = pos({
+ type: 'paren',
+ prefix: prefix,
+ nodes: [open]
+ });
+
+ // if nested negation extglobs, just cancel them out to simplify
+ if (prefix === '!' && prev.type === 'paren' && prev.prefix === '!') {
+ prev.prefix = '@';
+ node.prefix = '@';
+ }
+
+ define(node, 'rest', this.input);
+ define(node, 'parsed', parsed);
+ define(node, 'parent', prev);
+ define(open, 'parent', node);
+
+ this.push('paren', node);
+ prev.nodes.push(node);
+ })
+
+ /**
+ * Extglob close: ")"
+ */
+
+ .capture('paren.close', function() {
+ var parsed = this.parsed;
+ var pos = this.position();
+ var m = this.match(/^\)/);
+ if (!m) return;
+
+ var parent = this.pop('paren');
+ var node = pos({
+ type: 'paren.close',
+ rest: this.input,
+ parsed: parsed,
+ val: m[0]
+ });
+
+ if (!this.isType(parent, 'paren')) {
+ if (this.options.strict) {
+ throw new Error('missing opening paren: "("');
+ }
+ node.escaped = true;
+ return node;
+ }
+
+ node.prefix = parent.prefix;
+ parent.nodes.push(node);
+ define(node, 'parent', parent);
+ })
+
+ /**
+ * Escape: "\\."
+ */
+
+ .capture('escape', function() {
+ var pos = this.position();
+ var m = this.match(/^\\(.)/);
+ if (!m) return;
+
+ return pos({
+ type: 'escape',
+ val: m[0],
+ ch: m[1]
+ });
+ })
+
+ /**
+ * Question marks: "?"
+ */
+
+ .capture('qmark', function() {
+ var parsed = this.parsed;
+ var pos = this.position();
+ var m = this.match(/^\?+(?!\()/);
+ if (!m) return;
+ extglob.state.metachar = true;
+ return pos({
+ type: 'qmark',
+ rest: this.input,
+ parsed: parsed,
+ val: m[0]
+ });
+ })
+
+ /**
+ * Character parsers
+ */
+
+ .capture('star', /^\*(?!\()/)
+ .capture('plus', /^\+(?!\()/)
+ .capture('dot', /^\./)
+ .capture('text', not);
+};
+
+/**
+ * Expose text regex string
+ */
+
+module.exports.TEXT_REGEX = TEXT_REGEX;
+
+/**
+ * Extglob parsers
+ */
+
+module.exports = parsers;
diff --git a/node_modules/extglob/lib/utils.js b/node_modules/extglob/lib/utils.js
new file mode 100644
index 0000000..37a59fb
--- /dev/null
+++ b/node_modules/extglob/lib/utils.js
@@ -0,0 +1,69 @@
+'use strict';
+
+var regex = require('regex-not');
+var Cache = require('fragment-cache');
+
+/**
+ * Utils
+ */
+
+var utils = module.exports;
+var cache = utils.cache = new Cache();
+
+/**
+ * Cast `val` to an array
+ * @return {Array}
+ */
+
+utils.arrayify = function(val) {
+ if (!Array.isArray(val)) {
+ return [val];
+ }
+ return val;
+};
+
+/**
+ * Memoize a generated regex or function
+ */
+
+utils.memoize = function(type, pattern, options, fn) {
+ var key = utils.createKey(type + pattern, options);
+
+ if (cache.has(type, key)) {
+ return cache.get(type, key);
+ }
+
+ var val = fn(pattern, options);
+ if (options && options.cache === false) {
+ return val;
+ }
+
+ cache.set(type, key, val);
+ return val;
+};
+
+/**
+ * Create the key to use for memoization. The key is generated
+ * by iterating over the options and concatenating key-value pairs
+ * to the pattern string.
+ */
+
+utils.createKey = function(pattern, options) {
+ var key = pattern;
+ if (typeof options === 'undefined') {
+ return key;
+ }
+ for (var prop in options) {
+ key += ';' + prop + '=' + String(options[prop]);
+ }
+ return key;
+};
+
+/**
+ * Create the regex to use for matching text
+ */
+
+utils.createRegex = function(str) {
+ var opts = {contains: true, strictClose: false};
+ return regex(str, opts);
+};
diff --git a/node_modules/extglob/node_modules/define-property/LICENSE b/node_modules/extglob/node_modules/define-property/LICENSE
new file mode 100644
index 0000000..ec85897
--- /dev/null
+++ b/node_modules/extglob/node_modules/define-property/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, 2017, Jon Schlinkert
+
+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/node_modules/extglob/node_modules/define-property/README.md b/node_modules/extglob/node_modules/define-property/README.md
new file mode 100644
index 0000000..2f1af05
--- /dev/null
+++ b/node_modules/extglob/node_modules/define-property/README.md
@@ -0,0 +1,95 @@
+# define-property [![NPM version](https://img.shields.io/npm/v/define-property.svg?style=flat)](https://www.npmjs.com/package/define-property) [![NPM monthly downloads](https://img.shields.io/npm/dm/define-property.svg?style=flat)](https://npmjs.org/package/define-property) [![NPM total downloads](https://img.shields.io/npm/dt/define-property.svg?style=flat)](https://npmjs.org/package/define-property) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/define-property.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/define-property)
+
+> Define a non-enumerable property on an object.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save define-property
+```
+
+Install with [yarn](https://yarnpkg.com):
+
+```sh
+$ yarn add define-property
+```
+
+## Usage
+
+**Params**
+
+* `obj`: The object on which to define the property.
+* `prop`: The name of the property to be defined or modified.
+* `descriptor`: The descriptor for the property being defined or modified.
+
+```js
+var define = require('define-property');
+var obj = {};
+define(obj, 'foo', function(val) {
+ return val.toUpperCase();
+});
+
+console.log(obj);
+//=> {}
+
+console.log(obj.foo('bar'));
+//=> 'BAR'
+```
+
+**get/set**
+
+```js
+define(obj, 'foo', {
+ get: function() {},
+ set: function() {}
+});
+```
+
+## About
+
+### Related projects
+
+* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target… [more](https://github.com/jonschlinkert/assign-deep) | [homepage](https://github.com/jonschlinkert/assign-deep "Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target (first) object.")
+* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.")
+* [merge-deep](https://www.npmjs.com/package/merge-deep): Recursively merge values in a javascript object. | [homepage](https://github.com/jonschlinkert/merge-deep "Recursively merge values in a javascript object.")
+* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep "Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.5.0, on April 20, 2017._
\ No newline at end of file
diff --git a/node_modules/extglob/node_modules/define-property/index.js b/node_modules/extglob/node_modules/define-property/index.js
new file mode 100644
index 0000000..27c19eb
--- /dev/null
+++ b/node_modules/extglob/node_modules/define-property/index.js
@@ -0,0 +1,31 @@
+/*!
+ * define-property
+ *
+ * Copyright (c) 2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var isDescriptor = require('is-descriptor');
+
+module.exports = function defineProperty(obj, prop, val) {
+ if (typeof obj !== 'object' && typeof obj !== 'function') {
+ throw new TypeError('expected an object or function.');
+ }
+
+ if (typeof prop !== 'string') {
+ throw new TypeError('expected `prop` to be a string.');
+ }
+
+ if (isDescriptor(val) && ('set' in val || 'get' in val)) {
+ return Object.defineProperty(obj, prop, val);
+ }
+
+ return Object.defineProperty(obj, prop, {
+ configurable: true,
+ enumerable: false,
+ writable: true,
+ value: val
+ });
+};
diff --git a/node_modules/extglob/node_modules/define-property/package.json b/node_modules/extglob/node_modules/define-property/package.json
new file mode 100644
index 0000000..e0ab1ca
--- /dev/null
+++ b/node_modules/extglob/node_modules/define-property/package.json
@@ -0,0 +1,62 @@
+{
+ "name": "define-property",
+ "description": "Define a non-enumerable property on an object.",
+ "version": "1.0.0",
+ "homepage": "https://github.com/jonschlinkert/define-property",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/define-property",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/define-property/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "is-descriptor": "^1.0.0"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^0.1.12",
+ "mocha": "^3.2.0"
+ },
+ "keywords": [
+ "define",
+ "define-property",
+ "enumerable",
+ "key",
+ "non",
+ "non-enumerable",
+ "object",
+ "prop",
+ "property",
+ "value"
+ ],
+ "verb": {
+ "related": {
+ "list": [
+ "extend-shallow",
+ "merge-deep",
+ "assign-deep",
+ "mixin-deep"
+ ]
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/extglob/package.json b/node_modules/extglob/package.json
new file mode 100644
index 0000000..afe5157
--- /dev/null
+++ b/node_modules/extglob/package.json
@@ -0,0 +1,108 @@
+{
+ "name": "extglob",
+ "description": "Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob patterns.",
+ "version": "2.0.4",
+ "homepage": "https://github.com/micromatch/extglob",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Brian Woodward (https://twitter.com/doowb)",
+ "Devon Govett (http://badassjs.com)",
+ "Isiah Meadows (https://www.isiahmeadows.com)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Matt Bierner (http://mattbierner.com)",
+ "Shinnosuke Watanabe (https://shinnn.github.io)"
+ ],
+ "repository": "micromatch/extglob",
+ "bugs": {
+ "url": "https://github.com/micromatch/extglob/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js",
+ "lib"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "devDependencies": {
+ "bash-match": "^1.0.2",
+ "for-own": "^1.0.0",
+ "gulp": "^3.9.1",
+ "gulp-eslint": "^4.0.0",
+ "gulp-format-md": "^1.0.0",
+ "gulp-istanbul": "^1.1.2",
+ "gulp-mocha": "^3.0.1",
+ "gulp-unused": "^0.2.1",
+ "helper-changelog": "^0.3.0",
+ "is-windows": "^1.0.1",
+ "micromatch": "^3.0.4",
+ "minimatch": "^3.0.4",
+ "minimist": "^1.2.0",
+ "mocha": "^3.5.0",
+ "multimatch": "^2.1.0"
+ },
+ "keywords": [
+ "bash",
+ "extended",
+ "extglob",
+ "glob",
+ "globbing",
+ "ksh",
+ "match",
+ "pattern",
+ "patterns",
+ "regex",
+ "test",
+ "wildcard"
+ ],
+ "lintDeps": {
+ "devDependencies": {
+ "files": {
+ "options": {
+ "ignore": [
+ "benchmark/**/*.js"
+ ]
+ }
+ }
+ }
+ },
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "related": {
+ "list": [
+ "braces",
+ "expand-brackets",
+ "expand-range",
+ "fill-range",
+ "micromatch"
+ ]
+ },
+ "helpers": [
+ "helper-changelog"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/fancy-log/LICENSE b/node_modules/fancy-log/LICENSE
new file mode 100644
index 0000000..3a58630
--- /dev/null
+++ b/node_modules/fancy-log/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2014, 2015, 2018 Blaine Bublitz and Eric Schoffstall
+
+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/node_modules/fancy-log/README.md b/node_modules/fancy-log/README.md
new file mode 100644
index 0000000..33ef5c1
--- /dev/null
+++ b/node_modules/fancy-log/README.md
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+# fancy-log
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Travis Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Log things, prefixed with a timestamp.
+
+## Usage
+
+```js
+var log = require('fancy-log');
+
+log('a message');
+// [16:27:02] a message
+
+log.error('oh no!');
+// [16:27:02] oh no!
+```
+
+## API
+
+### `log(msg...)`
+
+Logs the message as if you called `console.log` but prefixes the output with the
+current time in HH:MM:ss format.
+
+### `log.error(msg...)`
+
+Logs the message as if you called `console.error` but prefixes the output with the
+current time in HH:MM:ss format.
+
+### `log.warn(msg...)`
+
+Logs the message as if you called `console.warn` but prefixes the output with the
+current time in HH:MM:ss format.
+
+
+### `log.info(msg...)`
+
+Logs the message as if you called `console.info` but prefixes the output with the
+current time in HH:MM:ss format.
+
+### `log.dir(msg...)`
+
+Logs the message as if you called `console.dir` but prefixes the output with the
+current time in HH:MM:ss format.
+
+## License
+
+MIT
+
+[downloads-image]: http://img.shields.io/npm/dm/fancy-log.svg
+[npm-url]: https://www.npmjs.com/package/fancy-log
+[npm-image]: http://img.shields.io/npm/v/fancy-log.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/fancy-log
+[travis-image]: http://img.shields.io/travis/gulpjs/fancy-log.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/fancy-log
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/fancy-log.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/fancy-log
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/fancy-log/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
diff --git a/node_modules/fancy-log/index.js b/node_modules/fancy-log/index.js
new file mode 100644
index 0000000..9dc9888
--- /dev/null
+++ b/node_modules/fancy-log/index.js
@@ -0,0 +1,92 @@
+'use strict';
+
+var Console = require('console').Console;
+var gray = require('ansi-gray');
+var timestamp = require('time-stamp');
+var supportsColor = require('color-support');
+var nodeVersion = require('parse-node-version')(process.version);
+
+var colorDetectionOptions = {
+ // If on Windows, ignore the isTTY check
+ // This is due to AppVeyor (and thus probably common Windows platforms?) failing the check
+ // TODO: If this is too broad, we can reduce it to an APPVEYOR env check
+ ignoreTTY: (process.platform === 'win32'),
+};
+
+// Needed to add this because node 10 decided to start coloring log output randomly
+var console;
+if (nodeVersion.major >= 10) {
+ // Node 10 also changed the way this is constructed
+ console = new Console({
+ stdout: process.stdout,
+ stderr: process.stderr,
+ colorMode: false,
+ });
+} else {
+ console = new Console(process.stdout, process.stderr);
+}
+
+function hasFlag(flag) {
+ return (process.argv.indexOf('--' + flag) !== -1);
+}
+
+function addColor(str) {
+ if (hasFlag('no-color')) {
+ return str;
+ }
+
+ if (hasFlag('color')) {
+ return gray(str);
+ }
+
+ if (supportsColor(colorDetectionOptions)) {
+ return gray(str);
+ }
+
+ return str;
+}
+
+function getTimestamp() {
+ return '[' + addColor(timestamp('HH:mm:ss')) + ']';
+}
+
+function log() {
+ var time = getTimestamp();
+ process.stdout.write(time + ' ');
+ console.log.apply(console, arguments);
+ return this;
+}
+
+function info() {
+ var time = getTimestamp();
+ process.stdout.write(time + ' ');
+ console.info.apply(console, arguments);
+ return this;
+}
+
+function dir() {
+ var time = getTimestamp();
+ process.stdout.write(time + ' ');
+ console.dir.apply(console, arguments);
+ return this;
+}
+
+function warn() {
+ var time = getTimestamp();
+ process.stderr.write(time + ' ');
+ console.warn.apply(console, arguments);
+ return this;
+}
+
+function error() {
+ var time = getTimestamp();
+ process.stderr.write(time + ' ');
+ console.error.apply(console, arguments);
+ return this;
+}
+
+module.exports = log;
+module.exports.info = info;
+module.exports.dir = dir;
+module.exports.warn = warn;
+module.exports.error = error;
diff --git a/node_modules/fancy-log/package.json b/node_modules/fancy-log/package.json
new file mode 100644
index 0000000..e9a70bb
--- /dev/null
+++ b/node_modules/fancy-log/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "fancy-log",
+ "version": "1.3.3",
+ "description": "Log things, prefixed with a timestamp.",
+ "author": "Gulp Team (http://gulpjs.com/)",
+ "contributors": [
+ "Blaine Bublitz ",
+ "Aman Mittal (http://amandeepmittal.github.io/)"
+ ],
+ "repository": "gulpjs/fancy-log",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "main": "index.js",
+ "files": [
+ "LICENSE",
+ "index.js"
+ ],
+ "scripts": {
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "test": "mocha --async-only",
+ "cover": "istanbul cover _mocha --report lcovonly",
+ "coveralls": "npm run cover && istanbul-coveralls"
+ },
+ "dependencies": {
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "parse-node-version": "^1.0.0",
+ "time-stamp": "^1.0.0"
+ },
+ "devDependencies": {
+ "eslint": "^2.13.0",
+ "eslint-config-gulp": "^3.0.1",
+ "expect": "^1.20.2",
+ "istanbul": "^0.4.3",
+ "istanbul-coveralls": "^1.0.3",
+ "mocha": "^3.5.3"
+ },
+ "keywords": [
+ "console.log",
+ "log",
+ "logger",
+ "logging",
+ "pretty",
+ "timestamp"
+ ]
+}
diff --git a/node_modules/fast-levenshtein/LICENSE.md b/node_modules/fast-levenshtein/LICENSE.md
new file mode 100644
index 0000000..6212406
--- /dev/null
+++ b/node_modules/fast-levenshtein/LICENSE.md
@@ -0,0 +1,25 @@
+(MIT License)
+
+Copyright (c) 2013 [Ramesh Nair](http://www.hiddentao.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 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/node_modules/fast-levenshtein/README.md b/node_modules/fast-levenshtein/README.md
new file mode 100644
index 0000000..2a917a7
--- /dev/null
+++ b/node_modules/fast-levenshtein/README.md
@@ -0,0 +1,120 @@
+# fast-levenshtein - Levenshtein algorithm in Javascript
+
+[![Build Status](https://secure.travis-ci.org/hiddentao/fast-levenshtein.png)](http://travis-ci.org/hiddentao/fast-levenshtein)
+
+An efficient Javascript implementation of the [Levenshtein algorithm](http://en.wikipedia.org/wiki/Levenshtein_distance) with asynchronous callback support.
+
+## Features
+
+* Works in node.js and in the browser.
+* Better performance than other implementations by not needing to store the whole matrix ([more info](http://www.codeproject.com/Articles/13525/Fast-memory-efficient-Levenshtein-algorithm)).
+* Provides synchronous and asynchronous versions of the algorithm.
+* Asynchronous version is almost as fast as the synchronous version for small strings and can also provide progress updates.
+* Comprehensive test suite and performance benchmark.
+* Small: <1 KB minified and gzipped
+
+## Installation
+
+### node.js
+
+Install using [npm](http://npmjs.org/):
+
+```bash
+$ npm install fast-levenshtein
+```
+
+### Browser
+
+Using bower:
+
+```bash
+$ bower install fast-levenshtein
+```
+
+If you are not using any module loader system then the API will then be accessible via the `window.Levenshtein` object.
+
+## Examples
+
+**Synchronous**
+
+```javascript
+var levenshtein = require('fast-levenshtein');
+
+var distance = levenshtein.get('back', 'book'); // 2
+var distance = levenshtein.get('我愛你', '我叫你'); // 1
+```
+
+**Asynchronous**
+
+```javascript
+var levenshtein = require('fast-levenshtein');
+
+levenshtein.getAsync('back', 'book', function (err, distance) {
+ // err is null unless an error was thrown
+ // distance equals 2
+});
+```
+
+**Asynchronous with progress updates**
+
+```javascript
+var levenshtein = require('fast-levenshtein');
+
+var hugeText1 = fs.readFileSync(...);
+var hugeText2 = fs.readFileSync(...);
+
+levenshtein.getAsync(hugeText1, hugeText2, function (err, distance) {
+ // process the results as normal
+}, {
+ progress: function(percentComplete) {
+ console.log(percentComplete + ' % completed so far...');
+ }
+);
+```
+
+## Building and Testing
+
+To build the code and run the tests:
+
+```bash
+$ npm install -g grunt-cli
+$ npm install
+$ npm run build
+```
+
+## Performance
+
+_Thanks to [Titus Wormer](https://github.com/wooorm) for [encouraging me](https://github.com/hiddentao/fast-levenshtein/issues/1) to do this._
+
+Benchmarked against other node.js levenshtein distance modules (on Macbook Air 2012, Core i7, 8GB RAM):
+
+```bash
+Running suite Implementation comparison [benchmark/speed.js]...
+>> levenshtein-edit-distance x 234 ops/sec ±3.02% (73 runs sampled)
+>> levenshtein-component x 422 ops/sec ±4.38% (83 runs sampled)
+>> levenshtein-deltas x 283 ops/sec ±3.83% (78 runs sampled)
+>> natural x 255 ops/sec ±0.76% (88 runs sampled)
+>> levenshtein x 180 ops/sec ±3.55% (86 runs sampled)
+>> fast-levenshtein x 1,792 ops/sec ±2.72% (95 runs sampled)
+Benchmark done.
+Fastest test is fast-levenshtein at 4.2x faster than levenshtein-component
+```
+
+You can run this benchmark yourself by doing:
+
+```bash
+$ npm install -g grunt-cli
+$ npm install
+$ npm run build
+$ npm run benchmark
+```
+
+## Contributing
+
+If you wish to submit a pull request please update and/or create new tests for any changes you make and ensure the grunt build passes.
+
+See [CONTRIBUTING.md](https://github.com/hiddentao/fast-levenshtein/blob/master/CONTRIBUTING.md) for details.
+
+## License
+
+MIT - see [LICENSE.md](https://github.com/hiddentao/fast-levenshtein/blob/master/LICENSE.md)
diff --git a/node_modules/fast-levenshtein/levenshtein.js b/node_modules/fast-levenshtein/levenshtein.js
new file mode 100644
index 0000000..3051ec5
--- /dev/null
+++ b/node_modules/fast-levenshtein/levenshtein.js
@@ -0,0 +1,211 @@
+(function() {
+ 'use strict';
+
+ /**
+ * Extend an Object with another Object's properties.
+ *
+ * The source objects are specified as additional arguments.
+ *
+ * @param dst Object the object to extend.
+ *
+ * @return Object the final object.
+ */
+ var _extend = function(dst) {
+ var sources = Array.prototype.slice.call(arguments, 1);
+ for (var i=0; i tmp) {
+ nextCol = tmp;
+ }
+ // deletion
+ tmp = prevRow[j + 1] + 1;
+ if (nextCol > tmp) {
+ nextCol = tmp;
+ }
+
+ // copy current col value into previous (in preparation for next iteration)
+ prevRow[j] = curCol;
+ }
+
+ // copy last col value into previous (in preparation for next iteration)
+ prevRow[j] = nextCol;
+ }
+
+ return nextCol;
+ },
+
+ /**
+ * Asynchronously calculate levenshtein distance of the two strings.
+ *
+ * @param str1 String the first string.
+ * @param str2 String the second string.
+ * @param cb Function callback function with signature: function(Error err, int distance)
+ * @param [options] Object additional options.
+ * @param [options.progress] Function progress callback with signature: function(percentComplete)
+ */
+ getAsync: function(str1, str2, cb, options) {
+ options = _extend({}, {
+ progress: null
+ }, options);
+
+ // base cases
+ if (str1 === str2) return cb(null, 0);
+ if (str1.length === 0) return cb(null, str2.length);
+ if (str2.length === 0) return cb(null, str1.length);
+
+ // two rows
+ var prevRow = new Array(str2.length + 1),
+ curCol, nextCol,
+ i, j, tmp,
+ startTime, currentTime;
+
+ // initialise previous row
+ for (i=0; i tmp) {
+ nextCol = tmp;
+ }
+ // deletion
+ tmp = prevRow[j + 1] + 1;
+ if (nextCol > tmp) {
+ nextCol = tmp;
+ }
+
+ // copy current into previous (in preparation for next iteration)
+ prevRow[j] = curCol;
+
+ // get current time
+ currentTime = new Date().valueOf();
+ }
+
+ // send a progress update?
+ if (null !== options.progress) {
+ try {
+ options.progress.call(null, (i * 100.0/ str1.length));
+ } catch (err) {
+ return cb('Progress callback: ' + err.toString());
+ }
+ }
+
+ // next iteration
+ _defer(__calculate);
+ };
+
+ __calculate();
+ }
+
+ };
+
+ // amd
+ if (typeof define !== "undefined" && define !== null && define.amd) {
+ define(function() {
+ return Levenshtein;
+ });
+ }
+ // commonjs
+ else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
+ module.exports = Levenshtein;
+ }
+ // web worker
+ else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
+ self.Levenshtein = Levenshtein;
+ }
+ // browser main thread
+ else if (typeof window !== "undefined" && window !== null) {
+ window.Levenshtein = Levenshtein;
+ }
+}());
+
diff --git a/node_modules/fast-levenshtein/package.json b/node_modules/fast-levenshtein/package.json
new file mode 100644
index 0000000..20fef7b
--- /dev/null
+++ b/node_modules/fast-levenshtein/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "fast-levenshtein",
+ "version": "1.1.4",
+ "description": "Efficient implementation of Levenshtein algorithm with asynchronous callback support",
+ "main": "levenshtein.js",
+ "files": [
+ "levenshtein.js"
+ ],
+ "scripts": {
+ "build": "grunt build",
+ "benchmark": "grunt benchmark",
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "chai": "~1.5.0",
+ "grunt": "~0.4.1",
+ "grunt-benchmark": "~0.2.0",
+ "grunt-contrib-jshint": "~0.4.3",
+ "grunt-contrib-uglify": "~0.2.0",
+ "grunt-mocha-test": "~0.2.2",
+ "grunt-npm-install": "~0.1.0",
+ "load-grunt-tasks": "~0.6.0",
+ "lodash": "^4.0.1",
+ "mocha": "~1.9.0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/hiddentao/fast-levenshtein.git"
+ },
+ "keywords": [
+ "levenshtein",
+ "distance",
+ "string"
+ ],
+ "author": "Ramesh Nair (http://www.hiddentao.com/)",
+ "license": "MIT"
+}
diff --git a/node_modules/fill-range/LICENSE b/node_modules/fill-range/LICENSE
new file mode 100644
index 0000000..d734237
--- /dev/null
+++ b/node_modules/fill-range/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+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/node_modules/fill-range/README.md b/node_modules/fill-range/README.md
new file mode 100644
index 0000000..bc1f8a0
--- /dev/null
+++ b/node_modules/fill-range/README.md
@@ -0,0 +1,250 @@
+# fill-range [![NPM version](https://img.shields.io/npm/v/fill-range.svg?style=flat)](https://www.npmjs.com/package/fill-range) [![NPM monthly downloads](https://img.shields.io/npm/dm/fill-range.svg?style=flat)](https://npmjs.org/package/fill-range) [![NPM total downloads](https://img.shields.io/npm/dt/fill-range.svg?style=flat)](https://npmjs.org/package/fill-range) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/fill-range.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/fill-range)
+
+> Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`
+
+## Table of Contents
+
+- [Install](#install)
+- [Usage](#usage)
+- [Examples](#examples)
+- [Options](#options)
+ * [options.step](#optionsstep)
+ * [options.strictRanges](#optionsstrictranges)
+ * [options.stringify](#optionsstringify)
+ * [options.toRegex](#optionstoregex)
+ * [options.transform](#optionstransform)
+- [About](#about)
+
+_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save fill-range
+```
+
+Install with [yarn](https://yarnpkg.com):
+
+```sh
+$ yarn add fill-range
+```
+
+## Usage
+
+Expands numbers and letters, optionally using a `step` as the last argument. _(Numbers may be defined as JavaScript numbers or strings)_.
+
+```js
+var fill = require('fill-range');
+fill(from, to[, step, options]);
+
+// examples
+console.log(fill('1', '10')); //=> '[ '1', '2', '3', '4', '5', '6', '7', '8', '9', '10' ]'
+console.log(fill('1', '10', {toRegex: true})); //=> [1-9]|10
+```
+
+**Params**
+
+* `from`: **{String|Number}** the number or letter to start with
+* `to`: **{String|Number}** the number or letter to end with
+* `step`: **{String|Number|Object|Function}** Optionally pass a [step](#optionsstep) to use.
+* `options`: **{Object|Function}**: See all available [options](#options)
+
+## Examples
+
+By default, an array of values is returned.
+
+**Alphabetical ranges**
+
+```js
+console.log(fill('a', 'e')); //=> ['a', 'b', 'c', 'd', 'e']
+console.log(fill('A', 'E')); //=> [ 'A', 'B', 'C', 'D', 'E' ]
+```
+
+**Numerical ranges**
+
+Numbers can be defined as actual numbers or strings.
+
+```js
+console.log(fill(1, 5)); //=> [ 1, 2, 3, 4, 5 ]
+console.log(fill('1', '5')); //=> [ 1, 2, 3, 4, 5 ]
+```
+
+**Negative ranges**
+
+Numbers can be defined as actual numbers or strings.
+
+```js
+console.log(fill('-5', '-1')); //=> [ '-5', '-4', '-3', '-2', '-1' ]
+console.log(fill('-5', '5')); //=> [ '-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5' ]
+```
+
+**Steps (increments)**
+
+```js
+// numerical ranges with increments
+console.log(fill('0', '25', 4)); //=> [ '0', '4', '8', '12', '16', '20', '24' ]
+console.log(fill('0', '25', 5)); //=> [ '0', '5', '10', '15', '20', '25' ]
+console.log(fill('0', '25', 6)); //=> [ '0', '6', '12', '18', '24' ]
+
+// alphabetical ranges with increments
+console.log(fill('a', 'z', 4)); //=> [ 'a', 'e', 'i', 'm', 'q', 'u', 'y' ]
+console.log(fill('a', 'z', 5)); //=> [ 'a', 'f', 'k', 'p', 'u', 'z' ]
+console.log(fill('a', 'z', 6)); //=> [ 'a', 'g', 'm', 's', 'y' ]
+```
+
+## Options
+
+### options.step
+
+**Type**: `number` (formatted as a string or number)
+
+**Default**: `undefined`
+
+**Description**: The increment to use for the range. Can be used with letters or numbers.
+
+**Example(s)**
+
+```js
+// numbers
+console.log(fill('1', '10', 2)); //=> [ '1', '3', '5', '7', '9' ]
+console.log(fill('1', '10', 3)); //=> [ '1', '4', '7', '10' ]
+console.log(fill('1', '10', 4)); //=> [ '1', '5', '9' ]
+
+// letters
+console.log(fill('a', 'z', 5)); //=> [ 'a', 'f', 'k', 'p', 'u', 'z' ]
+console.log(fill('a', 'z', 7)); //=> [ 'a', 'h', 'o', 'v' ]
+console.log(fill('a', 'z', 9)); //=> [ 'a', 'j', 's' ]
+```
+
+### options.strictRanges
+
+**Type**: `boolean`
+
+**Default**: `false`
+
+**Description**: By default, `null` is returned when an invalid range is passed. Enable this option to throw a `RangeError` on invalid ranges.
+
+**Example(s)**
+
+The following are all invalid:
+
+```js
+fill('1.1', '2'); // decimals not supported in ranges
+fill('a', '2'); // incompatible range values
+fill(1, 10, 'foo'); // invalid "step" argument
+```
+
+### options.stringify
+
+**Type**: `boolean`
+
+**Default**: `undefined`
+
+**Description**: Cast all returned values to strings. By default, integers are returned as numbers.
+
+**Example(s)**
+
+```js
+console.log(fill(1, 5)); //=> [ 1, 2, 3, 4, 5 ]
+console.log(fill(1, 5, {stringify: true})); //=> [ '1', '2', '3', '4', '5' ]
+```
+
+### options.toRegex
+
+**Type**: `boolean`
+
+**Default**: `undefined`
+
+**Description**: Create a regex-compatible source string, instead of expanding values to an array.
+
+**Example(s)**
+
+```js
+// alphabetical range
+console.log(fill('a', 'e', {toRegex: true})); //=> '[a-e]'
+// alphabetical with step
+console.log(fill('a', 'z', 3, {toRegex: true})); //=> 'a|d|g|j|m|p|s|v|y'
+// numerical range
+console.log(fill('1', '100', {toRegex: true})); //=> '[1-9]|[1-9][0-9]|100'
+// numerical range with zero padding
+console.log(fill('000001', '100000', {toRegex: true}));
+//=> '0{5}[1-9]|0{4}[1-9][0-9]|0{3}[1-9][0-9]{2}|0{2}[1-9][0-9]{3}|0[1-9][0-9]{4}|100000'
+```
+
+### options.transform
+
+**Type**: `function`
+
+**Default**: `undefined`
+
+**Description**: Customize each value in the returned array (or [string](#optionstoRegex)). _(you can also pass this function as the last argument to `fill()`)_.
+
+**Example(s)**
+
+```js
+// increase padding by two
+var arr = fill('01', '05', function(val, a, b, step, idx, arr, options) {
+ return repeat('0', (options.maxLength + 2) - val.length) + val;
+});
+
+console.log(arr);
+//=> ['0001', '0002', '0003', '0004', '0005']
+```
+
+## About
+
+### Related projects
+
+* [braces](https://www.npmjs.com/package/braces): Fast, comprehensive, bash-like brace expansion implemented in JavaScript. Complete support for the Bash 4.3 braces… [more](https://github.com/jonschlinkert/braces) | [homepage](https://github.com/jonschlinkert/braces "Fast, comprehensive, bash-like brace expansion implemented in JavaScript. Complete support for the Bash 4.3 braces specification, without sacrificing speed.")
+* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch.")
+* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.")
+* [to-regex-range](https://www.npmjs.com/package/to-regex-range): Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than… [more](https://github.com/jonschlinkert/to-regex-range) | [homepage](https://github.com/jonschlinkert/to-regex-range "Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.87 million test assertions.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 103 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [paulmillr](https://github.com/paulmillr) |
+| 1 | [edorivai](https://github.com/edorivai) |
+| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.5.0, on April 23, 2017._
\ No newline at end of file
diff --git a/node_modules/fill-range/index.js b/node_modules/fill-range/index.js
new file mode 100644
index 0000000..294a2ed
--- /dev/null
+++ b/node_modules/fill-range/index.js
@@ -0,0 +1,208 @@
+/*!
+ * fill-range
+ *
+ * Copyright (c) 2014-2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var util = require('util');
+var isNumber = require('is-number');
+var extend = require('extend-shallow');
+var repeat = require('repeat-string');
+var toRegex = require('to-regex-range');
+
+/**
+ * Return a range of numbers or letters.
+ *
+ * @param {String} `start` Start of the range
+ * @param {String} `stop` End of the range
+ * @param {String} `step` Increment or decrement to use.
+ * @param {Function} `fn` Custom function to modify each element in the range.
+ * @return {Array}
+ */
+
+function fillRange(start, stop, step, options) {
+ if (typeof start === 'undefined') {
+ return [];
+ }
+
+ if (typeof stop === 'undefined' || start === stop) {
+ // special case, for handling negative zero
+ var isString = typeof start === 'string';
+ if (isNumber(start) && !toNumber(start)) {
+ return [isString ? '0' : 0];
+ }
+ return [start];
+ }
+
+ if (typeof step !== 'number' && typeof step !== 'string') {
+ options = step;
+ step = undefined;
+ }
+
+ if (typeof options === 'function') {
+ options = { transform: options };
+ }
+
+ var opts = extend({step: step}, options);
+ if (opts.step && !isValidNumber(opts.step)) {
+ if (opts.strictRanges === true) {
+ throw new TypeError('expected options.step to be a number');
+ }
+ return [];
+ }
+
+ opts.isNumber = isValidNumber(start) && isValidNumber(stop);
+ if (!opts.isNumber && !isValid(start, stop)) {
+ if (opts.strictRanges === true) {
+ throw new RangeError('invalid range arguments: ' + util.inspect([start, stop]));
+ }
+ return [];
+ }
+
+ opts.isPadded = isPadded(start) || isPadded(stop);
+ opts.toString = opts.stringify
+ || typeof opts.step === 'string'
+ || typeof start === 'string'
+ || typeof stop === 'string'
+ || !opts.isNumber;
+
+ if (opts.isPadded) {
+ opts.maxLength = Math.max(String(start).length, String(stop).length);
+ }
+
+ // support legacy minimatch/fill-range options
+ if (typeof opts.optimize === 'boolean') opts.toRegex = opts.optimize;
+ if (typeof opts.makeRe === 'boolean') opts.toRegex = opts.makeRe;
+ return expand(start, stop, opts);
+}
+
+function expand(start, stop, options) {
+ var a = options.isNumber ? toNumber(start) : start.charCodeAt(0);
+ var b = options.isNumber ? toNumber(stop) : stop.charCodeAt(0);
+
+ var step = Math.abs(toNumber(options.step)) || 1;
+ if (options.toRegex && step === 1) {
+ return toRange(a, b, start, stop, options);
+ }
+
+ var zero = {greater: [], lesser: []};
+ var asc = a < b;
+ var arr = new Array(Math.round((asc ? b - a : a - b) / step));
+ var idx = 0;
+
+ while (asc ? a <= b : a >= b) {
+ var val = options.isNumber ? a : String.fromCharCode(a);
+ if (options.toRegex && (val >= 0 || !options.isNumber)) {
+ zero.greater.push(val);
+ } else {
+ zero.lesser.push(Math.abs(val));
+ }
+
+ if (options.isPadded) {
+ val = zeros(val, options);
+ }
+
+ if (options.toString) {
+ val = String(val);
+ }
+
+ if (typeof options.transform === 'function') {
+ arr[idx++] = options.transform(val, a, b, step, idx, arr, options);
+ } else {
+ arr[idx++] = val;
+ }
+
+ if (asc) {
+ a += step;
+ } else {
+ a -= step;
+ }
+ }
+
+ if (options.toRegex === true) {
+ return toSequence(arr, zero, options);
+ }
+ return arr;
+}
+
+function toRange(a, b, start, stop, options) {
+ if (options.isPadded) {
+ return toRegex(start, stop, options);
+ }
+
+ if (options.isNumber) {
+ return toRegex(Math.min(a, b), Math.max(a, b), options);
+ }
+
+ var start = String.fromCharCode(Math.min(a, b));
+ var stop = String.fromCharCode(Math.max(a, b));
+ return '[' + start + '-' + stop + ']';
+}
+
+function toSequence(arr, zeros, options) {
+ var greater = '', lesser = '';
+ if (zeros.greater.length) {
+ greater = zeros.greater.join('|');
+ }
+ if (zeros.lesser.length) {
+ lesser = '-(' + zeros.lesser.join('|') + ')';
+ }
+ var res = greater && lesser
+ ? greater + '|' + lesser
+ : greater || lesser;
+
+ if (options.capture) {
+ return '(' + res + ')';
+ }
+ return res;
+}
+
+function zeros(val, options) {
+ if (options.isPadded) {
+ var str = String(val);
+ var len = str.length;
+ var dash = '';
+ if (str.charAt(0) === '-') {
+ dash = '-';
+ str = str.slice(1);
+ }
+ var diff = options.maxLength - len;
+ var pad = repeat('0', diff);
+ val = (dash + pad + str);
+ }
+ if (options.stringify) {
+ return String(val);
+ }
+ return val;
+}
+
+function toNumber(val) {
+ return Number(val) || 0;
+}
+
+function isPadded(str) {
+ return /^-?0\d/.test(str);
+}
+
+function isValid(min, max) {
+ return (isValidNumber(min) || isValidLetter(min))
+ && (isValidNumber(max) || isValidLetter(max));
+}
+
+function isValidLetter(ch) {
+ return typeof ch === 'string' && ch.length === 1 && /^\w+$/.test(ch);
+}
+
+function isValidNumber(n) {
+ return isNumber(n) && !/\./.test(n);
+}
+
+/**
+ * Expose `fillRange`
+ * @type {Function}
+ */
+
+module.exports = fillRange;
diff --git a/node_modules/fill-range/package.json b/node_modules/fill-range/package.json
new file mode 100644
index 0000000..fa17dd2
--- /dev/null
+++ b/node_modules/fill-range/package.json
@@ -0,0 +1,82 @@
+{
+ "name": "fill-range",
+ "description": "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`",
+ "version": "4.0.0",
+ "homepage": "https://github.com/jonschlinkert/fill-range",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ " (https://github.com/wtgtybhertgeghgtwtg)",
+ "Edo Rivai (edo.rivai.nl)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Paul Miller (paulmillr.com)"
+ ],
+ "repository": "jonschlinkert/fill-range",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/fill-range/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "devDependencies": {
+ "ansi-cyan": "^0.1.1",
+ "benchmarked": "^1.0.0",
+ "gulp-format-md": "^0.1.12",
+ "minimist": "^1.2.0",
+ "mocha": "^3.2.0"
+ },
+ "keywords": [
+ "alpha",
+ "alphabetical",
+ "array",
+ "bash",
+ "brace",
+ "expand",
+ "expansion",
+ "fill",
+ "glob",
+ "match",
+ "matches",
+ "matching",
+ "number",
+ "numerical",
+ "range",
+ "ranges",
+ "regex",
+ "sh"
+ ],
+ "verb": {
+ "related": {
+ "list": [
+ "braces",
+ "expand-range",
+ "micromatch",
+ "to-regex-range"
+ ]
+ },
+ "toc": true,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/find-up/index.js b/node_modules/find-up/index.js
new file mode 100644
index 0000000..7ff0e2b
--- /dev/null
+++ b/node_modules/find-up/index.js
@@ -0,0 +1,53 @@
+'use strict';
+var path = require('path');
+var pathExists = require('path-exists');
+var Promise = require('pinkie-promise');
+
+function splitPath(x) {
+ return path.resolve(x || '').split(path.sep);
+}
+
+function join(parts, filename) {
+ return path.resolve(parts.join(path.sep) + path.sep, filename);
+}
+
+module.exports = function (filename, opts) {
+ opts = opts || {};
+
+ var parts = splitPath(opts.cwd);
+
+ return new Promise(function (resolve) {
+ (function find() {
+ var fp = join(parts, filename);
+
+ pathExists(fp).then(function (exists) {
+ if (exists) {
+ resolve(fp);
+ } else if (parts.pop()) {
+ find();
+ } else {
+ resolve(null);
+ }
+ });
+ })();
+ });
+};
+
+module.exports.sync = function (filename, opts) {
+ opts = opts || {};
+
+ var parts = splitPath(opts.cwd);
+ var len = parts.length;
+
+ while (len--) {
+ var fp = join(parts, filename);
+
+ if (pathExists.sync(fp)) {
+ return fp;
+ }
+
+ parts.pop();
+ }
+
+ return null;
+};
diff --git a/node_modules/find-up/license b/node_modules/find-up/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/find-up/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.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 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/node_modules/find-up/package.json b/node_modules/find-up/package.json
new file mode 100644
index 0000000..478866c
--- /dev/null
+++ b/node_modules/find-up/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "find-up",
+ "version": "1.1.2",
+ "description": "Find a file by walking up parent directories",
+ "license": "MIT",
+ "repository": "sindresorhus/find-up",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "xo && ava"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "find",
+ "up",
+ "find-up",
+ "findup",
+ "look-up",
+ "look",
+ "file",
+ "search",
+ "match",
+ "package",
+ "resolve",
+ "parent",
+ "parents",
+ "folder",
+ "directory",
+ "dir",
+ "walk",
+ "walking",
+ "path"
+ ],
+ "dependencies": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "devDependencies": {
+ "ava": "*",
+ "tempfile": "^1.1.1",
+ "xo": "*"
+ }
+}
diff --git a/node_modules/find-up/readme.md b/node_modules/find-up/readme.md
new file mode 100644
index 0000000..9ea0611
--- /dev/null
+++ b/node_modules/find-up/readme.md
@@ -0,0 +1,72 @@
+# find-up [![Build Status](https://travis-ci.org/sindresorhus/find-up.svg?branch=master)](https://travis-ci.org/sindresorhus/find-up)
+
+> Find a file by walking up parent directories
+
+
+## Install
+
+```
+$ npm install --save find-up
+```
+
+
+## Usage
+
+```
+/
+└── Users
+ └── sindresorhus
+ ├── unicorn.png
+ └── foo
+ └── bar
+ ├── baz
+ └── example.js
+```
+
+```js
+// example.js
+const findUp = require('find-up');
+
+findUp('unicorn.png').then(filepath => {
+ console.log(filepath);
+ //=> '/Users/sindresorhus/unicorn.png'
+});
+```
+
+
+## API
+
+### findUp(filename, [options])
+
+Returns a promise for the filepath or `null`.
+
+### findUp.sync(filename, [options])
+
+Returns a filepath or `null`.
+
+#### filename
+
+Type: `string`
+
+Filename of the file to find.
+
+#### options
+
+##### cwd
+
+Type: `string`
+Default: `process.cwd()`
+
+Directory to start from.
+
+
+## Related
+
+- [find-up-cli](https://github.com/sindresorhus/find-up-cli) - CLI for this module
+- [pkg-up](https://github.com/sindresorhus/pkg-up) - Find the closest package.json file
+- [pkg-dir](https://github.com/sindresorhus/pkg-dir) - Find the root directory of an npm package
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/findup-sync/LICENSE b/node_modules/findup-sync/LICENSE
new file mode 100644
index 0000000..6e210d0
--- /dev/null
+++ b/node_modules/findup-sync/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-2018 Ben Alman , Blaine Bublitz , and Eric Schoffstall
+
+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/node_modules/findup-sync/README.md b/node_modules/findup-sync/README.md
new file mode 100644
index 0000000..3d1b17b
--- /dev/null
+++ b/node_modules/findup-sync/README.md
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+# findup-sync
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Travis Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Find the first file matching a given pattern in the current directory or the nearest ancestor directory.
+
+Matching is done with [micromatch][micromatch], please report any matching related issues on that repository.
+
+## Usage
+
+```js
+var findup = require('findup-sync');
+findup(patternOrPatterns [, micromatchOptions]);
+
+// Start looking in the CWD.
+var filepath1 = findup('{a,b}*.txt');
+
+// Start looking somewhere else, and ignore case (probably a good idea).
+var filepath2 = findup('{a,b}*.txt', {cwd: '/some/path', nocase: true});
+```
+
+## API
+
+### `findup(patterns, [options])`
+
+* `patterns` **{String|Array}**: Glob pattern(s) or file path(s) to match against.
+* `options` **{Object}**: Options to pass to [micromatch]. Note that if you want to start in a different directory than the current working directory, specify a `cwd` property here.
+* `returns` **{String}**: Returns the first matching file.
+
+## License
+
+MIT
+
+[micromatch]: http://github.com/jonschlinkert/micromatch
+
+[downloads-image]: http://img.shields.io/npm/dm/findup-sync.svg
+[npm-url]: https://www.npmjs.com/package/findup-sync
+[npm-image]: http://img.shields.io/npm/v/findup-sync.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/findup-sync
+[travis-image]: http://img.shields.io/travis/gulpjs/findup-sync.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/findup-sync
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/findup-sync.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/findup-sync
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/findup-sync/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
diff --git a/node_modules/findup-sync/index.js b/node_modules/findup-sync/index.js
new file mode 100644
index 0000000..2a9e117
--- /dev/null
+++ b/node_modules/findup-sync/index.js
@@ -0,0 +1,87 @@
+'use strict';
+
+/**
+ * Module dependencies
+ */
+
+var fs = require('fs');
+var path = require('path');
+var isGlob = require('is-glob');
+var resolveDir = require('resolve-dir');
+var detect = require('detect-file');
+var mm = require('micromatch');
+
+/**
+ * @param {String|Array} `pattern` Glob pattern or file path(s) to match against.
+ * @param {Object} `options` Options to pass to [micromatch]. Note that if you want to start in a different directory than the current working directory, specify the `options.cwd` property here.
+ * @return {String} Returns the first matching file.
+ * @api public
+ */
+
+module.exports = function(patterns, options) {
+ options = options || {};
+ var cwd = path.resolve(resolveDir(options.cwd || ''));
+
+ if (typeof patterns === 'string') {
+ return lookup(cwd, [patterns], options);
+ }
+
+ if (!Array.isArray(patterns)) {
+ throw new TypeError('findup-sync expects a string or array as the first argument.');
+ }
+
+ return lookup(cwd, patterns, options);
+};
+
+function lookup(cwd, patterns, options) {
+ var len = patterns.length;
+ var idx = -1;
+ var res;
+
+ while (++idx < len) {
+ if (isGlob(patterns[idx])) {
+ res = matchFile(cwd, patterns[idx], options);
+ } else {
+ res = findFile(cwd, patterns[idx], options);
+ }
+ if (res) {
+ return res;
+ }
+ }
+
+ var dir = path.dirname(cwd);
+ if (dir === cwd) {
+ return null;
+ }
+ return lookup(dir, patterns, options);
+}
+
+function matchFile(cwd, pattern, opts) {
+ var isMatch = mm.matcher(pattern, opts);
+ var files = tryReaddirSync(cwd);
+ var len = files.length;
+ var idx = -1;
+
+ while (++idx < len) {
+ var name = files[idx];
+ var fp = path.join(cwd, name);
+ if (isMatch(name) || isMatch(fp)) {
+ return fp;
+ }
+ }
+ return null;
+}
+
+function findFile(cwd, filename, options) {
+ var fp = cwd ? path.resolve(cwd, filename) : filename;
+ return detect(fp, options);
+}
+
+function tryReaddirSync(fp) {
+ try {
+ return fs.readdirSync(fp);
+ } catch (err) {
+ // Ignore error
+ }
+ return [];
+}
diff --git a/node_modules/findup-sync/package.json b/node_modules/findup-sync/package.json
new file mode 100644
index 0000000..357f57a
--- /dev/null
+++ b/node_modules/findup-sync/package.json
@@ -0,0 +1,57 @@
+{
+ "name": "findup-sync",
+ "version": "3.0.0",
+ "description": "Find the first file matching a given pattern in the current directory or the nearest ancestor directory.",
+ "author": "Gulp Team (http://gulpjs.com/)",
+ "contributors": [
+ "Ben Alman ",
+ "Tyler Kellen ",
+ "Jon Schlinkert ",
+ "Blaine Bublitz "
+ ],
+ "repository": "gulpjs/findup-sync",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "main": "index.js",
+ "files": [
+ "index.js",
+ "LICENSE"
+ ],
+ "scripts": {
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "test": "mocha --async-only",
+ "cover": "istanbul cover _mocha --report lcovonly",
+ "coveralls": "npm run cover && istanbul-coveralls"
+ },
+ "dependencies": {
+ "detect-file": "^1.0.0",
+ "is-glob": "^4.0.0",
+ "micromatch": "^3.0.4",
+ "resolve-dir": "^1.0.1"
+ },
+ "devDependencies": {
+ "eslint": "^2.13.0",
+ "eslint-config-gulp": "^3.0.1",
+ "expect": "^1.20.2",
+ "homedir-polyfill": "^1.0.1",
+ "istanbul": "^0.4.3",
+ "istanbul-coveralls": "^1.0.3",
+ "mocha": "^3.5.3",
+ "normalize-path": "^3.0.0",
+ "resolve": "^1.4.0"
+ },
+ "keywords": [
+ "file",
+ "find",
+ "find-up",
+ "findup",
+ "glob",
+ "match",
+ "pattern",
+ "resolve",
+ "search"
+ ]
+}
diff --git a/node_modules/fined/LICENSE b/node_modules/fined/LICENSE
new file mode 100644
index 0000000..538c116
--- /dev/null
+++ b/node_modules/fined/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016, 2017, 2018 Blaine Bublitz and Eric Schoffstall
+
+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/node_modules/fined/README.md b/node_modules/fined/README.md
new file mode 100644
index 0000000..d0ec267
--- /dev/null
+++ b/node_modules/fined/README.md
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+# fined
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Travis Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Find a file given a declaration of locations.
+
+## Usage
+
+```js
+var fined = require('fined');
+
+fined({ path: 'path/to/file', extensions: ['.js', '.json'] });
+// => { path: '/absolute/path/to/file.js', extension: '.js' } (if file exists)
+// => null (if file does not exist)
+
+var opts = {
+ name: '.app',
+ cwd: '.',
+ extensions: {
+ 'rc': 'default-rc-loader',
+ '.yml': 'default-yml-loader',
+ },
+};
+
+fined({ path: '.' }, opts);
+// => { path: '/absolute/of/cwd/.app.yml', extension: { '.yml': 'default-yml-loader' } }
+
+fined({ path: '~', extensions: { 'rc': 'some-special-rc-loader' } }, opts);
+// => { path: '/User/home/.apprc', extension: { 'rc': 'some-special-rc-loader' } }
+```
+
+## API
+
+### fined(pathObj, opts) => object | null
+
+#### Arguments:
+
+* **pathObj** [string | object] : a path setting for finding a file.
+* **opts** [object] : a plain object supplements `pathObj`.
+
+ `pathObj` and `opts` can have same properties:
+
+ * **path** [string] : a path string.
+ * **name** [string] : a basename.
+ * **extensions**: [string | array | object] : extensions.
+ * **cwd**: a base directory of `path` and for finding up.
+ * **findUp**: [boolean] : a flag to find up.
+
+#### Return:
+
+This function returns a plain object which consists of following properties if a file exists otherwise null.
+
+ * **path** : an absolute path
+ * **extension** : a string or a plain object of extension.
+
+
+## License
+
+MIT
+
+[downloads-image]: http://img.shields.io/npm/dm/fined.svg
+[npm-url]: https://www.npmjs.com/package/fined
+[npm-image]: http://img.shields.io/npm/v/fined.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/fined
+[travis-image]: http://img.shields.io/travis/gulpjs/fined.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/fined
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/fined.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/fined
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/fined/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
diff --git a/node_modules/fined/index.js b/node_modules/fined/index.js
new file mode 100644
index 0000000..1a66ab2
--- /dev/null
+++ b/node_modules/fined/index.js
@@ -0,0 +1,174 @@
+'use strict';
+
+var fs = require('fs');
+var path = require('path');
+
+var isPlainObject = require('is-plain-object');
+var pick = require('object.pick');
+var defaults = require('object.defaults/immutable');
+var expandTilde = require('expand-tilde');
+var parsePath = require('parse-filepath');
+
+
+function fined(pathObj, defaultObj) {
+ var expandedPath = expandPath(pathObj, defaultObj);
+ return expandedPath ? findWithExpandedPath(expandedPath) : null;
+}
+
+function expandPath(pathObj, defaultObj) {
+ if (!isPlainObject(defaultObj)) {
+ defaultObj = {};
+ }
+
+ if (isString(pathObj)) {
+ pathObj = { path: pathObj };
+ }
+
+ if (!isPlainObject(pathObj)) {
+ pathObj = {};
+ }
+
+ pathObj = defaults(pathObj, defaultObj);
+
+ var filePath;
+ if (!isString(pathObj.path)) {
+ return null;
+ }
+ // Execution of toString is for a String object.
+ if (isString(pathObj.name) && pathObj.name) {
+ if (pathObj.path) {
+ filePath = expandTilde(pathObj.path.toString());
+ filePath = path.join(filePath, pathObj.name.toString());
+ } else {
+ filePath = pathObj.name.toString();
+ }
+ } else {
+ filePath = expandTilde(pathObj.path.toString());
+ }
+
+ var extArr = createExtensionArray(pathObj.extensions);
+ var extMap = createExtensionMap(pathObj.extensions);
+
+ var basedir = isString(pathObj.cwd) ? pathObj.cwd.toString() : '.';
+ basedir = path.resolve(expandTilde(basedir));
+
+ var findUp = !!pathObj.findUp;
+
+ var parsed = parsePath(filePath);
+ if (parsed.isAbsolute) {
+ filePath = filePath.slice(parsed.root.length);
+ findUp = false;
+ basedir = parsed.root;
+ /* istanbul ignore if */
+ } else if (parsed.root) { // Expanded path has a drive letter on Windows.
+ filePath = filePath.slice(parsed.root.length);
+ basedir = path.resolve(parsed.root);
+ }
+
+ if (parsed.ext) {
+ filePath = filePath.slice(0, -parsed.ext.length);
+ // This ensures that only the original extension is matched.
+ extArr = [parsed.ext];
+ }
+
+ return {
+ path: filePath,
+ basedir: basedir,
+ findUp: findUp,
+ extArr: extArr,
+ extMap: extMap,
+ };
+}
+
+function findWithExpandedPath(expanded) {
+ var found = expanded.findUp ?
+ findUpFile(expanded.basedir, expanded.path, expanded.extArr) :
+ findFile(expanded.basedir, expanded.path, expanded.extArr);
+
+ if (!found) {
+ return null;
+ }
+
+ if (expanded.extMap) {
+ found.extension = pick(expanded.extMap, found.extension);
+ }
+ return found;
+}
+
+function findFile(basedir, relpath, extArr) {
+ var noExtPath = path.resolve(basedir, relpath);
+ for (var i = 0, n = extArr.length; i < n; i++) {
+ var filepath = noExtPath + extArr[i];
+ try {
+ fs.statSync(filepath);
+ return { path: filepath, extension: extArr[i] };
+ } catch (e) {
+ // Ignore error
+ }
+ }
+
+ return null;
+}
+
+function findUpFile(basedir, filepath, extArr) {
+ var lastdir;
+ do {
+ var found = findFile(basedir, filepath, extArr);
+ if (found) {
+ return found;
+ }
+
+ lastdir = basedir;
+ basedir = path.dirname(basedir);
+ } while (lastdir !== basedir);
+
+ return null;
+}
+
+function createExtensionArray(exts) {
+ if (isString(exts)) {
+ return [exts];
+ }
+
+ if (Array.isArray(exts)) {
+ exts = exts.filter(isString);
+ return (exts.length > 0) ? exts : [''];
+ }
+
+ if (isPlainObject(exts)) {
+ exts = Object.keys(exts);
+ return (exts.length > 0) ? exts : [''];
+ }
+
+ return [''];
+}
+
+function createExtensionMap(exts) {
+ if (!isPlainObject(exts)) {
+ return null;
+ }
+
+ if (isEmpty(exts)) {
+ return { '': null };
+ }
+
+ return exts;
+}
+
+function isEmpty(object) {
+ return !Object.keys(object).length;
+}
+
+function isString(value) {
+ if (typeof value === 'string') {
+ return true;
+ }
+
+ if (Object.prototype.toString.call(value) === '[object String]') {
+ return true;
+ }
+
+ return false;
+}
+
+module.exports = fined;
diff --git a/node_modules/fined/node_modules/is-plain-object/LICENSE b/node_modules/fined/node_modules/is-plain-object/LICENSE
new file mode 100644
index 0000000..3f2eca1
--- /dev/null
+++ b/node_modules/fined/node_modules/is-plain-object/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert.
+
+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/node_modules/fined/node_modules/is-plain-object/README.md b/node_modules/fined/node_modules/is-plain-object/README.md
new file mode 100644
index 0000000..1f9d0c8
--- /dev/null
+++ b/node_modules/fined/node_modules/is-plain-object/README.md
@@ -0,0 +1,104 @@
+# is-plain-object [![NPM version](https://img.shields.io/npm/v/is-plain-object.svg?style=flat)](https://www.npmjs.com/package/is-plain-object) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-plain-object.svg?style=flat)](https://npmjs.org/package/is-plain-object) [![NPM total downloads](https://img.shields.io/npm/dt/is-plain-object.svg?style=flat)](https://npmjs.org/package/is-plain-object) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-plain-object.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-plain-object)
+
+> Returns true if an object was created by the `Object` constructor.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-plain-object
+```
+
+Use [isobject](https://github.com/jonschlinkert/isobject) if you only want to check if the value is an object and not an array or null.
+
+## Usage
+
+```js
+var isPlainObject = require('is-plain-object');
+```
+
+**true** when created by the `Object` constructor.
+
+```js
+isPlainObject(Object.create({}));
+//=> true
+isPlainObject(Object.create(Object.prototype));
+//=> true
+isPlainObject({foo: 'bar'});
+//=> true
+isPlainObject({});
+//=> true
+```
+
+**false** when not created by the `Object` constructor.
+
+```js
+isPlainObject(1);
+//=> false
+isPlainObject(['foo', 'bar']);
+//=> false
+isPlainObject([]);
+//=> false
+isPlainObject(new Foo);
+//=> false
+isPlainObject(null);
+//=> false
+isPlainObject(Object.create(null));
+//=> false
+```
+
+## About
+
+### Related projects
+
+* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.")
+* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject "Returns true if the value is an object and not an array or null.")
+* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 17 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 6 | [stevenvachon](https://github.com/stevenvachon) |
+| 3 | [onokumus](https://github.com/onokumus) |
+| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on July 11, 2017._
\ No newline at end of file
diff --git a/node_modules/fined/node_modules/is-plain-object/index.d.ts b/node_modules/fined/node_modules/is-plain-object/index.d.ts
new file mode 100644
index 0000000..74a44e9
--- /dev/null
+++ b/node_modules/fined/node_modules/is-plain-object/index.d.ts
@@ -0,0 +1,5 @@
+export = isPlainObject;
+
+declare function isPlainObject(o: any): boolean;
+
+declare namespace isPlainObject {}
diff --git a/node_modules/fined/node_modules/is-plain-object/index.js b/node_modules/fined/node_modules/is-plain-object/index.js
new file mode 100644
index 0000000..c328484
--- /dev/null
+++ b/node_modules/fined/node_modules/is-plain-object/index.js
@@ -0,0 +1,37 @@
+/*!
+ * is-plain-object
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var isObject = require('isobject');
+
+function isObjectObject(o) {
+ return isObject(o) === true
+ && Object.prototype.toString.call(o) === '[object Object]';
+}
+
+module.exports = function isPlainObject(o) {
+ var ctor,prot;
+
+ if (isObjectObject(o) === false) return false;
+
+ // If has modified constructor
+ ctor = o.constructor;
+ if (typeof ctor !== 'function') return false;
+
+ // If has modified prototype
+ prot = ctor.prototype;
+ if (isObjectObject(prot) === false) return false;
+
+ // If constructor does not have an Object-specific method
+ if (prot.hasOwnProperty('isPrototypeOf') === false) {
+ return false;
+ }
+
+ // Most likely a plain Object
+ return true;
+};
diff --git a/node_modules/fined/node_modules/is-plain-object/package.json b/node_modules/fined/node_modules/is-plain-object/package.json
new file mode 100644
index 0000000..dd60498
--- /dev/null
+++ b/node_modules/fined/node_modules/is-plain-object/package.json
@@ -0,0 +1,79 @@
+{
+ "name": "is-plain-object",
+ "description": "Returns true if an object was created by the `Object` constructor.",
+ "version": "2.0.4",
+ "homepage": "https://github.com/jonschlinkert/is-plain-object",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Osman Nuri Okumuş (http://onokumus.com)",
+ "Steven Vachon (https://svachon.com)",
+ "(https://github.com/wtgtybhertgeghgtwtg)"
+ ],
+ "repository": "jonschlinkert/is-plain-object",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-plain-object/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.d.ts",
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "browserify": "browserify index.js --standalone isPlainObject | uglifyjs --compress --mangle -o browser/is-plain-object.js",
+ "test_browser": "mocha-phantomjs test/browser.html",
+ "test_node": "mocha",
+ "test": "npm run test_node && npm run browserify && npm run test_browser"
+ },
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "devDependencies": {
+ "browserify": "^14.4.0",
+ "chai": "^4.0.2",
+ "gulp-format-md": "^1.0.0",
+ "mocha": "^3.4.2",
+ "mocha-phantomjs": "^4.1.0",
+ "phantomjs": "^2.1.7",
+ "uglify-js": "^3.0.24"
+ },
+ "keywords": [
+ "check",
+ "is",
+ "is-object",
+ "isobject",
+ "javascript",
+ "kind",
+ "kind-of",
+ "object",
+ "plain",
+ "type",
+ "typeof",
+ "value"
+ ],
+ "types": "index.d.ts",
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "is-number",
+ "isobject",
+ "kind-of"
+ ]
+ },
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/fined/package.json b/node_modules/fined/package.json
new file mode 100644
index 0000000..e64ed64
--- /dev/null
+++ b/node_modules/fined/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "fined",
+ "version": "1.2.0",
+ "description": "Find a file given a declaration of locations.",
+ "author": "Gulp Team (http://gulpjs.com/)",
+ "contributors": [
+ "Takayuki Sato ",
+ "Blaine Bublitz "
+ ],
+ "repository": "gulpjs/fined",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "main": "index.js",
+ "files": [
+ "index.js",
+ "LICENSE"
+ ],
+ "scripts": {
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "test": "mocha --async-only",
+ "cover": "istanbul cover _mocha --report lcovonly",
+ "coveralls": "npm run cover && istanbul-coveralls"
+ },
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "is-plain-object": "^2.0.3",
+ "object.defaults": "^1.1.0",
+ "object.pick": "^1.2.0",
+ "parse-filepath": "^1.0.1"
+ },
+ "devDependencies": {
+ "eslint": "^2.13.0",
+ "eslint-config-gulp": "^3.0.1",
+ "expect": "^1.20.2",
+ "istanbul": "^0.4.3",
+ "istanbul-coveralls": "^1.0.3",
+ "mocha": "^3.5.3"
+ },
+ "keywords": [
+ "find",
+ "lookup",
+ "config"
+ ]
+}
diff --git a/node_modules/flagged-respawn/LICENSE b/node_modules/flagged-respawn/LICENSE
new file mode 100644
index 0000000..ca63f90
--- /dev/null
+++ b/node_modules/flagged-respawn/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2018 Tyler Kellen , Blaine Bublitz , and Eric Schoffstall
+
+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/node_modules/flagged-respawn/README.md b/node_modules/flagged-respawn/README.md
new file mode 100644
index 0000000..44899fc
--- /dev/null
+++ b/node_modules/flagged-respawn/README.md
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+# flagged-respawn
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Travis Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+A tool for respawning node binaries when special flags are present.
+
+## What is it?
+
+Say you wrote a command line tool that runs arbitrary javascript (e.g. task runner, test framework, etc). For the sake of discussion, let's pretend it's a testing harness you've named `testify`.
+
+Everything is going splendidly until one day you decide to test some code that relies on a feature behind a v8 flag in node (`--harmony`, for example). Without much thought, you run `testify --harmony spec tests.js`.
+
+It doesn't work. After digging around for a bit, you realize this produces a [`process.argv`](http://nodejs.org/docs/latest/api/process.html#process_process_argv) of:
+
+`['node', '/usr/local/bin/test', '--harmony', 'spec', 'tests.js']`
+
+Crap. The `--harmony` flag is in the wrong place! It should be applied to the **node** command, not our binary. What we actually wanted was this:
+
+`['node', '--harmony', '/usr/local/bin/test', 'spec', 'tests.js']`
+
+Flagged-respawn fixes this problem and handles all the edge cases respawning creates, such as:
+- Providing a method to determine if a respawn is needed.
+- Piping stderr/stdout from the child into the parent.
+- Making the parent process exit with the same code as the child.
+- If the child is killed, making the parent exit with the same signal.
+
+To see it in action, clone this repository and run `npm install` / `npm run respawn` / `npm run nospawn`.
+
+## Sample Usage
+
+```js
+#!/usr/bin/env node
+
+const flaggedRespawn = require('flagged-respawn');
+
+// get a list of all possible v8 flags for the running version of node
+const v8flags = require('v8flags').fetch();
+
+flaggedRespawn(v8flags, process.argv, function (ready, child) {
+ if (ready) {
+ console.log('Running!');
+ // your cli code here
+ } else {
+ console.log('Special flags found, respawning.');
+ }
+ if (process.pid !== child.pid) {
+ console.log('Respawned to PID:', child.pid);
+ }
+});
+
+```
+
+
+## API
+
+### flaggedRespawn(flags, argv, [ forcedFlags, ] callback) : Void
+
+Respawns the script itself when *argv* has special flag contained in *flags* and/or *forcedFlags* is not empty. Because members of *flags* and *forcedFlags* are passed to `node` command, each of them needs to be a node flag or a V8 flag.
+
+#### Forbid respawning
+
+If `--no-respawning` flag is given in *argv*, this function does not respawned even if *argv* contains members of flags or *forcedFlags* is not empty. (This flag is also used internally to prevent from respawning more than once).
+
+#### Parameter:
+
+| Parameter | Type | Description |
+|:--------------|:------:|:----------------------------------------------------|
+| *flags* | Array | An array of node flags and V8 flags which are available when present in *argv*. |
+| *argv* | Array | Command line arguments to respawn. |
+| *forcedFlags* | Array or String | An array of node flags or a string of a single flag and V8 flags for respawning forcely. |
+| *callback* | function | A called function when not respawning or after respawned. |
+
+* **callback (ready, proc, argv) : Void **
+
+ *callback* function is called both when respawned or not, and it can be distinguished by callback's argument: *ready*. (*ready* indicates whether a process spawned its child process (false) or not (true), but it does not indicate whether a process is a spawned child process or not. *ready* for a spawned child process is true.)
+
+ *argv* is an array of command line arguments which is respawned (when *ready* is false) or is passed current process except flags within *flags* and `--no-respawning` (when *ready* is true).
+
+ **Parameter:**
+
+ | Parameter | Type | Description |
+ |:----------|:-------:|:--------------------------|
+ | *ready* | boolean | True, if not respawning and is ready to execute main function. |
+ | *proc* | object | Child process object if respawned, otherwise current process object. |
+ | *argv* | Array | An array of command line arguments. |
+
+## License
+
+MIT
+
+[downloads-image]: http://img.shields.io/npm/dm/flagged-respawn.svg
+[npm-url]: https://www.npmjs.com/package/flagged-respawn
+[npm-image]: http://img.shields.io/npm/v/flagged-respawn.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/flagged-respawn
+[travis-image]: http://img.shields.io/travis/gulpjs/flagged-respawn.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/flagged-respawn
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/flagged-respawn.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/flagged-respawn
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/flagged-respawn/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
diff --git a/node_modules/flagged-respawn/index.js b/node_modules/flagged-respawn/index.js
new file mode 100644
index 0000000..15c1c1f
--- /dev/null
+++ b/node_modules/flagged-respawn/index.js
@@ -0,0 +1,52 @@
+var reorder = require('./lib/reorder');
+var respawn = require('./lib/respawn');
+var remover = require('./lib/remover');
+
+var FORBID_RESPAWNING_FLAG = '--no-respawning';
+
+module.exports = function(flags, argv, forcedFlags, execute) {
+ if (!flags) {
+ throw new Error('You must specify flags to respawn with.');
+ }
+ if (!argv) {
+ throw new Error('You must specify an argv array.');
+ }
+
+ if (typeof forcedFlags === 'function') {
+ execute = forcedFlags;
+ forcedFlags = [];
+ }
+
+ if (typeof forcedFlags === 'string') {
+ forcedFlags = [forcedFlags];
+ }
+
+ if (!Array.isArray(forcedFlags)) {
+ forcedFlags = [];
+ }
+
+ var index = argv.indexOf(FORBID_RESPAWNING_FLAG);
+ if (index >= 0) {
+ argv = argv.slice(0, index).concat(argv.slice(index + 1));
+ argv = remover(flags, argv);
+ execute(true, process, argv);
+ return;
+ }
+
+ var proc = process;
+ var reordered = reorder(flags, argv);
+ var ready = JSON.stringify(argv) === JSON.stringify(reordered);
+
+ if (forcedFlags.length) {
+ reordered = reordered.slice(0, 1)
+ .concat(forcedFlags)
+ .concat(reordered.slice(1));
+ ready = false;
+ }
+
+ if (!ready) {
+ reordered.push(FORBID_RESPAWNING_FLAG);
+ proc = respawn(reordered);
+ }
+ execute(ready, proc, reordered);
+};
diff --git a/node_modules/flagged-respawn/lib/is-v8flags.js b/node_modules/flagged-respawn/lib/is-v8flags.js
new file mode 100644
index 0000000..34df9d2
--- /dev/null
+++ b/node_modules/flagged-respawn/lib/is-v8flags.js
@@ -0,0 +1,13 @@
+function isV8flags(flag, v8flags) {
+ return v8flags.indexOf(replaceSeparatorsFromDashesToUnderscores(flag)) >= 0;
+}
+
+function replaceSeparatorsFromDashesToUnderscores(flag) {
+ var arr = /^(-+)(.*)$/.exec(flag);
+ if (!arr) {
+ return flag;
+ }
+ return arr[1] + arr[2].replace(/\-/g, '_');
+}
+
+module.exports = isV8flags;
diff --git a/node_modules/flagged-respawn/lib/remover.js b/node_modules/flagged-respawn/lib/remover.js
new file mode 100644
index 0000000..3d194fa
--- /dev/null
+++ b/node_modules/flagged-respawn/lib/remover.js
@@ -0,0 +1,13 @@
+var isV8flags = require('./is-v8flags');
+
+module.exports = function(flags, argv) {
+ var args = argv.slice(0, 1);
+ for (var i = 1, n = argv.length; i < n; i++) {
+ var arg = argv[i];
+ var flag = arg.split('=')[0];
+ if (!isV8flags(flag, flags)) {
+ args.push(arg);
+ }
+ }
+ return args;
+};
diff --git a/node_modules/flagged-respawn/lib/reorder.js b/node_modules/flagged-respawn/lib/reorder.js
new file mode 100644
index 0000000..125fc6c
--- /dev/null
+++ b/node_modules/flagged-respawn/lib/reorder.js
@@ -0,0 +1,18 @@
+var isV8flags = require('./is-v8flags');
+
+module.exports = function(flags, argv) {
+ if (!argv) {
+ argv = process.argv;
+ }
+ var args = [argv[1]];
+ argv.slice(2).forEach(function(arg) {
+ var flag = arg.split('=')[0];
+ if (isV8flags(flag, flags)) {
+ args.unshift(arg);
+ } else {
+ args.push(arg);
+ }
+ });
+ args.unshift(argv[0]);
+ return args;
+};
diff --git a/node_modules/flagged-respawn/lib/respawn.js b/node_modules/flagged-respawn/lib/respawn.js
new file mode 100644
index 0000000..c7e40fe
--- /dev/null
+++ b/node_modules/flagged-respawn/lib/respawn.js
@@ -0,0 +1,16 @@
+var spawn = require('child_process').spawn;
+
+module.exports = function(argv) {
+ var child = spawn(argv[0], argv.slice(1), { stdio: 'inherit' });
+ child.on('exit', function(code, signal) {
+ process.on('exit', function() {
+ /* istanbul ignore if */
+ if (signal) {
+ process.kill(process.pid, signal);
+ } else {
+ process.exit(code);
+ }
+ });
+ });
+ return child;
+};
diff --git a/node_modules/flagged-respawn/package.json b/node_modules/flagged-respawn/package.json
new file mode 100644
index 0000000..1d38d81
--- /dev/null
+++ b/node_modules/flagged-respawn/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "flagged-respawn",
+ "version": "1.0.1",
+ "description": "A tool for respawning node binaries when special flags are present.",
+ "author": "Gulp Team (http://gulpjs.com/)",
+ "contributors": [
+ "Takayuki Sato ",
+ "Bertrand Marron ",
+ "Tyler Kellen ",
+ "Blaine Bublitz "
+ ],
+ "repository": "gulpjs/flagged-respawn",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "main": "index.js",
+ "files": [
+ "index.js",
+ "lib/",
+ "LICENSE"
+ ],
+ "scripts": {
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "test": "mocha --async-only",
+ "cover": "nyc --reporter=lcov --reporter=text-summary npm test",
+ "coveralls": "npm run cover && istanbul-coveralls",
+ "respawn": "node test/bin/respawner --harmony test",
+ "nospawn": "node test/bin/respawner test"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "eslint": "^2.13.0",
+ "eslint-config-gulp": "^3.0.1",
+ "expect": "^1.20.2",
+ "istanbul": "^0.4.3",
+ "istanbul-coveralls": "^1.0.3",
+ "mocha": "^3.5.3",
+ "nyc": "^11.3.0",
+ "v8flags": "^3.0.1"
+ },
+ "keywords": [
+ "respawn",
+ "flags"
+ ]
+}
diff --git a/node_modules/flush-write-stream/.travis.yml b/node_modules/flush-write-stream/.travis.yml
new file mode 100644
index 0000000..4689cb7
--- /dev/null
+++ b/node_modules/flush-write-stream/.travis.yml
@@ -0,0 +1,6 @@
+language: node_js
+node_js:
+ - '4'
+ - '6'
+ - '8'
+ - '10'
diff --git a/node_modules/flush-write-stream/LICENSE b/node_modules/flush-write-stream/LICENSE
new file mode 100644
index 0000000..66a4d2a
--- /dev/null
+++ b/node_modules/flush-write-stream/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Mathias Buus
+
+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/node_modules/flush-write-stream/README.md b/node_modules/flush-write-stream/README.md
new file mode 100644
index 0000000..7ea7b69
--- /dev/null
+++ b/node_modules/flush-write-stream/README.md
@@ -0,0 +1,59 @@
+# flush-write-stream
+
+A write stream constructor that supports a flush function that is called before `finish` is emitted
+
+```
+npm install flush-write-stream
+```
+
+[![build status](http://img.shields.io/travis/mafintosh/flush-write-stream.svg?style=flat)](http://travis-ci.org/mafintosh/flush-write-stream)
+
+## Usage
+
+``` js
+var writer = require('flush-write-stream')
+
+var ws = writer(write, flush)
+
+ws.on('finish', function () {
+ console.log('finished')
+})
+
+ws.write('hello')
+ws.write('world')
+ws.end()
+
+function write (data, enc, cb) {
+ // i am your normal ._write method
+ console.log('writing', data.toString())
+ cb()
+}
+
+function flush (cb) {
+ // i am called before finish is emitted
+ setTimeout(cb, 1000) // wait 1 sec
+}
+```
+
+If you run the above it will produce the following output
+
+```
+writing hello
+writing world
+(nothing happens for 1 sec)
+finished
+```
+
+## API
+
+#### `var ws = writer([options], write, [flush])`
+
+Create a new writable stream. Options are forwarded to the stream constructor.
+
+#### `var ws = writer.obj([options], write, [flush])`
+
+Same as the above except `objectMode` is set to `true` per default.
+
+## License
+
+MIT
diff --git a/node_modules/flush-write-stream/example.js b/node_modules/flush-write-stream/example.js
new file mode 100644
index 0000000..fa6b5da
--- /dev/null
+++ b/node_modules/flush-write-stream/example.js
@@ -0,0 +1,22 @@
+var writer = require('./')
+
+var ws = writer(write, flush)
+
+ws.on('finish', function () {
+ console.log('finished')
+})
+
+ws.write('hello')
+ws.write('world')
+ws.end()
+
+function write (data, enc, cb) {
+ // i am your normal ._write method
+ console.log('writing', data.toString())
+ cb()
+}
+
+function flush (cb) {
+ // i am called before finish is emitted
+ setTimeout(cb, 1000) // wait 1 sec
+}
diff --git a/node_modules/flush-write-stream/index.js b/node_modules/flush-write-stream/index.js
new file mode 100644
index 0000000..d7c6209
--- /dev/null
+++ b/node_modules/flush-write-stream/index.js
@@ -0,0 +1,54 @@
+var stream = require('readable-stream')
+var inherits = require('inherits')
+
+var SIGNAL_FLUSH =(Buffer.from && Buffer.from !== Uint8Array.from)
+ ? Buffer.from([0])
+ : new Buffer([0])
+
+module.exports = WriteStream
+
+function WriteStream (opts, write, flush) {
+ if (!(this instanceof WriteStream)) return new WriteStream(opts, write, flush)
+
+ if (typeof opts === 'function') {
+ flush = write
+ write = opts
+ opts = {}
+ }
+
+ stream.Writable.call(this, opts)
+
+ this.destroyed = false
+ this._worker = write || null
+ this._flush = flush || null
+}
+
+inherits(WriteStream, stream.Writable)
+
+WriteStream.obj = function (opts, worker, flush) {
+ if (typeof opts === 'function') return WriteStream.obj(null, opts, worker)
+ if (!opts) opts = {}
+ opts.objectMode = true
+ return new WriteStream(opts, worker, flush)
+}
+
+WriteStream.prototype._write = function (data, enc, cb) {
+ if (SIGNAL_FLUSH === data) this._flush(cb)
+ else this._worker(data, enc, cb)
+}
+
+WriteStream.prototype.end = function (data, enc, cb) {
+ if (!this._flush) return stream.Writable.prototype.end.apply(this, arguments)
+ if (typeof data === 'function') return this.end(null, null, data)
+ if (typeof enc === 'function') return this.end(data, null, enc)
+ if (data) this.write(data)
+ if (!this._writableState.ending) this.write(SIGNAL_FLUSH)
+ return stream.Writable.prototype.end.call(this, cb)
+}
+
+WriteStream.prototype.destroy = function (err) {
+ if (this.destroyed) return
+ this.destroyed = true
+ if (err) this.emit('error', err)
+ this.emit('close')
+}
diff --git a/node_modules/flush-write-stream/package.json b/node_modules/flush-write-stream/package.json
new file mode 100644
index 0000000..9d6326c
--- /dev/null
+++ b/node_modules/flush-write-stream/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "flush-write-stream",
+ "version": "1.1.1",
+ "description": "A write stream constructor that supports a flush function that is called before finish is emitted",
+ "main": "index.js",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.3.6"
+ },
+ "devDependencies": {
+ "tape": "^4.2.2"
+ },
+ "scripts": {
+ "test": "tape test.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/mafintosh/flush-write-stream.git"
+ },
+ "author": "Mathias Buus (@mafintosh)",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/mafintosh/flush-write-stream/issues"
+ },
+ "homepage": "https://github.com/mafintosh/flush-write-stream"
+}
diff --git a/node_modules/flush-write-stream/test.js b/node_modules/flush-write-stream/test.js
new file mode 100644
index 0000000..6cd0c20
--- /dev/null
+++ b/node_modules/flush-write-stream/test.js
@@ -0,0 +1,85 @@
+var tape = require('tape')
+var writer = require('./')
+
+tape('is a write stream', function (t) {
+ var expected = ['hello', 'world', 'verden']
+ var ws = writer.obj(write)
+
+ ws.write('hello')
+ ws.write('world')
+ ws.write('verden')
+ ws.end(function () {
+ t.same(expected.length, 0)
+ t.end()
+ })
+
+ function write (data, enc, cb) {
+ t.same(data, expected.shift())
+ cb()
+ }
+})
+
+tape('is flushable', function (t) {
+ var expected = ['hello', 'world', 'verden']
+ var flushed = false
+
+ var ws = writer.obj(write, flush)
+
+ ws.write('hello')
+ ws.write('world')
+ ws.write('verden')
+ ws.end(function () {
+ t.same(expected.length, 0)
+ t.ok(flushed, 'was flushed')
+ t.end()
+ })
+
+ function write (data, enc, cb) {
+ t.same(data, expected.shift())
+ cb()
+ }
+
+ function flush (cb) {
+ flushed = true
+ process.nextTick(cb)
+ }
+})
+
+tape('can pass options', function (t) {
+ var expected = ['hello', 'world', 'verden']
+ var flushed = false
+
+ var ws = writer({objectMode: true}, write, flush)
+
+ ws.write('hello')
+ ws.write('world')
+ ws.write('verden')
+ ws.end(function () {
+ t.same(expected.length, 0)
+ t.ok(flushed, 'was flushed')
+ t.end()
+ })
+
+ function write (data, enc, cb) {
+ t.same(data, expected.shift())
+ cb()
+ }
+
+ function flush (cb) {
+ flushed = true
+ process.nextTick(cb)
+ }
+})
+
+tape('emits error on destroy', function (t) {
+ var expected = new Error()
+
+ var ws = writer({objectMode: true}, function () {})
+
+ ws.on('error', function (err) {
+ t.equal(err, expected)
+ })
+ ws.on('close', t.end)
+
+ ws.destroy(expected)
+})
diff --git a/node_modules/for-in/LICENSE b/node_modules/for-in/LICENSE
new file mode 100644
index 0000000..d734237
--- /dev/null
+++ b/node_modules/for-in/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+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/node_modules/for-in/README.md b/node_modules/for-in/README.md
new file mode 100644
index 0000000..874e189
--- /dev/null
+++ b/node_modules/for-in/README.md
@@ -0,0 +1,85 @@
+# for-in [![NPM version](https://img.shields.io/npm/v/for-in.svg?style=flat)](https://www.npmjs.com/package/for-in) [![NPM monthly downloads](https://img.shields.io/npm/dm/for-in.svg?style=flat)](https://npmjs.org/package/for-in) [![NPM total downloads](https://img.shields.io/npm/dt/for-in.svg?style=flat)](https://npmjs.org/package/for-in) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/for-in.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/for-in)
+
+> Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save for-in
+```
+
+## Usage
+
+```js
+var forIn = require('for-in');
+
+var obj = {a: 'foo', b: 'bar', c: 'baz'};
+var values = [];
+var keys = [];
+
+forIn(obj, function (value, key, o) {
+ keys.push(key);
+ values.push(value);
+});
+
+console.log(keys);
+//=> ['a', 'b', 'c'];
+
+console.log(values);
+//=> ['foo', 'bar', 'baz'];
+```
+
+## About
+
+### Related projects
+
+* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.")
+* [collection-map](https://www.npmjs.com/package/collection-map): Returns an array of mapped values from an array or object. | [homepage](https://github.com/jonschlinkert/collection-map "Returns an array of mapped values from an array or object.")
+* [for-own](https://www.npmjs.com/package/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own) | [homepage](https://github.com/jonschlinkert/for-own "Iterate over the own enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 16 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [paulirish](https://github.com/paulirish) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 28, 2017._
\ No newline at end of file
diff --git a/node_modules/for-in/index.js b/node_modules/for-in/index.js
new file mode 100644
index 0000000..0b5f95f
--- /dev/null
+++ b/node_modules/for-in/index.js
@@ -0,0 +1,16 @@
+/*!
+ * for-in
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+module.exports = function forIn(obj, fn, thisArg) {
+ for (var key in obj) {
+ if (fn.call(thisArg, obj[key], key, obj) === false) {
+ break;
+ }
+ }
+};
diff --git a/node_modules/for-in/package.json b/node_modules/for-in/package.json
new file mode 100644
index 0000000..48810a1
--- /dev/null
+++ b/node_modules/for-in/package.json
@@ -0,0 +1,68 @@
+{
+ "name": "for-in",
+ "description": "Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js",
+ "version": "1.0.2",
+ "homepage": "https://github.com/jonschlinkert/for-in",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Paul Irish (http://paulirish.com)"
+ ],
+ "repository": "jonschlinkert/for-in",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/for-in/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^0.1.11",
+ "mocha": "^3.2.0"
+ },
+ "keywords": [
+ "for",
+ "for-in",
+ "for-own",
+ "has",
+ "has-own",
+ "hasOwn",
+ "in",
+ "key",
+ "keys",
+ "object",
+ "own",
+ "value"
+ ],
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-flatten",
+ "collection-map",
+ "for-own"
+ ]
+ },
+ "reflinks": [
+ "verb"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/for-own/LICENSE b/node_modules/for-own/LICENSE
new file mode 100644
index 0000000..d290fe0
--- /dev/null
+++ b/node_modules/for-own/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2015, 2017, Jon Schlinkert
+
+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/node_modules/for-own/README.md b/node_modules/for-own/README.md
new file mode 100644
index 0000000..fd56877
--- /dev/null
+++ b/node_modules/for-own/README.md
@@ -0,0 +1,85 @@
+# for-own [![NPM version](https://img.shields.io/npm/v/for-own.svg?style=flat)](https://www.npmjs.com/package/for-own) [![NPM monthly downloads](https://img.shields.io/npm/dm/for-own.svg?style=flat)](https://npmjs.org/package/for-own) [![NPM total downloads](https://img.shields.io/npm/dt/for-own.svg?style=flat)](https://npmjs.org/package/for-own) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/for-own.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/for-own)
+
+> Iterate over the own enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save for-own
+```
+
+## Usage
+
+```js
+var forOwn = require('for-own');
+
+var obj = {a: 'foo', b: 'bar', c: 'baz'};
+var values = [];
+var keys = [];
+
+forOwn(obj, function (value, key, o) {
+ keys.push(key);
+ values.push(value);
+});
+
+console.log(keys);
+//=> ['a', 'b', 'c'];
+
+console.log(values);
+//=> ['foo', 'bar', 'baz'];
+```
+
+## About
+
+### Related projects
+
+* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.")
+* [collection-map](https://www.npmjs.com/package/collection-map): Returns an array of mapped values from an array or object. | [homepage](https://github.com/jonschlinkert/collection-map "Returns an array of mapped values from an array or object.")
+* [for-in](https://www.npmjs.com/package/for-in): Iterate over the own and inherited enumerable properties of an object, and return an object… [more](https://github.com/jonschlinkert/for-in) | [homepage](https://github.com/jonschlinkert/for-in "Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 10 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 1 | [javiercejudo](https://github.com/javiercejudo) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 26, 2017._
\ No newline at end of file
diff --git a/node_modules/for-own/index.js b/node_modules/for-own/index.js
new file mode 100644
index 0000000..74e2d75
--- /dev/null
+++ b/node_modules/for-own/index.js
@@ -0,0 +1,19 @@
+/*!
+ * for-own
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var forIn = require('for-in');
+var hasOwn = Object.prototype.hasOwnProperty;
+
+module.exports = function forOwn(obj, fn, thisArg) {
+ forIn(obj, function(val, key) {
+ if (hasOwn.call(obj, key)) {
+ return fn.call(thisArg, obj[key], key, obj);
+ }
+ });
+};
diff --git a/node_modules/for-own/package.json b/node_modules/for-own/package.json
new file mode 100644
index 0000000..5eb73af
--- /dev/null
+++ b/node_modules/for-own/package.json
@@ -0,0 +1,70 @@
+{
+ "name": "for-own",
+ "description": "Iterate over the own enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js.",
+ "version": "1.0.0",
+ "homepage": "https://github.com/jonschlinkert/for-own",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Javier Cejudo (https://www.javiercejudo.com)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)"
+ ],
+ "repository": "jonschlinkert/for-own",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/for-own/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "for-in": "^1.0.1"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^0.1.11",
+ "mocha": "^3.2.0"
+ },
+ "keywords": [
+ "for",
+ "for-in",
+ "for-own",
+ "has",
+ "has-own",
+ "hasOwn",
+ "key",
+ "keys",
+ "object",
+ "own",
+ "value"
+ ],
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "arr-flatten",
+ "collection-map",
+ "for-in"
+ ]
+ },
+ "reflinks": [
+ "verb"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/fragment-cache/LICENSE b/node_modules/fragment-cache/LICENSE
new file mode 100644
index 0000000..b11cb79
--- /dev/null
+++ b/node_modules/fragment-cache/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016-2017, Jon Schlinkert
+
+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/node_modules/fragment-cache/README.md b/node_modules/fragment-cache/README.md
new file mode 100644
index 0000000..541ef0f
--- /dev/null
+++ b/node_modules/fragment-cache/README.md
@@ -0,0 +1,156 @@
+# fragment-cache [![NPM version](https://img.shields.io/npm/v/fragment-cache.svg?style=flat)](https://www.npmjs.com/package/fragment-cache) [![NPM downloads](https://img.shields.io/npm/dm/fragment-cache.svg?style=flat)](https://npmjs.org/package/fragment-cache) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/fragment-cache.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/fragment-cache)
+
+> A cache for managing namespaced sub-caches
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save fragment-cache
+```
+
+## Usage
+
+```js
+var Fragment = require('fragment-cache');
+var fragment = new Fragment();
+```
+
+## API
+
+### [FragmentCache](index.js#L24)
+
+Create a new `FragmentCache` with an optional object to use for `caches`.
+
+**Example**
+
+```js
+var fragment = new FragmentCache();
+```
+
+**Params**
+
+* `cacheName` **{String}**
+* `returns` **{Object}**: Returns the [map-cache](https://github.com/jonschlinkert/map-cache) instance.
+
+### [.cache](index.js#L49)
+
+Get cache `name` from the `fragment.caches` object. Creates a new `MapCache` if it doesn't already exist.
+
+**Example**
+
+```js
+var cache = fragment.cache('files');
+console.log(fragment.caches.hasOwnProperty('files'));
+//=> true
+```
+
+**Params**
+
+* `cacheName` **{String}**
+* `returns` **{Object}**: Returns the [map-cache](https://github.com/jonschlinkert/map-cache) instance.
+
+### [.set](index.js#L67)
+
+Set a value for property `key` on cache `name`
+
+**Example**
+
+```js
+fragment.set('files', 'somefile.js', new File({path: 'somefile.js'}));
+```
+
+**Params**
+
+* `name` **{String}**
+* `key` **{String}**: Property name to set
+* `val` **{any}**: The value of `key`
+* `returns` **{Object}**: The cache instance for chaining
+
+### [.has](index.js#L93)
+
+Returns true if a non-undefined value is set for `key` on fragment cache `name`.
+
+**Example**
+
+```js
+var cache = fragment.cache('files');
+cache.set('somefile.js');
+
+console.log(cache.has('somefile.js'));
+//=> true
+
+console.log(cache.has('some-other-file.js'));
+//=> false
+```
+
+**Params**
+
+* `name` **{String}**: Cache name
+* `key` **{String}**: Optionally specify a property to check for on cache `name`
+* `returns` **{Boolean}**
+
+### [.get](index.js#L115)
+
+Get `name`, or if specified, the value of `key`. Invokes the [cache](#cache) method, so that cache `name` will be created it doesn't already exist. If `key` is not passed, the entire cache (`name`) is returned.
+
+**Example**
+
+```js
+var Vinyl = require('vinyl');
+var cache = fragment.cache('files');
+cache.set('somefile.js', new Vinyl({path: 'somefile.js'}));
+console.log(cache.get('somefile.js'));
+//=>
+```
+
+**Params**
+
+* `name` **{String}**
+* `returns` **{Object}**: Returns cache `name`, or the value of `key` if specified
+
+## About
+
+### Related projects
+
+* [base](https://www.npmjs.com/package/base): base is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting… [more](https://github.com/node-base/base) | [homepage](https://github.com/node-base/base "base is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting with a handful of common methods, like `set`, `get`, `del` and `use`.")
+* [map-cache](https://www.npmjs.com/package/map-cache): Basic cache object for storing key-value pairs. | [homepage](https://github.com/jonschlinkert/map-cache "Basic cache object for storing key-value pairs.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/fragment-cache/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on October 17, 2016._
\ No newline at end of file
diff --git a/node_modules/fragment-cache/index.js b/node_modules/fragment-cache/index.js
new file mode 100644
index 0000000..8ce6216
--- /dev/null
+++ b/node_modules/fragment-cache/index.js
@@ -0,0 +1,128 @@
+/*!
+ * fragment-cache
+ *
+ * Copyright (c) 2016-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var MapCache = require('map-cache');
+
+/**
+ * Create a new `FragmentCache` with an optional object to use for `caches`.
+ *
+ * ```js
+ * var fragment = new FragmentCache();
+ * ```
+ * @name FragmentCache
+ * @param {String} `cacheName`
+ * @return {Object} Returns the [map-cache][] instance.
+ * @api public
+ */
+
+function FragmentCache(caches) {
+ this.caches = caches || {};
+}
+
+/**
+ * Prototype
+ */
+
+FragmentCache.prototype = {
+
+ /**
+ * Get cache `name` from the `fragment.caches` object. Creates a new
+ * `MapCache` if it doesn't already exist.
+ *
+ * ```js
+ * var cache = fragment.cache('files');
+ * console.log(fragment.caches.hasOwnProperty('files'));
+ * //=> true
+ * ```
+ * @name .cache
+ * @param {String} `cacheName`
+ * @return {Object} Returns the [map-cache][] instance.
+ * @api public
+ */
+
+ cache: function(cacheName) {
+ return this.caches[cacheName] || (this.caches[cacheName] = new MapCache());
+ },
+
+ /**
+ * Set a value for property `key` on cache `name`
+ *
+ * ```js
+ * fragment.set('files', 'somefile.js', new File({path: 'somefile.js'}));
+ * ```
+ * @name .set
+ * @param {String} `name`
+ * @param {String} `key` Property name to set
+ * @param {any} `val` The value of `key`
+ * @return {Object} The cache instance for chaining
+ * @api public
+ */
+
+ set: function(cacheName, key, val) {
+ var cache = this.cache(cacheName);
+ cache.set(key, val);
+ return cache;
+ },
+
+ /**
+ * Returns true if a non-undefined value is set for `key` on fragment cache `name`.
+ *
+ * ```js
+ * var cache = fragment.cache('files');
+ * cache.set('somefile.js');
+ *
+ * console.log(cache.has('somefile.js'));
+ * //=> true
+ *
+ * console.log(cache.has('some-other-file.js'));
+ * //=> false
+ * ```
+ * @name .has
+ * @param {String} `name` Cache name
+ * @param {String} `key` Optionally specify a property to check for on cache `name`
+ * @return {Boolean}
+ * @api public
+ */
+
+ has: function(cacheName, key) {
+ return typeof this.get(cacheName, key) !== 'undefined';
+ },
+
+ /**
+ * Get `name`, or if specified, the value of `key`. Invokes the [cache]() method,
+ * so that cache `name` will be created it doesn't already exist. If `key` is not passed,
+ * the entire cache (`name`) is returned.
+ *
+ * ```js
+ * var Vinyl = require('vinyl');
+ * var cache = fragment.cache('files');
+ * cache.set('somefile.js', new Vinyl({path: 'somefile.js'}));
+ * console.log(cache.get('somefile.js'));
+ * //=>
+ * ```
+ * @name .get
+ * @param {String} `name`
+ * @return {Object} Returns cache `name`, or the value of `key` if specified
+ * @api public
+ */
+
+ get: function(name, key) {
+ var cache = this.cache(name);
+ if (typeof key === 'string') {
+ return cache.get(key);
+ }
+ return cache;
+ }
+};
+
+/**
+ * Expose `FragmentCache`
+ */
+
+exports = module.exports = FragmentCache;
diff --git a/node_modules/fragment-cache/package.json b/node_modules/fragment-cache/package.json
new file mode 100644
index 0000000..f87c5da
--- /dev/null
+++ b/node_modules/fragment-cache/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "fragment-cache",
+ "description": "A cache for managing namespaced sub-caches",
+ "version": "0.2.1",
+ "homepage": "https://github.com/jonschlinkert/fragment-cache",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/fragment-cache",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/fragment-cache/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "map-cache": "^0.2.2"
+ },
+ "devDependencies": {
+ "gulp": "^3.9.1",
+ "gulp-eslint": "^3.0.1",
+ "gulp-format-md": "^0.1.11",
+ "gulp-istanbul": "^1.1.1",
+ "gulp-mocha": "^3.0.1",
+ "mocha": "^3.2.0"
+ },
+ "keywords": [
+ "cache",
+ "fragment"
+ ],
+ "verb": {
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "reflinks": [
+ "map-cache",
+ "verb"
+ ],
+ "related": {
+ "list": [
+ "base",
+ "map-cache"
+ ]
+ },
+ "layout": "default",
+ "toc": false,
+ "tasks": [
+ "readme"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/fs-mkdirp-stream/LICENSE b/node_modules/fs-mkdirp-stream/LICENSE
new file mode 100644
index 0000000..73593ac
--- /dev/null
+++ b/node_modules/fs-mkdirp-stream/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other contributors (Originally based on code from node-mkdirp - MIT/X11 license - Copyright 2010 James Halliday)
+
+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/node_modules/fs-mkdirp-stream/README.md b/node_modules/fs-mkdirp-stream/README.md
new file mode 100644
index 0000000..819f8a3
--- /dev/null
+++ b/node_modules/fs-mkdirp-stream/README.md
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+# fs-mkdirp-stream
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Ensure directories exist before writing to them.
+
+## Usage
+
+```js
+var to = require('to2');
+var from = require('from2');
+var mkdirpStream = require('fs-mkdirp-stream');
+
+from.obj([{ dirname: '/path/to/my/', path: '/path/to/my/file.js' }])
+ .pipe(mkdirpStream.obj(function(obj, callback) {
+ // callback can take 3 arguments (err, dirname, mode)
+ callback(null, obj.dirname);
+ }))
+ .pipe(to.obj(function(obj) {
+ // This will be called once the directory exists
+ // obj === { dirname: '/path/to/my/', path: '/path/to/my/file.js' }
+ }));
+```
+
+## API
+
+### `mkdirpStream(resolver)`
+
+Takes a `resolver` function or string and returns a `through2` stream.
+
+If the `resolver` is a function, it will be called once per chunk with the signature `(chunk, callback)`. The `callback(error, dirpath, mode)` must be called with the `dirpath` to be created as the 2nd parameter or an `error` as the 1st parameter; optionally with a `mode` as the 3rd parameter.
+
+If the `resolver` is a string, it will be created/ensured for each chunk (e.g. if it were deleted between chunks, it would be recreated). When using a string, a custom `mode` can't be used.
+
+### `mkdirpStream.obj(resolver)`
+
+The same as the top-level API but for object streams. See the example to see the benefit of object streams with this module.
+
+## License
+
+MIT
+
+Contains a custom implementation of `mkdirp` originally based on https://github.com/substack/node-mkdirp (Licensed MIT/X11 - Copyright 2010 James Halliday) with heavy modification to better support custom modes.
+
+[downloads-image]: http://img.shields.io/npm/dm/fs-mkdirp-stream.svg
+[npm-url]: https://npmjs.com/package/fs-mkdirp-stream
+[npm-image]: http://img.shields.io/npm/v/fs-mkdirp-stream.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/fs-mkdirp-stream
+[travis-image]: http://img.shields.io/travis/gulpjs/fs-mkdirp-stream.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/fs-mkdirp-stream
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/fs-mkdirp-stream.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/fs-mkdirp-stream
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/fs-mkdirp-stream/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.png
diff --git a/node_modules/fs-mkdirp-stream/index.js b/node_modules/fs-mkdirp-stream/index.js
new file mode 100644
index 0000000..cde5e19
--- /dev/null
+++ b/node_modules/fs-mkdirp-stream/index.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var through = require('through2');
+
+var mkdirp = require('./mkdirp');
+
+function toFunction(dirpath) {
+ function stringResolver(chunk, callback) {
+ callback(null, dirpath);
+ }
+
+ return stringResolver;
+}
+
+function define(options) {
+
+ function mkdirpStream(resolver) {
+ // Handle resolver that's just a dirpath
+ if (typeof resolver === 'string') {
+ resolver = toFunction(resolver);
+ }
+
+ function makeFileDirs(chunk, enc, callback) {
+ resolver(chunk, onDirpath);
+
+ function onDirpath(dirpathErr, dirpath, mode) {
+ if (dirpathErr) {
+ return callback(dirpathErr);
+ }
+
+ mkdirp(dirpath, mode, onMkdirp);
+ }
+
+ function onMkdirp(mkdirpErr) {
+ if (mkdirpErr) {
+ return callback(mkdirpErr);
+ }
+
+ callback(null, chunk);
+ }
+ }
+
+ return through(options, makeFileDirs);
+ }
+
+ return mkdirpStream;
+}
+
+module.exports = define();
+module.exports.obj = define({ objectMode: true, highWaterMark: 16 });
diff --git a/node_modules/fs-mkdirp-stream/mkdirp.js b/node_modules/fs-mkdirp-stream/mkdirp.js
new file mode 100644
index 0000000..e70031b
--- /dev/null
+++ b/node_modules/fs-mkdirp-stream/mkdirp.js
@@ -0,0 +1,71 @@
+'use strict';
+
+var path = require('path');
+
+var fs = require('graceful-fs');
+
+var MASK_MODE = parseInt('7777', 8);
+var DEFAULT_DIR_MODE = parseInt('0777', 8);
+
+function mkdirp(dirpath, customMode, callback) {
+ if (typeof customMode === 'function') {
+ callback = customMode;
+ customMode = undefined;
+ }
+
+ var mode = customMode || (DEFAULT_DIR_MODE & ~process.umask());
+ dirpath = path.resolve(dirpath);
+
+ fs.mkdir(dirpath, mode, onMkdir);
+
+ function onMkdir(mkdirErr) {
+ if (!mkdirErr) {
+ return fs.stat(dirpath, onStat);
+ }
+
+ switch (mkdirErr.code) {
+ case 'ENOENT': {
+ return mkdirp(path.dirname(dirpath), onRecurse);
+ }
+
+ case 'EEXIST': {
+ return fs.stat(dirpath, onStat);
+ }
+
+ default: {
+ return callback(mkdirErr);
+ }
+ }
+
+ function onStat(statErr, stats) {
+ if (statErr) {
+ return callback(statErr);
+ }
+
+ if (!stats.isDirectory()) {
+ return callback(mkdirErr);
+ }
+
+ // TODO: Is it proper to mask like this?
+ if ((stats.mode & MASK_MODE) === mode) {
+ return callback();
+ }
+
+ if (!customMode) {
+ return callback();
+ }
+
+ fs.chmod(dirpath, mode, callback);
+ }
+ }
+
+ function onRecurse(recurseErr) {
+ if (recurseErr) {
+ return callback(recurseErr);
+ }
+
+ mkdirp(dirpath, mode, callback);
+ }
+}
+
+module.exports = mkdirp;
diff --git a/node_modules/fs-mkdirp-stream/package.json b/node_modules/fs-mkdirp-stream/package.json
new file mode 100644
index 0000000..8bfaacd
--- /dev/null
+++ b/node_modules/fs-mkdirp-stream/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "fs-mkdirp-stream",
+ "version": "1.0.0",
+ "description": "Ensure directories exist before writing to them.",
+ "author": "Gulp Team (http://gulpjs.com/)",
+ "contributors": [
+ "Blaine Bublitz "
+ ],
+ "repository": "gulpjs/fs-mkdirp-stream",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "main": "index.js",
+ "files": [
+ "LICENSE",
+ "index.js",
+ "mkdirp.js"
+ ],
+ "scripts": {
+ "lint": "eslint index.js mkdirp.js test/ && jscs index.js mkdirp.js test/",
+ "pretest": "npm run lint",
+ "test": "mocha --async-only",
+ "cover": "istanbul cover _mocha --report lcovonly",
+ "coveralls": "npm run cover && istanbul-coveralls"
+ },
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "through2": "^2.0.3"
+ },
+ "devDependencies": {
+ "eslint": "^1.10.3",
+ "eslint-config-gulp": "^2.0.0",
+ "expect": "^1.20.2",
+ "istanbul": "^0.4.3",
+ "istanbul-coveralls": "^1.0.3",
+ "jscs": "^2.4.0",
+ "jscs-preset-gulp": "^1.0.0",
+ "mississippi": "^1.3.0",
+ "mocha": "^3.2.0",
+ "rimraf": "^2.6.1"
+ },
+ "keywords": [
+ "fs",
+ "mkdirp",
+ "stream",
+ "mkdir",
+ "directory",
+ "directories",
+ "ensure"
+ ]
+}
diff --git a/node_modules/fs.realpath/LICENSE b/node_modules/fs.realpath/LICENSE
new file mode 100644
index 0000000..5bd884c
--- /dev/null
+++ b/node_modules/fs.realpath/LICENSE
@@ -0,0 +1,43 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+----
+
+This library bundles a version of the `fs.realpath` and `fs.realpathSync`
+methods from Node.js v0.10 under the terms of the Node.js MIT license.
+
+Node's license follows, also included at the header of `old.js` which contains
+the licensed code:
+
+ 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.
diff --git a/node_modules/fs.realpath/README.md b/node_modules/fs.realpath/README.md
new file mode 100644
index 0000000..a42ceac
--- /dev/null
+++ b/node_modules/fs.realpath/README.md
@@ -0,0 +1,33 @@
+# fs.realpath
+
+A backwards-compatible fs.realpath for Node v6 and above
+
+In Node v6, the JavaScript implementation of fs.realpath was replaced
+with a faster (but less resilient) native implementation. That raises
+new and platform-specific errors and cannot handle long or excessively
+symlink-looping paths.
+
+This module handles those cases by detecting the new errors and
+falling back to the JavaScript implementation. On versions of Node
+prior to v6, it has no effect.
+
+## USAGE
+
+```js
+var rp = require('fs.realpath')
+
+// async version
+rp.realpath(someLongAndLoopingPath, function (er, real) {
+ // the ELOOP was handled, but it was a bit slower
+})
+
+// sync version
+var real = rp.realpathSync(someLongAndLoopingPath)
+
+// monkeypatch at your own risk!
+// This replaces the fs.realpath/fs.realpathSync builtins
+rp.monkeypatch()
+
+// un-do the monkeypatching
+rp.unmonkeypatch()
+```
diff --git a/node_modules/fs.realpath/index.js b/node_modules/fs.realpath/index.js
new file mode 100644
index 0000000..b09c7c7
--- /dev/null
+++ b/node_modules/fs.realpath/index.js
@@ -0,0 +1,66 @@
+module.exports = realpath
+realpath.realpath = realpath
+realpath.sync = realpathSync
+realpath.realpathSync = realpathSync
+realpath.monkeypatch = monkeypatch
+realpath.unmonkeypatch = unmonkeypatch
+
+var fs = require('fs')
+var origRealpath = fs.realpath
+var origRealpathSync = fs.realpathSync
+
+var version = process.version
+var ok = /^v[0-5]\./.test(version)
+var old = require('./old.js')
+
+function newError (er) {
+ return er && er.syscall === 'realpath' && (
+ er.code === 'ELOOP' ||
+ er.code === 'ENOMEM' ||
+ er.code === 'ENAMETOOLONG'
+ )
+}
+
+function realpath (p, cache, cb) {
+ if (ok) {
+ return origRealpath(p, cache, cb)
+ }
+
+ if (typeof cache === 'function') {
+ cb = cache
+ cache = null
+ }
+ origRealpath(p, cache, function (er, result) {
+ if (newError(er)) {
+ old.realpath(p, cache, cb)
+ } else {
+ cb(er, result)
+ }
+ })
+}
+
+function realpathSync (p, cache) {
+ if (ok) {
+ return origRealpathSync(p, cache)
+ }
+
+ try {
+ return origRealpathSync(p, cache)
+ } catch (er) {
+ if (newError(er)) {
+ return old.realpathSync(p, cache)
+ } else {
+ throw er
+ }
+ }
+}
+
+function monkeypatch () {
+ fs.realpath = realpath
+ fs.realpathSync = realpathSync
+}
+
+function unmonkeypatch () {
+ fs.realpath = origRealpath
+ fs.realpathSync = origRealpathSync
+}
diff --git a/node_modules/fs.realpath/old.js b/node_modules/fs.realpath/old.js
new file mode 100644
index 0000000..b40305e
--- /dev/null
+++ b/node_modules/fs.realpath/old.js
@@ -0,0 +1,303 @@
+// 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 pathModule = require('path');
+var isWindows = process.platform === 'win32';
+var fs = require('fs');
+
+// JavaScript implementation of realpath, ported from node pre-v6
+
+var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG);
+
+function rethrow() {
+ // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and
+ // is fairly slow to generate.
+ var callback;
+ if (DEBUG) {
+ var backtrace = new Error;
+ callback = debugCallback;
+ } else
+ callback = missingCallback;
+
+ return callback;
+
+ function debugCallback(err) {
+ if (err) {
+ backtrace.message = err.message;
+ err = backtrace;
+ missingCallback(err);
+ }
+ }
+
+ function missingCallback(err) {
+ if (err) {
+ if (process.throwDeprecation)
+ throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs
+ else if (!process.noDeprecation) {
+ var msg = 'fs: missing callback ' + (err.stack || err.message);
+ if (process.traceDeprecation)
+ console.trace(msg);
+ else
+ console.error(msg);
+ }
+ }
+ }
+}
+
+function maybeCallback(cb) {
+ return typeof cb === 'function' ? cb : rethrow();
+}
+
+var normalize = pathModule.normalize;
+
+// Regexp that finds the next partion of a (partial) path
+// result is [base_with_slash, base], e.g. ['somedir/', 'somedir']
+if (isWindows) {
+ var nextPartRe = /(.*?)(?:[\/\\]+|$)/g;
+} else {
+ var nextPartRe = /(.*?)(?:[\/]+|$)/g;
+}
+
+// Regex to find the device root, including trailing slash. E.g. 'c:\\'.
+if (isWindows) {
+ var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/;
+} else {
+ var splitRootRe = /^[\/]*/;
+}
+
+exports.realpathSync = function realpathSync(p, cache) {
+ // make p is absolute
+ p = pathModule.resolve(p);
+
+ if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
+ return cache[p];
+ }
+
+ var original = p,
+ seenLinks = {},
+ knownHard = {};
+
+ // current character position in p
+ var pos;
+ // the partial path so far, including a trailing slash if any
+ var current;
+ // the partial path without a trailing slash (except when pointing at a root)
+ var base;
+ // the partial path scanned in the previous round, with slash
+ var previous;
+
+ start();
+
+ function start() {
+ // Skip over roots
+ var m = splitRootRe.exec(p);
+ pos = m[0].length;
+ current = m[0];
+ base = m[0];
+ previous = '';
+
+ // On windows, check that the root exists. On unix there is no need.
+ if (isWindows && !knownHard[base]) {
+ fs.lstatSync(base);
+ knownHard[base] = true;
+ }
+ }
+
+ // walk down the path, swapping out linked pathparts for their real
+ // values
+ // NB: p.length changes.
+ while (pos < p.length) {
+ // find the next part
+ nextPartRe.lastIndex = pos;
+ var result = nextPartRe.exec(p);
+ previous = current;
+ current += result[0];
+ base = previous + result[1];
+ pos = nextPartRe.lastIndex;
+
+ // continue if not a symlink
+ if (knownHard[base] || (cache && cache[base] === base)) {
+ continue;
+ }
+
+ var resolvedLink;
+ if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
+ // some known symbolic link. no need to stat again.
+ resolvedLink = cache[base];
+ } else {
+ var stat = fs.lstatSync(base);
+ if (!stat.isSymbolicLink()) {
+ knownHard[base] = true;
+ if (cache) cache[base] = base;
+ continue;
+ }
+
+ // read the link if it wasn't read before
+ // dev/ino always return 0 on windows, so skip the check.
+ var linkTarget = null;
+ if (!isWindows) {
+ var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);
+ if (seenLinks.hasOwnProperty(id)) {
+ linkTarget = seenLinks[id];
+ }
+ }
+ if (linkTarget === null) {
+ fs.statSync(base);
+ linkTarget = fs.readlinkSync(base);
+ }
+ resolvedLink = pathModule.resolve(previous, linkTarget);
+ // track this, if given a cache.
+ if (cache) cache[base] = resolvedLink;
+ if (!isWindows) seenLinks[id] = linkTarget;
+ }
+
+ // resolve the link, then start over
+ p = pathModule.resolve(resolvedLink, p.slice(pos));
+ start();
+ }
+
+ if (cache) cache[original] = p;
+
+ return p;
+};
+
+
+exports.realpath = function realpath(p, cache, cb) {
+ if (typeof cb !== 'function') {
+ cb = maybeCallback(cache);
+ cache = null;
+ }
+
+ // make p is absolute
+ p = pathModule.resolve(p);
+
+ if (cache && Object.prototype.hasOwnProperty.call(cache, p)) {
+ return process.nextTick(cb.bind(null, null, cache[p]));
+ }
+
+ var original = p,
+ seenLinks = {},
+ knownHard = {};
+
+ // current character position in p
+ var pos;
+ // the partial path so far, including a trailing slash if any
+ var current;
+ // the partial path without a trailing slash (except when pointing at a root)
+ var base;
+ // the partial path scanned in the previous round, with slash
+ var previous;
+
+ start();
+
+ function start() {
+ // Skip over roots
+ var m = splitRootRe.exec(p);
+ pos = m[0].length;
+ current = m[0];
+ base = m[0];
+ previous = '';
+
+ // On windows, check that the root exists. On unix there is no need.
+ if (isWindows && !knownHard[base]) {
+ fs.lstat(base, function(err) {
+ if (err) return cb(err);
+ knownHard[base] = true;
+ LOOP();
+ });
+ } else {
+ process.nextTick(LOOP);
+ }
+ }
+
+ // walk down the path, swapping out linked pathparts for their real
+ // values
+ function LOOP() {
+ // stop if scanned past end of path
+ if (pos >= p.length) {
+ if (cache) cache[original] = p;
+ return cb(null, p);
+ }
+
+ // find the next part
+ nextPartRe.lastIndex = pos;
+ var result = nextPartRe.exec(p);
+ previous = current;
+ current += result[0];
+ base = previous + result[1];
+ pos = nextPartRe.lastIndex;
+
+ // continue if not a symlink
+ if (knownHard[base] || (cache && cache[base] === base)) {
+ return process.nextTick(LOOP);
+ }
+
+ if (cache && Object.prototype.hasOwnProperty.call(cache, base)) {
+ // known symbolic link. no need to stat again.
+ return gotResolvedLink(cache[base]);
+ }
+
+ return fs.lstat(base, gotStat);
+ }
+
+ function gotStat(err, stat) {
+ if (err) return cb(err);
+
+ // if not a symlink, skip to the next path part
+ if (!stat.isSymbolicLink()) {
+ knownHard[base] = true;
+ if (cache) cache[base] = base;
+ return process.nextTick(LOOP);
+ }
+
+ // stat & read the link if not read before
+ // call gotTarget as soon as the link target is known
+ // dev/ino always return 0 on windows, so skip the check.
+ if (!isWindows) {
+ var id = stat.dev.toString(32) + ':' + stat.ino.toString(32);
+ if (seenLinks.hasOwnProperty(id)) {
+ return gotTarget(null, seenLinks[id], base);
+ }
+ }
+ fs.stat(base, function(err) {
+ if (err) return cb(err);
+
+ fs.readlink(base, function(err, target) {
+ if (!isWindows) seenLinks[id] = target;
+ gotTarget(err, target);
+ });
+ });
+ }
+
+ function gotTarget(err, target, base) {
+ if (err) return cb(err);
+
+ var resolvedLink = pathModule.resolve(previous, target);
+ if (cache) cache[base] = resolvedLink;
+ gotResolvedLink(resolvedLink);
+ }
+
+ function gotResolvedLink(resolvedLink) {
+ // resolve the link, then start over
+ p = pathModule.resolve(resolvedLink, p.slice(pos));
+ start();
+ }
+};
diff --git a/node_modules/fs.realpath/package.json b/node_modules/fs.realpath/package.json
new file mode 100644
index 0000000..3edc57d
--- /dev/null
+++ b/node_modules/fs.realpath/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "fs.realpath",
+ "version": "1.0.0",
+ "description": "Use node's fs.realpath, but fall back to the JS implementation if the native one fails",
+ "main": "index.js",
+ "dependencies": {},
+ "devDependencies": {},
+ "scripts": {
+ "test": "tap test/*.js --cov"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/isaacs/fs.realpath.git"
+ },
+ "keywords": [
+ "realpath",
+ "fs",
+ "polyfill"
+ ],
+ "author": "Isaac Z. Schlueter (http://blog.izs.me/)",
+ "license": "ISC",
+ "files": [
+ "old.js",
+ "index.js"
+ ]
+}
diff --git a/node_modules/function-bind/.editorconfig b/node_modules/function-bind/.editorconfig
new file mode 100644
index 0000000..ac29ade
--- /dev/null
+++ b/node_modules/function-bind/.editorconfig
@@ -0,0 +1,20 @@
+root = true
+
+[*]
+indent_style = tab
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+max_line_length = 120
+
+[CHANGELOG.md]
+indent_style = space
+indent_size = 2
+
+[*.json]
+max_line_length = off
+
+[Makefile]
+max_line_length = off
diff --git a/node_modules/function-bind/.eslintrc b/node_modules/function-bind/.eslintrc
new file mode 100644
index 0000000..9b33d8e
--- /dev/null
+++ b/node_modules/function-bind/.eslintrc
@@ -0,0 +1,15 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "func-name-matching": 0,
+ "indent": [2, 4],
+ "max-nested-callbacks": [2, 3],
+ "max-params": [2, 3],
+ "max-statements": [2, 20],
+ "no-new-func": [1],
+ "strict": [0]
+ }
+}
diff --git a/node_modules/function-bind/.jscs.json b/node_modules/function-bind/.jscs.json
new file mode 100644
index 0000000..8c44794
--- /dev/null
+++ b/node_modules/function-bind/.jscs.json
@@ -0,0 +1,176 @@
+{
+ "es3": true,
+
+ "additionalRules": [],
+
+ "requireSemicolons": true,
+
+ "disallowMultipleSpaces": true,
+
+ "disallowIdentifierNames": [],
+
+ "requireCurlyBraces": {
+ "allExcept": [],
+ "keywords": ["if", "else", "for", "while", "do", "try", "catch"]
+ },
+
+ "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"],
+
+ "disallowSpaceAfterKeywords": [],
+
+ "disallowSpaceBeforeComma": true,
+ "disallowSpaceAfterComma": false,
+ "disallowSpaceBeforeSemicolon": true,
+
+ "disallowNodeTypes": [
+ "DebuggerStatement",
+ "ForInStatement",
+ "LabeledStatement",
+ "SwitchCase",
+ "SwitchStatement",
+ "WithStatement"
+ ],
+
+ "requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] },
+
+ "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true },
+ "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true },
+ "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
+ "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true },
+ "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true },
+
+ "requireSpaceBetweenArguments": true,
+
+ "disallowSpacesInsideParentheses": true,
+
+ "disallowSpacesInsideArrayBrackets": true,
+
+ "disallowQuotedKeysInObjects": { "allExcept": ["reserved"] },
+
+ "disallowSpaceAfterObjectKeys": true,
+
+ "requireCommaBeforeLineBreak": true,
+
+ "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
+ "requireSpaceAfterPrefixUnaryOperators": [],
+
+ "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
+ "requireSpaceBeforePostfixUnaryOperators": [],
+
+ "disallowSpaceBeforeBinaryOperators": [],
+ "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
+
+ "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
+ "disallowSpaceAfterBinaryOperators": [],
+
+ "disallowImplicitTypeConversion": ["binary", "string"],
+
+ "disallowKeywords": ["with", "eval"],
+
+ "requireKeywordsOnNewLine": [],
+ "disallowKeywordsOnNewLine": ["else"],
+
+ "requireLineFeedAtFileEnd": true,
+
+ "disallowTrailingWhitespace": true,
+
+ "disallowTrailingComma": true,
+
+ "excludeFiles": ["node_modules/**", "vendor/**"],
+
+ "disallowMultipleLineStrings": true,
+
+ "requireDotNotation": { "allExcept": ["keywords"] },
+
+ "requireParenthesesAroundIIFE": true,
+
+ "validateLineBreaks": "LF",
+
+ "validateQuoteMarks": {
+ "escape": true,
+ "mark": "'"
+ },
+
+ "disallowOperatorBeforeLineBreak": [],
+
+ "requireSpaceBeforeKeywords": [
+ "do",
+ "for",
+ "if",
+ "else",
+ "switch",
+ "case",
+ "try",
+ "catch",
+ "finally",
+ "while",
+ "with",
+ "return"
+ ],
+
+ "validateAlignedFunctionParameters": {
+ "lineBreakAfterOpeningBraces": true,
+ "lineBreakBeforeClosingBraces": true
+ },
+
+ "requirePaddingNewLinesBeforeExport": true,
+
+ "validateNewlineAfterArrayElements": {
+ "maximum": 8
+ },
+
+ "requirePaddingNewLinesAfterUseStrict": true,
+
+ "disallowArrowFunctions": true,
+
+ "disallowMultiLineTernary": true,
+
+ "validateOrderInObjectKeys": "asc-insensitive",
+
+ "disallowIdenticalDestructuringNames": true,
+
+ "disallowNestedTernaries": { "maxLevel": 1 },
+
+ "requireSpaceAfterComma": { "allExcept": ["trailing"] },
+ "requireAlignedMultilineParams": false,
+
+ "requireSpacesInGenerator": {
+ "afterStar": true
+ },
+
+ "disallowSpacesInGenerator": {
+ "beforeStar": true
+ },
+
+ "disallowVar": false,
+
+ "requireArrayDestructuring": false,
+
+ "requireEnhancedObjectLiterals": false,
+
+ "requireObjectDestructuring": false,
+
+ "requireEarlyReturn": false,
+
+ "requireCapitalizedConstructorsNew": {
+ "allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"]
+ },
+
+ "requireImportAlphabetized": false,
+
+ "requireSpaceBeforeObjectValues": true,
+ "requireSpaceBeforeDestructuredValues": true,
+
+ "disallowSpacesInsideTemplateStringPlaceholders": true,
+
+ "disallowArrayDestructuringReturn": false,
+
+ "requireNewlineBeforeSingleStatementsInIf": false,
+
+ "disallowUnusedVariables": true,
+
+ "requireSpacesInsideImportedObjectBraces": true,
+
+ "requireUseStrict": true
+}
+
diff --git a/node_modules/function-bind/.npmignore b/node_modules/function-bind/.npmignore
new file mode 100644
index 0000000..dbb555f
--- /dev/null
+++ b/node_modules/function-bind/.npmignore
@@ -0,0 +1,22 @@
+# gitignore
+.DS_Store
+.monitor
+.*.swp
+.nodemonignore
+releases
+*.log
+*.err
+fleet.json
+public/browserify
+bin/*.json
+.bin
+build
+compile
+.lock-wscript
+coverage
+node_modules
+
+# Only apps should have lockfiles
+npm-shrinkwrap.json
+package-lock.json
+yarn.lock
diff --git a/node_modules/function-bind/.travis.yml b/node_modules/function-bind/.travis.yml
new file mode 100644
index 0000000..85f70d2
--- /dev/null
+++ b/node_modules/function-bind/.travis.yml
@@ -0,0 +1,168 @@
+language: node_js
+os:
+ - linux
+node_js:
+ - "8.4"
+ - "7.10"
+ - "6.11"
+ - "5.12"
+ - "4.8"
+ - "iojs-v3.3"
+ - "iojs-v2.5"
+ - "iojs-v1.8"
+ - "0.12"
+ - "0.10"
+ - "0.8"
+before_install:
+ - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then npm install -g npm@1.3 ; elif [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then case "$(npm --version)" in 1.*) npm install -g npm@1.4.28 ;; 2.*) npm install -g npm@2 ;; esac ; fi'
+ - 'if [ "${TRAVIS_NODE_VERSION}" != "0.6" ] && [ "${TRAVIS_NODE_VERSION}" != "0.9" ]; then if [ "${TRAVIS_NODE_VERSION%${TRAVIS_NODE_VERSION#[0-9]}}" = "0" ] || [ "${TRAVIS_NODE_VERSION:0:4}" = "iojs" ]; then npm install -g npm@4.5 ; else npm install -g npm; fi; fi'
+install:
+ - 'if [ "${TRAVIS_NODE_VERSION}" = "0.6" ]; then nvm install 0.8 && npm install -g npm@1.3 && npm install -g npm@1.4.28 && npm install -g npm@2 && npm install && nvm use "${TRAVIS_NODE_VERSION}"; else npm install; fi;'
+script:
+ - 'if [ -n "${PRETEST-}" ]; then npm run pretest ; fi'
+ - 'if [ -n "${POSTTEST-}" ]; then npm run posttest ; fi'
+ - 'if [ -n "${COVERAGE-}" ]; then npm run coverage ; fi'
+ - 'if [ -n "${TEST-}" ]; then npm run tests-only ; fi'
+sudo: false
+env:
+ - TEST=true
+matrix:
+ fast_finish: true
+ include:
+ - node_js: "node"
+ env: PRETEST=true
+ - node_js: "4"
+ env: COVERAGE=true
+ - node_js: "8.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "8.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "7.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.10"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "6.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.11"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.10"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.8"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "5.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "4.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v3.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v3.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v3.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v2.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.7"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.5"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.4"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.3"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.2"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.1"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "iojs-v1.0"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.11"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.9"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.6"
+ env: TEST=true ALLOW_FAILURE=true
+ - node_js: "0.4"
+ env: TEST=true ALLOW_FAILURE=true
+ allow_failures:
+ - os: osx
+ - env: TEST=true ALLOW_FAILURE=true
diff --git a/node_modules/function-bind/LICENSE b/node_modules/function-bind/LICENSE
new file mode 100644
index 0000000..62d6d23
--- /dev/null
+++ b/node_modules/function-bind/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2013 Raynos.
+
+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/node_modules/function-bind/README.md b/node_modules/function-bind/README.md
new file mode 100644
index 0000000..81862a0
--- /dev/null
+++ b/node_modules/function-bind/README.md
@@ -0,0 +1,48 @@
+# function-bind
+
+
+
+
+
+Implementation of function.prototype.bind
+
+## Example
+
+I mainly do this for unit tests I run on phantomjs.
+PhantomJS does not have Function.prototype.bind :(
+
+```js
+Function.prototype.bind = require("function-bind")
+```
+
+## Installation
+
+`npm install function-bind`
+
+## Contributors
+
+ - Raynos
+
+## MIT Licenced
+
+ [travis-svg]: https://travis-ci.org/Raynos/function-bind.svg
+ [travis-url]: https://travis-ci.org/Raynos/function-bind
+ [npm-badge-svg]: https://badge.fury.io/js/function-bind.svg
+ [npm-url]: https://npmjs.org/package/function-bind
+ [5]: https://coveralls.io/repos/Raynos/function-bind/badge.png
+ [6]: https://coveralls.io/r/Raynos/function-bind
+ [7]: https://gemnasium.com/Raynos/function-bind.png
+ [8]: https://gemnasium.com/Raynos/function-bind
+ [deps-svg]: https://david-dm.org/Raynos/function-bind.svg
+ [deps-url]: https://david-dm.org/Raynos/function-bind
+ [dev-deps-svg]: https://david-dm.org/Raynos/function-bind/dev-status.svg
+ [dev-deps-url]: https://david-dm.org/Raynos/function-bind#info=devDependencies
+ [11]: https://ci.testling.com/Raynos/function-bind.png
+ [12]: https://ci.testling.com/Raynos/function-bind
diff --git a/node_modules/function-bind/implementation.js b/node_modules/function-bind/implementation.js
new file mode 100644
index 0000000..cc4daec
--- /dev/null
+++ b/node_modules/function-bind/implementation.js
@@ -0,0 +1,52 @@
+'use strict';
+
+/* eslint no-invalid-this: 1 */
+
+var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
+var slice = Array.prototype.slice;
+var toStr = Object.prototype.toString;
+var funcType = '[object Function]';
+
+module.exports = function bind(that) {
+ var target = this;
+ if (typeof target !== 'function' || toStr.call(target) !== funcType) {
+ throw new TypeError(ERROR_MESSAGE + target);
+ }
+ var args = slice.call(arguments, 1);
+
+ var bound;
+ var binder = function () {
+ if (this instanceof bound) {
+ var result = target.apply(
+ this,
+ args.concat(slice.call(arguments))
+ );
+ if (Object(result) === result) {
+ return result;
+ }
+ return this;
+ } else {
+ return target.apply(
+ that,
+ args.concat(slice.call(arguments))
+ );
+ }
+ };
+
+ var boundLength = Math.max(0, target.length - args.length);
+ var boundArgs = [];
+ for (var i = 0; i < boundLength; i++) {
+ boundArgs.push('$' + i);
+ }
+
+ bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);
+
+ if (target.prototype) {
+ var Empty = function Empty() {};
+ Empty.prototype = target.prototype;
+ bound.prototype = new Empty();
+ Empty.prototype = null;
+ }
+
+ return bound;
+};
diff --git a/node_modules/function-bind/index.js b/node_modules/function-bind/index.js
new file mode 100644
index 0000000..3bb6b96
--- /dev/null
+++ b/node_modules/function-bind/index.js
@@ -0,0 +1,5 @@
+'use strict';
+
+var implementation = require('./implementation');
+
+module.exports = Function.prototype.bind || implementation;
diff --git a/node_modules/function-bind/package.json b/node_modules/function-bind/package.json
new file mode 100644
index 0000000..20a1727
--- /dev/null
+++ b/node_modules/function-bind/package.json
@@ -0,0 +1,63 @@
+{
+ "name": "function-bind",
+ "version": "1.1.1",
+ "description": "Implementation of Function.prototype.bind",
+ "keywords": [
+ "function",
+ "bind",
+ "shim",
+ "es5"
+ ],
+ "author": "Raynos ",
+ "repository": "git://github.com/Raynos/function-bind.git",
+ "main": "index",
+ "homepage": "https://github.com/Raynos/function-bind",
+ "contributors": [
+ {
+ "name": "Raynos"
+ },
+ {
+ "name": "Jordan Harband",
+ "url": "https://github.com/ljharb"
+ }
+ ],
+ "bugs": {
+ "url": "https://github.com/Raynos/function-bind/issues",
+ "email": "raynos2@gmail.com"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "@ljharb/eslint-config": "^12.2.1",
+ "covert": "^1.1.0",
+ "eslint": "^4.5.0",
+ "jscs": "^3.0.7",
+ "tape": "^4.8.0"
+ },
+ "license": "MIT",
+ "scripts": {
+ "pretest": "npm run lint",
+ "test": "npm run tests-only",
+ "posttest": "npm run coverage -- --quiet",
+ "tests-only": "node test",
+ "coverage": "covert test/*.js",
+ "lint": "npm run jscs && npm run eslint",
+ "jscs": "jscs *.js */*.js",
+ "eslint": "eslint *.js */*.js"
+ },
+ "testling": {
+ "files": "test/index.js",
+ "browsers": [
+ "ie/8..latest",
+ "firefox/16..latest",
+ "firefox/nightly",
+ "chrome/22..latest",
+ "chrome/canary",
+ "opera/12..latest",
+ "opera/next",
+ "safari/5.1..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2..latest"
+ ]
+ }
+}
diff --git a/node_modules/function-bind/test/.eslintrc b/node_modules/function-bind/test/.eslintrc
new file mode 100644
index 0000000..8a56d5b
--- /dev/null
+++ b/node_modules/function-bind/test/.eslintrc
@@ -0,0 +1,9 @@
+{
+ "rules": {
+ "array-bracket-newline": 0,
+ "array-element-newline": 0,
+ "max-statements-per-line": [2, { "max": 2 }],
+ "no-invalid-this": 0,
+ "no-magic-numbers": 0,
+ }
+}
diff --git a/node_modules/function-bind/test/index.js b/node_modules/function-bind/test/index.js
new file mode 100644
index 0000000..2edecce
--- /dev/null
+++ b/node_modules/function-bind/test/index.js
@@ -0,0 +1,252 @@
+// jscs:disable requireUseStrict
+
+var test = require('tape');
+
+var functionBind = require('../implementation');
+var getCurrentContext = function () { return this; };
+
+test('functionBind is a function', function (t) {
+ t.equal(typeof functionBind, 'function');
+ t.end();
+});
+
+test('non-functions', function (t) {
+ var nonFunctions = [true, false, [], {}, 42, 'foo', NaN, /a/g];
+ t.plan(nonFunctions.length);
+ for (var i = 0; i < nonFunctions.length; ++i) {
+ try { functionBind.call(nonFunctions[i]); } catch (ex) {
+ t.ok(ex instanceof TypeError, 'throws when given ' + String(nonFunctions[i]));
+ }
+ }
+ t.end();
+});
+
+test('without a context', function (t) {
+ t.test('binds properly', function (st) {
+ var args, context;
+ var namespace = {
+ func: functionBind.call(function () {
+ args = Array.prototype.slice.call(arguments);
+ context = this;
+ })
+ };
+ namespace.func(1, 2, 3);
+ st.deepEqual(args, [1, 2, 3]);
+ st.equal(context, getCurrentContext.call());
+ st.end();
+ });
+
+ t.test('binds properly, and still supplies bound arguments', function (st) {
+ var args, context;
+ var namespace = {
+ func: functionBind.call(function () {
+ args = Array.prototype.slice.call(arguments);
+ context = this;
+ }, undefined, 1, 2, 3)
+ };
+ namespace.func(4, 5, 6);
+ st.deepEqual(args, [1, 2, 3, 4, 5, 6]);
+ st.equal(context, getCurrentContext.call());
+ st.end();
+ });
+
+ t.test('returns properly', function (st) {
+ var args;
+ var namespace = {
+ func: functionBind.call(function () {
+ args = Array.prototype.slice.call(arguments);
+ return this;
+ }, null)
+ };
+ var context = namespace.func(1, 2, 3);
+ st.equal(context, getCurrentContext.call(), 'returned context is namespaced context');
+ st.deepEqual(args, [1, 2, 3], 'passed arguments are correct');
+ st.end();
+ });
+
+ t.test('returns properly with bound arguments', function (st) {
+ var args;
+ var namespace = {
+ func: functionBind.call(function () {
+ args = Array.prototype.slice.call(arguments);
+ return this;
+ }, null, 1, 2, 3)
+ };
+ var context = namespace.func(4, 5, 6);
+ st.equal(context, getCurrentContext.call(), 'returned context is namespaced context');
+ st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'passed arguments are correct');
+ st.end();
+ });
+
+ t.test('called as a constructor', function (st) {
+ var thunkify = function (value) {
+ return function () { return value; };
+ };
+ st.test('returns object value', function (sst) {
+ var expectedReturnValue = [1, 2, 3];
+ var Constructor = functionBind.call(thunkify(expectedReturnValue), null);
+ var result = new Constructor();
+ sst.equal(result, expectedReturnValue);
+ sst.end();
+ });
+
+ st.test('does not return primitive value', function (sst) {
+ var Constructor = functionBind.call(thunkify(42), null);
+ var result = new Constructor();
+ sst.notEqual(result, 42);
+ sst.end();
+ });
+
+ st.test('object from bound constructor is instance of original and bound constructor', function (sst) {
+ var A = function (x) {
+ this.name = x || 'A';
+ };
+ var B = functionBind.call(A, null, 'B');
+
+ var result = new B();
+ sst.ok(result instanceof B, 'result is instance of bound constructor');
+ sst.ok(result instanceof A, 'result is instance of original constructor');
+ sst.end();
+ });
+
+ st.end();
+ });
+
+ t.end();
+});
+
+test('with a context', function (t) {
+ t.test('with no bound arguments', function (st) {
+ var args, context;
+ var boundContext = {};
+ var namespace = {
+ func: functionBind.call(function () {
+ args = Array.prototype.slice.call(arguments);
+ context = this;
+ }, boundContext)
+ };
+ namespace.func(1, 2, 3);
+ st.equal(context, boundContext, 'binds a context properly');
+ st.deepEqual(args, [1, 2, 3], 'supplies passed arguments');
+ st.end();
+ });
+
+ t.test('with bound arguments', function (st) {
+ var args, context;
+ var boundContext = {};
+ var namespace = {
+ func: functionBind.call(function () {
+ args = Array.prototype.slice.call(arguments);
+ context = this;
+ }, boundContext, 1, 2, 3)
+ };
+ namespace.func(4, 5, 6);
+ st.equal(context, boundContext, 'binds a context properly');
+ st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'supplies bound and passed arguments');
+ st.end();
+ });
+
+ t.test('returns properly', function (st) {
+ var boundContext = {};
+ var args;
+ var namespace = {
+ func: functionBind.call(function () {
+ args = Array.prototype.slice.call(arguments);
+ return this;
+ }, boundContext)
+ };
+ var context = namespace.func(1, 2, 3);
+ st.equal(context, boundContext, 'returned context is bound context');
+ st.notEqual(context, getCurrentContext.call(), 'returned context is not lexical context');
+ st.deepEqual(args, [1, 2, 3], 'passed arguments are correct');
+ st.end();
+ });
+
+ t.test('returns properly with bound arguments', function (st) {
+ var boundContext = {};
+ var args;
+ var namespace = {
+ func: functionBind.call(function () {
+ args = Array.prototype.slice.call(arguments);
+ return this;
+ }, boundContext, 1, 2, 3)
+ };
+ var context = namespace.func(4, 5, 6);
+ st.equal(context, boundContext, 'returned context is bound context');
+ st.notEqual(context, getCurrentContext.call(), 'returned context is not lexical context');
+ st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'passed arguments are correct');
+ st.end();
+ });
+
+ t.test('passes the correct arguments when called as a constructor', function (st) {
+ var expected = { name: 'Correct' };
+ var namespace = {
+ Func: functionBind.call(function (arg) {
+ return arg;
+ }, { name: 'Incorrect' })
+ };
+ var returned = new namespace.Func(expected);
+ st.equal(returned, expected, 'returns the right arg when called as a constructor');
+ st.end();
+ });
+
+ t.test('has the new instance\'s context when called as a constructor', function (st) {
+ var actualContext;
+ var expectedContext = { foo: 'bar' };
+ var namespace = {
+ Func: functionBind.call(function () {
+ actualContext = this;
+ }, expectedContext)
+ };
+ var result = new namespace.Func();
+ st.equal(result instanceof namespace.Func, true);
+ st.notEqual(actualContext, expectedContext);
+ st.end();
+ });
+
+ t.end();
+});
+
+test('bound function length', function (t) {
+ t.test('sets a correct length without thisArg', function (st) {
+ var subject = functionBind.call(function (a, b, c) { return a + b + c; });
+ st.equal(subject.length, 3);
+ st.equal(subject(1, 2, 3), 6);
+ st.end();
+ });
+
+ t.test('sets a correct length with thisArg', function (st) {
+ var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {});
+ st.equal(subject.length, 3);
+ st.equal(subject(1, 2, 3), 6);
+ st.end();
+ });
+
+ t.test('sets a correct length without thisArg and first argument', function (st) {
+ var subject = functionBind.call(function (a, b, c) { return a + b + c; }, undefined, 1);
+ st.equal(subject.length, 2);
+ st.equal(subject(2, 3), 6);
+ st.end();
+ });
+
+ t.test('sets a correct length with thisArg and first argument', function (st) {
+ var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {}, 1);
+ st.equal(subject.length, 2);
+ st.equal(subject(2, 3), 6);
+ st.end();
+ });
+
+ t.test('sets a correct length without thisArg and too many arguments', function (st) {
+ var subject = functionBind.call(function (a, b, c) { return a + b + c; }, undefined, 1, 2, 3, 4);
+ st.equal(subject.length, 0);
+ st.equal(subject(), 6);
+ st.end();
+ });
+
+ t.test('sets a correct length with thisArg and too many arguments', function (st) {
+ var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {}, 1, 2, 3, 4);
+ st.equal(subject.length, 0);
+ st.equal(subject(), 6);
+ st.end();
+ });
+});
diff --git a/node_modules/get-caller-file/LICENSE.md b/node_modules/get-caller-file/LICENSE.md
new file mode 100644
index 0000000..bf3e1c0
--- /dev/null
+++ b/node_modules/get-caller-file/LICENSE.md
@@ -0,0 +1,6 @@
+ISC License (ISC)
+Copyright 2018 Stefan Penner
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/get-caller-file/README.md b/node_modules/get-caller-file/README.md
new file mode 100644
index 0000000..1944927
--- /dev/null
+++ b/node_modules/get-caller-file/README.md
@@ -0,0 +1,4 @@
+# get-caller-file
+
+[![Build Status](https://travis-ci.org/stefanpenner/get-caller-file.svg?branch=master)](https://travis-ci.org/stefanpenner/get-caller-file)
+[![Build status](https://ci.appveyor.com/api/projects/status/ol2q94g1932cy14a/branch/master?svg=true)](https://ci.appveyor.com/project/embercli/get-caller-file/branch/master)
diff --git a/node_modules/get-caller-file/index.js b/node_modules/get-caller-file/index.js
new file mode 100644
index 0000000..03e7dfc
--- /dev/null
+++ b/node_modules/get-caller-file/index.js
@@ -0,0 +1,20 @@
+'use strict';
+
+// Call this function in a another function to find out the file from
+// which that function was called from. (Inspects the v8 stack trace)
+//
+// Inspired by http://stackoverflow.com/questions/13227489
+
+module.exports = function getCallerFile(_position) {
+ var oldPrepareStackTrace = Error.prepareStackTrace;
+ Error.prepareStackTrace = function(err, stack) { return stack; };
+ var stack = new Error().stack;
+ Error.prepareStackTrace = oldPrepareStackTrace;
+
+ var position = _position ? _position : 2;
+
+ // stack[0] holds this file
+ // stack[1] holds where this function was called
+ // stack[2] holds the file we're interested in
+ return stack[position] ? stack[position].getFileName() : undefined;
+};
diff --git a/node_modules/get-caller-file/package.json b/node_modules/get-caller-file/package.json
new file mode 100644
index 0000000..eb121a6
--- /dev/null
+++ b/node_modules/get-caller-file/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "get-caller-file",
+ "version": "1.0.3",
+ "description": "",
+ "main": "index.js",
+ "directories": {
+ "test": "tests"
+ },
+ "files": [
+ "index.js"
+ ],
+ "scripts": {
+ "test": "mocha test",
+ "test:debug": "mocha test"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/stefanpenner/get-caller-file.git"
+ },
+ "author": "Stefan Penner",
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/stefanpenner/get-caller-file/issues"
+ },
+ "homepage": "https://github.com/stefanpenner/get-caller-file#readme",
+ "devDependencies": {
+ "chai": "^4.1.2",
+ "ensure-posix-path": "^1.0.1",
+ "mocha": "^5.2.0"
+ }
+}
diff --git a/node_modules/get-intrinsic/.eslintrc b/node_modules/get-intrinsic/.eslintrc
new file mode 100644
index 0000000..0ab0876
--- /dev/null
+++ b/node_modules/get-intrinsic/.eslintrc
@@ -0,0 +1,37 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "env": {
+ "es6": true,
+ "es2017": true,
+ "es2020": true,
+ "es2021": true,
+ "es2022": true,
+ },
+
+ "rules": {
+ "array-bracket-newline": 0,
+ "complexity": 0,
+ "eqeqeq": [2, "allow-null"],
+ "func-name-matching": 0,
+ "id-length": 0,
+ "max-lines-per-function": [2, 90],
+ "max-params": [2, 4],
+ "max-statements": 0,
+ "max-statements-per-line": [2, { "max": 2 }],
+ "multiline-comment-style": 0,
+ "no-magic-numbers": 0,
+ "sort-keys": 0,
+ },
+
+ "overrides": [
+ {
+ "files": "test/**",
+ "rules": {
+ "new-cap": 0,
+ },
+ },
+ ],
+}
diff --git a/node_modules/get-intrinsic/.github/FUNDING.yml b/node_modules/get-intrinsic/.github/FUNDING.yml
new file mode 100644
index 0000000..8e8da0d
--- /dev/null
+++ b/node_modules/get-intrinsic/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/get-intrinsic
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/get-intrinsic/.nycrc b/node_modules/get-intrinsic/.nycrc
new file mode 100644
index 0000000..bdd626c
--- /dev/null
+++ b/node_modules/get-intrinsic/.nycrc
@@ -0,0 +1,9 @@
+{
+ "all": true,
+ "check-coverage": false,
+ "reporter": ["text-summary", "text", "html", "json"],
+ "exclude": [
+ "coverage",
+ "test"
+ ]
+}
diff --git a/node_modules/get-intrinsic/CHANGELOG.md b/node_modules/get-intrinsic/CHANGELOG.md
new file mode 100644
index 0000000..1bb52d3
--- /dev/null
+++ b/node_modules/get-intrinsic/CHANGELOG.md
@@ -0,0 +1,98 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [v1.1.3](https://github.com/ljharb/get-intrinsic/compare/v1.1.2...v1.1.3) - 2022-09-12
+
+### Commits
+
+- [Dev Deps] update `es-abstract`, `es-value-fixtures`, `tape` [`07ff291`](https://github.com/ljharb/get-intrinsic/commit/07ff291816406ebe5a12d7f16965bde0942dd688)
+- [Fix] properly check for % signs [`50ac176`](https://github.com/ljharb/get-intrinsic/commit/50ac1760fe99c227e64eabde76e9c0e44cd881b5)
+
+## [v1.1.2](https://github.com/ljharb/get-intrinsic/compare/v1.1.1...v1.1.2) - 2022-06-08
+
+### Fixed
+
+- [Fix] properly validate against extra % signs [`#16`](https://github.com/ljharb/get-intrinsic/issues/16)
+
+### Commits
+
+- [actions] reuse common workflows [`0972547`](https://github.com/ljharb/get-intrinsic/commit/0972547efd0abc863fe4c445a6ca7eb4f8c6901d)
+- [meta] use `npmignore` to autogenerate an npmignore file [`5ba0b51`](https://github.com/ljharb/get-intrinsic/commit/5ba0b51d8d8d4f1c31d426d74abc0770fd106bad)
+- [actions] use `node/install` instead of `node/run`; use `codecov` action [`c364492`](https://github.com/ljharb/get-intrinsic/commit/c364492af4af51333e6f81c0bf21fd3d602c3661)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `es-abstract`, `object-inspect`, `tape` [`dc04dad`](https://github.com/ljharb/get-intrinsic/commit/dc04dad86f6e5608775a2640cb0db5927ae29ed9)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `es-abstract`, `object-inspect`, `safe-publish-latest`, `tape` [`1c14059`](https://github.com/ljharb/get-intrinsic/commit/1c1405984e86dd2dc9366c15d8a0294a96a146a5)
+- [Tests] use `mock-property` [`b396ef0`](https://github.com/ljharb/get-intrinsic/commit/b396ef05bb73b1d699811abd64b0d9b97997fdda)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `object-inspect`, `tape` [`c2c758d`](https://github.com/ljharb/get-intrinsic/commit/c2c758d3b90af4fef0a76910d8d3c292ec8d1d3e)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `es-abstract`, `es-value-fixtures`, `object-inspect`, `tape` [`29e3c09`](https://github.com/ljharb/get-intrinsic/commit/29e3c091c2bf3e17099969847e8729d0e46896de)
+- [actions] update codecov uploader [`8cbc141`](https://github.com/ljharb/get-intrinsic/commit/8cbc1418940d7a8941f3a7985cbc4ac095c5e13d)
+- [Dev Deps] update `@ljharb/eslint-config`, `es-abstract`, `es-value-fixtures`, `object-inspect`, `tape` [`10b6f5c`](https://github.com/ljharb/get-intrinsic/commit/10b6f5c02593fb3680c581d696ac124e30652932)
+- [readme] add github actions/codecov badges [`4e25400`](https://github.com/ljharb/get-intrinsic/commit/4e25400d9f51ae9eb059cbe22d9144e70ea214e8)
+- [Tests] use `for-each` instead of `foreach` [`c05b957`](https://github.com/ljharb/get-intrinsic/commit/c05b957ad9a7bc7721af7cc9e9be1edbfe057496)
+- [Dev Deps] update `es-abstract` [`29b05ae`](https://github.com/ljharb/get-intrinsic/commit/29b05aec3e7330e9ad0b8e0f685a9112c20cdd97)
+- [meta] use `prepublishOnly` script for npm 7+ [`95c285d`](https://github.com/ljharb/get-intrinsic/commit/95c285da810516057d3bbfa871176031af38f05d)
+- [Deps] update `has-symbols` [`593cb4f`](https://github.com/ljharb/get-intrinsic/commit/593cb4fb38e7922e40e42c183f45274b636424cd)
+- [readme] fix repo URLs [`1c8305b`](https://github.com/ljharb/get-intrinsic/commit/1c8305b5365827c9b6fc785434aac0e1328ff2f5)
+- [Deps] update `has-symbols` [`c7138b6`](https://github.com/ljharb/get-intrinsic/commit/c7138b6c6d73132d859471fb8c13304e1e7c8b20)
+- [Dev Deps] remove unused `has-bigints` [`bd63aff`](https://github.com/ljharb/get-intrinsic/commit/bd63aff6ad8f3a986c557fcda2914187bdaab359)
+
+## [v1.1.1](https://github.com/ljharb/get-intrinsic/compare/v1.1.0...v1.1.1) - 2021-02-03
+
+### Fixed
+
+- [meta] export `./package.json` [`#9`](https://github.com/ljharb/get-intrinsic/issues/9)
+
+### Commits
+
+- [readme] flesh out the readme; use `evalmd` [`d12f12c`](https://github.com/ljharb/get-intrinsic/commit/d12f12c15345a0a0772cc65a7c64369529abd614)
+- [eslint] set up proper globals config [`5a8c098`](https://github.com/ljharb/get-intrinsic/commit/5a8c0984e3319d1ac0e64b102f8ec18b64e79f36)
+- [Dev Deps] update `eslint` [`7b9a5c0`](https://github.com/ljharb/get-intrinsic/commit/7b9a5c0d31a90ca1a1234181c74988fb046701cd)
+
+## [v1.1.0](https://github.com/ljharb/get-intrinsic/compare/v1.0.2...v1.1.0) - 2021-01-25
+
+### Fixed
+
+- [Refactor] delay `Function` eval until syntax-derived values are requested [`#3`](https://github.com/ljharb/get-intrinsic/issues/3)
+
+### Commits
+
+- [Tests] migrate tests to Github Actions [`2ab762b`](https://github.com/ljharb/get-intrinsic/commit/2ab762b48164aea8af37a40ba105bbc8246ab8c4)
+- [meta] do not publish github action workflow files [`5e7108e`](https://github.com/ljharb/get-intrinsic/commit/5e7108e4768b244d48d9567ba4f8a6cab9c65b8e)
+- [Tests] add some coverage [`01ac7a8`](https://github.com/ljharb/get-intrinsic/commit/01ac7a87ac29738567e8524cd8c9e026b1fa8cb3)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `call-bind`, `es-abstract`, `tape`; add `call-bind` [`911b672`](https://github.com/ljharb/get-intrinsic/commit/911b672fbffae433a96924c6ce013585e425f4b7)
+- [Refactor] rearrange evalled constructors a bit [`7e7e4bf`](https://github.com/ljharb/get-intrinsic/commit/7e7e4bf583f3799c8ac1c6c5e10d2cb553957347)
+- [meta] add Automatic Rebase and Require Allow Edits workflows [`0199968`](https://github.com/ljharb/get-intrinsic/commit/01999687a263ffce0a3cb011dfbcb761754aedbc)
+
+## [v1.0.2](https://github.com/ljharb/get-intrinsic/compare/v1.0.1...v1.0.2) - 2020-12-17
+
+### Commits
+
+- [Fix] Throw for non‑existent intrinsics [`68f873b`](https://github.com/ljharb/get-intrinsic/commit/68f873b013c732a05ad6f5fc54f697e55515461b)
+- [Fix] Throw for non‑existent segments in the intrinsic path [`8325dee`](https://github.com/ljharb/get-intrinsic/commit/8325deee43128f3654d3399aa9591741ebe17b21)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `has-bigints`, `object-inspect` [`0c227a7`](https://github.com/ljharb/get-intrinsic/commit/0c227a7d8b629166f25715fd242553892e458525)
+- [meta] do not lint coverage output [`70d2419`](https://github.com/ljharb/get-intrinsic/commit/70d24199b620043cd9110fc5f426d214ebe21dc9)
+
+## [v1.0.1](https://github.com/ljharb/get-intrinsic/compare/v1.0.0...v1.0.1) - 2020-10-30
+
+### Commits
+
+- [Tests] gather coverage data on every job [`d1d280d`](https://github.com/ljharb/get-intrinsic/commit/d1d280dec714e3f0519cc877dbcb193057d9cac6)
+- [Fix] add missing dependencies [`5031771`](https://github.com/ljharb/get-intrinsic/commit/5031771bb1095b38be88ce7c41d5de88718e432e)
+- [Tests] use `es-value-fixtures` [`af48765`](https://github.com/ljharb/get-intrinsic/commit/af48765a23c5323fb0b6b38dbf00eb5099c7bebc)
+
+## v1.0.0 - 2020-10-29
+
+### Commits
+
+- Implementation [`bbce57c`](https://github.com/ljharb/get-intrinsic/commit/bbce57c6f33d05b2d8d3efa273ceeb3ee01127bb)
+- Tests [`17b4f0d`](https://github.com/ljharb/get-intrinsic/commit/17b4f0d56dea6b4059b56fc30ef3ee4d9500ebc2)
+- Initial commit [`3153294`](https://github.com/ljharb/get-intrinsic/commit/31532948de363b0a27dd9fd4649e7b7028ec4b44)
+- npm init [`fb326c4`](https://github.com/ljharb/get-intrinsic/commit/fb326c4d2817c8419ec31de1295f06bb268a7902)
+- [meta] add Automatic Rebase and Require Allow Edits workflows [`48862fb`](https://github.com/ljharb/get-intrinsic/commit/48862fb2508c8f6a57968e6d08b7c883afc9d550)
+- [meta] add `auto-changelog` [`5f28ad0`](https://github.com/ljharb/get-intrinsic/commit/5f28ad019e060a353d8028f9f2591a9cc93074a1)
+- [meta] add "funding"; create `FUNDING.yml` [`c2bbdde`](https://github.com/ljharb/get-intrinsic/commit/c2bbddeba73a875be61484ee4680b129a6d4e0a1)
+- [Tests] add `npm run lint` [`0a84b98`](https://github.com/ljharb/get-intrinsic/commit/0a84b98b22b7cf7a748666f705b0003a493c35fd)
+- Only apps should have lockfiles [`9586c75`](https://github.com/ljharb/get-intrinsic/commit/9586c75866c1ee678e4d5d4dbbdef6997e511b05)
diff --git a/node_modules/get-intrinsic/LICENSE b/node_modules/get-intrinsic/LICENSE
new file mode 100644
index 0000000..48f05d0
--- /dev/null
+++ b/node_modules/get-intrinsic/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Jordan Harband
+
+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/node_modules/get-intrinsic/README.md b/node_modules/get-intrinsic/README.md
new file mode 100644
index 0000000..3aa0bba
--- /dev/null
+++ b/node_modules/get-intrinsic/README.md
@@ -0,0 +1,71 @@
+# get-intrinsic [![Version Badge][npm-version-svg]][package-url]
+
+[![github actions][actions-image]][actions-url]
+[![coverage][codecov-image]][codecov-url]
+[![dependency status][deps-svg]][deps-url]
+[![dev dependency status][dev-deps-svg]][dev-deps-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][npm-badge-png]][package-url]
+
+Get and robustly cache all JS language-level intrinsics at first require time.
+
+See the syntax described [in the JS spec](https://tc39.es/ecma262/#sec-well-known-intrinsic-objects) for reference.
+
+## Example
+
+```js
+var GetIntrinsic = require('get-intrinsic');
+var assert = require('assert');
+
+// static methods
+assert.equal(GetIntrinsic('%Math.pow%'), Math.pow);
+assert.equal(Math.pow(2, 3), 8);
+assert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);
+delete Math.pow;
+assert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8);
+
+// instance methods
+var arr = [1];
+assert.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push);
+assert.deepEqual(arr, [1]);
+
+arr.push(2);
+assert.deepEqual(arr, [1, 2]);
+
+GetIntrinsic('%Array.prototype.push%').call(arr, 3);
+assert.deepEqual(arr, [1, 2, 3]);
+
+delete Array.prototype.push;
+GetIntrinsic('%Array.prototype.push%').call(arr, 4);
+assert.deepEqual(arr, [1, 2, 3, 4]);
+
+// missing features
+delete JSON.parse; // to simulate a real intrinsic that is missing in the environment
+assert.throws(() => GetIntrinsic('%JSON.parse%'));
+assert.equal(undefined, GetIntrinsic('%JSON.parse%', true));
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+## Security
+
+Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report.
+
+[package-url]: https://npmjs.org/package/get-intrinsic
+[npm-version-svg]: https://versionbadg.es/ljharb/get-intrinsic.svg
+[deps-svg]: https://david-dm.org/ljharb/get-intrinsic.svg
+[deps-url]: https://david-dm.org/ljharb/get-intrinsic
+[dev-deps-svg]: https://david-dm.org/ljharb/get-intrinsic/dev-status.svg
+[dev-deps-url]: https://david-dm.org/ljharb/get-intrinsic#info=devDependencies
+[npm-badge-png]: https://nodei.co/npm/get-intrinsic.png?downloads=true&stars=true
+[license-image]: https://img.shields.io/npm/l/get-intrinsic.svg
+[license-url]: LICENSE
+[downloads-image]: https://img.shields.io/npm/dm/get-intrinsic.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=get-intrinsic
+[codecov-image]: https://codecov.io/gh/ljharb/get-intrinsic/branch/main/graphs/badge.svg
+[codecov-url]: https://app.codecov.io/gh/ljharb/get-intrinsic/
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/get-intrinsic
+[actions-url]: https://github.com/ljharb/get-intrinsic/actions
diff --git a/node_modules/get-intrinsic/index.js b/node_modules/get-intrinsic/index.js
new file mode 100644
index 0000000..3c3d93e
--- /dev/null
+++ b/node_modules/get-intrinsic/index.js
@@ -0,0 +1,334 @@
+'use strict';
+
+var undefined;
+
+var $SyntaxError = SyntaxError;
+var $Function = Function;
+var $TypeError = TypeError;
+
+// eslint-disable-next-line consistent-return
+var getEvalledConstructor = function (expressionSyntax) {
+ try {
+ return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')();
+ } catch (e) {}
+};
+
+var $gOPD = Object.getOwnPropertyDescriptor;
+if ($gOPD) {
+ try {
+ $gOPD({}, '');
+ } catch (e) {
+ $gOPD = null; // this is IE 8, which has a broken gOPD
+ }
+}
+
+var throwTypeError = function () {
+ throw new $TypeError();
+};
+var ThrowTypeError = $gOPD
+ ? (function () {
+ try {
+ // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
+ arguments.callee; // IE 8 does not throw here
+ return throwTypeError;
+ } catch (calleeThrows) {
+ try {
+ // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
+ return $gOPD(arguments, 'callee').get;
+ } catch (gOPDthrows) {
+ return throwTypeError;
+ }
+ }
+ }())
+ : throwTypeError;
+
+var hasSymbols = require('has-symbols')();
+
+var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto
+
+var needsEval = {};
+
+var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);
+
+var INTRINSICS = {
+ '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,
+ '%Array%': Array,
+ '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,
+ '%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,
+ '%AsyncFromSyncIteratorPrototype%': undefined,
+ '%AsyncFunction%': needsEval,
+ '%AsyncGenerator%': needsEval,
+ '%AsyncGeneratorFunction%': needsEval,
+ '%AsyncIteratorPrototype%': needsEval,
+ '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,
+ '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,
+ '%Boolean%': Boolean,
+ '%DataView%': typeof DataView === 'undefined' ? undefined : DataView,
+ '%Date%': Date,
+ '%decodeURI%': decodeURI,
+ '%decodeURIComponent%': decodeURIComponent,
+ '%encodeURI%': encodeURI,
+ '%encodeURIComponent%': encodeURIComponent,
+ '%Error%': Error,
+ '%eval%': eval, // eslint-disable-line no-eval
+ '%EvalError%': EvalError,
+ '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,
+ '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,
+ '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,
+ '%Function%': $Function,
+ '%GeneratorFunction%': needsEval,
+ '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,
+ '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,
+ '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,
+ '%isFinite%': isFinite,
+ '%isNaN%': isNaN,
+ '%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,
+ '%JSON%': typeof JSON === 'object' ? JSON : undefined,
+ '%Map%': typeof Map === 'undefined' ? undefined : Map,
+ '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),
+ '%Math%': Math,
+ '%Number%': Number,
+ '%Object%': Object,
+ '%parseFloat%': parseFloat,
+ '%parseInt%': parseInt,
+ '%Promise%': typeof Promise === 'undefined' ? undefined : Promise,
+ '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,
+ '%RangeError%': RangeError,
+ '%ReferenceError%': ReferenceError,
+ '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,
+ '%RegExp%': RegExp,
+ '%Set%': typeof Set === 'undefined' ? undefined : Set,
+ '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),
+ '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,
+ '%String%': String,
+ '%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,
+ '%Symbol%': hasSymbols ? Symbol : undefined,
+ '%SyntaxError%': $SyntaxError,
+ '%ThrowTypeError%': ThrowTypeError,
+ '%TypedArray%': TypedArray,
+ '%TypeError%': $TypeError,
+ '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,
+ '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,
+ '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,
+ '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,
+ '%URIError%': URIError,
+ '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,
+ '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,
+ '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet
+};
+
+var doEval = function doEval(name) {
+ var value;
+ if (name === '%AsyncFunction%') {
+ value = getEvalledConstructor('async function () {}');
+ } else if (name === '%GeneratorFunction%') {
+ value = getEvalledConstructor('function* () {}');
+ } else if (name === '%AsyncGeneratorFunction%') {
+ value = getEvalledConstructor('async function* () {}');
+ } else if (name === '%AsyncGenerator%') {
+ var fn = doEval('%AsyncGeneratorFunction%');
+ if (fn) {
+ value = fn.prototype;
+ }
+ } else if (name === '%AsyncIteratorPrototype%') {
+ var gen = doEval('%AsyncGenerator%');
+ if (gen) {
+ value = getProto(gen.prototype);
+ }
+ }
+
+ INTRINSICS[name] = value;
+
+ return value;
+};
+
+var LEGACY_ALIASES = {
+ '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],
+ '%ArrayPrototype%': ['Array', 'prototype'],
+ '%ArrayProto_entries%': ['Array', 'prototype', 'entries'],
+ '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],
+ '%ArrayProto_keys%': ['Array', 'prototype', 'keys'],
+ '%ArrayProto_values%': ['Array', 'prototype', 'values'],
+ '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],
+ '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],
+ '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],
+ '%BooleanPrototype%': ['Boolean', 'prototype'],
+ '%DataViewPrototype%': ['DataView', 'prototype'],
+ '%DatePrototype%': ['Date', 'prototype'],
+ '%ErrorPrototype%': ['Error', 'prototype'],
+ '%EvalErrorPrototype%': ['EvalError', 'prototype'],
+ '%Float32ArrayPrototype%': ['Float32Array', 'prototype'],
+ '%Float64ArrayPrototype%': ['Float64Array', 'prototype'],
+ '%FunctionPrototype%': ['Function', 'prototype'],
+ '%Generator%': ['GeneratorFunction', 'prototype'],
+ '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],
+ '%Int8ArrayPrototype%': ['Int8Array', 'prototype'],
+ '%Int16ArrayPrototype%': ['Int16Array', 'prototype'],
+ '%Int32ArrayPrototype%': ['Int32Array', 'prototype'],
+ '%JSONParse%': ['JSON', 'parse'],
+ '%JSONStringify%': ['JSON', 'stringify'],
+ '%MapPrototype%': ['Map', 'prototype'],
+ '%NumberPrototype%': ['Number', 'prototype'],
+ '%ObjectPrototype%': ['Object', 'prototype'],
+ '%ObjProto_toString%': ['Object', 'prototype', 'toString'],
+ '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],
+ '%PromisePrototype%': ['Promise', 'prototype'],
+ '%PromiseProto_then%': ['Promise', 'prototype', 'then'],
+ '%Promise_all%': ['Promise', 'all'],
+ '%Promise_reject%': ['Promise', 'reject'],
+ '%Promise_resolve%': ['Promise', 'resolve'],
+ '%RangeErrorPrototype%': ['RangeError', 'prototype'],
+ '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],
+ '%RegExpPrototype%': ['RegExp', 'prototype'],
+ '%SetPrototype%': ['Set', 'prototype'],
+ '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],
+ '%StringPrototype%': ['String', 'prototype'],
+ '%SymbolPrototype%': ['Symbol', 'prototype'],
+ '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],
+ '%TypedArrayPrototype%': ['TypedArray', 'prototype'],
+ '%TypeErrorPrototype%': ['TypeError', 'prototype'],
+ '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],
+ '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],
+ '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],
+ '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],
+ '%URIErrorPrototype%': ['URIError', 'prototype'],
+ '%WeakMapPrototype%': ['WeakMap', 'prototype'],
+ '%WeakSetPrototype%': ['WeakSet', 'prototype']
+};
+
+var bind = require('function-bind');
+var hasOwn = require('has');
+var $concat = bind.call(Function.call, Array.prototype.concat);
+var $spliceApply = bind.call(Function.apply, Array.prototype.splice);
+var $replace = bind.call(Function.call, String.prototype.replace);
+var $strSlice = bind.call(Function.call, String.prototype.slice);
+var $exec = bind.call(Function.call, RegExp.prototype.exec);
+
+/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
+var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
+var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
+var stringToPath = function stringToPath(string) {
+ var first = $strSlice(string, 0, 1);
+ var last = $strSlice(string, -1);
+ if (first === '%' && last !== '%') {
+ throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`');
+ } else if (last === '%' && first !== '%') {
+ throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`');
+ }
+ var result = [];
+ $replace(string, rePropName, function (match, number, quote, subString) {
+ result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;
+ });
+ return result;
+};
+/* end adaptation */
+
+var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
+ var intrinsicName = name;
+ var alias;
+ if (hasOwn(LEGACY_ALIASES, intrinsicName)) {
+ alias = LEGACY_ALIASES[intrinsicName];
+ intrinsicName = '%' + alias[0] + '%';
+ }
+
+ if (hasOwn(INTRINSICS, intrinsicName)) {
+ var value = INTRINSICS[intrinsicName];
+ if (value === needsEval) {
+ value = doEval(intrinsicName);
+ }
+ if (typeof value === 'undefined' && !allowMissing) {
+ throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
+ }
+
+ return {
+ alias: alias,
+ name: intrinsicName,
+ value: value
+ };
+ }
+
+ throw new $SyntaxError('intrinsic ' + name + ' does not exist!');
+};
+
+module.exports = function GetIntrinsic(name, allowMissing) {
+ if (typeof name !== 'string' || name.length === 0) {
+ throw new $TypeError('intrinsic name must be a non-empty string');
+ }
+ if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
+ throw new $TypeError('"allowMissing" argument must be a boolean');
+ }
+
+ if ($exec(/^%?[^%]*%?$/, name) === null) {
+ throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');
+ }
+ var parts = stringToPath(name);
+ var intrinsicBaseName = parts.length > 0 ? parts[0] : '';
+
+ var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);
+ var intrinsicRealName = intrinsic.name;
+ var value = intrinsic.value;
+ var skipFurtherCaching = false;
+
+ var alias = intrinsic.alias;
+ if (alias) {
+ intrinsicBaseName = alias[0];
+ $spliceApply(parts, $concat([0, 1], alias));
+ }
+
+ for (var i = 1, isOwn = true; i < parts.length; i += 1) {
+ var part = parts[i];
+ var first = $strSlice(part, 0, 1);
+ var last = $strSlice(part, -1);
+ if (
+ (
+ (first === '"' || first === "'" || first === '`')
+ || (last === '"' || last === "'" || last === '`')
+ )
+ && first !== last
+ ) {
+ throw new $SyntaxError('property names with quotes must have matching quotes');
+ }
+ if (part === 'constructor' || !isOwn) {
+ skipFurtherCaching = true;
+ }
+
+ intrinsicBaseName += '.' + part;
+ intrinsicRealName = '%' + intrinsicBaseName + '%';
+
+ if (hasOwn(INTRINSICS, intrinsicRealName)) {
+ value = INTRINSICS[intrinsicRealName];
+ } else if (value != null) {
+ if (!(part in value)) {
+ if (!allowMissing) {
+ throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
+ }
+ return void undefined;
+ }
+ if ($gOPD && (i + 1) >= parts.length) {
+ var desc = $gOPD(value, part);
+ isOwn = !!desc;
+
+ // By convention, when a data property is converted to an accessor
+ // property to emulate a data property that does not suffer from
+ // the override mistake, that accessor's getter is marked with
+ // an `originalValue` property. Here, when we detect this, we
+ // uphold the illusion by pretending to see that original data
+ // property, i.e., returning the value rather than the getter
+ // itself.
+ if (isOwn && 'get' in desc && !('originalValue' in desc.get)) {
+ value = desc.get;
+ } else {
+ value = value[part];
+ }
+ } else {
+ isOwn = hasOwn(value, part);
+ value = value[part];
+ }
+
+ if (isOwn && !skipFurtherCaching) {
+ INTRINSICS[intrinsicRealName] = value;
+ }
+ }
+ }
+ return value;
+};
diff --git a/node_modules/get-intrinsic/package.json b/node_modules/get-intrinsic/package.json
new file mode 100644
index 0000000..dfde032
--- /dev/null
+++ b/node_modules/get-intrinsic/package.json
@@ -0,0 +1,91 @@
+{
+ "name": "get-intrinsic",
+ "version": "1.1.3",
+ "description": "Get and robustly cache all JS language-level intrinsics at first require time",
+ "main": "index.js",
+ "exports": {
+ ".": [
+ {
+ "default": "./index.js"
+ },
+ "./index.js"
+ ],
+ "./package.json": "./package.json"
+ },
+ "scripts": {
+ "prepack": "npmignore --auto --commentLines=autogenerated",
+ "prepublish": "not-in-publish || npm run prepublishOnly",
+ "prepublishOnly": "safe-publish-latest",
+ "prelint": "evalmd README.md",
+ "lint": "eslint --ext=.js,.mjs .",
+ "pretest": "npm run lint",
+ "tests-only": "nyc tape 'test/**/*.js'",
+ "test": "npm run tests-only",
+ "posttest": "aud --production",
+ "version": "auto-changelog && git add CHANGELOG.md",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/ljharb/get-intrinsic.git"
+ },
+ "keywords": [
+ "javascript",
+ "ecmascript",
+ "es",
+ "js",
+ "intrinsic",
+ "getintrinsic",
+ "es-abstract"
+ ],
+ "author": "Jordan Harband ",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/ljharb/get-intrinsic/issues"
+ },
+ "homepage": "https://github.com/ljharb/get-intrinsic#readme",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^21.0.0",
+ "aud": "^2.0.0",
+ "auto-changelog": "^2.4.0",
+ "call-bind": "^1.0.2",
+ "es-abstract": "^1.20.2",
+ "es-value-fixtures": "^1.4.2",
+ "eslint": "=8.8.0",
+ "evalmd": "^0.0.19",
+ "for-each": "^0.3.3",
+ "make-async-function": "^1.0.0",
+ "make-async-generator-function": "^1.0.0",
+ "make-generator-function": "^2.0.0",
+ "mock-property": "^1.0.0",
+ "npmignore": "^0.3.0",
+ "nyc": "^10.3.2",
+ "object-inspect": "^1.12.2",
+ "safe-publish-latest": "^2.0.0",
+ "tape": "^5.6.0"
+ },
+ "auto-changelog": {
+ "output": "CHANGELOG.md",
+ "template": "keepachangelog",
+ "unreleased": false,
+ "commitLimit": false,
+ "backfillLimit": false,
+ "hideCredit": true
+ },
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ },
+ "testling": {
+ "files": "test/GetIntrinsic.js"
+ },
+ "publishConfig": {
+ "ignore": [
+ ".github/workflows"
+ ]
+ }
+}
diff --git a/node_modules/get-intrinsic/test/GetIntrinsic.js b/node_modules/get-intrinsic/test/GetIntrinsic.js
new file mode 100644
index 0000000..7e0ea30
--- /dev/null
+++ b/node_modules/get-intrinsic/test/GetIntrinsic.js
@@ -0,0 +1,274 @@
+'use strict';
+
+var GetIntrinsic = require('../');
+
+var test = require('tape');
+var forEach = require('for-each');
+var debug = require('object-inspect');
+var generatorFns = require('make-generator-function')();
+var asyncFns = require('make-async-function').list();
+var asyncGenFns = require('make-async-generator-function')();
+var mockProperty = require('mock-property');
+
+var callBound = require('call-bind/callBound');
+var v = require('es-value-fixtures');
+var $gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');
+var DefinePropertyOrThrow = require('es-abstract/2021/DefinePropertyOrThrow');
+
+var $isProto = callBound('%Object.prototype.isPrototypeOf%');
+
+test('export', function (t) {
+ t.equal(typeof GetIntrinsic, 'function', 'it is a function');
+ t.equal(GetIntrinsic.length, 2, 'function has length of 2');
+
+ t.end();
+});
+
+test('throws', function (t) {
+ t['throws'](
+ function () { GetIntrinsic('not an intrinsic'); },
+ SyntaxError,
+ 'nonexistent intrinsic throws a syntax error'
+ );
+
+ t['throws'](
+ function () { GetIntrinsic(''); },
+ TypeError,
+ 'empty string intrinsic throws a type error'
+ );
+
+ t['throws'](
+ function () { GetIntrinsic('.'); },
+ SyntaxError,
+ '"just a dot" intrinsic throws a syntax error'
+ );
+
+ t['throws'](
+ function () { GetIntrinsic('%String'); },
+ SyntaxError,
+ 'Leading % without trailing % throws a syntax error'
+ );
+
+ t['throws'](
+ function () { GetIntrinsic('String%'); },
+ SyntaxError,
+ 'Trailing % without leading % throws a syntax error'
+ );
+
+ t['throws'](
+ function () { GetIntrinsic("String['prototype]"); },
+ SyntaxError,
+ 'Dynamic property access is disallowed for intrinsics (unterminated string)'
+ );
+
+ t['throws'](
+ function () { GetIntrinsic('%Proxy.prototype.undefined%'); },
+ TypeError,
+ "Throws when middle part doesn't exist (%Proxy.prototype.undefined%)"
+ );
+
+ t['throws'](
+ function () { GetIntrinsic('%Array.prototype%garbage%'); },
+ SyntaxError,
+ 'Throws with extra percent signs'
+ );
+
+ t['throws'](
+ function () { GetIntrinsic('%Array.prototype%push%'); },
+ SyntaxError,
+ 'Throws with extra percent signs, even on an existing intrinsic'
+ );
+
+ forEach(v.nonStrings, function (nonString) {
+ t['throws'](
+ function () { GetIntrinsic(nonString); },
+ TypeError,
+ debug(nonString) + ' is not a String'
+ );
+ });
+
+ forEach(v.nonBooleans, function (nonBoolean) {
+ t['throws'](
+ function () { GetIntrinsic('%', nonBoolean); },
+ TypeError,
+ debug(nonBoolean) + ' is not a Boolean'
+ );
+ });
+
+ forEach([
+ 'toString',
+ 'propertyIsEnumerable',
+ 'hasOwnProperty'
+ ], function (objectProtoMember) {
+ t['throws'](
+ function () { GetIntrinsic(objectProtoMember); },
+ SyntaxError,
+ debug(objectProtoMember) + ' is not an intrinsic'
+ );
+ });
+
+ t.end();
+});
+
+test('base intrinsics', function (t) {
+ t.equal(GetIntrinsic('%Object%'), Object, '%Object% yields Object');
+ t.equal(GetIntrinsic('Object'), Object, 'Object yields Object');
+ t.equal(GetIntrinsic('%Array%'), Array, '%Array% yields Array');
+ t.equal(GetIntrinsic('Array'), Array, 'Array yields Array');
+
+ t.end();
+});
+
+test('dotted paths', function (t) {
+ t.equal(GetIntrinsic('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% yields Object.prototype.toString');
+ t.equal(GetIntrinsic('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString yields Object.prototype.toString');
+ t.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push, '%Array.prototype.push% yields Array.prototype.push');
+ t.equal(GetIntrinsic('Array.prototype.push'), Array.prototype.push, 'Array.prototype.push yields Array.prototype.push');
+
+ test('underscore paths are aliases for dotted paths', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) {
+ var original = GetIntrinsic('%ObjProto_toString%');
+
+ forEach([
+ '%Object.prototype.toString%',
+ 'Object.prototype.toString',
+ '%ObjectPrototype.toString%',
+ 'ObjectPrototype.toString',
+ '%ObjProto_toString%',
+ 'ObjProto_toString'
+ ], function (name) {
+ DefinePropertyOrThrow(Object.prototype, 'toString', {
+ '[[Value]]': function toString() {
+ return original.apply(this, arguments);
+ }
+ });
+ st.equal(GetIntrinsic(name), original, name + ' yields original Object.prototype.toString');
+ });
+
+ DefinePropertyOrThrow(Object.prototype, 'toString', { '[[Value]]': original });
+ st.end();
+ });
+
+ test('dotted paths cache', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) {
+ var original = GetIntrinsic('%Object.prototype.propertyIsEnumerable%');
+
+ forEach([
+ '%Object.prototype.propertyIsEnumerable%',
+ 'Object.prototype.propertyIsEnumerable',
+ '%ObjectPrototype.propertyIsEnumerable%',
+ 'ObjectPrototype.propertyIsEnumerable'
+ ], function (name) {
+ var restore = mockProperty(Object.prototype, 'propertyIsEnumerable', {
+ value: function propertyIsEnumerable() {
+ return original.apply(this, arguments);
+ }
+ });
+ st.equal(GetIntrinsic(name), original, name + ' yields cached Object.prototype.propertyIsEnumerable');
+
+ restore();
+ });
+
+ st.end();
+ });
+
+ test('dotted path reports correct error', function (st) {
+ st['throws'](function () {
+ GetIntrinsic('%NonExistentIntrinsic.prototype.property%');
+ }, /%NonExistentIntrinsic%/, 'The base intrinsic of %NonExistentIntrinsic.prototype.property% is %NonExistentIntrinsic%');
+
+ st['throws'](function () {
+ GetIntrinsic('%NonExistentIntrinsicPrototype.property%');
+ }, /%NonExistentIntrinsicPrototype%/, 'The base intrinsic of %NonExistentIntrinsicPrototype.property% is %NonExistentIntrinsicPrototype%');
+
+ st.end();
+ });
+
+ t.end();
+});
+
+test('accessors', { skip: !$gOPD || typeof Map !== 'function' }, function (t) {
+ var actual = $gOPD(Map.prototype, 'size');
+ t.ok(actual, 'Map.prototype.size has a descriptor');
+ t.equal(typeof actual.get, 'function', 'Map.prototype.size has a getter function');
+ t.equal(GetIntrinsic('%Map.prototype.size%'), actual.get, '%Map.prototype.size% yields the getter for it');
+ t.equal(GetIntrinsic('Map.prototype.size'), actual.get, 'Map.prototype.size yields the getter for it');
+
+ t.end();
+});
+
+test('generator functions', { skip: !generatorFns.length }, function (t) {
+ var $GeneratorFunction = GetIntrinsic('%GeneratorFunction%');
+ var $GeneratorFunctionPrototype = GetIntrinsic('%Generator%');
+ var $GeneratorPrototype = GetIntrinsic('%GeneratorPrototype%');
+
+ forEach(generatorFns, function (genFn) {
+ var fnName = genFn.name;
+ fnName = fnName ? "'" + fnName + "'" : 'genFn';
+
+ t.ok(genFn instanceof $GeneratorFunction, fnName + ' instanceof %GeneratorFunction%');
+ t.ok($isProto($GeneratorFunctionPrototype, genFn), '%Generator% is prototype of ' + fnName);
+ t.ok($isProto($GeneratorPrototype, genFn.prototype), '%GeneratorPrototype% is prototype of ' + fnName + '.prototype');
+ });
+
+ t.end();
+});
+
+test('async functions', { skip: !asyncFns.length }, function (t) {
+ var $AsyncFunction = GetIntrinsic('%AsyncFunction%');
+ var $AsyncFunctionPrototype = GetIntrinsic('%AsyncFunctionPrototype%');
+
+ forEach(asyncFns, function (asyncFn) {
+ var fnName = asyncFn.name;
+ fnName = fnName ? "'" + fnName + "'" : 'asyncFn';
+
+ t.ok(asyncFn instanceof $AsyncFunction, fnName + ' instanceof %AsyncFunction%');
+ t.ok($isProto($AsyncFunctionPrototype, asyncFn), '%AsyncFunctionPrototype% is prototype of ' + fnName);
+ });
+
+ t.end();
+});
+
+test('async generator functions', { skip: asyncGenFns.length === 0 }, function (t) {
+ var $AsyncGeneratorFunction = GetIntrinsic('%AsyncGeneratorFunction%');
+ var $AsyncGeneratorFunctionPrototype = GetIntrinsic('%AsyncGenerator%');
+ var $AsyncGeneratorPrototype = GetIntrinsic('%AsyncGeneratorPrototype%');
+
+ forEach(asyncGenFns, function (asyncGenFn) {
+ var fnName = asyncGenFn.name;
+ fnName = fnName ? "'" + fnName + "'" : 'asyncGenFn';
+
+ t.ok(asyncGenFn instanceof $AsyncGeneratorFunction, fnName + ' instanceof %AsyncGeneratorFunction%');
+ t.ok($isProto($AsyncGeneratorFunctionPrototype, asyncGenFn), '%AsyncGenerator% is prototype of ' + fnName);
+ t.ok($isProto($AsyncGeneratorPrototype, asyncGenFn.prototype), '%AsyncGeneratorPrototype% is prototype of ' + fnName + '.prototype');
+ });
+
+ t.end();
+});
+
+test('%ThrowTypeError%', function (t) {
+ var $ThrowTypeError = GetIntrinsic('%ThrowTypeError%');
+
+ t.equal(typeof $ThrowTypeError, 'function', 'is a function');
+ t['throws'](
+ $ThrowTypeError,
+ TypeError,
+ '%ThrowTypeError% throws a TypeError'
+ );
+
+ t.end();
+});
+
+test('allowMissing', { skip: asyncGenFns.length > 0 }, function (t) {
+ t['throws'](
+ function () { GetIntrinsic('%AsyncGeneratorPrototype%'); },
+ TypeError,
+ 'throws when missing'
+ );
+
+ t.equal(
+ GetIntrinsic('%AsyncGeneratorPrototype%', true),
+ undefined,
+ 'does not throw when allowMissing'
+ );
+
+ t.end();
+});
diff --git a/node_modules/get-value/LICENSE b/node_modules/get-value/LICENSE
new file mode 100644
index 0000000..39245ac
--- /dev/null
+++ b/node_modules/get-value/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+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/node_modules/get-value/index.js b/node_modules/get-value/index.js
new file mode 100644
index 0000000..5879a88
--- /dev/null
+++ b/node_modules/get-value/index.js
@@ -0,0 +1,50 @@
+/*!
+ * get-value
+ *
+ * Copyright (c) 2014-2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+module.exports = function(obj, prop, a, b, c) {
+ if (!isObject(obj) || !prop) {
+ return obj;
+ }
+
+ prop = toString(prop);
+
+ // allowing for multiple properties to be passed as
+ // a string or array, but much faster (3-4x) than doing
+ // `[].slice.call(arguments)`
+ if (a) prop += '.' + toString(a);
+ if (b) prop += '.' + toString(b);
+ if (c) prop += '.' + toString(c);
+
+ if (prop in obj) {
+ return obj[prop];
+ }
+
+ var segs = prop.split('.');
+ var len = segs.length;
+ var i = -1;
+
+ while (obj && (++i < len)) {
+ var key = segs[i];
+ while (key[key.length - 1] === '\\') {
+ key = key.slice(0, -1) + '.' + segs[++i];
+ }
+ obj = obj[key];
+ }
+ return obj;
+};
+
+function isObject(val) {
+ return val !== null && (typeof val === 'object' || typeof val === 'function');
+}
+
+function toString(val) {
+ if (!val) return '';
+ if (Array.isArray(val)) {
+ return val.join('.');
+ }
+ return val;
+}
diff --git a/node_modules/get-value/package.json b/node_modules/get-value/package.json
new file mode 100644
index 0000000..df168cd
--- /dev/null
+++ b/node_modules/get-value/package.json
@@ -0,0 +1,79 @@
+{
+ "name": "get-value",
+ "description": "Use property paths (`a.b.c`) to get a nested value from an object.",
+ "version": "2.0.6",
+ "homepage": "https://github.com/jonschlinkert/get-value",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/get-value",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/get-value/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "arr-reduce": "^1.0.1",
+ "benchmarked": "^0.1.4",
+ "dot-prop": "^2.2.0",
+ "getobject": "^0.1.0",
+ "gulp": "^3.9.0",
+ "gulp-eslint": "^1.1.1",
+ "gulp-format-md": "^0.1.5",
+ "gulp-istanbul": "^0.10.2",
+ "gulp-mocha": "^2.1.3",
+ "isobject": "^2.0.0",
+ "matched": "^0.3.2",
+ "minimist": "^1.2.0"
+ },
+ "keywords": [
+ "get",
+ "key",
+ "nested",
+ "object",
+ "path",
+ "paths",
+ "prop",
+ "properties",
+ "property",
+ "props",
+ "segment",
+ "value",
+ "values"
+ ],
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "has-any",
+ "has-any-deep",
+ "has-value",
+ "set-value",
+ "unset-value"
+ ]
+ },
+ "reflinks": [
+ "verb",
+ "verb-readme-generator"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/glob-parent/LICENSE b/node_modules/glob-parent/LICENSE
new file mode 100644
index 0000000..734076d
--- /dev/null
+++ b/node_modules/glob-parent/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) 2015 Elan Shanker
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/glob-parent/README.md b/node_modules/glob-parent/README.md
new file mode 100644
index 0000000..3bec5c7
--- /dev/null
+++ b/node_modules/glob-parent/README.md
@@ -0,0 +1,109 @@
+glob-parent [![Build Status](https://travis-ci.org/es128/glob-parent.svg)](https://travis-ci.org/es128/glob-parent) [![Coverage Status](https://img.shields.io/coveralls/es128/glob-parent.svg)](https://coveralls.io/r/es128/glob-parent?branch=master)
+======
+Javascript module to extract the non-magic parent path from a glob string.
+
+[![NPM](https://nodei.co/npm/glob-parent.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/glob-parent/)
+[![NPM](https://nodei.co/npm-dl/glob-parent.png?height=3&months=9)](https://nodei.co/npm-dl/glob-parent/)
+
+Usage
+-----
+```sh
+npm install glob-parent --save
+```
+
+**Examples**
+
+```js
+var globParent = require('glob-parent');
+
+globParent('path/to/*.js'); // 'path/to'
+globParent('/root/path/to/*.js'); // '/root/path/to'
+globParent('/*.js'); // '/'
+globParent('*.js'); // '.'
+globParent('**/*.js'); // '.'
+globParent('path/{to,from}'); // 'path'
+globParent('path/!(to|from)'); // 'path'
+globParent('path/?(to|from)'); // 'path'
+globParent('path/+(to|from)'); // 'path'
+globParent('path/*(to|from)'); // 'path'
+globParent('path/@(to|from)'); // 'path'
+globParent('path/**/*'); // 'path'
+
+// if provided a non-glob path, returns the nearest dir
+globParent('path/foo/bar.js'); // 'path/foo'
+globParent('path/foo/'); // 'path/foo'
+globParent('path/foo'); // 'path' (see issue #3 for details)
+```
+
+## Escaping
+
+The following characters have special significance in glob patterns and must be escaped if you want them to be treated as regular path characters:
+
+- `?` (question mark)
+- `*` (star)
+- `|` (pipe)
+- `(` (opening parenthesis)
+- `)` (closing parenthesis)
+- `{` (opening curly brace)
+- `}` (closing curly brace)
+- `[` (opening bracket)
+- `]` (closing bracket)
+
+**Example**
+
+```js
+globParent('foo/[bar]/') // 'foo'
+globParent('foo/\\[bar]/') // 'foo/[bar]'
+```
+
+## Limitations
+
+#### Braces & Brackets
+This library attempts a quick and imperfect method of determining which path
+parts have glob magic without fully parsing/lexing the pattern. There are some
+advanced use cases that can trip it up, such as nested braces where the outer
+pair is escaped and the inner one contains a path separator. If you find
+yourself in the unlikely circumstance of being affected by this or need to
+ensure higher-fidelity glob handling in your library, it is recommended that you
+pre-process your input with [expand-braces] and/or [expand-brackets].
+
+#### Windows
+Backslashes are not valid path separators for globs. If a path with backslashes
+is provided anyway, for simple cases, glob-parent will replace the path
+separator for you and return the non-glob parent path (now with
+forward-slashes, which are still valid as Windows path separators).
+
+This cannot be used in conjunction with escape characters.
+
+```js
+// BAD
+globParent('C:\\Program Files \\(x86\\)\\*.ext') // 'C:/Program Files /(x86/)'
+
+// GOOD
+globParent('C:/Program Files\\(x86\\)/*.ext') // 'C:/Program Files (x86)'
+```
+
+If you are using escape characters for a pattern without path parts (i.e.
+relative to `cwd`), prefix with `./` to avoid confusing glob-parent.
+
+```js
+// BAD
+globParent('foo \\[bar]') // 'foo '
+globParent('foo \\[bar]*') // 'foo '
+
+// GOOD
+globParent('./foo \\[bar]') // 'foo [bar]'
+globParent('./foo \\[bar]*') // '.'
+```
+
+
+Change Log
+----------
+[See release notes page on GitHub](https://github.com/es128/glob-parent/releases)
+
+License
+-------
+[ISC](https://raw.github.com/es128/glob-parent/master/LICENSE)
+
+[expand-braces]: https://github.com/jonschlinkert/expand-braces
+[expand-brackets]: https://github.com/jonschlinkert/expand-brackets
diff --git a/node_modules/glob-parent/index.js b/node_modules/glob-parent/index.js
new file mode 100644
index 0000000..3a14a53
--- /dev/null
+++ b/node_modules/glob-parent/index.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var path = require('path');
+var isglob = require('is-glob');
+var pathDirname = require('path-dirname');
+var isWin32 = require('os').platform() === 'win32';
+
+module.exports = function globParent(str) {
+ // flip windows path separators
+ if (isWin32 && str.indexOf('/') < 0) str = str.split('\\').join('/');
+
+ // special case for strings ending in enclosure containing path separator
+ if (/[\{\[].*[\/]*.*[\}\]]$/.test(str)) str += '/';
+
+ // preserves full path in case of trailing path separator
+ str += 'a';
+
+ // remove path parts that are globby
+ do {str = pathDirname.posix(str)}
+ while (isglob(str) || /(^|[^\\])([\{\[]|\([^\)]+$)/.test(str));
+
+ // remove escape chars and return result
+ return str.replace(/\\([\*\?\|\[\]\(\)\{\}])/g, '$1');
+};
diff --git a/node_modules/glob-parent/node_modules/is-glob/LICENSE b/node_modules/glob-parent/node_modules/is-glob/LICENSE
new file mode 100644
index 0000000..39245ac
--- /dev/null
+++ b/node_modules/glob-parent/node_modules/is-glob/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+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/node_modules/glob-parent/node_modules/is-glob/README.md b/node_modules/glob-parent/node_modules/is-glob/README.md
new file mode 100644
index 0000000..6f4404f
--- /dev/null
+++ b/node_modules/glob-parent/node_modules/is-glob/README.md
@@ -0,0 +1,142 @@
+# is-glob [![NPM version](https://img.shields.io/npm/v/is-glob.svg?style=flat)](https://www.npmjs.com/package/is-glob) [![NPM downloads](https://img.shields.io/npm/dm/is-glob.svg?style=flat)](https://npmjs.org/package/is-glob) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-glob.svg?style=flat)](https://travis-ci.org/jonschlinkert/is-glob)
+
+> Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save is-glob
+```
+
+You might also be interested in [is-valid-glob](https://github.com/jonschlinkert/is-valid-glob) and [has-glob](https://github.com/jonschlinkert/has-glob).
+
+## Usage
+
+```js
+var isGlob = require('is-glob');
+```
+
+**True**
+
+Patterns that have glob characters or regex patterns will return `true`:
+
+```js
+isGlob('!foo.js');
+isGlob('*.js');
+isGlob('**/abc.js');
+isGlob('abc/*.js');
+isGlob('abc/(aaa|bbb).js');
+isGlob('abc/[a-z].js');
+isGlob('abc/{a,b}.js');
+isGlob('abc/?.js');
+//=> true
+```
+
+Extglobs
+
+```js
+isGlob('abc/@(a).js');
+isGlob('abc/!(a).js');
+isGlob('abc/+(a).js');
+isGlob('abc/*(a).js');
+isGlob('abc/?(a).js');
+//=> true
+```
+
+**False**
+
+Escaped globs or extglobs return `false`:
+
+```js
+isGlob('abc/\\@(a).js');
+isGlob('abc/\\!(a).js');
+isGlob('abc/\\+(a).js');
+isGlob('abc/\\*(a).js');
+isGlob('abc/\\?(a).js');
+isGlob('\\!foo.js');
+isGlob('\\*.js');
+isGlob('\\*\\*/abc.js');
+isGlob('abc/\\*.js');
+isGlob('abc/\\(aaa|bbb).js');
+isGlob('abc/\\[a-z].js');
+isGlob('abc/\\{a,b}.js');
+isGlob('abc/\\?.js');
+//=> false
+```
+
+Patterns that do not have glob patterns return `false`:
+
+```js
+isGlob('abc.js');
+isGlob('abc/def/ghi.js');
+isGlob('foo.js');
+isGlob('abc/@.js');
+isGlob('abc/+.js');
+isGlob();
+isGlob(null);
+//=> false
+```
+
+Arrays are also `false` (If you want to check if an array has a glob pattern, use [has-glob](https://github.com/jonschlinkert/has-glob)):
+
+```js
+isGlob(['**/*.js']);
+isGlob(['foo.js']);
+//=> false
+```
+
+## About
+
+### Related projects
+
+* [assemble](https://www.npmjs.com/package/assemble): Get the rocks out of your socks! Assemble makes you fast at creating web projects… [more](https://github.com/assemble/assemble) | [homepage](https://github.com/assemble/assemble "Get the rocks out of your socks! Assemble makes you fast at creating web projects. Assemble is used by thousands of projects for rapid prototyping, creating themes, scaffolds, boilerplates, e-books, UI components, API documentation, blogs, building websit")
+* [base](https://www.npmjs.com/package/base): base is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting… [more](https://github.com/node-base/base) | [homepage](https://github.com/node-base/base "base is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting with a handful of common methods, like `set`, `get`, `del` and `use`.")
+* [update](https://www.npmjs.com/package/update): Be scalable! Update is a new, open source developer framework and CLI for automating updates… [more](https://github.com/update/update) | [homepage](https://github.com/update/update "Be scalable! Update is a new, open source developer framework and CLI for automating updates of any kind in code projects.")
+* [verb](https://www.npmjs.com/package/verb): Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used… [more](https://github.com/verbose/verb) | [homepage](https://github.com/verbose/verb "Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used on hundreds of projects of all sizes to generate everything from API docs to readmes.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 40 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 1 | [tuvistavie](https://github.com/tuvistavie) |
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/is-glob/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.31, on October 12, 2016._
\ No newline at end of file
diff --git a/node_modules/glob-parent/node_modules/is-glob/index.js b/node_modules/glob-parent/node_modules/is-glob/index.js
new file mode 100644
index 0000000..2ecbe2a
--- /dev/null
+++ b/node_modules/glob-parent/node_modules/is-glob/index.js
@@ -0,0 +1,25 @@
+/*!
+ * is-glob
+ *
+ * Copyright (c) 2014-2016, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+var isExtglob = require('is-extglob');
+
+module.exports = function isGlob(str) {
+ if (typeof str !== 'string' || str === '') {
+ return false;
+ }
+
+ if (isExtglob(str)) return true;
+
+ var regex = /(\\).|([*?]|\[.*\]|\{.*\}|\(.*\|.*\)|^!)/;
+ var match;
+
+ while ((match = regex.exec(str))) {
+ if (match[2]) return true;
+ str = str.slice(match.index + match[0].length);
+ }
+ return false;
+};
diff --git a/node_modules/glob-parent/node_modules/is-glob/package.json b/node_modules/glob-parent/node_modules/is-glob/package.json
new file mode 100644
index 0000000..53a137d
--- /dev/null
+++ b/node_modules/glob-parent/node_modules/is-glob/package.json
@@ -0,0 +1,80 @@
+{
+ "name": "is-glob",
+ "description": "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience.",
+ "version": "3.1.0",
+ "homepage": "https://github.com/jonschlinkert/is-glob",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Daniel Perez (http://tuvistavie.com)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)"
+ ],
+ "repository": "jonschlinkert/is-glob",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/is-glob/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "is-extglob": "^2.1.0"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^0.1.10",
+ "mocha": "^3.0.2"
+ },
+ "keywords": [
+ "bash",
+ "braces",
+ "check",
+ "exec",
+ "expression",
+ "extglob",
+ "glob",
+ "globbing",
+ "globstar",
+ "is",
+ "match",
+ "matches",
+ "pattern",
+ "regex",
+ "regular",
+ "string",
+ "test"
+ ],
+ "verb": {
+ "layout": "default",
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "assemble",
+ "base",
+ "update",
+ "verb"
+ ]
+ },
+ "reflinks": [
+ "assemble",
+ "bach",
+ "base",
+ "composer",
+ "gulp",
+ "has-glob",
+ "is-valid-glob",
+ "micromatch",
+ "npm",
+ "scaffold",
+ "verb",
+ "vinyl"
+ ]
+ }
+}
diff --git a/node_modules/glob-parent/package.json b/node_modules/glob-parent/package.json
new file mode 100644
index 0000000..e002385
--- /dev/null
+++ b/node_modules/glob-parent/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "glob-parent",
+ "version": "3.1.0",
+ "description": "Strips glob magic from a string to provide the parent directory path",
+ "main": "index.js",
+ "scripts": {
+ "test": "istanbul test node_modules/mocha/bin/_mocha",
+ "ci-test": "istanbul cover _mocha && cat ./coverage/lcov.info | coveralls"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/es128/glob-parent"
+ },
+ "keywords": [
+ "glob",
+ "parent",
+ "strip",
+ "path",
+ "dirname",
+ "directory",
+ "base",
+ "wildcard"
+ ],
+ "files": [
+ "index.js"
+ ],
+ "author": "Elan Shanker (https://github.com/es128)",
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/es128/glob-parent/issues"
+ },
+ "homepage": "https://github.com/es128/glob-parent",
+ "dependencies": {
+ "is-glob": "^3.1.0",
+ "path-dirname": "^1.0.0"
+ },
+ "devDependencies": {
+ "coveralls": "^2.11.2",
+ "istanbul": "^0.3.5",
+ "mocha": "^2.1.0"
+ }
+}
diff --git a/node_modules/glob-stream/LICENSE b/node_modules/glob-stream/LICENSE
new file mode 100755
index 0000000..67fa13b
--- /dev/null
+++ b/node_modules/glob-stream/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017 Blaine Bublitz , Eric Schoffstall and other 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.
diff --git a/node_modules/glob-stream/README.md b/node_modules/glob-stream/README.md
new file mode 100644
index 0000000..12c103e
--- /dev/null
+++ b/node_modules/glob-stream/README.md
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+# glob-stream
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+A [Readable Stream][readable-stream-url] interface over [node-glob][node-glob-url].
+
+## Usage
+
+```javascript
+var gs = require('glob-stream');
+
+var readable = gs('./files/**/*.coffee', { /* options */ });
+
+var writable = /* your WriteableStream */
+
+readable.pipe(writable);
+```
+
+You can pass any combination of glob strings. One caveat is that you cannot __only__ pass a negative glob, you must give it at least one positive glob so it knows where to start. If given a non-glob path (also referred to as a singular glob), only one file will be emitted. If given a singular glob and no files match, an error is emitted (see also [`options.allowEmpty`][allow-empty-url]).
+
+## API
+
+### `globStream(globs, options)`
+
+Takes a glob string or an array of glob strings as the first argument and an options object as the second. Returns a stream of objects that contain `cwd`, `base` and `path` properties.
+
+#### Options
+
+##### `options.allowEmpty`
+
+Whether or not to error upon an empty singular glob.
+
+Type: `Boolean`
+
+Default: `false` (error upon no match)
+
+##### `options.dot`
+
+Whether or not to treat dotfiles as regular files. This is passed through to [node-glob][node-glob-url].
+
+Type: `Boolean`
+
+Default: `false`
+
+##### `options.silent`
+
+Whether or not to suppress warnings on stderr from [node-glob][node-glob-url]. This is passed through to [node-glob][node-glob-url].
+
+Type: `Boolean`
+
+Default: `true`
+
+##### `options.cwd`
+
+The current working directory that the glob is resolved against.
+
+Type: `String`
+
+Default: `process.cwd()`
+
+##### `options.root`
+
+The root path that the glob is resolved against.
+
+__Note: This is never passed to [node-glob][node-glob-url] because it is pre-resolved against your paths.__
+
+Type: `String`
+
+Default: `undefined` (use the filesystem root)
+
+##### `options.base`
+
+The absolute segment of the glob path that isn't a glob. This value is attached to each glob object and is useful for relative pathing.
+
+Type: `String`
+
+Default: The absolute path segement before a glob starts (see [glob-parent][glob-parent-url])
+
+##### `options.cwdbase`
+
+Whether or not the `cwd` and `base` should be the same.
+
+Type: `Boolean`
+
+Default: `false`
+
+##### `options.uniqueBy`
+
+Filters stream to remove duplicates based on the string property name or the result of function. When using a function, the function receives the streamed data (objects containing `cwd`, `base`, `path` properties) to compare against.
+
+Type: `String` or `Function`
+
+Default: `'path'`
+
+##### other
+
+Any glob-related options are documented in [node-glob][node-glob-url]. Those options are forwarded verbatim, with the exception of `root` and `ignore`. `root` is pre-resolved and `ignore` is joined with all negative globs.
+
+#### Globbing & Negation
+
+```js
+var stream = gs(['./**/*.js', '!./node_modules/**/*']);
+```
+
+Globs are executed in order, so negations should follow positive globs. For example:
+
+The following would __not__ exclude any files:
+```js
+gs(['!b*.js', '*.js'])
+```
+
+However, this would exclude all files that started with `b`:
+```js
+gs(['*.js', '!b*.js'])
+```
+
+## License
+
+MIT
+
+[node-glob-url]: https://github.com/isaacs/node-glob
+[glob-parent-url]: https://github.com/es128/glob-parent
+[allow-empty-url]: #optionsallowempty
+[readable-stream-url]: https://nodejs.org/api/stream.html#stream_readable_streams
+
+[downloads-image]: http://img.shields.io/npm/dm/glob-stream.svg
+[npm-url]: https://www.npmjs.com/package/glob-stream
+[npm-image]: http://img.shields.io/npm/v/glob-stream.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/glob-stream
+[travis-image]: http://img.shields.io/travis/gulpjs/glob-stream.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/glob-stream
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/glob-stream.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/glob-stream
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/glob-stream.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
diff --git a/node_modules/glob-stream/index.js b/node_modules/glob-stream/index.js
new file mode 100644
index 0000000..dd012f6
--- /dev/null
+++ b/node_modules/glob-stream/index.js
@@ -0,0 +1,94 @@
+'use strict';
+
+var Combine = require('ordered-read-streams');
+var unique = require('unique-stream');
+var pumpify = require('pumpify');
+var isNegatedGlob = require('is-negated-glob');
+var extend = require('extend');
+
+var GlobStream = require('./readable');
+
+function globStream(globs, opt) {
+ if (!opt) {
+ opt = {};
+ }
+
+ var ourOpt = extend({}, opt);
+ var ignore = ourOpt.ignore;
+
+ ourOpt.cwd = typeof ourOpt.cwd === 'string' ? ourOpt.cwd : process.cwd();
+ ourOpt.dot = typeof ourOpt.dot === 'boolean' ? ourOpt.dot : false;
+ ourOpt.silent = typeof ourOpt.silent === 'boolean' ? ourOpt.silent : true;
+ ourOpt.cwdbase = typeof ourOpt.cwdbase === 'boolean' ? ourOpt.cwdbase : false;
+ ourOpt.uniqueBy = typeof ourOpt.uniqueBy === 'string' ||
+ typeof ourOpt.uniqueBy === 'function' ? ourOpt.uniqueBy : 'path';
+
+ if (ourOpt.cwdbase) {
+ ourOpt.base = ourOpt.cwd;
+ }
+ // Normalize string `ignore` to array
+ if (typeof ignore === 'string') {
+ ignore = [ignore];
+ }
+ // Ensure `ignore` is an array
+ if (!Array.isArray(ignore)) {
+ ignore = [];
+ }
+
+ // Only one glob no need to aggregate
+ if (!Array.isArray(globs)) {
+ globs = [globs];
+ }
+
+ var positives = [];
+ var negatives = [];
+
+ globs.forEach(sortGlobs);
+
+ function sortGlobs(globString, index) {
+ if (typeof globString !== 'string') {
+ throw new Error('Invalid glob at index ' + index);
+ }
+
+ var glob = isNegatedGlob(globString);
+ var globArray = glob.negated ? negatives : positives;
+
+ globArray.push({
+ index: index,
+ glob: glob.pattern,
+ });
+ }
+
+ if (positives.length === 0) {
+ throw new Error('Missing positive glob');
+ }
+
+ // Create all individual streams
+ var streams = positives.map(streamFromPositive);
+
+ // Then just pipe them to a single unique stream and return it
+ var aggregate = new Combine(streams);
+ var uniqueStream = unique(ourOpt.uniqueBy);
+
+ return pumpify.obj(aggregate, uniqueStream);
+
+ function streamFromPositive(positive) {
+ var negativeGlobs = negatives
+ .filter(indexGreaterThan(positive.index))
+ .map(toGlob)
+ .concat(ignore);
+ return new GlobStream(positive.glob, negativeGlobs, ourOpt);
+ }
+}
+
+function indexGreaterThan(index) {
+ return function(obj) {
+ return obj.index > index;
+ };
+}
+
+function toGlob(obj) {
+ return obj.glob;
+}
+
+module.exports = globStream;
diff --git a/node_modules/glob-stream/package.json b/node_modules/glob-stream/package.json
new file mode 100644
index 0000000..7cd919a
--- /dev/null
+++ b/node_modules/glob-stream/package.json
@@ -0,0 +1,59 @@
+{
+ "name": "glob-stream",
+ "version": "6.1.0",
+ "description": "A Readable Stream interface over node-glob.",
+ "author": "Gulp Team (http://gulpjs.com/)",
+ "contributors": [
+ "Eric Schoffstall ",
+ "Blaine Bublitz "
+ ],
+ "repository": "gulpjs/glob-stream",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "main": "index.js",
+ "files": [
+ "index.js",
+ "readable.js",
+ "LICENSE"
+ ],
+ "scripts": {
+ "lint": "eslint . && jscs index.js readable.js test/",
+ "pretest": "npm run lint",
+ "test": "mocha --async-only",
+ "cover": "istanbul cover _mocha --report lcovonly",
+ "coveralls": "npm run cover && istanbul-coveralls"
+ },
+ "dependencies": {
+ "extend": "^3.0.0",
+ "glob": "^7.1.1",
+ "glob-parent": "^3.1.0",
+ "is-negated-glob": "^1.0.0",
+ "ordered-read-streams": "^1.0.0",
+ "pumpify": "^1.3.5",
+ "readable-stream": "^2.1.5",
+ "remove-trailing-separator": "^1.0.1",
+ "to-absolute-glob": "^2.0.0",
+ "unique-stream": "^2.0.2"
+ },
+ "devDependencies": {
+ "eslint": "^1.10.3",
+ "eslint-config-gulp": "^2.0.0",
+ "expect": "^1.19.0",
+ "istanbul": "^0.4.3",
+ "istanbul-coveralls": "^1.0.3",
+ "jscs": "^2.4.0",
+ "jscs-preset-gulp": "^1.0.0",
+ "mississippi": "^1.2.0",
+ "mocha": "^2.4.5"
+ },
+ "keywords": [
+ "glob",
+ "stream",
+ "gulp",
+ "readable",
+ "fs",
+ "files"
+ ]
+}
diff --git a/node_modules/glob-stream/readable.js b/node_modules/glob-stream/readable.js
new file mode 100644
index 0000000..36cf7b6
--- /dev/null
+++ b/node_modules/glob-stream/readable.js
@@ -0,0 +1,117 @@
+'use strict';
+
+var inherits = require('util').inherits;
+
+var glob = require('glob');
+var extend = require('extend');
+var Readable = require('readable-stream').Readable;
+var globParent = require('glob-parent');
+var toAbsoluteGlob = require('to-absolute-glob');
+var removeTrailingSeparator = require('remove-trailing-separator');
+
+var globErrMessage1 = 'File not found with singular glob: ';
+var globErrMessage2 = ' (if this was purposeful, use `allowEmpty` option)';
+
+function getBasePath(ourGlob, opt) {
+ return globParent(toAbsoluteGlob(ourGlob, opt));
+}
+
+function globIsSingular(glob) {
+ var globSet = glob.minimatch.set;
+ if (globSet.length !== 1) {
+ return false;
+ }
+
+ return globSet[0].every(function isString(value) {
+ return typeof value === 'string';
+ });
+}
+
+function GlobStream(ourGlob, negatives, opt) {
+ if (!(this instanceof GlobStream)) {
+ return new GlobStream(ourGlob, negatives, opt);
+ }
+
+ var ourOpt = extend({}, opt);
+
+ Readable.call(this, {
+ objectMode: true,
+ highWaterMark: ourOpt.highWaterMark || 16,
+ });
+
+ // Delete `highWaterMark` after inheriting from Readable
+ delete ourOpt.highWaterMark;
+
+ var self = this;
+
+ function resolveNegatives(negative) {
+ return toAbsoluteGlob(negative, ourOpt);
+ }
+
+ var ourNegatives = negatives.map(resolveNegatives);
+ ourOpt.ignore = ourNegatives;
+
+ var cwd = ourOpt.cwd;
+ var allowEmpty = ourOpt.allowEmpty || false;
+
+ // Extract base path from glob
+ var basePath = ourOpt.base || getBasePath(ourGlob, ourOpt);
+
+ // Remove path relativity to make globs make sense
+ ourGlob = toAbsoluteGlob(ourGlob, ourOpt);
+ // Delete `root` after all resolving done
+ delete ourOpt.root;
+
+ var globber = new glob.Glob(ourGlob, ourOpt);
+ this._globber = globber;
+
+ var found = false;
+
+ globber.on('match', function(filepath) {
+ found = true;
+ var obj = {
+ cwd: cwd,
+ base: basePath,
+ path: removeTrailingSeparator(filepath),
+ };
+ if (!self.push(obj)) {
+ globber.pause();
+ }
+ });
+
+ globber.once('end', function() {
+ if (allowEmpty !== true && !found && globIsSingular(globber)) {
+ var err = new Error(globErrMessage1 + ourGlob + globErrMessage2);
+
+ return self.destroy(err);
+ }
+
+ self.push(null);
+ });
+
+ function onError(err) {
+ self.destroy(err);
+ }
+
+ globber.once('error', onError);
+}
+inherits(GlobStream, Readable);
+
+GlobStream.prototype._read = function() {
+ this._globber.resume();
+};
+
+GlobStream.prototype.destroy = function(err) {
+ var self = this;
+
+ this._globber.abort();
+
+ process.nextTick(function() {
+ if (err) {
+ self.emit('error', err);
+ }
+ self.emit('close');
+ });
+};
+
+module.exports = GlobStream;
diff --git a/node_modules/glob-watcher/LICENSE b/node_modules/glob-watcher/LICENSE
new file mode 100755
index 0000000..b8fc743
--- /dev/null
+++ b/node_modules/glob-watcher/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other 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.
diff --git a/node_modules/glob-watcher/README.md b/node_modules/glob-watcher/README.md
new file mode 100644
index 0000000..dba40cf
--- /dev/null
+++ b/node_modules/glob-watcher/README.md
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+# glob-watcher
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Watch globs and execute a function upon change, with intelligent defaults for debouncing and queueing.
+
+## Usage
+
+```js
+var watch = require('glob-watcher');
+
+watch(['./*.js', '!./something.js'], function(done){
+ // This function will be called each time a globbed file is changed
+ // but is debounced with a 200ms delay (default) and queues subsequent calls
+
+ // Make sure to signal async completion with the callback
+ // or by returning a stream, promise, observable or child process
+ done();
+
+ // if you need access to the `path` or `stat` object, listen
+ // for the `change` event (see below)
+
+ // if you need to listen to specific events, use the returned
+ // watcher instance (see below)
+});
+
+// Raw chokidar instance
+var watcher = watch(['./*.js', '!./something.js']);
+
+// Listen for the 'change' event to get `path`/`stat`
+// No async completion available because this is the raw chokidar instance
+watcher.on('change', function(path, stat) {
+ // `path` is the path of the changed file
+ // `stat` is an `fs.Stat` object (not always available)
+});
+
+// Listen for other events
+// No async completion available because this is the raw chokidar instance
+watcher.on('add', function(path, stat) {
+ // `path` is the path of the changed file
+ // `stat` is an `fs.Stat` object (not always available)
+});
+```
+
+## API
+
+### `watch(globs[, options][, fn])`
+
+Takes a path string, an array of path strings, a [glob][micromatch] string or an array of [glob][micromatch] strings as `globs` to watch on the filesystem. Also optionally takes `options` to configure the watcher and a `fn` to execute when a file changes.
+
+__Note: As of 5.0.0, globs must use `/` as the separator character because `\\` is reserved for escape sequences (as per the Bash 4.3 & Micromatch specs). This means you can't use `path.join()` or `__dirname` in Windows environments. If you need to use `path.join()`, you can use [normalize-path][normalize-path] against your paths afterwards. If you need to use `__dirname`, you can set it as the `cwd` option that gets passed directly to [chokidar][chokidar]. The [micromatch docs][micromatch-backslashes] contain more information about backslashes.__
+
+Returns an instance of [chokidar][chokidar].
+
+#### `fn([callback])`
+
+If the `fn` is passed, it will be called when the watcher emits a `change`, `add` or `unlink` event. It is automatically debounced with a default delay of 200 milliseconds and subsequent calls will be queued and called upon completion. These defaults can be changed using the `options`.
+
+The `fn` is passed a single argument, `callback`, which is a function that must be called when work in the `fn` is complete. Instead of calling the `callback` function, [async completion][async-completion] can be signalled by:
+ * Returning a `Stream` or `EventEmitter`
+ * Returning a `Child Process`
+ * Returning a `Promise`
+ * Returning an `Observable`
+
+Once async completion is signalled, if another run is queued, it will be executed.
+
+#### `options`
+
+##### `options.ignoreInitial`
+
+If set to `false` the `fn` is called during [chokidar][chokidar] instantiation as it discovers the file paths. Useful if it is desirable to trigger the `fn` during startup.
+
+__Passed through to [chokidar][chokidar], but defaulted to `true` instead of `false`.__
+
+Type: `Boolean`
+
+Default: `true`
+
+##### `options.delay`
+
+The delay to wait before triggering the `fn`. Useful for waiting on many changes before doing the work on changed files, e.g. find-and-replace on many files.
+
+Type: `Number`
+
+Default: `200` (milliseconds)
+
+##### `options.queue`
+
+Whether or not a file change should queue the `fn` execution if the `fn` is already running. Useful for a long running `fn`.
+
+Type: `Boolean`
+
+Default: `true`
+
+##### `options.events`
+
+An event name or array of event names to listen for. Useful if you only need to watch specific events.
+
+Type: `String | Array`
+
+Default: `[ 'add', 'change', 'unlink' ]`
+
+##### other
+
+Options are passed directly to [chokidar][chokidar].
+
+## License
+
+MIT
+
+[micromatch]: https://github.com/micromatch/micromatch
+[normalize-path]: https://www.npmjs.com/package/normalize-path
+[micromatch-backslashes]: https://github.com/micromatch/micromatch#backslashes
+[async-completion]: https://github.com/gulpjs/async-done#completion-and-error-resolution
+[chokidar]: https://github.com/paulmillr/chokidar
+
+[downloads-image]: http://img.shields.io/npm/dm/glob-watcher.svg
+[npm-url]: https://npmjs.com/package/glob-watcher
+[npm-image]: http://img.shields.io/npm/v/glob-watcher.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/glob-watcher
+[travis-image]: http://img.shields.io/travis/gulpjs/glob-watcher.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/glob-watcher
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/glob-watcher.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/glob-watcher
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/glob-watcher/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.png
diff --git a/node_modules/glob-watcher/index.js b/node_modules/glob-watcher/index.js
new file mode 100644
index 0000000..2c51da6
--- /dev/null
+++ b/node_modules/glob-watcher/index.js
@@ -0,0 +1,149 @@
+'use strict';
+
+var chokidar = require('chokidar');
+var debounce = require('just-debounce');
+var asyncDone = require('async-done');
+var defaults = require('object.defaults/immutable');
+var isNegatedGlob = require('is-negated-glob');
+var anymatch = require('anymatch');
+var normalize = require('normalize-path');
+
+var defaultOpts = {
+ delay: 200,
+ events: ['add', 'change', 'unlink'],
+ ignored: [],
+ ignoreInitial: true,
+ queue: true,
+};
+
+function listenerCount(ee, evtName) {
+ if (typeof ee.listenerCount === 'function') {
+ return ee.listenerCount(evtName);
+ }
+
+ return ee.listeners(evtName).length;
+}
+
+function hasErrorListener(ee) {
+ return listenerCount(ee, 'error') !== 0;
+}
+
+function exists(val) {
+ return val != null;
+}
+
+function watch(glob, options, cb) {
+ if (typeof options === 'function') {
+ cb = options;
+ options = {};
+ }
+
+ var opt = defaults(options, defaultOpts);
+
+ if (!Array.isArray(opt.events)) {
+ opt.events = [opt.events];
+ }
+
+ if (Array.isArray(glob)) {
+ // We slice so we don't mutate the passed globs array
+ glob = glob.slice();
+ } else {
+ glob = [glob];
+ }
+
+ var queued = false;
+ var running = false;
+
+ // These use sparse arrays to keep track of the index in the
+ // original globs array
+ var positives = new Array(glob.length);
+ var negatives = new Array(glob.length);
+
+ // Reverse the glob here so we don't end up with a positive
+ // and negative glob in position 0 after a reverse
+ glob.reverse().forEach(sortGlobs);
+
+ function sortGlobs(globString, index) {
+ var result = isNegatedGlob(globString);
+ if (result.negated) {
+ negatives[index] = result.pattern;
+ } else {
+ positives[index] = result.pattern;
+ }
+ }
+
+ var toWatch = positives.filter(exists);
+
+ function joinCwd(glob) {
+ if (glob && opt.cwd) {
+ return normalize(opt.cwd + '/' + glob);
+ }
+
+ return glob;
+ }
+
+ // We only do add our custom `ignored` if there are some negative globs
+ // TODO: I'm not sure how to test this
+ if (negatives.some(exists)) {
+ var normalizedPositives = positives.map(joinCwd);
+ var normalizedNegatives = negatives.map(joinCwd);
+ var shouldBeIgnored = function(path) {
+ var positiveMatch = anymatch(normalizedPositives, path, true);
+ var negativeMatch = anymatch(normalizedNegatives, path, true);
+ // If negativeMatch is -1, that means it was never negated
+ if (negativeMatch === -1) {
+ return false;
+ }
+
+ // If the negative is "less than" the positive, that means
+ // it came later in the glob array before we reversed them
+ return negativeMatch < positiveMatch;
+ };
+
+ opt.ignored = [].concat(opt.ignored, shouldBeIgnored);
+ }
+ var watcher = chokidar.watch(toWatch, opt);
+
+ function runComplete(err) {
+ running = false;
+
+ if (err && hasErrorListener(watcher)) {
+ watcher.emit('error', err);
+ }
+
+ // If we have a run queued, start onChange again
+ if (queued) {
+ queued = false;
+ onChange();
+ }
+ }
+
+ function onChange() {
+ if (running) {
+ if (opt.queue) {
+ queued = true;
+ }
+ return;
+ }
+
+ running = true;
+ asyncDone(cb, runComplete);
+ }
+
+ var fn;
+ if (typeof cb === 'function') {
+ fn = debounce(onChange, opt.delay);
+ }
+
+ function watchEvent(eventName) {
+ watcher.on(eventName, fn);
+ }
+
+ if (fn) {
+ opt.events.forEach(watchEvent);
+ }
+
+ return watcher;
+}
+
+module.exports = watch;
diff --git a/node_modules/glob-watcher/package.json b/node_modules/glob-watcher/package.json
new file mode 100644
index 0000000..d934112
--- /dev/null
+++ b/node_modules/glob-watcher/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "glob-watcher",
+ "version": "5.0.5",
+ "description": "Watch globs and execute a function upon change, with intelligent defaults for debouncing and queueing.",
+ "author": "Gulp Team (http://gulpjs.com/)",
+ "contributors": [],
+ "repository": "gulpjs/glob-watcher",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "main": "index.js",
+ "files": [
+ "index.js"
+ ],
+ "scripts": {
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "test": "mocha --async-only",
+ "cover": "istanbul cover _mocha --report lcovonly",
+ "coveralls": "npm run cover && istanbul-coveralls"
+ },
+ "dependencies": {
+ "anymatch": "^2.0.0",
+ "async-done": "^1.2.0",
+ "chokidar": "^2.0.0",
+ "is-negated-glob": "^1.0.0",
+ "just-debounce": "^1.0.0",
+ "normalize-path": "^3.0.0",
+ "object.defaults": "^1.1.0"
+ },
+ "devDependencies": {
+ "coveralls": "^2.11.2",
+ "eslint": "^2.13.1",
+ "eslint-config-gulp": "^3.0.1",
+ "expect": "^1.16.0",
+ "istanbul": "^0.4.0",
+ "istanbul-coveralls": "^1.0.1",
+ "mocha": "^2.0.0",
+ "mocha-lcov-reporter": "^1.2.0",
+ "rimraf": "^2.6.1",
+ "through2": "^2.0.1"
+ },
+ "keywords": [
+ "watch",
+ "glob",
+ "async",
+ "queue",
+ "debounce",
+ "callback"
+ ]
+}
diff --git a/node_modules/glob/LICENSE b/node_modules/glob/LICENSE
new file mode 100644
index 0000000..42ca266
--- /dev/null
+++ b/node_modules/glob/LICENSE
@@ -0,0 +1,21 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+## Glob Logo
+
+Glob's logo created by Tanya Brassie , licensed
+under a Creative Commons Attribution-ShareAlike 4.0 International License
+https://creativecommons.org/licenses/by-sa/4.0/
diff --git a/node_modules/glob/README.md b/node_modules/glob/README.md
new file mode 100644
index 0000000..83f0c83
--- /dev/null
+++ b/node_modules/glob/README.md
@@ -0,0 +1,378 @@
+# Glob
+
+Match files using the patterns the shell uses, like stars and stuff.
+
+[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Build Status](https://ci.appveyor.com/api/projects/status/kd7f3yftf7unxlsx?svg=true)](https://ci.appveyor.com/project/isaacs/node-glob) [![Coverage Status](https://coveralls.io/repos/isaacs/node-glob/badge.svg?branch=master&service=github)](https://coveralls.io/github/isaacs/node-glob?branch=master)
+
+This is a glob implementation in JavaScript. It uses the `minimatch`
+library to do its matching.
+
+![a fun cartoon logo made of glob characters](logo/glob.png)
+
+## Usage
+
+Install with npm
+
+```
+npm i glob
+```
+
+```javascript
+var glob = require("glob")
+
+// options is optional
+glob("**/*.js", options, function (er, files) {
+ // files is an array of filenames.
+ // If the `nonull` option is set, and nothing
+ // was found, then files is ["**/*.js"]
+ // er is an error object or null.
+})
+```
+
+## Glob Primer
+
+"Globs" are the patterns you type when you do stuff like `ls *.js` on
+the command line, or put `build/*` in a `.gitignore` file.
+
+Before parsing the path part patterns, braced sections are expanded
+into a set. Braced sections start with `{` and end with `}`, with any
+number of comma-delimited sections within. Braced sections may contain
+slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`.
+
+The following characters have special magic meaning when used in a
+path portion:
+
+* `*` Matches 0 or more characters in a single path portion
+* `?` Matches 1 character
+* `[...]` Matches a range of characters, similar to a RegExp range.
+ If the first character of the range is `!` or `^` then it matches
+ any character not in the range.
+* `!(pattern|pattern|pattern)` Matches anything that does not match
+ any of the patterns provided.
+* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the
+ patterns provided.
+* `+(pattern|pattern|pattern)` Matches one or more occurrences of the
+ patterns provided.
+* `*(a|b|c)` Matches zero or more occurrences of the patterns provided
+* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns
+ provided
+* `**` If a "globstar" is alone in a path portion, then it matches
+ zero or more directories and subdirectories searching for matches.
+ It does not crawl symlinked directories.
+
+### Dots
+
+If a file or directory path portion has a `.` as the first character,
+then it will not match any glob pattern unless that pattern's
+corresponding path part also has a `.` as its first character.
+
+For example, the pattern `a/.*/c` would match the file at `a/.b/c`.
+However the pattern `a/*/c` would not, because `*` does not start with
+a dot character.
+
+You can make glob treat dots as normal characters by setting
+`dot:true` in the options.
+
+### Basename Matching
+
+If you set `matchBase:true` in the options, and the pattern has no
+slashes in it, then it will seek for any file anywhere in the tree
+with a matching basename. For example, `*.js` would match
+`test/simple/basic.js`.
+
+### Empty Sets
+
+If no matching files are found, then an empty array is returned. This
+differs from the shell, where the pattern itself is returned. For
+example:
+
+ $ echo a*s*d*f
+ a*s*d*f
+
+To get the bash-style behavior, set the `nonull:true` in the options.
+
+### See Also:
+
+* `man sh`
+* `man bash` (Search for "Pattern Matching")
+* `man 3 fnmatch`
+* `man 5 gitignore`
+* [minimatch documentation](https://github.com/isaacs/minimatch)
+
+## glob.hasMagic(pattern, [options])
+
+Returns `true` if there are any special characters in the pattern, and
+`false` otherwise.
+
+Note that the options affect the results. If `noext:true` is set in
+the options object, then `+(a|b)` will not be considered a magic
+pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}`
+then that is considered magical, unless `nobrace:true` is set in the
+options.
+
+## glob(pattern, [options], cb)
+
+* `pattern` `{String}` Pattern to be matched
+* `options` `{Object}`
+* `cb` `{Function}`
+ * `err` `{Error | null}`
+ * `matches` `{Array}` filenames found matching the pattern
+
+Perform an asynchronous glob search.
+
+## glob.sync(pattern, [options])
+
+* `pattern` `{String}` Pattern to be matched
+* `options` `{Object}`
+* return: `{Array}` filenames found matching the pattern
+
+Perform a synchronous glob search.
+
+## Class: glob.Glob
+
+Create a Glob object by instantiating the `glob.Glob` class.
+
+```javascript
+var Glob = require("glob").Glob
+var mg = new Glob(pattern, options, cb)
+```
+
+It's an EventEmitter, and starts walking the filesystem to find matches
+immediately.
+
+### new glob.Glob(pattern, [options], [cb])
+
+* `pattern` `{String}` pattern to search for
+* `options` `{Object}`
+* `cb` `{Function}` Called when an error occurs, or matches are found
+ * `err` `{Error | null}`
+ * `matches` `{Array}` filenames found matching the pattern
+
+Note that if the `sync` flag is set in the options, then matches will
+be immediately available on the `g.found` member.
+
+### Properties
+
+* `minimatch` The minimatch object that the glob uses.
+* `options` The options object passed in.
+* `aborted` Boolean which is set to true when calling `abort()`. There
+ is no way at this time to continue a glob search after aborting, but
+ you can re-use the statCache to avoid having to duplicate syscalls.
+* `cache` Convenience object. Each field has the following possible
+ values:
+ * `false` - Path does not exist
+ * `true` - Path exists
+ * `'FILE'` - Path exists, and is not a directory
+ * `'DIR'` - Path exists, and is a directory
+ * `[file, entries, ...]` - Path exists, is a directory, and the
+ array value is the results of `fs.readdir`
+* `statCache` Cache of `fs.stat` results, to prevent statting the same
+ path multiple times.
+* `symlinks` A record of which paths are symbolic links, which is
+ relevant in resolving `**` patterns.
+* `realpathCache` An optional object which is passed to `fs.realpath`
+ to minimize unnecessary syscalls. It is stored on the instantiated
+ Glob object, and may be re-used.
+
+### Events
+
+* `end` When the matching is finished, this is emitted with all the
+ matches found. If the `nonull` option is set, and no match was found,
+ then the `matches` list contains the original pattern. The matches
+ are sorted, unless the `nosort` flag is set.
+* `match` Every time a match is found, this is emitted with the specific
+ thing that matched. It is not deduplicated or resolved to a realpath.
+* `error` Emitted when an unexpected error is encountered, or whenever
+ any fs error occurs if `options.strict` is set.
+* `abort` When `abort()` is called, this event is raised.
+
+### Methods
+
+* `pause` Temporarily stop the search
+* `resume` Resume the search
+* `abort` Stop the search forever
+
+### Options
+
+All the options that can be passed to Minimatch can also be passed to
+Glob to change pattern matching behavior. Also, some have been added,
+or have glob-specific ramifications.
+
+All options are false by default, unless otherwise noted.
+
+All options are added to the Glob object, as well.
+
+If you are running many `glob` operations, you can pass a Glob object
+as the `options` argument to a subsequent operation to shortcut some
+`stat` and `readdir` calls. At the very least, you may pass in shared
+`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that
+parallel glob operations will be sped up by sharing information about
+the filesystem.
+
+* `cwd` The current working directory in which to search. Defaults
+ to `process.cwd()`.
+* `root` The place where patterns starting with `/` will be mounted
+ onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix
+ systems, and `C:\` or some such on Windows.)
+* `dot` Include `.dot` files in normal matches and `globstar` matches.
+ Note that an explicit dot in a portion of the pattern will always
+ match dot files.
+* `nomount` By default, a pattern starting with a forward-slash will be
+ "mounted" onto the root setting, so that a valid filesystem path is
+ returned. Set this flag to disable that behavior.
+* `mark` Add a `/` character to directory matches. Note that this
+ requires additional stat calls.
+* `nosort` Don't sort the results.
+* `stat` Set to true to stat *all* results. This reduces performance
+ somewhat, and is completely unnecessary, unless `readdir` is presumed
+ to be an untrustworthy indicator of file existence.
+* `silent` When an unusual error is encountered when attempting to
+ read a directory, a warning will be printed to stderr. Set the
+ `silent` option to true to suppress these warnings.
+* `strict` When an unusual error is encountered when attempting to
+ read a directory, the process will just continue on in search of
+ other matches. Set the `strict` option to raise an error in these
+ cases.
+* `cache` See `cache` property above. Pass in a previously generated
+ cache object to save some fs calls.
+* `statCache` A cache of results of filesystem information, to prevent
+ unnecessary stat calls. While it should not normally be necessary
+ to set this, you may pass the statCache from one glob() call to the
+ options object of another, if you know that the filesystem will not
+ change between calls. (See "Race Conditions" below.)
+* `symlinks` A cache of known symbolic links. You may pass in a
+ previously generated `symlinks` object to save `lstat` calls when
+ resolving `**` matches.
+* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead.
+* `nounique` In some cases, brace-expanded patterns can result in the
+ same file showing up multiple times in the result set. By default,
+ this implementation prevents duplicates in the result set. Set this
+ flag to disable that behavior.
+* `nonull` Set to never return an empty set, instead returning a set
+ containing the pattern itself. This is the default in glob(3).
+* `debug` Set to enable debug logging in minimatch and glob.
+* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets.
+* `noglobstar` Do not match `**` against multiple filenames. (Ie,
+ treat it as a normal `*` instead.)
+* `noext` Do not match `+(a|b)` "extglob" patterns.
+* `nocase` Perform a case-insensitive match. Note: on
+ case-insensitive filesystems, non-magic patterns will match by
+ default, since `stat` and `readdir` will not raise errors.
+* `matchBase` Perform a basename-only match if the pattern does not
+ contain any slash characters. That is, `*.js` would be treated as
+ equivalent to `**/*.js`, matching all js files in all directories.
+* `nodir` Do not match directories, only files. (Note: to match
+ *only* directories, simply put a `/` at the end of the pattern.)
+* `ignore` Add a pattern or an array of glob patterns to exclude matches.
+ Note: `ignore` patterns are *always* in `dot:true` mode, regardless
+ of any other settings.
+* `follow` Follow symlinked directories when expanding `**` patterns.
+ Note that this can result in a lot of duplicate references in the
+ presence of cyclic links.
+* `realpath` Set to true to call `fs.realpath` on all of the results.
+ In the case of a symlink that cannot be resolved, the full absolute
+ path to the matched entry is returned (though it will usually be a
+ broken symlink)
+* `absolute` Set to true to always receive absolute paths for matched
+ files. Unlike `realpath`, this also affects the values returned in
+ the `match` event.
+* `fs` File-system object with Node's `fs` API. By default, the built-in
+ `fs` module will be used. Set to a volume provided by a library like
+ `memfs` to avoid using the "real" file-system.
+
+## Comparisons to other fnmatch/glob implementations
+
+While strict compliance with the existing standards is a worthwhile
+goal, some discrepancies exist between node-glob and other
+implementations, and are intentional.
+
+The double-star character `**` is supported by default, unless the
+`noglobstar` flag is set. This is supported in the manner of bsdglob
+and bash 4.3, where `**` only has special significance if it is the only
+thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
+`a/**b` will not.
+
+Note that symlinked directories are not crawled as part of a `**`,
+though their contents may match against subsequent portions of the
+pattern. This prevents infinite loops and duplicates and the like.
+
+If an escaped pattern has no matches, and the `nonull` flag is set,
+then glob returns the pattern as-provided, rather than
+interpreting the character escapes. For example,
+`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
+`"*a?"`. This is akin to setting the `nullglob` option in bash, except
+that it does not resolve escaped pattern characters.
+
+If brace expansion is not disabled, then it is performed before any
+other interpretation of the glob pattern. Thus, a pattern like
+`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
+**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
+checked for validity. Since those two are valid, matching proceeds.
+
+### Comments and Negation
+
+Previously, this module let you mark a pattern as a "comment" if it
+started with a `#` character, or a "negated" pattern if it started
+with a `!` character.
+
+These options were deprecated in version 5, and removed in version 6.
+
+To specify things that should not match, use the `ignore` option.
+
+## Windows
+
+**Please only use forward-slashes in glob expressions.**
+
+Though windows uses either `/` or `\` as its path separator, only `/`
+characters are used by this glob implementation. You must use
+forward-slashes **only** in glob expressions. Back-slashes will always
+be interpreted as escape characters, not path separators.
+
+Results from absolute patterns such as `/foo/*` are mounted onto the
+root setting using `path.join`. On windows, this will by default result
+in `/foo/*` matching `C:\foo\bar.txt`.
+
+## Race Conditions
+
+Glob searching, by its very nature, is susceptible to race conditions,
+since it relies on directory walking and such.
+
+As a result, it is possible that a file that exists when glob looks for
+it may have been deleted or modified by the time it returns the result.
+
+As part of its internal implementation, this program caches all stat
+and readdir calls that it makes, in order to cut down on system
+overhead. However, this also makes it even more susceptible to races,
+especially if the cache or statCache objects are reused between glob
+calls.
+
+Users are thus advised not to use a glob result as a guarantee of
+filesystem state in the face of rapid changes. For the vast majority
+of operations, this is never a problem.
+
+## Glob Logo
+Glob's logo was created by [Tanya Brassie](http://tanyabrassie.com/). Logo files can be found [here](https://github.com/isaacs/node-glob/tree/master/logo).
+
+The logo is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/).
+
+## Contributing
+
+Any change to behavior (including bugfixes) must come with a test.
+
+Patches that fail tests or reduce performance will be rejected.
+
+```
+# to run tests
+npm test
+
+# to re-generate test fixtures
+npm run test-regen
+
+# to benchmark against bash/zsh
+npm run bench
+
+# to profile javascript
+npm run prof
+```
+
+![](oh-my-glob.gif)
diff --git a/node_modules/glob/common.js b/node_modules/glob/common.js
new file mode 100644
index 0000000..424c46e
--- /dev/null
+++ b/node_modules/glob/common.js
@@ -0,0 +1,238 @@
+exports.setopts = setopts
+exports.ownProp = ownProp
+exports.makeAbs = makeAbs
+exports.finish = finish
+exports.mark = mark
+exports.isIgnored = isIgnored
+exports.childrenIgnored = childrenIgnored
+
+function ownProp (obj, field) {
+ return Object.prototype.hasOwnProperty.call(obj, field)
+}
+
+var fs = require("fs")
+var path = require("path")
+var minimatch = require("minimatch")
+var isAbsolute = require("path-is-absolute")
+var Minimatch = minimatch.Minimatch
+
+function alphasort (a, b) {
+ return a.localeCompare(b, 'en')
+}
+
+function setupIgnores (self, options) {
+ self.ignore = options.ignore || []
+
+ if (!Array.isArray(self.ignore))
+ self.ignore = [self.ignore]
+
+ if (self.ignore.length) {
+ self.ignore = self.ignore.map(ignoreMap)
+ }
+}
+
+// ignore patterns are always in dot:true mode.
+function ignoreMap (pattern) {
+ var gmatcher = null
+ if (pattern.slice(-3) === '/**') {
+ var gpattern = pattern.replace(/(\/\*\*)+$/, '')
+ gmatcher = new Minimatch(gpattern, { dot: true })
+ }
+
+ return {
+ matcher: new Minimatch(pattern, { dot: true }),
+ gmatcher: gmatcher
+ }
+}
+
+function setopts (self, pattern, options) {
+ if (!options)
+ options = {}
+
+ // base-matching: just use globstar for that.
+ if (options.matchBase && -1 === pattern.indexOf("/")) {
+ if (options.noglobstar) {
+ throw new Error("base matching requires globstar")
+ }
+ pattern = "**/" + pattern
+ }
+
+ self.silent = !!options.silent
+ self.pattern = pattern
+ self.strict = options.strict !== false
+ self.realpath = !!options.realpath
+ self.realpathCache = options.realpathCache || Object.create(null)
+ self.follow = !!options.follow
+ self.dot = !!options.dot
+ self.mark = !!options.mark
+ self.nodir = !!options.nodir
+ if (self.nodir)
+ self.mark = true
+ self.sync = !!options.sync
+ self.nounique = !!options.nounique
+ self.nonull = !!options.nonull
+ self.nosort = !!options.nosort
+ self.nocase = !!options.nocase
+ self.stat = !!options.stat
+ self.noprocess = !!options.noprocess
+ self.absolute = !!options.absolute
+ self.fs = options.fs || fs
+
+ self.maxLength = options.maxLength || Infinity
+ self.cache = options.cache || Object.create(null)
+ self.statCache = options.statCache || Object.create(null)
+ self.symlinks = options.symlinks || Object.create(null)
+
+ setupIgnores(self, options)
+
+ self.changedCwd = false
+ var cwd = process.cwd()
+ if (!ownProp(options, "cwd"))
+ self.cwd = cwd
+ else {
+ self.cwd = path.resolve(options.cwd)
+ self.changedCwd = self.cwd !== cwd
+ }
+
+ self.root = options.root || path.resolve(self.cwd, "/")
+ self.root = path.resolve(self.root)
+ if (process.platform === "win32")
+ self.root = self.root.replace(/\\/g, "/")
+
+ // TODO: is an absolute `cwd` supposed to be resolved against `root`?
+ // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test')
+ self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd)
+ if (process.platform === "win32")
+ self.cwdAbs = self.cwdAbs.replace(/\\/g, "/")
+ self.nomount = !!options.nomount
+
+ // disable comments and negation in Minimatch.
+ // Note that they are not supported in Glob itself anyway.
+ options.nonegate = true
+ options.nocomment = true
+ // always treat \ in patterns as escapes, not path separators
+ options.allowWindowsEscape = false
+
+ self.minimatch = new Minimatch(pattern, options)
+ self.options = self.minimatch.options
+}
+
+function finish (self) {
+ var nou = self.nounique
+ var all = nou ? [] : Object.create(null)
+
+ for (var i = 0, l = self.matches.length; i < l; i ++) {
+ var matches = self.matches[i]
+ if (!matches || Object.keys(matches).length === 0) {
+ if (self.nonull) {
+ // do like the shell, and spit out the literal glob
+ var literal = self.minimatch.globSet[i]
+ if (nou)
+ all.push(literal)
+ else
+ all[literal] = true
+ }
+ } else {
+ // had matches
+ var m = Object.keys(matches)
+ if (nou)
+ all.push.apply(all, m)
+ else
+ m.forEach(function (m) {
+ all[m] = true
+ })
+ }
+ }
+
+ if (!nou)
+ all = Object.keys(all)
+
+ if (!self.nosort)
+ all = all.sort(alphasort)
+
+ // at *some* point we statted all of these
+ if (self.mark) {
+ for (var i = 0; i < all.length; i++) {
+ all[i] = self._mark(all[i])
+ }
+ if (self.nodir) {
+ all = all.filter(function (e) {
+ var notDir = !(/\/$/.test(e))
+ var c = self.cache[e] || self.cache[makeAbs(self, e)]
+ if (notDir && c)
+ notDir = c !== 'DIR' && !Array.isArray(c)
+ return notDir
+ })
+ }
+ }
+
+ if (self.ignore.length)
+ all = all.filter(function(m) {
+ return !isIgnored(self, m)
+ })
+
+ self.found = all
+}
+
+function mark (self, p) {
+ var abs = makeAbs(self, p)
+ var c = self.cache[abs]
+ var m = p
+ if (c) {
+ var isDir = c === 'DIR' || Array.isArray(c)
+ var slash = p.slice(-1) === '/'
+
+ if (isDir && !slash)
+ m += '/'
+ else if (!isDir && slash)
+ m = m.slice(0, -1)
+
+ if (m !== p) {
+ var mabs = makeAbs(self, m)
+ self.statCache[mabs] = self.statCache[abs]
+ self.cache[mabs] = self.cache[abs]
+ }
+ }
+
+ return m
+}
+
+// lotta situps...
+function makeAbs (self, f) {
+ var abs = f
+ if (f.charAt(0) === '/') {
+ abs = path.join(self.root, f)
+ } else if (isAbsolute(f) || f === '') {
+ abs = f
+ } else if (self.changedCwd) {
+ abs = path.resolve(self.cwd, f)
+ } else {
+ abs = path.resolve(f)
+ }
+
+ if (process.platform === 'win32')
+ abs = abs.replace(/\\/g, '/')
+
+ return abs
+}
+
+
+// Return true, if pattern ends with globstar '**', for the accompanying parent directory.
+// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents
+function isIgnored (self, path) {
+ if (!self.ignore.length)
+ return false
+
+ return self.ignore.some(function(item) {
+ return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path))
+ })
+}
+
+function childrenIgnored (self, path) {
+ if (!self.ignore.length)
+ return false
+
+ return self.ignore.some(function(item) {
+ return !!(item.gmatcher && item.gmatcher.match(path))
+ })
+}
diff --git a/node_modules/glob/glob.js b/node_modules/glob/glob.js
new file mode 100644
index 0000000..37a4d7e
--- /dev/null
+++ b/node_modules/glob/glob.js
@@ -0,0 +1,790 @@
+// Approach:
+//
+// 1. Get the minimatch set
+// 2. For each pattern in the set, PROCESS(pattern, false)
+// 3. Store matches per-set, then uniq them
+//
+// PROCESS(pattern, inGlobStar)
+// Get the first [n] items from pattern that are all strings
+// Join these together. This is PREFIX.
+// If there is no more remaining, then stat(PREFIX) and
+// add to matches if it succeeds. END.
+//
+// If inGlobStar and PREFIX is symlink and points to dir
+// set ENTRIES = []
+// else readdir(PREFIX) as ENTRIES
+// If fail, END
+//
+// with ENTRIES
+// If pattern[n] is GLOBSTAR
+// // handle the case where the globstar match is empty
+// // by pruning it out, and testing the resulting pattern
+// PROCESS(pattern[0..n] + pattern[n+1 .. $], false)
+// // handle other cases.
+// for ENTRY in ENTRIES (not dotfiles)
+// // attach globstar + tail onto the entry
+// // Mark that this entry is a globstar match
+// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true)
+//
+// else // not globstar
+// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot)
+// Test ENTRY against pattern[n]
+// If fails, continue
+// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $])
+//
+// Caveat:
+// Cache all stats and readdirs results to minimize syscall. Since all
+// we ever care about is existence and directory-ness, we can just keep
+// `true` for files, and [children,...] for directories, or `false` for
+// things that don't exist.
+
+module.exports = glob
+
+var rp = require('fs.realpath')
+var minimatch = require('minimatch')
+var Minimatch = minimatch.Minimatch
+var inherits = require('inherits')
+var EE = require('events').EventEmitter
+var path = require('path')
+var assert = require('assert')
+var isAbsolute = require('path-is-absolute')
+var globSync = require('./sync.js')
+var common = require('./common.js')
+var setopts = common.setopts
+var ownProp = common.ownProp
+var inflight = require('inflight')
+var util = require('util')
+var childrenIgnored = common.childrenIgnored
+var isIgnored = common.isIgnored
+
+var once = require('once')
+
+function glob (pattern, options, cb) {
+ if (typeof options === 'function') cb = options, options = {}
+ if (!options) options = {}
+
+ if (options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return globSync(pattern, options)
+ }
+
+ return new Glob(pattern, options, cb)
+}
+
+glob.sync = globSync
+var GlobSync = glob.GlobSync = globSync.GlobSync
+
+// old api surface
+glob.glob = glob
+
+function extend (origin, add) {
+ if (add === null || typeof add !== 'object') {
+ return origin
+ }
+
+ var keys = Object.keys(add)
+ var i = keys.length
+ while (i--) {
+ origin[keys[i]] = add[keys[i]]
+ }
+ return origin
+}
+
+glob.hasMagic = function (pattern, options_) {
+ var options = extend({}, options_)
+ options.noprocess = true
+
+ var g = new Glob(pattern, options)
+ var set = g.minimatch.set
+
+ if (!pattern)
+ return false
+
+ if (set.length > 1)
+ return true
+
+ for (var j = 0; j < set[0].length; j++) {
+ if (typeof set[0][j] !== 'string')
+ return true
+ }
+
+ return false
+}
+
+glob.Glob = Glob
+inherits(Glob, EE)
+function Glob (pattern, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = null
+ }
+
+ if (options && options.sync) {
+ if (cb)
+ throw new TypeError('callback provided to sync glob')
+ return new GlobSync(pattern, options)
+ }
+
+ if (!(this instanceof Glob))
+ return new Glob(pattern, options, cb)
+
+ setopts(this, pattern, options)
+ this._didRealPath = false
+
+ // process each pattern in the minimatch set
+ var n = this.minimatch.set.length
+
+ // The matches are stored as {: true,...} so that
+ // duplicates are automagically pruned.
+ // Later, we do an Object.keys() on these.
+ // Keep them as a list so we can fill in when nonull is set.
+ this.matches = new Array(n)
+
+ if (typeof cb === 'function') {
+ cb = once(cb)
+ this.on('error', cb)
+ this.on('end', function (matches) {
+ cb(null, matches)
+ })
+ }
+
+ var self = this
+ this._processing = 0
+
+ this._emitQueue = []
+ this._processQueue = []
+ this.paused = false
+
+ if (this.noprocess)
+ return this
+
+ if (n === 0)
+ return done()
+
+ var sync = true
+ for (var i = 0; i < n; i ++) {
+ this._process(this.minimatch.set[i], i, false, done)
+ }
+ sync = false
+
+ function done () {
+ --self._processing
+ if (self._processing <= 0) {
+ if (sync) {
+ process.nextTick(function () {
+ self._finish()
+ })
+ } else {
+ self._finish()
+ }
+ }
+ }
+}
+
+Glob.prototype._finish = function () {
+ assert(this instanceof Glob)
+ if (this.aborted)
+ return
+
+ if (this.realpath && !this._didRealpath)
+ return this._realpath()
+
+ common.finish(this)
+ this.emit('end', this.found)
+}
+
+Glob.prototype._realpath = function () {
+ if (this._didRealpath)
+ return
+
+ this._didRealpath = true
+
+ var n = this.matches.length
+ if (n === 0)
+ return this._finish()
+
+ var self = this
+ for (var i = 0; i < this.matches.length; i++)
+ this._realpathSet(i, next)
+
+ function next () {
+ if (--n === 0)
+ self._finish()
+ }
+}
+
+Glob.prototype._realpathSet = function (index, cb) {
+ var matchset = this.matches[index]
+ if (!matchset)
+ return cb()
+
+ var found = Object.keys(matchset)
+ var self = this
+ var n = found.length
+
+ if (n === 0)
+ return cb()
+
+ var set = this.matches[index] = Object.create(null)
+ found.forEach(function (p, i) {
+ // If there's a problem with the stat, then it means that
+ // one or more of the links in the realpath couldn't be
+ // resolved. just return the abs value in that case.
+ p = self._makeAbs(p)
+ rp.realpath(p, self.realpathCache, function (er, real) {
+ if (!er)
+ set[real] = true
+ else if (er.syscall === 'stat')
+ set[p] = true
+ else
+ self.emit('error', er) // srsly wtf right here
+
+ if (--n === 0) {
+ self.matches[index] = set
+ cb()
+ }
+ })
+ })
+}
+
+Glob.prototype._mark = function (p) {
+ return common.mark(this, p)
+}
+
+Glob.prototype._makeAbs = function (f) {
+ return common.makeAbs(this, f)
+}
+
+Glob.prototype.abort = function () {
+ this.aborted = true
+ this.emit('abort')
+}
+
+Glob.prototype.pause = function () {
+ if (!this.paused) {
+ this.paused = true
+ this.emit('pause')
+ }
+}
+
+Glob.prototype.resume = function () {
+ if (this.paused) {
+ this.emit('resume')
+ this.paused = false
+ if (this._emitQueue.length) {
+ var eq = this._emitQueue.slice(0)
+ this._emitQueue.length = 0
+ for (var i = 0; i < eq.length; i ++) {
+ var e = eq[i]
+ this._emitMatch(e[0], e[1])
+ }
+ }
+ if (this._processQueue.length) {
+ var pq = this._processQueue.slice(0)
+ this._processQueue.length = 0
+ for (var i = 0; i < pq.length; i ++) {
+ var p = pq[i]
+ this._processing--
+ this._process(p[0], p[1], p[2], p[3])
+ }
+ }
+ }
+}
+
+Glob.prototype._process = function (pattern, index, inGlobStar, cb) {
+ assert(this instanceof Glob)
+ assert(typeof cb === 'function')
+
+ if (this.aborted)
+ return
+
+ this._processing++
+ if (this.paused) {
+ this._processQueue.push([pattern, index, inGlobStar, cb])
+ return
+ }
+
+ //console.error('PROCESS %d', this._processing, pattern)
+
+ // Get the first [n] parts of pattern that are all strings.
+ var n = 0
+ while (typeof pattern[n] === 'string') {
+ n ++
+ }
+ // now n is the index of the first one that is *not* a string.
+
+ // see if there's anything else
+ var prefix
+ switch (n) {
+ // if not, then this is rather simple
+ case pattern.length:
+ this._processSimple(pattern.join('/'), index, cb)
+ return
+
+ case 0:
+ // pattern *starts* with some non-trivial item.
+ // going to readdir(cwd), but not include the prefix in matches.
+ prefix = null
+ break
+
+ default:
+ // pattern has some string bits in the front.
+ // whatever it starts with, whether that's 'absolute' like /foo/bar,
+ // or 'relative' like '../baz'
+ prefix = pattern.slice(0, n).join('/')
+ break
+ }
+
+ var remain = pattern.slice(n)
+
+ // get the list of entries.
+ var read
+ if (prefix === null)
+ read = '.'
+ else if (isAbsolute(prefix) ||
+ isAbsolute(pattern.map(function (p) {
+ return typeof p === 'string' ? p : '[*]'
+ }).join('/'))) {
+ if (!prefix || !isAbsolute(prefix))
+ prefix = '/' + prefix
+ read = prefix
+ } else
+ read = prefix
+
+ var abs = this._makeAbs(read)
+
+ //if ignored, skip _processing
+ if (childrenIgnored(this, read))
+ return cb()
+
+ var isGlobStar = remain[0] === minimatch.GLOBSTAR
+ if (isGlobStar)
+ this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb)
+ else
+ this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb)
+}
+
+Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) {
+ var self = this
+ this._readdir(abs, inGlobStar, function (er, entries) {
+ return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
+ })
+}
+
+Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
+
+ // if the abs isn't a dir, then nothing can match!
+ if (!entries)
+ return cb()
+
+ // It will only match dot entries if it starts with a dot, or if
+ // dot is set. Stuff like @(.foo|.bar) isn't allowed.
+ var pn = remain[0]
+ var negate = !!this.minimatch.negate
+ var rawGlob = pn._glob
+ var dotOk = this.dot || rawGlob.charAt(0) === '.'
+
+ var matchedEntries = []
+ for (var i = 0; i < entries.length; i++) {
+ var e = entries[i]
+ if (e.charAt(0) !== '.' || dotOk) {
+ var m
+ if (negate && !prefix) {
+ m = !e.match(pn)
+ } else {
+ m = e.match(pn)
+ }
+ if (m)
+ matchedEntries.push(e)
+ }
+ }
+
+ //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries)
+
+ var len = matchedEntries.length
+ // If there are no matched entries, then nothing matches.
+ if (len === 0)
+ return cb()
+
+ // if this is the last remaining pattern bit, then no need for
+ // an additional stat *unless* the user has specified mark or
+ // stat explicitly. We know they exist, since readdir returned
+ // them.
+
+ if (remain.length === 1 && !this.mark && !this.stat) {
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ if (prefix) {
+ if (prefix !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+
+ if (e.charAt(0) === '/' && !this.nomount) {
+ e = path.join(this.root, e)
+ }
+ this._emitMatch(index, e)
+ }
+ // This was the last one, and no stats were needed
+ return cb()
+ }
+
+ // now test all matched entries as stand-ins for that part
+ // of the pattern.
+ remain.shift()
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ var newPattern
+ if (prefix) {
+ if (prefix !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+ this._process([e].concat(remain), index, inGlobStar, cb)
+ }
+ cb()
+}
+
+Glob.prototype._emitMatch = function (index, e) {
+ if (this.aborted)
+ return
+
+ if (isIgnored(this, e))
+ return
+
+ if (this.paused) {
+ this._emitQueue.push([index, e])
+ return
+ }
+
+ var abs = isAbsolute(e) ? e : this._makeAbs(e)
+
+ if (this.mark)
+ e = this._mark(e)
+
+ if (this.absolute)
+ e = abs
+
+ if (this.matches[index][e])
+ return
+
+ if (this.nodir) {
+ var c = this.cache[abs]
+ if (c === 'DIR' || Array.isArray(c))
+ return
+ }
+
+ this.matches[index][e] = true
+
+ var st = this.statCache[abs]
+ if (st)
+ this.emit('stat', e, st)
+
+ this.emit('match', e)
+}
+
+Glob.prototype._readdirInGlobStar = function (abs, cb) {
+ if (this.aborted)
+ return
+
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false, cb)
+
+ var lstatkey = 'lstat\0' + abs
+ var self = this
+ var lstatcb = inflight(lstatkey, lstatcb_)
+
+ if (lstatcb)
+ self.fs.lstat(abs, lstatcb)
+
+ function lstatcb_ (er, lstat) {
+ if (er && er.code === 'ENOENT')
+ return cb()
+
+ var isSym = lstat && lstat.isSymbolicLink()
+ self.symlinks[abs] = isSym
+
+ // If it's not a symlink or a dir, then it's definitely a regular file.
+ // don't bother doing a readdir in that case.
+ if (!isSym && lstat && !lstat.isDirectory()) {
+ self.cache[abs] = 'FILE'
+ cb()
+ } else
+ self._readdir(abs, false, cb)
+ }
+}
+
+Glob.prototype._readdir = function (abs, inGlobStar, cb) {
+ if (this.aborted)
+ return
+
+ cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb)
+ if (!cb)
+ return
+
+ //console.error('RD %j %j', +inGlobStar, abs)
+ if (inGlobStar && !ownProp(this.symlinks, abs))
+ return this._readdirInGlobStar(abs, cb)
+
+ if (ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+ if (!c || c === 'FILE')
+ return cb()
+
+ if (Array.isArray(c))
+ return cb(null, c)
+ }
+
+ var self = this
+ self.fs.readdir(abs, readdirCb(this, abs, cb))
+}
+
+function readdirCb (self, abs, cb) {
+ return function (er, entries) {
+ if (er)
+ self._readdirError(abs, er, cb)
+ else
+ self._readdirEntries(abs, entries, cb)
+ }
+}
+
+Glob.prototype._readdirEntries = function (abs, entries, cb) {
+ if (this.aborted)
+ return
+
+ // if we haven't asked to stat everything, then just
+ // assume that everything in there exists, so we can avoid
+ // having to stat it a second time.
+ if (!this.mark && !this.stat) {
+ for (var i = 0; i < entries.length; i ++) {
+ var e = entries[i]
+ if (abs === '/')
+ e = abs + e
+ else
+ e = abs + '/' + e
+ this.cache[e] = true
+ }
+ }
+
+ this.cache[abs] = entries
+ return cb(null, entries)
+}
+
+Glob.prototype._readdirError = function (f, er, cb) {
+ if (this.aborted)
+ return
+
+ // handle errors, and cache the information
+ switch (er.code) {
+ case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
+ case 'ENOTDIR': // totally normal. means it *does* exist.
+ var abs = this._makeAbs(f)
+ this.cache[abs] = 'FILE'
+ if (abs === this.cwdAbs) {
+ var error = new Error(er.code + ' invalid cwd ' + this.cwd)
+ error.path = this.cwd
+ error.code = er.code
+ this.emit('error', error)
+ this.abort()
+ }
+ break
+
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[this._makeAbs(f)] = false
+ break
+
+ default: // some unusual error. Treat as failure.
+ this.cache[this._makeAbs(f)] = false
+ if (this.strict) {
+ this.emit('error', er)
+ // If the error is handled, then we abort
+ // if not, we threw out of here
+ this.abort()
+ }
+ if (!this.silent)
+ console.error('glob error', er)
+ break
+ }
+
+ return cb()
+}
+
+Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) {
+ var self = this
+ this._readdir(abs, inGlobStar, function (er, entries) {
+ self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb)
+ })
+}
+
+
+Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) {
+ //console.error('pgs2', prefix, remain[0], entries)
+
+ // no entries means not a dir, so it can never have matches
+ // foo.txt/** doesn't match foo.txt
+ if (!entries)
+ return cb()
+
+ // test without the globstar, and with every child both below
+ // and replacing the globstar.
+ var remainWithoutGlobStar = remain.slice(1)
+ var gspref = prefix ? [ prefix ] : []
+ var noGlobStar = gspref.concat(remainWithoutGlobStar)
+
+ // the noGlobStar pattern exits the inGlobStar state
+ this._process(noGlobStar, index, false, cb)
+
+ var isSym = this.symlinks[abs]
+ var len = entries.length
+
+ // If it's a symlink, and we're in a globstar, then stop
+ if (isSym && inGlobStar)
+ return cb()
+
+ for (var i = 0; i < len; i++) {
+ var e = entries[i]
+ if (e.charAt(0) === '.' && !this.dot)
+ continue
+
+ // these two cases enter the inGlobStar state
+ var instead = gspref.concat(entries[i], remainWithoutGlobStar)
+ this._process(instead, index, true, cb)
+
+ var below = gspref.concat(entries[i], remain)
+ this._process(below, index, true, cb)
+ }
+
+ cb()
+}
+
+Glob.prototype._processSimple = function (prefix, index, cb) {
+ // XXX review this. Shouldn't it be doing the mounting etc
+ // before doing stat? kinda weird?
+ var self = this
+ this._stat(prefix, function (er, exists) {
+ self._processSimple2(prefix, index, er, exists, cb)
+ })
+}
+Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) {
+
+ //console.error('ps2', prefix, exists)
+
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ // If it doesn't exist, then just mark the lack of results
+ if (!exists)
+ return cb()
+
+ if (prefix && isAbsolute(prefix) && !this.nomount) {
+ var trail = /[\/\\]$/.test(prefix)
+ if (prefix.charAt(0) === '/') {
+ prefix = path.join(this.root, prefix)
+ } else {
+ prefix = path.resolve(this.root, prefix)
+ if (trail)
+ prefix += '/'
+ }
+ }
+
+ if (process.platform === 'win32')
+ prefix = prefix.replace(/\\/g, '/')
+
+ // Mark this as a match
+ this._emitMatch(index, prefix)
+ cb()
+}
+
+// Returns either 'DIR', 'FILE', or false
+Glob.prototype._stat = function (f, cb) {
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
+
+ if (f.length > this.maxLength)
+ return cb()
+
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+
+ if (Array.isArray(c))
+ c = 'DIR'
+
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return cb(null, c)
+
+ if (needDir && c === 'FILE')
+ return cb()
+
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
+ }
+
+ var exists
+ var stat = this.statCache[abs]
+ if (stat !== undefined) {
+ if (stat === false)
+ return cb(null, stat)
+ else {
+ var type = stat.isDirectory() ? 'DIR' : 'FILE'
+ if (needDir && type === 'FILE')
+ return cb()
+ else
+ return cb(null, type, stat)
+ }
+ }
+
+ var self = this
+ var statcb = inflight('stat\0' + abs, lstatcb_)
+ if (statcb)
+ self.fs.lstat(abs, statcb)
+
+ function lstatcb_ (er, lstat) {
+ if (lstat && lstat.isSymbolicLink()) {
+ // If it's a symlink, then treat it as the target, unless
+ // the target does not exist, then treat it as a file.
+ return self.fs.stat(abs, function (er, stat) {
+ if (er)
+ self._stat2(f, abs, null, lstat, cb)
+ else
+ self._stat2(f, abs, er, stat, cb)
+ })
+ } else {
+ self._stat2(f, abs, er, lstat, cb)
+ }
+ }
+}
+
+Glob.prototype._stat2 = function (f, abs, er, stat, cb) {
+ if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {
+ this.statCache[abs] = false
+ return cb()
+ }
+
+ var needDir = f.slice(-1) === '/'
+ this.statCache[abs] = stat
+
+ if (abs.slice(-1) === '/' && stat && !stat.isDirectory())
+ return cb(null, false, stat)
+
+ var c = true
+ if (stat)
+ c = stat.isDirectory() ? 'DIR' : 'FILE'
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c === 'FILE')
+ return cb()
+
+ return cb(null, c, stat)
+}
diff --git a/node_modules/glob/package.json b/node_modules/glob/package.json
new file mode 100644
index 0000000..5940b64
--- /dev/null
+++ b/node_modules/glob/package.json
@@ -0,0 +1,55 @@
+{
+ "author": "Isaac Z. Schlueter (http://blog.izs.me/)",
+ "name": "glob",
+ "description": "a little globber",
+ "version": "7.2.3",
+ "publishConfig": {
+ "tag": "v7-legacy"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/isaacs/node-glob.git"
+ },
+ "main": "glob.js",
+ "files": [
+ "glob.js",
+ "sync.js",
+ "common.js"
+ ],
+ "engines": {
+ "node": "*"
+ },
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "devDependencies": {
+ "memfs": "^3.2.0",
+ "mkdirp": "0",
+ "rimraf": "^2.2.8",
+ "tap": "^15.0.6",
+ "tick": "0.0.6"
+ },
+ "tap": {
+ "before": "test/00-setup.js",
+ "after": "test/zz-cleanup.js",
+ "jobs": 1
+ },
+ "scripts": {
+ "prepublish": "npm run benchclean",
+ "profclean": "rm -f v8.log profile.txt",
+ "test": "tap",
+ "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js",
+ "bench": "bash benchmark.sh",
+ "prof": "bash prof.sh && cat profile.txt",
+ "benchclean": "node benchclean.js"
+ },
+ "license": "ISC",
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+}
diff --git a/node_modules/glob/sync.js b/node_modules/glob/sync.js
new file mode 100644
index 0000000..2c4f480
--- /dev/null
+++ b/node_modules/glob/sync.js
@@ -0,0 +1,486 @@
+module.exports = globSync
+globSync.GlobSync = GlobSync
+
+var rp = require('fs.realpath')
+var minimatch = require('minimatch')
+var Minimatch = minimatch.Minimatch
+var Glob = require('./glob.js').Glob
+var util = require('util')
+var path = require('path')
+var assert = require('assert')
+var isAbsolute = require('path-is-absolute')
+var common = require('./common.js')
+var setopts = common.setopts
+var ownProp = common.ownProp
+var childrenIgnored = common.childrenIgnored
+var isIgnored = common.isIgnored
+
+function globSync (pattern, options) {
+ if (typeof options === 'function' || arguments.length === 3)
+ throw new TypeError('callback provided to sync glob\n'+
+ 'See: https://github.com/isaacs/node-glob/issues/167')
+
+ return new GlobSync(pattern, options).found
+}
+
+function GlobSync (pattern, options) {
+ if (!pattern)
+ throw new Error('must provide pattern')
+
+ if (typeof options === 'function' || arguments.length === 3)
+ throw new TypeError('callback provided to sync glob\n'+
+ 'See: https://github.com/isaacs/node-glob/issues/167')
+
+ if (!(this instanceof GlobSync))
+ return new GlobSync(pattern, options)
+
+ setopts(this, pattern, options)
+
+ if (this.noprocess)
+ return this
+
+ var n = this.minimatch.set.length
+ this.matches = new Array(n)
+ for (var i = 0; i < n; i ++) {
+ this._process(this.minimatch.set[i], i, false)
+ }
+ this._finish()
+}
+
+GlobSync.prototype._finish = function () {
+ assert.ok(this instanceof GlobSync)
+ if (this.realpath) {
+ var self = this
+ this.matches.forEach(function (matchset, index) {
+ var set = self.matches[index] = Object.create(null)
+ for (var p in matchset) {
+ try {
+ p = self._makeAbs(p)
+ var real = rp.realpathSync(p, self.realpathCache)
+ set[real] = true
+ } catch (er) {
+ if (er.syscall === 'stat')
+ set[self._makeAbs(p)] = true
+ else
+ throw er
+ }
+ }
+ })
+ }
+ common.finish(this)
+}
+
+
+GlobSync.prototype._process = function (pattern, index, inGlobStar) {
+ assert.ok(this instanceof GlobSync)
+
+ // Get the first [n] parts of pattern that are all strings.
+ var n = 0
+ while (typeof pattern[n] === 'string') {
+ n ++
+ }
+ // now n is the index of the first one that is *not* a string.
+
+ // See if there's anything else
+ var prefix
+ switch (n) {
+ // if not, then this is rather simple
+ case pattern.length:
+ this._processSimple(pattern.join('/'), index)
+ return
+
+ case 0:
+ // pattern *starts* with some non-trivial item.
+ // going to readdir(cwd), but not include the prefix in matches.
+ prefix = null
+ break
+
+ default:
+ // pattern has some string bits in the front.
+ // whatever it starts with, whether that's 'absolute' like /foo/bar,
+ // or 'relative' like '../baz'
+ prefix = pattern.slice(0, n).join('/')
+ break
+ }
+
+ var remain = pattern.slice(n)
+
+ // get the list of entries.
+ var read
+ if (prefix === null)
+ read = '.'
+ else if (isAbsolute(prefix) ||
+ isAbsolute(pattern.map(function (p) {
+ return typeof p === 'string' ? p : '[*]'
+ }).join('/'))) {
+ if (!prefix || !isAbsolute(prefix))
+ prefix = '/' + prefix
+ read = prefix
+ } else
+ read = prefix
+
+ var abs = this._makeAbs(read)
+
+ //if ignored, skip processing
+ if (childrenIgnored(this, read))
+ return
+
+ var isGlobStar = remain[0] === minimatch.GLOBSTAR
+ if (isGlobStar)
+ this._processGlobStar(prefix, read, abs, remain, index, inGlobStar)
+ else
+ this._processReaddir(prefix, read, abs, remain, index, inGlobStar)
+}
+
+
+GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) {
+ var entries = this._readdir(abs, inGlobStar)
+
+ // if the abs isn't a dir, then nothing can match!
+ if (!entries)
+ return
+
+ // It will only match dot entries if it starts with a dot, or if
+ // dot is set. Stuff like @(.foo|.bar) isn't allowed.
+ var pn = remain[0]
+ var negate = !!this.minimatch.negate
+ var rawGlob = pn._glob
+ var dotOk = this.dot || rawGlob.charAt(0) === '.'
+
+ var matchedEntries = []
+ for (var i = 0; i < entries.length; i++) {
+ var e = entries[i]
+ if (e.charAt(0) !== '.' || dotOk) {
+ var m
+ if (negate && !prefix) {
+ m = !e.match(pn)
+ } else {
+ m = e.match(pn)
+ }
+ if (m)
+ matchedEntries.push(e)
+ }
+ }
+
+ var len = matchedEntries.length
+ // If there are no matched entries, then nothing matches.
+ if (len === 0)
+ return
+
+ // if this is the last remaining pattern bit, then no need for
+ // an additional stat *unless* the user has specified mark or
+ // stat explicitly. We know they exist, since readdir returned
+ // them.
+
+ if (remain.length === 1 && !this.mark && !this.stat) {
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ if (prefix) {
+ if (prefix.slice(-1) !== '/')
+ e = prefix + '/' + e
+ else
+ e = prefix + e
+ }
+
+ if (e.charAt(0) === '/' && !this.nomount) {
+ e = path.join(this.root, e)
+ }
+ this._emitMatch(index, e)
+ }
+ // This was the last one, and no stats were needed
+ return
+ }
+
+ // now test all matched entries as stand-ins for that part
+ // of the pattern.
+ remain.shift()
+ for (var i = 0; i < len; i ++) {
+ var e = matchedEntries[i]
+ var newPattern
+ if (prefix)
+ newPattern = [prefix, e]
+ else
+ newPattern = [e]
+ this._process(newPattern.concat(remain), index, inGlobStar)
+ }
+}
+
+
+GlobSync.prototype._emitMatch = function (index, e) {
+ if (isIgnored(this, e))
+ return
+
+ var abs = this._makeAbs(e)
+
+ if (this.mark)
+ e = this._mark(e)
+
+ if (this.absolute) {
+ e = abs
+ }
+
+ if (this.matches[index][e])
+ return
+
+ if (this.nodir) {
+ var c = this.cache[abs]
+ if (c === 'DIR' || Array.isArray(c))
+ return
+ }
+
+ this.matches[index][e] = true
+
+ if (this.stat)
+ this._stat(e)
+}
+
+
+GlobSync.prototype._readdirInGlobStar = function (abs) {
+ // follow all symlinked directories forever
+ // just proceed as if this is a non-globstar situation
+ if (this.follow)
+ return this._readdir(abs, false)
+
+ var entries
+ var lstat
+ var stat
+ try {
+ lstat = this.fs.lstatSync(abs)
+ } catch (er) {
+ if (er.code === 'ENOENT') {
+ // lstat failed, doesn't exist
+ return null
+ }
+ }
+
+ var isSym = lstat && lstat.isSymbolicLink()
+ this.symlinks[abs] = isSym
+
+ // If it's not a symlink or a dir, then it's definitely a regular file.
+ // don't bother doing a readdir in that case.
+ if (!isSym && lstat && !lstat.isDirectory())
+ this.cache[abs] = 'FILE'
+ else
+ entries = this._readdir(abs, false)
+
+ return entries
+}
+
+GlobSync.prototype._readdir = function (abs, inGlobStar) {
+ var entries
+
+ if (inGlobStar && !ownProp(this.symlinks, abs))
+ return this._readdirInGlobStar(abs)
+
+ if (ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+ if (!c || c === 'FILE')
+ return null
+
+ if (Array.isArray(c))
+ return c
+ }
+
+ try {
+ return this._readdirEntries(abs, this.fs.readdirSync(abs))
+ } catch (er) {
+ this._readdirError(abs, er)
+ return null
+ }
+}
+
+GlobSync.prototype._readdirEntries = function (abs, entries) {
+ // if we haven't asked to stat everything, then just
+ // assume that everything in there exists, so we can avoid
+ // having to stat it a second time.
+ if (!this.mark && !this.stat) {
+ for (var i = 0; i < entries.length; i ++) {
+ var e = entries[i]
+ if (abs === '/')
+ e = abs + e
+ else
+ e = abs + '/' + e
+ this.cache[e] = true
+ }
+ }
+
+ this.cache[abs] = entries
+
+ // mark and cache dir-ness
+ return entries
+}
+
+GlobSync.prototype._readdirError = function (f, er) {
+ // handle errors, and cache the information
+ switch (er.code) {
+ case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205
+ case 'ENOTDIR': // totally normal. means it *does* exist.
+ var abs = this._makeAbs(f)
+ this.cache[abs] = 'FILE'
+ if (abs === this.cwdAbs) {
+ var error = new Error(er.code + ' invalid cwd ' + this.cwd)
+ error.path = this.cwd
+ error.code = er.code
+ throw error
+ }
+ break
+
+ case 'ENOENT': // not terribly unusual
+ case 'ELOOP':
+ case 'ENAMETOOLONG':
+ case 'UNKNOWN':
+ this.cache[this._makeAbs(f)] = false
+ break
+
+ default: // some unusual error. Treat as failure.
+ this.cache[this._makeAbs(f)] = false
+ if (this.strict)
+ throw er
+ if (!this.silent)
+ console.error('glob error', er)
+ break
+ }
+}
+
+GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) {
+
+ var entries = this._readdir(abs, inGlobStar)
+
+ // no entries means not a dir, so it can never have matches
+ // foo.txt/** doesn't match foo.txt
+ if (!entries)
+ return
+
+ // test without the globstar, and with every child both below
+ // and replacing the globstar.
+ var remainWithoutGlobStar = remain.slice(1)
+ var gspref = prefix ? [ prefix ] : []
+ var noGlobStar = gspref.concat(remainWithoutGlobStar)
+
+ // the noGlobStar pattern exits the inGlobStar state
+ this._process(noGlobStar, index, false)
+
+ var len = entries.length
+ var isSym = this.symlinks[abs]
+
+ // If it's a symlink, and we're in a globstar, then stop
+ if (isSym && inGlobStar)
+ return
+
+ for (var i = 0; i < len; i++) {
+ var e = entries[i]
+ if (e.charAt(0) === '.' && !this.dot)
+ continue
+
+ // these two cases enter the inGlobStar state
+ var instead = gspref.concat(entries[i], remainWithoutGlobStar)
+ this._process(instead, index, true)
+
+ var below = gspref.concat(entries[i], remain)
+ this._process(below, index, true)
+ }
+}
+
+GlobSync.prototype._processSimple = function (prefix, index) {
+ // XXX review this. Shouldn't it be doing the mounting etc
+ // before doing stat? kinda weird?
+ var exists = this._stat(prefix)
+
+ if (!this.matches[index])
+ this.matches[index] = Object.create(null)
+
+ // If it doesn't exist, then just mark the lack of results
+ if (!exists)
+ return
+
+ if (prefix && isAbsolute(prefix) && !this.nomount) {
+ var trail = /[\/\\]$/.test(prefix)
+ if (prefix.charAt(0) === '/') {
+ prefix = path.join(this.root, prefix)
+ } else {
+ prefix = path.resolve(this.root, prefix)
+ if (trail)
+ prefix += '/'
+ }
+ }
+
+ if (process.platform === 'win32')
+ prefix = prefix.replace(/\\/g, '/')
+
+ // Mark this as a match
+ this._emitMatch(index, prefix)
+}
+
+// Returns either 'DIR', 'FILE', or false
+GlobSync.prototype._stat = function (f) {
+ var abs = this._makeAbs(f)
+ var needDir = f.slice(-1) === '/'
+
+ if (f.length > this.maxLength)
+ return false
+
+ if (!this.stat && ownProp(this.cache, abs)) {
+ var c = this.cache[abs]
+
+ if (Array.isArray(c))
+ c = 'DIR'
+
+ // It exists, but maybe not how we need it
+ if (!needDir || c === 'DIR')
+ return c
+
+ if (needDir && c === 'FILE')
+ return false
+
+ // otherwise we have to stat, because maybe c=true
+ // if we know it exists, but not what it is.
+ }
+
+ var exists
+ var stat = this.statCache[abs]
+ if (!stat) {
+ var lstat
+ try {
+ lstat = this.fs.lstatSync(abs)
+ } catch (er) {
+ if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) {
+ this.statCache[abs] = false
+ return false
+ }
+ }
+
+ if (lstat && lstat.isSymbolicLink()) {
+ try {
+ stat = this.fs.statSync(abs)
+ } catch (er) {
+ stat = lstat
+ }
+ } else {
+ stat = lstat
+ }
+ }
+
+ this.statCache[abs] = stat
+
+ var c = true
+ if (stat)
+ c = stat.isDirectory() ? 'DIR' : 'FILE'
+
+ this.cache[abs] = this.cache[abs] || c
+
+ if (needDir && c === 'FILE')
+ return false
+
+ return c
+}
+
+GlobSync.prototype._mark = function (p) {
+ return common.mark(this, p)
+}
+
+GlobSync.prototype._makeAbs = function (f) {
+ return common.makeAbs(this, f)
+}
diff --git a/node_modules/global-modules/LICENSE b/node_modules/global-modules/LICENSE
new file mode 100644
index 0000000..c0d7f13
--- /dev/null
+++ b/node_modules/global-modules/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Jon Schlinkert.
+
+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.
\ No newline at end of file
diff --git a/node_modules/global-modules/README.md b/node_modules/global-modules/README.md
new file mode 100644
index 0000000..a076f65
--- /dev/null
+++ b/node_modules/global-modules/README.md
@@ -0,0 +1,75 @@
+# global-modules [![NPM version](https://img.shields.io/npm/v/global-modules.svg?style=flat)](https://www.npmjs.com/package/global-modules) [![NPM monthly downloads](https://img.shields.io/npm/dm/global-modules.svg?style=flat)](https://npmjs.org/package/global-modules) [![NPM total downloads](https://img.shields.io/npm/dt/global-modules.svg?style=flat)](https://npmjs.org/package/global-modules) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/global-modules.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/global-modules)
+
+> The directory used by npm for globally installed npm modules.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save global-modules
+```
+
+## Usage
+
+```js
+var globalModules = require('global-modules');
+console.log(globalModules);
+//=> '/usr/local/lib/node_modules'
+```
+_(Note that this path might be different based on OS or user defined configuration settings)_
+
+## About
+
+### Related projects
+
+* [git-config-path](https://www.npmjs.com/package/git-config-path): Resolve the path to the user's local or global .gitconfig. | [homepage](https://github.com/jonschlinkert/git-config-path "Resolve the path to the user's local or global .gitconfig.")
+* [global-prefix](https://www.npmjs.com/package/global-prefix): Get the npm global path prefix. | [homepage](https://github.com/jonschlinkert/global-prefix "Get the npm global path prefix.")
+* [homedir-polyfill](https://www.npmjs.com/package/homedir-polyfill): Node.js os.homedir polyfill for older versions of node.js. | [homepage](https://github.com/doowb/homedir-polyfill "Node.js os.homedir polyfill for older versions of node.js.")
+* [npm-paths](https://www.npmjs.com/package/npm-paths): Returns an array of unique "npm" directories based on the user's platform and environment. | [homepage](https://github.com/jonschlinkert/npm-paths "Returns an array of unique "npm" directories based on the user's platform and environment.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 14 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 1 | [jason-chang](https://github.com/jason-chang) |
+| 1 | [Kikobeats](https://github.com/Kikobeats) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on June 28, 2017._
\ No newline at end of file
diff --git a/node_modules/global-modules/index.js b/node_modules/global-modules/index.js
new file mode 100644
index 0000000..e4c2b8b
--- /dev/null
+++ b/node_modules/global-modules/index.js
@@ -0,0 +1,31 @@
+/*!
+ * global-modules
+ *
+ * Copyright (c) 2015-2017 Jon Schlinkert.
+ * Licensed under the MIT license.
+ */
+
+'use strict';
+
+var path = require('path');
+var prefix = require('global-prefix');
+var isWindows = require('is-windows');
+var gm;
+
+function getPath() {
+ if (isWindows()) {
+ return path.resolve(prefix, 'node_modules');
+ }
+ return path.resolve(prefix, 'lib/node_modules');
+}
+
+/**
+ * Expose `global-modules` path
+ */
+
+Object.defineProperty(module, 'exports', {
+ enumerable: true,
+ get: function() {
+ return gm || (gm = getPath());
+ }
+});
diff --git a/node_modules/global-modules/package.json b/node_modules/global-modules/package.json
new file mode 100644
index 0000000..35430bb
--- /dev/null
+++ b/node_modules/global-modules/package.json
@@ -0,0 +1,72 @@
+{
+ "name": "global-modules",
+ "description": "The directory used by npm for globally installed npm modules.",
+ "version": "1.0.0",
+ "homepage": "https://github.com/jonschlinkert/global-modules",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "JasonChang (https://packagist.org/packages/jason-chang)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Kiko Beats (https://kikobeats.com)"
+ ],
+ "repository": "jonschlinkert/global-modules",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/global-modules/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^0.1.12",
+ "mocha": "^3.4.2"
+ },
+ "keywords": [
+ "directory",
+ "dirname",
+ "global",
+ "module",
+ "modules",
+ "package",
+ "path",
+ "prefix",
+ "resolve"
+ ],
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "homedir-polyfill",
+ "git-config-path",
+ "global-prefix",
+ "npm-paths"
+ ]
+ },
+ "reflinks": [
+ "verb"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/global-prefix/LICENSE b/node_modules/global-prefix/LICENSE
new file mode 100644
index 0000000..c0d7f13
--- /dev/null
+++ b/node_modules/global-prefix/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2017, Jon Schlinkert.
+
+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.
\ No newline at end of file
diff --git a/node_modules/global-prefix/README.md b/node_modules/global-prefix/README.md
new file mode 100644
index 0000000..31d78ff
--- /dev/null
+++ b/node_modules/global-prefix/README.md
@@ -0,0 +1,78 @@
+# global-prefix [![NPM version](https://img.shields.io/npm/v/global-prefix.svg?style=flat)](https://www.npmjs.com/package/global-prefix) [![NPM monthly downloads](https://img.shields.io/npm/dm/global-prefix.svg?style=flat)](https://npmjs.org/package/global-prefix) [![NPM total downloads](https://img.shields.io/npm/dt/global-prefix.svg?style=flat)](https://npmjs.org/package/global-prefix) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/global-prefix.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/global-prefix) [![Windows Build Status](https://img.shields.io/appveyor/ci/jonschlinkert/global-prefix.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/jonschlinkert/global-prefix)
+
+> Get the npm global path prefix.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save global-prefix
+```
+
+This is partially based on the code used by npm internally to resolve the global prefix.
+
+## Usage
+
+```js
+var prefix = require('global-prefix');
+//=> '/usr/local' (this path will differ by system and user-defined config)
+```
+
+## About
+
+### Related projects
+
+* [global-modules](https://www.npmjs.com/package/global-modules): The directory used by npm for globally installed npm modules. | [homepage](https://github.com/jonschlinkert/global-modules "The directory used by npm for globally installed npm modules.")
+* [global-paths](https://www.npmjs.com/package/global-paths): Returns an array of unique "global" directories based on the user's platform and environment. The… [more](https://github.com/jonschlinkert/global-paths) | [homepage](https://github.com/jonschlinkert/global-paths "Returns an array of unique "global" directories based on the user's platform and environment. The resulting paths can be used for doing lookups for generators or other globally installed npm packages. Node.js / JavaScript.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 16 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 15 | [doowb](https://github.com/doowb) |
+| 1 | [rmbaad](https://github.com/rmbaad) |
+| 1 | [avengerpenguin](https://github.com/avengerpenguin) |
+| 1 | [jason-chang](https://github.com/jason-chang) |
+| 1 | [jorrit](https://github.com/jorrit) |
+| 1 | [mathiasvr](https://github.com/mathiasvr) |
+| 1 | [tunnckoCore](https://github.com/tunnckoCore) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on June 28, 2017._
\ No newline at end of file
diff --git a/node_modules/global-prefix/index.js b/node_modules/global-prefix/index.js
new file mode 100644
index 0000000..cc66d95
--- /dev/null
+++ b/node_modules/global-prefix/index.js
@@ -0,0 +1,96 @@
+/*!
+ * global-prefix
+ *
+ * Copyright (c) 2015-2017 Jon Schlinkert.
+ * Licensed under the MIT license.
+ */
+
+'use strict';
+
+var fs = require('fs');
+var path = require('path');
+var expand = require('expand-tilde');
+var homedir = require('homedir-polyfill');
+var ini = require('ini');
+var prefix;
+
+function getPrefix() {
+ if (process.env.PREFIX) {
+ prefix = process.env.PREFIX;
+ } else {
+ // Start by checking if the global prefix is set by the user
+ var home = homedir();
+ if (home) {
+ // homedir() returns undefined if $HOME not set; path.resolve requires strings
+ var userConfig = path.resolve(home, '.npmrc');
+ prefix = tryConfigPath(userConfig);
+ }
+
+ if (!prefix) {
+ // Otherwise find the path of npm
+ var npm = tryNpmPath();
+ if (npm) {
+ // Check the built-in npm config file
+ var builtinConfig = path.resolve(npm, '..', '..', 'npmrc');
+ prefix = tryConfigPath(builtinConfig);
+
+ if (prefix) {
+ // Now the global npm config can also be checked.
+ var globalConfig = path.resolve(prefix, 'etc', 'npmrc');
+ prefix = tryConfigPath(globalConfig) || prefix;
+ }
+ }
+
+ if (!prefix) fallback();
+ }
+ }
+
+ if (prefix) {
+ return expand(prefix);
+ }
+}
+
+function fallback() {
+ var isWindows = require('is-windows');
+ if (isWindows()) {
+ // c:\node\node.exe --> prefix=c:\node\
+ prefix = process.env.APPDATA
+ ? path.join(process.env.APPDATA, 'npm')
+ : path.dirname(process.execPath);
+ } else {
+ // /usr/local/bin/node --> prefix=/usr/local
+ prefix = path.dirname(path.dirname(process.execPath));
+
+ // destdir only is respected on Unix
+ if (process.env.DESTDIR) {
+ prefix = path.join(process.env.DESTDIR, prefix);
+ }
+ }
+}
+
+function tryNpmPath() {
+ try {
+ return fs.realpathSync(require('which').sync('npm'));
+ } catch (err) {}
+ return null;
+}
+
+function tryConfigPath(configPath) {
+ try {
+ var data = fs.readFileSync(configPath, 'utf-8');
+ var config = ini.parse(data);
+ if (config.prefix) return config.prefix;
+ } catch (err) {}
+ return null;
+}
+
+/**
+ * Expose `prefix`
+ */
+
+Object.defineProperty(module, 'exports', {
+ enumerable: true,
+ get: function() {
+ return prefix || (prefix = getPrefix());
+ }
+});
diff --git a/node_modules/global-prefix/package.json b/node_modules/global-prefix/package.json
new file mode 100644
index 0000000..7d366a6
--- /dev/null
+++ b/node_modules/global-prefix/package.json
@@ -0,0 +1,75 @@
+{
+ "name": "global-prefix",
+ "description": "Get the npm global path prefix.",
+ "version": "1.0.2",
+ "homepage": "https://github.com/jonschlinkert/global-prefix",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Alexandr Bogachev (https://github.com/rmbaad)",
+ "Brian Woodward (https://twitter.com/doowb)",
+ "Charlike Mike Reagent (https://i.am.charlike.online)",
+ "JasonChang (https://packagist.org/packages/jason-chang)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Jorrit Schippers (https://www.ncode.nl)",
+ "Mathias Rasmussen (chrome://dino)",
+ "Ross Fenning (http://rossfenning.co.uk)"
+ ],
+ "repository": "jonschlinkert/global-prefix",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/global-prefix/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^0.1.12",
+ "mocha": "^3.4.2"
+ },
+ "keywords": [
+ "global",
+ "module",
+ "modules",
+ "npm",
+ "path",
+ "prefix",
+ "resolve"
+ ],
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "global-modules",
+ "global-paths"
+ ]
+ },
+ "reflinks": [
+ "verb"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/glogg/LICENSE b/node_modules/glogg/LICENSE
new file mode 100644
index 0000000..3a58630
--- /dev/null
+++ b/node_modules/glogg/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2014, 2015, 2018 Blaine Bublitz and Eric Schoffstall
+
+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/node_modules/glogg/README.md b/node_modules/glogg/README.md
new file mode 100644
index 0000000..897e105
--- /dev/null
+++ b/node_modules/glogg/README.md
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+# glogg
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Travis Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Global logging utility.
+
+## Usage
+
+```js
+var getLogger = require('glogg');
+
+var logger = getLogger('my-namespace');
+
+// logs strings
+logger.debug('The MOST verbose!');
+logger.info('Some important info');
+logger.warn('All the warnings to you');
+logger.error('OH NO! SOMETHING HAPPENED!');
+
+// supports util.format!
+logger.info('%s style!', 'printf');
+
+// log anything
+logger.debug({ my: 'obj' });
+logger.info([1, 2, 3]);
+
+// somewhere else
+logger.on('info', function(msg){
+ // do something with msg
+});
+
+// must be handled to avoid crashing process
+logger.on('error', function(msg){
+ // now it won't crash
+});
+```
+
+## API
+
+__Note: This module makes no assumptions about the log levels and they will always
+be emitted. If you are looking to filter some out, your listeners will need to have
+extra logic.__
+
+### getLogger([namespace])
+
+Create a new logger at the given namespace (or the default if no namespace is provided).
+Returns an augmented [`sparkles`](https://github.com/phated/sparkles) EventEmitter object
+with 4 methods: `debug()`, `info()`, `warn()` and `error()`. When called, these methods emit
+an event with the same name. If the first argument is a string, the arguments
+are passed through node's `util.format()` before being emitted. Other parts
+of a node program can get the logger by namespace and listen for the events to
+be emitted.
+
+#### logger.debug(msg)
+
+Emits a `debug` event with the given `msg`.
+
+If the first argument is a string, all arguments are passed to node's
+`util.format()` before being emitted.
+
+#### logger.info(msg)
+
+Emits a `info` event with the given `msg`.
+
+If the first argument is a string, all arguments are passed to node's
+`util.format()` before being emitted.
+
+#### logger.warn(msg)
+
+Emits a `warn` event with the given `msg`.
+
+If the first argument is a string, all arguments are passed to node's
+`util.format()` before being emitted.
+
+#### logger.error(msg)
+
+Emits a `error` event with the given `msg`.
+
+If the first argument is a string, all arguments are passed to node's
+`util.format()` before being emitted.
+
+__Note: You must handle this event in some way or the node process will crash
+when an `error` event is emitted.__
+
+#### logger.on(event, fn)
+
+Standard API from node's `EventEmitter`. Use this to listen for events from
+the logger methods.
+
+## License
+
+MIT
+
+[downloads-image]: http://img.shields.io/npm/dm/glogg.svg
+[npm-url]: https://www.npmjs.com/package/glogg
+[npm-image]: http://img.shields.io/npm/v/glogg.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/glogg
+[travis-image]: http://img.shields.io/travis/gulpjs/glogg.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/glogg
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/glogg.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/glogg
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/glogg/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
diff --git a/node_modules/glogg/index.js b/node_modules/glogg/index.js
new file mode 100644
index 0000000..6e34bcf
--- /dev/null
+++ b/node_modules/glogg/index.js
@@ -0,0 +1,34 @@
+'use strict';
+
+var format = require('util').format;
+
+var sparkles = require('sparkles');
+
+var levels = [
+ 'debug',
+ 'info',
+ 'warn',
+ 'error',
+];
+
+function getLogger(namespace) {
+ var logger = sparkles(namespace);
+
+ levels.forEach(function(level) {
+ logger[level] = makeLogLevel(logger, level);
+ });
+
+ return logger;
+}
+
+function makeLogLevel(self, level) {
+ return function(msg) {
+ if (typeof msg === 'string') {
+ msg = format.apply(null, arguments);
+ }
+
+ self.emit(level, msg);
+ };
+}
+
+module.exports = getLogger;
diff --git a/node_modules/glogg/package.json b/node_modules/glogg/package.json
new file mode 100644
index 0000000..e848906
--- /dev/null
+++ b/node_modules/glogg/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "glogg",
+ "version": "1.0.2",
+ "description": "Global logging utility",
+ "author": "Gulp Team (http://gulpjs.com/)",
+ "contributors": [
+ "Blaine Bublitz "
+ ],
+ "repository": "gulpjs/glogg",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "main": "index.js",
+ "files": [
+ "LICENSE",
+ "index.js"
+ ],
+ "scripts": {
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "test": "mocha --async-only",
+ "cover": "istanbul cover _mocha --report lcovonly",
+ "coveralls": "npm run cover && istanbul-coveralls"
+ },
+ "dependencies": {
+ "sparkles": "^1.0.0"
+ },
+ "devDependencies": {
+ "eslint": "^2.13.0",
+ "eslint-config-gulp": "^3.0.1",
+ "expect": "^1.20.2",
+ "istanbul": "^0.4.3",
+ "istanbul-coveralls": "^1.0.3",
+ "mocha": "^3.5.3"
+ },
+ "keywords": [
+ "global",
+ "log",
+ "logger",
+ "logging",
+ "shared"
+ ]
+}
diff --git a/node_modules/graceful-fs/LICENSE b/node_modules/graceful-fs/LICENSE
new file mode 100644
index 0000000..e906a25
--- /dev/null
+++ b/node_modules/graceful-fs/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) 2011-2022 Isaac Z. Schlueter, Ben Noordhuis, and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/graceful-fs/README.md b/node_modules/graceful-fs/README.md
new file mode 100644
index 0000000..82d6e4d
--- /dev/null
+++ b/node_modules/graceful-fs/README.md
@@ -0,0 +1,143 @@
+# graceful-fs
+
+graceful-fs functions as a drop-in replacement for the fs module,
+making various improvements.
+
+The improvements are meant to normalize behavior across different
+platforms and environments, and to make filesystem access more
+resilient to errors.
+
+## Improvements over [fs module](https://nodejs.org/api/fs.html)
+
+* Queues up `open` and `readdir` calls, and retries them once
+ something closes if there is an EMFILE error from too many file
+ descriptors.
+* fixes `lchmod` for Node versions prior to 0.6.2.
+* implements `fs.lutimes` if possible. Otherwise it becomes a noop.
+* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or
+ `lchown` if the user isn't root.
+* makes `lchmod` and `lchown` become noops, if not available.
+* retries reading a file if `read` results in EAGAIN error.
+
+On Windows, it retries renaming a file for up to one second if `EACCESS`
+or `EPERM` error occurs, likely because antivirus software has locked
+the directory.
+
+## USAGE
+
+```javascript
+// use just like fs
+var fs = require('graceful-fs')
+
+// now go and do stuff with it...
+fs.readFile('some-file-or-whatever', (err, data) => {
+ // Do stuff here.
+})
+```
+
+## Sync methods
+
+This module cannot intercept or handle `EMFILE` or `ENFILE` errors from sync
+methods. If you use sync methods which open file descriptors then you are
+responsible for dealing with any errors.
+
+This is a known limitation, not a bug.
+
+## Global Patching
+
+If you want to patch the global fs module (or any other fs-like
+module) you can do this:
+
+```javascript
+// Make sure to read the caveat below.
+var realFs = require('fs')
+var gracefulFs = require('graceful-fs')
+gracefulFs.gracefulify(realFs)
+```
+
+This should only ever be done at the top-level application layer, in
+order to delay on EMFILE errors from any fs-using dependencies. You
+should **not** do this in a library, because it can cause unexpected
+delays in other parts of the program.
+
+## Changes
+
+This module is fairly stable at this point, and used by a lot of
+things. That being said, because it implements a subtle behavior
+change in a core part of the node API, even modest changes can be
+extremely breaking, and the versioning is thus biased towards
+bumping the major when in doubt.
+
+The main change between major versions has been switching between
+providing a fully-patched `fs` module vs monkey-patching the node core
+builtin, and the approach by which a non-monkey-patched `fs` was
+created.
+
+The goal is to trade `EMFILE` errors for slower fs operations. So, if
+you try to open a zillion files, rather than crashing, `open`
+operations will be queued up and wait for something else to `close`.
+
+There are advantages to each approach. Monkey-patching the fs means
+that no `EMFILE` errors can possibly occur anywhere in your
+application, because everything is using the same core `fs` module,
+which is patched. However, it can also obviously cause undesirable
+side-effects, especially if the module is loaded multiple times.
+
+Implementing a separate-but-identical patched `fs` module is more
+surgical (and doesn't run the risk of patching multiple times), but
+also imposes the challenge of keeping in sync with the core module.
+
+The current approach loads the `fs` module, and then creates a
+lookalike object that has all the same methods, except a few that are
+patched. It is safe to use in all versions of Node from 0.8 through
+7.0.
+
+### v4
+
+* Do not monkey-patch the fs module. This module may now be used as a
+ drop-in dep, and users can opt into monkey-patching the fs builtin
+ if their app requires it.
+
+### v3
+
+* Monkey-patch fs, because the eval approach no longer works on recent
+ node.
+* fixed possible type-error throw if rename fails on windows
+* verify that we *never* get EMFILE errors
+* Ignore ENOSYS from chmod/chown
+* clarify that graceful-fs must be used as a drop-in
+
+### v2.1.0
+
+* Use eval rather than monkey-patching fs.
+* readdir: Always sort the results
+* win32: requeue a file if error has an OK status
+
+### v2.0
+
+* A return to monkey patching
+* wrap process.cwd
+
+### v1.1
+
+* wrap readFile
+* Wrap fs.writeFile.
+* readdir protection
+* Don't clobber the fs builtin
+* Handle fs.read EAGAIN errors by trying again
+* Expose the curOpen counter
+* No-op lchown/lchmod if not implemented
+* fs.rename patch only for win32
+* Patch fs.rename to handle AV software on Windows
+* Close #4 Chown should not fail on einval or eperm if non-root
+* Fix isaacs/fstream#1 Only wrap fs one time
+* Fix #3 Start at 1024 max files, then back off on EMFILE
+* lutimes that doens't blow up on Linux
+* A full on-rewrite using a queue instead of just swallowing the EMFILE error
+* Wrap Read/Write streams as well
+
+### 1.0
+
+* Update engines for node 0.6
+* Be lstat-graceful on Windows
+* first
diff --git a/node_modules/graceful-fs/clone.js b/node_modules/graceful-fs/clone.js
new file mode 100644
index 0000000..dff3cc8
--- /dev/null
+++ b/node_modules/graceful-fs/clone.js
@@ -0,0 +1,23 @@
+'use strict'
+
+module.exports = clone
+
+var getPrototypeOf = Object.getPrototypeOf || function (obj) {
+ return obj.__proto__
+}
+
+function clone (obj) {
+ if (obj === null || typeof obj !== 'object')
+ return obj
+
+ if (obj instanceof Object)
+ var copy = { __proto__: getPrototypeOf(obj) }
+ else
+ var copy = Object.create(null)
+
+ Object.getOwnPropertyNames(obj).forEach(function (key) {
+ Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))
+ })
+
+ return copy
+}
diff --git a/node_modules/graceful-fs/graceful-fs.js b/node_modules/graceful-fs/graceful-fs.js
new file mode 100644
index 0000000..8d5b89e
--- /dev/null
+++ b/node_modules/graceful-fs/graceful-fs.js
@@ -0,0 +1,448 @@
+var fs = require('fs')
+var polyfills = require('./polyfills.js')
+var legacy = require('./legacy-streams.js')
+var clone = require('./clone.js')
+
+var util = require('util')
+
+/* istanbul ignore next - node 0.x polyfill */
+var gracefulQueue
+var previousSymbol
+
+/* istanbul ignore else - node 0.x polyfill */
+if (typeof Symbol === 'function' && typeof Symbol.for === 'function') {
+ gracefulQueue = Symbol.for('graceful-fs.queue')
+ // This is used in testing by future versions
+ previousSymbol = Symbol.for('graceful-fs.previous')
+} else {
+ gracefulQueue = '___graceful-fs.queue'
+ previousSymbol = '___graceful-fs.previous'
+}
+
+function noop () {}
+
+function publishQueue(context, queue) {
+ Object.defineProperty(context, gracefulQueue, {
+ get: function() {
+ return queue
+ }
+ })
+}
+
+var debug = noop
+if (util.debuglog)
+ debug = util.debuglog('gfs4')
+else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || ''))
+ debug = function() {
+ var m = util.format.apply(util, arguments)
+ m = 'GFS4: ' + m.split(/\n/).join('\nGFS4: ')
+ console.error(m)
+ }
+
+// Once time initialization
+if (!fs[gracefulQueue]) {
+ // This queue can be shared by multiple loaded instances
+ var queue = global[gracefulQueue] || []
+ publishQueue(fs, queue)
+
+ // Patch fs.close/closeSync to shared queue version, because we need
+ // to retry() whenever a close happens *anywhere* in the program.
+ // This is essential when multiple graceful-fs instances are
+ // in play at the same time.
+ fs.close = (function (fs$close) {
+ function close (fd, cb) {
+ return fs$close.call(fs, fd, function (err) {
+ // This function uses the graceful-fs shared queue
+ if (!err) {
+ resetQueue()
+ }
+
+ if (typeof cb === 'function')
+ cb.apply(this, arguments)
+ })
+ }
+
+ Object.defineProperty(close, previousSymbol, {
+ value: fs$close
+ })
+ return close
+ })(fs.close)
+
+ fs.closeSync = (function (fs$closeSync) {
+ function closeSync (fd) {
+ // This function uses the graceful-fs shared queue
+ fs$closeSync.apply(fs, arguments)
+ resetQueue()
+ }
+
+ Object.defineProperty(closeSync, previousSymbol, {
+ value: fs$closeSync
+ })
+ return closeSync
+ })(fs.closeSync)
+
+ if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) {
+ process.on('exit', function() {
+ debug(fs[gracefulQueue])
+ require('assert').equal(fs[gracefulQueue].length, 0)
+ })
+ }
+}
+
+if (!global[gracefulQueue]) {
+ publishQueue(global, fs[gracefulQueue]);
+}
+
+module.exports = patch(clone(fs))
+if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {
+ module.exports = patch(fs)
+ fs.__patched = true;
+}
+
+function patch (fs) {
+ // Everything that references the open() function needs to be in here
+ polyfills(fs)
+ fs.gracefulify = patch
+
+ fs.createReadStream = createReadStream
+ fs.createWriteStream = createWriteStream
+ var fs$readFile = fs.readFile
+ fs.readFile = readFile
+ function readFile (path, options, cb) {
+ if (typeof options === 'function')
+ cb = options, options = null
+
+ return go$readFile(path, options, cb)
+
+ function go$readFile (path, options, cb, startTime) {
+ return fs$readFile(path, options, function (err) {
+ if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
+ enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])
+ else {
+ if (typeof cb === 'function')
+ cb.apply(this, arguments)
+ }
+ })
+ }
+ }
+
+ var fs$writeFile = fs.writeFile
+ fs.writeFile = writeFile
+ function writeFile (path, data, options, cb) {
+ if (typeof options === 'function')
+ cb = options, options = null
+
+ return go$writeFile(path, data, options, cb)
+
+ function go$writeFile (path, data, options, cb, startTime) {
+ return fs$writeFile(path, data, options, function (err) {
+ if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
+ enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])
+ else {
+ if (typeof cb === 'function')
+ cb.apply(this, arguments)
+ }
+ })
+ }
+ }
+
+ var fs$appendFile = fs.appendFile
+ if (fs$appendFile)
+ fs.appendFile = appendFile
+ function appendFile (path, data, options, cb) {
+ if (typeof options === 'function')
+ cb = options, options = null
+
+ return go$appendFile(path, data, options, cb)
+
+ function go$appendFile (path, data, options, cb, startTime) {
+ return fs$appendFile(path, data, options, function (err) {
+ if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
+ enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])
+ else {
+ if (typeof cb === 'function')
+ cb.apply(this, arguments)
+ }
+ })
+ }
+ }
+
+ var fs$copyFile = fs.copyFile
+ if (fs$copyFile)
+ fs.copyFile = copyFile
+ function copyFile (src, dest, flags, cb) {
+ if (typeof flags === 'function') {
+ cb = flags
+ flags = 0
+ }
+ return go$copyFile(src, dest, flags, cb)
+
+ function go$copyFile (src, dest, flags, cb, startTime) {
+ return fs$copyFile(src, dest, flags, function (err) {
+ if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
+ enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])
+ else {
+ if (typeof cb === 'function')
+ cb.apply(this, arguments)
+ }
+ })
+ }
+ }
+
+ var fs$readdir = fs.readdir
+ fs.readdir = readdir
+ var noReaddirOptionVersions = /^v[0-5]\./
+ function readdir (path, options, cb) {
+ if (typeof options === 'function')
+ cb = options, options = null
+
+ var go$readdir = noReaddirOptionVersions.test(process.version)
+ ? function go$readdir (path, options, cb, startTime) {
+ return fs$readdir(path, fs$readdirCallback(
+ path, options, cb, startTime
+ ))
+ }
+ : function go$readdir (path, options, cb, startTime) {
+ return fs$readdir(path, options, fs$readdirCallback(
+ path, options, cb, startTime
+ ))
+ }
+
+ return go$readdir(path, options, cb)
+
+ function fs$readdirCallback (path, options, cb, startTime) {
+ return function (err, files) {
+ if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
+ enqueue([
+ go$readdir,
+ [path, options, cb],
+ err,
+ startTime || Date.now(),
+ Date.now()
+ ])
+ else {
+ if (files && files.sort)
+ files.sort()
+
+ if (typeof cb === 'function')
+ cb.call(this, err, files)
+ }
+ }
+ }
+ }
+
+ if (process.version.substr(0, 4) === 'v0.8') {
+ var legStreams = legacy(fs)
+ ReadStream = legStreams.ReadStream
+ WriteStream = legStreams.WriteStream
+ }
+
+ var fs$ReadStream = fs.ReadStream
+ if (fs$ReadStream) {
+ ReadStream.prototype = Object.create(fs$ReadStream.prototype)
+ ReadStream.prototype.open = ReadStream$open
+ }
+
+ var fs$WriteStream = fs.WriteStream
+ if (fs$WriteStream) {
+ WriteStream.prototype = Object.create(fs$WriteStream.prototype)
+ WriteStream.prototype.open = WriteStream$open
+ }
+
+ Object.defineProperty(fs, 'ReadStream', {
+ get: function () {
+ return ReadStream
+ },
+ set: function (val) {
+ ReadStream = val
+ },
+ enumerable: true,
+ configurable: true
+ })
+ Object.defineProperty(fs, 'WriteStream', {
+ get: function () {
+ return WriteStream
+ },
+ set: function (val) {
+ WriteStream = val
+ },
+ enumerable: true,
+ configurable: true
+ })
+
+ // legacy names
+ var FileReadStream = ReadStream
+ Object.defineProperty(fs, 'FileReadStream', {
+ get: function () {
+ return FileReadStream
+ },
+ set: function (val) {
+ FileReadStream = val
+ },
+ enumerable: true,
+ configurable: true
+ })
+ var FileWriteStream = WriteStream
+ Object.defineProperty(fs, 'FileWriteStream', {
+ get: function () {
+ return FileWriteStream
+ },
+ set: function (val) {
+ FileWriteStream = val
+ },
+ enumerable: true,
+ configurable: true
+ })
+
+ function ReadStream (path, options) {
+ if (this instanceof ReadStream)
+ return fs$ReadStream.apply(this, arguments), this
+ else
+ return ReadStream.apply(Object.create(ReadStream.prototype), arguments)
+ }
+
+ function ReadStream$open () {
+ var that = this
+ open(that.path, that.flags, that.mode, function (err, fd) {
+ if (err) {
+ if (that.autoClose)
+ that.destroy()
+
+ that.emit('error', err)
+ } else {
+ that.fd = fd
+ that.emit('open', fd)
+ that.read()
+ }
+ })
+ }
+
+ function WriteStream (path, options) {
+ if (this instanceof WriteStream)
+ return fs$WriteStream.apply(this, arguments), this
+ else
+ return WriteStream.apply(Object.create(WriteStream.prototype), arguments)
+ }
+
+ function WriteStream$open () {
+ var that = this
+ open(that.path, that.flags, that.mode, function (err, fd) {
+ if (err) {
+ that.destroy()
+ that.emit('error', err)
+ } else {
+ that.fd = fd
+ that.emit('open', fd)
+ }
+ })
+ }
+
+ function createReadStream (path, options) {
+ return new fs.ReadStream(path, options)
+ }
+
+ function createWriteStream (path, options) {
+ return new fs.WriteStream(path, options)
+ }
+
+ var fs$open = fs.open
+ fs.open = open
+ function open (path, flags, mode, cb) {
+ if (typeof mode === 'function')
+ cb = mode, mode = null
+
+ return go$open(path, flags, mode, cb)
+
+ function go$open (path, flags, mode, cb, startTime) {
+ return fs$open(path, flags, mode, function (err, fd) {
+ if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
+ enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])
+ else {
+ if (typeof cb === 'function')
+ cb.apply(this, arguments)
+ }
+ })
+ }
+ }
+
+ return fs
+}
+
+function enqueue (elem) {
+ debug('ENQUEUE', elem[0].name, elem[1])
+ fs[gracefulQueue].push(elem)
+ retry()
+}
+
+// keep track of the timeout between retry() calls
+var retryTimer
+
+// reset the startTime and lastTime to now
+// this resets the start of the 60 second overall timeout as well as the
+// delay between attempts so that we'll retry these jobs sooner
+function resetQueue () {
+ var now = Date.now()
+ for (var i = 0; i < fs[gracefulQueue].length; ++i) {
+ // entries that are only a length of 2 are from an older version, don't
+ // bother modifying those since they'll be retried anyway.
+ if (fs[gracefulQueue][i].length > 2) {
+ fs[gracefulQueue][i][3] = now // startTime
+ fs[gracefulQueue][i][4] = now // lastTime
+ }
+ }
+ // call retry to make sure we're actively processing the queue
+ retry()
+}
+
+function retry () {
+ // clear the timer and remove it to help prevent unintended concurrency
+ clearTimeout(retryTimer)
+ retryTimer = undefined
+
+ if (fs[gracefulQueue].length === 0)
+ return
+
+ var elem = fs[gracefulQueue].shift()
+ var fn = elem[0]
+ var args = elem[1]
+ // these items may be unset if they were added by an older graceful-fs
+ var err = elem[2]
+ var startTime = elem[3]
+ var lastTime = elem[4]
+
+ // if we don't have a startTime we have no way of knowing if we've waited
+ // long enough, so go ahead and retry this item now
+ if (startTime === undefined) {
+ debug('RETRY', fn.name, args)
+ fn.apply(null, args)
+ } else if (Date.now() - startTime >= 60000) {
+ // it's been more than 60 seconds total, bail now
+ debug('TIMEOUT', fn.name, args)
+ var cb = args.pop()
+ if (typeof cb === 'function')
+ cb.call(null, err)
+ } else {
+ // the amount of time between the last attempt and right now
+ var sinceAttempt = Date.now() - lastTime
+ // the amount of time between when we first tried, and when we last tried
+ // rounded up to at least 1
+ var sinceStart = Math.max(lastTime - startTime, 1)
+ // backoff. wait longer than the total time we've been retrying, but only
+ // up to a maximum of 100ms
+ var desiredDelay = Math.min(sinceStart * 1.2, 100)
+ // it's been long enough since the last retry, do it again
+ if (sinceAttempt >= desiredDelay) {
+ debug('RETRY', fn.name, args)
+ fn.apply(null, args.concat([startTime]))
+ } else {
+ // if we can't do this job yet, push it to the end of the queue
+ // and let the next iteration check again
+ fs[gracefulQueue].push(elem)
+ }
+ }
+
+ // schedule our next run if one isn't already scheduled
+ if (retryTimer === undefined) {
+ retryTimer = setTimeout(retry, 0)
+ }
+}
diff --git a/node_modules/graceful-fs/legacy-streams.js b/node_modules/graceful-fs/legacy-streams.js
new file mode 100644
index 0000000..d617b50
--- /dev/null
+++ b/node_modules/graceful-fs/legacy-streams.js
@@ -0,0 +1,118 @@
+var Stream = require('stream').Stream
+
+module.exports = legacy
+
+function legacy (fs) {
+ return {
+ ReadStream: ReadStream,
+ WriteStream: WriteStream
+ }
+
+ function ReadStream (path, options) {
+ if (!(this instanceof ReadStream)) return new ReadStream(path, options);
+
+ Stream.call(this);
+
+ var self = this;
+
+ this.path = path;
+ this.fd = null;
+ this.readable = true;
+ this.paused = false;
+
+ this.flags = 'r';
+ this.mode = 438; /*=0666*/
+ this.bufferSize = 64 * 1024;
+
+ options = options || {};
+
+ // Mixin options into this
+ var keys = Object.keys(options);
+ for (var index = 0, length = keys.length; index < length; index++) {
+ var key = keys[index];
+ this[key] = options[key];
+ }
+
+ if (this.encoding) this.setEncoding(this.encoding);
+
+ if (this.start !== undefined) {
+ if ('number' !== typeof this.start) {
+ throw TypeError('start must be a Number');
+ }
+ if (this.end === undefined) {
+ this.end = Infinity;
+ } else if ('number' !== typeof this.end) {
+ throw TypeError('end must be a Number');
+ }
+
+ if (this.start > this.end) {
+ throw new Error('start must be <= end');
+ }
+
+ this.pos = this.start;
+ }
+
+ if (this.fd !== null) {
+ process.nextTick(function() {
+ self._read();
+ });
+ return;
+ }
+
+ fs.open(this.path, this.flags, this.mode, function (err, fd) {
+ if (err) {
+ self.emit('error', err);
+ self.readable = false;
+ return;
+ }
+
+ self.fd = fd;
+ self.emit('open', fd);
+ self._read();
+ })
+ }
+
+ function WriteStream (path, options) {
+ if (!(this instanceof WriteStream)) return new WriteStream(path, options);
+
+ Stream.call(this);
+
+ this.path = path;
+ this.fd = null;
+ this.writable = true;
+
+ this.flags = 'w';
+ this.encoding = 'binary';
+ this.mode = 438; /*=0666*/
+ this.bytesWritten = 0;
+
+ options = options || {};
+
+ // Mixin options into this
+ var keys = Object.keys(options);
+ for (var index = 0, length = keys.length; index < length; index++) {
+ var key = keys[index];
+ this[key] = options[key];
+ }
+
+ if (this.start !== undefined) {
+ if ('number' !== typeof this.start) {
+ throw TypeError('start must be a Number');
+ }
+ if (this.start < 0) {
+ throw new Error('start must be >= zero');
+ }
+
+ this.pos = this.start;
+ }
+
+ this.busy = false;
+ this._queue = [];
+
+ if (this.fd === null) {
+ this._open = fs.open;
+ this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);
+ this.flush();
+ }
+ }
+}
diff --git a/node_modules/graceful-fs/package.json b/node_modules/graceful-fs/package.json
new file mode 100644
index 0000000..3057856
--- /dev/null
+++ b/node_modules/graceful-fs/package.json
@@ -0,0 +1,50 @@
+{
+ "name": "graceful-fs",
+ "description": "A drop-in replacement for fs, making various improvements.",
+ "version": "4.2.10",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/isaacs/node-graceful-fs"
+ },
+ "main": "graceful-fs.js",
+ "directories": {
+ "test": "test"
+ },
+ "scripts": {
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "postpublish": "git push origin --follow-tags",
+ "test": "nyc --silent node test.js | tap -c -",
+ "posttest": "nyc report"
+ },
+ "keywords": [
+ "fs",
+ "module",
+ "reading",
+ "retry",
+ "retries",
+ "queue",
+ "error",
+ "errors",
+ "handling",
+ "EMFILE",
+ "EAGAIN",
+ "EINVAL",
+ "EPERM",
+ "EACCESS"
+ ],
+ "license": "ISC",
+ "devDependencies": {
+ "import-fresh": "^2.0.0",
+ "mkdirp": "^0.5.0",
+ "rimraf": "^2.2.8",
+ "tap": "^12.7.0"
+ },
+ "files": [
+ "fs.js",
+ "graceful-fs.js",
+ "legacy-streams.js",
+ "polyfills.js",
+ "clone.js"
+ ]
+}
diff --git a/node_modules/graceful-fs/polyfills.js b/node_modules/graceful-fs/polyfills.js
new file mode 100644
index 0000000..46dea36
--- /dev/null
+++ b/node_modules/graceful-fs/polyfills.js
@@ -0,0 +1,355 @@
+var constants = require('constants')
+
+var origCwd = process.cwd
+var cwd = null
+
+var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform
+
+process.cwd = function() {
+ if (!cwd)
+ cwd = origCwd.call(process)
+ return cwd
+}
+try {
+ process.cwd()
+} catch (er) {}
+
+// This check is needed until node.js 12 is required
+if (typeof process.chdir === 'function') {
+ var chdir = process.chdir
+ process.chdir = function (d) {
+ cwd = null
+ chdir.call(process, d)
+ }
+ if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)
+}
+
+module.exports = patch
+
+function patch (fs) {
+ // (re-)implement some things that are known busted or missing.
+
+ // lchmod, broken prior to 0.6.2
+ // back-port the fix here.
+ if (constants.hasOwnProperty('O_SYMLINK') &&
+ process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
+ patchLchmod(fs)
+ }
+
+ // lutimes implementation, or no-op
+ if (!fs.lutimes) {
+ patchLutimes(fs)
+ }
+
+ // https://github.com/isaacs/node-graceful-fs/issues/4
+ // Chown should not fail on einval or eperm if non-root.
+ // It should not fail on enosys ever, as this just indicates
+ // that a fs doesn't support the intended operation.
+
+ fs.chown = chownFix(fs.chown)
+ fs.fchown = chownFix(fs.fchown)
+ fs.lchown = chownFix(fs.lchown)
+
+ fs.chmod = chmodFix(fs.chmod)
+ fs.fchmod = chmodFix(fs.fchmod)
+ fs.lchmod = chmodFix(fs.lchmod)
+
+ fs.chownSync = chownFixSync(fs.chownSync)
+ fs.fchownSync = chownFixSync(fs.fchownSync)
+ fs.lchownSync = chownFixSync(fs.lchownSync)
+
+ fs.chmodSync = chmodFixSync(fs.chmodSync)
+ fs.fchmodSync = chmodFixSync(fs.fchmodSync)
+ fs.lchmodSync = chmodFixSync(fs.lchmodSync)
+
+ fs.stat = statFix(fs.stat)
+ fs.fstat = statFix(fs.fstat)
+ fs.lstat = statFix(fs.lstat)
+
+ fs.statSync = statFixSync(fs.statSync)
+ fs.fstatSync = statFixSync(fs.fstatSync)
+ fs.lstatSync = statFixSync(fs.lstatSync)
+
+ // if lchmod/lchown do not exist, then make them no-ops
+ if (fs.chmod && !fs.lchmod) {
+ fs.lchmod = function (path, mode, cb) {
+ if (cb) process.nextTick(cb)
+ }
+ fs.lchmodSync = function () {}
+ }
+ if (fs.chown && !fs.lchown) {
+ fs.lchown = function (path, uid, gid, cb) {
+ if (cb) process.nextTick(cb)
+ }
+ fs.lchownSync = function () {}
+ }
+
+ // on Windows, A/V software can lock the directory, causing this
+ // to fail with an EACCES or EPERM if the directory contains newly
+ // created files. Try again on failure, for up to 60 seconds.
+
+ // Set the timeout this long because some Windows Anti-Virus, such as Parity
+ // bit9, may lock files for up to a minute, causing npm package install
+ // failures. Also, take care to yield the scheduler. Windows scheduling gives
+ // CPU to a busy looping process, which can cause the program causing the lock
+ // contention to be starved of CPU by node, so the contention doesn't resolve.
+ if (platform === "win32") {
+ fs.rename = typeof fs.rename !== 'function' ? fs.rename
+ : (function (fs$rename) {
+ function rename (from, to, cb) {
+ var start = Date.now()
+ var backoff = 0;
+ fs$rename(from, to, function CB (er) {
+ if (er
+ && (er.code === "EACCES" || er.code === "EPERM")
+ && Date.now() - start < 60000) {
+ setTimeout(function() {
+ fs.stat(to, function (stater, st) {
+ if (stater && stater.code === "ENOENT")
+ fs$rename(from, to, CB);
+ else
+ cb(er)
+ })
+ }, backoff)
+ if (backoff < 100)
+ backoff += 10;
+ return;
+ }
+ if (cb) cb(er)
+ })
+ }
+ if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)
+ return rename
+ })(fs.rename)
+ }
+
+ // if read() returns EAGAIN, then just try it again.
+ fs.read = typeof fs.read !== 'function' ? fs.read
+ : (function (fs$read) {
+ function read (fd, buffer, offset, length, position, callback_) {
+ var callback
+ if (callback_ && typeof callback_ === 'function') {
+ var eagCounter = 0
+ callback = function (er, _, __) {
+ if (er && er.code === 'EAGAIN' && eagCounter < 10) {
+ eagCounter ++
+ return fs$read.call(fs, fd, buffer, offset, length, position, callback)
+ }
+ callback_.apply(this, arguments)
+ }
+ }
+ return fs$read.call(fs, fd, buffer, offset, length, position, callback)
+ }
+
+ // This ensures `util.promisify` works as it does for native `fs.read`.
+ if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)
+ return read
+ })(fs.read)
+
+ fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync
+ : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {
+ var eagCounter = 0
+ while (true) {
+ try {
+ return fs$readSync.call(fs, fd, buffer, offset, length, position)
+ } catch (er) {
+ if (er.code === 'EAGAIN' && eagCounter < 10) {
+ eagCounter ++
+ continue
+ }
+ throw er
+ }
+ }
+ }})(fs.readSync)
+
+ function patchLchmod (fs) {
+ fs.lchmod = function (path, mode, callback) {
+ fs.open( path
+ , constants.O_WRONLY | constants.O_SYMLINK
+ , mode
+ , function (err, fd) {
+ if (err) {
+ if (callback) callback(err)
+ return
+ }
+ // prefer to return the chmod error, if one occurs,
+ // but still try to close, and report closing errors if they occur.
+ fs.fchmod(fd, mode, function (err) {
+ fs.close(fd, function(err2) {
+ if (callback) callback(err || err2)
+ })
+ })
+ })
+ }
+
+ fs.lchmodSync = function (path, mode) {
+ var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)
+
+ // prefer to return the chmod error, if one occurs,
+ // but still try to close, and report closing errors if they occur.
+ var threw = true
+ var ret
+ try {
+ ret = fs.fchmodSync(fd, mode)
+ threw = false
+ } finally {
+ if (threw) {
+ try {
+ fs.closeSync(fd)
+ } catch (er) {}
+ } else {
+ fs.closeSync(fd)
+ }
+ }
+ return ret
+ }
+ }
+
+ function patchLutimes (fs) {
+ if (constants.hasOwnProperty("O_SYMLINK") && fs.futimes) {
+ fs.lutimes = function (path, at, mt, cb) {
+ fs.open(path, constants.O_SYMLINK, function (er, fd) {
+ if (er) {
+ if (cb) cb(er)
+ return
+ }
+ fs.futimes(fd, at, mt, function (er) {
+ fs.close(fd, function (er2) {
+ if (cb) cb(er || er2)
+ })
+ })
+ })
+ }
+
+ fs.lutimesSync = function (path, at, mt) {
+ var fd = fs.openSync(path, constants.O_SYMLINK)
+ var ret
+ var threw = true
+ try {
+ ret = fs.futimesSync(fd, at, mt)
+ threw = false
+ } finally {
+ if (threw) {
+ try {
+ fs.closeSync(fd)
+ } catch (er) {}
+ } else {
+ fs.closeSync(fd)
+ }
+ }
+ return ret
+ }
+
+ } else if (fs.futimes) {
+ fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }
+ fs.lutimesSync = function () {}
+ }
+ }
+
+ function chmodFix (orig) {
+ if (!orig) return orig
+ return function (target, mode, cb) {
+ return orig.call(fs, target, mode, function (er) {
+ if (chownErOk(er)) er = null
+ if (cb) cb.apply(this, arguments)
+ })
+ }
+ }
+
+ function chmodFixSync (orig) {
+ if (!orig) return orig
+ return function (target, mode) {
+ try {
+ return orig.call(fs, target, mode)
+ } catch (er) {
+ if (!chownErOk(er)) throw er
+ }
+ }
+ }
+
+
+ function chownFix (orig) {
+ if (!orig) return orig
+ return function (target, uid, gid, cb) {
+ return orig.call(fs, target, uid, gid, function (er) {
+ if (chownErOk(er)) er = null
+ if (cb) cb.apply(this, arguments)
+ })
+ }
+ }
+
+ function chownFixSync (orig) {
+ if (!orig) return orig
+ return function (target, uid, gid) {
+ try {
+ return orig.call(fs, target, uid, gid)
+ } catch (er) {
+ if (!chownErOk(er)) throw er
+ }
+ }
+ }
+
+ function statFix (orig) {
+ if (!orig) return orig
+ // Older versions of Node erroneously returned signed integers for
+ // uid + gid.
+ return function (target, options, cb) {
+ if (typeof options === 'function') {
+ cb = options
+ options = null
+ }
+ function callback (er, stats) {
+ if (stats) {
+ if (stats.uid < 0) stats.uid += 0x100000000
+ if (stats.gid < 0) stats.gid += 0x100000000
+ }
+ if (cb) cb.apply(this, arguments)
+ }
+ return options ? orig.call(fs, target, options, callback)
+ : orig.call(fs, target, callback)
+ }
+ }
+
+ function statFixSync (orig) {
+ if (!orig) return orig
+ // Older versions of Node erroneously returned signed integers for
+ // uid + gid.
+ return function (target, options) {
+ var stats = options ? orig.call(fs, target, options)
+ : orig.call(fs, target)
+ if (stats) {
+ if (stats.uid < 0) stats.uid += 0x100000000
+ if (stats.gid < 0) stats.gid += 0x100000000
+ }
+ return stats;
+ }
+ }
+
+ // ENOSYS means that the fs doesn't support the op. Just ignore
+ // that, because it doesn't matter.
+ //
+ // if there's no getuid, or if getuid() is something other
+ // than 0, and the error is EINVAL or EPERM, then just ignore
+ // it.
+ //
+ // This specific case is a silent failure in cp, install, tar,
+ // and most other unix tools that manage permissions.
+ //
+ // When running as root, or if other types of errors are
+ // encountered, then it's strict.
+ function chownErOk (er) {
+ if (!er)
+ return true
+
+ if (er.code === "ENOSYS")
+ return true
+
+ var nonroot = !process.getuid || process.getuid() !== 0
+ if (nonroot) {
+ if (er.code === "EINVAL" || er.code === "EPERM")
+ return true
+ }
+
+ return false
+ }
+}
diff --git a/node_modules/gulp-cli/LICENSE b/node_modules/gulp-cli/LICENSE
new file mode 100644
index 0000000..9aedc0d
--- /dev/null
+++ b/node_modules/gulp-cli/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Blaine Bublitz, Eric Schoffstall and other 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.
diff --git a/node_modules/gulp-cli/README.md b/node_modules/gulp-cli/README.md
new file mode 100644
index 0000000..a998637
--- /dev/null
+++ b/node_modules/gulp-cli/README.md
@@ -0,0 +1,240 @@
+
+
+
+
+
+
+# gulp-cli
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Command Line Utility for Gulp
+
+## Usage
+
+```bash
+> gulp [flags] ...
+```
+
+## Custom Metadata
+
+When listing tasks with the `gulp -T` command, gulp-cli displays some custom metadata as defined upon task functions. Currently supported properties:
+
+* `task.description` - String of the description to display.
+
+```js
+function clean() { ... }
+clean.description = 'Cleans up generated files.';
+```
+
+* `task.flags` - Object with key/value pairs being flag/description to display.
+
+```js
+function build() { ... }
+build.flags = {
+ '--prod': 'Builds in production mode.'
+};
+```
+
+Example Usage:
+
+```js
+function build() { ... }
+build.description = 'Build entire project.';
+build.flags = {
+ '--prod': 'Builds in production mode (minification, etc).'
+};
+// gulp 3.x
+gulp.task('build', build);
+// gulp 4.x
+gulp.task(build);
+```
+
+## Tasks
+
+The task(s) listed on the command line will be executed.
+If more than one task is listed, Gulp will execute all of them
+concurrently, that is, as if they had all been listed as dependencies of
+a single task.
+
+By default, Gulp does not serialize tasks listed on the command line. If you would like to execute tasks serially, you must specify the `--series` flag. e.g. `gulp clean build --series`
+
+Just running `gulp` will execute the task `default`. If there is no
+`default` task, gulp will error.
+
+## Completion
+> Thanks to the grunt team, specifically Tyler Kellen
+
+To enable tasks auto-completion in shell you should add `eval "$(gulp --completion=shell)"` in your `.shellrc` file.
+
+###### Bash:
+
+Add `eval "$(gulp --completion=bash)"` to `~/.bashrc`.
+
+###### Zsh:
+
+Add `eval "$(gulp --completion=zsh)"` to `~/.zshrc`.
+
+###### Powershell:
+
+Add `Invoke-Expression ((gulp --completion=powershell) -join [System.Environment]::NewLine)` to `$PROFILE`.
+
+###### Fish:
+
+Add `gulp --completion=fish | source` to `~/.config/fish/config.fish`.
+
+## Compilers
+
+You can find a list of supported languages at https://github.com/js-cli/js-interpret. If you would like to add support for a new language, send pull requests/open issues on that project.
+
+## Environment
+
+The CLI adds process.env.INIT_CWD which is the original cwd it was launched from.
+
+## Configuration
+
+Configuration is supported through the use of a `.gulp.*` file (e.g. `.gulp.json`, `.gulp.yml`). You can find a list of supported languages at https://github.com/js-cli/js-interpret.
+
+Configuration from the home directory (`~`) and current working directory (`cwd`) are merged with `cwd` taking precedence.
+
+Supported configurations properties:
+
+| Property | Description |
+|--------------------|-------------|
+| description | Top-level description of the project/gulpfile (Replaces "Tasks for ~/path/of/gulpfile.js") |
+| flags.continue | Continue execution of tasks upon failure by default. |
+| flags.compactTasks | Reduce the output of task dependency tree by default. |
+| flags.tasksDepth | Set default depth of task dependency tree. |
+| flags.gulpfile | Set a default gulpfile |
+| flags.silent | Silence logging by default |
+| flags.series | Run tasks given on the CLI in series (the default is parallel) |
+| flags.require | An array of modules to require before running the gulpfile. Any relative paths will be resolved against the `--cwd` directory (if you don't want that behavior, use absolute paths) |
+| flags.nodeFlags | An array of flags used to forcibly respawn the process upon startup. For example, if you always want your gulpfiles to run in node's harmony mode, you can set `--harmony` here |
+
+## Flags
+
+gulp has very few flags to know about. All other flags are for tasks to use if needed.
+
+__Some flags only work with gulp 4 and will be ignored when invoked against gulp 3.__
+
+
+
+
+ Flag
+ Short Flag
+ Description
+
+
+
+
+ --help
+ -h
+ Show this help.
+
+
+ --version
+ -v
+ Print the global and local gulp versions.
+
+
+ --require [path]
+
+ Will require a module before running the gulpfile. This is useful for transpilers but also has other applications.
+
+
+ --gulpfile [path]
+ -f
+ Manually set path of gulpfile. Useful if you have multiple gulpfiles. This will set the CWD to the gulpfile directory as well.
+
+
+ --cwd [path]
+
+ Manually set the CWD. The search for the gulpfile, as well as the relativity of all requires (including the `--require` flag) will be from here.
+
+
+ --verify [path (optional)]
+
+ Will verify plugins referenced in project's package.json against the plugins blacklist.
+
+
+ --tasks
+ -T
+ Print the task dependency tree for the loaded gulpfile.
+
+
+ --tasks-simple
+
+ Print a plaintext list of tasks for the loaded gulpfile.
+
+
+ --tasks-json [path]
+
+ Print the task dependency tree, in JSON format, for the loaded gulpfile. The [path] argument is optional, and if given writes the JSON to the path.
+
+
+ --tasks-depth [number]
+
+ Specify the depth of the task dependency tree to print. This flag can be used with --tasks or --tasks-json. (This flag was named --depth before but is deprecated.)
+
+
+ --compact-tasks
+
+ Reduce the output of task dependency tree by printing only top tasks and their child tasks. This flag can be used with --tasks or --tasks-json.
+
+
+ --sort-tasks
+
+ Will sort top tasks of task dependency tree. This flag can be used with --tasks.
+
+
+ --color
+
+ Will force gulp and gulp plugins to display colors, even when no color support is detected.
+
+
+ --no-color
+
+ Will force gulp and gulp plugins to not display colors, even when color support is detected.
+
+
+ --silent
+ -S
+ Suppress all gulp logging.
+
+
+ --continue
+
+ Continue execution of tasks upon failure.
+
+
+ --series
+
+ Run tasks given on the CLI in series (the default is parallel).
+
+
+ --log-level
+ -L
+ Set the loglevel. -L for least verbose and -LLLL for most verbose. -LLL is default.
+
+
+
+
+## License
+
+MIT
+
+[downloads-image]: http://img.shields.io/npm/dm/gulp-cli.svg
+[npm-url]: https://www.npmjs.com/package/gulp-cli
+[npm-image]: http://img.shields.io/npm/v/gulp-cli.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/gulp-cli
+[travis-image]: http://img.shields.io/travis/gulpjs/gulp-cli.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/gulp-cli
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/gulp-cli.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/gulp-cli
+[coveralls-image]: http://img.shields.io/coveralls/gulpjs/gulp-cli/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
diff --git a/node_modules/gulp-cli/bin/gulp.js b/node_modules/gulp-cli/bin/gulp.js
new file mode 100755
index 0000000..b6423d1
--- /dev/null
+++ b/node_modules/gulp-cli/bin/gulp.js
@@ -0,0 +1,5 @@
+#!/usr/bin/env node
+
+'use strict';
+
+require('../')();
diff --git a/node_modules/gulp-cli/completion/README.md b/node_modules/gulp-cli/completion/README.md
new file mode 100644
index 0000000..3fa466f
--- /dev/null
+++ b/node_modules/gulp-cli/completion/README.md
@@ -0,0 +1,20 @@
+# Completion for gulp
+> Thanks to the grunt team, specifically Tyler Kellen
+
+To enable tasks auto-completion in shell you should add `eval "$(gulp --completion=shell)"` in your `.shellrc` file.
+
+## Bash
+
+Add `eval "$(gulp --completion=bash)"` to `~/.bashrc`.
+
+## Zsh
+
+Add `eval "$(gulp --completion=zsh)"` to `~/.zshrc`.
+
+## Powershell
+
+Add `Invoke-Expression ((gulp --completion=powershell) -join [System.Environment]::NewLine)` to `$PROFILE`.
+
+## Fish
+
+Add `gulp --completion=fish | source` to `~/.config/fish/config.fish`.
diff --git a/node_modules/gulp-cli/completion/bash b/node_modules/gulp-cli/completion/bash
new file mode 100644
index 0000000..704c27c
--- /dev/null
+++ b/node_modules/gulp-cli/completion/bash
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+# Borrowed from grunt-cli
+# http://gruntjs.com/
+#
+# Copyright (c) 2012 Tyler Kellen, contributors
+# Licensed under the MIT license.
+# https://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
+
+# Usage:
+#
+# To enable bash completion for gulp, add the following line (minus the
+# leading #, which is the bash comment character) to your ~/.bashrc file:
+#
+# eval "$(gulp --completion=bash)"
+
+# Enable bash autocompletion.
+function _gulp_completions() {
+ # The currently-being-completed word.
+ local cur="${COMP_WORDS[COMP_CWORD]}"
+ #Grab tasks
+ local compls=$(gulp --tasks-simple)
+ # Tell complete what stuff to show.
+ COMPREPLY=($(compgen -W "$compls" -- "$cur"))
+}
+
+complete -o default -F _gulp_completions gulp
diff --git a/node_modules/gulp-cli/completion/fish b/node_modules/gulp-cli/completion/fish
new file mode 100644
index 0000000..f27f224
--- /dev/null
+++ b/node_modules/gulp-cli/completion/fish
@@ -0,0 +1,10 @@
+#!/usr/bin/env fish
+
+# Usage:
+#
+# To enable fish completion for gulp, add the following line to
+# your ~/.config/fish/config.fish file:
+#
+# gulp --completion=fish | source
+
+complete -c gulp -a "(gulp --tasks-simple)" -f
diff --git a/node_modules/gulp-cli/completion/powershell b/node_modules/gulp-cli/completion/powershell
new file mode 100644
index 0000000..08ec438
--- /dev/null
+++ b/node_modules/gulp-cli/completion/powershell
@@ -0,0 +1,61 @@
+# Copyright (c) 2014 Jason Jarrett
+#
+# Tab completion for the `gulp`
+#
+# Usage:
+#
+# To enable powershell completion for gulp you need to be running
+# at least PowerShell v3 or greater and add the below to your $PROFILE
+#
+# Invoke-Expression ((gulp --completion=powershell) -join [System.Environment]::NewLine)
+#
+#
+
+$gulp_completion_Process = {
+ param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameter)
+
+
+ # Load up an assembly to read the gulpfile's sha1
+ if(-not $global:GulpSHA1Managed) {
+ [Reflection.Assembly]::LoadWithPartialName("System.Security") | out-null
+ $global:GulpSHA1Managed = new-Object System.Security.Cryptography.SHA1Managed
+ }
+
+ # setup a global (in-memory) cache
+ if(-not $global:GulpfileShaCache) {
+ $global:GulpfileShaCache = @{};
+ }
+
+ $cache = $global:GulpfileShaCache;
+
+ # Get the gulpfile's sha1
+ $sha1gulpFile = (resolve-path gulpfile.js -ErrorAction Ignore | %{
+ $file = [System.IO.File]::Open($_.Path, "open", "read")
+ [string]::join('', ($global:GulpSHA1Managed.ComputeHash($file) | %{ $_.ToString("x2") }))
+ $file.Dispose()
+ })
+
+ # lookup the sha1 for previously cached task lists.
+ if($cache.ContainsKey($sha1gulpFile)){
+ $tasks = $cache[$sha1gulpFile];
+ } else {
+ $tasks = (gulp --tasks-simple).split("`n");
+ $cache[$sha1gulpFile] = $tasks;
+ }
+
+
+ $tasks |
+ where { $_.startswith($commandName) }
+ Sort-Object |
+ foreach { New-Object System.Management.Automation.CompletionResult $_, $_, 'ParameterValue', ('{0}' -f $_) }
+}
+
+if (-not $global:options) {
+ $global:options = @{
+ CustomArgumentCompleters = @{};
+ NativeArgumentCompleters = @{}
+ }
+}
+
+$global:options['NativeArgumentCompleters']['gulp'] = $gulp_completion_Process
+$function:tabexpansion2 = $function:tabexpansion2 -replace 'End\r\n{','End { if ($null -ne $options) { $options += $global:options} else {$options = $global:options}'
diff --git a/node_modules/gulp-cli/completion/zsh b/node_modules/gulp-cli/completion/zsh
new file mode 100644
index 0000000..8169b22
--- /dev/null
+++ b/node_modules/gulp-cli/completion/zsh
@@ -0,0 +1,25 @@
+#!/bin/zsh
+
+# Borrowed from grunt-cli
+# http://gruntjs.com/
+#
+# Copyright (c) 2012 Tyler Kellen, contributors
+# Licensed under the MIT license.
+# https://github.com/gruntjs/grunt/blob/master/LICENSE-MIT
+
+# Usage:
+#
+# To enable zsh completion for gulp, add the following line (minus the
+# leading #, which is the zsh comment character) to your ~/.zshrc file:
+#
+# eval "$(gulp --completion=zsh)"
+
+# Enable zsh autocompletion.
+function _gulp_completion() {
+ # Grab tasks
+ compls=$(gulp --tasks-simple)
+ completions=(${=compls})
+ compadd -- $completions
+}
+
+compdef _gulp_completion gulp
diff --git a/node_modules/gulp-cli/gulp.1 b/node_modules/gulp-cli/gulp.1
new file mode 100644
index 0000000..a9342d8
--- /dev/null
+++ b/node_modules/gulp-cli/gulp.1
@@ -0,0 +1,83 @@
+.TH "GULP" "" "June 2020" "" ""
+.SH "NAME"
+\fBgulp\fR
+.SS Usage
+.P
+\fBgulp [flags] \.\.\.\fP
+.SS Tasks
+.P
+The task(s) listed will be executed\.
+If more than one task is listed, Gulp will execute all of them
+concurrently, that is, as if they had all been listed as dependencies of
+a single task\.
+.P
+By default, Gulp does not serialize tasks listed on the command line\. If you would like to execute tasks serially, you must specify the \fB\-\-series\fP flag\. e\.g\. \fBgulp clean build \-\-series\fP
+.P
+Just running \fBgulp\fP will execute the task \fBdefault\fP\|\. If there is no
+\fBdefault\fP task, gulp will error\.
+.SS Compilers
+.P
+You can find a list of supported languages at https:// If you would like to add support for a new language, send pull requests/open issues on that project\.
+.SS Environment
+.P
+The CLI adds process\.env\.INIT_CWD which is the original cwd it was launched from\.
+.SS Flags
+.P
+gulp has very few flags to know about\. All other flags are for tasks to use if needed\.
+.P
+\fBSome flags only work with gulp 4 and will be ignored when invoked against gulp 3\.\fR
+.P
+\fB\-\-help\fR, \fB\-h\fR
+ Show the help\.
+.P
+\fB\-\-version\fR, \fB\-v\fR
+ Print the global and local gulp versions\.
+.P
+\fB\-\-require\fR [path]
+ Will require a module before running the gulpfile\. This is useful for transpilers but also has other applications\.
+.P
+\fB\-\-gulpfile\fR [path], \fB\-f\fR [path]
+ Manually set path of gulpfile\. Useful if you have multiple gulpfiles\. This will set the CWD to the gulpfile directory as well\.
+.P
+\fB\-\-cwd\fR [path]
+ Manually set the CWD\. The search for the gulpfile, as well as the relativity of all requires will be from here\.
+.P
+\fB\-\-verify\fR [path (optional)]
+ Will verify plugins referenced in project's package\.json against the plugins blacklist\.
+.P
+\fB\-\-tasks\fR, \fB\-T\fR
+ Print the task dependency tree for the loaded gulpfile\.
+.P
+\fB\-\-tasks\-simple\fR
+ Print a plaintext list of tasks for the loaded gulpfile\.
+.P
+\fB\-\-tasks\-json\fR [path]
+ Print the task dependency tree, in JSON format, for the loaded gulpfile\. The [path] argument is optional, and if given writes the JSON to the path\.
+.P
+\fB\-\-tasks\-depth\fR [number]
+ Specify the depth of the task dependency tree to print\. This flag can be used with \-\-tasks or \-\-tasks\-json\. (This flag was named \-\-depth before but is deprecated\.)
+.P
+\fB\-\-compact\-tasks\fR
+ Reduce the output of task dependency tree by printing only top tasks and their child tasks\. This flag can be used with \-\-tasks or \-\-tasks\-json\.
+.P
+\fB\-\-sort\-tasks\fR
+ Will sort top tasks of task dependency tree\. This flag can be used with \-\-tasks\.
+.P
+\fB\-\-color\fR
+ Will force gulp and gulp plugins to display colors, even when no color support is detected\.
+.P
+\fB\-\-no\-color\fR
+ Will force gulp and gulp plugins to not display colors, even when color support is detected\.
+.P
+\fB\-\-silent\fR, \fB\-S\fR
+ Suppress all gulp logging\.
+.P
+\fB\-\-continue\fR
+ Continue execution of tasks upon failure\.
+.P
+\fB\-\-series\fR
+ Run tasks given on the CLI in series (the default is parallel)\.
+.P
+\fB\-\-log\-level\fR, \fB\-L\fR
+ Set the loglevel\. \-L for least verbose and \-LLLL for most verbose\. \-LLL is default\.
+
diff --git a/node_modules/gulp-cli/index.js b/node_modules/gulp-cli/index.js
new file mode 100644
index 0000000..258c86a
--- /dev/null
+++ b/node_modules/gulp-cli/index.js
@@ -0,0 +1,212 @@
+'use strict';
+
+var fs = require('fs');
+var path = require('path');
+var log = require('gulplog');
+var yargs = require('yargs');
+var Liftoff = require('liftoff');
+var interpret = require('interpret');
+var v8flags = require('v8flags');
+var findRange = require('semver-greatest-satisfied-range');
+var ansi = require('./lib/shared/ansi');
+var exit = require('./lib/shared/exit');
+var tildify = require('./lib/shared/tildify');
+var makeTitle = require('./lib/shared/make-title');
+var cliOptions = require('./lib/shared/cli-options');
+var completion = require('./lib/shared/completion');
+var verifyDeps = require('./lib/shared/verify-dependencies');
+var cliVersion = require('./package.json').version;
+var getBlacklist = require('./lib/shared/get-blacklist');
+var toConsole = require('./lib/shared/log/to-console');
+
+var loadConfigFiles = require('./lib/shared/config/load-files');
+var mergeConfigToCliFlags = require('./lib/shared/config/cli-flags');
+var mergeConfigToEnvFlags = require('./lib/shared/config/env-flags');
+
+// Logging functions
+var logVerify = require('./lib/shared/log/verify');
+var logBlacklistError = require('./lib/shared/log/blacklist-error');
+
+// Get supported ranges
+var ranges = fs.readdirSync(path.join(__dirname, '/lib/versioned/'));
+
+// Set env var for ORIGINAL cwd
+// before anything touches it
+process.env.INIT_CWD = process.cwd();
+
+var cli = new Liftoff({
+ name: 'gulp',
+ processTitle: makeTitle('gulp', process.argv.slice(2)),
+ completions: completion,
+ extensions: interpret.jsVariants,
+ v8flags: v8flags,
+ configFiles: {
+ '.gulp': {
+ home: {
+ path: '~',
+ extensions: interpret.extensions,
+ },
+ cwd: {
+ path: '.',
+ extensions: interpret.extensions,
+ },
+ },
+ },
+});
+
+var usage =
+ '\n' + ansi.bold('Usage:') +
+ ' gulp ' + ansi.blue('[options]') + ' tasks';
+
+var parser = yargs.usage(usage, cliOptions);
+var opts = parser.argv;
+
+cli.on('require', function(name) {
+ // This is needed because interpret needs to stub the .mjs extension
+ // Without the .mjs require hook, rechoir blows up
+ // However, we don't want to show the mjs-stub loader in the logs
+ if (path.basename(name, '.js') !== 'mjs-stub') {
+ log.info('Requiring external module', ansi.magenta(name));
+ }
+});
+
+cli.on('requireFail', function(name, error) {
+ log.warn(
+ ansi.yellow('Failed to load external module'),
+ ansi.magenta(name)
+ );
+ /* istanbul ignore else */
+ if (error) {
+ log.warn(ansi.yellow(error.toString()));
+ }
+});
+
+cli.on('respawn', function(flags, child) {
+ var nodeFlags = ansi.magenta(flags.join(', '));
+ var pid = ansi.magenta(child.pid);
+ log.info('Node flags detected:', nodeFlags);
+ log.info('Respawned to PID:', pid);
+});
+
+function run() {
+ cli.prepare({
+ cwd: opts.cwd,
+ configPath: opts.gulpfile,
+ require: opts.require,
+ completion: opts.completion,
+ }, function(env) {
+ var cfgLoadOrder = ['home', 'cwd'];
+ var cfg = loadConfigFiles(env.configFiles['.gulp'], cfgLoadOrder);
+ opts = mergeConfigToCliFlags(opts, cfg);
+ env = mergeConfigToEnvFlags(env, cfg, opts);
+ env.configProps = cfg;
+
+ // Set up event listeners for logging again after configuring.
+ toConsole(log, opts);
+
+ cli.execute(env, env.nodeFlags, handleArguments);
+ });
+}
+
+module.exports = run;
+
+// The actual logic
+function handleArguments(env) {
+
+ // This translates the --continue flag in gulp
+ // To the settle env variable for undertaker
+ // We use the process.env so the user's gulpfile
+ // Can know about the flag
+ if (opts.continue) {
+ process.env.UNDERTAKER_SETTLE = 'true';
+ }
+
+ if (opts.help) {
+ parser.showHelp(console.log);
+ exit(0);
+ }
+
+ // Anything that needs to print outside of the logging mechanism should use console.log
+ if (opts.version) {
+ console.log('CLI version:', cliVersion);
+ console.log('Local version:', env.modulePackage.version || 'Unknown');
+ exit(0);
+ }
+
+ if (opts.verify) {
+ var pkgPath = opts.verify !== true ? opts.verify : 'package.json';
+ /* istanbul ignore else */
+ if (path.resolve(pkgPath) !== path.normalize(pkgPath)) {
+ pkgPath = path.join(env.cwd, pkgPath);
+ }
+ log.info('Verifying plugins in ' + pkgPath);
+ return getBlacklist(function(err, blacklist) {
+ /* istanbul ignore if */
+ if (err) {
+ return logBlacklistError(err);
+ }
+
+ var blacklisted = verifyDeps(require(pkgPath), blacklist);
+
+ logVerify(blacklisted);
+ });
+ }
+
+ if (!env.modulePath) {
+ /* istanbul ignore next */
+ var missingNodeModules =
+ fs.existsSync(path.join(env.cwd, 'package.json'))
+ && !fs.existsSync(path.join(env.cwd, 'node_modules'));
+
+ /* istanbul ignore next */
+ var missingGulpMessage =
+ missingNodeModules
+ ? 'Local modules not found in'
+ : 'Local gulp not found in';
+ log.error(
+ ansi.red(missingGulpMessage),
+ ansi.magenta(tildify(env.cwd))
+ );
+ var hasYarn = fs.existsSync(path.join(env.cwd, 'yarn.lock'));
+ /* istanbul ignore next */
+ var installCommand =
+ missingNodeModules
+ ? hasYarn
+ ? 'yarn install'
+ : 'npm install'
+ : hasYarn
+ ? 'yarn add gulp'
+ : 'npm install gulp';
+ log.error(ansi.red('Try running: ' + installCommand));
+ exit(1);
+ }
+
+ if (!env.configPath) {
+ log.error(ansi.red('No gulpfile found'));
+ exit(1);
+ }
+
+ // Chdir before requiring gulpfile to make sure
+ // we let them chdir as needed
+ if (process.cwd() !== env.cwd) {
+ process.chdir(env.cwd);
+ log.info(
+ 'Working directory changed to',
+ ansi.magenta(tildify(env.cwd))
+ );
+ }
+
+ // Find the correct CLI version to run
+ var range = findRange(env.modulePackage.version, ranges);
+
+ if (!range) {
+ log.error(
+ ansi.red('Unsupported gulp version', env.modulePackage.version)
+ );
+ exit(1);
+ }
+
+ // Load and execute the CLI version
+ var versionedDir = path.join(__dirname, '/lib/versioned/', range, '/');
+ require(versionedDir)(opts, env, env.configProps);
+}
diff --git a/node_modules/gulp-cli/lib/shared/ansi.js b/node_modules/gulp-cli/lib/shared/ansi.js
new file mode 100644
index 0000000..d5030fa
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/ansi.js
@@ -0,0 +1,41 @@
+'use strict';
+
+var colors = require('ansi-colors');
+var supportsColor = require('color-support');
+
+var hasColors = colorize();
+
+/* istanbul ignore next */
+module.exports = {
+ red: hasColors ? colors.red : noColor,
+ green: hasColors ? colors.green : noColor,
+ blue: hasColors ? colors.blue : noColor,
+ magenta: hasColors ? colors.magenta : noColor,
+ cyan: hasColors ? colors.cyan : noColor,
+ white: hasColors ? colors.white : noColor,
+ gray: hasColors ? colors.gray : noColor,
+ bgred: hasColors ? colors.bgred : noColor,
+ bold: hasColors ? colors.bold : noColor,
+ yellow: hasColors ? colors.yellow : noColor,
+};
+
+function noColor(message) {
+ return message;
+}
+
+function hasFlag(flag) {
+ return (process.argv.indexOf('--' + flag) !== -1);
+}
+
+function colorize() {
+ if (hasFlag('no-color')) {
+ return false;
+ }
+
+ /* istanbul ignore if */
+ if (hasFlag('color')) {
+ return true;
+ }
+
+ return supportsColor();
+}
diff --git a/node_modules/gulp-cli/lib/shared/cli-options.js b/node_modules/gulp-cli/lib/shared/cli-options.js
new file mode 100644
index 0000000..09d98e3
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/cli-options.js
@@ -0,0 +1,122 @@
+'use strict';
+
+var ansi = require('./ansi');
+
+module.exports = {
+ help: {
+ alias: 'h',
+ type: 'boolean',
+ desc: ansi.gray(
+ 'Show this help.'),
+ },
+ version: {
+ alias: 'v',
+ type: 'boolean',
+ desc: ansi.gray(
+ 'Print the global and local gulp versions.'),
+ },
+ require: {
+ type: 'string',
+ requiresArg: true,
+ desc: ansi.gray(
+ 'Will require a module before running the gulpfile. ' +
+ 'This is useful for transpilers but also has other applications.'),
+ },
+ gulpfile: {
+ alias: 'f',
+ type: 'string',
+ requiresArg: true,
+ desc: ansi.gray(
+ 'Manually set path of gulpfile. Useful if you have multiple gulpfiles. ' +
+ 'This will set the CWD to the gulpfile directory as well.'),
+ },
+ cwd: {
+ type: 'string',
+ requiresArg: true,
+ desc: ansi.gray(
+ 'Manually set the CWD. The search for the gulpfile, ' +
+ 'as well as the relativity of all requires will be from here.'),
+ },
+ verify: {
+ desc: ansi.gray(
+ 'Will verify plugins referenced in project\'s package.json against ' +
+ 'the plugins blacklist.'),
+ },
+ tasks: {
+ alias: 'T',
+ type: 'boolean',
+ desc: ansi.gray(
+ 'Print the task dependency tree for the loaded gulpfile.'),
+ },
+ 'tasks-simple': {
+ type: 'boolean',
+ desc: ansi.gray(
+ 'Print a plaintext list of tasks for the loaded gulpfile.'),
+ },
+ 'tasks-json': {
+ desc: ansi.gray(
+ 'Print the task dependency tree, ' +
+ 'in JSON format, for the loaded gulpfile.'),
+ },
+ 'tasks-depth': {
+ alias: 'depth',
+ type: 'number',
+ requiresArg: true,
+ default: undefined, // To detect if this cli option is specified.
+ desc: ansi.gray(
+ 'Specify the depth of the task dependency tree.'),
+ },
+ 'compact-tasks': {
+ type: 'boolean',
+ default: undefined, // To detect if this cli option is specified.
+ desc: ansi.gray(
+ 'Reduce the output of task dependency tree by printing ' +
+ 'only top tasks and their child tasks.'),
+ },
+ 'sort-tasks': {
+ type: 'boolean',
+ default: undefined, // To detect if this cli option is specified.
+ desc: ansi.gray(
+ 'Will sort top tasks of task dependency tree.'),
+ },
+ color: {
+ type: 'boolean',
+ desc: ansi.gray(
+ 'Will force gulp and gulp plugins to display colors, ' +
+ 'even when no color support is detected.'),
+ },
+ 'no-color': {
+ type: 'boolean',
+ desc: ansi.gray(
+ 'Will force gulp and gulp plugins to not display colors, ' +
+ 'even when color support is detected.'),
+ },
+ silent: {
+ alias: 'S',
+ type: 'boolean',
+ default: undefined, // To detect if this cli option is specified.
+ desc: ansi.gray(
+ 'Suppress all gulp logging.'),
+ },
+ continue: {
+ type: 'boolean',
+ default: undefined, // To detect if this cli option is specified.
+ desc: ansi.gray(
+ 'Continue execution of tasks upon failure.'),
+ },
+ series: {
+ type: 'boolean',
+ default: undefined, // To detect if this cli option is specified.
+ desc: ansi.gray(
+ 'Run tasks given on the CLI in series (the default is parallel).'),
+ },
+ 'log-level': {
+ alias: 'L',
+ // Type isn't needed because count acts as a boolean
+ count: true,
+ default: undefined, // To detect if this cli option is specified.
+ desc: ansi.gray(
+ 'Set the loglevel. -L for least verbose and -LLLL for most verbose. ' +
+ '-LLL is default.'),
+ },
+};
diff --git a/node_modules/gulp-cli/lib/shared/completion.js b/node_modules/gulp-cli/lib/shared/completion.js
new file mode 100644
index 0000000..3a47023
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/completion.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var fs = require('fs');
+var path = require('path');
+
+module.exports = function(name) {
+ if (typeof name !== 'string') {
+ throw new Error('Missing completion type');
+ }
+ var file = path.join(__dirname, '../../completion', name);
+ try {
+ console.log(fs.readFileSync(file, 'utf8'));
+ process.exit(0);
+ } catch (err) {
+ console.log(
+ 'echo "gulp autocompletion rules for',
+ '\'' + name + '\'',
+ 'not found"'
+ );
+ process.exit(5);
+ }
+};
diff --git a/node_modules/gulp-cli/lib/shared/config/cli-flags.js b/node_modules/gulp-cli/lib/shared/config/cli-flags.js
new file mode 100644
index 0000000..1baf38d
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/config/cli-flags.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var copyProps = require('copy-props');
+
+var fromTo = {
+ 'flags.silent': 'silent',
+ 'flags.continue': 'continue',
+ 'flags.series': 'series',
+ 'flags.logLevel': 'logLevel',
+ 'flags.compactTasks': 'compactTasks',
+ 'flags.tasksDepth': 'tasksDepth',
+ 'flags.sortTasks': 'sortTasks',
+};
+
+function mergeConfigToCliFlags(opt, config) {
+ return copyProps(config, opt, fromTo, defaults);
+}
+
+function defaults(cfgInfo, optInfo) {
+ if (optInfo.value === undefined) {
+ return cfgInfo.value;
+ }
+}
+
+module.exports = mergeConfigToCliFlags;
diff --git a/node_modules/gulp-cli/lib/shared/config/env-flags.js b/node_modules/gulp-cli/lib/shared/config/env-flags.js
new file mode 100644
index 0000000..a5a4abd
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/config/env-flags.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var path = require('path');
+var copyProps = require('copy-props');
+
+var toFrom = {
+ configPath: 'flags.gulpfile',
+ configBase: 'flags.gulpfile',
+ require: 'flags.require',
+ nodeFlags: 'flags.nodeFlags',
+};
+
+function mergeConfigToEnvFlags(env, config, cliOpts) {
+ // This must reverse because `flags.gulpfile` determines 2 different properties
+ var reverse = true;
+ return copyProps(env, config, toFrom, convert, reverse);
+
+ function convert(configInfo, envInfo) {
+ if (envInfo.keyChain === 'configBase') {
+ if (cliOpts.gulpfile === undefined) {
+ return path.dirname(configInfo.value);
+ }
+ return;
+ }
+
+ if (envInfo.keyChain === 'configPath') {
+ if (cliOpts.gulpfile === undefined) {
+ return configInfo.value;
+ }
+ return;
+ }
+
+ if (envInfo.keyChain === 'require') {
+ return [].concat(envInfo.value, configInfo.value);
+ }
+
+ /* istanbul ignore else */
+ if (envInfo.keyChain === 'nodeFlags') {
+ return [].concat(configInfo.value || []);
+ }
+ }
+}
+
+module.exports = mergeConfigToEnvFlags;
diff --git a/node_modules/gulp-cli/lib/shared/config/load-files.js b/node_modules/gulp-cli/lib/shared/config/load-files.js
new file mode 100644
index 0000000..4ebb29c
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/config/load-files.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var copyProps = require('copy-props');
+var path = require('path');
+
+function loadConfigFiles(configFiles, configFileOrder) {
+ var config = {};
+
+ configFileOrder.forEach(loadFile);
+
+ function loadFile(key) {
+ var filePath = configFiles[key];
+ if (!filePath) {
+ return;
+ }
+
+ copyProps(require(filePath), config, convert);
+
+ function convert(loadedInfo) {
+ if (loadedInfo.keyChain === 'flags.gulpfile') {
+ return path.resolve(path.dirname(filePath), loadedInfo.value);
+ }
+ return loadedInfo.value;
+ }
+ }
+
+ return config;
+}
+
+module.exports = loadConfigFiles;
diff --git a/node_modules/gulp-cli/lib/shared/exit.js b/node_modules/gulp-cli/lib/shared/exit.js
new file mode 100644
index 0000000..9d619c3
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/exit.js
@@ -0,0 +1,15 @@
+'use strict';
+
+// Fix stdout truncation on windows
+function exit(code) {
+ /* istanbul ignore next */
+ if (process.platform === 'win32' && process.stdout.bufferSize) {
+ process.stdout.once('drain', function() {
+ process.exit(code);
+ });
+ return;
+ }
+ process.exit(code);
+}
+
+module.exports = exit;
diff --git a/node_modules/gulp-cli/lib/shared/get-blacklist.js b/node_modules/gulp-cli/lib/shared/get-blacklist.js
new file mode 100644
index 0000000..4cc16d4
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/get-blacklist.js
@@ -0,0 +1,62 @@
+'use strict';
+
+var https = require('https');
+
+var concat = require('concat-stream');
+
+var url = 'https://raw.githubusercontent.com/gulpjs/plugins/master/src/blackList.json';
+
+function collect(stream, cb) {
+ stream.on('error', cb);
+ stream.pipe(concat(onSuccess));
+
+ function onSuccess(result) {
+ cb(null, result);
+ }
+}
+
+function parse(str, cb) {
+ try {
+ cb(null, JSON.parse(str));
+ } catch (err) {
+ /* istanbul ignore next */
+ cb(new Error('Invalid Blacklist JSON.'));
+ }
+}
+
+// TODO: Test this impl
+function getBlacklist(cb) {
+ https.get(url, onRequest);
+
+ function onRequest(res) {
+ /* istanbul ignore if */
+ if (res.statusCode !== 200) {
+ // TODO: Test different status codes
+ return cb(new Error('Request failed. Status Code: ' + res.statusCode));
+ }
+
+ res.setEncoding('utf8');
+
+ collect(res, onCollect);
+ }
+
+ function onCollect(err, result) {
+ /* istanbul ignore if */
+ if (err) {
+ return cb(err);
+ }
+
+ parse(result, onParse);
+ }
+
+ function onParse(err, blacklist) {
+ /* istanbul ignore if */
+ if (err) {
+ return cb(err);
+ }
+
+ cb(null, blacklist);
+ }
+}
+
+module.exports = getBlacklist;
diff --git a/node_modules/gulp-cli/lib/shared/log/blacklist-error.js b/node_modules/gulp-cli/lib/shared/log/blacklist-error.js
new file mode 100644
index 0000000..b0355b2
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/log/blacklist-error.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var log = require('gulplog');
+
+var ansi = require('../ansi');
+var exit = require('../exit');
+
+/* istanbul ignore next */
+function logBlacklistError(err) {
+ log.error(ansi.red('Error: failed to retrieve plugins black-list'));
+ log.error(err.message); // Avoid duplicating for each version
+ exit(1);
+}
+
+module.exports = logBlacklistError;
diff --git a/node_modules/gulp-cli/lib/shared/log/copy-tree.js b/node_modules/gulp-cli/lib/shared/log/copy-tree.js
new file mode 100644
index 0000000..99d7b5f
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/log/copy-tree.js
@@ -0,0 +1,81 @@
+'use strict';
+
+function copyNode(node) {
+ var newNode = {};
+ Object.keys(node).forEach(function(key) {
+ newNode[key] = node[key];
+ });
+ return newNode;
+}
+
+var defaultNodeFactory = {
+ topNode: copyNode,
+ taskNode: copyNode,
+ childNode: copyNode,
+};
+
+function copyTree(tree, opts, nodeFactory) {
+ opts = opts || {};
+
+ var depth = opts.tasksDepth;
+ depth = typeof depth === 'number' ? ((depth < 1) ? 1 : depth) : null;
+
+ nodeFactory = nodeFactory || defaultNodeFactory;
+
+ var newTree = nodeFactory.topNode(tree);
+ newTree.nodes = [];
+
+ if (Array.isArray(tree.nodes)) {
+ tree.nodes.forEach(visit);
+ }
+
+ function visit(node) {
+ var newNode = nodeFactory.taskNode(node);
+ newNode.nodes = [];
+ newTree.nodes.push(newNode);
+
+ if (opts.compactTasks) {
+ forEach(node.nodes, copyNotRecursively, newNode);
+
+ } else if (!depth || depth > 1) {
+ forEach(node.nodes, copyRecursively, depth, 2, newNode);
+ }
+ }
+
+ function copyNotRecursively(child, newParent) {
+ var newChild = nodeFactory.childNode(child);
+ newChild.nodes = [];
+ newParent.nodes.push(newChild);
+
+ if (child.branch) {
+ forEach(child.nodes, copyNotRecursively, newChild);
+ }
+ }
+
+ function copyRecursively(child, maxDepth, nowDepth, newParent) {
+ var newChild = nodeFactory.childNode(child);
+ newChild.nodes = [];
+ newParent.nodes.push(newChild);
+
+ if (!maxDepth || maxDepth > nowDepth) {
+ forEach(child.nodes, copyRecursively, maxDepth, nowDepth + 1, newChild);
+ }
+ }
+
+ return newTree;
+}
+
+function forEach(nodes, fn) {
+ if (!Array.isArray(nodes)) {
+ return;
+ }
+
+ var args = Array.prototype.slice.call(arguments, 2);
+
+ for (var i = 0, n = nodes.length; i < n; i++) {
+ fn.apply(nodes[i], [nodes[i]].concat(args));
+ }
+}
+
+module.exports = copyTree;
+
diff --git a/node_modules/gulp-cli/lib/shared/log/tasks.js b/node_modules/gulp-cli/lib/shared/log/tasks.js
new file mode 100644
index 0000000..0b76b08
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/log/tasks.js
@@ -0,0 +1,166 @@
+'use strict';
+
+var archy = require('archy');
+var log = require('gulplog');
+
+var sortBy = require('array-sort');
+var isObject = require('isobject');
+
+var ansi = require('../ansi');
+var copyTree = require('./copy-tree');
+
+function logTasks(tree, opts, getTask) {
+ if (opts.sortTasks) {
+ tree.nodes = sortBy(tree.nodes, 'label');
+ }
+
+ var lineInfos = [];
+ var entryObserver = getLineInfoCollector(lineInfos);
+ var nodeFactory = getNodeFactory(getTask, entryObserver);
+
+ tree = copyTree(tree, opts, nodeFactory);
+ var spacer = getSpacerForLineIndents(tree, lineInfos);
+ var lines = getLinesContainingOnlyBranches(tree);
+
+ log.info(tree.label);
+ printTreeList(lines, spacer, lineInfos);
+}
+
+function getLineInfoCollector(lineInfos) {
+ return {
+ topTask: function(node) {
+ lineInfos.push({
+ name: node.label,
+ desc: node.desc,
+ type: 'top',
+ });
+ },
+ option: function(opt) {
+ lineInfos.push({
+ name: opt.label,
+ desc: opt.desc,
+ type: 'option',
+ });
+ },
+ childTask: function(node) {
+ lineInfos.push({
+ name: node.label,
+ type: 'child',
+ });
+ },
+ };
+}
+
+function getNodeFactory(getTask, entryObserver) {
+ return {
+ topNode: function(node) {
+ return {
+ label: node.label,
+ };
+ },
+
+ taskNode: function(node) {
+ /* istanbul ignore next */
+ var task = getTask(node.label) || {};
+
+ var newNode = {
+ label: node.label,
+ desc: typeof task.description === 'string' ? task.description : '',
+ opts: [],
+ };
+ entryObserver.topTask(newNode);
+
+ if (isObject(task.flags)) {
+ Object.keys(task.flags).sort().forEach(function(flag) {
+ if (flag.length === 0) {
+ return;
+ }
+ /* istanbul ignore next */
+ var opt = {
+ label: flag,
+ desc: typeof task.flags[flag] === 'string' ? task.flags[flag] : '',
+ };
+ entryObserver.option(opt);
+ newNode.opts.push(opt);
+ newNode.label += '\n' + opt.label; // The way of archy for options.
+ });
+ }
+
+ return newNode;
+ },
+
+ childNode: function(node) {
+ var newChild = {
+ label: node.label,
+ };
+ entryObserver.childTask(newChild);
+ newChild.label = ''; // Because don't use child tasks to calc indents.
+
+ return newChild;
+ },
+ };
+}
+
+function getSpacerForLineIndents(tree, lineInfos) {
+ var maxSize = 0;
+ var sizes = [];
+
+ archy(tree)
+ .split('\n')
+ .slice(1, -1)
+ .forEach(function(line, index) {
+ var info = lineInfos[index];
+ if (info.type === 'top' || info.type === 'option') {
+ maxSize = Math.max(maxSize, line.length);
+ sizes.push(line.length);
+ } else {
+ sizes.push(0);
+ }
+ });
+
+ maxSize += 3;
+
+ return function(index) {
+ return Array(maxSize - sizes[index]).join(' ');
+ };
+}
+
+function getLinesContainingOnlyBranches(tree) {
+ tree.nodes.forEach(function(node) {
+ node.label = '';
+ node.opts.forEach(function() {
+ node.label += '\n';
+ });
+ });
+
+ return archy(tree)
+ .split('\n')
+ .slice(1, -1);
+}
+
+function printTreeList(lines, spacer, lineInfos) {
+ lines.forEach(function(branch, index) {
+ var info = lineInfos[index];
+
+ var line = ansi.white(branch);
+
+ if (info.type === 'top') {
+ line += ansi.cyan(info.name);
+ if (info.desc.length > 0) {
+ line += spacer(index) + ansi.white(info.desc);
+ }
+ } else if (info.type === 'option') {
+ line += ansi.magenta(info.name);
+ if (info.desc.length > 0) {
+ line += spacer(index) + ansi.white('…' + info.desc);
+ }
+ } else { // If (info.type === 'child') {
+ line += ansi.white(info.name);
+ }
+
+ log.info(line);
+ });
+}
+
+module.exports = logTasks;
+
diff --git a/node_modules/gulp-cli/lib/shared/log/to-console.js b/node_modules/gulp-cli/lib/shared/log/to-console.js
new file mode 100644
index 0000000..43650af
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/log/to-console.js
@@ -0,0 +1,58 @@
+'use strict';
+
+var fancyLog = require('fancy-log');
+
+/* istanbul ignore next */
+function noop() {}
+
+// The sorting of the levels is
+// significant.
+var levels = [
+ 'error', // -L: Logs error events.
+ 'warn', // -LL: Logs warn and error events.
+ 'info', // -LLL: Logs info, warn and error events.
+ 'debug', // -LLLL: Logs all log levels.
+];
+
+function cleanup(log) {
+ levels.forEach(removeListeners);
+
+ function removeListeners(level) {
+ if (level === 'error') {
+ log.removeListener(level, noop);
+ log.removeListener(level, fancyLog.error);
+ } else {
+ log.removeListener(level, fancyLog);
+ }
+ }
+}
+
+function toConsole(log, opts) {
+ // Remove previous listeners to enable to call this twice.
+ cleanup(log);
+
+ // Return immediately if logging is
+ // not desired.
+ if (opts.tasksSimple || opts.tasksJson || opts.help || opts.version || opts.silent) {
+ // Keep from crashing process when silent.
+ log.on('error', noop);
+ return;
+ }
+
+ // Default loglevel to info level (3).
+ var loglevel = opts.logLevel || 3;
+
+ levels
+ .filter(function(item, i) {
+ return i < loglevel;
+ })
+ .forEach(function(level) {
+ if (level === 'error') {
+ log.on(level, fancyLog.error);
+ } else {
+ log.on(level, fancyLog);
+ }
+ });
+}
+
+module.exports = toConsole;
diff --git a/node_modules/gulp-cli/lib/shared/log/verify.js b/node_modules/gulp-cli/lib/shared/log/verify.js
new file mode 100644
index 0000000..7104623
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/log/verify.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var log = require('gulplog');
+
+var ansi = require('../ansi');
+var exit = require('../exit');
+
+function logVerify(blacklisted) {
+ var pluginNames = Object.keys(blacklisted);
+
+ if (!pluginNames.length) {
+ log.info(
+ ansi.green('There are no blacklisted plugins in this project')
+ );
+ exit(0);
+ }
+
+ log.warn(ansi.red('Blacklisted plugins found in this project:'));
+
+ pluginNames.map(function(pluginName) {
+ var reason = blacklisted[pluginName];
+ log.warn(ansi.bgred(pluginName) + ': ' + reason);
+ });
+
+ exit(1);
+}
+
+module.exports = logVerify;
diff --git a/node_modules/gulp-cli/lib/shared/make-title.js b/node_modules/gulp-cli/lib/shared/make-title.js
new file mode 100644
index 0000000..aa6d2ee
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/make-title.js
@@ -0,0 +1,11 @@
+'use strict';
+
+function makeTitle(cmd, argv) {
+ if (!argv || argv.length === 0) {
+ return cmd;
+ }
+
+ return [cmd].concat(argv).join(' ');
+}
+
+module.exports = makeTitle;
diff --git a/node_modules/gulp-cli/lib/shared/register-exports.js b/node_modules/gulp-cli/lib/shared/register-exports.js
new file mode 100644
index 0000000..572e9ed
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/register-exports.js
@@ -0,0 +1,21 @@
+'use strict';
+
+function registerExports(gulpInst, tasks) {
+ var taskNames = Object.keys(tasks);
+
+ if (taskNames.length) {
+ taskNames.forEach(register);
+ }
+
+ function register(taskName) {
+ var task = tasks[taskName];
+
+ if (typeof task !== 'function') {
+ return;
+ }
+
+ gulpInst.task(task.displayName || taskName, task);
+ }
+}
+
+module.exports = registerExports;
diff --git a/node_modules/gulp-cli/lib/shared/require-or-import.js b/node_modules/gulp-cli/lib/shared/require-or-import.js
new file mode 100644
index 0000000..6970ae4
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/require-or-import.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var pathToFileURL = require('url').pathToFileURL;
+
+var importESM;
+try {
+ // Node.js <10 errors out with a SyntaxError when loading a script that uses import().
+ // So a function is dynamically created to catch the SyntaxError at runtime instead of parsetime.
+ // That way we can keep supporting all Node.js versions all the way back to 0.10.
+ importESM = new Function('id', 'return import(id);');
+} catch (e) {
+ importESM = null;
+}
+
+function requireOrImport(path, callback) {
+ var err = null;
+ var cjs;
+ try {
+ cjs = require(path);
+ } catch (e) {
+ if (pathToFileURL && importESM && e.code === 'ERR_REQUIRE_ESM') {
+ // This is needed on Windows, because import() fails if providing a Windows file path.
+ var url = pathToFileURL(path);
+ importESM(url).then(function(esm) { callback(null, esm); }, callback);
+ return;
+ }
+ err = e;
+ }
+ process.nextTick(function() { callback(err, cjs); });
+}
+
+module.exports = requireOrImport;
diff --git a/node_modules/gulp-cli/lib/shared/tildify.js b/node_modules/gulp-cli/lib/shared/tildify.js
new file mode 100644
index 0000000..a9c61fc
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/tildify.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var replaceHomedir = require('replace-homedir');
+
+function tildify(filepath) {
+ return replaceHomedir(filepath, '~');
+}
+
+module.exports = tildify;
diff --git a/node_modules/gulp-cli/lib/shared/verify-dependencies.js b/node_modules/gulp-cli/lib/shared/verify-dependencies.js
new file mode 100644
index 0000000..a0d4812
--- /dev/null
+++ b/node_modules/gulp-cli/lib/shared/verify-dependencies.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var matchdep = require('matchdep');
+
+/**
+ * Given a collection of plugin names verifies this collection against
+ * the blacklist. Returns an object with:
+ * [plugin name]=>[blacklisting reason]
+ * or an empty object if none of the dependencies to check are blacklisted.
+ *
+ * @param pkg - package.json contents
+ * @param blacklist - contents of the blacklist in JSON format
+ */
+function verifyDependencies(pkg, blacklist) {
+ var blacklisted = matchdep
+ .filterAll(Object.keys(blacklist), pkg)
+ .reduce(function(blacklisted, pluginName) {
+ blacklisted[pluginName] = blacklist[pluginName];
+ return blacklisted;
+ }, {});
+
+ return blacklisted;
+}
+
+module.exports = verifyDependencies;
diff --git a/node_modules/gulp-cli/lib/versioned/^3.7.0/format-error.js b/node_modules/gulp-cli/lib/versioned/^3.7.0/format-error.js
new file mode 100644
index 0000000..705e0bf
--- /dev/null
+++ b/node_modules/gulp-cli/lib/versioned/^3.7.0/format-error.js
@@ -0,0 +1,23 @@
+'use strict';
+
+// Format orchestrator errors
+function formatError(e) {
+ if (!e.err) {
+ return e.message;
+ }
+
+ // PluginError
+ if (typeof e.err.showStack === 'boolean') {
+ return e.err.toString();
+ }
+
+ // Normal error
+ if (e.err.stack) {
+ return e.err.stack;
+ }
+
+ // Unknown (string, number, etc.)
+ return new Error(String(e.err)).stack;
+}
+
+module.exports = formatError;
diff --git a/node_modules/gulp-cli/lib/versioned/^3.7.0/index.js b/node_modules/gulp-cli/lib/versioned/^3.7.0/index.js
new file mode 100644
index 0000000..b3a0da5
--- /dev/null
+++ b/node_modules/gulp-cli/lib/versioned/^3.7.0/index.js
@@ -0,0 +1,83 @@
+'use strict';
+
+var fs = require('fs');
+
+var log = require('gulplog');
+var stdout = require('mute-stdout');
+
+var taskTree = require('./task-tree');
+var copyTree = require('../../shared/log/copy-tree');
+
+var tildify = require('../../shared/tildify');
+var logTasks = require('../../shared/log/tasks');
+var ansi = require('../../shared/ansi');
+var exit = require('../../shared/exit');
+var logEvents = require('./log/events');
+var logTasksSimple = require('./log/tasks-simple');
+var registerExports = require('../../shared/register-exports');
+var requireOrImport = require('../../shared/require-or-import');
+
+function execute(opts, env, config) {
+ var tasks = opts._;
+ var toRun = tasks.length ? tasks : ['default'];
+
+ if (opts.tasksSimple || opts.tasks || opts.tasksJson) {
+ // Mute stdout if we are listing tasks
+ stdout.mute();
+ }
+
+ // This is what actually loads up the gulpfile
+ requireOrImport(env.configPath, function(err, exported) {
+ // Before import(), if require() failed we got an unhandled exception on the module level.
+ // So console.error() & exit() were added here to mimic the old behavior as close as possible.
+ if (err) {
+ console.error(err);
+ exit(1);
+ }
+
+ log.info('Using gulpfile', ansi.magenta(tildify(env.configPath)));
+
+ var gulpInst = require(env.modulePath);
+ logEvents(gulpInst);
+
+ registerExports(gulpInst, exported);
+
+ // Always unmute stdout after gulpfile is required
+ stdout.unmute();
+
+ var tree;
+ if (opts.tasksSimple) {
+ return logTasksSimple(env, gulpInst);
+ }
+ if (opts.tasks) {
+ tree = taskTree(gulpInst.tasks);
+ if (config.description && typeof config.description === 'string') {
+ tree.label = config.description;
+ } else {
+ tree.label = 'Tasks for ' + ansi.magenta(tildify(env.configPath));
+ }
+ return logTasks(tree, opts, function(task) {
+ return gulpInst.tasks[task].fn;
+ });
+ }
+ if (opts.tasksJson) {
+ tree = taskTree(gulpInst.tasks);
+ if (config.description && typeof config.description === 'string') {
+ tree.label = config.description;
+ } else {
+ tree.label = 'Tasks for ' + tildify(env.configPath);
+ }
+
+ var output = JSON.stringify(copyTree(tree, opts));
+
+ if (typeof opts.tasksJson === 'boolean') {
+ return console.log(output);
+ }
+
+ return fs.writeFileSync(opts.tasksJson, output, 'utf-8');
+ }
+ gulpInst.start.apply(gulpInst, toRun);
+ });
+}
+
+module.exports = execute;
diff --git a/node_modules/gulp-cli/lib/versioned/^3.7.0/log/events.js b/node_modules/gulp-cli/lib/versioned/^3.7.0/log/events.js
new file mode 100644
index 0000000..b7bd00a
--- /dev/null
+++ b/node_modules/gulp-cli/lib/versioned/^3.7.0/log/events.js
@@ -0,0 +1,60 @@
+'use strict';
+
+var log = require('gulplog');
+var prettyTime = require('pretty-hrtime');
+
+var ansi = require('../../../shared/ansi');
+var exit = require('../../../shared/exit');
+var formatError = require('../format-error');
+
+// Wire up logging events
+function logEvents(gulpInst) {
+
+ // Exit with 0 or 1
+ var failed = false;
+ process.once('exit', function(code) {
+ if (code === 0 && failed) {
+ exit(1);
+ }
+ });
+
+ // Total hack due to poor error management in orchestrator
+ gulpInst.on('err', function() {
+ failed = true;
+ });
+
+ gulpInst.on('task_start', function(e) {
+ // TODO: batch these
+ // so when 5 tasks start at once it only logs one time with all 5
+ log.info('Starting', '\'' + ansi.cyan(e.task) + '\'...');
+ });
+
+ gulpInst.on('task_stop', function(e) {
+ var time = prettyTime(e.hrDuration);
+ log.info(
+ 'Finished', '\'' + ansi.cyan(e.task) + '\'',
+ 'after', ansi.magenta(time)
+ );
+ });
+
+ gulpInst.on('task_err', function(e) {
+ var msg = formatError(e);
+ var time = prettyTime(e.hrDuration);
+ log.error(
+ '\'' + ansi.cyan(e.task) + '\'',
+ ansi.red('errored after'),
+ ansi.magenta(time)
+ );
+ log.error(msg);
+ });
+
+ gulpInst.on('task_not_found', function(err) {
+ log.error(
+ ansi.red('Task \'' + err.task + '\' is not in your gulpfile')
+ );
+ log.error('Please check the documentation for proper gulpfile formatting');
+ exit(1);
+ });
+}
+
+module.exports = logEvents;
diff --git a/node_modules/gulp-cli/lib/versioned/^3.7.0/log/tasks-simple.js b/node_modules/gulp-cli/lib/versioned/^3.7.0/log/tasks-simple.js
new file mode 100644
index 0000000..dca2fdf
--- /dev/null
+++ b/node_modules/gulp-cli/lib/versioned/^3.7.0/log/tasks-simple.js
@@ -0,0 +1,9 @@
+'use strict';
+
+function logTasksSimple(env, localGulp) {
+ console.log(Object.keys(localGulp.tasks)
+ .join('\n')
+ .trim());
+}
+
+module.exports = logTasksSimple;
diff --git a/node_modules/gulp-cli/lib/versioned/^3.7.0/task-tree.js b/node_modules/gulp-cli/lib/versioned/^3.7.0/task-tree.js
new file mode 100644
index 0000000..8d68980
--- /dev/null
+++ b/node_modules/gulp-cli/lib/versioned/^3.7.0/task-tree.js
@@ -0,0 +1,27 @@
+'use strict';
+
+module.exports = function(tasks) {
+ var map = {};
+ var arr = [];
+ Object.keys(tasks).forEach(function(taskname) {
+ var task = {
+ label: taskname,
+ type: 'task',
+ nodes: [],
+ };
+ map[taskname] = task;
+ arr.push(task);
+ });
+ Object.keys(tasks).forEach(function(taskname) {
+ var task = map[taskname];
+ tasks[taskname].dep.forEach(function(childname) {
+ var child = map[childname] || {
+ label: childname,
+ type: 'task',
+ nodes: [],
+ };
+ task.nodes.push(child);
+ });
+ });
+ return { label: 'Tasks', nodes: arr };
+};
diff --git a/node_modules/gulp-cli/lib/versioned/^4.0.0-alpha.1/index.js b/node_modules/gulp-cli/lib/versioned/^4.0.0-alpha.1/index.js
new file mode 100644
index 0000000..116956a
--- /dev/null
+++ b/node_modules/gulp-cli/lib/versioned/^4.0.0-alpha.1/index.js
@@ -0,0 +1,96 @@
+'use strict';
+
+var fs = require('fs');
+
+var log = require('gulplog');
+var stdout = require('mute-stdout');
+
+var ansi = require('../../shared/ansi');
+var exit = require('../../shared/exit');
+var tildify = require('../../shared/tildify');
+
+var logTasks = require('../../shared/log/tasks');
+var logEvents = require('../^4.0.0/log/events');
+var logSyncTask = require('../^4.0.0/log/sync-task');
+var logTasksSimple = require('../^4.0.0/log/tasks-simple');
+var registerExports = require('../../shared/register-exports');
+
+var copyTree = require('../../shared/log/copy-tree');
+var requireOrImport = require('../../shared/require-or-import');
+
+function execute(opts, env, config) {
+
+ var tasks = opts._;
+ var toRun = tasks.length ? tasks : ['default'];
+
+ if (opts.tasksSimple || opts.tasks || opts.tasksJson) {
+ // Mute stdout if we are listing tasks
+ stdout.mute();
+ }
+
+ var gulpInst = require(env.modulePath);
+ logEvents(gulpInst);
+ logSyncTask(gulpInst, opts);
+
+ // This is what actually loads up the gulpfile
+ requireOrImport(env.configPath, function(err, exported) {
+ // Before import(), if require() failed we got an unhandled exception on the module level.
+ // So console.error() & exit() were added here to mimic the old behavior as close as possible.
+ if (err) {
+ console.error(err);
+ exit(1);
+ }
+
+ registerExports(gulpInst, exported);
+
+ // Always unmute stdout after gulpfile is required
+ stdout.unmute();
+
+ var tree;
+ if (opts.tasksSimple) {
+ return logTasksSimple(gulpInst.tree());
+ }
+ if (opts.tasks) {
+ tree = {};
+ if (config.description && typeof config.description === 'string') {
+ tree.label = config.description;
+ } else {
+ tree.label = 'Tasks for ' + ansi.magenta(tildify(env.configPath));
+ }
+ tree.nodes = gulpInst.tree({ deep: true });
+ return logTasks(tree, opts, function(taskname) {
+ return gulpInst.task(taskname);
+ });
+ }
+ if (opts.tasksJson) {
+ tree = {};
+ if (config.description && typeof config.description === 'string') {
+ tree.label = config.description;
+ } else {
+ tree.label = 'Tasks for ' + tildify(env.configPath);
+ }
+ tree.nodes = gulpInst.tree({ deep: true });
+
+ var output = JSON.stringify(copyTree(tree, opts));
+ if (typeof opts.tasksJson === 'boolean' && opts.tasksJson) {
+ return console.log(output);
+ }
+ return fs.writeFileSync(opts.tasksJson, output, 'utf-8');
+ }
+ try {
+ log.info('Using gulpfile', ansi.magenta(tildify(env.configPath)));
+ var runMethod = opts.series ? 'series' : 'parallel';
+ gulpInst[runMethod](toRun)(function(err) {
+ if (err) {
+ exit(1);
+ }
+ });
+ } catch (err) {
+ log.error(ansi.red(err.message));
+ log.error('To list available tasks, try running: gulp --tasks');
+ exit(1);
+ }
+ });
+}
+
+module.exports = execute;
diff --git a/node_modules/gulp-cli/lib/versioned/^4.0.0-alpha.2/index.js b/node_modules/gulp-cli/lib/versioned/^4.0.0-alpha.2/index.js
new file mode 100644
index 0000000..1fca06f
--- /dev/null
+++ b/node_modules/gulp-cli/lib/versioned/^4.0.0-alpha.2/index.js
@@ -0,0 +1,96 @@
+'use strict';
+
+var fs = require('fs');
+
+var log = require('gulplog');
+var stdout = require('mute-stdout');
+
+var ansi = require('../../shared/ansi');
+var exit = require('../../shared/exit');
+var tildify = require('../../shared/tildify');
+
+var logTasks = require('../../shared/log/tasks');
+var logEvents = require('../^4.0.0/log/events');
+var logSyncTask = require('../^4.0.0/log/sync-task');
+var logTasksSimple = require('../^4.0.0/log/tasks-simple');
+var registerExports = require('../../shared/register-exports');
+
+var copyTree = require('../../shared/log/copy-tree');
+var getTask = require('../^4.0.0/log/get-task');
+var requireOrImport = require('../../shared/require-or-import');
+
+function execute(opts, env, config) {
+
+ var tasks = opts._;
+ var toRun = tasks.length ? tasks : ['default'];
+
+ if (opts.tasksSimple || opts.tasks || opts.tasksJson) {
+ // Mute stdout if we are listing tasks
+ stdout.mute();
+ }
+
+ var gulpInst = require(env.modulePath);
+ logEvents(gulpInst);
+ logSyncTask(gulpInst, opts);
+
+ // This is what actually loads up the gulpfile
+ requireOrImport(env.configPath, function(err, exported) {
+ // Before import(), if require() failed we got an unhandled exception on the module level.
+ // So console.error() & exit() were added here to mimic the old behavior as close as possible.
+ if (err) {
+ console.error(err);
+ exit(1);
+ }
+
+ registerExports(gulpInst, exported);
+
+ // Always unmute stdout after gulpfile is required
+ stdout.unmute();
+
+ var tree;
+ if (opts.tasksSimple) {
+ tree = gulpInst.tree();
+ return logTasksSimple(tree.nodes);
+ }
+ if (opts.tasks) {
+ tree = gulpInst.tree({ deep: true });
+ if (config.description && typeof config.description === 'string') {
+ tree.label = config.description;
+ } else {
+ tree.label = 'Tasks for ' + ansi.magenta(tildify(env.configPath));
+ }
+
+ return logTasks(tree, opts, getTask(gulpInst));
+ }
+ if (opts.tasksJson) {
+ tree = gulpInst.tree({ deep: true });
+ if (config.description && typeof config.description === 'string') {
+ tree.label = config.description;
+ } else {
+ tree.label = 'Tasks for ' + tildify(env.configPath);
+ }
+
+ var output = JSON.stringify(copyTree(tree, opts));
+
+ if (typeof opts.tasksJson === 'boolean' && opts.tasksJson) {
+ return console.log(output);
+ }
+ return fs.writeFileSync(opts.tasksJson, output, 'utf-8');
+ }
+ try {
+ log.info('Using gulpfile', ansi.magenta(tildify(env.configPath)));
+ var runMethod = opts.series ? 'series' : 'parallel';
+ gulpInst[runMethod](toRun)(function(err) {
+ if (err) {
+ exit(1);
+ }
+ });
+ } catch (err) {
+ log.error(ansi.red(err.message));
+ log.error('To list available tasks, try running: gulp --tasks');
+ exit(1);
+ }
+ });
+}
+
+module.exports = execute;
diff --git a/node_modules/gulp-cli/lib/versioned/^4.0.0/format-error.js b/node_modules/gulp-cli/lib/versioned/^4.0.0/format-error.js
new file mode 100644
index 0000000..3d8a771
--- /dev/null
+++ b/node_modules/gulp-cli/lib/versioned/^4.0.0/format-error.js
@@ -0,0 +1,24 @@
+'use strict';
+
+// Format orchestrator errors
+/* istanbul ignore next */
+function formatError(e) {
+ if (!e.error) {
+ return e.message;
+ }
+
+ // PluginError
+ if (typeof e.error.showStack === 'boolean') {
+ return e.error.toString();
+ }
+
+ // Normal error
+ if (e.error.stack) {
+ return e.error.stack;
+ }
+
+ // Unknown (string, number, etc.)
+ return new Error(String(e.error)).stack;
+}
+
+module.exports = formatError;
diff --git a/node_modules/gulp-cli/lib/versioned/^4.0.0/index.js b/node_modules/gulp-cli/lib/versioned/^4.0.0/index.js
new file mode 100644
index 0000000..f0f0f45
--- /dev/null
+++ b/node_modules/gulp-cli/lib/versioned/^4.0.0/index.js
@@ -0,0 +1,96 @@
+'use strict';
+
+var fs = require('fs');
+
+var log = require('gulplog');
+var stdout = require('mute-stdout');
+
+var ansi = require('../../shared/ansi');
+var exit = require('../../shared/exit');
+var tildify = require('../../shared/tildify');
+
+var logTasks = require('../../shared/log/tasks');
+var logEvents = require('./log/events');
+var logSyncTask = require('./log/sync-task');
+var logTasksSimple = require('./log/tasks-simple');
+var registerExports = require('../../shared/register-exports');
+
+var copyTree = require('../../shared/log/copy-tree');
+var getTask = require('./log/get-task');
+var requireOrImport = require('../../shared/require-or-import');
+
+function execute(opts, env, config) {
+
+ var tasks = opts._;
+ var toRun = tasks.length ? tasks : ['default'];
+
+ if (opts.tasksSimple || opts.tasks || opts.tasksJson) {
+ // Mute stdout if we are listing tasks
+ stdout.mute();
+ }
+
+ var gulpInst = require(env.modulePath);
+ logEvents(gulpInst);
+ logSyncTask(gulpInst, opts);
+
+ // This is what actually loads up the gulpfile
+ requireOrImport(env.configPath, function(err, exported) {
+ // Before import(), if require() failed we got an unhandled exception on the module level.
+ // So console.error() & exit() were added here to mimic the old behavior as close as possible.
+ if (err) {
+ console.error(err);
+ exit(1);
+ }
+
+ registerExports(gulpInst, exported);
+
+ // Always unmute stdout after gulpfile is required
+ stdout.unmute();
+
+ var tree;
+ if (opts.tasksSimple) {
+ tree = gulpInst.tree();
+ return logTasksSimple(tree.nodes);
+ }
+ if (opts.tasks) {
+ tree = gulpInst.tree({ deep: true });
+ if (config.description && typeof config.description === 'string') {
+ tree.label = config.description;
+ } else {
+ tree.label = 'Tasks for ' + ansi.magenta(tildify(env.configPath));
+ }
+
+ return logTasks(tree, opts, getTask(gulpInst));
+ }
+ if (opts.tasksJson) {
+ tree = gulpInst.tree({ deep: true });
+ if (config.description && typeof config.description === 'string') {
+ tree.label = config.description;
+ } else {
+ tree.label = 'Tasks for ' + tildify(env.configPath);
+ }
+
+ var output = JSON.stringify(copyTree(tree, opts));
+
+ if (typeof opts.tasksJson === 'boolean' && opts.tasksJson) {
+ return console.log(output);
+ }
+ return fs.writeFileSync(opts.tasksJson, output, 'utf-8');
+ }
+ try {
+ log.info('Using gulpfile', ansi.magenta(tildify(env.configPath)));
+ var runMethod = opts.series ? 'series' : 'parallel';
+ gulpInst[runMethod](toRun)(function(err) {
+ if (err) {
+ exit(1);
+ }
+ });
+ } catch (err) {
+ log.error(ansi.red(err.message));
+ log.error('To list available tasks, try running: gulp --tasks');
+ exit(1);
+ }
+ });
+}
+
+module.exports = execute;
diff --git a/node_modules/gulp-cli/lib/versioned/^4.0.0/log/events.js b/node_modules/gulp-cli/lib/versioned/^4.0.0/log/events.js
new file mode 100644
index 0000000..1f6e7b1
--- /dev/null
+++ b/node_modules/gulp-cli/lib/versioned/^4.0.0/log/events.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var log = require('gulplog');
+var prettyTime = require('pretty-hrtime');
+
+var ansi = require('../../../shared/ansi');
+var formatError = require('../format-error');
+
+// Wire up logging events
+function logEvents(gulpInst) {
+
+ var loggedErrors = [];
+
+ gulpInst.on('start', function(evt) {
+ /* istanbul ignore next */
+ // TODO: batch these
+ // so when 5 tasks start at once it only logs one time with all 5
+ var level = evt.branch ? 'debug' : 'info';
+ log[level]('Starting', '\'' + ansi.cyan(evt.name) + '\'...');
+ });
+
+ gulpInst.on('stop', function(evt) {
+ var time = prettyTime(evt.duration);
+ /* istanbul ignore next */
+ var level = evt.branch ? 'debug' : 'info';
+ log[level](
+ 'Finished', '\'' + ansi.cyan(evt.name) + '\'',
+ 'after', ansi.magenta(time)
+ );
+ });
+
+ gulpInst.on('error', function(evt) {
+ var msg = formatError(evt);
+ var time = prettyTime(evt.duration);
+ var level = evt.branch ? 'debug' : 'error';
+ log[level](
+ '\'' + ansi.cyan(evt.name) + '\'',
+ ansi.red('errored after'),
+ ansi.magenta(time)
+ );
+
+ // If we haven't logged this before, log it and add to list
+ if (loggedErrors.indexOf(evt.error) === -1) {
+ log.error(msg);
+ loggedErrors.push(evt.error);
+ }
+ });
+}
+
+module.exports = logEvents;
diff --git a/node_modules/gulp-cli/lib/versioned/^4.0.0/log/get-task.js b/node_modules/gulp-cli/lib/versioned/^4.0.0/log/get-task.js
new file mode 100644
index 0000000..1b15871
--- /dev/null
+++ b/node_modules/gulp-cli/lib/versioned/^4.0.0/log/get-task.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var isObject = require('isobject');
+
+function getTask(gulpInst) {
+ return function(name) {
+ var task = gulpInst.task(name);
+ return {
+ description: getDescription(task),
+ flags: getFlags(task),
+ };
+ };
+}
+
+function getDescription(task) {
+ if (typeof task.description === 'string') {
+ return task.description;
+ }
+ /* istanbul ignore else */
+ if (typeof task.unwrap === 'function') {
+ var origFn = task.unwrap();
+ if (typeof origFn.description === 'string') {
+ return origFn.description;
+ }
+ }
+ return undefined;
+}
+
+function getFlags(task) {
+ if (isObject(task.flags)) {
+ return task.flags;
+ }
+ /* istanbul ignore else */
+ if (typeof task.unwrap === 'function') {
+ var origFn = task.unwrap();
+ if (isObject(origFn.flags)) {
+ return origFn.flags;
+ }
+ }
+ return undefined;
+}
+
+module.exports = getTask;
diff --git a/node_modules/gulp-cli/lib/versioned/^4.0.0/log/sync-task.js b/node_modules/gulp-cli/lib/versioned/^4.0.0/log/sync-task.js
new file mode 100644
index 0000000..39cb453
--- /dev/null
+++ b/node_modules/gulp-cli/lib/versioned/^4.0.0/log/sync-task.js
@@ -0,0 +1,52 @@
+'use strict';
+
+var log = require('gulplog');
+var ansi = require('../../../shared/ansi');
+
+var tasks = {};
+
+function warn() {
+ var taskKeys = Object.keys(tasks);
+
+ if (!taskKeys.length) {
+ return;
+ }
+
+ var taskNames = taskKeys.map(function(key) {
+ return tasks[key];
+ }).join(', ');
+
+ process.exitCode = 1;
+
+ log.warn(
+ ansi.red('The following tasks did not complete:'),
+ ansi.cyan(taskNames)
+ );
+ log.warn(
+ ansi.red('Did you forget to signal async completion?')
+ );
+}
+
+function start(e) {
+ tasks[e.uid] = e.name;
+}
+
+function clear(e) {
+ delete tasks[e.uid];
+}
+
+function clearAll() {
+ tasks = {};
+}
+
+function logSyncTask(gulpInst, opts) {
+
+ process.once('exit', warn);
+ gulpInst.on('start', start);
+ gulpInst.on('stop', clear);
+ // When not running in --continue mode, we need to clear everything on error to avoid
+ // false positives.
+ gulpInst.on('error', opts.continue ? clear : clearAll);
+}
+
+module.exports = logSyncTask;
diff --git a/node_modules/gulp-cli/lib/versioned/^4.0.0/log/tasks-simple.js b/node_modules/gulp-cli/lib/versioned/^4.0.0/log/tasks-simple.js
new file mode 100644
index 0000000..65cde51
--- /dev/null
+++ b/node_modules/gulp-cli/lib/versioned/^4.0.0/log/tasks-simple.js
@@ -0,0 +1,7 @@
+'use strict';
+
+function logTasksSimple(nodes) {
+ console.log(nodes.join('\n').trim());
+}
+
+module.exports = logTasksSimple;
diff --git a/node_modules/gulp-cli/package.json b/node_modules/gulp-cli/package.json
new file mode 100644
index 0000000..bed47c0
--- /dev/null
+++ b/node_modules/gulp-cli/package.json
@@ -0,0 +1,77 @@
+{
+ "name": "gulp-cli",
+ "version": "2.3.0",
+ "description": "Command line interface for gulp",
+ "author": "Gulp Team (https://gulpjs.com/)",
+ "contributors": [],
+ "homepage": "https://gulpjs.com",
+ "repository": "gulpjs/gulp-cli",
+ "license": "MIT",
+ "man": "gulp.1",
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "main": "index.js",
+ "bin": {
+ "gulp": "bin/gulp.js"
+ },
+ "files": [
+ "index.js",
+ "lib",
+ "bin",
+ "completion",
+ "gulp.1"
+ ],
+ "scripts": {
+ "lint": "eslint .",
+ "prepublish": "marked-man --name gulp docs/CLI.md > gulp.1",
+ "pretest": "npm run lint",
+ "test": "mocha --async-only --timeout 5000 test/lib test",
+ "cover": "nyc --reporter=lcov --reporter=text-summary npm test",
+ "coveralls": "nyc --reporter=text-lcov npm test | coveralls"
+ },
+ "dependencies": {
+ "ansi-colors": "^1.0.1",
+ "archy": "^1.0.0",
+ "array-sort": "^1.0.0",
+ "concat-stream": "^1.6.0",
+ "color-support": "^1.1.3",
+ "copy-props": "^2.0.1",
+ "fancy-log": "^1.3.2",
+ "gulplog": "^1.0.0",
+ "interpret": "^1.4.0",
+ "isobject": "^3.0.1",
+ "liftoff": "^3.1.0",
+ "matchdep": "^2.0.0",
+ "mute-stdout": "^1.0.0",
+ "pretty-hrtime": "^1.0.0",
+ "replace-homedir": "^1.0.0",
+ "semver-greatest-satisfied-range": "^1.1.0",
+ "v8flags": "^3.2.0",
+ "yargs": "^7.1.0"
+ },
+ "devDependencies": {
+ "babel-preset-es2015": "^6.5.0",
+ "babel-register": "^6.5.1",
+ "coveralls": "^3.0.3",
+ "eslint": "^2.13.1",
+ "eslint-config-gulp": "^3.0.1",
+ "expect": "^1.20.2",
+ "gulp": "^4.0.0",
+ "gulp-test-tools": "^0.6.1",
+ "marked-man": "^0.2.1",
+ "mocha": "^3.2.0",
+ "nyc": "^13.3.0",
+ "rimraf": "^2.6.1",
+ "semver": "^5.7.1"
+ },
+ "keywords": [
+ "build",
+ "stream",
+ "system",
+ "make",
+ "tool",
+ "asset",
+ "pipeline"
+ ]
+}
diff --git a/node_modules/gulp-sass/CHANGELOG.md b/node_modules/gulp-sass/CHANGELOG.md
new file mode 100644
index 0000000..4d1e136
--- /dev/null
+++ b/node_modules/gulp-sass/CHANGELOG.md
@@ -0,0 +1,168 @@
+# gulp-sass Changelog
+
+## v5.0.0
+
+**June 25, 2021**
+
+
+
+## v4.1.1
+
+**June 24, 2021**
+
+
+
+## v4.1.0
+
+**April 23, 2020**
+
+
+
+## v4.0.2
+
+**October 16, 2018**
+
+
+
+## v4.0.1
+
+**Apr 8, 2018**
+
+
+
+## v4.0.0
+
+**April 5, 2018**
+
+
+
+## v3.2.1
+
+**March 24, 2018**
+
+
+
+## v3.2.0
+
+**March 12, 2018**
+
+
+
+## v3.1.0
+
+**January 9, 2017**
+
+
+
+## v3.0.0
+
+**January 9, 2017**
+
+
+
+## v2.3.2
+
+**June 15, 2016**
+
+
+
+## v2.3.1
+
+**April 22, 2016**
+
+
+
+## v2.3.0
+
+**April 21, 2016**
+
+
+
+## v2.3.0-beta.1
+
+**February 4, 2016**
+
+
+
+## v2.2.0
+
+**February 4, 2016**
+
+
+
+## v2.1.0
+
+**November 2, 2015**
+
+
+
+## v2.1.0-beta
+
+**September 21, 2015**
+
+* **Change** Updated to `node-sass` 3.4.0-beta1
+
+## v2.0.4
+
+**July 15, 2015**
+
+* **Fix** Relative file path now uses `file.relative` instead of arcane `split('/').pop` magic. Resolves lots of issues with source map paths.
+* **Fix** Empty partials no longer copied to CSS folder
+
+## v2.0.3
+
+**June 27, 2015**
+
+* **Fix** Empty partials are no longer copied to CSS folder
+
+## v2.0.2
+
+**June 25, 2015**
+
+* **Fix** Error in watch stream preventing watch from continuing
+
+## v2.0.1
+
+**May 13, 2015**
+
+* **Fix** Source maps now work as expected with Autoprefixer
+* **Fix** Current file directory `unshift` onto includePaths stack so it's checked first
+* **Fix** Error message returned is unformatted so as to not break other error handling (*i.e.* `gulp-notify`)
+
+## v2.0.0
+
+**May 6, 2015**
+
+* **Change** Updated to `node-sass` 3.0.0
+
+## v2.0.0-alpha.1
+
+**March 26, 2015**
+
+* **New** Added `renderSync` option that can be used through `sass.sync()`
+
+### March 24, 2015
+
+* **Change** Updated to `node-sass` 3.0.0-alpha.1
+* **New** Added support for `gulp-sourcemaps` including tests
+* **New** Added `.editorconfig` for development consistency
+* **New** Added linting and test for said linting
+* **Change** Updated the README
+* **New** `logError` function to make streaming errors possible instead of breaking the stream
+
+### 1.3.3
+
+* updated to `node-sass` 2.0 (final)
+* should now work with Node.js 0.12 and io.js
+
+### 1.3.2
+
+* fixed `errLogToConsole`
+
+### 1.3.1
+
+* bug fix
+
+## Version 1.3.0
+
+* Supports `node-sass` 2.0 (thanks laurelnaiad!)
diff --git a/node_modules/gulp-sass/LICENSE b/node_modules/gulp-sass/LICENSE
new file mode 100644
index 0000000..33ef8c1
--- /dev/null
+++ b/node_modules/gulp-sass/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2013 David Manning
+
+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/node_modules/gulp-sass/README.md b/node_modules/gulp-sass/README.md
new file mode 100644
index 0000000..53367aa
--- /dev/null
+++ b/node_modules/gulp-sass/README.md
@@ -0,0 +1,196 @@
+# gulp-sass ![npm package version](https://img.shields.io/npm/v/gulp-sass?label=npm%20version) [![Build Status](https://img.shields.io/github/workflow/status/dlmanning/gulp-sass/CI/master)](https://github.com/dlmanning/gulp-sass/actions?query=workflow%3ACI+branch%3Amaster) [![Join the chat at https://gitter.im/dlmanning/gulp-sass](https://img.shields.io/gitter/room/dlmanning/gulp-sass?color=%2346b091&label=chat&logo=gitter)](https://gitter.im/dlmanning/gulp-sass) ![Node.js support](https://img.shields.io/node/v/gulp-sass)
+
+Sass plugin for [Gulp](https://github.com/gulpjs/gulp).
+
+**_Before filing an issue, please make sure you have [updated to the latest version of `gulp-sass`](https://github.com/dlmanning/gulp-sass/wiki/Update-to-the-latest-Gulp-Sass) and have gone through our [Common Issues and Their Fixes](https://github.com/dlmanning/gulp-sass/wiki/Common-Issues-and-Their-Fixes) section._**
+
+**Migrating your existing project to version 5? Please read our (short!) [migration guide](#migrating-to-version-5).**
+
+## Support
+
+Only [Active LTS and Current releases](https://github.com/nodejs/Release#release-schedule) are supported.
+
+## Installation
+
+To use `gulp-sass`, you must install both `gulp-sass` itself *and* a Sass compiler. `gulp-sass` supports both [Dart Sass][] and [Node Sass][], although Node Sass is [deprecated](https://sass-lang.com/blog/libsass-is-deprecated). We recommend that you use Dart Sass for new projects, and migrate Node Sass projects to Dart Sass when possible.
+
+Whichever compiler you choose, it's best to install these as dev dependencies:
+
+```sh
+npm install sass gulp-sass --save-dev
+```
+
+### Importing it into your project
+
+`gulp-sass` must be imported into your gulpfile, where you provide it the compiler of your choice. To use `gulp-sass` in a CommonJS module (which is most Node.js environments), do something like this:
+
+```js
+const sass = require('gulp-sass')(require('sass'));
+```
+
+To use `gulp-sass` in an ECMAScript module (which is supported in newer Node.js 14 and later), do something like this:
+
+```js
+import dartSass from 'sass';
+import gulpSass from 'gulp-sass';
+const sass = gulpSass(dartSass);
+```
+
+## Usage
+
+**Note:** These examples are written for CommonJS modules and assume you're using Gulp 4. For examples that work with Gulp 3, [check the docs for an earlier version of `gulp-sass`](https://github.com/dlmanning/gulp-sass/tree/v4.1.1).
+
+`gulp-sass` must be used in a Gulp task. Your task can call `sass()` (to asynchronously render your CSS), or `sass.sync()` (to synchronously render your CSS). Then, export your task with the `export` keyword. We'll show some examples of how to do that.
+
+**⚠️ Note:** When using Dart Sass, **synchronous rendering is twice as fast as asynchronous rendering**. The Sass team is exploring ways to improve asynchronous rendering with Dart Sass, but for now, you will get the best performance from `sass.sync()`. If performance is critical, you can use `node-sass` instead, but bear in mind that `node-sass` may not support modern Sass features you rely on.
+
+### Render your CSS
+
+To render your CSS with a build task, then watch your files for changes, you might write something like this:
+
+```js
+'use strict';
+
+const gulp = require('gulp');
+const sass = require('gulp-sass')(require('sass'));
+
+function buildStyles() {
+ return gulp.src('./sass/**/*.scss')
+ .pipe(sass().on('error', sass.logError))
+ .pipe(gulp.dest('./css'));
+};
+
+exports.buildStyles = buildStyles;
+exports.watch = function () {
+ gulp.watch('./sass/**/*.scss', ['sass']);
+};
+```
+
+With synchronous rendering, that Gulp task looks like this:
+
+```js
+function buildStyles() {
+ return gulp.src('./sass/**/*.scss')
+ .pipe(sass.sync().on('error', sass.logError))
+ .pipe(gulp.dest('./css'));
+};
+```
+
+### Render with options
+
+To change the final output of your CSS, you can pass an options object to your renderer. `gulp-sass` supports [Node Sass's render options](https://github.com/sass/node-sass#options), with two unsupported exceptions:
+
+- The `data` option, which is used by `gulp-sass` internally.
+- The `file` option, which has undefined behavior that may change without notice.
+
+For example, to compress your CSS, you can call `sass({outputStyle: 'compressed'}`. In the context of a Gulp task, that looks like this:
+
+```js
+function buildStyles() {
+ return gulp.src('./sass/**/*.scss')
+ .pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
+ .pipe(gulp.dest('./css'));
+};
+
+exports.buildStyles = buildStyles;
+```
+
+Or this for synchronous rendering:
+
+```js
+function buildStyles() {
+ return gulp.src('./sass/**/*.scss')
+ .pipe(sass.sync({outputStyle: 'compressed'}).on('error', sass.logError))
+ .pipe(gulp.dest('./css'));
+};
+
+exports.buildStyles = buildStyles;
+```
+
+### Include a source map
+
+`gulp-sass` can be used in tandem with [`gulp-sourcemaps`](https://github.com/gulp-sourcemaps/gulp-sourcemaps) to generate source maps for the Sass-to-CSS compilation. You will need to initialize `gulp-sourcemaps` _before_ running `gulp-sass`, and write the source maps after.
+
+```js
+const sourcemaps = require('gulp-sourcemaps');
+
+function buildStyles() {
+ return gulp.src('./sass/**/*.scss')
+ .pipe(sourcemaps.init())
+ .pipe(sass().on('error', sass.logError))
+ .pipe(sourcemaps.write())
+ .pipe(gulp.dest('./css'));
+}
+
+exports.buildStyles = buildStyles;
+```
+
+By default, `gulp-sourcemaps` writes the source maps inline, in the compiled CSS files. To write them to a separate file, specify a path relative to the `gulp.dest()` destination in the `sourcemaps.write()` function.
+
+```js
+const sourcemaps = require('gulp-sourcemaps');
+
+function buildStyles() {
+ return gulp.src('./sass/**/*.scss')
+ .pipe(sourcemaps.init())
+ .pipe(sass().on('error', sass.logError))
+ .pipe(sourcemaps.write('./maps'))
+ .pipe(gulp.dest('./css'));
+};
+
+exports.buildStyles = buildStyles;
+```
+
+Migrating to version 5
+
+`gulp-sass` version 5 requires Node.js 12 or later, and introduces some breaking changes. Additionally, changes in Node.js itself mean that Node fibers can no longer be used to speed up Dart Sass in Node.js 16.
+
+### Setting a Sass compiler
+
+As of version 5, `gulp-sass` _does not include a default Sass compiler_, so you must install one (either `node-sass` or `sass`) along with `gulp-sass`.
+
+```sh
+npm install sass gulp-sass --save-dev
+```
+
+Then, you must explicitly set that compiler in your gulpfille. Instead of setting a `compiler` prop on the `gulp-sass` instance, you pass the compiler into a function call when instantiating `gulp-sass`.
+
+These changes look something like this:
+
+```diff
+- const sass = require('gulp-sass'));
+- const compiler = require('sass');
+- sass.compiler = compiler;
++ const sass = require('gulp-sass')(require('sass'));
+```
+
+If you're migrating an ECMAScript module, that'll look something like this:
+
+```diff
+import dartSass from 'sass';
+- import sass from 'gulp-sass';
+- sass.compiler = dartSass;
+
+import dartSass from 'sass';
++ import gulpSass from 'gulp-sass';
++ const sass = gulpSass(dartSass);
+```
+
+### What about fibers?
+
+We used to recommend Node fibers as a way to speed up asynchronous rendering with Dart Sass. Unfortunately, [Node fibers are discontinued](https://sass-lang.com/blog/node-fibers-discontinued) and will not work in Node.js 16. The Sass team is exploring its options for future performance improvements, but for now, you will get the best performance from `sass.sync()`.
+
+## Issues
+
+`gulp-sass` is a light-weight wrapper around either [Dart Sass][] or [Node Sass][] (which in turn is a Node.js binding for [LibSass][]. Because of this, the issue you're having likely isn't a `gulp-sass` issue, but an issue with one those projects or with [Sass][] as a whole.
+
+If you have a feature request/question about how Sass works/concerns on how your Sass gets compiled/errors in your compiling, it's likely a Dart Sass or LibSass issue and you should file your issue with one of those projects.
+
+If you're having problems with the options you're passing in, it's likely a Dart Sass or Node Sass issue and you should file your issue with one of those projects.
+
+We may, in the course of resolving issues, direct you to one of these other projects. If we do so, please follow up by searching that project's issue queue (both open and closed) for your problem and, if it doesn't exist, filing an issue with them.
+
+[Dart Sass]: https://sass-lang.com/dart-sass
+[LibSass]: https://sass-lang.com/libsass
+[Node Sass]: https://github.com/sass/node-sass
+[Sass]: https://sass-lang.com
diff --git a/node_modules/gulp-sass/index.js b/node_modules/gulp-sass/index.js
new file mode 100644
index 0000000..3a027bc
--- /dev/null
+++ b/node_modules/gulp-sass/index.js
@@ -0,0 +1,193 @@
+'use strict';
+
+const path = require('path');
+const { Transform } = require('stream');
+const picocolors = require('picocolors');
+const PluginError = require('plugin-error');
+const replaceExtension = require('replace-ext');
+const stripAnsi = require('strip-ansi');
+const clonedeep = require('lodash.clonedeep');
+const applySourceMap = require('vinyl-sourcemaps-apply');
+
+const PLUGIN_NAME = 'gulp-sass';
+
+const MISSING_COMPILER_MESSAGE = `
+gulp-sass no longer has a default Sass compiler; please set one yourself.
+Both the "sass" and "node-sass" packages are permitted.
+For example, in your gulpfile:
+
+ const sass = require('gulp-sass')(require('sass'));
+`;
+
+const transfob = (transform) => new Transform({ transform, objectMode: true });
+
+/**
+ * Handles returning the file to the stream
+ */
+const filePush = (file, sassObject, callback) => {
+ // Build Source Maps!
+ if (sassObject.map) {
+ // Transform map into JSON
+ const sassMap = JSON.parse(sassObject.map.toString());
+ // Grab the stdout and transform it into stdin
+ const sassMapFile = sassMap.file.replace(/^stdout$/, 'stdin');
+ // Grab the base filename that's being worked on
+ const sassFileSrc = file.relative;
+ // Grab the path portion of the file that's being worked on
+ const sassFileSrcPath = path.dirname(sassFileSrc);
+
+ if (sassFileSrcPath) {
+ const sourceFileIndex = sassMap.sources.indexOf(sassMapFile);
+ // Prepend the path to all files in the sources array except the file that's being worked on
+ sassMap.sources = sassMap.sources.map((source, index) => (
+ index === sourceFileIndex
+ ? source
+ : path.join(sassFileSrcPath, source)
+ ));
+ }
+
+ // Remove 'stdin' from souces and replace with filenames!
+ sassMap.sources = sassMap.sources.filter((src) => src !== 'stdin' && src);
+
+ // Replace the map file with the original filename (but new extension)
+ sassMap.file = replaceExtension(sassFileSrc, '.css');
+ // Apply the map
+ applySourceMap(file, sassMap);
+ }
+
+ file.contents = sassObject.css;
+ file.path = replaceExtension(file.path, '.css');
+
+ if (file.stat) {
+ file.stat.atime = file.stat.mtime = file.stat.ctime = new Date();
+ }
+
+ callback(null, file);
+};
+
+/**
+ * Handles error message
+ */
+const handleError = (error, file, callback) => {
+ const filePath = (error.file === 'stdin' ? file.path : error.file) || file.path;
+ const relativePath = path.relative(process.cwd(), filePath);
+ const message = `${picocolors.underline(relativePath)}\n${error.formatted}`;
+
+ error.messageFormatted = message;
+ error.messageOriginal = error.message;
+ error.message = stripAnsi(message);
+ error.relativePath = relativePath;
+
+ return callback(new PluginError(PLUGIN_NAME, error));
+};
+
+/**
+ * Main Gulp Sass function
+ */
+
+// eslint-disable-next-line arrow-body-style
+const gulpSass = (options, sync) => {
+ return transfob((file, encoding, callback) => {
+ if (file.isNull()) {
+ callback(null, file);
+ return;
+ }
+
+ if (file.isStream()) {
+ callback(new PluginError(PLUGIN_NAME, 'Streaming not supported'));
+ return;
+ }
+
+ if (path.basename(file.path).startsWith('_')) {
+ callback();
+ return;
+ }
+
+ if (!file.contents.length) {
+ file.path = replaceExtension(file.path, '.css');
+ callback(null, file);
+ return;
+ }
+
+ const opts = clonedeep(options || {});
+ opts.data = file.contents.toString();
+
+ // We set the file path here so that libsass can correctly resolve import paths
+ opts.file = file.path;
+
+ // Ensure `indentedSyntax` is true if a `.sass` file
+ if (path.extname(file.path) === '.sass') {
+ opts.indentedSyntax = true;
+ }
+
+ // Ensure file's parent directory in the include path
+ if (opts.includePaths) {
+ if (typeof opts.includePaths === 'string') {
+ opts.includePaths = [opts.includePaths];
+ }
+ } else {
+ opts.includePaths = [];
+ }
+
+ opts.includePaths.unshift(path.dirname(file.path));
+
+ // Generate Source Maps if the source-map plugin is present
+ if (file.sourceMap) {
+ opts.sourceMap = file.path;
+ opts.omitSourceMapUrl = true;
+ opts.sourceMapContents = true;
+ }
+
+ if (sync !== true) {
+ /**
+ * Async Sass render
+ */
+ gulpSass.compiler.render(opts, (error, obj) => {
+ if (error) {
+ handleError(error, file, callback);
+ return;
+ }
+
+ filePush(file, obj, callback);
+ });
+ } else {
+ /**
+ * Sync Sass render
+ */
+ try {
+ filePush(file, gulpSass.compiler.renderSync(opts), callback);
+ } catch (error) {
+ handleError(error, file, callback);
+ }
+ }
+ });
+};
+
+/**
+ * Sync Sass render
+ */
+gulpSass.sync = (options) => gulpSass(options, true);
+
+/**
+ * Log errors nicely
+ */
+gulpSass.logError = function logError(error) {
+ const message = new PluginError('sass', error.messageFormatted).toString();
+ process.stderr.write(`${message}\n`);
+ this.emit('end');
+};
+
+module.exports = (compiler) => {
+ if (!compiler || !compiler.render) {
+ const message = new PluginError(
+ PLUGIN_NAME,
+ MISSING_COMPILER_MESSAGE,
+ { showProperties: false },
+ ).toString();
+ process.stderr.write(`${message}\n`);
+ process.exit(1);
+ }
+
+ gulpSass.compiler = compiler;
+ return gulpSass;
+};
diff --git a/node_modules/gulp-sass/node_modules/ansi-regex/index.d.ts b/node_modules/gulp-sass/node_modules/ansi-regex/index.d.ts
new file mode 100644
index 0000000..2dbf6af
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/ansi-regex/index.d.ts
@@ -0,0 +1,37 @@
+declare namespace ansiRegex {
+ interface Options {
+ /**
+ Match only the first ANSI escape.
+
+ @default false
+ */
+ onlyFirst: boolean;
+ }
+}
+
+/**
+Regular expression for matching ANSI escape codes.
+
+@example
+```
+import ansiRegex = require('ansi-regex');
+
+ansiRegex().test('\u001B[4mcake\u001B[0m');
+//=> true
+
+ansiRegex().test('cake');
+//=> false
+
+'\u001B[4mcake\u001B[0m'.match(ansiRegex());
+//=> ['\u001B[4m', '\u001B[0m']
+
+'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
+//=> ['\u001B[4m']
+
+'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
+//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
+```
+*/
+declare function ansiRegex(options?: ansiRegex.Options): RegExp;
+
+export = ansiRegex;
diff --git a/node_modules/gulp-sass/node_modules/ansi-regex/index.js b/node_modules/gulp-sass/node_modules/ansi-regex/index.js
new file mode 100644
index 0000000..616ff83
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/ansi-regex/index.js
@@ -0,0 +1,10 @@
+'use strict';
+
+module.exports = ({onlyFirst = false} = {}) => {
+ const pattern = [
+ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
+ '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
+ ].join('|');
+
+ return new RegExp(pattern, onlyFirst ? undefined : 'g');
+};
diff --git a/node_modules/gulp-sass/node_modules/ansi-regex/license b/node_modules/gulp-sass/node_modules/ansi-regex/license
new file mode 100644
index 0000000..e7af2f7
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/ansi-regex/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus (sindresorhus.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 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/node_modules/gulp-sass/node_modules/ansi-regex/package.json b/node_modules/gulp-sass/node_modules/ansi-regex/package.json
new file mode 100644
index 0000000..017f531
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/ansi-regex/package.json
@@ -0,0 +1,55 @@
+{
+ "name": "ansi-regex",
+ "version": "5.0.1",
+ "description": "Regular expression for matching ANSI escape codes",
+ "license": "MIT",
+ "repository": "chalk/ansi-regex",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd",
+ "view-supported": "node fixtures/view-codes.js"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "command-line",
+ "text",
+ "regex",
+ "regexp",
+ "re",
+ "match",
+ "test",
+ "find",
+ "pattern"
+ ],
+ "devDependencies": {
+ "ava": "^2.4.0",
+ "tsd": "^0.9.0",
+ "xo": "^0.25.3"
+ }
+}
diff --git a/node_modules/gulp-sass/node_modules/ansi-regex/readme.md b/node_modules/gulp-sass/node_modules/ansi-regex/readme.md
new file mode 100644
index 0000000..4d848bc
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/ansi-regex/readme.md
@@ -0,0 +1,78 @@
+# ansi-regex
+
+> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
+
+
+## Install
+
+```
+$ npm install ansi-regex
+```
+
+
+## Usage
+
+```js
+const ansiRegex = require('ansi-regex');
+
+ansiRegex().test('\u001B[4mcake\u001B[0m');
+//=> true
+
+ansiRegex().test('cake');
+//=> false
+
+'\u001B[4mcake\u001B[0m'.match(ansiRegex());
+//=> ['\u001B[4m', '\u001B[0m']
+
+'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
+//=> ['\u001B[4m']
+
+'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
+//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
+```
+
+
+## API
+
+### ansiRegex(options?)
+
+Returns a regex for matching ANSI escape codes.
+
+#### options
+
+Type: `object`
+
+##### onlyFirst
+
+Type: `boolean`
+Default: `false` *(Matches any ANSI escape codes in a string)*
+
+Match only the first ANSI escape.
+
+
+## FAQ
+
+### Why do you test for codes not in the ECMA 48 standard?
+
+Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
+
+On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
+
+
+## Maintainers
+
+- [Sindre Sorhus](https://github.com/sindresorhus)
+- [Josh Junon](https://github.com/qix-)
+
+
+---
+
+
diff --git a/node_modules/gulp-sass/node_modules/replace-ext/LICENSE b/node_modules/gulp-sass/node_modules/replace-ext/LICENSE
new file mode 100644
index 0000000..1b256a9
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/replace-ext/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2020 Blaine Bublitz , Eric Schoffstall and other 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.
diff --git a/node_modules/gulp-sass/node_modules/replace-ext/README.md b/node_modules/gulp-sass/node_modules/replace-ext/README.md
new file mode 100644
index 0000000..d77533f
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/replace-ext/README.md
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+# replace-ext
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][ci-image]][ci-url] [![Coveralls Status][coveralls-image]][coveralls-url]
+
+Replaces a file extension with another one.
+
+## Usage
+
+```js
+var replaceExt = require('replace-ext');
+
+var path = '/some/dir/file.js';
+var newPath = replaceExt(path, '.coffee');
+
+console.log(newPath); // /some/dir/file.coffee
+```
+
+## API
+
+### `replaceExt(path, extension)`
+
+Replaces the extension from `path` with `extension` and returns the updated path string.
+
+Does not replace the extension if `path` is not a string or is empty.
+
+## `replace-ext` for enterprise
+
+Available as part of the Tidelift Subscription.
+
+The maintainers of `replace-ext` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.][tidelift-url]
+
+## License
+
+MIT
+
+
+[downloads-image]: https://img.shields.io/npm/dm/replace-ext.svg?style=flat-square
+[npm-url]: https://www.npmjs.com/package/replace-ext
+[npm-image]: https://img.shields.io/npm/v/replace-ext.svg?style=flat-square
+
+[ci-url]: https://github.com/gulpjs/replace-ext/actions?query=workflow:dev
+[ci-image]: https://img.shields.io/github/workflow/status/gulpjs/replace-ext/dev?style=flat-square
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/replace-ext
+[coveralls-image]: https://img.shields.io/coveralls/gulpjs/replace-ext/master.svg?style=flat-square
+
+[tidelift-url]: https://tidelift.com/subscription/pkg/npm-replace-ext?utm_source=npm-replace-ext&utm_medium=referral&utm_campaign=enterprise&utm_term=repo
+
diff --git a/node_modules/gulp-sass/node_modules/replace-ext/index.js b/node_modules/gulp-sass/node_modules/replace-ext/index.js
new file mode 100644
index 0000000..b05741b
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/replace-ext/index.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var path = require('path');
+
+function replaceExt(npath, ext) {
+ if (typeof npath !== 'string') {
+ return npath;
+ }
+
+ if (npath.length === 0) {
+ return npath;
+ }
+
+ var nFileName = path.basename(npath, path.extname(npath)) + ext;
+ var nFilepath = path.join(path.dirname(npath), nFileName);
+
+ // Because `path.join` removes the head './' from the given path.
+ // This removal can cause a problem when passing the result to `require` or
+ // `import`.
+ if (startsWithSingleDot(npath)) {
+ return '.' + path.sep + nFilepath;
+ }
+
+ return nFilepath;
+}
+
+function startsWithSingleDot(fpath) {
+ var first2chars = fpath.slice(0, 2);
+ return first2chars === '.' + path.sep || first2chars === './';
+}
+
+module.exports = replaceExt;
diff --git a/node_modules/gulp-sass/node_modules/replace-ext/package.json b/node_modules/gulp-sass/node_modules/replace-ext/package.json
new file mode 100644
index 0000000..16077b6
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/replace-ext/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "replace-ext",
+ "version": "2.0.0",
+ "description": "Replaces a file extension with another one.",
+ "author": "Gulp Team (http://gulpjs.com/)",
+ "contributors": [
+ "Eric Schoffstall ",
+ "Blaine Bublitz "
+ ],
+ "repository": "gulpjs/replace-ext",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10"
+ },
+ "main": "index.js",
+ "files": [
+ "LICENSE",
+ "index.js"
+ ],
+ "scripts": {
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "test": "nyc mocha --async-only"
+ },
+ "devDependencies": {
+ "eslint": "^6.8.0",
+ "eslint-config-gulp": "^4.0.0",
+ "expect": "^25.4.0",
+ "mocha": "^7.1.2",
+ "nyc": "^15.0.1"
+ },
+ "nyc": {
+ "reporter": [
+ "lcov",
+ "text-summary"
+ ]
+ },
+ "prettier": {
+ "singleQuote": true
+ },
+ "keywords": [
+ "gulp",
+ "extensions",
+ "filepath",
+ "basename"
+ ]
+}
diff --git a/node_modules/gulp-sass/node_modules/strip-ansi/index.d.ts b/node_modules/gulp-sass/node_modules/strip-ansi/index.d.ts
new file mode 100644
index 0000000..907fccc
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/strip-ansi/index.d.ts
@@ -0,0 +1,17 @@
+/**
+Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string.
+
+@example
+```
+import stripAnsi = require('strip-ansi');
+
+stripAnsi('\u001B[4mUnicorn\u001B[0m');
+//=> 'Unicorn'
+
+stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007');
+//=> 'Click'
+```
+*/
+declare function stripAnsi(string: string): string;
+
+export = stripAnsi;
diff --git a/node_modules/gulp-sass/node_modules/strip-ansi/index.js b/node_modules/gulp-sass/node_modules/strip-ansi/index.js
new file mode 100644
index 0000000..9a593df
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/strip-ansi/index.js
@@ -0,0 +1,4 @@
+'use strict';
+const ansiRegex = require('ansi-regex');
+
+module.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;
diff --git a/node_modules/gulp-sass/node_modules/strip-ansi/license b/node_modules/gulp-sass/node_modules/strip-ansi/license
new file mode 100644
index 0000000..e7af2f7
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/strip-ansi/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus (sindresorhus.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 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/node_modules/gulp-sass/node_modules/strip-ansi/package.json b/node_modules/gulp-sass/node_modules/strip-ansi/package.json
new file mode 100644
index 0000000..1a41108
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/strip-ansi/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "description": "Strip ANSI escape codes from a string",
+ "license": "MIT",
+ "repository": "chalk/strip-ansi",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "strip",
+ "trim",
+ "remove",
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "devDependencies": {
+ "ava": "^2.4.0",
+ "tsd": "^0.10.0",
+ "xo": "^0.25.3"
+ }
+}
diff --git a/node_modules/gulp-sass/node_modules/strip-ansi/readme.md b/node_modules/gulp-sass/node_modules/strip-ansi/readme.md
new file mode 100644
index 0000000..7c4b56d
--- /dev/null
+++ b/node_modules/gulp-sass/node_modules/strip-ansi/readme.md
@@ -0,0 +1,46 @@
+# strip-ansi [![Build Status](https://travis-ci.org/chalk/strip-ansi.svg?branch=master)](https://travis-ci.org/chalk/strip-ansi)
+
+> Strip [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code) from a string
+
+
+## Install
+
+```
+$ npm install strip-ansi
+```
+
+
+## Usage
+
+```js
+const stripAnsi = require('strip-ansi');
+
+stripAnsi('\u001B[4mUnicorn\u001B[0m');
+//=> 'Unicorn'
+
+stripAnsi('\u001B]8;;https://github.com\u0007Click\u001B]8;;\u0007');
+//=> 'Click'
+```
+
+
+## strip-ansi for enterprise
+
+Available as part of the Tidelift Subscription.
+
+The maintainers of strip-ansi and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-strip-ansi?utm_source=npm-strip-ansi&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
+
+
+## Related
+
+- [strip-ansi-cli](https://github.com/chalk/strip-ansi-cli) - CLI for this module
+- [strip-ansi-stream](https://github.com/chalk/strip-ansi-stream) - Streaming version of this module
+- [has-ansi](https://github.com/chalk/has-ansi) - Check if a string has ANSI escape codes
+- [ansi-regex](https://github.com/chalk/ansi-regex) - Regular expression for matching ANSI escape codes
+- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right
+
+
+## Maintainers
+
+- [Sindre Sorhus](https://github.com/sindresorhus)
+- [Josh Junon](https://github.com/qix-)
+
diff --git a/node_modules/gulp-sass/package.json b/node_modules/gulp-sass/package.json
new file mode 100644
index 0000000..e074d62
--- /dev/null
+++ b/node_modules/gulp-sass/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "gulp-sass",
+ "version": "5.1.0",
+ "description": "Gulp plugin for sass",
+ "main": "index.js",
+ "engines": {
+ "node": ">=12"
+ },
+ "scripts": {
+ "lint": "eslint --report-unused-disable-directives --ignore-path .gitignore .",
+ "fix": "npm run lint -- --fix",
+ "mocha": "mocha",
+ "test": "npm run test:node-sass && npm run test:dart-sass",
+ "test:node-sass": "mocha",
+ "test:dart-sass": "mocha -- --sass"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/dlmanning/gulp-sass.git"
+ },
+ "keywords": [
+ "gulpplugin",
+ "sass",
+ "gulp"
+ ],
+ "author": "David Manning",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/dlmanning/gulp-sass/issues"
+ },
+ "homepage": "https://github.com/dlmanning/gulp-sass#readme",
+ "files": [
+ "index.js"
+ ],
+ "dependencies": {
+ "lodash.clonedeep": "^4.5.0",
+ "picocolors": "^1.0.0",
+ "plugin-error": "^1.0.1",
+ "replace-ext": "^2.0.0",
+ "strip-ansi": "^6.0.1",
+ "vinyl-sourcemaps-apply": "^0.2.1"
+ },
+ "devDependencies": {
+ "autoprefixer": "^10.4.0",
+ "eslint": "^8.5.0",
+ "eslint-config-airbnb-base": "^15.0.0",
+ "eslint-plugin-import": "^2.25.3",
+ "globule": "^1.3.3",
+ "gulp": "^4.0.2",
+ "gulp-postcss": "^9.0.1",
+ "gulp-sourcemaps": "^3.0.0",
+ "gulp-tap": "^2.0.0",
+ "mocha": "^9.1.3",
+ "node-sass": "^7.0.1",
+ "postcss": "^8.4.5",
+ "rimraf": "^3.0.2",
+ "sass": "^1.45.1",
+ "vinyl": "^2.2.1"
+ }
+}
diff --git a/node_modules/gulp/CHANGELOG.md b/node_modules/gulp/CHANGELOG.md
new file mode 100644
index 0000000..d6555de
--- /dev/null
+++ b/node_modules/gulp/CHANGELOG.md
@@ -0,0 +1,269 @@
+# gulp changelog
+
+## 4.0.0
+
+### Task system changes
+
+- replaced 3.x task system (orchestrator) with new task system (bach)
+ - removed gulp.reset
+ - removed 3 argument syntax for `gulp.task`
+ - `gulp.task` should only be used when you will call the task with the CLI
+ - added `gulp.series` and `gulp.parallel` methods for composing tasks. Everything must use these now.
+ - added single argument syntax for `gulp.task` which allows a named function to be used as the name of the task and task function.
+ - added `gulp.tree` method for retrieving the task tree. Pass `{ deep: true }` for an `archy` compatible node list.
+ - added `gulp.registry` for setting custom registries.
+
+### CLI changes
+
+- split CLI out into a module if you want to save bandwidth/disk space. you can install the gulp CLI using either `npm install gulp -g` or `npm install gulp-cli -g`, where gulp-cli is the smaller one (no module code included)
+- add `--tasks-json` flag to CLI to dump the whole tree out for other tools to consume
+- added `--verify` flag to check the dependencies in package.json against the plugin blacklist.
+
+### vinyl/vinyl-fs changes
+
+- added `gulp.symlink` which functions exactly like `gulp.dest`, but symlinks instead.
+- added `dirMode` param to `gulp.dest` and `gulp.symlink` which allows better control over the mode of the destination folder that is created.
+- globs passed to `gulp.src` will be evaluated in order, which means this is possible `gulp.src(['*.js', '!b*.js', 'bad.js'])` (exclude every JS file that starts with a b except bad.js)
+- performance for gulp.src has improved massively
+ - `gulp.src(['**/*', '!b.js'])` will no longer eat CPU since negations happen during walking now
+- added `since` option to `gulp.src` which lets you only match files that have been modified since a certain date (for incremental builds)
+- fixed `gulp.src` not following symlinks
+- added `overwrite` option to `gulp.dest` which allows you to enable or disable overwriting of existing files
+
+## 3.9.1
+
+- update interpret to 1.0.0 (support for babel-register)
+- fix to include manpages in published tarball
+- documentation/recipe updates
+
+## 3.9.0
+
+- add babel support
+- add transpiler fallback support
+- add support for some renamed transpilers: livescript, etc
+- add JSCS
+- update dependencies (liftoff, interpret)
+- documentation tweaks
+
+## 3.8.11
+
+- fix node 0.12/iojs problems
+- add node 0.12 and iojs to travis
+- update dependencies (liftoff, v8flags)
+- documentation tweaks
+
+## 3.8.10
+
+- add link to spanish docs
+- update dependencies (archy, semver, mocha, etc)
+- documentation tweaks
+
+## 3.8.9
+
+- fix local version undefined output
+- add completion for fish shell
+- fix powershell completion line splitting
+- add support for arbitrary node flags (oops, should have been a minor bump)
+- add v8flags dependency
+- update dependencies (liftoff)
+- documentation tweaks
+
+## 3.8.8
+
+- update dependencies (minimist, tildify)
+- documentation tweaks
+
+## 3.8.7
+
+- handle errors a bit better
+- update dependencies (gulp-util, semver, etc)
+- documentation tweaks
+
+## 3.8.6
+
+- remove executable flag from LICENSE
+- update dependencies (chalk, minimist, liftoff, etc)
+- documentation tweaks
+
+## 3.8.5
+
+- simplify --silent and --tasks-simple
+- fix bug in autocomplete where errors would come out
+
+## 3.8.4
+
+- CLI will use exit code 1 on exit when any task fails during the lifetime of the process
+
+
+## 3.8.3
+
+- Tweak error formatting to work better with PluginErrors and strings
+
+## 3.8.2
+
+- add manpage generation
+
+## 3.8.1
+
+- the CLI now adds process.env.INIT_CWD which is the original cwd it was launched from
+
+## 3.8.0
+
+- update vinyl-fs
+ - gulp.src is now a writable passthrough, this means you can use it to add files to your pipeline at any point
+ - gulp.dest can now take a function to determine the folder
+
+This is now possible!
+
+```js
+gulp.src('lib/*.js')
+ .pipe(uglify())
+ .pipe(gulp.src('styles/*.css'))
+ .pipe(gulp.dest(function(file){
+ // I don't know, you can do something cool here
+ return 'build/whatever';
+ }));
+```
+
+## 3.7.0
+
+- update vinyl-fs to remove BOM from UTF8 files
+- add --tasks-simple flag for plaintext task listings
+- updated autocomplete scripts to be simpler and use new --tasks-simple flag
+- added support for transpilers via liftoff 0.11 and interpret
+ - just npm install your compiler (coffee-script for example) and it will work out of the box
+
+## 3.5.5
+
+- update deps
+- gulp.dest now support mode option, uses source file mode by default (file.stat.mode)
+- use chalk for colors in bin
+- update gulp.env deprecation msg to be more helpful
+
+
+## 3.5.2
+
+- add -V for version on CLI (unix standard)
+- -v is deprecated, use -V
+- add -T as an alias for --tasks
+- documentation
+
+## 3.5
+
+- added `gulp.watch(globs, tasksArray)` sugar
+- remove gulp.taskQueue
+- deprecate gulp.run
+- deprecate gulp.env
+- add engineStrict to prevent people with node < 0.9 from installing
+
+## 3.4
+
+- added `--tasks` that prints out the tree of tasks + deps
+- global cli + local install mismatch is no longer fatal
+- remove tests for fs stuff
+- switch core src, dest, and watch to vinyl-fs
+- internal cleaning
+
+## 3.3.4
+
+- `--base` is now `--cwd`
+
+## 3.3.3
+
+- support for `--base` CLI arg to change where the search for gulpfile/`--require`s starts
+- support for `--gulpfile` CLI arg to point to a gulpfile specifically
+
+## 3.3.0
+
+- file.contents streams are no longer paused coming out of src
+- dest now passes files through before they are empty to fix passing to multiple dests
+
+## 3.2.4
+
+- Bug fix - we didn't have any CLI tests
+
+## 3.2.3
+
+- Update dependencies for bug fixes
+- autocomplete stuff in the completion folder
+
+## 3.2
+
+- File object is now [vinyl](https://github.com/wearefractal/vinyl)
+- .watch() is now [glob-watcher](https://github.com/wearefractal/glob-watcher)
+- Fix CLI -v when no gulpfile found
+- gulp-util updated
+- Logging moved to CLI bin file
+ - Will cause double logging if you update global CLI to 3.2 but not local
+ - Will cause no logging if you update local to 3.1 but not global CLI
+- Drop support for < 0.9
+
+## 3.1.3
+
+- Move isStream and isBuffer to gulp-util
+
+## 3.1
+
+- Move file class to gulp-util
+
+## 3.0
+
+- Ability to pass multiple globs and glob negations to glob-stream
+- Breaking change to the way glob-stream works
+- File object is now a class
+- file.shortened changed to file.relative
+- file.cwd added
+- Break out getStats to avoid nesting
+- Major code reorganization
+
+## 2.7
+
+- Breaking change to the way options are passed to glob-stream
+- Introduce new File object to ease pain of computing shortened names (now a getter)
+
+## 2.4 - 2.6
+
+- Moved stuff to gulp-util
+- Quit exposing createGlobStream (just use the glob-stream module)
+- More logging
+- Prettier time durations
+- Tons of documentation changes
+- gulp.trigger(tasks...) as a through stream
+
+## 1.2-2.4 (11/12/13)
+
+- src buffer=false fixed for 0.8 and 0.9 (remember to .resume() on these versions before consuming)
+- CLI completely rewritten
+ - Colorful logging
+ - Uses local version of gulp to run tasks
+ - Uses findup to locate gulpfile (so you can run it anywhere in your project)
+ - chdir to gulpfile directory before loading it
+ - Correct exit codes on errors
+- silent flag added to gulp to disable logging
+- Fixes to task orchestration (3rd party)
+- Better support for globbed directories (thanks @robrich)
+
+## 1.2 (10/28/13)
+
+- Can specify buffer=false on src streams to make file.content a stream
+- Can specify read=false on src streams to disable file.content
+
+## 1.1 (10/21/13)
+
+- Can specify run callback
+- Can specify task dependencies
+- Tasks can accept callback or return promise
+- `gulp.verbose` exposes run-time internals
+
+## 1.0 (9/26/13)
+
+- Specify dependency versions
+- Updated docs
+
+## 0.2 (8/6/13)
+
+- Rename .files() to .src() and .folder() to .dest()
+
+## 0.1 (7/18/13)
+
+- Initial Release
diff --git a/node_modules/gulp/LICENSE b/node_modules/gulp/LICENSE
new file mode 100644
index 0000000..6a29df9
--- /dev/null
+++ b/node_modules/gulp/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2013-2018 Blaine Bublitz , Eric Schoffstall and other 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.
diff --git a/node_modules/gulp/README.md b/node_modules/gulp/README.md
new file mode 100644
index 0000000..aac4230
--- /dev/null
+++ b/node_modules/gulp/README.md
@@ -0,0 +1,284 @@
+
+
+
+
+
The streaming build system
+
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Azure Pipelines Build Status][azure-pipelines-image]][azure-pipelines-url] [![Build Status][travis-image]][travis-url] [![AppVeyor Build Status][appveyor-image]][appveyor-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![OpenCollective Backers][backer-badge]][backer-url] [![OpenCollective Sponsors][sponsor-badge]][sponsor-url] [![Gitter chat][gitter-image]][gitter-url]
+
+
+## What is gulp?
+
+- **Automation** - gulp is a toolkit that helps you automate painful or time-consuming tasks in your development workflow.
+- **Platform-agnostic** - Integrations are built into all major IDEs and people are using gulp with PHP, .NET, Node.js, Java, and other platforms.
+- **Strong Ecosystem** - Use npm modules to do anything you want + over 2000 curated plugins for streaming file transformations
+- **Simple** - By providing only a minimal API surface, gulp is easy to learn and simple to use
+
+## What's new in 4.0?!
+
+* The task system was rewritten from the ground-up, allowing task composition using `series()` and `parallel()` methods
+* The watcher was updated, now using chokidar (no more need for gulp-watch!), with feature parity to our task system
+* First-class support was added for incremental builds using `lastRun()`
+* A `symlink()` method was exposed to create symlinks instead of copying files
+* Built-in support for sourcemaps was added - the gulp-sourcemaps plugin is no longer necessary!
+* Task registration of exported functions - using node or ES exports - is now recommended
+* Custom registries were designed, allowing for shared tasks or augmented functionality
+* Stream implementations were improved, allowing for better conditional and phased builds
+
+## Installation
+
+Follow our [Quick Start guide][quick-start].
+
+## Roadmap
+
+Find out about all our work-in-progress and outstanding issues at https://github.com/orgs/gulpjs/projects.
+
+## Documentation
+
+Check out the [Getting Started guide][getting-started-guide] and [API docs][api-docs] on our website!
+
+__Excuse our dust! All other docs will be behind until we get everything updated. Please open an issue if something isn't working.__
+
+## Sample `gulpfile.js`
+
+This file will give you a taste of what gulp does.
+
+```js
+var gulp = require('gulp');
+var less = require('gulp-less');
+var babel = require('gulp-babel');
+var concat = require('gulp-concat');
+var uglify = require('gulp-uglify');
+var rename = require('gulp-rename');
+var cleanCSS = require('gulp-clean-css');
+var del = require('del');
+
+var paths = {
+ styles: {
+ src: 'src/styles/**/*.less',
+ dest: 'assets/styles/'
+ },
+ scripts: {
+ src: 'src/scripts/**/*.js',
+ dest: 'assets/scripts/'
+ }
+};
+
+/* Not all tasks need to use streams, a gulpfile is just another node program
+ * and you can use all packages available on npm, but it must return either a
+ * Promise, a Stream or take a callback and call it
+ */
+function clean() {
+ // You can use multiple globbing patterns as you would with `gulp.src`,
+ // for example if you are using del 2.0 or above, return its promise
+ return del([ 'assets' ]);
+}
+
+/*
+ * Define our tasks using plain functions
+ */
+function styles() {
+ return gulp.src(paths.styles.src)
+ .pipe(less())
+ .pipe(cleanCSS())
+ // pass in options to the stream
+ .pipe(rename({
+ basename: 'main',
+ suffix: '.min'
+ }))
+ .pipe(gulp.dest(paths.styles.dest));
+}
+
+function scripts() {
+ return gulp.src(paths.scripts.src, { sourcemaps: true })
+ .pipe(babel())
+ .pipe(uglify())
+ .pipe(concat('main.min.js'))
+ .pipe(gulp.dest(paths.scripts.dest));
+}
+
+function watch() {
+ gulp.watch(paths.scripts.src, scripts);
+ gulp.watch(paths.styles.src, styles);
+}
+
+/*
+ * Specify if tasks run in series or parallel using `gulp.series` and `gulp.parallel`
+ */
+var build = gulp.series(clean, gulp.parallel(styles, scripts));
+
+/*
+ * You can use CommonJS `exports` module notation to declare tasks
+ */
+exports.clean = clean;
+exports.styles = styles;
+exports.scripts = scripts;
+exports.watch = watch;
+exports.build = build;
+/*
+ * Define default task that can be called by just running `gulp` from cli
+ */
+exports.default = build;
+```
+
+## Use latest JavaScript version in your gulpfile
+
+__Most new versions of node support most features that Babel provides, except the `import`/`export` syntax. When only that syntax is desired, rename to `gulpfile.esm.js`, install the [esm][esm-module] module, and skip the Babel portion below.__
+
+Node already supports a lot of __ES2015+__ features, but to avoid compatibility problems we suggest to install Babel and rename your `gulpfile.js` to `gulpfile.babel.js`.
+
+```sh
+npm install --save-dev @babel/register @babel/core @babel/preset-env
+```
+
+Then create a **.babelrc** file with the preset configuration.
+
+```js
+{
+ "presets": [ "@babel/preset-env" ]
+}
+```
+
+And here's the same sample from above written in **ES2015+**.
+
+```js
+import gulp from 'gulp';
+import less from 'gulp-less';
+import babel from 'gulp-babel';
+import concat from 'gulp-concat';
+import uglify from 'gulp-uglify';
+import rename from 'gulp-rename';
+import cleanCSS from 'gulp-clean-css';
+import del from 'del';
+
+const paths = {
+ styles: {
+ src: 'src/styles/**/*.less',
+ dest: 'assets/styles/'
+ },
+ scripts: {
+ src: 'src/scripts/**/*.js',
+ dest: 'assets/scripts/'
+ }
+};
+
+/*
+ * For small tasks you can export arrow functions
+ */
+export const clean = () => del([ 'assets' ]);
+
+/*
+ * You can also declare named functions and export them as tasks
+ */
+export function styles() {
+ return gulp.src(paths.styles.src)
+ .pipe(less())
+ .pipe(cleanCSS())
+ // pass in options to the stream
+ .pipe(rename({
+ basename: 'main',
+ suffix: '.min'
+ }))
+ .pipe(gulp.dest(paths.styles.dest));
+}
+
+export function scripts() {
+ return gulp.src(paths.scripts.src, { sourcemaps: true })
+ .pipe(babel())
+ .pipe(uglify())
+ .pipe(concat('main.min.js'))
+ .pipe(gulp.dest(paths.scripts.dest));
+}
+
+ /*
+ * You could even use `export as` to rename exported tasks
+ */
+function watchFiles() {
+ gulp.watch(paths.scripts.src, scripts);
+ gulp.watch(paths.styles.src, styles);
+}
+export { watchFiles as watch };
+
+const build = gulp.series(clean, gulp.parallel(styles, scripts));
+/*
+ * Export a default task
+ */
+export default build;
+```
+
+## Incremental Builds
+
+You can filter out unchanged files between runs of a task using
+the `gulp.src` function's `since` option and `gulp.lastRun`:
+```js
+const paths = {
+ ...
+ images: {
+ src: 'src/images/**/*.{jpg,jpeg,png}',
+ dest: 'build/img/'
+ }
+}
+
+function images() {
+ return gulp.src(paths.images.src, {since: gulp.lastRun(images)})
+ .pipe(imagemin({optimizationLevel: 5}))
+ .pipe(gulp.dest(paths.images.dest));
+}
+
+function watch() {
+ gulp.watch(paths.images.src, images);
+}
+```
+Task run times are saved in memory and are lost when gulp exits. It will only
+save time during the `watch` task when running the `images` task
+for a second time.
+
+## Want to contribute?
+
+Anyone can help make this project better - check out our [Contributing guide](/CONTRIBUTING.md)!
+
+## Backers
+
+Support us with a monthly donation and help us continue our activities.
+
+[![Backers][backers-image]][support-url]
+
+## Sponsors
+
+Become a sponsor to get your logo on our README on Github.
+
+[![Sponsors][sponsors-image]][support-url]
+
+[downloads-image]: https://img.shields.io/npm/dm/gulp.svg
+[npm-url]: https://www.npmjs.com/package/gulp
+[npm-image]: https://img.shields.io/npm/v/gulp.svg
+
+[azure-pipelines-url]: https://dev.azure.com/gulpjs/gulp/_build/latest?definitionId=1&branchName=master
+[azure-pipelines-image]: https://dev.azure.com/gulpjs/gulp/_apis/build/status/gulp?branchName=master
+
+[travis-url]: https://travis-ci.org/gulpjs/gulp
+[travis-image]: https://img.shields.io/travis/gulpjs/gulp.svg?label=travis-ci
+
+[appveyor-url]: https://ci.appveyor.com/project/gulpjs/gulp
+[appveyor-image]: https://img.shields.io/appveyor/ci/gulpjs/gulp.svg?label=appveyor
+
+[coveralls-url]: https://coveralls.io/r/gulpjs/gulp
+[coveralls-image]: https://img.shields.io/coveralls/gulpjs/gulp/master.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.svg
+
+[backer-url]: #backers
+[backer-badge]: https://opencollective.com/gulpjs/backers/badge.svg?color=blue
+[sponsor-url]: #sponsors
+[sponsor-badge]: https://opencollective.com/gulpjs/sponsors/badge.svg?color=blue
+
+[support-url]: https://opencollective.com/gulpjs#support
+
+[backers-image]: https://opencollective.com/gulpjs/backers.svg
+[sponsors-image]: https://opencollective.com/gulpjs/sponsors.svg
+
+[quick-start]: https://gulpjs.com/docs/en/getting-started/quick-start
+[getting-started-guide]: https://gulpjs.com/docs/en/getting-started/quick-start
+[api-docs]: https://gulpjs.com/docs/en/api/concepts
diff --git a/node_modules/gulp/bin/gulp.js b/node_modules/gulp/bin/gulp.js
new file mode 100755
index 0000000..f4b80cc
--- /dev/null
+++ b/node_modules/gulp/bin/gulp.js
@@ -0,0 +1,3 @@
+#!/usr/bin/env node
+
+require('gulp-cli')();
diff --git a/node_modules/gulp/index.js b/node_modules/gulp/index.js
new file mode 100644
index 0000000..8b73521
--- /dev/null
+++ b/node_modules/gulp/index.js
@@ -0,0 +1,55 @@
+'use strict';
+
+var util = require('util');
+var Undertaker = require('undertaker');
+var vfs = require('vinyl-fs');
+var watch = require('glob-watcher');
+
+function Gulp() {
+ Undertaker.call(this);
+
+ // Bind the functions for destructuring
+ this.watch = this.watch.bind(this);
+ this.task = this.task.bind(this);
+ this.series = this.series.bind(this);
+ this.parallel = this.parallel.bind(this);
+ this.registry = this.registry.bind(this);
+ this.tree = this.tree.bind(this);
+ this.lastRun = this.lastRun.bind(this);
+ this.src = this.src.bind(this);
+ this.dest = this.dest.bind(this);
+ this.symlink = this.symlink.bind(this);
+}
+util.inherits(Gulp, Undertaker);
+
+Gulp.prototype.src = vfs.src;
+Gulp.prototype.dest = vfs.dest;
+Gulp.prototype.symlink = vfs.symlink;
+Gulp.prototype.watch = function(glob, opt, task) {
+ if (typeof opt === 'string' || typeof task === 'string' ||
+ Array.isArray(opt) || Array.isArray(task)) {
+ throw new Error('watching ' + glob + ': watch task has to be ' +
+ 'a function (optionally generated by using gulp.parallel ' +
+ 'or gulp.series)');
+ }
+
+ if (typeof opt === 'function') {
+ task = opt;
+ opt = {};
+ }
+
+ opt = opt || {};
+
+ var fn;
+ if (typeof task === 'function') {
+ fn = this.parallel(task);
+ }
+
+ return watch(glob, opt, fn);
+};
+
+// Let people use this class from our instance
+Gulp.prototype.Gulp = Gulp;
+
+var inst = new Gulp();
+module.exports = inst;
diff --git a/node_modules/gulp/package.json b/node_modules/gulp/package.json
new file mode 100644
index 0000000..256684a
--- /dev/null
+++ b/node_modules/gulp/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "gulp",
+ "version": "4.0.2",
+ "description": "The streaming build system.",
+ "homepage": "https://gulpjs.com",
+ "author": "Gulp Team (https://gulpjs.com/)",
+ "contributors": [
+ "Eric Schoffstall ",
+ "Blaine Bublitz "
+ ],
+ "repository": "gulpjs/gulp",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "main": "index.js",
+ "files": [
+ "LICENSE",
+ "index.js",
+ "bin"
+ ],
+ "bin": {
+ "gulp": "./bin/gulp.js"
+ },
+ "scripts": {
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "test": "nyc mocha --async-only",
+ "azure-pipelines": "nyc mocha --async-only --reporter xunit -O output=test.xunit",
+ "coveralls": "nyc report --reporter=text-lcov | coveralls"
+ },
+ "dependencies": {
+ "glob-watcher": "^5.0.3",
+ "gulp-cli": "^2.2.0",
+ "undertaker": "^1.2.1",
+ "vinyl-fs": "^3.0.0"
+ },
+ "devDependencies": {
+ "coveralls": "github:phated/node-coveralls#2.x",
+ "eslint": "^2.13.1",
+ "eslint-config-gulp": "^3.0.1",
+ "expect": "^1.20.2",
+ "mkdirp": "^0.5.1",
+ "mocha": "^3.0.0",
+ "nyc": "^10.3.2",
+ "rimraf": "^2.6.3"
+ },
+ "keywords": [
+ "build",
+ "stream",
+ "system",
+ "make",
+ "tool",
+ "asset",
+ "pipeline",
+ "series",
+ "parallel",
+ "streaming"
+ ]
+}
diff --git a/node_modules/gulplog/CHANGELOG.md b/node_modules/gulplog/CHANGELOG.md
new file mode 100644
index 0000000..5f84e9b
--- /dev/null
+++ b/node_modules/gulplog/CHANGELOG.md
@@ -0,0 +1,10 @@
+# gulplog changelog
+
+## 1.0.0
+
+- Initial release
+- No implementation changed since initial commit
+
+## 0.0.0
+
+- Experimentation
diff --git a/node_modules/gulplog/LICENSE b/node_modules/gulplog/LICENSE
new file mode 100644
index 0000000..8ac3554
--- /dev/null
+++ b/node_modules/gulplog/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Blaine Bublitz, Eric Schoffstall and other 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.
+
diff --git a/node_modules/gulplog/README.md b/node_modules/gulplog/README.md
new file mode 100644
index 0000000..484e939
--- /dev/null
+++ b/node_modules/gulplog/README.md
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+# gulplog
+
+[![NPM version][npm-image]][npm-url] [![Downloads][downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Gitter chat][gitter-image]][gitter-url]
+
+Logger for gulp and gulp plugins
+
+## Usage
+
+```js
+var logger = require('gulplog');
+
+// logs strings
+logger.debug('The MOST verbose!');
+logger.info('Some important info');
+logger.warn('All the warnings to you');
+logger.error('OH NO! SOMETHING HAPPENED!');
+
+// supports util.format!
+logger.info('%s style!', 'printf');
+
+// log anything
+logger.debug({ my: 'obj' });
+logger.info([1, 2, 3]);
+```
+
+## API
+
+Logging (and level of logging) is controlled by [`gulp-cli`][gulp-cli-url]
+
+#### logger.debug(msg)
+
+Highest log level. Typically used for debugging purposes.
+
+If the first argument is a string, all arguments are passed to node's
+[`util.format()`][util-format-url] before being emitted.
+
+#### logger.info(msg)
+
+Standard log level. Typically used for user information.
+
+If the first argument is a string, all arguments are passed to node's
+[`util.format()`][util-format-url] before being emitted.
+
+#### logger.warn(msg)
+
+Warning log level. Typically used for warnings.
+
+If the first argument is a string, all arguments are passed to node's
+[`util.format()`][util-format-url] before being emitted.
+
+#### logger.error(msg)
+
+Error log level. Typically used when things went horribly wrong.
+
+If the first argument is a string, all arguments are passed to node's
+[`util.format()`][util-format-url] before being emitted.
+
+## License
+
+MIT
+
+[downloads-image]: http://img.shields.io/npm/dm/gulplog.svg
+[npm-url]: https://npmjs.org/package/gulplog
+[npm-image]: http://img.shields.io/npm/v/gulplog.svg
+
+[travis-url]: https://travis-ci.org/gulpjs/gulplog
+[travis-image]: http://img.shields.io/travis/gulpjs/gulplog.svg
+
+[gitter-url]: https://gitter.im/gulpjs/gulp
+[gitter-image]: https://badges.gitter.im/gulpjs/gulp.png
+
+[gulp-cli-url]: https://github.com/gulpjs/gulp-cli
+[util-format-url]: https://nodejs.org/docs/latest/api/util.html#util_util_format_format
diff --git a/node_modules/gulplog/index.js b/node_modules/gulplog/index.js
new file mode 100644
index 0000000..b92a646
--- /dev/null
+++ b/node_modules/gulplog/index.js
@@ -0,0 +1,7 @@
+'use strict';
+
+var getLogger = require('glogg');
+
+var logger = getLogger('gulplog');
+
+module.exports = logger;
diff --git a/node_modules/gulplog/package.json b/node_modules/gulplog/package.json
new file mode 100644
index 0000000..047bc7c
--- /dev/null
+++ b/node_modules/gulplog/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "gulplog",
+ "version": "1.0.0",
+ "description": "Logger for gulp and gulp plugins",
+ "author": "Blaine Bublitz (http://iceddev.com)",
+ "contributors": [],
+ "repository": "gulpjs/gulplog",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
+ },
+ "main": "index.js",
+ "files": [
+ "LICENSE",
+ "index.js"
+ ],
+ "scripts": {
+ "test": "eslint index.js && jscs index.js"
+ },
+ "dependencies": {
+ "glogg": "^1.0.0"
+ },
+ "devDependencies": {
+ "eslint": "^1.5.1",
+ "eslint-config-node-style-guide": "^1.0.1",
+ "jscs": "^2.1.1"
+ },
+ "keywords": [
+ "gulp",
+ "gulp-util",
+ "log",
+ "logging"
+ ]
+}
diff --git a/node_modules/has-property-descriptors/.eslintrc b/node_modules/has-property-descriptors/.eslintrc
new file mode 100644
index 0000000..2fcc002
--- /dev/null
+++ b/node_modules/has-property-descriptors/.eslintrc
@@ -0,0 +1,13 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "func-name-matching": 0,
+ "id-length": 0,
+ "new-cap": [2, {
+ "capIsNewExceptions": ["GetIntrinsic"],
+ }],
+ },
+}
diff --git a/node_modules/has-property-descriptors/.github/FUNDING.yml b/node_modules/has-property-descriptors/.github/FUNDING.yml
new file mode 100644
index 0000000..817aacf
--- /dev/null
+++ b/node_modules/has-property-descriptors/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/has-property-descriptors
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/has-property-descriptors/.nycrc b/node_modules/has-property-descriptors/.nycrc
new file mode 100644
index 0000000..bdd626c
--- /dev/null
+++ b/node_modules/has-property-descriptors/.nycrc
@@ -0,0 +1,9 @@
+{
+ "all": true,
+ "check-coverage": false,
+ "reporter": ["text-summary", "text", "html", "json"],
+ "exclude": [
+ "coverage",
+ "test"
+ ]
+}
diff --git a/node_modules/has-property-descriptors/CHANGELOG.md b/node_modules/has-property-descriptors/CHANGELOG.md
new file mode 100644
index 0000000..ae64b47
--- /dev/null
+++ b/node_modules/has-property-descriptors/CHANGELOG.md
@@ -0,0 +1,16 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## v1.0.0 - 2022-04-14
+
+### Commits
+
+- Initial implementation, tests [`303559f`](https://github.com/inspect-js/has-property-descriptors/commit/303559f2a72dfe7111573a1aec475ed4a184c35a)
+- Initial commit [`3a7ca2d`](https://github.com/inspect-js/has-property-descriptors/commit/3a7ca2dc49f1fff0279a28bb16265e7615e14749)
+- read me [`dd73dce`](https://github.com/inspect-js/has-property-descriptors/commit/dd73dce09d89d0f7a4a6e3b1e562a506f979a767)
+- npm init [`c1e6557`](https://github.com/inspect-js/has-property-descriptors/commit/c1e655779de632d68cb944c50da6b71bcb7b8c85)
+- Only apps should have lockfiles [`e72f7c6`](https://github.com/inspect-js/has-property-descriptors/commit/e72f7c68de534b2d273ee665f8b18d4ecc7f70b0)
diff --git a/node_modules/has-property-descriptors/LICENSE b/node_modules/has-property-descriptors/LICENSE
new file mode 100644
index 0000000..2e7b9a3
--- /dev/null
+++ b/node_modules/has-property-descriptors/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 Inspect JS
+
+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/node_modules/has-property-descriptors/README.md b/node_modules/has-property-descriptors/README.md
new file mode 100644
index 0000000..d81fbd9
--- /dev/null
+++ b/node_modules/has-property-descriptors/README.md
@@ -0,0 +1,43 @@
+# has-property-descriptors [![Version Badge][npm-version-svg]][package-url]
+
+[![github actions][actions-image]][actions-url]
+[![coverage][codecov-image]][codecov-url]
+[![dependency status][deps-svg]][deps-url]
+[![dev dependency status][dev-deps-svg]][dev-deps-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][npm-badge-png]][package-url]
+
+Does the environment have full property descriptor support? Handles IE 8's broken defineProperty/gOPD.
+
+## Example
+
+```js
+var hasPropertyDescriptors = require('has-property-descriptors');
+var assert = require('assert');
+
+assert.equal(hasPropertyDescriptors(), true); // will be `false` in IE 6-8, and ES5 engines
+
+// Arrays can not have their length `[[Defined]]` in some engines
+assert.equal(hasPropertyDescriptors.hasArrayLengthDefineBug(), false); // will be `true` in Firefox 4-22, and node v0.6
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[package-url]: https://npmjs.org/package/has-property-descriptors
+[npm-version-svg]: https://versionbadg.es/inspect-js/has-property-descriptors.svg
+[deps-svg]: https://david-dm.org/inspect-js/has-property-descriptors.svg
+[deps-url]: https://david-dm.org/inspect-js/has-property-descriptors
+[dev-deps-svg]: https://david-dm.org/inspect-js/has-property-descriptors/dev-status.svg
+[dev-deps-url]: https://david-dm.org/inspect-js/has-property-descriptors#info=devDependencies
+[npm-badge-png]: https://nodei.co/npm/has-property-descriptors.png?downloads=true&stars=true
+[license-image]: https://img.shields.io/npm/l/has-property-descriptors.svg
+[license-url]: LICENSE
+[downloads-image]: https://img.shields.io/npm/dm/has-property-descriptors.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=has-property-descriptors
+[codecov-image]: https://codecov.io/gh/inspect-js/has-property-descriptors/branch/main/graphs/badge.svg
+[codecov-url]: https://app.codecov.io/gh/inspect-js/has-property-descriptors/
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-property-descriptors
+[actions-url]: https://github.com/inspect-js/has-property-descriptors/actions
diff --git a/node_modules/has-property-descriptors/index.js b/node_modules/has-property-descriptors/index.js
new file mode 100644
index 0000000..8e30683
--- /dev/null
+++ b/node_modules/has-property-descriptors/index.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
+
+var hasPropertyDescriptors = function hasPropertyDescriptors() {
+ if ($defineProperty) {
+ try {
+ $defineProperty({}, 'a', { value: 1 });
+ return true;
+ } catch (e) {
+ // IE 8 has a broken defineProperty
+ return false;
+ }
+ }
+ return false;
+};
+
+hasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {
+ // node v0.6 has a bug where array lengths can be Set but not Defined
+ if (!hasPropertyDescriptors()) {
+ return null;
+ }
+ try {
+ return $defineProperty([], 'length', { value: 1 }).length !== 1;
+ } catch (e) {
+ // In Firefox 4-22, defining length on an array throws an exception.
+ return true;
+ }
+};
+
+module.exports = hasPropertyDescriptors;
diff --git a/node_modules/has-property-descriptors/package.json b/node_modules/has-property-descriptors/package.json
new file mode 100644
index 0000000..9404b71
--- /dev/null
+++ b/node_modules/has-property-descriptors/package.json
@@ -0,0 +1,70 @@
+{
+ "name": "has-property-descriptors",
+ "version": "1.0.0",
+ "description": "Does the environment have full property descriptor support? Handles IE 8's broken defineProperty/gOPD.",
+ "main": "index.js",
+ "exports": {
+ ".": "./index.js",
+ "./package.json": "./package.json"
+ },
+ "sideEffects": false,
+ "scripts": {
+ "prepublishOnly": "safe-publish-latest",
+ "prepublish": "not-in-publish || npm run prepublishOnly",
+ "pretest": "npm run lint",
+ "prelint": "evalmd README.md",
+ "lint": "eslint --ext=js,mjs .",
+ "tests-only": "nyc tape 'test/**/*.js'",
+ "test": "npm run tests-only",
+ "posttest": "aud --production",
+ "version": "auto-changelog && git add CHANGELOG.md",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/inspect-js/has-property-descriptors.git"
+ },
+ "keywords": [
+ "property",
+ "descriptors",
+ "has",
+ "environment",
+ "env",
+ "defineProperty",
+ "getOwnPropertyDescriptor"
+ ],
+ "author": "Jordan Harband ",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/inspect-js/has-property-descriptors/issues"
+ },
+ "homepage": "https://github.com/inspect-js/has-property-descriptors#readme",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^21.0.0",
+ "aud": "^2.0.0",
+ "auto-changelog": "^2.4.0",
+ "eslint": "=8.8.0",
+ "in-publish": "^2.0.1",
+ "evalmd": "^0.0.19",
+ "nyc": "^10.3.2",
+ "safe-publish-latest": "^2.0.0",
+ "tape": "^5.5.3"
+ },
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "testling": {
+ "files": "test/index.js"
+ },
+ "auto-changelog": {
+ "output": "CHANGELOG.md",
+ "template": "keepachangelog",
+ "unreleased": false,
+ "commitLimit": false,
+ "backfillLimit": false,
+ "hideCredit": true
+ }
+}
diff --git a/node_modules/has-property-descriptors/test/index.js b/node_modules/has-property-descriptors/test/index.js
new file mode 100644
index 0000000..7f02bd3
--- /dev/null
+++ b/node_modules/has-property-descriptors/test/index.js
@@ -0,0 +1,57 @@
+'use strict';
+
+var test = require('tape');
+
+var hasPropertyDescriptors = require('../');
+
+var sentinel = {};
+
+test('hasPropertyDescriptors', function (t) {
+ t.equal(typeof hasPropertyDescriptors, 'function', 'is a function');
+ t.equal(typeof hasPropertyDescriptors.hasArrayLengthDefineBug, 'function', '`hasArrayLengthDefineBug` property is a function');
+
+ var yes = hasPropertyDescriptors();
+ t.test('property descriptors', { skip: !yes }, function (st) {
+ var o = { a: sentinel };
+
+ st.deepEqual(
+ Object.getOwnPropertyDescriptor(o, 'a'),
+ {
+ configurable: true,
+ enumerable: true,
+ value: sentinel,
+ writable: true
+ },
+ 'has expected property descriptor'
+ );
+
+ Object.defineProperty(o, 'a', { enumerable: false, writable: false });
+
+ st.deepEqual(
+ Object.getOwnPropertyDescriptor(o, 'a'),
+ {
+ configurable: true,
+ enumerable: false,
+ value: sentinel,
+ writable: false
+ },
+ 'has expected property descriptor after [[Define]]'
+ );
+
+ st.end();
+ });
+
+ var arrayBug = hasPropertyDescriptors.hasArrayLengthDefineBug();
+ t.test('defining array lengths', { skip: !yes || arrayBug }, function (st) {
+ var arr = [1, , 3]; // eslint-disable-line no-sparse-arrays
+ st.equal(arr.length, 3, 'array starts with length 3');
+
+ Object.defineProperty(arr, 'length', { value: 5 });
+
+ st.equal(arr.length, 5, 'array ends with length 5');
+
+ st.end();
+ });
+
+ t.end();
+});
diff --git a/node_modules/has-symbols/.eslintrc b/node_modules/has-symbols/.eslintrc
new file mode 100644
index 0000000..2d9a66a
--- /dev/null
+++ b/node_modules/has-symbols/.eslintrc
@@ -0,0 +1,11 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "max-statements-per-line": [2, { "max": 2 }],
+ "no-magic-numbers": 0,
+ "multiline-comment-style": 0,
+ }
+}
diff --git a/node_modules/has-symbols/.github/FUNDING.yml b/node_modules/has-symbols/.github/FUNDING.yml
new file mode 100644
index 0000000..04cf87e
--- /dev/null
+++ b/node_modules/has-symbols/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/has-symbols
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/has-symbols/.nycrc b/node_modules/has-symbols/.nycrc
new file mode 100644
index 0000000..bdd626c
--- /dev/null
+++ b/node_modules/has-symbols/.nycrc
@@ -0,0 +1,9 @@
+{
+ "all": true,
+ "check-coverage": false,
+ "reporter": ["text-summary", "text", "html", "json"],
+ "exclude": [
+ "coverage",
+ "test"
+ ]
+}
diff --git a/node_modules/has-symbols/CHANGELOG.md b/node_modules/has-symbols/CHANGELOG.md
new file mode 100644
index 0000000..cd532a2
--- /dev/null
+++ b/node_modules/has-symbols/CHANGELOG.md
@@ -0,0 +1,75 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [v1.0.3](https://github.com/inspect-js/has-symbols/compare/v1.0.2...v1.0.3) - 2022-03-01
+
+### Commits
+
+- [actions] use `node/install` instead of `node/run`; use `codecov` action [`518b28f`](https://github.com/inspect-js/has-symbols/commit/518b28f6c5a516cbccae30794e40aa9f738b1693)
+- [meta] add `bugs` and `homepage` fields; reorder package.json [`c480b13`](https://github.com/inspect-js/has-symbols/commit/c480b13fd6802b557e1cef9749872cb5fdeef744)
+- [actions] reuse common workflows [`01d0ee0`](https://github.com/inspect-js/has-symbols/commit/01d0ee0a8d97c0947f5edb73eb722027a77b2b07)
+- [actions] update codecov uploader [`6424ebe`](https://github.com/inspect-js/has-symbols/commit/6424ebe86b2c9c7c3d2e9bd4413a4e4f168cb275)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`dfa7e7f`](https://github.com/inspect-js/has-symbols/commit/dfa7e7ff38b594645d8c8222aab895157fa7e282)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` [`0c8d436`](https://github.com/inspect-js/has-symbols/commit/0c8d43685c45189cea9018191d4fd7eca91c9d02)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`9026554`](https://github.com/inspect-js/has-symbols/commit/902655442a1bf88e72b42345494ef0c60f5d36ab)
+- [readme] add actions and codecov badges [`eaa9682`](https://github.com/inspect-js/has-symbols/commit/eaa9682f990f481d3acf7a1c7600bec36f7b3adc)
+- [Dev Deps] update `eslint`, `tape` [`bc7a3ba`](https://github.com/inspect-js/has-symbols/commit/bc7a3ba46f27b7743f8a2579732d59d1b9ac791e)
+- [Dev Deps] update `eslint`, `auto-changelog` [`0ace00a`](https://github.com/inspect-js/has-symbols/commit/0ace00af08a88cdd1e6ce0d60357d941c60c2d9f)
+- [meta] use `prepublishOnly` script for npm 7+ [`093f72b`](https://github.com/inspect-js/has-symbols/commit/093f72bc2b0ed00c781f444922a5034257bf561d)
+- [Tests] test on all 16 minors [`9b80d3d`](https://github.com/inspect-js/has-symbols/commit/9b80d3d9102529f04c20ec5b1fcc6e38426c6b03)
+
+## [v1.0.2](https://github.com/inspect-js/has-symbols/compare/v1.0.1...v1.0.2) - 2021-02-27
+
+### Fixed
+
+- [Fix] use a universal way to get the original Symbol [`#11`](https://github.com/inspect-js/has-symbols/issues/11)
+
+### Commits
+
+- [Tests] migrate tests to Github Actions [`90ae798`](https://github.com/inspect-js/has-symbols/commit/90ae79820bdfe7bc703d67f5f3c5e205f98556d3)
+- [meta] do not publish github action workflow files [`29e60a1`](https://github.com/inspect-js/has-symbols/commit/29e60a1b7c25c7f1acf7acff4a9320d0d10c49b4)
+- [Tests] run `nyc` on all tests [`8476b91`](https://github.com/inspect-js/has-symbols/commit/8476b915650d360915abe2522505abf4b0e8f0ae)
+- [readme] fix repo URLs, remove defunct badges [`126288e`](https://github.com/inspect-js/has-symbols/commit/126288ecc1797c0a40247a6b78bcb2e0bc5d7036)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `core-js`, `get-own-property-symbols` [`d84bdfa`](https://github.com/inspect-js/has-symbols/commit/d84bdfa48ac5188abbb4904b42614cd6c030940a)
+- [Tests] fix linting errors [`0df3070`](https://github.com/inspect-js/has-symbols/commit/0df3070b981b6c9f2ee530c09189a7f5c6def839)
+- [actions] add "Allow Edits" workflow [`1e6bc29`](https://github.com/inspect-js/has-symbols/commit/1e6bc29b188f32b9648657b07eda08504be5aa9c)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`36cea2a`](https://github.com/inspect-js/has-symbols/commit/36cea2addd4e6ec435f35a2656b4e9ef82498e9b)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`1278338`](https://github.com/inspect-js/has-symbols/commit/127833801865fbc2cc8979beb9ca869c7bfe8222)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`1493254`](https://github.com/inspect-js/has-symbols/commit/1493254eda13db5fb8fc5e4a3e8324b3d196029d)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js` [`b090bf2`](https://github.com/inspect-js/has-symbols/commit/b090bf214d3679a30edc1e2d729d466ab5183e1d)
+- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`4addb7a`](https://github.com/inspect-js/has-symbols/commit/4addb7ab4dc73f927ae99928d68817554fc21dc0)
+- [Dev Deps] update `auto-changelog`, `tape` [`81d0baf`](https://github.com/inspect-js/has-symbols/commit/81d0baf3816096a89a8558e8043895f7a7d10d8b)
+- [Dev Deps] update `auto-changelog`; add `aud` [`1a4e561`](https://github.com/inspect-js/has-symbols/commit/1a4e5612c25d91c3a03d509721d02630bc4fe3da)
+- [readme] remove unused testling URLs [`3000941`](https://github.com/inspect-js/has-symbols/commit/3000941f958046e923ed8152edb1ef4a599e6fcc)
+- [Tests] only audit prod deps [`692e974`](https://github.com/inspect-js/has-symbols/commit/692e9743c912410e9440207631a643a34b4741a1)
+- [Dev Deps] update `@ljharb/eslint-config` [`51c946c`](https://github.com/inspect-js/has-symbols/commit/51c946c7f6baa793ec5390bb5a45cdce16b4ba76)
+
+## [v1.0.1](https://github.com/inspect-js/has-symbols/compare/v1.0.0...v1.0.1) - 2019-11-16
+
+### Commits
+
+- [Tests] use shared travis-ci configs [`ce396c9`](https://github.com/inspect-js/has-symbols/commit/ce396c9419ff11c43d0da5d05cdbb79f7fb42229)
+- [Tests] up to `node` `v12.4`, `v11.15`, `v10.15`, `v9.11`, `v8.15`, `v7.10`, `v6.17`, `v4.9`; use `nvm install-latest-npm` [`0690732`](https://github.com/inspect-js/has-symbols/commit/0690732801f47ab429f39ba1962f522d5c462d6b)
+- [meta] add `auto-changelog` [`2163d0b`](https://github.com/inspect-js/has-symbols/commit/2163d0b7f36343076b8f947cd1667dd1750f26fc)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js`, `safe-publish-latest`, `tape` [`8e0951f`](https://github.com/inspect-js/has-symbols/commit/8e0951f1a7a2e52068222b7bb73511761e6e4d9c)
+- [actions] add automatic rebasing / merge commit blocking [`b09cdb7`](https://github.com/inspect-js/has-symbols/commit/b09cdb7cd7ee39e7a769878f56e2d6066f5ccd1d)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `core-js`, `get-own-property-symbols`, `tape` [`1dd42cd`](https://github.com/inspect-js/has-symbols/commit/1dd42cd86183ed0c50f99b1062345c458babca91)
+- [meta] create FUNDING.yml [`aa57a17`](https://github.com/inspect-js/has-symbols/commit/aa57a17b19708906d1927f821ea8e73394d84ca4)
+- Only apps should have lockfiles [`a2d8bea`](https://github.com/inspect-js/has-symbols/commit/a2d8bea23a97d15c09eaf60f5b107fcf9a4d57aa)
+- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`9e96cb7`](https://github.com/inspect-js/has-symbols/commit/9e96cb783746cbed0c10ef78e599a8eaa7ebe193)
+- [meta] add `funding` field [`a0b32cf`](https://github.com/inspect-js/has-symbols/commit/a0b32cf68e803f963c1639b6d47b0a9d6440bab0)
+- [Dev Deps] update `safe-publish-latest` [`cb9f0a5`](https://github.com/inspect-js/has-symbols/commit/cb9f0a521a3a1790f1064d437edd33bb6c3d6af0)
+
+## v1.0.0 - 2016-09-19
+
+### Commits
+
+- Tests. [`ecb6eb9`](https://github.com/inspect-js/has-symbols/commit/ecb6eb934e4883137f3f93b965ba5e0a98df430d)
+- package.json [`88a337c`](https://github.com/inspect-js/has-symbols/commit/88a337cee0864a0da35f5d19e69ff0ef0150e46a)
+- Initial commit [`42e1e55`](https://github.com/inspect-js/has-symbols/commit/42e1e5502536a2b8ac529c9443984acd14836b1c)
+- Initial implementation. [`33f5cc6`](https://github.com/inspect-js/has-symbols/commit/33f5cc6cdff86e2194b081ee842bfdc63caf43fb)
+- read me [`01f1170`](https://github.com/inspect-js/has-symbols/commit/01f1170188ff7cb1558aa297f6ba5b516c6d7b0c)
diff --git a/node_modules/has-symbols/LICENSE b/node_modules/has-symbols/LICENSE
new file mode 100644
index 0000000..df31cbf
--- /dev/null
+++ b/node_modules/has-symbols/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Jordan Harband
+
+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/node_modules/has-symbols/README.md b/node_modules/has-symbols/README.md
new file mode 100644
index 0000000..33905f0
--- /dev/null
+++ b/node_modules/has-symbols/README.md
@@ -0,0 +1,46 @@
+# has-symbols [![Version Badge][2]][1]
+
+[![github actions][actions-image]][actions-url]
+[![coverage][codecov-image]][codecov-url]
+[![dependency status][5]][6]
+[![dev dependency status][7]][8]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][11]][1]
+
+Determine if the JS environment has Symbol support. Supports spec, or shams.
+
+## Example
+
+```js
+var hasSymbols = require('has-symbols');
+
+hasSymbols() === true; // if the environment has native Symbol support. Not polyfillable, not forgeable.
+
+var hasSymbolsKinda = require('has-symbols/shams');
+hasSymbolsKinda() === true; // if the environment has a Symbol sham that mostly follows the spec.
+```
+
+## Supported Symbol shams
+ - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols)
+ - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js)
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[1]: https://npmjs.org/package/has-symbols
+[2]: https://versionbadg.es/inspect-js/has-symbols.svg
+[5]: https://david-dm.org/inspect-js/has-symbols.svg
+[6]: https://david-dm.org/inspect-js/has-symbols
+[7]: https://david-dm.org/inspect-js/has-symbols/dev-status.svg
+[8]: https://david-dm.org/inspect-js/has-symbols#info=devDependencies
+[11]: https://nodei.co/npm/has-symbols.png?downloads=true&stars=true
+[license-image]: https://img.shields.io/npm/l/has-symbols.svg
+[license-url]: LICENSE
+[downloads-image]: https://img.shields.io/npm/dm/has-symbols.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=has-symbols
+[codecov-image]: https://codecov.io/gh/inspect-js/has-symbols/branch/main/graphs/badge.svg
+[codecov-url]: https://app.codecov.io/gh/inspect-js/has-symbols/
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-symbols
+[actions-url]: https://github.com/inspect-js/has-symbols/actions
diff --git a/node_modules/has-symbols/index.js b/node_modules/has-symbols/index.js
new file mode 100644
index 0000000..17044fa
--- /dev/null
+++ b/node_modules/has-symbols/index.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var origSymbol = typeof Symbol !== 'undefined' && Symbol;
+var hasSymbolSham = require('./shams');
+
+module.exports = function hasNativeSymbols() {
+ if (typeof origSymbol !== 'function') { return false; }
+ if (typeof Symbol !== 'function') { return false; }
+ if (typeof origSymbol('foo') !== 'symbol') { return false; }
+ if (typeof Symbol('bar') !== 'symbol') { return false; }
+
+ return hasSymbolSham();
+};
diff --git a/node_modules/has-symbols/package.json b/node_modules/has-symbols/package.json
new file mode 100644
index 0000000..fe7004a
--- /dev/null
+++ b/node_modules/has-symbols/package.json
@@ -0,0 +1,101 @@
+{
+ "name": "has-symbols",
+ "version": "1.0.3",
+ "description": "Determine if the JS environment has Symbol support. Supports spec, or shams.",
+ "main": "index.js",
+ "scripts": {
+ "prepublishOnly": "safe-publish-latest",
+ "prepublish": "not-in-publish || npm run prepublishOnly",
+ "pretest": "npm run --silent lint",
+ "test": "npm run tests-only",
+ "posttest": "aud --production",
+ "tests-only": "npm run test:stock && npm run test:staging && npm run test:shams",
+ "test:stock": "nyc node test",
+ "test:staging": "nyc node --harmony --es-staging test",
+ "test:shams": "npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs",
+ "test:shams:corejs": "nyc node test/shams/core-js.js",
+ "test:shams:getownpropertysymbols": "nyc node test/shams/get-own-property-symbols.js",
+ "lint": "eslint --ext=js,mjs .",
+ "version": "auto-changelog && git add CHANGELOG.md",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/inspect-js/has-symbols.git"
+ },
+ "keywords": [
+ "Symbol",
+ "symbols",
+ "typeof",
+ "sham",
+ "polyfill",
+ "native",
+ "core-js",
+ "ES6"
+ ],
+ "author": {
+ "name": "Jordan Harband",
+ "email": "ljharb@gmail.com",
+ "url": "http://ljharb.codes"
+ },
+ "contributors": [
+ {
+ "name": "Jordan Harband",
+ "email": "ljharb@gmail.com",
+ "url": "http://ljharb.codes"
+ }
+ ],
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/ljharb/has-symbols/issues"
+ },
+ "homepage": "https://github.com/ljharb/has-symbols#readme",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^20.2.3",
+ "aud": "^2.0.0",
+ "auto-changelog": "^2.4.0",
+ "core-js": "^2.6.12",
+ "eslint": "=8.8.0",
+ "get-own-property-symbols": "^0.9.5",
+ "nyc": "^10.3.2",
+ "safe-publish-latest": "^2.0.0",
+ "tape": "^5.5.2"
+ },
+ "testling": {
+ "files": "test/index.js",
+ "browsers": [
+ "iexplore/6.0..latest",
+ "firefox/3.0..6.0",
+ "firefox/15.0..latest",
+ "firefox/nightly",
+ "chrome/4.0..10.0",
+ "chrome/20.0..latest",
+ "chrome/canary",
+ "opera/10.0..latest",
+ "opera/next",
+ "safari/4.0..latest",
+ "ipad/6.0..latest",
+ "iphone/6.0..latest",
+ "android-browser/4.2"
+ ]
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "auto-changelog": {
+ "output": "CHANGELOG.md",
+ "template": "keepachangelog",
+ "unreleased": false,
+ "commitLimit": false,
+ "backfillLimit": false,
+ "hideCredit": true
+ },
+ "greenkeeper": {
+ "ignore": [
+ "core-js"
+ ]
+ }
+}
diff --git a/node_modules/has-symbols/shams.js b/node_modules/has-symbols/shams.js
new file mode 100644
index 0000000..1285210
--- /dev/null
+++ b/node_modules/has-symbols/shams.js
@@ -0,0 +1,42 @@
+'use strict';
+
+/* eslint complexity: [2, 18], max-statements: [2, 33] */
+module.exports = function hasSymbols() {
+ if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
+ if (typeof Symbol.iterator === 'symbol') { return true; }
+
+ var obj = {};
+ var sym = Symbol('test');
+ var symObj = Object(sym);
+ if (typeof sym === 'string') { return false; }
+
+ if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
+ if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }
+
+ // temp disabled per https://github.com/ljharb/object.assign/issues/17
+ // if (sym instanceof Symbol) { return false; }
+ // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
+ // if (!(symObj instanceof Symbol)) { return false; }
+
+ // if (typeof Symbol.prototype.toString !== 'function') { return false; }
+ // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
+
+ var symVal = 42;
+ obj[sym] = symVal;
+ for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop
+ if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }
+
+ if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }
+
+ var syms = Object.getOwnPropertySymbols(obj);
+ if (syms.length !== 1 || syms[0] !== sym) { return false; }
+
+ if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }
+
+ if (typeof Object.getOwnPropertyDescriptor === 'function') {
+ var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
+ if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
+ }
+
+ return true;
+};
diff --git a/node_modules/has-symbols/test/index.js b/node_modules/has-symbols/test/index.js
new file mode 100644
index 0000000..352129c
--- /dev/null
+++ b/node_modules/has-symbols/test/index.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var test = require('tape');
+var hasSymbols = require('../');
+var runSymbolTests = require('./tests');
+
+test('interface', function (t) {
+ t.equal(typeof hasSymbols, 'function', 'is a function');
+ t.equal(typeof hasSymbols(), 'boolean', 'returns a boolean');
+ t.end();
+});
+
+test('Symbols are supported', { skip: !hasSymbols() }, function (t) {
+ runSymbolTests(t);
+ t.end();
+});
+
+test('Symbols are not supported', { skip: hasSymbols() }, function (t) {
+ t.equal(typeof Symbol, 'undefined', 'global Symbol is undefined');
+ t.equal(typeof Object.getOwnPropertySymbols, 'undefined', 'Object.getOwnPropertySymbols does not exist');
+ t.end();
+});
diff --git a/node_modules/has-symbols/test/shams/core-js.js b/node_modules/has-symbols/test/shams/core-js.js
new file mode 100644
index 0000000..df5365c
--- /dev/null
+++ b/node_modules/has-symbols/test/shams/core-js.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var test = require('tape');
+
+if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') {
+ test('has native Symbol support', function (t) {
+ t.equal(typeof Symbol, 'function');
+ t.equal(typeof Symbol(), 'symbol');
+ t.end();
+ });
+ return;
+}
+
+var hasSymbols = require('../../shams');
+
+test('polyfilled Symbols', function (t) {
+ /* eslint-disable global-require */
+ t.equal(hasSymbols(), false, 'hasSymbols is false before polyfilling');
+ require('core-js/fn/symbol');
+ require('core-js/fn/symbol/to-string-tag');
+
+ require('../tests')(t);
+
+ var hasSymbolsAfter = hasSymbols();
+ t.equal(hasSymbolsAfter, true, 'hasSymbols is true after polyfilling');
+ /* eslint-enable global-require */
+ t.end();
+});
diff --git a/node_modules/has-symbols/test/shams/get-own-property-symbols.js b/node_modules/has-symbols/test/shams/get-own-property-symbols.js
new file mode 100644
index 0000000..9191b24
--- /dev/null
+++ b/node_modules/has-symbols/test/shams/get-own-property-symbols.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var test = require('tape');
+
+if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') {
+ test('has native Symbol support', function (t) {
+ t.equal(typeof Symbol, 'function');
+ t.equal(typeof Symbol(), 'symbol');
+ t.end();
+ });
+ return;
+}
+
+var hasSymbols = require('../../shams');
+
+test('polyfilled Symbols', function (t) {
+ /* eslint-disable global-require */
+ t.equal(hasSymbols(), false, 'hasSymbols is false before polyfilling');
+
+ require('get-own-property-symbols');
+
+ require('../tests')(t);
+
+ var hasSymbolsAfter = hasSymbols();
+ t.equal(hasSymbolsAfter, true, 'hasSymbols is true after polyfilling');
+ /* eslint-enable global-require */
+ t.end();
+});
diff --git a/node_modules/has-symbols/test/tests.js b/node_modules/has-symbols/test/tests.js
new file mode 100644
index 0000000..89edd12
--- /dev/null
+++ b/node_modules/has-symbols/test/tests.js
@@ -0,0 +1,56 @@
+'use strict';
+
+// eslint-disable-next-line consistent-return
+module.exports = function runSymbolTests(t) {
+ t.equal(typeof Symbol, 'function', 'global Symbol is a function');
+
+ if (typeof Symbol !== 'function') { return false; }
+
+ t.notEqual(Symbol(), Symbol(), 'two symbols are not equal');
+
+ /*
+ t.equal(
+ Symbol.prototype.toString.call(Symbol('foo')),
+ Symbol.prototype.toString.call(Symbol('foo')),
+ 'two symbols with the same description stringify the same'
+ );
+ */
+
+ /*
+ var foo = Symbol('foo');
+
+ t.notEqual(
+ String(foo),
+ String(Symbol('bar')),
+ 'two symbols with different descriptions do not stringify the same'
+ );
+ */
+
+ t.equal(typeof Symbol.prototype.toString, 'function', 'Symbol#toString is a function');
+ // t.equal(String(foo), Symbol.prototype.toString.call(foo), 'Symbol#toString equals String of the same symbol');
+
+ t.equal(typeof Object.getOwnPropertySymbols, 'function', 'Object.getOwnPropertySymbols is a function');
+
+ var obj = {};
+ var sym = Symbol('test');
+ var symObj = Object(sym);
+ t.notEqual(typeof sym, 'string', 'Symbol is not a string');
+ t.equal(Object.prototype.toString.call(sym), '[object Symbol]', 'symbol primitive Object#toStrings properly');
+ t.equal(Object.prototype.toString.call(symObj), '[object Symbol]', 'symbol primitive Object#toStrings properly');
+
+ var symVal = 42;
+ obj[sym] = symVal;
+ // eslint-disable-next-line no-restricted-syntax
+ for (sym in obj) { t.fail('symbol property key was found in for..in of object'); }
+
+ t.deepEqual(Object.keys(obj), [], 'no enumerable own keys on symbol-valued object');
+ t.deepEqual(Object.getOwnPropertyNames(obj), [], 'no own names on symbol-valued object');
+ t.deepEqual(Object.getOwnPropertySymbols(obj), [sym], 'one own symbol on symbol-valued object');
+ t.equal(Object.prototype.propertyIsEnumerable.call(obj, sym), true, 'symbol is enumerable');
+ t.deepEqual(Object.getOwnPropertyDescriptor(obj, sym), {
+ configurable: true,
+ enumerable: true,
+ value: 42,
+ writable: true
+ }, 'property descriptor is correct');
+};
diff --git a/node_modules/has-value/LICENSE b/node_modules/has-value/LICENSE
new file mode 100644
index 0000000..d734237
--- /dev/null
+++ b/node_modules/has-value/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+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/node_modules/has-value/README.md b/node_modules/has-value/README.md
new file mode 100644
index 0000000..f9b428c
--- /dev/null
+++ b/node_modules/has-value/README.md
@@ -0,0 +1,149 @@
+# has-value [![NPM version](https://img.shields.io/npm/v/has-value.svg?style=flat)](https://www.npmjs.com/package/has-value) [![NPM monthly downloads](https://img.shields.io/npm/dm/has-value.svg?style=flat)](https://npmjs.org/package/has-value) [![NPM total downloads](https://img.shields.io/npm/dt/has-value.svg?style=flat)](https://npmjs.org/package/has-value) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/has-value.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/has-value)
+
+> Returns true if a value exists, false if empty. Works with deeply nested values using object paths.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save has-value
+```
+
+**Works for:**
+
+* booleans
+* functions
+* numbers
+* strings
+* nulls
+* object
+* arrays
+
+## Usage
+
+Works with property values (supports object-path notation, like `foo.bar`) or a single value:
+
+```js
+var hasValue = require('has-value');
+
+hasValue('foo');
+hasValue({foo: 'bar'}, 'foo');
+hasValue({a: {b: {c: 'foo'}}}, 'a.b.c');
+//=> true
+
+hasValue('');
+hasValue({foo: ''}, 'foo');
+//=> false
+
+hasValue(0);
+hasValue(1);
+hasValue({foo: 0}, 'foo');
+hasValue({foo: 1}, 'foo');
+hasValue({foo: null}, 'foo');
+hasValue({foo: {bar: 'a'}}}, 'foo');
+hasValue({foo: {bar: 'a'}}}, 'foo.bar');
+//=> true
+
+hasValue({foo: {}}}, 'foo');
+hasValue({foo: {bar: {}}}}, 'foo.bar');
+hasValue({foo: undefined}, 'foo');
+//=> false
+
+hasValue([]);
+hasValue([[]]);
+hasValue([[], []]);
+hasValue([undefined]);
+hasValue({foo: []}, 'foo');
+//=> false
+
+hasValue([0]);
+hasValue([null]);
+hasValue(['foo']);
+hasValue({foo: ['a']}, 'foo');
+//=> true
+
+hasValue(function() {})
+hasValue(function(foo) {})
+hasValue({foo: function(foo) {}}, 'foo');
+hasValue({foo: function() {}}, 'foo');
+//=> true
+
+hasValue(true);
+hasValue(false);
+hasValue({foo: true}, 'foo');
+hasValue({foo: false}, 'foo');
+//=> true
+```
+
+## isEmpty
+
+To do the opposite and test for empty values, do:
+
+```js
+function isEmpty(o) {
+ return !hasValue.apply(hasValue, arguments);
+}
+```
+
+## Release history
+
+### v1.0.0
+
+* `zero` always returns true
+* `array` now recurses, so that an array of empty arrays will return `false`
+* `null` now returns true
+
+## About
+
+### Related projects
+
+* [define-property](https://www.npmjs.com/package/define-property): Define a non-enumerable property on an object. | [homepage](https://github.com/jonschlinkert/define-property "Define a non-enumerable property on an object.")
+* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.")
+* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.")
+* [unset-value](https://www.npmjs.com/package/unset-value): Delete nested properties from an object using dot notation. | [homepage](https://github.com/jonschlinkert/unset-value "Delete nested properties from an object using dot notation.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 17 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [rmharrison](https://github.com/rmharrison) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 19, 2017._
\ No newline at end of file
diff --git a/node_modules/has-value/index.js b/node_modules/has-value/index.js
new file mode 100644
index 0000000..c237494
--- /dev/null
+++ b/node_modules/has-value/index.js
@@ -0,0 +1,16 @@
+/*!
+ * has-value
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var isObject = require('isobject');
+var hasValues = require('has-values');
+var get = require('get-value');
+
+module.exports = function(val, prop) {
+ return hasValues(isObject(val) && prop ? get(val, prop) : val);
+};
diff --git a/node_modules/has-value/package.json b/node_modules/has-value/package.json
new file mode 100644
index 0000000..e65d438
--- /dev/null
+++ b/node_modules/has-value/package.json
@@ -0,0 +1,83 @@
+{
+ "name": "has-value",
+ "description": "Returns true if a value exists, false if empty. Works with deeply nested values using object paths.",
+ "version": "1.0.0",
+ "homepage": "https://github.com/jonschlinkert/has-value",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Ryan M Harrison (https://linkedin.com/in/harrisonrm)"
+ ],
+ "repository": "jonschlinkert/has-value",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/has-value/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^0.1.12",
+ "mocha": "^3.4.1"
+ },
+ "keywords": [
+ "array",
+ "boolean",
+ "empty",
+ "find",
+ "function",
+ "has",
+ "hasOwn",
+ "javascript",
+ "js",
+ "key",
+ "keys",
+ "node.js",
+ "null",
+ "number",
+ "object",
+ "properties",
+ "property",
+ "string",
+ "type",
+ "util",
+ "utilities",
+ "utility",
+ "value"
+ ],
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "define-property",
+ "get-value",
+ "set-value",
+ "unset-value"
+ ]
+ },
+ "reflinks": [],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/has-values/LICENSE b/node_modules/has-values/LICENSE
new file mode 100644
index 0000000..d734237
--- /dev/null
+++ b/node_modules/has-values/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+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/node_modules/has-values/README.md b/node_modules/has-values/README.md
new file mode 100644
index 0000000..98d4367
--- /dev/null
+++ b/node_modules/has-values/README.md
@@ -0,0 +1,129 @@
+# has-values [![NPM version](https://img.shields.io/npm/v/has-values.svg?style=flat)](https://www.npmjs.com/package/has-values) [![NPM monthly downloads](https://img.shields.io/npm/dm/has-values.svg?style=flat)](https://npmjs.org/package/has-values) [![NPM total downloads](https://img.shields.io/npm/dt/has-values.svg?style=flat)](https://npmjs.org/package/has-values) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/has-values.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/has-values)
+
+> Returns true if any values exist, false if empty. Works for booleans, functions, numbers, strings, nulls, objects and arrays.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save has-values
+```
+
+## Usage
+
+```js
+var hasValue = require('has-values');
+
+hasValue('a');
+//=> true
+
+hasValue('');
+//=> false
+
+hasValue(1);
+//=> true
+
+hasValue(0);
+//=> false
+
+hasValue({a: 'a'}});
+//=> true
+
+hasValue({});
+hasValue({foo: undefined});
+//=> false
+
+hasValue({foo: null});
+//=> true
+
+hasValue(['a']);
+//=> true
+
+hasValue([]);
+hasValue([[], []]);
+hasValue([[[]]]);
+//=> false
+
+hasValue(['foo']);
+hasValue([0]);
+//=> true
+
+hasValue(function(foo) {});
+//=> true
+
+hasValue(function() {});
+//=> true
+
+hasValue(true);
+//=> true
+
+hasValue(false);
+//=> true
+```
+
+## isEmpty
+
+To test for empty values, do:
+
+```js
+function isEmpty(o, isZero) {
+ return !hasValue(o, isZero);
+}
+```
+
+## Release history
+
+### v1.0.0
+
+* `zero` always returns true
+* `array` now recurses, so that an array of empty arrays will return `false`
+* `null` now returns true
+
+## About
+
+### Related projects
+
+* [has-value](https://www.npmjs.com/package/has-value): Returns true if a value exists, false if empty. Works with deeply nested values using… [more](https://github.com/jonschlinkert/has-value) | [homepage](https://github.com/jonschlinkert/has-value "Returns true if a value exists, false if empty. Works with deeply nested values using object paths.")
+* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.")
+* [is-plain-object](https://www.npmjs.com/package/is-plain-object): Returns true if an object was created by the `Object` constructor. | [homepage](https://github.com/jonschlinkert/is-plain-object "Returns true if an object was created by the `Object` constructor.")
+* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject "Returns true if the value is an object and not an array or null.")
+* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 19, 2017._
\ No newline at end of file
diff --git a/node_modules/has-values/index.js b/node_modules/has-values/index.js
new file mode 100644
index 0000000..9bebb9f
--- /dev/null
+++ b/node_modules/has-values/index.js
@@ -0,0 +1,60 @@
+/*!
+ * has-values
+ *
+ * Copyright (c) 2014-2015, 2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+
+'use strict';
+
+var typeOf = require('kind-of');
+var isNumber = require('is-number');
+
+module.exports = function hasValue(val) {
+ // is-number checks for NaN and other edge cases
+ if (isNumber(val)) {
+ return true;
+ }
+
+ switch (typeOf(val)) {
+ case 'null':
+ case 'boolean':
+ case 'function':
+ return true;
+ case 'string':
+ case 'arguments':
+ return val.length !== 0;
+ case 'error':
+ return val.message !== '';
+ case 'array':
+ var len = val.length;
+ if (len === 0) {
+ return false;
+ }
+ for (var i = 0; i < len; i++) {
+ if (hasValue(val[i])) {
+ return true;
+ }
+ }
+ return false;
+ case 'file':
+ case 'map':
+ case 'set':
+ return val.size !== 0;
+ case 'object':
+ var keys = Object.keys(val);
+ if (keys.length === 0) {
+ return false;
+ }
+ for (var i = 0; i < keys.length; i++) {
+ var key = keys[i];
+ if (hasValue(val[key])) {
+ return true;
+ }
+ }
+ return false;
+ default: {
+ return false;
+ }
+ }
+};
diff --git a/node_modules/has-values/node_modules/kind-of/LICENSE b/node_modules/has-values/node_modules/kind-of/LICENSE
new file mode 100644
index 0000000..d734237
--- /dev/null
+++ b/node_modules/has-values/node_modules/kind-of/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+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/node_modules/has-values/node_modules/kind-of/README.md b/node_modules/has-values/node_modules/kind-of/README.md
new file mode 100644
index 0000000..83469b0
--- /dev/null
+++ b/node_modules/has-values/node_modules/kind-of/README.md
@@ -0,0 +1,267 @@
+# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of)
+
+> Get the native type of a value.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save kind-of
+```
+
+Install with [bower](https://bower.io/)
+
+```sh
+$ bower install kind-of --save
+```
+
+## Usage
+
+> es5, browser and es6 ready
+
+```js
+var kindOf = require('kind-of');
+
+kindOf(undefined);
+//=> 'undefined'
+
+kindOf(null);
+//=> 'null'
+
+kindOf(true);
+//=> 'boolean'
+
+kindOf(false);
+//=> 'boolean'
+
+kindOf(new Boolean(true));
+//=> 'boolean'
+
+kindOf(new Buffer(''));
+//=> 'buffer'
+
+kindOf(42);
+//=> 'number'
+
+kindOf(new Number(42));
+//=> 'number'
+
+kindOf('str');
+//=> 'string'
+
+kindOf(new String('str'));
+//=> 'string'
+
+kindOf(arguments);
+//=> 'arguments'
+
+kindOf({});
+//=> 'object'
+
+kindOf(Object.create(null));
+//=> 'object'
+
+kindOf(new Test());
+//=> 'object'
+
+kindOf(new Date());
+//=> 'date'
+
+kindOf([]);
+//=> 'array'
+
+kindOf([1, 2, 3]);
+//=> 'array'
+
+kindOf(new Array());
+//=> 'array'
+
+kindOf(/foo/);
+//=> 'regexp'
+
+kindOf(new RegExp('foo'));
+//=> 'regexp'
+
+kindOf(function () {});
+//=> 'function'
+
+kindOf(function * () {});
+//=> 'function'
+
+kindOf(new Function());
+//=> 'function'
+
+kindOf(new Map());
+//=> 'map'
+
+kindOf(new WeakMap());
+//=> 'weakmap'
+
+kindOf(new Set());
+//=> 'set'
+
+kindOf(new WeakSet());
+//=> 'weakset'
+
+kindOf(Symbol('str'));
+//=> 'symbol'
+
+kindOf(new Int8Array());
+//=> 'int8array'
+
+kindOf(new Uint8Array());
+//=> 'uint8array'
+
+kindOf(new Uint8ClampedArray());
+//=> 'uint8clampedarray'
+
+kindOf(new Int16Array());
+//=> 'int16array'
+
+kindOf(new Uint16Array());
+//=> 'uint16array'
+
+kindOf(new Int32Array());
+//=> 'int32array'
+
+kindOf(new Uint32Array());
+//=> 'uint32array'
+
+kindOf(new Float32Array());
+//=> 'float32array'
+
+kindOf(new Float64Array());
+//=> 'float64array'
+```
+
+## Benchmarks
+
+Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of).
+Note that performaces is slower for es6 features `Map`, `WeakMap`, `Set` and `WeakSet`.
+
+```bash
+#1: array
+ current x 23,329,397 ops/sec ±0.82% (94 runs sampled)
+ lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled)
+ lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled)
+
+#2: boolean
+ current x 27,197,115 ops/sec ±0.85% (94 runs sampled)
+ lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled)
+ lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled)
+
+#3: date
+ current x 20,190,117 ops/sec ±0.86% (92 runs sampled)
+ lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled)
+ lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled)
+
+#4: function
+ current x 23,855,460 ops/sec ±0.60% (97 runs sampled)
+ lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled)
+ lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled)
+
+#5: null
+ current x 27,061,047 ops/sec ±0.97% (96 runs sampled)
+ lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled)
+ lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled)
+
+#6: number
+ current x 25,075,682 ops/sec ±0.53% (99 runs sampled)
+ lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled)
+ lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled)
+
+#7: object
+ current x 3,348,980 ops/sec ±0.49% (99 runs sampled)
+ lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled)
+ lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled)
+
+#8: regex
+ current x 21,284,827 ops/sec ±0.72% (96 runs sampled)
+ lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled)
+ lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled)
+
+#9: string
+ current x 25,379,234 ops/sec ±0.58% (96 runs sampled)
+ lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled)
+ lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled)
+
+#10: undef
+ current x 27,459,221 ops/sec ±1.01% (93 runs sampled)
+ lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled)
+ lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled)
+
+```
+
+## Release history
+
+### v4.0.0
+
+**Added**
+
+* `promise` support
+
+## Optimizations
+
+In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library:
+
+1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot.
+2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it.
+3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'`
+
+## About
+
+### Related projects
+
+* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet")
+* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.")
+* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 64 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [miguelmota](https://github.com/miguelmota) |
+| 1 | [dtothefp](https://github.com/dtothefp) |
+| 1 | [ksheedlo](https://github.com/ksheedlo) |
+| 1 | [pdehaan](https://github.com/pdehaan) |
+| 1 | [laggingreflex](https://github.com/laggingreflex) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 19, 2017._
\ No newline at end of file
diff --git a/node_modules/has-values/node_modules/kind-of/index.js b/node_modules/has-values/node_modules/kind-of/index.js
new file mode 100644
index 0000000..4c0233b
--- /dev/null
+++ b/node_modules/has-values/node_modules/kind-of/index.js
@@ -0,0 +1,119 @@
+var isBuffer = require('is-buffer');
+var toString = Object.prototype.toString;
+
+/**
+ * Get the native `typeof` a value.
+ *
+ * @param {*} `val`
+ * @return {*} Native javascript type
+ */
+
+module.exports = function kindOf(val) {
+ // primitivies
+ if (typeof val === 'undefined') {
+ return 'undefined';
+ }
+ if (val === null) {
+ return 'null';
+ }
+ if (val === true || val === false || val instanceof Boolean) {
+ return 'boolean';
+ }
+ if (typeof val === 'string' || val instanceof String) {
+ return 'string';
+ }
+ if (typeof val === 'number' || val instanceof Number) {
+ return 'number';
+ }
+
+ // functions
+ if (typeof val === 'function' || val instanceof Function) {
+ return 'function';
+ }
+
+ // array
+ if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {
+ return 'array';
+ }
+
+ // check for instances of RegExp and Date before calling `toString`
+ if (val instanceof RegExp) {
+ return 'regexp';
+ }
+ if (val instanceof Date) {
+ return 'date';
+ }
+
+ // other objects
+ var type = toString.call(val);
+
+ if (type === '[object RegExp]') {
+ return 'regexp';
+ }
+ if (type === '[object Date]') {
+ return 'date';
+ }
+ if (type === '[object Arguments]') {
+ return 'arguments';
+ }
+ if (type === '[object Error]') {
+ return 'error';
+ }
+ if (type === '[object Promise]') {
+ return 'promise';
+ }
+
+ // buffer
+ if (isBuffer(val)) {
+ return 'buffer';
+ }
+
+ // es6: Map, WeakMap, Set, WeakSet
+ if (type === '[object Set]') {
+ return 'set';
+ }
+ if (type === '[object WeakSet]') {
+ return 'weakset';
+ }
+ if (type === '[object Map]') {
+ return 'map';
+ }
+ if (type === '[object WeakMap]') {
+ return 'weakmap';
+ }
+ if (type === '[object Symbol]') {
+ return 'symbol';
+ }
+
+ // typed arrays
+ if (type === '[object Int8Array]') {
+ return 'int8array';
+ }
+ if (type === '[object Uint8Array]') {
+ return 'uint8array';
+ }
+ if (type === '[object Uint8ClampedArray]') {
+ return 'uint8clampedarray';
+ }
+ if (type === '[object Int16Array]') {
+ return 'int16array';
+ }
+ if (type === '[object Uint16Array]') {
+ return 'uint16array';
+ }
+ if (type === '[object Int32Array]') {
+ return 'int32array';
+ }
+ if (type === '[object Uint32Array]') {
+ return 'uint32array';
+ }
+ if (type === '[object Float32Array]') {
+ return 'float32array';
+ }
+ if (type === '[object Float64Array]') {
+ return 'float64array';
+ }
+
+ // must be a plain object
+ return 'object';
+};
diff --git a/node_modules/has-values/node_modules/kind-of/package.json b/node_modules/has-values/node_modules/kind-of/package.json
new file mode 100644
index 0000000..222afc0
--- /dev/null
+++ b/node_modules/has-values/node_modules/kind-of/package.json
@@ -0,0 +1,90 @@
+{
+ "name": "kind-of",
+ "description": "Get the native type of a value.",
+ "version": "4.0.0",
+ "homepage": "https://github.com/jonschlinkert/kind-of",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "contributors": [
+ "David Fox-Powell (https://dtothefp.github.io/me)",
+ "Jon Schlinkert (http://twitter.com/jonschlinkert)",
+ "Ken Sheedlo (kensheedlo.com)",
+ "laggingreflex (https://github.com/laggingreflex)",
+ "Miguel Mota (https://miguelmota.com)",
+ "Peter deHaan (http://about.me/peterdehaan)"
+ ],
+ "repository": "jonschlinkert/kind-of",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/kind-of/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha",
+ "prepublish": "browserify -o browser.js -e index.js -s index --bare"
+ },
+ "dependencies": {
+ "is-buffer": "^1.1.5"
+ },
+ "devDependencies": {
+ "ansi-bold": "^0.1.1",
+ "benchmarked": "^1.1.1",
+ "browserify": "^14.3.0",
+ "glob": "^7.1.1",
+ "gulp-format-md": "^0.1.12",
+ "mocha": "^3.4.1",
+ "type-of": "^2.0.1",
+ "typeof": "^1.0.0"
+ },
+ "keywords": [
+ "arguments",
+ "array",
+ "boolean",
+ "check",
+ "date",
+ "function",
+ "is",
+ "is-type",
+ "is-type-of",
+ "kind",
+ "kind-of",
+ "number",
+ "object",
+ "of",
+ "regexp",
+ "string",
+ "test",
+ "type",
+ "type-of",
+ "typeof",
+ "types"
+ ],
+ "verb": {
+ "related": {
+ "list": [
+ "is-glob",
+ "is-number",
+ "is-primitive"
+ ]
+ },
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ },
+ "reflinks": [
+ "verb"
+ ]
+ }
+}
diff --git a/node_modules/has-values/package.json b/node_modules/has-values/package.json
new file mode 100644
index 0000000..bdd841d
--- /dev/null
+++ b/node_modules/has-values/package.json
@@ -0,0 +1,82 @@
+{
+ "name": "has-values",
+ "description": "Returns true if any values exist, false if empty. Works for booleans, functions, numbers, strings, nulls, objects and arrays. ",
+ "version": "1.0.0",
+ "homepage": "https://github.com/jonschlinkert/has-values",
+ "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
+ "repository": "jonschlinkert/has-values",
+ "bugs": {
+ "url": "https://github.com/jonschlinkert/has-values/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "dependencies": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^0.1.12",
+ "mocha": "^3.4.1"
+ },
+ "keywords": [
+ "array",
+ "boolean",
+ "empty",
+ "find",
+ "function",
+ "has",
+ "hasOwn",
+ "javascript",
+ "js",
+ "key",
+ "keys",
+ "node.js",
+ "null",
+ "number",
+ "object",
+ "properties",
+ "property",
+ "string",
+ "type",
+ "util",
+ "utilities",
+ "utility",
+ "value",
+ "values"
+ ],
+ "verb": {
+ "run": true,
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "related": {
+ "list": [
+ "has-value",
+ "kind-of",
+ "is-number",
+ "is-plain-object",
+ "isobject"
+ ]
+ },
+ "reflinks": [
+ "verb"
+ ],
+ "lint": {
+ "reflinks": true
+ }
+ }
+}
diff --git a/node_modules/has/LICENSE-MIT b/node_modules/has/LICENSE-MIT
new file mode 100644
index 0000000..ae7014d
--- /dev/null
+++ b/node_modules/has/LICENSE-MIT
@@ -0,0 +1,22 @@
+Copyright (c) 2013 Thiago de Arruda
+
+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/node_modules/has/README.md b/node_modules/has/README.md
new file mode 100644
index 0000000..635e3a4
--- /dev/null
+++ b/node_modules/has/README.md
@@ -0,0 +1,18 @@
+# has
+
+> Object.prototype.hasOwnProperty.call shortcut
+
+## Installation
+
+```sh
+npm install --save has
+```
+
+## Usage
+
+```js
+var has = require('has');
+
+has({}, 'hasOwnProperty'); // false
+has(Object.prototype, 'hasOwnProperty'); // true
+```
diff --git a/node_modules/has/package.json b/node_modules/has/package.json
new file mode 100644
index 0000000..7c4592f
--- /dev/null
+++ b/node_modules/has/package.json
@@ -0,0 +1,48 @@
+{
+ "name": "has",
+ "description": "Object.prototype.hasOwnProperty.call shortcut",
+ "version": "1.0.3",
+ "homepage": "https://github.com/tarruda/has",
+ "author": {
+ "name": "Thiago de Arruda",
+ "email": "tpadilha84@gmail.com"
+ },
+ "contributors": [
+ {
+ "name": "Jordan Harband",
+ "email": "ljharb@gmail.com",
+ "url": "http://ljharb.codes"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/tarruda/has.git"
+ },
+ "bugs": {
+ "url": "https://github.com/tarruda/has/issues"
+ },
+ "license": "MIT",
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "https://github.com/tarruda/has/blob/master/LICENSE-MIT"
+ }
+ ],
+ "main": "./src",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "devDependencies": {
+ "@ljharb/eslint-config": "^12.2.1",
+ "eslint": "^4.19.1",
+ "tape": "^4.9.0"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ },
+ "scripts": {
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "test": "tape test"
+ }
+}
diff --git a/node_modules/has/src/index.js b/node_modules/has/src/index.js
new file mode 100644
index 0000000..dd92dd9
--- /dev/null
+++ b/node_modules/has/src/index.js
@@ -0,0 +1,5 @@
+'use strict';
+
+var bind = require('function-bind');
+
+module.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);
diff --git a/node_modules/has/test/index.js b/node_modules/has/test/index.js
new file mode 100644
index 0000000..43d480b
--- /dev/null
+++ b/node_modules/has/test/index.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var test = require('tape');
+var has = require('../');
+
+test('has', function (t) {
+ t.equal(has({}, 'hasOwnProperty'), false, 'object literal does not have own property "hasOwnProperty"');
+ t.equal(has(Object.prototype, 'hasOwnProperty'), true, 'Object.prototype has own property "hasOwnProperty"');
+ t.end();
+});
diff --git a/node_modules/homedir-polyfill/LICENSE b/node_modules/homedir-polyfill/LICENSE
new file mode 100644
index 0000000..f92fdcf
--- /dev/null
+++ b/node_modules/homedir-polyfill/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Brian Woodward
+
+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/node_modules/homedir-polyfill/README.md b/node_modules/homedir-polyfill/README.md
new file mode 100644
index 0000000..8770050
--- /dev/null
+++ b/node_modules/homedir-polyfill/README.md
@@ -0,0 +1,96 @@
+# homedir-polyfill [![NPM version](https://img.shields.io/npm/v/homedir-polyfill.svg?style=flat)](https://www.npmjs.com/package/homedir-polyfill) [![NPM monthly downloads](https://img.shields.io/npm/dm/homedir-polyfill.svg?style=flat)](https://npmjs.org/package/homedir-polyfill) [![NPM total downloads](https://img.shields.io/npm/dt/homedir-polyfill.svg?style=flat)](https://npmjs.org/package/homedir-polyfill) [![Linux Build Status](https://img.shields.io/travis/doowb/homedir-polyfill.svg?style=flat&label=Travis)](https://travis-ci.org/doowb/homedir-polyfill) [![Windows Build Status](https://img.shields.io/appveyor/ci/doowb/homedir-polyfill.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/doowb/homedir-polyfill)
+
+> Node.js os.homedir polyfill for older versions of node.js.
+
+Please consider following this project's author, [Brian Woodward](https://github.com/doowb), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save homedir-polyfill
+```
+
+## Usage
+
+```js
+var homedir = require('homedir-polyfill');
+console.log(homedir());
+//=> /Users/doowb
+```
+
+## Reasoning
+
+This library is a polyfill for the [node.js os.homedir](https://nodejs.org/api/os.html#os_os_homedir) method found in modern versions of node.js.
+
+This implementation tries to follow the implementation found in `libuv` by finding the current user using the `process.geteuid()` method and the `/etc/passwd` file. This should usually work in a linux environment, but will also fallback to looking at user specific environment variables to build the user's home directory if neccessary.
+
+Since `/etc/passwd` is not available on windows platforms, this implementation will use environment variables to find the home directory.
+
+In modern versions of node.js, [os.homedir](https://nodejs.org/api/os.html#os_os_homedir) is used.
+
+## About
+
+
+Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+Please read the [contributing guide](contributing.md) for advice on opening issues, pull requests, and coding standards.
+
+
+
+
+Running Tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+
+
+
+Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+
+
+### Related projects
+
+You might also be interested in these projects:
+
+[parse-passwd](https://www.npmjs.com/package/parse-passwd): Parse a passwd file into a list of users. | [homepage](https://github.com/doowb/parse-passwd "Parse a passwd file into a list of users.")
+
+### Contributors
+
+| **Commits** | **Contributor** |
+| --- | --- |
+| 19 | [doowb](https://github.com/doowb) |
+| 2 | [martinheidegger](https://github.com/martinheidegger) |
+
+### Author
+
+**Brian Woodward**
+
+* [GitHub Profile](https://github.com/doowb)
+* [Twitter Profile](https://twitter.com/doowb)
+* [LinkedIn Profile](https://linkedin.com/in/woodwardbrian)
+
+### License
+
+Copyright © 2016 - 2019, [Brian Woodward](https://github.com/doowb).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on February 21, 2019._
diff --git a/node_modules/homedir-polyfill/index.js b/node_modules/homedir-polyfill/index.js
new file mode 100644
index 0000000..298168e
--- /dev/null
+++ b/node_modules/homedir-polyfill/index.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var os = require('os');
+if (typeof os.homedir !== 'undefined') {
+ module.exports = os.homedir;
+} else {
+ module.exports = require('./polyfill.js');
+}
+
diff --git a/node_modules/homedir-polyfill/package.json b/node_modules/homedir-polyfill/package.json
new file mode 100644
index 0000000..ab5bc71
--- /dev/null
+++ b/node_modules/homedir-polyfill/package.json
@@ -0,0 +1,62 @@
+{
+ "name": "homedir-polyfill",
+ "description": "Node.js os.homedir polyfill for older versions of node.js.",
+ "version": "1.0.3",
+ "homepage": "https://github.com/doowb/homedir-polyfill",
+ "author": "Brian Woodward (https://github.com/doowb)",
+ "repository": "doowb/homedir-polyfill",
+ "bugs": {
+ "url": "https://github.com/doowb/homedir-polyfill/issues"
+ },
+ "license": "MIT",
+ "files": [
+ "index.js",
+ "polyfill.js",
+ "LICENSE"
+ ],
+ "main": "index.js",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "devDependencies": {
+ "gulp-format-md": "^0.1.11",
+ "mocha": "^3.1.2"
+ },
+ "keywords": [
+ "home",
+ "homedir",
+ "homedirectory",
+ "os",
+ "os-homedir",
+ "polyfill",
+ "userhome"
+ ],
+ "verb": {
+ "toc": false,
+ "layout": "default",
+ "tasks": [
+ "readme"
+ ],
+ "plugins": [
+ "gulp-format-md"
+ ],
+ "lint": {
+ "reflinks": true
+ },
+ "related": {
+ "list": [
+ "parse-passwd"
+ ]
+ },
+ "reflinks": [
+ "verb",
+ "verb-generate-readme"
+ ]
+ },
+ "dependencies": {
+ "parse-passwd": "^1.0.0"
+ }
+}
diff --git a/node_modules/homedir-polyfill/polyfill.js b/node_modules/homedir-polyfill/polyfill.js
new file mode 100644
index 0000000..83aee38
--- /dev/null
+++ b/node_modules/homedir-polyfill/polyfill.js
@@ -0,0 +1,81 @@
+'use strict';
+
+var fs = require('fs');
+var parse = require('parse-passwd');
+
+function homedir() {
+ // The following logic is from looking at logic used in the different platform
+ // versions of the uv_os_homedir function found in https://github.com/libuv/libuv
+ // This is the function used in modern versions of node.js
+
+ if (process.platform === 'win32') {
+ // check the USERPROFILE first
+ if (process.env.USERPROFILE) {
+ return process.env.USERPROFILE;
+ }
+
+ // check HOMEDRIVE and HOMEPATH
+ if (process.env.HOMEDRIVE && process.env.HOMEPATH) {
+ return process.env.HOMEDRIVE + process.env.HOMEPATH;
+ }
+
+ // fallback to HOME
+ if (process.env.HOME) {
+ return process.env.HOME;
+ }
+
+ return null;
+ }
+
+ // check HOME environment variable first
+ if (process.env.HOME) {
+ return process.env.HOME;
+ }
+
+ // on linux platforms (including OSX) find the current user and get their homedir from the /etc/passwd file
+ var passwd = tryReadFileSync('/etc/passwd');
+ var home = find(parse(passwd), getuid());
+ if (home) {
+ return home;
+ }
+
+ // fallback to using user environment variables
+ var user = process.env.LOGNAME || process.env.USER || process.env.LNAME || process.env.USERNAME;
+
+ if (!user) {
+ return null;
+ }
+
+ if (process.platform === 'darwin') {
+ return '/Users/' + user;
+ }
+
+ return '/home/' + user;
+}
+
+function find(arr, uid) {
+ var len = arr.length;
+ for (var i = 0; i < len; i++) {
+ if (+arr[i].uid === uid) {
+ return arr[i].homedir;
+ }
+ }
+}
+
+function getuid() {
+ if (typeof process.geteuid === 'function') {
+ return process.geteuid();
+ }
+ return process.getuid();
+}
+
+function tryReadFileSync(fp) {
+ try {
+ return fs.readFileSync(fp, 'utf8');
+ } catch (err) {
+ return '';
+ }
+}
+
+module.exports = homedir;
+
diff --git a/node_modules/hosted-git-info/CHANGELOG.md b/node_modules/hosted-git-info/CHANGELOG.md
new file mode 100644
index 0000000..6987fb4
--- /dev/null
+++ b/node_modules/hosted-git-info/CHANGELOG.md
@@ -0,0 +1,151 @@
+# Change Log
+
+All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+
+
+## [2.8.9](https://github.com/npm/hosted-git-info/compare/v2.8.8...v2.8.9) (2021-04-07)
+
+
+### Bug Fixes
+
+* backport regex fix from [#76](https://github.com/npm/hosted-git-info/issues/76) ([29adfe5](https://github.com/npm/hosted-git-info/commit/29adfe5)), closes [#84](https://github.com/npm/hosted-git-info/issues/84)
+
+
+
+
+## [2.8.8](https://github.com/npm/hosted-git-info/compare/v2.8.7...v2.8.8) (2020-02-29)
+
+
+### Bug Fixes
+
+* [#61](https://github.com/npm/hosted-git-info/issues/61) & [#65](https://github.com/npm/hosted-git-info/issues/65) addressing issues w/ url.URL implmentation which regressed node 6 support ([5038b18](https://github.com/npm/hosted-git-info/commit/5038b18)), closes [#66](https://github.com/npm/hosted-git-info/issues/66)
+
+
+
+
+## [2.8.7](https://github.com/npm/hosted-git-info/compare/v2.8.6...v2.8.7) (2020-02-26)
+
+
+### Bug Fixes
+
+* Do not attempt to use url.URL when unavailable ([2d0bb66](https://github.com/npm/hosted-git-info/commit/2d0bb66)), closes [#61](https://github.com/npm/hosted-git-info/issues/61) [#62](https://github.com/npm/hosted-git-info/issues/62)
+* Do not pass scp-style URLs to the WhatWG url.URL ([f2cdfcf](https://github.com/npm/hosted-git-info/commit/f2cdfcf)), closes [#60](https://github.com/npm/hosted-git-info/issues/60)
+
+
+
+
+## [2.8.6](https://github.com/npm/hosted-git-info/compare/v2.8.5...v2.8.6) (2020-02-25)
+
+
+
+
+## [2.8.5](https://github.com/npm/hosted-git-info/compare/v2.8.4...v2.8.5) (2019-10-07)
+
+
+### Bug Fixes
+
+* updated pathmatch for gitlab ([e8325b5](https://github.com/npm/hosted-git-info/commit/e8325b5)), closes [#51](https://github.com/npm/hosted-git-info/issues/51)
+* updated pathmatch for gitlab ([ffe056f](https://github.com/npm/hosted-git-info/commit/ffe056f))
+
+
+
+
+## [2.8.4](https://github.com/npm/hosted-git-info/compare/v2.8.3...v2.8.4) (2019-08-12)
+
+
+
+
+## [2.8.3](https://github.com/npm/hosted-git-info/compare/v2.8.2...v2.8.3) (2019-08-12)
+
+
+
+
+## [2.8.2](https://github.com/npm/hosted-git-info/compare/v2.8.1...v2.8.2) (2019-08-05)
+
+
+### Bug Fixes
+
+* http protocol use sshurl by default ([3b1d629](https://github.com/npm/hosted-git-info/commit/3b1d629)), closes [#48](https://github.com/npm/hosted-git-info/issues/48)
+
+
+
+
+## [2.8.1](https://github.com/npm/hosted-git-info/compare/v2.8.0...v2.8.1) (2019-08-05)
+
+
+### Bug Fixes
+
+* ignore noCommittish on tarball url generation ([5d4a8d7](https://github.com/npm/hosted-git-info/commit/5d4a8d7))
+* use gist tarball url that works for anonymous gists ([1692435](https://github.com/npm/hosted-git-info/commit/1692435))
+
+
+
+
+# [2.8.0](https://github.com/npm/hosted-git-info/compare/v2.7.1...v2.8.0) (2019-08-05)
+
+
+### Bug Fixes
+
+* Allow slashes in gitlab project section ([bbcf7b2](https://github.com/npm/hosted-git-info/commit/bbcf7b2)), closes [#46](https://github.com/npm/hosted-git-info/issues/46) [#43](https://github.com/npm/hosted-git-info/issues/43)
+* **git-host:** disallow URI-encoded slash (%2F) in `path` ([3776fa5](https://github.com/npm/hosted-git-info/commit/3776fa5)), closes [#44](https://github.com/npm/hosted-git-info/issues/44)
+* **gitlab:** Do not URL encode slashes in project name for GitLab https URL ([cbf04f9](https://github.com/npm/hosted-git-info/commit/cbf04f9)), closes [#47](https://github.com/npm/hosted-git-info/issues/47)
+* do not allow invalid gist urls ([d5cf830](https://github.com/npm/hosted-git-info/commit/d5cf830))
+* **cache:** Switch to lru-cache to save ourselves from unlimited memory consumption ([e518222](https://github.com/npm/hosted-git-info/commit/e518222)), closes [#38](https://github.com/npm/hosted-git-info/issues/38)
+
+
+### Features
+
+* give these objects a name ([60abaea](https://github.com/npm/hosted-git-info/commit/60abaea))
+
+
+
+
+## [2.7.1](https://github.com/npm/hosted-git-info/compare/v2.7.0...v2.7.1) (2018-07-07)
+
+
+### Bug Fixes
+
+* **index:** Guard against non-string types ([5bc580d](https://github.com/npm/hosted-git-info/commit/5bc580d))
+* **parse:** Crash on strings that parse to having no host ([c931482](https://github.com/npm/hosted-git-info/commit/c931482)), closes [#35](https://github.com/npm/hosted-git-info/issues/35)
+
+
+
+
+# [2.7.0](https://github.com/npm/hosted-git-info/compare/v2.6.1...v2.7.0) (2018-07-06)
+
+
+### Bug Fixes
+
+* **github tarball:** update github tarballtemplate ([6efd582](https://github.com/npm/hosted-git-info/commit/6efd582)), closes [#34](https://github.com/npm/hosted-git-info/issues/34)
+* **gitlab docs:** switched to lowercase anchors for readmes ([701bcd1](https://github.com/npm/hosted-git-info/commit/701bcd1))
+
+
+### Features
+
+* **all:** Support www. prefixes on hostnames ([3349575](https://github.com/npm/hosted-git-info/commit/3349575)), closes [#32](https://github.com/npm/hosted-git-info/issues/32)
+
+
+
+
+## [2.6.1](https://github.com/npm/hosted-git-info/compare/v2.6.0...v2.6.1) (2018-06-25)
+
+### Bug Fixes
+
+* **Revert:** "compat: remove Object.assign fallback ([#25](https://github.com/npm/hosted-git-info/issues/25))" ([cce5a62](https://github.com/npm/hosted-git-info/commit/cce5a62))
+* **Revert:** "git-host: fix forgotten extend()" ([a815ec9](https://github.com/npm/hosted-git-info/commit/a815ec9))
+
+
+
+
+# [2.6.0](https://github.com/npm/hosted-git-info/compare/v2.5.0...v2.6.0) (2018-03-07)
+
+
+### Bug Fixes
+
+* **compat:** remove Object.assign fallback ([#25](https://github.com/npm/hosted-git-info/issues/25)) ([627ab55](https://github.com/npm/hosted-git-info/commit/627ab55))
+* **git-host:** fix forgotten extend() ([eba1f7b](https://github.com/npm/hosted-git-info/commit/eba1f7b))
+
+
+### Features
+
+* **browse:** fragment support for browse() ([#28](https://github.com/npm/hosted-git-info/issues/28)) ([cd5e5bb](https://github.com/npm/hosted-git-info/commit/cd5e5bb))
diff --git a/node_modules/hosted-git-info/LICENSE b/node_modules/hosted-git-info/LICENSE
new file mode 100644
index 0000000..4505576
--- /dev/null
+++ b/node_modules/hosted-git-info/LICENSE
@@ -0,0 +1,13 @@
+Copyright (c) 2015, Rebecca Turner
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/node_modules/hosted-git-info/README.md b/node_modules/hosted-git-info/README.md
new file mode 100644
index 0000000..7b723f6
--- /dev/null
+++ b/node_modules/hosted-git-info/README.md
@@ -0,0 +1,133 @@
+# hosted-git-info
+
+This will let you identify and transform various git hosts URLs between
+protocols. It also can tell you what the URL is for the raw path for
+particular file for direct access without git.
+
+## Example
+
+```javascript
+var hostedGitInfo = require("hosted-git-info")
+var info = hostedGitInfo.fromUrl("git@github.com:npm/hosted-git-info.git", opts)
+/* info looks like:
+{
+ type: "github",
+ domain: "github.com",
+ user: "npm",
+ project: "hosted-git-info"
+}
+*/
+```
+
+If the URL can't be matched with a git host, `null` will be returned. We
+can match git, ssh and https urls. Additionally, we can match ssh connect
+strings (`git@github.com:npm/hosted-git-info`) and shortcuts (eg,
+`github:npm/hosted-git-info`). Github specifically, is detected in the case
+of a third, unprefixed, form: `npm/hosted-git-info`.
+
+If it does match, the returned object has properties of:
+
+* info.type -- The short name of the service
+* info.domain -- The domain for git protocol use
+* info.user -- The name of the user/org on the git host
+* info.project -- The name of the project on the git host
+
+## Version Contract
+
+The major version will be bumped any time…
+
+* The constructor stops accepting URLs that it previously accepted.
+* A method is removed.
+* A method can no longer accept the number and type of arguments it previously accepted.
+* A method can return a different type than it currently returns.
+
+Implications:
+
+* I do not consider the specific format of the urls returned from, say
+ `.https()` to be a part of the contract. The contract is that it will
+ return a string that can be used to fetch the repo via HTTPS. But what
+ that string looks like, specifically, can change.
+* Dropping support for a hosted git provider would constitute a breaking
+ change.
+
+## Usage
+
+### var info = hostedGitInfo.fromUrl(gitSpecifier[, options])
+
+* *gitSpecifer* is a URL of a git repository or a SCP-style specifier of one.
+* *options* is an optional object. It can have the following properties:
+ * *noCommittish* — If true then committishes won't be included in generated URLs.
+ * *noGitPlus* — If true then `git+` won't be prefixed on URLs.
+
+## Methods
+
+All of the methods take the same options as the `fromUrl` factory. Options
+provided to a method override those provided to the constructor.
+
+* info.file(path, opts)
+
+Given the path of a file relative to the repository, returns a URL for
+directly fetching it from the githost. If no committish was set then
+`master` will be used as the default.
+
+For example `hostedGitInfo.fromUrl("git@github.com:npm/hosted-git-info.git#v1.0.0").file("package.json")`
+would return `https://raw.githubusercontent.com/npm/hosted-git-info/v1.0.0/package.json`
+
+* info.shortcut(opts)
+
+eg, `github:npm/hosted-git-info`
+
+* info.browse(path, fragment, opts)
+
+eg, `https://github.com/npm/hosted-git-info/tree/v1.2.0`,
+`https://github.com/npm/hosted-git-info/tree/v1.2.0/package.json`,
+`https://github.com/npm/hosted-git-info/tree/v1.2.0/REAMDE.md#supported-hosts`
+
+* info.bugs(opts)
+
+eg, `https://github.com/npm/hosted-git-info/issues`
+
+* info.docs(opts)
+
+eg, `https://github.com/npm/hosted-git-info/tree/v1.2.0#readme`
+
+* info.https(opts)
+
+eg, `git+https://github.com/npm/hosted-git-info.git`
+
+* info.sshurl(opts)
+
+eg, `git+ssh://git@github.com/npm/hosted-git-info.git`
+
+* info.ssh(opts)
+
+eg, `git@github.com:npm/hosted-git-info.git`
+
+* info.path(opts)
+
+eg, `npm/hosted-git-info`
+
+* info.tarball(opts)
+
+eg, `https://github.com/npm/hosted-git-info/archive/v1.2.0.tar.gz`
+
+* info.getDefaultRepresentation()
+
+Returns the default output type. The default output type is based on the
+string you passed in to be parsed
+
+* info.toString(opts)
+
+Uses the getDefaultRepresentation to call one of the other methods to get a URL for
+this resource. As such `hostedGitInfo.fromUrl(url).toString()` will give
+you a normalized version of the URL that still uses the same protocol.
+
+Shortcuts will still be returned as shortcuts, but the special case github
+form of `org/project` will be normalized to `github:org/project`.
+
+SSH connect strings will be normalized into `git+ssh` URLs.
+
+## Supported hosts
+
+Currently this supports Github, Bitbucket and Gitlab. Pull requests for
+additional hosts welcome.
diff --git a/node_modules/hosted-git-info/git-host-info.js b/node_modules/hosted-git-info/git-host-info.js
new file mode 100644
index 0000000..8147e33
--- /dev/null
+++ b/node_modules/hosted-git-info/git-host-info.js
@@ -0,0 +1,79 @@
+'use strict'
+
+var gitHosts = module.exports = {
+ github: {
+ // First two are insecure and generally shouldn't be used any more, but
+ // they are still supported.
+ 'protocols': [ 'git', 'http', 'git+ssh', 'git+https', 'ssh', 'https' ],
+ 'domain': 'github.com',
+ 'treepath': 'tree',
+ 'filetemplate': 'https://{auth@}raw.githubusercontent.com/{user}/{project}/{committish}/{path}',
+ 'bugstemplate': 'https://{domain}/{user}/{project}/issues',
+ 'gittemplate': 'git://{auth@}{domain}/{user}/{project}.git{#committish}',
+ 'tarballtemplate': 'https://codeload.{domain}/{user}/{project}/tar.gz/{committish}'
+ },
+ bitbucket: {
+ 'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ],
+ 'domain': 'bitbucket.org',
+ 'treepath': 'src',
+ 'tarballtemplate': 'https://{domain}/{user}/{project}/get/{committish}.tar.gz'
+ },
+ gitlab: {
+ 'protocols': [ 'git+ssh', 'git+https', 'ssh', 'https' ],
+ 'domain': 'gitlab.com',
+ 'treepath': 'tree',
+ 'bugstemplate': 'https://{domain}/{user}/{project}/issues',
+ 'httpstemplate': 'git+https://{auth@}{domain}/{user}/{projectPath}.git{#committish}',
+ 'tarballtemplate': 'https://{domain}/{user}/{project}/repository/archive.tar.gz?ref={committish}',
+ 'pathmatch': /^[/]([^/]+)[/]((?!.*(\/-\/|\/repository\/archive\.tar\.gz\?=.*|\/repository\/[^/]+\/archive.tar.gz$)).*?)(?:[.]git|[/])?$/
+ },
+ gist: {
+ 'protocols': [ 'git', 'git+ssh', 'git+https', 'ssh', 'https' ],
+ 'domain': 'gist.github.com',
+ 'pathmatch': /^[/](?:([^/]+)[/])?([a-z0-9]{32,})(?:[.]git)?$/,
+ 'filetemplate': 'https://gist.githubusercontent.com/{user}/{project}/raw{/committish}/{path}',
+ 'bugstemplate': 'https://{domain}/{project}',
+ 'gittemplate': 'git://{domain}/{project}.git{#committish}',
+ 'sshtemplate': 'git@{domain}:/{project}.git{#committish}',
+ 'sshurltemplate': 'git+ssh://git@{domain}/{project}.git{#committish}',
+ 'browsetemplate': 'https://{domain}/{project}{/committish}',
+ 'browsefiletemplate': 'https://{domain}/{project}{/committish}{#path}',
+ 'docstemplate': 'https://{domain}/{project}{/committish}',
+ 'httpstemplate': 'git+https://{domain}/{project}.git{#committish}',
+ 'shortcuttemplate': '{type}:{project}{#committish}',
+ 'pathtemplate': '{project}{#committish}',
+ 'tarballtemplate': 'https://codeload.github.com/gist/{project}/tar.gz/{committish}',
+ 'hashformat': function (fragment) {
+ return 'file-' + formatHashFragment(fragment)
+ }
+ }
+}
+
+var gitHostDefaults = {
+ 'sshtemplate': 'git@{domain}:{user}/{project}.git{#committish}',
+ 'sshurltemplate': 'git+ssh://git@{domain}/{user}/{project}.git{#committish}',
+ 'browsetemplate': 'https://{domain}/{user}/{project}{/tree/committish}',
+ 'browsefiletemplate': 'https://{domain}/{user}/{project}/{treepath}/{committish}/{path}{#fragment}',
+ 'docstemplate': 'https://{domain}/{user}/{project}{/tree/committish}#readme',
+ 'httpstemplate': 'git+https://{auth@}{domain}/{user}/{project}.git{#committish}',
+ 'filetemplate': 'https://{domain}/{user}/{project}/raw/{committish}/{path}',
+ 'shortcuttemplate': '{type}:{user}/{project}{#committish}',
+ 'pathtemplate': '{user}/{project}{#committish}',
+ 'pathmatch': /^[/]([^/]+)[/]([^/]+?)(?:[.]git|[/])?$/,
+ 'hashformat': formatHashFragment
+}
+
+Object.keys(gitHosts).forEach(function (name) {
+ Object.keys(gitHostDefaults).forEach(function (key) {
+ if (gitHosts[name][key]) return
+ gitHosts[name][key] = gitHostDefaults[key]
+ })
+ gitHosts[name].protocols_re = RegExp('^(' +
+ gitHosts[name].protocols.map(function (protocol) {
+ return protocol.replace(/([\\+*{}()[\]$^|])/g, '\\$1')
+ }).join('|') + '):$')
+})
+
+function formatHashFragment (fragment) {
+ return fragment.toLowerCase().replace(/^\W+|\/|\W+$/g, '').replace(/\W+/g, '-')
+}
diff --git a/node_modules/hosted-git-info/git-host.js b/node_modules/hosted-git-info/git-host.js
new file mode 100644
index 0000000..9616fba
--- /dev/null
+++ b/node_modules/hosted-git-info/git-host.js
@@ -0,0 +1,156 @@
+'use strict'
+var gitHosts = require('./git-host-info.js')
+/* eslint-disable node/no-deprecated-api */
+
+// copy-pasta util._extend from node's source, to avoid pulling
+// the whole util module into peoples' webpack bundles.
+/* istanbul ignore next */
+var extend = Object.assign || function _extend (target, source) {
+ // Don't do anything if source isn't an object
+ if (source === null || typeof source !== 'object') return target
+
+ var keys = Object.keys(source)
+ var i = keys.length
+ while (i--) {
+ target[keys[i]] = source[keys[i]]
+ }
+ return target
+}
+
+module.exports = GitHost
+function GitHost (type, user, auth, project, committish, defaultRepresentation, opts) {
+ var gitHostInfo = this
+ gitHostInfo.type = type
+ Object.keys(gitHosts[type]).forEach(function (key) {
+ gitHostInfo[key] = gitHosts[type][key]
+ })
+ gitHostInfo.user = user
+ gitHostInfo.auth = auth
+ gitHostInfo.project = project
+ gitHostInfo.committish = committish
+ gitHostInfo.default = defaultRepresentation
+ gitHostInfo.opts = opts || {}
+}
+
+GitHost.prototype.hash = function () {
+ return this.committish ? '#' + this.committish : ''
+}
+
+GitHost.prototype._fill = function (template, opts) {
+ if (!template) return
+ var vars = extend({}, opts)
+ vars.path = vars.path ? vars.path.replace(/^[/]+/g, '') : ''
+ opts = extend(extend({}, this.opts), opts)
+ var self = this
+ Object.keys(this).forEach(function (key) {
+ if (self[key] != null && vars[key] == null) vars[key] = self[key]
+ })
+ var rawAuth = vars.auth
+ var rawcommittish = vars.committish
+ var rawFragment = vars.fragment
+ var rawPath = vars.path
+ var rawProject = vars.project
+ Object.keys(vars).forEach(function (key) {
+ var value = vars[key]
+ if ((key === 'path' || key === 'project') && typeof value === 'string') {
+ vars[key] = value.split('/').map(function (pathComponent) {
+ return encodeURIComponent(pathComponent)
+ }).join('/')
+ } else {
+ vars[key] = encodeURIComponent(value)
+ }
+ })
+ vars['auth@'] = rawAuth ? rawAuth + '@' : ''
+ vars['#fragment'] = rawFragment ? '#' + this.hashformat(rawFragment) : ''
+ vars.fragment = vars.fragment ? vars.fragment : ''
+ vars['#path'] = rawPath ? '#' + this.hashformat(rawPath) : ''
+ vars['/path'] = vars.path ? '/' + vars.path : ''
+ vars.projectPath = rawProject.split('/').map(encodeURIComponent).join('/')
+ if (opts.noCommittish) {
+ vars['#committish'] = ''
+ vars['/tree/committish'] = ''
+ vars['/committish'] = ''
+ vars.committish = ''
+ } else {
+ vars['#committish'] = rawcommittish ? '#' + rawcommittish : ''
+ vars['/tree/committish'] = vars.committish
+ ? '/' + vars.treepath + '/' + vars.committish
+ : ''
+ vars['/committish'] = vars.committish ? '/' + vars.committish : ''
+ vars.committish = vars.committish || 'master'
+ }
+ var res = template
+ Object.keys(vars).forEach(function (key) {
+ res = res.replace(new RegExp('[{]' + key + '[}]', 'g'), vars[key])
+ })
+ if (opts.noGitPlus) {
+ return res.replace(/^git[+]/, '')
+ } else {
+ return res
+ }
+}
+
+GitHost.prototype.ssh = function (opts) {
+ return this._fill(this.sshtemplate, opts)
+}
+
+GitHost.prototype.sshurl = function (opts) {
+ return this._fill(this.sshurltemplate, opts)
+}
+
+GitHost.prototype.browse = function (P, F, opts) {
+ if (typeof P === 'string') {
+ if (typeof F !== 'string') {
+ opts = F
+ F = null
+ }
+ return this._fill(this.browsefiletemplate, extend({
+ fragment: F,
+ path: P
+ }, opts))
+ } else {
+ return this._fill(this.browsetemplate, P)
+ }
+}
+
+GitHost.prototype.docs = function (opts) {
+ return this._fill(this.docstemplate, opts)
+}
+
+GitHost.prototype.bugs = function (opts) {
+ return this._fill(this.bugstemplate, opts)
+}
+
+GitHost.prototype.https = function (opts) {
+ return this._fill(this.httpstemplate, opts)
+}
+
+GitHost.prototype.git = function (opts) {
+ return this._fill(this.gittemplate, opts)
+}
+
+GitHost.prototype.shortcut = function (opts) {
+ return this._fill(this.shortcuttemplate, opts)
+}
+
+GitHost.prototype.path = function (opts) {
+ return this._fill(this.pathtemplate, opts)
+}
+
+GitHost.prototype.tarball = function (opts_) {
+ var opts = extend({}, opts_, { noCommittish: false })
+ return this._fill(this.tarballtemplate, opts)
+}
+
+GitHost.prototype.file = function (P, opts) {
+ return this._fill(this.filetemplate, extend({ path: P }, opts))
+}
+
+GitHost.prototype.getDefaultRepresentation = function () {
+ return this.default
+}
+
+GitHost.prototype.toString = function (opts) {
+ if (this.default && typeof this[this.default] === 'function') return this[this.default](opts)
+ return this.sshurl(opts)
+}
diff --git a/node_modules/hosted-git-info/index.js b/node_modules/hosted-git-info/index.js
new file mode 100644
index 0000000..0885772
--- /dev/null
+++ b/node_modules/hosted-git-info/index.js
@@ -0,0 +1,148 @@
+'use strict'
+var url = require('url')
+var gitHosts = require('./git-host-info.js')
+var GitHost = module.exports = require('./git-host.js')
+
+var protocolToRepresentationMap = {
+ 'git+ssh:': 'sshurl',
+ 'git+https:': 'https',
+ 'ssh:': 'sshurl',
+ 'git:': 'git'
+}
+
+function protocolToRepresentation (protocol) {
+ return protocolToRepresentationMap[protocol] || protocol.slice(0, -1)
+}
+
+var authProtocols = {
+ 'git:': true,
+ 'https:': true,
+ 'git+https:': true,
+ 'http:': true,
+ 'git+http:': true
+}
+
+var cache = {}
+
+module.exports.fromUrl = function (giturl, opts) {
+ if (typeof giturl !== 'string') return
+ var key = giturl + JSON.stringify(opts || {})
+
+ if (!(key in cache)) {
+ cache[key] = fromUrl(giturl, opts)
+ }
+
+ return cache[key]
+}
+
+function fromUrl (giturl, opts) {
+ if (giturl == null || giturl === '') return
+ var url = fixupUnqualifiedGist(
+ isGitHubShorthand(giturl) ? 'github:' + giturl : giturl
+ )
+ var parsed = parseGitUrl(url)
+ var shortcutMatch = url.match(/^([^:]+):(?:[^@]+@)?(?:([^/]*)\/)?([^#]+)/)
+ var matches = Object.keys(gitHosts).map(function (gitHostName) {
+ try {
+ var gitHostInfo = gitHosts[gitHostName]
+ var auth = null
+ if (parsed.auth && authProtocols[parsed.protocol]) {
+ auth = parsed.auth
+ }
+ var committish = parsed.hash ? decodeURIComponent(parsed.hash.substr(1)) : null
+ var user = null
+ var project = null
+ var defaultRepresentation = null
+ if (shortcutMatch && shortcutMatch[1] === gitHostName) {
+ user = shortcutMatch[2] && decodeURIComponent(shortcutMatch[2])
+ project = decodeURIComponent(shortcutMatch[3].replace(/\.git$/, ''))
+ defaultRepresentation = 'shortcut'
+ } else {
+ if (parsed.host && parsed.host !== gitHostInfo.domain && parsed.host.replace(/^www[.]/, '') !== gitHostInfo.domain) return
+ if (!gitHostInfo.protocols_re.test(parsed.protocol)) return
+ if (!parsed.path) return
+ var pathmatch = gitHostInfo.pathmatch
+ var matched = parsed.path.match(pathmatch)
+ if (!matched) return
+ /* istanbul ignore else */
+ if (matched[1] !== null && matched[1] !== undefined) {
+ user = decodeURIComponent(matched[1].replace(/^:/, ''))
+ }
+ project = decodeURIComponent(matched[2])
+ defaultRepresentation = protocolToRepresentation(parsed.protocol)
+ }
+ return new GitHost(gitHostName, user, auth, project, committish, defaultRepresentation, opts)
+ } catch (ex) {
+ /* istanbul ignore else */
+ if (ex instanceof URIError) {
+ } else throw ex
+ }
+ }).filter(function (gitHostInfo) { return gitHostInfo })
+ if (matches.length !== 1) return
+ return matches[0]
+}
+
+function isGitHubShorthand (arg) {
+ // Note: This does not fully test the git ref format.
+ // See https://www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html
+ //
+ // The only way to do this properly would be to shell out to
+ // git-check-ref-format, and as this is a fast sync function,
+ // we don't want to do that. Just let git fail if it turns
+ // out that the commit-ish is invalid.
+ // GH usernames cannot start with . or -
+ return /^[^:@%/\s.-][^:@%/\s]*[/][^:@\s/%]+(?:#.*)?$/.test(arg)
+}
+
+function fixupUnqualifiedGist (giturl) {
+ // necessary for round-tripping gists
+ var parsed = url.parse(giturl)
+ if (parsed.protocol === 'gist:' && parsed.host && !parsed.path) {
+ return parsed.protocol + '/' + parsed.host
+ } else {
+ return giturl
+ }
+}
+
+function parseGitUrl (giturl) {
+ var matched = giturl.match(/^([^@]+)@([^:/]+):[/]?((?:[^/]+[/])?[^/]+?)(?:[.]git)?(#.*)?$/)
+ if (!matched) {
+ var legacy = url.parse(giturl)
+ // If we don't have url.URL, then sorry, this is just not fixable.
+ // This affects Node <= 6.12.
+ if (legacy.auth && typeof url.URL === 'function') {
+ // git urls can be in the form of scp-style/ssh-connect strings, like
+ // git+ssh://user@host.com:some/path, which the legacy url parser
+ // supports, but WhatWG url.URL class does not. However, the legacy
+ // parser de-urlencodes the username and password, so something like
+ // https://user%3An%40me:p%40ss%3Aword@x.com/ becomes
+ // https://user:n@me:p@ss:word@x.com/ which is all kinds of wrong.
+ // Pull off just the auth and host, so we dont' get the confusing
+ // scp-style URL, then pass that to the WhatWG parser to get the
+ // auth properly escaped.
+ var authmatch = giturl.match(/[^@]+@[^:/]+/)
+ /* istanbul ignore else - this should be impossible */
+ if (authmatch) {
+ var whatwg = new url.URL(authmatch[0])
+ legacy.auth = whatwg.username || ''
+ if (whatwg.password) legacy.auth += ':' + whatwg.password
+ }
+ }
+ return legacy
+ }
+ return {
+ protocol: 'git+ssh:',
+ slashes: true,
+ auth: matched[1],
+ host: matched[2],
+ port: null,
+ hostname: matched[2],
+ hash: matched[4],
+ search: null,
+ query: null,
+ pathname: '/' + matched[3],
+ path: '/' + matched[3],
+ href: 'git+ssh://' + matched[1] + '@' + matched[2] +
+ '/' + matched[3] + (matched[4] || '')
+ }
+}
diff --git a/node_modules/hosted-git-info/package.json b/node_modules/hosted-git-info/package.json
new file mode 100644
index 0000000..8cc554c
--- /dev/null
+++ b/node_modules/hosted-git-info/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "hosted-git-info",
+ "version": "2.8.9",
+ "description": "Provides metadata and conversions from repository urls for Github, Bitbucket and Gitlab",
+ "main": "index.js",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/npm/hosted-git-info.git"
+ },
+ "keywords": [
+ "git",
+ "github",
+ "bitbucket",
+ "gitlab"
+ ],
+ "author": "Rebecca Turner (http://re-becca.org)",
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/npm/hosted-git-info/issues"
+ },
+ "homepage": "https://github.com/npm/hosted-git-info",
+ "scripts": {
+ "prerelease": "npm t",
+ "postrelease": "npm publish --tag=ancient-legacy-fixes && git push --follow-tags",
+ "posttest": "standard",
+ "release": "standard-version -s",
+ "test:coverage": "tap --coverage-report=html -J --coverage=90 --no-esm test/*.js",
+ "test": "tap -J --coverage=90 --no-esm test/*.js"
+ },
+ "devDependencies": {
+ "standard": "^11.0.1",
+ "standard-version": "^4.4.0",
+ "tap": "^12.7.0"
+ },
+ "files": [
+ "index.js",
+ "git-host.js",
+ "git-host-info.js"
+ ]
+}
diff --git a/node_modules/immutable/LICENSE b/node_modules/immutable/LICENSE
new file mode 100644
index 0000000..1e3c4f3
--- /dev/null
+++ b/node_modules/immutable/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2014-present, Lee Byron and other 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.
diff --git a/node_modules/immutable/README.md b/node_modules/immutable/README.md
new file mode 100644
index 0000000..678257f
--- /dev/null
+++ b/node_modules/immutable/README.md
@@ -0,0 +1,717 @@
+# Immutable collections for JavaScript
+
+[![Build Status](https://github.com/immutable-js/immutable-js/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/immutable-js/immutable-js/actions/workflows/ci.yml?query=branch%3Amain) [Chat on slack](https://immutable-js.slack.com)
+
+[Read the docs](https://immutable-js.com) and eat your vegetables.
+
+Docs are automatically generated from [README.md][] and [immutable.d.ts][].
+Please contribute! Also, don't miss the [wiki][] which contains articles on
+additional specific topics. Can't find something? Open an [issue][].
+
+**Table of contents:**
+
+- [Introduction](#introduction)
+- [Getting started](#getting-started)
+- [The case for Immutability](#the-case-for-immutability)
+- [JavaScript-first API](#javaScript-first-api)
+- [Nested Structures](#nested-structures)
+- [Equality treats Collections as Values](#equality-treats-collections-as-values)
+- [Batching Mutations](#batching-mutations)
+- [Lazy Seq](#lazy-seq)
+- [Additional Tools and Resources](#additional-tools-and-resources)
+- [Contributing](#contributing)
+
+## Introduction
+
+[Immutable][] data cannot be changed once created, leading to much simpler
+application development, no defensive copying, and enabling advanced memoization
+and change detection techniques with simple logic. [Persistent][] data presents
+a mutative API which does not update the data in-place, but instead always
+yields new updated data.
+
+Immutable.js provides many Persistent Immutable data structures including:
+`List`, `Stack`, `Map`, `OrderedMap`, `Set`, `OrderedSet` and `Record`.
+
+These data structures are highly efficient on modern JavaScript VMs by using
+structural sharing via [hash maps tries][] and [vector tries][] as popularized
+by Clojure and Scala, minimizing the need to copy or cache data.
+
+Immutable.js also provides a lazy `Seq`, allowing efficient
+chaining of collection methods like `map` and `filter` without creating
+intermediate representations. Create some `Seq` with `Range` and `Repeat`.
+
+Want to hear more? Watch the presentation about Immutable.js:
+
+[![Immutable Data and React](website/public/Immutable-Data-and-React-YouTube.png)](https://youtu.be/I7IdS-PbEgI)
+
+[README.md]: https://github.com/immutable-js/immutable-js/blob/main/README.md
+[immutable.d.ts]: https://github.com/immutable-js/immutable-js/blob/main/type-definitions/immutable.d.ts
+[wiki]: https://github.com/immutable-js/immutable-js/wiki
+[issue]: https://github.com/immutable-js/immutable-js/issues
+[Persistent]: https://en.wikipedia.org/wiki/Persistent_data_structure
+[Immutable]: https://en.wikipedia.org/wiki/Immutable_object
+[hash maps tries]: https://en.wikipedia.org/wiki/Hash_array_mapped_trie
+[vector tries]: https://hypirion.com/musings/understanding-persistent-vector-pt-1
+
+## Getting started
+
+Install `immutable` using npm.
+
+```shell
+npm install immutable
+```
+
+Or install using yarn.
+
+```shell
+yarn add immutable
+```
+
+Then require it into any module.
+
+
+
+```js
+const { Map } = require('immutable');
+const map1 = Map({ a: 1, b: 2, c: 3 });
+const map2 = map1.set('b', 50);
+map1.get('b') + ' vs. ' + map2.get('b'); // 2 vs. 50
+```
+
+### Browser
+
+Immutable.js has no dependencies, which makes it predictable to include in a Browser.
+
+It's highly recommended to use a module bundler like [webpack](https://webpack.github.io/),
+[rollup](https://rollupjs.org/), or
+[browserify](https://browserify.org/). The `immutable` npm module works
+without any additional consideration. All examples throughout the documentation
+will assume use of this kind of tool.
+
+Alternatively, Immutable.js may be directly included as a script tag. Download
+or link to a CDN such as [CDNJS](https://cdnjs.com/libraries/immutable)
+or [jsDelivr](https://www.jsdelivr.com/package/npm/immutable).
+
+Use a script tag to directly add `Immutable` to the global scope:
+
+```html
+
+
+```
+
+Or use an AMD-style loader (such as [RequireJS](https://requirejs.org/)):
+
+```js
+require(['./immutable.min.js'], function (Immutable) {
+ var map1 = Immutable.Map({ a: 1, b: 2, c: 3 });
+ var map2 = map1.set('b', 50);
+ map1.get('b'); // 2
+ map2.get('b'); // 50
+});
+```
+
+### Flow & TypeScript
+
+Use these Immutable collections and sequences as you would use native
+collections in your [Flowtype](https://flowtype.org/) or [TypeScript](https://typescriptlang.org) programs while still taking
+advantage of type generics, error detection, and auto-complete in your IDE.
+
+Installing `immutable` via npm brings with it type definitions for Flow (v0.55.0 or higher)
+and TypeScript (v2.1.0 or higher), so you shouldn't need to do anything at all!
+
+#### Using TypeScript with Immutable.js v4
+
+Immutable.js type definitions embrace ES2015. While Immutable.js itself supports
+legacy browsers and environments, its type definitions require TypeScript's 2015
+lib. Include either `"target": "es2015"` or `"lib": "es2015"` in your
+`tsconfig.json`, or provide `--target es2015` or `--lib es2015` to the
+`tsc` command.
+
+
+
+```js
+const { Map } = require('immutable');
+const map1 = Map({ a: 1, b: 2, c: 3 });
+const map2 = map1.set('b', 50);
+map1.get('b') + ' vs. ' + map2.get('b'); // 2 vs. 50
+```
+
+#### Using TypeScript with Immutable.js v3 and earlier:
+
+Previous versions of Immutable.js include a reference file which you can include
+via relative path to the type definitions at the top of your file.
+
+```js
+///
+import Immutable from 'immutable';
+var map1: Immutable.Map;
+map1 = Immutable.Map({ a: 1, b: 2, c: 3 });
+var map2 = map1.set('b', 50);
+map1.get('b'); // 2
+map2.get('b'); // 50
+```
+
+## The case for Immutability
+
+Much of what makes application development difficult is tracking mutation and
+maintaining state. Developing with immutable data encourages you to think
+differently about how data flows through your application.
+
+Subscribing to data events throughout your application creates a huge overhead of
+book-keeping which can hurt performance, sometimes dramatically, and creates
+opportunities for areas of your application to get out of sync with each other
+due to easy to make programmer error. Since immutable data never changes,
+subscribing to changes throughout the model is a dead-end and new data can only
+ever be passed from above.
+
+This model of data flow aligns well with the architecture of [React][]
+and especially well with an application designed using the ideas of [Flux][].
+
+When data is passed from above rather than being subscribed to, and you're only
+interested in doing work when something has changed, you can use equality.
+
+Immutable collections should be treated as _values_ rather than _objects_. While
+objects represent some thing which could change over time, a value represents
+the state of that thing at a particular instance of time. This principle is most
+important to understanding the appropriate use of immutable data. In order to
+treat Immutable.js collections as values, it's important to use the
+`Immutable.is()` function or `.equals()` method to determine _value equality_
+instead of the `===` operator which determines object _reference identity_.
+
+
+
+```js
+const { Map } = require('immutable');
+const map1 = Map({ a: 1, b: 2, c: 3 });
+const map2 = Map({ a: 1, b: 2, c: 3 });
+map1.equals(map2); // true
+map1 === map2; // false
+```
+
+Note: As a performance optimization Immutable.js attempts to return the existing
+collection when an operation would result in an identical collection, allowing
+for using `===` reference equality to determine if something definitely has not
+changed. This can be extremely useful when used within a memoization function
+which would prefer to re-run the function if a deeper equality check could
+potentially be more costly. The `===` equality check is also used internally by
+`Immutable.is` and `.equals()` as a performance optimization.
+
+
+
+```js
+const { Map } = require('immutable');
+const map1 = Map({ a: 1, b: 2, c: 3 });
+const map2 = map1.set('b', 2); // Set to same value
+map1 === map2; // true
+```
+
+If an object is immutable, it can be "copied" simply by making another reference
+to it instead of copying the entire object. Because a reference is much smaller
+than the object itself, this results in memory savings and a potential boost in
+execution speed for programs which rely on copies (such as an undo-stack).
+
+
+
+```js
+const { Map } = require('immutable');
+const map = Map({ a: 1, b: 2, c: 3 });
+const mapCopy = map; // Look, "copies" are free!
+```
+
+[React]: https://reactjs.org/
+[Flux]: https://facebook.github.io/flux/docs/in-depth-overview/
+
+
+## JavaScript-first API
+
+While Immutable.js is inspired by Clojure, Scala, Haskell and other functional
+programming environments, it's designed to bring these powerful concepts to
+JavaScript, and therefore has an Object-Oriented API that closely mirrors that
+of [ES2015][] [Array][], [Map][], and [Set][].
+
+[es2015]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla
+[array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
+[map]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
+[set]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
+
+The difference for the immutable collections is that methods which would mutate
+the collection, like `push`, `set`, `unshift` or `splice`, instead return a new
+immutable collection. Methods which return new arrays, like `slice` or `concat`,
+instead return new immutable collections.
+
+
+
+```js
+const { List } = require('immutable');
+const list1 = List([1, 2]);
+const list2 = list1.push(3, 4, 5);
+const list3 = list2.unshift(0);
+const list4 = list1.concat(list2, list3);
+assert.equal(list1.size, 2);
+assert.equal(list2.size, 5);
+assert.equal(list3.size, 6);
+assert.equal(list4.size, 13);
+assert.equal(list4.get(0), 1);
+```
+
+Almost all of the methods on [Array][] will be found in similar form on
+`Immutable.List`, those of [Map][] found on `Immutable.Map`, and those of [Set][]
+found on `Immutable.Set`, including collection operations like `forEach()`
+and `map()`.
+
+
+
+```js
+const { Map } = require('immutable');
+const alpha = Map({ a: 1, b: 2, c: 3, d: 4 });
+alpha.map((v, k) => k.toUpperCase()).join();
+// 'A,B,C,D'
+```
+
+### Convert from raw JavaScript objects and arrays.
+
+Designed to inter-operate with your existing JavaScript, Immutable.js
+accepts plain JavaScript Arrays and Objects anywhere a method expects a
+`Collection`.
+
+
+
+```js
+const { Map, List } = require('immutable');
+const map1 = Map({ a: 1, b: 2, c: 3, d: 4 });
+const map2 = Map({ c: 10, a: 20, t: 30 });
+const obj = { d: 100, o: 200, g: 300 };
+const map3 = map1.merge(map2, obj);
+// Map { a: 20, b: 2, c: 10, d: 100, t: 30, o: 200, g: 300 }
+const list1 = List([1, 2, 3]);
+const list2 = List([4, 5, 6]);
+const array = [7, 8, 9];
+const list3 = list1.concat(list2, array);
+// List [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
+```
+
+This is possible because Immutable.js can treat any JavaScript Array or Object
+as a Collection. You can take advantage of this in order to get sophisticated
+collection methods on JavaScript Objects, which otherwise have a very sparse
+native API. Because Seq evaluates lazily and does not cache intermediate
+results, these operations can be extremely efficient.
+
+
+
+```js
+const { Seq } = require('immutable');
+const myObject = { a: 1, b: 2, c: 3 };
+Seq(myObject)
+ .map(x => x * x)
+ .toObject();
+// { a: 1, b: 4, c: 9 }
+```
+
+Keep in mind, when using JS objects to construct Immutable Maps, that
+JavaScript Object properties are always strings, even if written in a quote-less
+shorthand, while Immutable Maps accept keys of any type.
+
+
+
+```js
+const { fromJS } = require('immutable');
+
+const obj = { 1: 'one' };
+console.log(Object.keys(obj)); // [ "1" ]
+console.log(obj['1'], obj[1]); // "one", "one"
+
+const map = fromJS(obj);
+console.log(map.get('1'), map.get(1)); // "one", undefined
+```
+
+Property access for JavaScript Objects first converts the key to a string, but
+since Immutable Map keys can be of any type the argument to `get()` is
+not altered.
+
+### Converts back to raw JavaScript objects.
+
+All Immutable.js Collections can be converted to plain JavaScript Arrays and
+Objects shallowly with `toArray()` and `toObject()` or deeply with `toJS()`.
+All Immutable Collections also implement `toJSON()` allowing them to be passed
+to `JSON.stringify` directly. They also respect the custom `toJSON()` methods of
+nested objects.
+
+
+
+```js
+const { Map, List } = require('immutable');
+const deep = Map({ a: 1, b: 2, c: List([3, 4, 5]) });
+console.log(deep.toObject()); // { a: 1, b: 2, c: List [ 3, 4, 5 ] }
+console.log(deep.toArray()); // [ 1, 2, List [ 3, 4, 5 ] ]
+console.log(deep.toJS()); // { a: 1, b: 2, c: [ 3, 4, 5 ] }
+JSON.stringify(deep); // '{"a":1,"b":2,"c":[3,4,5]}'
+```
+
+### Embraces ES2015
+
+Immutable.js supports all JavaScript environments, including legacy
+browsers (even IE11). However it also takes advantage of features added to
+JavaScript in [ES2015][], the latest standard version of JavaScript, including
+[Iterators][], [Arrow Functions][], [Classes][], and [Modules][]. It's inspired
+by the native [Map][] and [Set][] collections added to ES2015.
+
+All examples in the Documentation are presented in ES2015. To run in all
+browsers, they need to be translated to ES5.
+
+```js
+// ES2015
+const mapped = foo.map(x => x * x);
+// ES5
+var mapped = foo.map(function (x) {
+ return x * x;
+});
+```
+
+All Immutable.js collections are [Iterable][iterators], which allows them to be
+used anywhere an Iterable is expected, such as when spreading into an Array.
+
+
+
+```js
+const { List } = require('immutable');
+const aList = List([1, 2, 3]);
+const anArray = [0, ...aList, 4, 5]; // [ 0, 1, 2, 3, 4, 5 ]
+```
+
+Note: A Collection is always iterated in the same order, however that order may
+not always be well defined, as is the case for the `Map` and `Set`.
+
+[Iterators]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol
+[Arrow Functions]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
+[Classes]: https://wiki.ecmascript.org/doku.php?id=strawman:maximally_minimal_classes
+[Modules]: https://www.2ality.com/2014/09/es6-modules-final.html
+
+
+## Nested Structures
+
+The collections in Immutable.js are intended to be nested, allowing for deep
+trees of data, similar to JSON.
+
+
+
+```js
+const { fromJS } = require('immutable');
+const nested = fromJS({ a: { b: { c: [3, 4, 5] } } });
+// Map { a: Map { b: Map { c: List [ 3, 4, 5 ] } } }
+```
+
+A few power-tools allow for reading and operating on nested data. The
+most useful are `mergeDeep`, `getIn`, `setIn`, and `updateIn`, found on `List`,
+`Map` and `OrderedMap`.
+
+
+
+```js
+const { fromJS } = require('immutable');
+const nested = fromJS({ a: { b: { c: [3, 4, 5] } } });
+
+const nested2 = nested.mergeDeep({ a: { b: { d: 6 } } });
+// Map { a: Map { b: Map { c: List [ 3, 4, 5 ], d: 6 } } }
+
+console.log(nested2.getIn(['a', 'b', 'd'])); // 6
+
+const nested3 = nested2.updateIn(['a', 'b', 'd'], value => value + 1);
+console.log(nested3);
+// Map { a: Map { b: Map { c: List [ 3, 4, 5 ], d: 7 } } }
+
+const nested4 = nested3.updateIn(['a', 'b', 'c'], list => list.push(6));
+// Map { a: Map { b: Map { c: List [ 3, 4, 5, 6 ], d: 7 } } }
+```
+
+## Equality treats Collections as Values
+
+Immutable.js collections are treated as pure data _values_. Two immutable
+collections are considered _value equal_ (via `.equals()` or `is()`) if they
+represent the same collection of values. This differs from JavaScript's typical
+_reference equal_ (via `===` or `==`) for Objects and Arrays which only
+determines if two variables represent references to the same object instance.
+
+Consider the example below where two identical `Map` instances are not
+_reference equal_ but are _value equal_.
+
+
+
+```js
+// First consider:
+const obj1 = { a: 1, b: 2, c: 3 };
+const obj2 = { a: 1, b: 2, c: 3 };
+obj1 !== obj2; // two different instances are always not equal with ===
+
+const { Map, is } = require('immutable');
+const map1 = Map({ a: 1, b: 2, c: 3 });
+const map2 = Map({ a: 1, b: 2, c: 3 });
+map1 !== map2; // two different instances are not reference-equal
+map1.equals(map2); // but are value-equal if they have the same values
+is(map1, map2); // alternatively can use the is() function
+```
+
+Value equality allows Immutable.js collections to be used as keys in Maps or
+values in Sets, and retrieved with different but equivalent collections:
+
+
+
+```js
+const { Map, Set } = require('immutable');
+const map1 = Map({ a: 1, b: 2, c: 3 });
+const map2 = Map({ a: 1, b: 2, c: 3 });
+const set = Set().add(map1);
+set.has(map2); // true because these are value-equal
+```
+
+Note: `is()` uses the same measure of equality as [Object.is][] for scalar
+strings and numbers, but uses value equality for Immutable collections,
+determining if both are immutable and all keys and values are equal
+using the same measure of equality.
+
+[object.is]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
+
+#### Performance tradeoffs
+
+While value equality is useful in many circumstances, it has different
+performance characteristics than reference equality. Understanding these
+tradeoffs may help you decide which to use in each case, especially when used
+to memoize some operation.
+
+When comparing two collections, value equality may require considering every
+item in each collection, on an `O(N)` time complexity. For large collections of
+values, this could become a costly operation. Though if the two are not equal
+and hardly similar, the inequality is determined very quickly. In contrast, when
+comparing two collections with reference equality, only the initial references
+to memory need to be compared which is not based on the size of the collections,
+which has an `O(1)` time complexity. Checking reference equality is always very
+fast, however just because two collections are not reference-equal does not rule
+out the possibility that they may be value-equal.
+
+#### Return self on no-op optimization
+
+When possible, Immutable.js avoids creating new objects for updates where no
+change in _value_ occurred, to allow for efficient _reference equality_ checking
+to quickly determine if no change occurred.
+
+
+
+```js
+const { Map } = require('immutable');
+const originalMap = Map({ a: 1, b: 2, c: 3 });
+const updatedMap = originalMap.set('b', 2);
+updatedMap === originalMap; // No-op .set() returned the original reference.
+```
+
+However updates which do result in a change will return a new reference. Each
+of these operations occur independently, so two similar updates will not return
+the same reference:
+
+
+
+```js
+const { Map } = require('immutable');
+const originalMap = Map({ a: 1, b: 2, c: 3 });
+const updatedMap = originalMap.set('b', 1000);
+// New instance, leaving the original immutable.
+updatedMap !== originalMap;
+const anotherUpdatedMap = originalMap.set('b', 1000);
+// Despite both the results of the same operation, each created a new reference.
+anotherUpdatedMap !== updatedMap;
+// However the two are value equal.
+anotherUpdatedMap.equals(updatedMap);
+```
+
+## Batching Mutations
+
+> If a tree falls in the woods, does it make a sound?
+>
+> If a pure function mutates some local data in order to produce an immutable
+> return value, is that ok?
+>
+> — Rich Hickey, Clojure
+
+Applying a mutation to create a new immutable object results in some overhead,
+which can add up to a minor performance penalty. If you need to apply a series
+of mutations locally before returning, Immutable.js gives you the ability to
+create a temporary mutable (transient) copy of a collection and apply a batch of
+mutations in a performant manner by using `withMutations`. In fact, this is
+exactly how Immutable.js applies complex mutations itself.
+
+As an example, building `list2` results in the creation of 1, not 3, new
+immutable Lists.
+
+
+
+```js
+const { List } = require('immutable');
+const list1 = List([1, 2, 3]);
+const list2 = list1.withMutations(function (list) {
+ list.push(4).push(5).push(6);
+});
+assert.equal(list1.size, 3);
+assert.equal(list2.size, 6);
+```
+
+Note: Immutable.js also provides `asMutable` and `asImmutable`, but only
+encourages their use when `withMutations` will not suffice. Use caution to not
+return a mutable copy, which could result in undesired behavior.
+
+_Important!_: Only a select few methods can be used in `withMutations` including
+`set`, `push` and `pop`. These methods can be applied directly against a
+persistent data-structure where other methods like `map`, `filter`, `sort`,
+and `splice` will always return new immutable data-structures and never mutate
+a mutable collection.
+
+## Lazy Seq
+
+`Seq` describes a lazy operation, allowing them to efficiently chain
+use of all the higher-order collection methods (such as `map` and `filter`)
+by not creating intermediate collections.
+
+**Seq is immutable** — Once a Seq is created, it cannot be
+changed, appended to, rearranged or otherwise modified. Instead, any mutative
+method called on a `Seq` will return a new `Seq`.
+
+**Seq is lazy** — `Seq` does as little work as necessary to respond to any
+method call. Values are often created during iteration, including implicit
+iteration when reducing or converting to a concrete data structure such as
+a `List` or JavaScript `Array`.
+
+For example, the following performs no work, because the resulting
+`Seq`'s values are never iterated:
+
+```js
+const { Seq } = require('immutable');
+const oddSquares = Seq([1, 2, 3, 4, 5, 6, 7, 8])
+ .filter(x => x % 2 !== 0)
+ .map(x => x * x);
+```
+
+Once the `Seq` is used, it performs only the work necessary. In this
+example, no intermediate arrays are ever created, filter is called three
+times, and map is only called once:
+
+```js
+oddSquares.get(1); // 9
+```
+
+Any collection can be converted to a lazy Seq with `Seq()`.
+
+
+
+```js
+const { Map, Seq } = require('immutable');
+const map = Map({ a: 1, b: 2, c: 3 });
+const lazySeq = Seq(map);
+```
+
+`Seq` allows for the efficient chaining of operations, allowing for the
+expression of logic that can otherwise be very tedious:
+
+```js
+lazySeq
+ .flip()
+ .map(key => key.toUpperCase())
+ .flip();
+// Seq { A: 1, B: 2, C: 3 }
+```
+
+As well as expressing logic that would otherwise seem memory or time
+limited, for example `Range` is a special kind of Lazy sequence.
+
+
+
+```js
+const { Range } = require('immutable');
+Range(1, Infinity)
+ .skip(1000)
+ .map(n => -n)
+ .filter(n => n % 2 === 0)
+ .take(2)
+ .reduce((r, n) => r * n, 1);
+// 1006008
+```
+
+## Additional Tools and Resources
+
+- [Atom-store](https://github.com/jameshopkins/atom-store/)
+ - A Clojure-inspired atom implementation in Javascript with configurability
+ for external persistance.
+
+- [Chai Immutable](https://github.com/astorije/chai-immutable)
+ - If you are using the [Chai Assertion Library](https://chaijs.com/), this
+ provides a set of assertions to use against Immutable.js collections.
+
+- [Fantasy-land](https://github.com/fantasyland/fantasy-land)
+ - Specification for interoperability of common algebraic structures in JavaScript.
+
+- [Immutagen](https://github.com/pelotom/immutagen)
+ - A library for simulating immutable generators in JavaScript.
+
+- [Immutable-cursor](https://github.com/redbadger/immutable-cursor)
+ - Immutable cursors incorporating the Immutable.js interface over
+ Clojure-inspired atom.
+
+- [Immutable-ext](https://github.com/DrBoolean/immutable-ext)
+ - Fantasyland extensions for immutablejs
+
+- [Immutable-js-tools](https://github.com/madeinfree/immutable-js-tools)
+ - Util tools for immutable.js
+
+- [Immutable-Redux](https://github.com/gajus/redux-immutable)
+ - redux-immutable is used to create an equivalent function of Redux
+ combineReducers that works with Immutable.js state.
+
+- [Immutable-Treeutils](https://github.com/lukasbuenger/immutable-treeutils)
+ - Functional tree traversal helpers for ImmutableJS data structures.
+
+- [Irecord](https://github.com/ericelliott/irecord)
+ - An immutable store that exposes an RxJS observable. Great for React.
+
+- [Mudash](https://github.com/brianneisler/mudash)
+ - Lodash wrapper providing Immutable.JS support.
+
+- [React-Immutable-PropTypes](https://github.com/HurricaneJames/react-immutable-proptypes)
+ - PropType validators that work with Immutable.js.
+
+- [Redux-Immutablejs](https://github.com/indexiatech/redux-immutablejs)
+ - Redux Immutable facilities.
+
+- [Rxstate](https://github.com/yamalight/rxstate)
+ - Simple opinionated state management library based on RxJS and Immutable.js.
+
+- [Transit-Immutable-js](https://github.com/glenjamin/transit-immutable-js)
+ - Transit serialisation for Immutable.js.
+ - See also: [Transit-js](https://github.com/cognitect/transit-js)
+
+Have an additional tool designed to work with Immutable.js?
+Submit a PR to add it to this list in alphabetical order.
+
+## Contributing
+
+Use [Github issues](https://github.com/immutable-js/immutable-js/issues) for requests.
+
+We actively welcome pull requests, learn how to [contribute](https://github.com/immutable-js/immutable-js/blob/main/.github/CONTRIBUTING.md).
+
+Immutable.js is maintained within the [Contributor Covenant's Code of Conduct](https://www.contributor-covenant.org/version/2/0/code_of_conduct/).
+
+### Changelog
+
+Changes are tracked as [Github releases](https://github.com/immutable-js/immutable-js/releases).
+
+### License
+
+Immutable.js is [MIT-licensed](./LICENSE).
+
+### Thanks
+
+[Phil Bagwell](https://www.youtube.com/watch?v=K2NYwP90bNs), for his inspiration
+and research in persistent data structures.
+
+[Hugh Jackson](https://github.com/hughfdjackson/), for providing the npm package
+name. If you're looking for his unsupported package, see [this repository](https://github.com/hughfdjackson/immutable).
diff --git a/node_modules/immutable/dist/immutable.d.ts b/node_modules/immutable/dist/immutable.d.ts
new file mode 100644
index 0000000..a8c62e1
--- /dev/null
+++ b/node_modules/immutable/dist/immutable.d.ts
@@ -0,0 +1,5636 @@
+/**
+ * Immutable data encourages pure functions (data-in, data-out) and lends itself
+ * to much simpler application development and enabling techniques from
+ * functional programming such as lazy evaluation.
+ *
+ * While designed to bring these powerful functional concepts to JavaScript, it
+ * presents an Object-Oriented API familiar to Javascript engineers and closely
+ * mirroring that of Array, Map, and Set. It is easy and efficient to convert to
+ * and from plain Javascript types.
+ *
+ * ## How to read these docs
+ *
+ * In order to better explain what kinds of values the Immutable.js API expects
+ * and produces, this documentation is presented in a statically typed dialect of
+ * JavaScript (like [Flow][] or [TypeScript][]). You *don't need* to use these
+ * type checking tools in order to use Immutable.js, however becoming familiar
+ * with their syntax will help you get a deeper understanding of this API.
+ *
+ * **A few examples and how to read them.**
+ *
+ * All methods describe the kinds of data they accept and the kinds of data
+ * they return. For example a function which accepts two numbers and returns
+ * a number would look like this:
+ *
+ * ```js
+ * sum(first: number, second: number): number
+ * ```
+ *
+ * Sometimes, methods can accept different kinds of data or return different
+ * kinds of data, and this is described with a *type variable*, which is
+ * typically in all-caps. For example, a function which always returns the same
+ * kind of data it was provided would look like this:
+ *
+ * ```js
+ * identity(value: T): T
+ * ```
+ *
+ * Type variables are defined with classes and referred to in methods. For
+ * example, a class that holds onto a value for you might look like this:
+ *
+ * ```js
+ * class Box {
+ * constructor(value: T)
+ * getValue(): T
+ * }
+ * ```
+ *
+ * In order to manipulate Immutable data, methods that we're used to affecting
+ * a Collection instead return a new Collection of the same type. The type
+ * `this` refers to the same kind of class. For example, a List which returns
+ * new Lists when you `push` a value onto it might look like:
+ *
+ * ```js
+ * class List {
+ * push(value: T): this
+ * }
+ * ```
+ *
+ * Many methods in Immutable.js accept values which implement the JavaScript
+ * [Iterable][] protocol, and might appear like `Iterable` for something
+ * which represents sequence of strings. Typically in JavaScript we use plain
+ * Arrays (`[]`) when an Iterable is expected, but also all of the Immutable.js
+ * collections are iterable themselves!
+ *
+ * For example, to get a value deep within a structure of data, we might use
+ * `getIn` which expects an `Iterable` path:
+ *
+ * ```
+ * getIn(path: Iterable): unknown
+ * ```
+ *
+ * To use this method, we could pass an array: `data.getIn([ "key", 2 ])`.
+ *
+ *
+ * Note: All examples are presented in the modern [ES2015][] version of
+ * JavaScript. Use tools like Babel to support older browsers.
+ *
+ * For example:
+ *
+ * ```js
+ * // ES2015
+ * const mappedFoo = foo.map(x => x * x);
+ * // ES5
+ * var mappedFoo = foo.map(function (x) { return x * x; });
+ * ```
+ *
+ * [ES2015]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla
+ * [TypeScript]: https://www.typescriptlang.org/
+ * [Flow]: https://flowtype.org/
+ * [Iterable]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols
+ */
+
+declare namespace Immutable {
+ /**
+ * Lists are ordered indexed dense collections, much like a JavaScript
+ * Array.
+ *
+ * Lists are immutable and fully persistent with O(log32 N) gets and sets,
+ * and O(1) push and pop.
+ *
+ * Lists implement Deque, with efficient addition and removal from both the
+ * end (`push`, `pop`) and beginning (`unshift`, `shift`).
+ *
+ * Unlike a JavaScript Array, there is no distinction between an
+ * "unset" index and an index set to `undefined`. `List#forEach` visits all
+ * indices from 0 to size, regardless of whether they were explicitly defined.
+ */
+ namespace List {
+ /**
+ * True if the provided value is a List
+ *
+ *
+ * ```js
+ * const { List } = require('immutable');
+ * List.isList([]); // false
+ * List.isList(List()); // true
+ * ```
+ */
+ function isList(maybeList: unknown): maybeList is List;
+
+ /**
+ * Creates a new List containing `values`.
+ *
+ *
+ * ```js
+ * const { List } = require('immutable');
+ * List.of(1, 2, 3, 4)
+ * // List [ 1, 2, 3, 4 ]
+ * ```
+ *
+ * Note: Values are not altered or converted in any way.
+ *
+ *
+ * ```js
+ * const { List } = require('immutable');
+ * List.of({x:1}, 2, [3], 4)
+ * // List [ { x: 1 }, 2, [ 3 ], 4 ]
+ * ```
+ */
+ function of(...values: Array): List;
+ }
+
+ /**
+ * Create a new immutable List containing the values of the provided
+ * collection-like.
+ *
+ * Note: `List` is a factory function and not a class, and does not use the
+ * `new` keyword during construction.
+ *
+ *
+ * ```js
+ * const { List, Set } = require('immutable')
+ *
+ * const emptyList = List()
+ * // List []
+ *
+ * const plainArray = [ 1, 2, 3, 4 ]
+ * const listFromPlainArray = List(plainArray)
+ * // List [ 1, 2, 3, 4 ]
+ *
+ * const plainSet = Set([ 1, 2, 3, 4 ])
+ * const listFromPlainSet = List(plainSet)
+ * // List [ 1, 2, 3, 4 ]
+ *
+ * const arrayIterator = plainArray[Symbol.iterator]()
+ * const listFromCollectionArray = List(arrayIterator)
+ * // List [ 1, 2, 3, 4 ]
+ *
+ * listFromPlainArray.equals(listFromCollectionArray) // true
+ * listFromPlainSet.equals(listFromCollectionArray) // true
+ * listFromPlainSet.equals(listFromPlainArray) // true
+ * ```
+ */
+ function List(collection?: Iterable | ArrayLike): List;
+
+ interface List extends Collection.Indexed {
+ /**
+ * The number of items in this List.
+ */
+ readonly size: number;
+
+ // Persistent changes
+
+ /**
+ * Returns a new List which includes `value` at `index`. If `index` already
+ * exists in this List, it will be replaced.
+ *
+ * `index` may be a negative number, which indexes back from the end of the
+ * List. `v.set(-1, "value")` sets the last item in the List.
+ *
+ * If `index` larger than `size`, the returned List's `size` will be large
+ * enough to include the `index`.
+ *
+ *
+ * ```js
+ * const originalList = List([ 0 ]);
+ * // List [ 0 ]
+ * originalList.set(1, 1);
+ * // List [ 0, 1 ]
+ * originalList.set(0, 'overwritten');
+ * // List [ "overwritten" ]
+ * originalList.set(2, 2);
+ * // List [ 0, undefined, 2 ]
+ *
+ * List().set(50000, 'value').size;
+ * // 50001
+ * ```
+ *
+ * Note: `set` can be used in `withMutations`.
+ */
+ set(index: number, value: T): List;
+
+ /**
+ * Returns a new List which excludes this `index` and with a size 1 less
+ * than this List. Values at indices above `index` are shifted down by 1 to
+ * fill the position.
+ *
+ * This is synonymous with `list.splice(index, 1)`.
+ *
+ * `index` may be a negative number, which indexes back from the end of the
+ * List. `v.delete(-1)` deletes the last item in the List.
+ *
+ * Note: `delete` cannot be safely used in IE8
+ *
+ *
+ * ```js
+ * List([ 0, 1, 2, 3, 4 ]).delete(0);
+ * // List [ 1, 2, 3, 4 ]
+ * ```
+ *
+ * Since `delete()` re-indexes values, it produces a complete copy, which
+ * has `O(N)` complexity.
+ *
+ * Note: `delete` *cannot* be used in `withMutations`.
+ *
+ * @alias remove
+ */
+ delete(index: number): List;
+ remove(index: number): List;
+
+ /**
+ * Returns a new List with `value` at `index` with a size 1 more than this
+ * List. Values at indices above `index` are shifted over by 1.
+ *
+ * This is synonymous with `list.splice(index, 0, value)`.
+ *
+ *
+ * ```js
+ * List([ 0, 1, 2, 3, 4 ]).insert(6, 5)
+ * // List [ 0, 1, 2, 3, 4, 5 ]
+ * ```
+ *
+ * Since `insert()` re-indexes values, it produces a complete copy, which
+ * has `O(N)` complexity.
+ *
+ * Note: `insert` *cannot* be used in `withMutations`.
+ */
+ insert(index: number, value: T): List;
+
+ /**
+ * Returns a new List with 0 size and no values in constant time.
+ *
+ *
+ * ```js
+ * List([ 1, 2, 3, 4 ]).clear()
+ * // List []
+ * ```
+ *
+ * Note: `clear` can be used in `withMutations`.
+ */
+ clear(): List;
+
+ /**
+ * Returns a new List with the provided `values` appended, starting at this
+ * List's `size`.
+ *
+ *
+ * ```js
+ * List([ 1, 2, 3, 4 ]).push(5)
+ * // List [ 1, 2, 3, 4, 5 ]
+ * ```
+ *
+ * Note: `push` can be used in `withMutations`.
+ */
+ push(...values: Array): List;
+
+ /**
+ * Returns a new List with a size ones less than this List, excluding
+ * the last index in this List.
+ *
+ * Note: this differs from `Array#pop` because it returns a new
+ * List rather than the removed value. Use `last()` to get the last value
+ * in this List.
+ *
+ * ```js
+ * List([ 1, 2, 3, 4 ]).pop()
+ * // List[ 1, 2, 3 ]
+ * ```
+ *
+ * Note: `pop` can be used in `withMutations`.
+ */
+ pop(): List;
+
+ /**
+ * Returns a new List with the provided `values` prepended, shifting other
+ * values ahead to higher indices.
+ *
+ *
+ * ```js
+ * List([ 2, 3, 4]).unshift(1);
+ * // List [ 1, 2, 3, 4 ]
+ * ```
+ *
+ * Note: `unshift` can be used in `withMutations`.
+ */
+ unshift(...values: Array): List;
+
+ /**
+ * Returns a new List with a size ones less than this List, excluding
+ * the first index in this List, shifting all other values to a lower index.
+ *
+ * Note: this differs from `Array#shift` because it returns a new
+ * List rather than the removed value. Use `first()` to get the first
+ * value in this List.
+ *
+ *
+ * ```js
+ * List([ 0, 1, 2, 3, 4 ]).shift();
+ * // List [ 1, 2, 3, 4 ]
+ * ```
+ *
+ * Note: `shift` can be used in `withMutations`.
+ */
+ shift(): List;
+
+ /**
+ * Returns a new List with an updated value at `index` with the return
+ * value of calling `updater` with the existing value, or `notSetValue` if
+ * `index` was not set. If called with a single argument, `updater` is
+ * called with the List itself.
+ *
+ * `index` may be a negative number, which indexes back from the end of the
+ * List. `v.update(-1)` updates the last item in the List.
+ *
+ *
+ * ```js
+ * const list = List([ 'a', 'b', 'c' ])
+ * const result = list.update(2, val => val.toUpperCase())
+ * // List [ "a", "b", "C" ]
+ * ```
+ *
+ * This can be very useful as a way to "chain" a normal function into a
+ * sequence of methods. RxJS calls this "let" and lodash calls it "thru".
+ *
+ * For example, to sum a List after mapping and filtering:
+ *
+ *
+ * ```js
+ * function sum(collection) {
+ * return collection.reduce((sum, x) => sum + x, 0)
+ * }
+ *
+ * List([ 1, 2, 3 ])
+ * .map(x => x + 1)
+ * .filter(x => x % 2 === 0)
+ * .update(sum)
+ * // 6
+ * ```
+ *
+ * Note: `update(index)` can be used in `withMutations`.
+ *
+ * @see `Map#update`
+ */
+ update(index: number, notSetValue: T, updater: (value: T) => T): this;
+ update(index: number, updater: (value: T | undefined) => T): this;
+ update(updater: (value: this) => R): R;
+
+ /**
+ * Returns a new List with size `size`. If `size` is less than this
+ * List's size, the new List will exclude values at the higher indices.
+ * If `size` is greater than this List's size, the new List will have
+ * undefined values for the newly available indices.
+ *
+ * When building a new List and the final size is known up front, `setSize`
+ * used in conjunction with `withMutations` may result in the more
+ * performant construction.
+ */
+ setSize(size: number): List;
+
+ // Deep persistent changes
+
+ /**
+ * Returns a new List having set `value` at this `keyPath`. If any keys in
+ * `keyPath` do not exist, a new immutable Map will be created at that key.
+ *
+ * Index numbers are used as keys to determine the path to follow in
+ * the List.
+ *
+ *
+ * ```js
+ * const { List } = require('immutable')
+ * const list = List([ 0, 1, 2, List([ 3, 4 ])])
+ * list.setIn([3, 0], 999);
+ * // List [ 0, 1, 2, List [ 999, 4 ] ]
+ * ```
+ *
+ * Plain JavaScript Object or Arrays may be nested within an Immutable.js
+ * Collection, and setIn() can update those values as well, treating them
+ * immutably by creating new copies of those values with the changes applied.
+ *
+ *
+ * ```js
+ * const { List } = require('immutable')
+ * const list = List([ 0, 1, 2, { plain: 'object' }])
+ * list.setIn([3, 'plain'], 'value');
+ * // List([ 0, 1, 2, { plain: 'value' }])
+ * ```
+ *
+ * Note: `setIn` can be used in `withMutations`.
+ */
+ setIn(keyPath: Iterable, value: unknown): this;
+
+ /**
+ * Returns a new List having removed the value at this `keyPath`. If any
+ * keys in `keyPath` do not exist, no change will occur.
+ *
+ *
+ * ```js
+ * const { List } = require('immutable')
+ * const list = List([ 0, 1, 2, List([ 3, 4 ])])
+ * list.deleteIn([3, 0]);
+ * // List [ 0, 1, 2, List [ 4 ] ]
+ * ```
+ *
+ * Plain JavaScript Object or Arrays may be nested within an Immutable.js
+ * Collection, and removeIn() can update those values as well, treating them
+ * immutably by creating new copies of those values with the changes applied.
+ *
+ *
+ * ```js
+ * const { List } = require('immutable')
+ * const list = List([ 0, 1, 2, { plain: 'object' }])
+ * list.removeIn([3, 'plain']);
+ * // List([ 0, 1, 2, {}])
+ * ```
+ *
+ * Note: `deleteIn` *cannot* be safely used in `withMutations`.
+ *
+ * @alias removeIn
+ */
+ deleteIn(keyPath: Iterable): this;
+ removeIn(keyPath: Iterable): this;
+
+ /**
+ * Note: `updateIn` can be used in `withMutations`.
+ *
+ * @see `Map#updateIn`
+ */
+ updateIn(
+ keyPath: Iterable,
+ notSetValue: unknown,
+ updater: (value: unknown) => unknown
+ ): this;
+ updateIn(
+ keyPath: Iterable,
+ updater: (value: unknown) => unknown
+ ): this;
+
+ /**
+ * Note: `mergeIn` can be used in `withMutations`.
+ *
+ * @see `Map#mergeIn`
+ */
+ mergeIn(keyPath: Iterable, ...collections: Array): this;
+
+ /**
+ * Note: `mergeDeepIn` can be used in `withMutations`.
+ *
+ * @see `Map#mergeDeepIn`
+ */
+ mergeDeepIn(
+ keyPath: Iterable,
+ ...collections: Array
+ ): this;
+
+ // Transient changes
+
+ /**
+ * Note: Not all methods can be safely used on a mutable collection or within
+ * `withMutations`! Check the documentation for each method to see if it
+ * allows being used in `withMutations`.
+ *
+ * @see `Map#withMutations`
+ */
+ withMutations(mutator: (mutable: this) => unknown): this;
+
+ /**
+ * An alternative API for withMutations()
+ *
+ * Note: Not all methods can be safely used on a mutable collection or within
+ * `withMutations`! Check the documentation for each method to see if it
+ * allows being used in `withMutations`.
+ *
+ * @see `Map#asMutable`
+ */
+ asMutable(): this;
+
+ /**
+ * @see `Map#wasAltered`
+ */
+ wasAltered(): boolean;
+
+ /**
+ * @see `Map#asImmutable`
+ */
+ asImmutable(): this;
+
+ // Sequence algorithms
+
+ /**
+ * Returns a new List with other values or collections concatenated to this one.
+ *
+ * Note: `concat` can be used in `withMutations`.
+ *
+ * @alias merge
+ */
+ concat(...valuesOrCollections: Array | C>): List;
+ merge(...collections: Array>): List;
+
+ /**
+ * Returns a new List with values passed through a
+ * `mapper` function.
+ *
+ *
+ * ```js
+ * List([ 1, 2 ]).map(x => 10 * x)
+ * // List [ 10, 20 ]
+ * ```
+ */
+ map(
+ mapper: (value: T, key: number, iter: this) => M,
+ context?: unknown
+ ): List;
+
+ /**
+ * Flat-maps the List, returning a new List.
+ *
+ * Similar to `list.map(...).flatten(true)`.
+ */
+ flatMap(
+ mapper: (value: T, key: number, iter: this) => Iterable,
+ context?: unknown
+ ): List;
+
+ /**
+ * Returns a new List with only the values for which the `predicate`
+ * function returns true.
+ *
+ * Note: `filter()` always returns a new instance, even if it results in
+ * not filtering out any values.
+ */
+ filter(
+ predicate: (value: T, index: number, iter: this) => value is F,
+ context?: unknown
+ ): List;
+ filter(
+ predicate: (value: T, index: number, iter: this) => unknown,
+ context?: unknown
+ ): this;
+
+ /**
+ * Returns a List "zipped" with the provided collection.
+ *
+ * Like `zipWith`, but using the default `zipper`: creating an `Array`.
+ *
+ *
+ * ```js
+ * const a = List([ 1, 2, 3 ]);
+ * const b = List([ 4, 5, 6 ]);
+ * const c = a.zip(b); // List [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]
+ * ```
+ */
+ zip(other: Collection): List<[T, U]>;
+ zip(
+ other: Collection,
+ other2: Collection
+ ): List<[T, U, V]>;
+ zip(...collections: Array>): List;
+
+ /**
+ * Returns a List "zipped" with the provided collections.
+ *
+ * Unlike `zip`, `zipAll` continues zipping until the longest collection is
+ * exhausted. Missing values from shorter collections are filled with `undefined`.
+ *
+ *
+ * ```js
+ * const a = List([ 1, 2 ]);
+ * const b = List([ 3, 4, 5 ]);
+ * const c = a.zipAll(b); // List [ [ 1, 3 ], [ 2, 4 ], [ undefined, 5 ] ]
+ * ```
+ *
+ * Note: Since zipAll will return a collection as large as the largest
+ * input, some results may contain undefined values. TypeScript cannot
+ * account for these without cases (as of v2.5).
+ */
+ zipAll(other: Collection): List<[T, U]>;
+ zipAll(
+ other: Collection,
+ other2: Collection
+ ): List<[T, U, V]>;
+ zipAll(...collections: Array>): List;
+
+ /**
+ * Returns a List "zipped" with the provided collections by using a
+ * custom `zipper` function.
+ *
+ *
+ * ```js
+ * const a = List([ 1, 2, 3 ]);
+ * const b = List([ 4, 5, 6 ]);
+ * const c = a.zipWith((a, b) => a + b, b);
+ * // List [ 5, 7, 9 ]
+ * ```
+ */
+ zipWith(
+ zipper: (value: T, otherValue: U) => Z,
+ otherCollection: Collection
+ ): List;
+ zipWith(
+ zipper: (value: T, otherValue: U, thirdValue: V) => Z,
+ otherCollection: Collection,
+ thirdCollection: Collection
+ ): List;
+ zipWith(
+ zipper: (...values: Array) => Z,
+ ...collections: Array>
+ ): List;
+ }
+
+ /**
+ * Immutable Map is an unordered Collection.Keyed of (key, value) pairs with
+ * `O(log32 N)` gets and `O(log32 N)` persistent sets.
+ *
+ * Iteration order of a Map is undefined, however is stable. Multiple
+ * iterations of the same Map will iterate in the same order.
+ *
+ * Map's keys can be of any type, and use `Immutable.is` to determine key
+ * equality. This allows the use of any value (including NaN) as a key.
+ *
+ * Because `Immutable.is` returns equality based on value semantics, and
+ * Immutable collections are treated as values, any Immutable collection may
+ * be used as a key.
+ *
+ *
+ * ```js
+ * const { Map, List } = require('immutable');
+ * Map().set(List([ 1 ]), 'listofone').get(List([ 1 ]));
+ * // 'listofone'
+ * ```
+ *
+ * Any JavaScript object may be used as a key, however strict identity is used
+ * to evaluate key equality. Two similar looking objects will represent two
+ * different keys.
+ *
+ * Implemented by a hash-array mapped trie.
+ */
+ namespace Map {
+ /**
+ * True if the provided value is a Map
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * Map.isMap({}) // false
+ * Map.isMap(Map()) // true
+ * ```
+ */
+ function isMap(maybeMap: unknown): maybeMap is Map;
+
+ /**
+ * Creates a new Map from alternating keys and values
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * Map.of(
+ * 'key', 'value',
+ * 'numerical value', 3,
+ * 0, 'numerical key'
+ * )
+ * // Map { 0: "numerical key", "key": "value", "numerical value": 3 }
+ * ```
+ *
+ * @deprecated Use Map([ [ 'k', 'v' ] ]) or Map({ k: 'v' })
+ */
+ function of(...keyValues: Array): Map;
+ }
+
+ /**
+ * Creates a new Immutable Map.
+ *
+ * Created with the same key value pairs as the provided Collection.Keyed or
+ * JavaScript Object or expects a Collection of [K, V] tuple entries.
+ *
+ * Note: `Map` is a factory function and not a class, and does not use the
+ * `new` keyword during construction.
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * Map({ key: "value" })
+ * Map([ [ "key", "value" ] ])
+ * ```
+ *
+ * Keep in mind, when using JS objects to construct Immutable Maps, that
+ * JavaScript Object properties are always strings, even if written in a
+ * quote-less shorthand, while Immutable Maps accept keys of any type.
+ *
+ *
+ * ```js
+ * let obj = { 1: "one" }
+ * Object.keys(obj) // [ "1" ]
+ * assert.equal(obj["1"], obj[1]) // "one" === "one"
+ *
+ * let map = Map(obj)
+ * assert.notEqual(map.get("1"), map.get(1)) // "one" !== undefined
+ * ```
+ *
+ * Property access for JavaScript Objects first converts the key to a string,
+ * but since Immutable Map keys can be of any type the argument to `get()` is
+ * not altered.
+ */
+ function Map(collection?: Iterable<[K, V]>): Map;
+ function Map(obj: { [key: string]: V }): Map;
+ function Map(obj: { [P in K]?: V }): Map;
+
+ interface Map extends Collection.Keyed {
+ /**
+ * The number of entries in this Map.
+ */
+ readonly size: number;
+
+ // Persistent changes
+
+ /**
+ * Returns a new Map also containing the new key, value pair. If an equivalent
+ * key already exists in this Map, it will be replaced.
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * const originalMap = Map()
+ * const newerMap = originalMap.set('key', 'value')
+ * const newestMap = newerMap.set('key', 'newer value')
+ *
+ * originalMap
+ * // Map {}
+ * newerMap
+ * // Map { "key": "value" }
+ * newestMap
+ * // Map { "key": "newer value" }
+ * ```
+ *
+ * Note: `set` can be used in `withMutations`.
+ */
+ set(key: K, value: V): this;
+
+ /**
+ * Returns a new Map which excludes this `key`.
+ *
+ * Note: `delete` cannot be safely used in IE8, but is provided to mirror
+ * the ES6 collection API.
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * const originalMap = Map({
+ * key: 'value',
+ * otherKey: 'other value'
+ * })
+ * // Map { "key": "value", "otherKey": "other value" }
+ * originalMap.delete('otherKey')
+ * // Map { "key": "value" }
+ * ```
+ *
+ * Note: `delete` can be used in `withMutations`.
+ *
+ * @alias remove
+ */
+ delete(key: K): this;
+ remove(key: K): this;
+
+ /**
+ * Returns a new Map which excludes the provided `keys`.
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * const names = Map({ a: "Aaron", b: "Barry", c: "Connor" })
+ * names.deleteAll([ 'a', 'c' ])
+ * // Map { "b": "Barry" }
+ * ```
+ *
+ * Note: `deleteAll` can be used in `withMutations`.
+ *
+ * @alias removeAll
+ */
+ deleteAll(keys: Iterable): this;
+ removeAll(keys: Iterable): this;
+
+ /**
+ * Returns a new Map containing no keys or values.
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * Map({ key: 'value' }).clear()
+ * // Map {}
+ * ```
+ *
+ * Note: `clear` can be used in `withMutations`.
+ */
+ clear(): this;
+
+ /**
+ * Returns a new Map having updated the value at this `key` with the return
+ * value of calling `updater` with the existing value.
+ *
+ * Similar to: `map.set(key, updater(map.get(key)))`.
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * const aMap = Map({ key: 'value' })
+ * const newMap = aMap.update('key', value => value + value)
+ * // Map { "key": "valuevalue" }
+ * ```
+ *
+ * This is most commonly used to call methods on collections within a
+ * structure of data. For example, in order to `.push()` onto a nested `List`,
+ * `update` and `push` can be used together:
+ *
+ *
+ * ```js
+ * const aMap = Map({ nestedList: List([ 1, 2, 3 ]) })
+ * const newMap = aMap.update('nestedList', list => list.push(4))
+ * // Map { "nestedList": List [ 1, 2, 3, 4 ] }
+ * ```
+ *
+ * When a `notSetValue` is provided, it is provided to the `updater`
+ * function when the value at the key does not exist in the Map.
+ *
+ *
+ * ```js
+ * const aMap = Map({ key: 'value' })
+ * const newMap = aMap.update('noKey', 'no value', value => value + value)
+ * // Map { "key": "value", "noKey": "no valueno value" }
+ * ```
+ *
+ * However, if the `updater` function returns the same value it was called
+ * with, then no change will occur. This is still true if `notSetValue`
+ * is provided.
+ *
+ *
+ * ```js
+ * const aMap = Map({ apples: 10 })
+ * const newMap = aMap.update('oranges', 0, val => val)
+ * // Map { "apples": 10 }
+ * assert.strictEqual(newMap, map);
+ * ```
+ *
+ * For code using ES2015 or later, using `notSetValue` is discourged in
+ * favor of function parameter default values. This helps to avoid any
+ * potential confusion with identify functions as described above.
+ *
+ * The previous example behaves differently when written with default values:
+ *
+ *
+ * ```js
+ * const aMap = Map({ apples: 10 })
+ * const newMap = aMap.update('oranges', (val = 0) => val)
+ * // Map { "apples": 10, "oranges": 0 }
+ * ```
+ *
+ * If no key is provided, then the `updater` function return value is
+ * returned as well.
+ *
+ *
+ * ```js
+ * const aMap = Map({ key: 'value' })
+ * const result = aMap.update(aMap => aMap.get('key'))
+ * // "value"
+ * ```
+ *
+ * This can be very useful as a way to "chain" a normal function into a
+ * sequence of methods. RxJS calls this "let" and lodash calls it "thru".
+ *
+ * For example, to sum the values in a Map
+ *
+ *
+ * ```js
+ * function sum(collection) {
+ * return collection.reduce((sum, x) => sum + x, 0)
+ * }
+ *
+ * Map({ x: 1, y: 2, z: 3 })
+ * .map(x => x + 1)
+ * .filter(x => x % 2 === 0)
+ * .update(sum)
+ * // 6
+ * ```
+ *
+ * Note: `update(key)` can be used in `withMutations`.
+ */
+ update(key: K, notSetValue: V, updater: (value: V) => V): this;
+ update(key: K, updater: (value: V | undefined) => V): this;
+ update(updater: (value: this) => R): R;
+
+ /**
+ * Returns a new Map resulting from merging the provided Collections
+ * (or JS objects) into this Map. In other words, this takes each entry of
+ * each collection and sets it on this Map.
+ *
+ * Note: Values provided to `merge` are shallowly converted before being
+ * merged. No nested values are altered.
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * const one = Map({ a: 10, b: 20, c: 30 })
+ * const two = Map({ b: 40, a: 50, d: 60 })
+ * one.merge(two) // Map { "a": 50, "b": 40, "c": 30, "d": 60 }
+ * two.merge(one) // Map { "b": 20, "a": 10, "d": 60, "c": 30 }
+ * ```
+ *
+ * Note: `merge` can be used in `withMutations`.
+ *
+ * @alias concat
+ */
+ merge(
+ ...collections: Array>
+ ): Map;
+ merge(
+ ...collections: Array<{ [key: string]: C }>
+ ): Map;
+ concat(
+ ...collections: Array>
+ ): Map;
+ concat(
+ ...collections: Array<{ [key: string]: C }>
+ ): Map;
+
+ /**
+ * Like `merge()`, `mergeWith()` returns a new Map resulting from merging
+ * the provided Collections (or JS objects) into this Map, but uses the
+ * `merger` function for dealing with conflicts.
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * const one = Map({ a: 10, b: 20, c: 30 })
+ * const two = Map({ b: 40, a: 50, d: 60 })
+ * one.mergeWith((oldVal, newVal) => oldVal / newVal, two)
+ * // { "a": 0.2, "b": 0.5, "c": 30, "d": 60 }
+ * two.mergeWith((oldVal, newVal) => oldVal / newVal, one)
+ * // { "b": 2, "a": 5, "d": 60, "c": 30 }
+ * ```
+ *
+ * Note: `mergeWith` can be used in `withMutations`.
+ */
+ mergeWith(
+ merger: (oldVal: V, newVal: V, key: K) => V,
+ ...collections: Array | { [key: string]: V }>
+ ): this;
+
+ /**
+ * Like `merge()`, but when two compatible collections are encountered with
+ * the same key, it merges them as well, recursing deeply through the nested
+ * data. Two collections are considered to be compatible (and thus will be
+ * merged together) if they both fall into one of three categories: keyed
+ * (e.g., `Map`s, `Record`s, and objects), indexed (e.g., `List`s and
+ * arrays), or set-like (e.g., `Set`s). If they fall into separate
+ * categories, `mergeDeep` will replace the existing collection with the
+ * collection being merged in. This behavior can be customized by using
+ * `mergeDeepWith()`.
+ *
+ * Note: Indexed and set-like collections are merged using
+ * `concat()`/`union()` and therefore do not recurse.
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * const one = Map({ a: Map({ x: 10, y: 10 }), b: Map({ x: 20, y: 50 }) })
+ * const two = Map({ a: Map({ x: 2 }), b: Map({ y: 5 }), c: Map({ z: 3 }) })
+ * one.mergeDeep(two)
+ * // Map {
+ * // "a": Map { "x": 2, "y": 10 },
+ * // "b": Map { "x": 20, "y": 5 },
+ * // "c": Map { "z": 3 }
+ * // }
+ * ```
+ *
+ * Note: `mergeDeep` can be used in `withMutations`.
+ */
+ mergeDeep(
+ ...collections: Array | { [key: string]: V }>
+ ): this;
+
+ /**
+ * Like `mergeDeep()`, but when two non-collections or incompatible
+ * collections are encountered at the same key, it uses the `merger`
+ * function to determine the resulting value. Collections are considered
+ * incompatible if they fall into separate categories between keyed,
+ * indexed, and set-like.
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * const one = Map({ a: Map({ x: 10, y: 10 }), b: Map({ x: 20, y: 50 }) })
+ * const two = Map({ a: Map({ x: 2 }), b: Map({ y: 5 }), c: Map({ z: 3 }) })
+ * one.mergeDeepWith((oldVal, newVal) => oldVal / newVal, two)
+ * // Map {
+ * // "a": Map { "x": 5, "y": 10 },
+ * // "b": Map { "x": 20, "y": 10 },
+ * // "c": Map { "z": 3 }
+ * // }
+ * ```
+ *
+ * Note: `mergeDeepWith` can be used in `withMutations`.
+ */
+ mergeDeepWith(
+ merger: (oldVal: unknown, newVal: unknown, key: unknown) => unknown,
+ ...collections: Array | { [key: string]: V }>
+ ): this;
+
+ // Deep persistent changes
+
+ /**
+ * Returns a new Map having set `value` at this `keyPath`. If any keys in
+ * `keyPath` do not exist, a new immutable Map will be created at that key.
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * const originalMap = Map({
+ * subObject: Map({
+ * subKey: 'subvalue',
+ * subSubObject: Map({
+ * subSubKey: 'subSubValue'
+ * })
+ * })
+ * })
+ *
+ * const newMap = originalMap.setIn(['subObject', 'subKey'], 'ha ha!')
+ * // Map {
+ * // "subObject": Map {
+ * // "subKey": "ha ha!",
+ * // "subSubObject": Map { "subSubKey": "subSubValue" }
+ * // }
+ * // }
+ *
+ * const newerMap = originalMap.setIn(
+ * ['subObject', 'subSubObject', 'subSubKey'],
+ * 'ha ha ha!'
+ * )
+ * // Map {
+ * // "subObject": Map {
+ * // "subKey": "subvalue",
+ * // "subSubObject": Map { "subSubKey": "ha ha ha!" }
+ * // }
+ * // }
+ * ```
+ *
+ * Plain JavaScript Object or Arrays may be nested within an Immutable.js
+ * Collection, and setIn() can update those values as well, treating them
+ * immutably by creating new copies of those values with the changes applied.
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * const originalMap = Map({
+ * subObject: {
+ * subKey: 'subvalue',
+ * subSubObject: {
+ * subSubKey: 'subSubValue'
+ * }
+ * }
+ * })
+ *
+ * originalMap.setIn(['subObject', 'subKey'], 'ha ha!')
+ * // Map {
+ * // "subObject": {
+ * // subKey: "ha ha!",
+ * // subSubObject: { subSubKey: "subSubValue" }
+ * // }
+ * // }
+ * ```
+ *
+ * If any key in the path exists but cannot be updated (such as a primitive
+ * like number or a custom Object like Date), an error will be thrown.
+ *
+ * Note: `setIn` can be used in `withMutations`.
+ */
+ setIn(keyPath: Iterable, value: unknown): this;
+
+ /**
+ * Returns a new Map having removed the value at this `keyPath`. If any keys
+ * in `keyPath` do not exist, no change will occur.
+ *
+ * Note: `deleteIn` can be used in `withMutations`.
+ *
+ * @alias removeIn
+ */
+ deleteIn(keyPath: Iterable): this;
+ removeIn(keyPath: Iterable): this;
+
+ /**
+ * Returns a new Map having applied the `updater` to the entry found at the
+ * keyPath.
+ *
+ * This is most commonly used to call methods on collections nested within a
+ * structure of data. For example, in order to `.push()` onto a nested `List`,
+ * `updateIn` and `push` can be used together:
+ *
+ *
+ * ```js
+ * const { Map, List } = require('immutable')
+ * const map = Map({ inMap: Map({ inList: List([ 1, 2, 3 ]) }) })
+ * const newMap = map.updateIn(['inMap', 'inList'], list => list.push(4))
+ * // Map { "inMap": Map { "inList": List [ 1, 2, 3, 4 ] } }
+ * ```
+ *
+ * If any keys in `keyPath` do not exist, new Immutable `Map`s will
+ * be created at those keys. If the `keyPath` does not already contain a
+ * value, the `updater` function will be called with `notSetValue`, if
+ * provided, otherwise `undefined`.
+ *
+ *
+ * ```js
+ * const map = Map({ a: Map({ b: Map({ c: 10 }) }) })
+ * const newMap = map.updateIn(['a', 'b', 'c'], val => val * 2)
+ * // Map { "a": Map { "b": Map { "c": 20 } } }
+ * ```
+ *
+ * If the `updater` function returns the same value it was called with, then
+ * no change will occur. This is still true if `notSetValue` is provided.
+ *
+ *
+ * ```js
+ * const map = Map({ a: Map({ b: Map({ c: 10 }) }) })
+ * const newMap = map.updateIn(['a', 'b', 'x'], 100, val => val)
+ * // Map { "a": Map { "b": Map { "c": 10 } } }
+ * assert.strictEqual(newMap, aMap)
+ * ```
+ *
+ * For code using ES2015 or later, using `notSetValue` is discourged in
+ * favor of function parameter default values. This helps to avoid any
+ * potential confusion with identify functions as described above.
+ *
+ * The previous example behaves differently when written with default values:
+ *
+ *
+ * ```js
+ * const map = Map({ a: Map({ b: Map({ c: 10 }) }) })
+ * const newMap = map.updateIn(['a', 'b', 'x'], (val = 100) => val)
+ * // Map { "a": Map { "b": Map { "c": 10, "x": 100 } } }
+ * ```
+ *
+ * Plain JavaScript Object or Arrays may be nested within an Immutable.js
+ * Collection, and updateIn() can update those values as well, treating them
+ * immutably by creating new copies of those values with the changes applied.
+ *
+ *
+ * ```js
+ * const map = Map({ a: { b: { c: 10 } } })
+ * const newMap = map.updateIn(['a', 'b', 'c'], val => val * 2)
+ * // Map { "a": { b: { c: 20 } } }
+ * ```
+ *
+ * If any key in the path exists but cannot be updated (such as a primitive
+ * like number or a custom Object like Date), an error will be thrown.
+ *
+ * Note: `updateIn` can be used in `withMutations`.
+ */
+ updateIn(
+ keyPath: Iterable,
+ notSetValue: unknown,
+ updater: (value: unknown) => unknown
+ ): this;
+ updateIn(
+ keyPath: Iterable,
+ updater: (value: unknown) => unknown
+ ): this;
+
+ /**
+ * A combination of `updateIn` and `merge`, returning a new Map, but
+ * performing the merge at a point arrived at by following the keyPath.
+ * In other words, these two lines are equivalent:
+ *
+ * ```js
+ * map.updateIn(['a', 'b', 'c'], abc => abc.merge(y))
+ * map.mergeIn(['a', 'b', 'c'], y)
+ * ```
+ *
+ * Note: `mergeIn` can be used in `withMutations`.
+ */
+ mergeIn(keyPath: Iterable, ...collections: Array): this;
+
+ /**
+ * A combination of `updateIn` and `mergeDeep`, returning a new Map, but
+ * performing the deep merge at a point arrived at by following the keyPath.
+ * In other words, these two lines are equivalent:
+ *
+ * ```js
+ * map.updateIn(['a', 'b', 'c'], abc => abc.mergeDeep(y))
+ * map.mergeDeepIn(['a', 'b', 'c'], y)
+ * ```
+ *
+ * Note: `mergeDeepIn` can be used in `withMutations`.
+ */
+ mergeDeepIn(
+ keyPath: Iterable,
+ ...collections: Array
+ ): this;
+
+ // Transient changes
+
+ /**
+ * Every time you call one of the above functions, a new immutable Map is
+ * created. If a pure function calls a number of these to produce a final
+ * return value, then a penalty on performance and memory has been paid by
+ * creating all of the intermediate immutable Maps.
+ *
+ * If you need to apply a series of mutations to produce a new immutable
+ * Map, `withMutations()` creates a temporary mutable copy of the Map which
+ * can apply mutations in a highly performant manner. In fact, this is
+ * exactly how complex mutations like `merge` are done.
+ *
+ * As an example, this results in the creation of 2, not 4, new Maps:
+ *
+ *
+ * ```js
+ * const { Map } = require('immutable')
+ * const map1 = Map()
+ * const map2 = map1.withMutations(map => {
+ * map.set('a', 1).set('b', 2).set('c', 3)
+ * })
+ * assert.equal(map1.size, 0)
+ * assert.equal(map2.size, 3)
+ * ```
+ *
+ * Note: Not all methods can be used on a mutable collection or within
+ * `withMutations`! Read the documentation for each method to see if it
+ * is safe to use in `withMutations`.
+ */
+ withMutations(mutator: (mutable: this) => unknown): this;
+
+ /**
+ * Another way to avoid creation of intermediate Immutable maps is to create
+ * a mutable copy of this collection. Mutable copies *always* return `this`,
+ * and thus shouldn't be used for equality. Your function should never return
+ * a mutable copy of a collection, only use it internally to create a new
+ * collection.
+ *
+ * If possible, use `withMutations` to work with temporary mutable copies as
+ * it provides an easier to use API and considers many common optimizations.
+ *
+ * Note: if the collection is already mutable, `asMutable` returns itself.
+ *
+ * Note: Not all methods can be used on a mutable collection or within
+ * `withMutations`! Read the documentation for each method to see if it
+ * is safe to use in `withMutations`.
+ *
+ * @see `Map#asImmutable`
+ */
+ asMutable(): this;
+
+ /**
+ * Returns true if this is a mutable copy (see `asMutable()`) and mutative
+ * alterations have been applied.
+ *
+ * @see `Map#asMutable`
+ */
+ wasAltered(): boolean;
+
+ /**
+ * The yin to `asMutable`'s yang. Because it applies to mutable collections,
+ * this operation is *mutable* and may return itself (though may not
+ * return itself, i.e. if the result is an empty collection). Once
+ * performed, the original mutable copy must no longer be mutated since it
+ * may be the immutable result.
+ *
+ * If possible, use `withMutations` to work with temporary mutable copies as
+ * it provides an easier to use API and considers many common optimizations.
+ *
+ * @see `Map#asMutable`
+ */
+ asImmutable(): this;
+
+ // Sequence algorithms
+
+ /**
+ * Returns a new Map with values passed through a
+ * `mapper` function.
+ *
+ * Map({ a: 1, b: 2 }).map(x => 10 * x)
+ * // Map { a: 10, b: 20 }
+ */
+ map(
+ mapper: (value: V, key: K, iter: this) => M,
+ context?: unknown
+ ): Map;
+
+ /**
+ * @see Collection.Keyed.mapKeys
+ */
+ mapKeys(
+ mapper: (key: K, value: V, iter: this) => M,
+ context?: unknown
+ ): Map;
+
+ /**
+ * @see Collection.Keyed.mapEntries
+ */
+ mapEntries(
+ mapper: (
+ entry: [K, V],
+ index: number,
+ iter: this
+ ) => [KM, VM] | undefined,
+ context?: unknown
+ ): Map;
+
+ /**
+ * Flat-maps the Map, returning a new Map.
+ *
+ * Similar to `data.map(...).flatten(true)`.
+ */
+ flatMap(
+ mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>,
+ context?: unknown
+ ): Map;
+
+ /**
+ * Returns a new Map with only the entries for which the `predicate`
+ * function returns true.
+ *
+ * Note: `filter()` always returns a new instance, even if it results in
+ * not filtering out any values.
+ */
+ filter(
+ predicate: (value: V, key: K, iter: this) => value is F,
+ context?: unknown
+ ): Map;
+ filter(
+ predicate: (value: V, key: K, iter: this) => unknown,
+ context?: unknown
+ ): this;
+
+ /**
+ * @see Collection.Keyed.flip
+ */
+ flip(): Map;
+ }
+
+ /**
+ * A type of Map that has the additional guarantee that the iteration order of
+ * entries will be the order in which they were set().
+ *
+ * The iteration behavior of OrderedMap is the same as native ES6 Map and
+ * JavaScript Object.
+ *
+ * Note that `OrderedMap` are more expensive than non-ordered `Map` and may
+ * consume more memory. `OrderedMap#set` is amortized O(log32 N), but not
+ * stable.
+ */
+ namespace OrderedMap {
+ /**
+ * True if the provided value is an OrderedMap.
+ */
+ function isOrderedMap(
+ maybeOrderedMap: unknown
+ ): maybeOrderedMap is OrderedMap;
+ }
+
+ /**
+ * Creates a new Immutable OrderedMap.
+ *
+ * Created with the same key value pairs as the provided Collection.Keyed or
+ * JavaScript Object or expects a Collection of [K, V] tuple entries.
+ *
+ * The iteration order of key-value pairs provided to this constructor will
+ * be preserved in the OrderedMap.
+ *
+ * let newOrderedMap = OrderedMap({key: "value"})
+ * let newOrderedMap = OrderedMap([["key", "value"]])
+ *
+ * Note: `OrderedMap` is a factory function and not a class, and does not use
+ * the `new` keyword during construction.
+ */
+ function OrderedMap(collection?: Iterable<[K, V]>): OrderedMap;
+ function OrderedMap(obj: { [key: string]: V }): OrderedMap;
+
+ interface OrderedMap extends Map {
+ /**
+ * The number of entries in this OrderedMap.
+ */
+ readonly size: number;
+
+ /**
+ * Returns a new OrderedMap also containing the new key, value pair. If an
+ * equivalent key already exists in this OrderedMap, it will be replaced
+ * while maintaining the existing order.
+ *
+ *
+ * ```js
+ * const { OrderedMap } = require('immutable')
+ * const originalMap = OrderedMap({a:1, b:1, c:1})
+ * const updatedMap = originalMap.set('b', 2)
+ *
+ * originalMap
+ * // OrderedMap {a: 1, b: 1, c: 1}
+ * updatedMap
+ * // OrderedMap {a: 1, b: 2, c: 1}
+ * ```
+ *
+ * Note: `set` can be used in `withMutations`.
+ */
+ set(key: K, value: V): this;
+
+ /**
+ * Returns a new OrderedMap resulting from merging the provided Collections
+ * (or JS objects) into this OrderedMap. In other words, this takes each
+ * entry of each collection and sets it on this OrderedMap.
+ *
+ * Note: Values provided to `merge` are shallowly converted before being
+ * merged. No nested values are altered.
+ *
+ *
+ * ```js
+ * const { OrderedMap } = require('immutable')
+ * const one = OrderedMap({ a: 10, b: 20, c: 30 })
+ * const two = OrderedMap({ b: 40, a: 50, d: 60 })
+ * one.merge(two) // OrderedMap { "a": 50, "b": 40, "c": 30, "d": 60 }
+ * two.merge(one) // OrderedMap { "b": 20, "a": 10, "d": 60, "c": 30 }
+ * ```
+ *
+ * Note: `merge` can be used in `withMutations`.
+ *
+ * @alias concat
+ */
+ merge(
+ ...collections: Array>
+ ): OrderedMap;
+ merge(
+ ...collections: Array<{ [key: string]: C }>
+ ): OrderedMap;
+ concat(
+ ...collections: Array>
+ ): OrderedMap;
+ concat(
+ ...collections: Array<{ [key: string]: C }>
+ ): OrderedMap;
+
+ // Sequence algorithms
+
+ /**
+ * Returns a new OrderedMap with values passed through a
+ * `mapper` function.
+ *
+ * OrderedMap({ a: 1, b: 2 }).map(x => 10 * x)
+ * // OrderedMap { "a": 10, "b": 20 }
+ *
+ * Note: `map()` always returns a new instance, even if it produced the same
+ * value at every step.
+ */
+ map(
+ mapper: (value: V, key: K, iter: this) => M,
+ context?: unknown
+ ): OrderedMap;
+
+ /**
+ * @see Collection.Keyed.mapKeys
+ */
+ mapKeys(
+ mapper: (key: K, value: V, iter: this) => M,
+ context?: unknown
+ ): OrderedMap;
+
+ /**
+ * @see Collection.Keyed.mapEntries
+ */
+ mapEntries(
+ mapper: (
+ entry: [K, V],
+ index: number,
+ iter: this
+ ) => [KM, VM] | undefined,
+ context?: unknown
+ ): OrderedMap;
+
+ /**
+ * Flat-maps the OrderedMap, returning a new OrderedMap.
+ *
+ * Similar to `data.map(...).flatten(true)`.
+ */
+ flatMap(
+ mapper: (value: V, key: K, iter: this) => Iterable<[KM, VM]>,
+ context?: unknown
+ ): OrderedMap;
+
+ /**
+ * Returns a new OrderedMap with only the entries for which the `predicate`
+ * function returns true.
+ *
+ * Note: `filter()` always returns a new instance, even if it results in
+ * not filtering out any values.
+ */
+ filter(
+ predicate: (value: V, key: K, iter: this) => value is F,
+ context?: unknown
+ ): OrderedMap;
+ filter(
+ predicate: (value: V, key: K, iter: this) => unknown,
+ context?: unknown
+ ): this;
+
+ /**
+ * @see Collection.Keyed.flip
+ */
+ flip(): OrderedMap;
+ }
+
+ /**
+ * A Collection of unique values with `O(log32 N)` adds and has.
+ *
+ * When iterating a Set, the entries will be (value, value) pairs. Iteration
+ * order of a Set is undefined, however is stable. Multiple iterations of the
+ * same Set will iterate in the same order.
+ *
+ * Set values, like Map keys, may be of any type. Equality is determined using
+ * `Immutable.is`, enabling Sets to uniquely include other Immutable
+ * collections, custom value types, and NaN.
+ */
+ namespace Set {
+ /**
+ * True if the provided value is a Set
+ */
+ function isSet(maybeSet: unknown): maybeSet is Set;
+
+ /**
+ * Creates a new Set containing `values`.
+ */
+ function of(...values: Array): Set;
+
+ /**
+ * `Set.fromKeys()` creates a new immutable Set containing the keys from
+ * this Collection or JavaScript Object.
+ */
+ function fromKeys(iter: Collection): Set;
+ function fromKeys(obj: { [key: string]: unknown }): Set;
+
+ /**
+ * `Set.intersect()` creates a new immutable Set that is the intersection of
+ * a collection of other sets.
+ *
+ * ```js
+ * const { Set } = require('immutable')
+ * const intersected = Set.intersect([
+ * Set([ 'a', 'b', 'c' ])
+ * Set([ 'c', 'a', 't' ])
+ * ])
+ * // Set [ "a", "c" ]
+ * ```
+ */
+ function intersect(sets: Iterable>): Set;
+
+ /**
+ * `Set.union()` creates a new immutable Set that is the union of a
+ * collection of other sets.
+ *
+ * ```js
+ * const { Set } = require('immutable')
+ * const unioned = Set.union([
+ * Set([ 'a', 'b', 'c' ])
+ * Set([ 'c', 'a', 't' ])
+ * ])
+ * // Set [ "a", "b", "c", "t" ]
+ * ```
+ */
+ function union(sets: Iterable>): Set;
+ }
+
+ /**
+ * Create a new immutable Set containing the values of the provided
+ * collection-like.
+ *
+ * Note: `Set` is a factory function and not a class, and does not use the
+ * `new` keyword during construction.
+ */
+ function Set(collection?: Iterable | ArrayLike): Set;
+
+ interface Set extends Collection.Set {
+ /**
+ * The number of items in this Set.
+ */
+ readonly size: number;
+
+ // Persistent changes
+
+ /**
+ * Returns a new Set which also includes this value.
+ *
+ * Note: `add` can be used in `withMutations`.
+ */
+ add(value: T): this;
+
+ /**
+ * Returns a new Set which excludes this value.
+ *
+ * Note: `delete` can be used in `withMutations`.
+ *
+ * Note: `delete` **cannot** be safely used in IE8, use `remove` if
+ * supporting old browsers.
+ *
+ * @alias remove
+ */
+ delete(value: T): this;
+ remove(value: T): this;
+
+ /**
+ * Returns a new Set containing no values.
+ *
+ * Note: `clear` can be used in `withMutations`.
+ */
+ clear(): this;
+
+ /**
+ * Returns a Set including any value from `collections` that does not already
+ * exist in this Set.
+ *
+ * Note: `union` can be used in `withMutations`.
+ * @alias merge
+ * @alias concat
+ */
+ union(...collections: Array>): Set;
+ merge(...collections: Array>): Set;
+ concat(...collections: Array>): Set;
+
+ /**
+ * Returns a Set which has removed any values not also contained
+ * within `collections`.
+ *
+ * Note: `intersect` can be used in `withMutations`.
+ */
+ intersect(...collections: Array>): this;
+
+ /**
+ * Returns a Set excluding any values contained within `collections`.
+ *
+ *
+ * ```js
+ * const { OrderedSet } = require('immutable')
+ * OrderedSet([ 1, 2, 3 ]).subtract([1, 3])
+ * // OrderedSet [2]
+ * ```
+ *
+ * Note: `subtract` can be used in `withMutations`.
+ */
+ subtract(...collections: Array>): this;
+
+ // Transient changes
+
+ /**
+ * Note: Not all methods can be used on a mutable collection or within
+ * `withMutations`! Check the documentation for each method to see if it
+ * mentions being safe to use in `withMutations`.
+ *
+ * @see `Map#withMutations`
+ */
+ withMutations(mutator: (mutable: this) => unknown): this;
+
+ /**
+ * Note: Not all methods can be used on a mutable collection or within
+ * `withMutations`! Check the documentation for each method to see if it
+ * mentions being safe to use in `withMutations`.
+ *
+ * @see `Map#asMutable`
+ */
+ asMutable(): this;
+
+ /**
+ * @see `Map#wasAltered`
+ */
+ wasAltered(): boolean;
+
+ /**
+ * @see `Map#asImmutable`
+ */
+ asImmutable(): this;
+
+ // Sequence algorithms
+
+ /**
+ * Returns a new Set with values passed through a
+ * `mapper` function.
+ *
+ * Set([1,2]).map(x => 10 * x)
+ * // Set [10,20]
+ */
+ map(
+ mapper: (value: T, key: T, iter: this) => M,
+ context?: unknown
+ ): Set;
+
+ /**
+ * Flat-maps the Set, returning a new Set.
+ *
+ * Similar to `set.map(...).flatten(true)`.
+ */
+ flatMap(
+ mapper: (value: T, key: T, iter: this) => Iterable,
+ context?: unknown
+ ): Set;
+
+ /**
+ * Returns a new Set with only the values for which the `predicate`
+ * function returns true.
+ *
+ * Note: `filter()` always returns a new instance, even if it results in
+ * not filtering out any values.
+ */
+ filter(
+ predicate: (value: T, key: T, iter: this) => value is F,
+ context?: unknown
+ ): Set;
+ filter(
+ predicate: (value: T, key: T, iter: this) => unknown,
+ context?: unknown
+ ): this;
+ }
+
+ /**
+ * A type of Set that has the additional guarantee that the iteration order of
+ * values will be the order in which they were `add`ed.
+ *
+ * The iteration behavior of OrderedSet is the same as native ES6 Set.
+ *
+ * Note that `OrderedSet` are more expensive than non-ordered `Set` and may
+ * consume more memory. `OrderedSet#add` is amortized O(log32 N), but not
+ * stable.
+ */
+ namespace OrderedSet {
+ /**
+ * True if the provided value is an OrderedSet.
+ */
+ function isOrderedSet(maybeOrderedSet: unknown): boolean;
+
+ /**
+ * Creates a new OrderedSet containing `values`.
+ */
+ function of(...values: Array): OrderedSet;
+
+ /**
+ * `OrderedSet.fromKeys()` creates a new immutable OrderedSet containing
+ * the keys from this Collection or JavaScript Object.
+ */
+ function fromKeys(iter: Collection): OrderedSet;
+ function fromKeys(obj: { [key: string]: unknown }): OrderedSet;
+ }
+
+ /**
+ * Create a new immutable OrderedSet containing the values of the provided
+ * collection-like.
+ *
+ * Note: `OrderedSet` is a factory function and not a class, and does not use
+ * the `new` keyword during construction.
+ */
+ function OrderedSet(
+ collection?: Iterable | ArrayLike
+ ): OrderedSet;
+
+ interface OrderedSet extends Set {
+ /**
+ * The number of items in this OrderedSet.
+ */
+ readonly size: number;
+
+ /**
+ * Returns an OrderedSet including any value from `collections` that does
+ * not already exist in this OrderedSet.
+ *
+ * Note: `union` can be used in `withMutations`.
+ * @alias merge
+ * @alias concat
+ */
+ union(...collections: Array>): OrderedSet;
+ merge(...collections: Array>): OrderedSet;
+ concat(...collections: Array>): OrderedSet;
+
+ // Sequence algorithms
+
+ /**
+ * Returns a new Set with values passed through a
+ * `mapper` function.
+ *
+ * OrderedSet([ 1, 2 ]).map(x => 10 * x)
+ * // OrderedSet [10, 20]
+ */
+ map(
+ mapper: (value: T, key: T, iter: this) => M,
+ context?: unknown
+ ): OrderedSet;
+
+ /**
+ * Flat-maps the OrderedSet, returning a new OrderedSet.
+ *
+ * Similar to `set.map(...).flatten(true)`.
+ */
+ flatMap(
+ mapper: (value: T, key: T, iter: this) => Iterable,
+ context?: unknown
+ ): OrderedSet;
+
+ /**
+ * Returns a new OrderedSet with only the values for which the `predicate`
+ * function returns true.
+ *
+ * Note: `filter()` always returns a new instance, even if it results in
+ * not filtering out any values.
+ */
+ filter(
+ predicate: (value: T, key: T, iter: this) => value is F,
+ context?: unknown
+ ): OrderedSet;
+ filter(
+ predicate: (value: T, key: T, iter: this) => unknown,
+ context?: unknown
+ ): this;
+
+ /**
+ * Returns an OrderedSet of the same type "zipped" with the provided
+ * collections.
+ *
+ * Like `zipWith`, but using the default `zipper`: creating an `Array`.
+ *
+ * ```js
+ * const a = OrderedSet([ 1, 2, 3 ])
+ * const b = OrderedSet([ 4, 5, 6 ])
+ * const c = a.zip(b)
+ * // OrderedSet [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]
+ * ```
+ */
+ zip(other: Collection): OrderedSet<[T, U]>;
+ zip(
+ other1: Collection,
+ other2: Collection
+ ): OrderedSet<[T, U, V]>;
+ zip(
+ ...collections: Array>
+ ): OrderedSet;
+
+ /**
+ * Returns a OrderedSet of the same type "zipped" with the provided
+ * collections.
+ *
+ * Unlike `zip`, `zipAll` continues zipping until the longest collection is
+ * exhausted. Missing values from shorter collections are filled with `undefined`.
+ *
+ * ```js
+ * const a = OrderedSet([ 1, 2 ]);
+ * const b = OrderedSet([ 3, 4, 5 ]);
+ * const c = a.zipAll(b); // OrderedSet [ [ 1, 3 ], [ 2, 4 ], [ undefined, 5 ] ]
+ * ```
+ *
+ * Note: Since zipAll will return a collection as large as the largest
+ * input, some results may contain undefined values. TypeScript cannot
+ * account for these without cases (as of v2.5).
+ */
+ zipAll(other: Collection): OrderedSet<[T, U]>;
+ zipAll(
+ other1: Collection,
+ other2: Collection
+ ): OrderedSet<[T, U, V]>;
+ zipAll(
+ ...collections: Array>
+ ): OrderedSet;
+
+ /**
+ * Returns an OrderedSet of the same type "zipped" with the provided
+ * collections by using a custom `zipper` function.
+ *
+ * @see Seq.Indexed.zipWith
+ */
+ zipWith(
+ zipper: (value: T, otherValue: U) => Z,
+ otherCollection: Collection
+ ): OrderedSet;
+ zipWith(
+ zipper: (value: T, otherValue: U, thirdValue: V) => Z,
+ otherCollection: Collection,
+ thirdCollection: Collection
+ ): OrderedSet;
+ zipWith(
+ zipper: (...values: Array) => Z,
+ ...collections: Array>
+ ): OrderedSet;
+ }
+
+ /**
+ * Stacks are indexed collections which support very efficient O(1) addition
+ * and removal from the front using `unshift(v)` and `shift()`.
+ *
+ * For familiarity, Stack also provides `push(v)`, `pop()`, and `peek()`, but
+ * be aware that they also operate on the front of the list, unlike List or
+ * a JavaScript Array.
+ *
+ * Note: `reverse()` or any inherent reverse traversal (`reduceRight`,
+ * `lastIndexOf`, etc.) is not efficient with a Stack.
+ *
+ * Stack is implemented with a Single-Linked List.
+ */
+ namespace Stack {
+ /**
+ * True if the provided value is a Stack
+ */
+ function isStack(maybeStack: unknown): maybeStack is Stack;
+
+ /**
+ * Creates a new Stack containing `values`.
+ */
+ function of(...values: Array