diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 00000000..84a16735
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,840 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "acorn": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
+ "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA=="
+ },
+ "acorn-jsx": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
+ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg=="
+ },
+ "ajv": {
+ "version": "6.10.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
+ "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "eslint": {
+ "version": "5.16.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz",
+ "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.9.1",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^4.0.3",
+ "eslint-utils": "^1.3.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^5.0.1",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^5.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^6.2.2",
+ "js-yaml": "^3.13.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.11",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.1",
+ "semver": "^5.5.1",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "^2.0.1",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz",
+ "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q=="
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ=="
+ },
+ "espree": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+ "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
+ "requires": {
+ "acorn": "^6.0.7",
+ "acorn-jsx": "^5.0.0",
+ "eslint-visitor-keys": "^1.0.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="
+ },
+ "external-editor": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
+ "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+ "requires": {
+ "flat-cache": "^2.0.1"
+ }
+ },
+ "flat-cache": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+ "requires": {
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ }
+ },
+ "flatted": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz",
+ "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg=="
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
+ },
+ "glob": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
+ },
+ "import-fresh": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz",
+ "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==",
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
+ "inquirer": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz",
+ "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==",
+ "requires": {
+ "ansi-escapes": "^3.2.0",
+ "chalk": "^2.4.2",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^2.0.0",
+ "lodash": "^4.17.11",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.4.0",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^5.1.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ },
+ "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg=="
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw=="
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "rxjs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz",
+ "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==",
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "semver": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+ "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "table": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.4.0.tgz",
+ "integrity": "sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw==",
+ "requires": {
+ "ajv": "^6.9.1",
+ "lodash": "^4.17.11",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "tslib": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
+ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ=="
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ }
+ }
+}
diff --git a/src/Yavsc/.eslintrc.json b/src/Yavsc/.eslintrc.json
new file mode 100644
index 00000000..e9ba81ed
--- /dev/null
+++ b/src/Yavsc/.eslintrc.json
@@ -0,0 +1,309 @@
+{
+ "env": {
+ "browser": true,
+ "es6": true
+ },
+ "extends": "eslint:recommended",
+ "globals": {
+ "Atomics": "readonly",
+ "SharedArrayBuffer": "readonly"
+ },
+ "parserOptions": {
+ "ecmaVersion": 2018,
+ "sourceType": "module"
+ },
+ "rules": {
+ "accessor-pairs": "error",
+ "array-bracket-newline": "error",
+ "array-bracket-spacing": [
+ "error",
+ "never"
+ ],
+ "array-callback-return": "error",
+ "array-element-newline": "off",
+ "arrow-body-style": "error",
+ "arrow-parens": "error",
+ "arrow-spacing": "error",
+ "block-scoped-var": "error",
+ "block-spacing": [
+ "error",
+ "always"
+ ],
+ "brace-style": [
+ "error",
+ "1tbs",
+ {
+ "allowSingleLine": true
+ }
+ ],
+ "callback-return": "off",
+ "camelcase": "error",
+ "capitalized-comments": "off",
+ "class-methods-use-this": "error",
+ "comma-dangle": "error",
+ "comma-spacing": [
+ "error",
+ {
+ "after": true,
+ "before": false
+ }
+ ],
+ "comma-style": [
+ "error",
+ "last"
+ ],
+ "complexity": "off",
+ "computed-property-spacing": [
+ "error",
+ "never"
+ ],
+ "consistent-return": "off",
+ "consistent-this": "off",
+ "curly": "off",
+ "default-case": "error",
+ "dot-location": [
+ "error",
+ "property"
+ ],
+ "dot-notation": "error",
+ "eol-last": "error",
+ "eqeqeq": "off",
+ "func-call-spacing": "error",
+ "func-name-matching": "error",
+ "func-names": "off",
+ "func-style": "off",
+ "function-paren-newline": "error",
+ "generator-star-spacing": "error",
+ "global-require": "error",
+ "guard-for-in": "error",
+ "handle-callback-err": "error",
+ "id-blacklist": "error",
+ "id-length": "off",
+ "id-match": "error",
+ "implicit-arrow-linebreak": "error",
+ "indent": "off",
+ "indent-legacy": "off",
+ "init-declarations": "off",
+ "jsx-quotes": "error",
+ "key-spacing": "off",
+ "keyword-spacing": [
+ "error",
+ {
+ "after": true,
+ "before": true
+ }
+ ],
+ "line-comment-position": "off",
+ "linebreak-style": [
+ "error",
+ "unix"
+ ],
+ "lines-around-comment": "error",
+ "lines-around-directive": "off",
+ "lines-between-class-members": "error",
+ "max-classes-per-file": "error",
+ "max-depth": "error",
+ "max-len": "off",
+ "max-lines": "off",
+ "max-lines-per-function": "off",
+ "max-nested-callbacks": "error",
+ "max-params": "off",
+ "max-statements": "off",
+ "max-statements-per-line": "off",
+ "multiline-comment-style": "off",
+ "multiline-ternary": "off",
+ "new-parens": "error",
+ "newline-after-var": "off",
+ "newline-before-return": "off",
+ "newline-per-chained-call": "off",
+ "no-alert": "error",
+ "no-array-constructor": "error",
+ "no-async-promise-executor": "error",
+ "no-await-in-loop": "error",
+ "no-bitwise": "off",
+ "no-buffer-constructor": "error",
+ "no-caller": "error",
+ "no-catch-shadow": "error",
+ "no-confusing-arrow": "error",
+ "no-continue": "error",
+ "no-div-regex": "error",
+ "no-duplicate-imports": "error",
+ "no-else-return": "error",
+ "no-empty-function": "error",
+ "no-eq-null": "off",
+ "no-eval": "error",
+ "no-extend-native": "error",
+ "no-extra-bind": "error",
+ "no-extra-label": "error",
+ "no-extra-parens": "off",
+ "no-floating-decimal": "error",
+ "no-implicit-globals": "error",
+ "no-implied-eval": "error",
+ "no-inline-comments": "off",
+ "no-inner-declarations": [
+ "error",
+ "functions"
+ ],
+ "no-invalid-this": "off",
+ "no-iterator": "error",
+ "no-label-var": "error",
+ "no-labels": "error",
+ "no-lone-blocks": "error",
+ "no-lonely-if": "error",
+ "no-loop-func": "error",
+ "no-magic-numbers": "off",
+ "no-misleading-character-class": "error",
+ "no-mixed-operators": "off",
+ "no-mixed-requires": "error",
+ "no-multi-assign": "off",
+ "no-multi-spaces": "off",
+ "no-multi-str": "error",
+ "no-multiple-empty-lines": "error",
+ "no-native-reassign": "error",
+ "no-negated-condition": "error",
+ "no-negated-in-lhs": "error",
+ "no-nested-ternary": "off",
+ "no-new": "error",
+ "no-new-func": "error",
+ "no-new-object": "error",
+ "no-new-require": "error",
+ "no-new-wrappers": "error",
+ "no-octal-escape": "error",
+ "no-param-reassign": "off",
+ "no-path-concat": "error",
+ "no-plusplus": "off",
+ "no-process-env": "error",
+ "no-process-exit": "error",
+ "no-proto": "error",
+ "no-prototype-builtins": "error",
+ "no-restricted-globals": "error",
+ "no-restricted-imports": "error",
+ "no-restricted-modules": "error",
+ "no-restricted-properties": "error",
+ "no-restricted-syntax": "error",
+ "no-return-assign": [
+ "error",
+ "except-parens"
+ ],
+ "no-return-await": "error",
+ "no-script-url": "error",
+ "no-self-compare": "error",
+ "no-sequences": "error",
+ "no-shadow": "off",
+ "no-shadow-restricted-names": "error",
+ "no-spaced-func": "error",
+ "no-sync": "error",
+ "no-tabs": "error",
+ "no-template-curly-in-string": "error",
+ "no-ternary": "off",
+ "no-throw-literal": "error",
+ "no-trailing-spaces": "error",
+ "no-undef-init": "error",
+ "no-undefined": "off",
+ "no-unmodified-loop-condition": "error",
+ "no-unneeded-ternary": "error",
+ "no-unused-expressions": "off",
+ "no-use-before-define": "off",
+ "no-useless-call": "error",
+ "no-useless-catch": "error",
+ "no-useless-computed-key": "error",
+ "no-useless-concat": "error",
+ "no-useless-constructor": "error",
+ "no-useless-rename": "error",
+ "no-useless-return": "error",
+ "no-var": "off",
+ "no-void": "error",
+ "no-warning-comments": "error",
+ "no-whitespace-before-property": "error",
+ "no-with": "error",
+ "nonblock-statement-body-position": "error",
+ "object-curly-newline": "error",
+ "object-curly-spacing": [
+ "error",
+ "always"
+ ],
+ "object-shorthand": "off",
+ "one-var": "off",
+ "one-var-declaration-per-line": "error",
+ "operator-assignment": [
+ "error",
+ "always"
+ ],
+ "operator-linebreak": "off",
+ "padded-blocks": "off",
+ "padding-line-between-statements": "error",
+ "prefer-arrow-callback": "off",
+ "prefer-const": "error",
+ "prefer-destructuring": "off",
+ "prefer-named-capture-group": "off",
+ "prefer-numeric-literals": "error",
+ "prefer-object-spread": "error",
+ "prefer-promise-reject-errors": "error",
+ "prefer-reflect": "off",
+ "prefer-rest-params": "off",
+ "prefer-spread": "error",
+ "prefer-template": "off",
+ "quote-props": "off",
+ "quotes": [
+ "error",
+ "single"
+ ],
+ "radix": [
+ "error",
+ "always"
+ ],
+ "require-atomic-updates": "error",
+ "require-await": "error",
+ "require-jsdoc": "off",
+ "require-unicode-regexp": "off",
+ "rest-spread-spacing": "error",
+ "semi": "off",
+ "semi-spacing": [
+ "error",
+ {
+ "after": true,
+ "before": false
+ }
+ ],
+ "semi-style": [
+ "error",
+ "last"
+ ],
+ "sort-imports": "error",
+ "sort-keys": "off",
+ "sort-vars": "error",
+ "space-before-blocks": "error",
+ "space-before-function-paren": "off",
+ "space-in-parens": [
+ "error",
+ "never"
+ ],
+ "space-infix-ops": "error",
+ "space-unary-ops": "error",
+ "spaced-comment": "off",
+ "strict": "off",
+ "switch-colon-spacing": [
+ "error",
+ {
+ "after": true,
+ "before": false
+ }
+ ],
+ "symbol-description": "error",
+ "template-curly-spacing": "error",
+ "template-tag-spacing": "error",
+ "unicode-bom": [
+ "error",
+ "never"
+ ],
+ "valid-jsdoc": "error",
+ "vars-on-top": "off",
+ "wrap-iife": "off",
+ "wrap-regex": "off",
+ "yield-star-spacing": "error",
+ "yoda": [
+ "error",
+ "never"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/Yavsc/Dockerfile b/src/Yavsc/Dockerfile
deleted file mode 100644
index a71646c2..00000000
--- a/src/Yavsc/Dockerfile
+++ /dev/null
@@ -1,11 +0,0 @@
-FROM microsoft/aspnet:1.0.0-rc1-update1
-
-RUN printf "deb http://ftp.us.debian.org/debian jessie main\n" >> /etc/apt/sources.list
-RUN apt-get -qq update && apt-get install -qqy sqlite3 libsqlite3-dev && rm -rf /var/lib/apt/lists/*
-
-COPY . /app
-WORKDIR /app
-RUN ["dnu", "restore"]
-
-EXPOSE 5001/tcp
-ENTRYPOINT ["dnx", "-p", "project.json", "web"]
diff --git a/src/Yavsc/Makefile b/src/Yavsc/Makefile
index d22cf204..3bc8ff9b 100644
--- a/src/Yavsc/Makefile
+++ b/src/Yavsc/Makefile
@@ -5,9 +5,14 @@ HOSTADMIN=root
ASPNET_LOG_LEVEL=debug
SOURCE_DIR=$(HOME)/workspace/yavsc
MAKEFILE_DIR=$(SOURCE_DIR)/scripts/build/make
+
include $(MAKEFILE_DIR)/versioning.mk
include $(MAKEFILE_DIR)/dnx.mk
+MINJS=wwwroot/js/bootstrap.min.js wwwroot/js/input-lib.min.js wwwroot/js/jquery.signalR-2.2.1.min.js wwwroot/js/quill.min.js wwwroot/js/chat.min.js wwwroot/js/jquery-2.2.4.min.js wwwroot/js/jquery-ui.min.js wwwroot/js/showdown.min.js wwwroot/js/comment.min.js wwwroot/js/jquery-3.2.1.min.js wwwroot/js/md-helpers.min.js wwwroot/js/site.min.js wwwroot/js/dropzone.min.js wwwroot/js/jquery-migrate-3.0.0.min.js wwwroot/js/parallax.min.js wwwroot/js/str.min.js wwwroot/js/google-geoloc.min.js wwwroot/js/jquery.min.js wwwroot/js/paypalbutton.min.js wwwroot/js/to-markdown.min.js
+
+MINCSS=wwwroot/css/coiffure.min.css wwwroot/css/dev.min.css wwwroot/css/freespeech.min.css wwwroot/css/yavsc.min.css wwwroot/css/default.min.css wwwroot/css/font-awesome.min.css wwwroot/css/lua.min.css wwwroot/css/yavscpre.min.css wwwroot/css/clear/site.min.css wwwroot/css/main/bootstrap.min.css wwwroot/css/main/jquery-ui.min.css wwwroot/css/main/site.min.css wwwroot/css/dark/site.min.css wwwroot/css/main/dropzone.min.css wwwroot/css/main/quill.snow.min.css
+
web: project.lock.json
ASPNET_LOG_LEVEL=$(ASPNET_LOG_LEVEL) ASPNET_ENV=$(ASPNET_ENV) dnx web --configuration=$(CONFIGURATION)
@@ -45,3 +50,15 @@ else
git status
endif
+%.min.js: %.js
+ jsmin < $^ > $@
+
+%.min.css: %.css
+ jsmin < $^ > $@
+
+minJs: $(MINJS)
+
+minCss: $(MINCSS)
+
+minify: minCss minJs
+
diff --git a/src/Yavsc/Views/Shared/_Layout.cshtml b/src/Yavsc/Views/Shared/_Layout.cshtml
index a5afa3c2..41c17b7a 100644
--- a/src/Yavsc/Views/Shared/_Layout.cshtml
+++ b/src/Yavsc/Views/Shared/_Layout.cshtml
@@ -46,7 +46,7 @@
.");}};if(typeof _pageWindow.on=="function"){_pageWindow.on("load",function(){_pageLoaded=true;});}
+else{_pageWindow.load(function(){_pageLoaded=true;});}
+function validateTransport(requestedTransport,connection){if($.isArray(requestedTransport)){for(var i=requestedTransport.length-1;i>=0;i--){var transport=requestedTransport[i];if($.type(transport)!=="string"||!signalR.transports[transport]){connection.log("Invalid transport: "+transport+", removing it from the transports list.");requestedTransport.splice(i,1);}}
+if(requestedTransport.length===0){connection.log("No transports remain within the specified transport array.");requestedTransport=null;}}else if(!signalR.transports[requestedTransport]&&requestedTransport!=="auto"){connection.log("Invalid transport: "+requestedTransport.toString()+".");requestedTransport=null;}else if(requestedTransport==="auto"&&signalR._.ieVersion<=8){return["longPolling"];}
+return requestedTransport;}
+function getDefaultPort(protocol){if(protocol==="http:"){return 80;}else if(protocol==="https:"){return 443;}}
+function addDefaultPort(protocol,url){if(url.match(/:\d+$/)){return url;}else{return url+":"+getDefaultPort(protocol);}}
+function ConnectingMessageBuffer(connection,drainCallback){var that=this,buffer=[];that.tryBuffer=function(message){if(connection.state===$.signalR.connectionState.connecting){buffer.push(message);return true;}
+return false;};that.drain=function(){if(connection.state===$.signalR.connectionState.connected){while(buffer.length>0){drainCallback(buffer.shift());}}};that.clear=function(){buffer=[];};}
+signalR.fn=signalR.prototype={init:function(url,qs,logging){var $connection=$(this);this.url=url;this.qs=qs;this.lastError=null;this._={keepAliveData:{},connectingMessageBuffer:new ConnectingMessageBuffer(this,function(message){$connection.triggerHandler(events.onReceived,[message]);}),lastMessageAt:new Date().getTime(),lastActiveAt:new Date().getTime(),beatInterval:5000,beatHandle:null,totalTransportConnectTimeout:0};if(typeof(logging)==="boolean"){this.logging=logging;}},_parseResponse:function(response){var that=this;if(!response){return response;}else if(typeof response==="string"){return that.json.parse(response);}else{return response;}},_originalJson:window.JSON,json:window.JSON,isCrossDomain:function(url,against){var link;url=$.trim(url);against=against||window.location;if(url.indexOf("http")!==0){return false;}
+link=window.document.createElement("a");link.href=url;return link.protocol+addDefaultPort(link.protocol,link.host)!==against.protocol+addDefaultPort(against.protocol,against.host);},ajaxDataType:"text",contentType:"application/json; charset=UTF-8",logging:false,state:signalR.connectionState.disconnected,clientProtocol:"1.5",reconnectDelay:2000,transportConnectTimeout:0,disconnectTimeout:30000,reconnectWindow:30000,keepAliveWarnAt:2/3,start:function(options,callback){var connection=this,config={pingInterval:300000,waitForPageLoad:true,transport:"auto",jsonp:false},initialize,deferred=connection._deferral||$.Deferred(),parser=window.document.createElement("a");connection.lastError=null;connection._deferral=deferred;if(!connection.json){throw new Error("SignalR: No JSON parser found. Please ensure json2.js is referenced before the SignalR.js file if you need to support clients without native JSON parsing support, e.g. IE<8.");}
+if($.type(options)==="function"){callback=options;}else if($.type(options)==="object"){$.extend(config,options);if($.type(config.callback)==="function"){callback=config.callback;}}
+config.transport=validateTransport(config.transport,connection);if(!config.transport){throw new Error("SignalR: Invalid transport(s) specified, aborting start.");}
+connection._.config=config;if(!_pageLoaded&&config.waitForPageLoad===true){connection._.deferredStartHandler=function(){connection.start(options,callback);};_pageWindow.bind("load",connection._.deferredStartHandler);return deferred.promise();}
+if(connection.state===signalR.connectionState.connecting){return deferred.promise();}else if(changeState(connection,signalR.connectionState.disconnected,signalR.connectionState.connecting)===false){deferred.resolve(connection);return deferred.promise();}
+configureStopReconnectingTimeout(connection);parser.href=connection.url;if(!parser.protocol||parser.protocol===":"){connection.protocol=window.document.location.protocol;connection.host=parser.host||window.document.location.host;}else{connection.protocol=parser.protocol;connection.host=parser.host;}
+connection.baseUrl=connection.protocol+"//"+connection.host;connection.wsProtocol=connection.protocol==="https:"?"wss://":"ws://";if(config.transport==="auto"&&config.jsonp===true){config.transport="longPolling";}
+if(connection.url.indexOf("//")===0){connection.url=window.location.protocol+connection.url;connection.log("Protocol relative URL detected, normalizing it to '"+connection.url+"'.");}
+if(this.isCrossDomain(connection.url)){connection.log("Auto detected cross domain url.");if(config.transport==="auto"){config.transport=["webSockets","serverSentEvents","longPolling"];}
+if(typeof(config.withCredentials)==="undefined"){config.withCredentials=true;}
+if(!config.jsonp){config.jsonp=!$.support.cors;if(config.jsonp){connection.log("Using jsonp because this browser doesn't support CORS.");}}
+connection.contentType=signalR._.defaultContentType;}
+connection.withCredentials=config.withCredentials;connection.ajaxDataType=config.jsonp?"jsonp":"text";$(connection).bind(events.onStart,function(e,data){if($.type(callback)==="function"){callback.call(connection);}
+deferred.resolve(connection);});connection._.initHandler=signalR.transports._logic.initHandler(connection);initialize=function(transports,index){var noTransportError=signalR._.error(resources.noTransportOnInit);index=index||0;if(index>=transports.length){if(index===0){connection.log("No transports supported by the server were selected.");}else if(index===1){connection.log("No fallback transports were selected.");}else{connection.log("Fallback transports exhausted.");}
+$(connection).triggerHandler(events.onError,[noTransportError]);deferred.reject(noTransportError);connection.stop();return;}
+if(connection.state===signalR.connectionState.disconnected){return;}
+var transportName=transports[index],transport=signalR.transports[transportName],onFallback=function(){initialize(transports,index+1);};connection.transport=transport;try{connection._.initHandler.start(transport,function(){var isFirefox11OrGreater=signalR._.firefoxMajorVersion(window.navigator.userAgent)>=11,asyncAbort=!!connection.withCredentials&&isFirefox11OrGreater;connection.log("The start request succeeded. Transitioning to the connected state.");if(supportsKeepAlive(connection)){signalR.transports._logic.monitorKeepAlive(connection);}
+signalR.transports._logic.startHeartbeat(connection);signalR._.configurePingInterval(connection);if(!changeState(connection,signalR.connectionState.connecting,signalR.connectionState.connected)){connection.log("WARNING! The connection was not in the connecting state.");}
+connection._.connectingMessageBuffer.drain();$(connection).triggerHandler(events.onStart);_pageWindow.bind("unload",function(){connection.log("Window unloading, stopping the connection.");connection.stop(asyncAbort);});if(isFirefox11OrGreater){_pageWindow.bind("beforeunload",function(){window.setTimeout(function(){connection.stop(asyncAbort);},0);});}},onFallback);}
+catch(error){connection.log(transport.name+" transport threw '"+error.message+"' when attempting to start.");onFallback();}};var url=connection.url+"/negotiate",onFailed=function(error,connection){var err=signalR._.error(resources.errorOnNegotiate,error,connection._.negotiateRequest);$(connection).triggerHandler(events.onError,err);deferred.reject(err);connection.stop();};$(connection).triggerHandler(events.onStarting);url=signalR.transports._logic.prepareQueryString(connection,url);connection.log("Negotiating with '"+url+"'.");connection._.negotiateRequest=signalR.transports._logic.ajax(connection,{url:url,error:function(error,statusText){if(statusText!==_negotiateAbortText){onFailed(error,connection);}else{deferred.reject(signalR._.error(resources.stoppedWhileNegotiating,null,connection._.negotiateRequest));}},success:function(result){var res,keepAliveData,protocolError,transports=[],supportedTransports=[];try{res=connection._parseResponse(result);}catch(error){onFailed(signalR._.error(resources.errorParsingNegotiateResponse,error),connection);return;}
+keepAliveData=connection._.keepAliveData;connection.appRelativeUrl=res.Url;connection.id=res.ConnectionId;connection.token=res.ConnectionToken;connection.webSocketServerUrl=res.WebSocketServerUrl;connection._.pollTimeout=res.ConnectionTimeout*1000+10000;connection.disconnectTimeout=res.DisconnectTimeout*1000;connection._.totalTransportConnectTimeout=connection.transportConnectTimeout+res.TransportConnectTimeout*1000;if(res.KeepAliveTimeout){keepAliveData.activated=true;keepAliveData.timeout=res.KeepAliveTimeout*1000;keepAliveData.timeoutWarning=keepAliveData.timeout*connection.keepAliveWarnAt;connection._.beatInterval=(keepAliveData.timeout-keepAliveData.timeoutWarning)/3;}else{keepAliveData.activated=false;}
+connection.reconnectWindow=connection.disconnectTimeout+(keepAliveData.timeout||0);if(!res.ProtocolVersion||res.ProtocolVersion!==connection.clientProtocol){protocolError=signalR._.error(signalR._.format(resources.protocolIncompatible,connection.clientProtocol,res.ProtocolVersion));$(connection).triggerHandler(events.onError,[protocolError]);deferred.reject(protocolError);return;}
+$.each(signalR.transports,function(key){if((key.indexOf("_")===0)||(key==="webSockets"&&!res.TryWebSockets)){return true;}
+supportedTransports.push(key);});if($.isArray(config.transport)){$.each(config.transport,function(_,transport){if($.inArray(transport,supportedTransports)>=0){transports.push(transport);}});}else if(config.transport==="auto"){transports=supportedTransports;}else if($.inArray(config.transport,supportedTransports)>=0){transports.push(config.transport);}
+initialize(transports);}});return deferred.promise();},starting:function(callback){var connection=this;$(connection).bind(events.onStarting,function(e,data){callback.call(connection);});return connection;},send:function(data){var connection=this;if(connection.state===signalR.connectionState.disconnected){throw new Error("SignalR: Connection must be started before data can be sent. Call .start() before .send()");}
+if(connection.state===signalR.connectionState.connecting){throw new Error("SignalR: Connection has not been fully initialized. Use .start().done() or .start().fail() to run logic after the connection has started.");}
+connection.transport.send(connection,data);return connection;},received:function(callback){var connection=this;$(connection).bind(events.onReceived,function(e,data){callback.call(connection,data);});return connection;},stateChanged:function(callback){var connection=this;$(connection).bind(events.onStateChanged,function(e,data){callback.call(connection,data);});return connection;},error:function(callback){var connection=this;$(connection).bind(events.onError,function(e,errorData,sendData){connection.lastError=errorData;callback.call(connection,errorData,sendData);});return connection;},disconnected:function(callback){var connection=this;$(connection).bind(events.onDisconnect,function(e,data){callback.call(connection);});return connection;},connectionSlow:function(callback){var connection=this;$(connection).bind(events.onConnectionSlow,function(e,data){callback.call(connection);});return connection;},reconnecting:function(callback){var connection=this;$(connection).bind(events.onReconnecting,function(e,data){callback.call(connection);});return connection;},reconnected:function(callback){var connection=this;$(connection).bind(events.onReconnect,function(e,data){callback.call(connection);});return connection;},stop:function(async,notifyServer){var connection=this,deferral=connection._deferral;if(connection._.deferredStartHandler){_pageWindow.unbind("load",connection._.deferredStartHandler);}
+delete connection._.config;delete connection._.deferredStartHandler;if(!_pageLoaded&&(!connection._.config||connection._.config.waitForPageLoad===true)){connection.log("Stopping connection prior to negotiate.");if(deferral){deferral.reject(signalR._.error(resources.stoppedWhileLoading));}
+return;}
+if(connection.state===signalR.connectionState.disconnected){return;}
+connection.log("Stopping connection.");window.clearTimeout(connection._.beatHandle);window.clearInterval(connection._.pingIntervalId);if(connection.transport){connection.transport.stop(connection);if(notifyServer!==false){connection.transport.abort(connection,async);}
+if(supportsKeepAlive(connection)){signalR.transports._logic.stopMonitoringKeepAlive(connection);}
+connection.transport=null;}
+if(connection._.negotiateRequest){connection._.negotiateRequest.abort(_negotiateAbortText);delete connection._.negotiateRequest;}
+if(connection._.initHandler){connection._.initHandler.stop();}
+delete connection._deferral;delete connection.messageId;delete connection.groupsToken;delete connection.id;delete connection._.pingIntervalId;delete connection._.lastMessageAt;delete connection._.lastActiveAt;connection._.connectingMessageBuffer.clear();changeState(connection,connection.state,signalR.connectionState.disconnected);$(connection).triggerHandler(events.onDisconnect);return connection;},log:function(msg){log(msg,this.logging);}};signalR.fn.init.prototype=signalR.fn;signalR.noConflict=function(){if($.connection===signalR){$.connection=_connection;}
+return signalR;};if($.connection){_connection=$.connection;}
+$.connection=$.signalR=signalR;}(window.jQuery,window));(function($,window,undefined){var signalR=$.signalR,events=$.signalR.events,changeState=$.signalR.changeState,startAbortText="__Start Aborted__",transportLogic;signalR.transports={};function beat(connection){if(connection._.keepAliveData.monitoring){checkIfAlive(connection);}
+if(transportLogic.markActive(connection)){connection._.beatHandle=window.setTimeout(function(){beat(connection);},connection._.beatInterval);}}
+function checkIfAlive(connection){var keepAliveData=connection._.keepAliveData,timeElapsed;if(connection.state===signalR.connectionState.connected){timeElapsed=new Date().getTime()-connection._.lastMessageAt;if(timeElapsed>=keepAliveData.timeout){connection.log("Keep alive timed out. Notifying transport that connection has been lost.");connection.transport.lostConnection(connection);}else if(timeElapsed>=keepAliveData.timeoutWarning){if(!keepAliveData.userNotified){connection.log("Keep alive has been missed, connection may be dead/slow.");$(connection).triggerHandler(events.onConnectionSlow);keepAliveData.userNotified=true;}}else{keepAliveData.userNotified=false;}}}
+function getAjaxUrl(connection,path){var url=connection.url+path;if(connection.transport){url+="?transport="+connection.transport.name;}
+return transportLogic.prepareQueryString(connection,url);}
+function InitHandler(connection){this.connection=connection;this.startRequested=false;this.startCompleted=false;this.connectionStopped=false;}
+InitHandler.prototype={start:function(transport,onSuccess,onFallback){var that=this,connection=that.connection,failCalled=false;if(that.startRequested||that.connectionStopped){connection.log("WARNING! "+transport.name+" transport cannot be started. Initialization ongoing or completed.");return;}
+connection.log(transport.name+" transport starting.");transport.start(connection,function(){if(!failCalled){that.initReceived(transport,onSuccess);}},function(error){if(!failCalled){failCalled=true;that.transportFailed(transport,error,onFallback);}
+return!that.startCompleted||that.connectionStopped;});that.transportTimeoutHandle=window.setTimeout(function(){if(!failCalled){failCalled=true;connection.log(transport.name+" transport timed out when trying to connect.");that.transportFailed(transport,undefined,onFallback);}},connection._.totalTransportConnectTimeout);},stop:function(){this.connectionStopped=true;window.clearTimeout(this.transportTimeoutHandle);signalR.transports._logic.tryAbortStartRequest(this.connection);},initReceived:function(transport,onSuccess){var that=this,connection=that.connection;if(that.startRequested){connection.log("WARNING! The client received multiple init messages.");return;}
+if(that.connectionStopped){return;}
+that.startRequested=true;window.clearTimeout(that.transportTimeoutHandle);connection.log(transport.name+" transport connected. Initiating start request.");signalR.transports._logic.ajaxStart(connection,function(){that.startCompleted=true;onSuccess();});},transportFailed:function(transport,error,onFallback){var connection=this.connection,deferred=connection._deferral,wrappedError;if(this.connectionStopped){return;}
+window.clearTimeout(this.transportTimeoutHandle);if(!this.startRequested){transport.stop(connection);connection.log(transport.name+" transport failed to connect. Attempting to fall back.");onFallback();}else if(!this.startCompleted){wrappedError=signalR._.error(signalR.resources.errorDuringStartRequest,error);connection.log(transport.name+" transport failed during the start request. Stopping the connection.");$(connection).triggerHandler(events.onError,[wrappedError]);if(deferred){deferred.reject(wrappedError);}
+connection.stop();}else{}}};transportLogic=signalR.transports._logic={ajax:function(connection,options){return $.ajax($.extend(true,{},$.signalR.ajaxDefaults,{type:"GET",data:{},xhrFields:{withCredentials:connection.withCredentials},contentType:connection.contentType,dataType:connection.ajaxDataType},options));},pingServer:function(connection){var url,xhr,deferral=$.Deferred();if(connection.transport){url=connection.url+"/ping";url=transportLogic.addQs(url,connection.qs);xhr=transportLogic.ajax(connection,{url:url,success:function(result){var data;try{data=connection._parseResponse(result);}
+catch(error){deferral.reject(signalR._.transportError(signalR.resources.pingServerFailedParse,connection.transport,error,xhr));connection.stop();return;}
+if(data.Response==="pong"){deferral.resolve();}
+else{deferral.reject(signalR._.transportError(signalR._.format(signalR.resources.pingServerFailedInvalidResponse,result),connection.transport,null,xhr));}},error:function(error){if(error.status===401||error.status===403){deferral.reject(signalR._.transportError(signalR._.format(signalR.resources.pingServerFailedStatusCode,error.status),connection.transport,error,xhr));connection.stop();}
+else{deferral.reject(signalR._.transportError(signalR.resources.pingServerFailed,connection.transport,error,xhr));}}});}
+else{deferral.reject(signalR._.transportError(signalR.resources.noConnectionTransport,connection.transport));}
+return deferral.promise();},prepareQueryString:function(connection,url){var preparedUrl;preparedUrl=transportLogic.addQs(url,"clientProtocol="+connection.clientProtocol);preparedUrl=transportLogic.addQs(preparedUrl,connection.qs);if(connection.token){preparedUrl+="&connectionToken="+window.encodeURIComponent(connection.token);}
+if(connection.data){preparedUrl+="&connectionData="+window.encodeURIComponent(connection.data);}
+return preparedUrl;},addQs:function(url,qs){var appender=url.indexOf("?")!==-1?"&":"?",firstChar;if(!qs){return url;}
+if(typeof(qs)==="object"){return url+appender+$.param(qs);}
+if(typeof(qs)==="string"){firstChar=qs.charAt(0);if(firstChar==="?"||firstChar==="&"){appender="";}
+return url+appender+qs;}
+throw new Error("Query string property must be either a string or object.");},getUrl:function(connection,transport,reconnecting,poll,ajaxPost){var baseUrl=transport==="webSockets"?"":connection.baseUrl,url=baseUrl+connection.appRelativeUrl,qs="transport="+transport;if(!ajaxPost&&connection.groupsToken){qs+="&groupsToken="+window.encodeURIComponent(connection.groupsToken);}
+if(!reconnecting){url+="/connect";}else{if(poll){url+="/poll";}else{url+="/reconnect";}
+if(!ajaxPost&&connection.messageId){qs+="&messageId="+window.encodeURIComponent(connection.messageId);}}
+url+="?"+qs;url=transportLogic.prepareQueryString(connection,url);if(!ajaxPost){url+="&tid="+Math.floor(Math.random()*11);}
+return url;},maximizePersistentResponse:function(minPersistentResponse){return{MessageId:minPersistentResponse.C,Messages:minPersistentResponse.M,Initialized:typeof(minPersistentResponse.S)!=="undefined"?true:false,ShouldReconnect:typeof(minPersistentResponse.T)!=="undefined"?true:false,LongPollDelay:minPersistentResponse.L,GroupsToken:minPersistentResponse.G};},updateGroups:function(connection,groupsToken){if(groupsToken){connection.groupsToken=groupsToken;}},stringifySend:function(connection,message){if(typeof(message)==="string"||typeof(message)==="undefined"||message===null){return message;}
+return connection.json.stringify(message);},ajaxSend:function(connection,data){var payload=transportLogic.stringifySend(connection,data),url=getAjaxUrl(connection,"/send"),xhr,onFail=function(error,connection){$(connection).triggerHandler(events.onError,[signalR._.transportError(signalR.resources.sendFailed,connection.transport,error,xhr),data]);};xhr=transportLogic.ajax(connection,{url:url,type:connection.ajaxDataType==="jsonp"?"GET":"POST",contentType:signalR._.defaultContentType,data:{data:payload},success:function(result){var res;if(result){try{res=connection._parseResponse(result);}
+catch(error){onFail(error,connection);connection.stop();return;}
+transportLogic.triggerReceived(connection,res);}},error:function(error,textStatus){if(textStatus==="abort"||textStatus==="parsererror"){return;}
+onFail(error,connection);}});return xhr;},ajaxAbort:function(connection,async){if(typeof(connection.transport)==="undefined"){return;}
+async=typeof async==="undefined"?true:async;var url=getAjaxUrl(connection,"/abort");transportLogic.ajax(connection,{url:url,async:async,timeout:1000,type:"POST"});connection.log("Fired ajax abort async = "+async+".");},ajaxStart:function(connection,onSuccess){var rejectDeferred=function(error){var deferred=connection._deferral;if(deferred){deferred.reject(error);}},triggerStartError=function(error){connection.log("The start request failed. Stopping the connection.");$(connection).triggerHandler(events.onError,[error]);rejectDeferred(error);connection.stop();};connection._.startRequest=transportLogic.ajax(connection,{url:getAjaxUrl(connection,"/start"),success:function(result,statusText,xhr){var data;try{data=connection._parseResponse(result);}catch(error){triggerStartError(signalR._.error(signalR._.format(signalR.resources.errorParsingStartResponse,result),error,xhr));return;}
+if(data.Response==="started"){onSuccess();}else{triggerStartError(signalR._.error(signalR._.format(signalR.resources.invalidStartResponse,result),null,xhr));}},error:function(xhr,statusText,error){if(statusText!==startAbortText){triggerStartError(signalR._.error(signalR.resources.errorDuringStartRequest,error,xhr));}else{connection.log("The start request aborted because connection.stop() was called.");rejectDeferred(signalR._.error(signalR.resources.stoppedDuringStartRequest,null,xhr));}}});},tryAbortStartRequest:function(connection){if(connection._.startRequest){connection._.startRequest.abort(startAbortText);delete connection._.startRequest;}},tryInitialize:function(connection,persistentResponse,onInitialized){if(persistentResponse.Initialized&&onInitialized){onInitialized();}else if(persistentResponse.Initialized){connection.log("WARNING! The client received an init message after reconnecting.");}},triggerReceived:function(connection,data){if(!connection._.connectingMessageBuffer.tryBuffer(data)){$(connection).triggerHandler(events.onReceived,[data]);}},processMessages:function(connection,minData,onInitialized){var data;transportLogic.markLastMessage(connection);if(minData){data=transportLogic.maximizePersistentResponse(minData);transportLogic.updateGroups(connection,data.GroupsToken);if(data.MessageId){connection.messageId=data.MessageId;}
+if(data.Messages){$.each(data.Messages,function(index,message){transportLogic.triggerReceived(connection,message);});transportLogic.tryInitialize(connection,data,onInitialized);}}},monitorKeepAlive:function(connection){var keepAliveData=connection._.keepAliveData;if(!keepAliveData.monitoring){keepAliveData.monitoring=true;transportLogic.markLastMessage(connection);connection._.keepAliveData.reconnectKeepAliveUpdate=function(){transportLogic.markLastMessage(connection);};$(connection).bind(events.onReconnect,connection._.keepAliveData.reconnectKeepAliveUpdate);connection.log("Now monitoring keep alive with a warning timeout of "+keepAliveData.timeoutWarning+", keep alive timeout of "+keepAliveData.timeout+" and disconnecting timeout of "+connection.disconnectTimeout);}else{connection.log("Tried to monitor keep alive but it's already being monitored.");}},stopMonitoringKeepAlive:function(connection){var keepAliveData=connection._.keepAliveData;if(keepAliveData.monitoring){keepAliveData.monitoring=false;$(connection).unbind(events.onReconnect,connection._.keepAliveData.reconnectKeepAliveUpdate);connection._.keepAliveData={};connection.log("Stopping the monitoring of the keep alive.");}},startHeartbeat:function(connection){connection._.lastActiveAt=new Date().getTime();beat(connection);},markLastMessage:function(connection){connection._.lastMessageAt=new Date().getTime();},markActive:function(connection){if(transportLogic.verifyLastActive(connection)){connection._.lastActiveAt=new Date().getTime();return true;}
+return false;},isConnectedOrReconnecting:function(connection){return connection.state===signalR.connectionState.connected||connection.state===signalR.connectionState.reconnecting;},ensureReconnectingState:function(connection){if(changeState(connection,signalR.connectionState.connected,signalR.connectionState.reconnecting)===true){$(connection).triggerHandler(events.onReconnecting);}
+return connection.state===signalR.connectionState.reconnecting;},clearReconnectTimeout:function(connection){if(connection&&connection._.reconnectTimeout){window.clearTimeout(connection._.reconnectTimeout);delete connection._.reconnectTimeout;}},verifyLastActive:function(connection){if(new Date().getTime()-connection._.lastActiveAt>=connection.reconnectWindow){var message=signalR._.format(signalR.resources.reconnectWindowTimeout,new Date(connection._.lastActiveAt),connection.reconnectWindow);connection.log(message);$(connection).triggerHandler(events.onError,[signalR._.error(message,"TimeoutException")]);connection.stop(false,false);return false;}
+return true;},reconnect:function(connection,transportName){var transport=signalR.transports[transportName];if(transportLogic.isConnectedOrReconnecting(connection)&&!connection._.reconnectTimeout){if(!transportLogic.verifyLastActive(connection)){return;}
+connection._.reconnectTimeout=window.setTimeout(function(){if(!transportLogic.verifyLastActive(connection)){return;}
+transport.stop(connection);if(transportLogic.ensureReconnectingState(connection)){connection.log(transportName+" reconnecting.");transport.start(connection);}},connection.reconnectDelay);}},handleParseFailure:function(connection,result,error,onFailed,context){var wrappedError=signalR._.transportError(signalR._.format(signalR.resources.parseFailed,result),connection.transport,error,context);if(onFailed&&onFailed(wrappedError)){connection.log("Failed to parse server response while attempting to connect.");}else{$(connection).triggerHandler(events.onError,[wrappedError]);connection.stop();}},initHandler:function(connection){return new InitHandler(connection);},foreverFrame:{count:0,connections:{}}};}(window.jQuery,window));(function($,window,undefined){var signalR=$.signalR,events=$.signalR.events,changeState=$.signalR.changeState,transportLogic=signalR.transports._logic;signalR.transports.webSockets={name:"webSockets",supportsKeepAlive:function(){return true;},send:function(connection,data){var payload=transportLogic.stringifySend(connection,data);try{connection.socket.send(payload);}catch(ex){$(connection).triggerHandler(events.onError,[signalR._.transportError(signalR.resources.webSocketsInvalidState,connection.transport,ex,connection.socket),data]);}},start:function(connection,onSuccess,onFailed){var url,opened=false,that=this,reconnecting=!onSuccess,$connection=$(connection);if(!window.WebSocket){onFailed();return;}
+if(!connection.socket){if(connection.webSocketServerUrl){url=connection.webSocketServerUrl;}else{url=connection.wsProtocol+connection.host;}
+url+=transportLogic.getUrl(connection,this.name,reconnecting);connection.log("Connecting to websocket endpoint '"+url+"'.");connection.socket=new window.WebSocket(url);connection.socket.onopen=function(){opened=true;connection.log("Websocket opened.");transportLogic.clearReconnectTimeout(connection);if(changeState(connection,signalR.connectionState.reconnecting,signalR.connectionState.connected)===true){$connection.triggerHandler(events.onReconnect);}};connection.socket.onclose=function(event){var error;if(this===connection.socket){if(opened&&typeof event.wasClean!=="undefined"&&event.wasClean===false){error=signalR._.transportError(signalR.resources.webSocketClosed,connection.transport,event);connection.log("Unclean disconnect from websocket: "+(event.reason||"[no reason given]."));}else{connection.log("Websocket closed.");}
+if(!onFailed||!onFailed(error)){if(error){$(connection).triggerHandler(events.onError,[error]);}
+that.reconnect(connection);}}};connection.socket.onmessage=function(event){var data;try{data=connection._parseResponse(event.data);}
+catch(error){transportLogic.handleParseFailure(connection,event.data,error,onFailed,event);return;}
+if(data){if($.isEmptyObject(data)||data.M){transportLogic.processMessages(connection,data,onSuccess);}else{transportLogic.triggerReceived(connection,data);}}};}},reconnect:function(connection){transportLogic.reconnect(connection,this.name);},lostConnection:function(connection){this.reconnect(connection);},stop:function(connection){transportLogic.clearReconnectTimeout(connection);if(connection.socket){connection.log("Closing the Websocket.");connection.socket.close();connection.socket=null;}},abort:function(connection,async){transportLogic.ajaxAbort(connection,async);}};}(window.jQuery,window));(function($,window,undefined){var signalR=$.signalR,events=$.signalR.events,changeState=$.signalR.changeState,transportLogic=signalR.transports._logic,clearReconnectAttemptTimeout=function(connection){window.clearTimeout(connection._.reconnectAttemptTimeoutHandle);delete connection._.reconnectAttemptTimeoutHandle;};signalR.transports.serverSentEvents={name:"serverSentEvents",supportsKeepAlive:function(){return true;},timeOut:3000,start:function(connection,onSuccess,onFailed){var that=this,opened=false,$connection=$(connection),reconnecting=!onSuccess,url;if(connection.eventSource){connection.log("The connection already has an event source. Stopping it.");connection.stop();}
+if(!window.EventSource){if(onFailed){connection.log("This browser doesn't support SSE.");onFailed();}
+return;}
+url=transportLogic.getUrl(connection,this.name,reconnecting);try{connection.log("Attempting to connect to SSE endpoint '"+url+"'.");connection.eventSource=new window.EventSource(url,{withCredentials:connection.withCredentials});}
+catch(e){connection.log("EventSource failed trying to connect with error "+e.Message+".");if(onFailed){onFailed();}else{$connection.triggerHandler(events.onError,[signalR._.transportError(signalR.resources.eventSourceFailedToConnect,connection.transport,e)]);if(reconnecting){that.reconnect(connection);}}
+return;}
+if(reconnecting){connection._.reconnectAttemptTimeoutHandle=window.setTimeout(function(){if(opened===false){if(connection.eventSource.readyState!==window.EventSource.OPEN){that.reconnect(connection);}}},that.timeOut);}
+connection.eventSource.addEventListener("open",function(e){connection.log("EventSource connected.");clearReconnectAttemptTimeout(connection);transportLogic.clearReconnectTimeout(connection);if(opened===false){opened=true;if(changeState(connection,signalR.connectionState.reconnecting,signalR.connectionState.connected)===true){$connection.triggerHandler(events.onReconnect);}}},false);connection.eventSource.addEventListener("message",function(e){var res;if(e.data==="initialized"){return;}
+try{res=connection._parseResponse(e.data);}
+catch(error){transportLogic.handleParseFailure(connection,e.data,error,onFailed,e);return;}
+transportLogic.processMessages(connection,res,onSuccess);},false);connection.eventSource.addEventListener("error",function(e){var error=signalR._.transportError(signalR.resources.eventSourceError,connection.transport,e);if(this!==connection.eventSource){return;}
+if(onFailed&&onFailed(error)){return;}
+connection.log("EventSource readyState: "+connection.eventSource.readyState+".");if(e.eventPhase===window.EventSource.CLOSED){connection.log("EventSource reconnecting due to the server connection ending.");that.reconnect(connection);}else{connection.log("EventSource error.");$connection.triggerHandler(events.onError,[error]);}},false);},reconnect:function(connection){transportLogic.reconnect(connection,this.name);},lostConnection:function(connection){this.reconnect(connection);},send:function(connection,data){transportLogic.ajaxSend(connection,data);},stop:function(connection){clearReconnectAttemptTimeout(connection);transportLogic.clearReconnectTimeout(connection);if(connection&&connection.eventSource){connection.log("EventSource calling close().");connection.eventSource.close();connection.eventSource=null;delete connection.eventSource;}},abort:function(connection,async){transportLogic.ajaxAbort(connection,async);}};}(window.jQuery,window));(function($,window,undefined){var signalR=$.signalR,events=$.signalR.events,changeState=$.signalR.changeState,transportLogic=signalR.transports._logic,createFrame=function(){var frame=window.document.createElement("iframe");frame.setAttribute("style","position:absolute;top:0;left:0;width:0;height:0;visibility:hidden;");return frame;},loadPreventer=(function(){var loadingFixIntervalId=null,loadingFixInterval=1000,attachedTo=0;return{prevent:function(){if(signalR._.ieVersion<=8){if(attachedTo===0){loadingFixIntervalId=window.setInterval(function(){var tempFrame=createFrame();window.document.body.appendChild(tempFrame);window.document.body.removeChild(tempFrame);tempFrame=null;},loadingFixInterval);}
+attachedTo++;}},cancel:function(){if(attachedTo===1){window.clearInterval(loadingFixIntervalId);}
+if(attachedTo>0){attachedTo--;}}};})();signalR.transports.foreverFrame={name:"foreverFrame",supportsKeepAlive:function(){return true;},iframeClearThreshold:50,start:function(connection,onSuccess,onFailed){var that=this,frameId=(transportLogic.foreverFrame.count+=1),url,frame=createFrame(),frameLoadHandler=function(){connection.log("Forever frame iframe finished loading and is no longer receiving messages.");if(!onFailed||!onFailed()){that.reconnect(connection);}};if(window.EventSource){if(onFailed){connection.log("Forever Frame is not supported by SignalR on browsers with SSE support.");onFailed();}
+return;}
+frame.setAttribute("data-signalr-connection-id",connection.id);loadPreventer.prevent();url=transportLogic.getUrl(connection,this.name);url+="&frameId="+frameId;window.document.documentElement.appendChild(frame);connection.log("Binding to iframe's load event.");if(frame.addEventListener){frame.addEventListener("load",frameLoadHandler,false);}else if(frame.attachEvent){frame.attachEvent("onload",frameLoadHandler);}
+frame.src=url;transportLogic.foreverFrame.connections[frameId]=connection;connection.frame=frame;connection.frameId=frameId;if(onSuccess){connection.onSuccess=function(){connection.log("Iframe transport started.");onSuccess();};}},reconnect:function(connection){var that=this;if(transportLogic.isConnectedOrReconnecting(connection)&&transportLogic.verifyLastActive(connection)){window.setTimeout(function(){if(!transportLogic.verifyLastActive(connection)){return;}
+if(connection.frame&&transportLogic.ensureReconnectingState(connection)){var frame=connection.frame,src=transportLogic.getUrl(connection,that.name,true)+"&frameId="+connection.frameId;connection.log("Updating iframe src to '"+src+"'.");frame.src=src;}},connection.reconnectDelay);}},lostConnection:function(connection){this.reconnect(connection);},send:function(connection,data){transportLogic.ajaxSend(connection,data);},receive:function(connection,data){var cw,body,response;if(connection.json!==connection._originalJson){data=connection._originalJson.stringify(data);}
+response=connection._parseResponse(data);transportLogic.processMessages(connection,response,connection.onSuccess);if(connection.state===$.signalR.connectionState.connected){connection.frameMessageCount=(connection.frameMessageCount||0)+1;if(connection.frameMessageCount>signalR.transports.foreverFrame.iframeClearThreshold){connection.frameMessageCount=0;cw=connection.frame.contentWindow||connection.frame.contentDocument;if(cw&&cw.document&&cw.document.body){body=cw.document.body;while(body.firstChild){body.removeChild(body.firstChild);}}}}},stop:function(connection){var cw=null;loadPreventer.cancel();if(connection.frame){if(connection.frame.stop){connection.frame.stop();}else{try{cw=connection.frame.contentWindow||connection.frame.contentDocument;if(cw.document&&cw.document.execCommand){cw.document.execCommand("Stop");}}
+catch(e){connection.log("Error occurred when stopping foreverFrame transport. Message = "+e.message+".");}}
+if(connection.frame.parentNode===window.document.body){window.document.body.removeChild(connection.frame);}
+delete transportLogic.foreverFrame.connections[connection.frameId];connection.frame=null;connection.frameId=null;delete connection.frame;delete connection.frameId;delete connection.onSuccess;delete connection.frameMessageCount;connection.log("Stopping forever frame.");}},abort:function(connection,async){transportLogic.ajaxAbort(connection,async);},getConnection:function(id){return transportLogic.foreverFrame.connections[id];},started:function(connection){if(changeState(connection,signalR.connectionState.reconnecting,signalR.connectionState.connected)===true){$(connection).triggerHandler(events.onReconnect);}}};}(window.jQuery,window));(function($,window,undefined){var signalR=$.signalR,events=$.signalR.events,changeState=$.signalR.changeState,isDisconnecting=$.signalR.isDisconnecting,transportLogic=signalR.transports._logic;signalR.transports.longPolling={name:"longPolling",supportsKeepAlive:function(){return false;},reconnectDelay:3000,start:function(connection,onSuccess,onFailed){var that=this,fireConnect=function(){fireConnect=$.noop;connection.log("LongPolling connected.");if(onSuccess){onSuccess();}else{connection.log("WARNING! The client received an init message after reconnecting.");}},tryFailConnect=function(error){if(onFailed(error)){connection.log("LongPolling failed to connect.");return true;}
+return false;},privateData=connection._,reconnectErrors=0,fireReconnected=function(instance){window.clearTimeout(privateData.reconnectTimeoutId);privateData.reconnectTimeoutId=null;if(changeState(instance,signalR.connectionState.reconnecting,signalR.connectionState.connected)===true){instance.log("Raising the reconnect event");$(instance).triggerHandler(events.onReconnect);}},maxFireReconnectedTimeout=3600000;if(connection.pollXhr){connection.log("Polling xhr requests already exists, aborting.");connection.stop();}
+connection.messageId=null;privateData.reconnectTimeoutId=null;privateData.pollTimeoutId=window.setTimeout(function(){(function poll(instance,raiseReconnect){var messageId=instance.messageId,connect=(messageId===null),reconnecting=!connect,polling=!raiseReconnect,url=transportLogic.getUrl(instance,that.name,reconnecting,polling,true),postData={};if(instance.messageId){postData.messageId=instance.messageId;}
+if(instance.groupsToken){postData.groupsToken=instance.groupsToken;}
+if(isDisconnecting(instance)===true){return;}
+connection.log("Opening long polling request to '"+url+"'.");instance.pollXhr=transportLogic.ajax(connection,{xhrFields:{onprogress:function(){transportLogic.markLastMessage(connection);}},url:url,type:"POST",contentType:signalR._.defaultContentType,data:postData,timeout:connection._.pollTimeout,success:function(result){var minData,delay=0,data,shouldReconnect;connection.log("Long poll complete.");reconnectErrors=0;try{minData=connection._parseResponse(result);}
+catch(error){transportLogic.handleParseFailure(instance,result,error,tryFailConnect,instance.pollXhr);return;}
+if(privateData.reconnectTimeoutId!==null){fireReconnected(instance);}
+if(minData){data=transportLogic.maximizePersistentResponse(minData);}
+transportLogic.processMessages(instance,minData,fireConnect);if(data&&$.type(data.LongPollDelay)==="number"){delay=data.LongPollDelay;}
+if(isDisconnecting(instance)===true){return;}
+shouldReconnect=data&&data.ShouldReconnect;if(shouldReconnect){if(!transportLogic.ensureReconnectingState(instance)){return;}}
+if(delay>0){privateData.pollTimeoutId=window.setTimeout(function(){poll(instance,shouldReconnect);},delay);}else{poll(instance,shouldReconnect);}},error:function(data,textStatus){var error=signalR._.transportError(signalR.resources.longPollFailed,connection.transport,data,instance.pollXhr);window.clearTimeout(privateData.reconnectTimeoutId);privateData.reconnectTimeoutId=null;if(textStatus==="abort"){connection.log("Aborted xhr request.");return;}
+if(!tryFailConnect(error)){reconnectErrors++;if(connection.state!==signalR.connectionState.reconnecting){connection.log("An error occurred using longPolling. Status = "+textStatus+". Response = "+data.responseText+".");$(instance).triggerHandler(events.onError,[error]);}
+if((connection.state===signalR.connectionState.connected||connection.state===signalR.connectionState.reconnecting)&&!transportLogic.verifyLastActive(connection)){return;}
+if(!transportLogic.ensureReconnectingState(instance)){return;}
+privateData.pollTimeoutId=window.setTimeout(function(){poll(instance,true);},that.reconnectDelay);}}});if(reconnecting&&raiseReconnect===true){privateData.reconnectTimeoutId=window.setTimeout(function(){fireReconnected(instance);},Math.min(1000*(Math.pow(2,reconnectErrors)-1),maxFireReconnectedTimeout));}}(connection));},250);},lostConnection:function(connection){if(connection.pollXhr){connection.pollXhr.abort("lostConnection");}},send:function(connection,data){transportLogic.ajaxSend(connection,data);},stop:function(connection){window.clearTimeout(connection._.pollTimeoutId);window.clearTimeout(connection._.reconnectTimeoutId);delete connection._.pollTimeoutId;delete connection._.reconnectTimeoutId;if(connection.pollXhr){connection.pollXhr.abort();connection.pollXhr=null;delete connection.pollXhr;}},abort:function(connection,async){transportLogic.ajaxAbort(connection,async);}};}(window.jQuery,window));(function($,window,undefined){var eventNamespace=".hubProxy",signalR=$.signalR;function makeEventName(event){return event+eventNamespace;}
+function map(arr,fun,thisp){var i,length=arr.length,result=[];for(i=0;i=1.2.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76"
+ integrity sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==
+ dependencies:
+ debug "^3.2.6"
+
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+ integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=
+
+ms@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+ integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+node-rest-client@^2.0.1:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/node-rest-client/-/node-rest-client-2.5.0.tgz#3c53eadba2b2c3b3a4df2ba2f646acc23d8a0701"
+ integrity sha1-PFPq26Kyw7Ok3yui9kaswj2KBwE=
+ dependencies:
+ debug "~2.2.0"
+ follow-redirects ">=1.2.0"
+ xml2js ">=0.2.4"
+
+paypal-permissions-sdk@^1.0.10:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/paypal-permissions-sdk/-/paypal-permissions-sdk-1.0.10.tgz#2b2713ab555647eacffd775fe33e11b233cfc18f"
+ integrity sha512-cNiQnDsrvWMuEwigR1lh+Ty4Y5J3ducRmbIQXH2K9oP8CjW3Tkf7cVk0IOBPH2a6N4D4tjGM4WDhMl68of1Z0A==
+ dependencies:
+ node-rest-client "^2.0.1"
+
+sax@>=0.6.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+xml2js@>=0.2.4:
+ version "0.4.19"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
+ integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "~9.0.1"
+
+xmlbuilder@~9.0.1:
+ version "9.0.7"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
+ integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=