From 4b40c1d964f04b3d777e259f54223c5b588216e6 Mon Sep 17 00:00:00 2001 From: murtuza777 Date: Tue, 25 Mar 2025 06:59:57 +0530 Subject: [PATCH 1/2] Add horizontal scrolling with caret buttons for gene card list --- .../features/search/gene-results-view.js | 70 ++++++++++++++++++- src/styles/base.css | 21 ++++++ src/styles/features/search.css | 65 +++++++++++++++++ 3 files changed, 154 insertions(+), 2 deletions(-) diff --git a/src/client/features/search/gene-results-view.js b/src/client/features/search/gene-results-view.js index 5d20973b..5dbe44bf 100644 --- a/src/client/features/search/gene-results-view.js +++ b/src/client/features/search/gene-results-view.js @@ -38,6 +38,48 @@ class EntitySummaryBox extends React.Component { } class GeneResultsView extends React.Component { + constructor(props) { + super(props); + this.state = { + canScrollLeft: false, + canScrollRight: true + }; + + this.genesListRef = React.createRef(); + this.scrollAmount = 300; // pixels to scroll on each button click + } + + componentDidMount() { + // Update scroll buttons state on mount + this.updateScrollButtonState(); + } + + updateScrollButtonState() { + const container = this.genesListRef.current; + + if (container) { + // Check if we can scroll left (not at the beginning) + const canScrollLeft = container.scrollLeft > 0; + + // Check if we can scroll right (not at the end) + const canScrollRight = container.scrollLeft < (container.scrollWidth - container.clientWidth); + + this.setState({ canScrollLeft, canScrollRight }); + } + } + + scrollGeneList(direction) { + const container = this.genesListRef.current; + + if (container) { + const scrollAmount = direction === 'left' ? -this.scrollAmount : this.scrollAmount; + container.scrollBy({ left: scrollAmount, behavior: 'smooth' }); + + // Update button states after scrolling + setTimeout(() => this.updateScrollButtonState(), 300); + } + } + getEnrichmentAppInfo( geneResults, searchString ){ let enabled = geneResults.length >= MIN_GENE_COUNT_ENRICHMENT; let hint = `Requires at least ${MIN_GENE_COUNT_ENRICHMENT} genes.`; @@ -77,16 +119,40 @@ class GeneResultsView extends React.Component { this.getEnrichmentAppInfo( geneResults, searchString ) ].map( info => h( AppCard, info ) ); + // Create left and right caret buttons for scrolling + const leftCaretButton = h('button.scroll-caret-button.left', { + onClick: () => this.scrollGeneList('left'), + disabled: !this.state.canScrollLeft, + className: this.state.canScrollLeft ? 'active' : 'inactive' + }, [ + h('i.icon.icon-chevron-left') + ]); + + const rightCaretButton = h('button.scroll-caret-button.right', { + onClick: () => this.scrollGeneList('right'), + disabled: !this.state.canScrollRight, + className: this.state.canScrollRight ? 'active' : 'inactive' + }, [ + h('i.icon.icon-chevron-right') + ]); + return h('div.search-genes-results', [ h('h3.search-genes-header', `Recognized genes (${geneResults.length})`), - h('div.search-genes-list', [ + h('div.search-genes-scroll-container', [ + leftCaretButton, + h('div.search-genes-list', { + ref: this.genesListRef, + onScroll: () => this.updateScrollButtonState() + }, [ ...geneResults.map( geneInfo => { return h('div.card', [ h(EntitySummaryBox, { geneInfo } ) ]); }) ]), - h( 'div.search-app-cards', appsInfos ) + rightCaretButton + ]), + h('div.search-app-cards', appsInfos) ]); } } diff --git a/src/styles/base.css b/src/styles/base.css index 08b16407..000ddfea 100644 --- a/src/styles/base.css +++ b/src/styles/base.css @@ -365,6 +365,27 @@ input { &.logo-biofactoid { background-image: url('./image/logo-biofactoid.svg'); } + + /* Add chevron icons for gene card scrolling */ + &.icon-chevron-left { + position: relative; + width: 0.6em; + height: 0.6em; + border-width: 0 0 0.1em 0.1em; + border-style: solid; + border-color: currentColor; + transform: rotate(45deg); + } + + &.icon-chevron-right { + position: relative; + width: 0.6em; + height: 0.6em; + border-width: 0.1em 0.1em 0 0; + border-style: solid; + border-color: currentColor; + transform: rotate(45deg); + } } .icon-rot-90 { diff --git a/src/styles/features/search.css b/src/styles/features/search.css index 8a51ce19..4c8cf94e 100644 --- a/src/styles/features/search.css +++ b/src/styles/features/search.css @@ -182,12 +182,77 @@ flex-flow: row nowrap; overflow-x: scroll; margin-bottom: 0.25em; + scrollbar-width: none; /* Hide scrollbar for Firefox */ + -ms-overflow-style: none; /* Hide scrollbar for IE and Edge */ + + &::-webkit-scrollbar { + display: none; /* Hide scrollbar for Chrome, Safari, and Opera */ + } & * { flex-shrink: 0; } } +/* Add styles for gene card scrolling container and buttons */ +.search-genes-scroll-container { + display: flex; + align-items: center; + position: relative; + margin-bottom: 0.25em; +} + +.scroll-caret-button { + position: absolute; + z-index: 10; + width: 32px; + height: 32px; + display: flex; + justify-content: center; + align-items: center; + border-radius: 50%; + background-color: white; + border: 1px solid var(--light-base-colour-dark); + cursor: pointer; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); + transition: all 0.2s ease; +} + +.scroll-caret-button:hover { + background-color: var(--light-base-colour); +} + +.scroll-caret-button.inactive { + opacity: 0.5; + cursor: default; +} + +.scroll-caret-button.left { + left: 5px; +} + +.scroll-caret-button.right { + right: 5px; +} + +/* Ensure the gene list takes up the remaining space */ +.search-genes-scroll-container .search-genes-list { + flex: 1; + padding: 0 40px; + margin-bottom: 0; +} + +@media (max-width: 700px) { + .scroll-caret-button { + width: 28px; + height: 28px; + } + + .search-genes-scroll-container .search-genes-list { + padding: 0 35px; + } +} + .interactions-logo { background-image: url("../image/interactions-icon.png"); } From f2d52bed67a809bba29c7d68f5bfd1f4e81525dc Mon Sep 17 00:00:00 2001 From: murtuza777 Date: Thu, 1 May 2025 01:49:42 +0530 Subject: [PATCH 2/2] the gene card issue solved by pc search --- .babelrc | 13 +- bash.exe.stackdump | 28 + package-lock.json | 15344 +- package.json | 22 +- public/bundle.css | 2529 +- public/bundle.js | 7136 +- public/deps.css | 825 +- public/deps.js | 116243 ++++++++++++++- .../features/search/gene-results-view.js | 136 +- src/styles/features/search.css | 123 +- webpack.config.js | 41 +- 11 files changed, 135089 insertions(+), 7351 deletions(-) create mode 100644 bash.exe.stackdump diff --git a/.babelrc b/.babelrc index 8e413272..b5f1bafd 100644 --- a/.babelrc +++ b/.babelrc @@ -1,10 +1,13 @@ { "presets": [ - "env", - "react" + ["@babel/preset-env", { + "targets": { + "browsers": ["last 3 versions", "ie >= 11"] + } + }], + "@babel/preset-react" ], "plugins": [ - "transform-async-to-generator" - ], - "ignore": "node_modules/**/*" + "@babel/plugin-transform-async-generator-functions" + ] } diff --git a/bash.exe.stackdump b/bash.exe.stackdump new file mode 100644 index 00000000..e5cc35b6 --- /dev/null +++ b/bash.exe.stackdump @@ -0,0 +1,28 @@ +Stack trace: +Frame Function Args +0007FFFFB750 00021005FE8E (000210285F68, 00021026AB6E, 000000000000, 0007FFFFA650) msys-2.0.dll+0x1FE8E +0007FFFFB750 0002100467F9 (000000000000, 000000000000, 000000000000, 0007FFFFBA28) msys-2.0.dll+0x67F9 +0007FFFFB750 000210046832 (000210286019, 0007FFFFB608, 000000000000, 000000000000) msys-2.0.dll+0x6832 +0007FFFFB750 000210068CF6 (000000000000, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x28CF6 +0007FFFFB750 000210068E24 (0007FFFFB760, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x28E24 +0007FFFFBA30 00021006A225 (0007FFFFB760, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x2A225 +End of stack trace +Loaded modules: +000100400000 bash.exe +7FFF10F80000 ntdll.dll +7FFF0EDD0000 KERNEL32.DLL +7FFF0E720000 KERNELBASE.dll +7FFF0EF50000 USER32.dll +7FFF0E2B0000 win32u.dll +7FFF103D0000 GDI32.dll +7FFF0EAF0000 gdi32full.dll +7FFF0E200000 msvcp_win.dll +7FFF0E5D0000 ucrtbase.dll +000210040000 msys-2.0.dll +7FFF0F880000 advapi32.dll +7FFF0EEA0000 msvcrt.dll +7FFF10E10000 sechost.dll +7FFF109E0000 RPCRT4.dll +7FFF0D750000 CRYPTBASE.DLL +7FFF0E160000 bcryptPrimitives.dll +7FFF0ED80000 IMM32.DLL diff --git a/package-lock.json b/package-lock.json index bba5b1c4..5d9339d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,4741 +4,5576 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@sinonjs/commons": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.6.0.tgz", - "integrity": "sha512-w4/WHG7C4WWFyE5geCieFJF6MZkbW4VAriol5KlmQXpAQdxvV0p26sqNZOW6Qyw6Y0l9K4g+cHvvczR2sEEpqg==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/formatio": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", - "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "requires": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "@sinonjs/samsam": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", - "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", + "@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "requires": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true } } }, - "@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", - "dev": true - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "accepts": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", - "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", - "requires": { - "mime-types": "~2.1.16", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", "dev": true }, - "acorn-dynamic-import": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", - "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", "dev": true, "requires": { - "acorn": "^4.0.3" + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" }, "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", "dev": true, "requires": { - "acorn": "^3.0.4" + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true } } }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", - "dev": true - }, - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "@babel/types": "^7.25.9" } }, - "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", - "dev": true - }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", "dev": true, "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "@babel/helper-create-class-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", "dev": true, "requires": { - "string-width": "^2.0.0" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.27.0", + "semver": "^6.3.1" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true - }, - "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=", + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", + "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "dependencies": { + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "ms": "^2.1.3" } }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" } }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" } }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, "requires": { - "arr-flatten": "^1.0.1" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" } }, - "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==" + "@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "requires": { + "@babel/types": "^7.25.9" + } }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", "dev": true }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true + "@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + } }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + } }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", + "@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true }, - "array-iterate": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-1.1.1.tgz", - "integrity": "sha1-hlv3+K851rCYLGCQKRSsdrwBCPY=", + "@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true + "@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "dev": true, + "requires": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + } }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", "dev": true, "requires": { - "array-uniq": "^1.0.1" + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true + "@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "dev": true, + "requires": { + "@babel/types": "^7.27.0" + } }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, "requires": { - "safer-buffer": "~2.1.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "@babel/helper-plugin-utils": "^7.12.13" } }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "requires": { - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } + "@babel/helper-plugin-utils": "^7.14.5" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "requires": { - "lodash": "^4.17.10" - }, - "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - } + "@babel/helper-plugin-utils": "^7.8.0" } }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" - }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true - }, - "async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "requires": { - "retry": "0.13.1" + "@babel/helper-plugin-utils": "^7.8.3" } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } }, - "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 + "@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } }, - "autoprefixer": { - "version": "6.7.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", - "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, "requires": { - "browserslist": "^1.7.6", - "caniuse-db": "^1.0.30000634", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^5.2.16", - "postcss-value-parser": "^3.2.3" - }, - "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", - "dev": true, - "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" - } - }, - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" - } - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } + "@babel/helper-plugin-utils": "^7.10.4" } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" + } }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "@babel/helper-plugin-utils": "^7.10.4" } }, - "babel-core": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", - "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.0", - "debug": "^2.6.8", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.7", - "slash": "^1.0.0", - "source-map": "^0.5.6" - }, - "dependencies": { - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", - "dev": true - } + "@babel/helper-plugin-utils": "^7.8.0" } }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "babel-helper-builder-react-jsx": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", - "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=", + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "esutils": "^2.0.2" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "@babel/plugin-transform-async-generator-functions": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" } }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" } }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "@babel/helper-plugin-utils": "^7.26.5" } }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "@babel/plugin-transform-block-scoping": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", + "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.26.5" } }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", "dev": true, "requires": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz", - "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==", + "@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", "dev": true, "requires": { - "find-cache-dir": "^1.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" }, "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } } } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" } }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true - }, - "babel-plugin-syntax-flow": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=", - "dev": true - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", - "dev": true - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true + "@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", "dev": true, "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "@babel/plugin-transform-for-of": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", "dev": true, "requires": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" } }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" } }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", "dev": true, "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", - "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" } }, - "babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", "dev": true, "requires": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", "dev": true, "requires": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", "dev": true, "requires": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", "dev": true, "requires": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.26.5" } }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" } }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", "dev": true, "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" } }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" } }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", "dev": true, "requires": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", "dev": true, "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", + "@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", "dev": true, "requires": { - "babel-plugin-syntax-flow": "^6.18.0", - "babel-runtime": "^6.22.0" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-react-display-name": { - "version": "6.25.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", - "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=", + "@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-react-jsx": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", - "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=", + "@babel/plugin-transform-react-display-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", "dev": true, "requires": { - "babel-helper-builder-react-jsx": "^6.24.1", - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-react-jsx-self": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", - "integrity": "sha1-322AqdomEqEh5t3XVYvL7PBuY24=", + "@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" } }, - "babel-plugin-transform-react-jsx-source": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", - "integrity": "sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=", + "@babel/plugin-transform-react-jsx-development": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "^6.8.0", - "babel-runtime": "^6.22.0" + "@babel/plugin-transform-react-jsx": "^7.25.9" } }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", "dev": true, "requires": { - "regenerator-transform": "^0.10.0" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "@babel/plugin-transform-regenerator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", + "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", "dev": true, "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" + "@babel/helper-plugin-utils": "^7.26.5", + "regenerator-transform": "^0.15.2" } }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" - }, - "dependencies": { - "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", - "dev": true - }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - } + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-preset-env": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", - "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", - "dev": true, - "requires": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^2.1.2", - "invariant": "^2.2.2", - "semver": "^5.3.0" + "@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-preset-flow": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", - "integrity": "sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=", + "@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", "dev": true, "requires": { - "babel-plugin-transform-flow-strip-types": "^6.22.0" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" } }, - "babel-preset-react": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", - "integrity": "sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=", + "@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "^6.3.13", - "babel-plugin-transform-react-display-name": "^6.23.0", - "babel-plugin-transform-react-jsx": "^6.24.1", - "babel-plugin-transform-react-jsx-self": "^6.22.0", - "babel-plugin-transform-react-jsx-source": "^6.22.0", - "babel-preset-flow": "^6.23.0" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "@babel/plugin-transform-template-literals": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", "dev": true, "requires": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - }, - "dependencies": { - "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", - "dev": true - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - } + "@babel/helper-plugin-utils": "^7.26.5" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "@babel/plugin-transform-typeof-symbol": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", + "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", "dev": true, "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "core-js": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", - "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", - "dev": true - } + "@babel/helper-plugin-utils": "^7.26.5" } }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" } }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true - }, - "bail": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.2.tgz", - "integrity": "sha1-99bBcxYwqfnw1NNe0fli4gdKF2Q=", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + } }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", "dev": true, "requires": { - "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" + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" }, "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", - "dev": true + "@babel/preset-modules": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } }, - "basic-auth": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", - "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", + "@babel/preset-react": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", + "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", + "dev": true, "requires": { - "safe-buffer": "5.1.1" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "@babel/runtime": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", "requires": { - "tweetnacl": "^0.14.3" + "regenerator-runtime": "^0.14.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + } } }, - "bfj": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", - "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "dev": true, "requires": { - "bluebird": "^3.5.5", - "check-types": "^8.0.3", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + } + }, + "@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" }, "dependencies": { - "bluebird": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", - "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, - "big-integer": { - "version": "1.6.40", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.40.tgz", - "integrity": "sha512-CjhtJp0BViLzP1ZkEnoywjgtFQXS2pomKjAJtIISTCnuHILkLcAXLdFLG/nxsHc4s9kJfc+82Xpg8WNyhfACzQ==" - }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dev": true, "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" } }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" + "@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } }, - "bluebird": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", - "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==" + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true }, - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "~2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "~1.6.15" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" + "type-detect": "4.0.8" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "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==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true - }, - "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=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "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=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "@sinonjs/formatio": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", + "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", + "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^3.1.0" } }, - "broadway": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/broadway/-/broadway-0.3.6.tgz", - "integrity": "sha1-fb7waLlUt5B5Jf1USWO1eKkCuno=", + "@sinonjs/samsam": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", + "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", + "dev": true, "requires": { - "cliff": "0.1.9", - "eventemitter2": "0.4.14", - "nconf": "0.6.9", - "utile": "0.2.1", - "winston": "0.8.0" + "@sinonjs/commons": "^1.3.0", + "array-from": "^2.1.1", + "lodash": "^4.17.15" }, "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" - }, - "cliff": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.9.tgz", - "integrity": "sha1-ohHgnGo947oa8n0EnTASUNGIErw=", - "requires": { - "colors": "0.x.x", - "eyes": "0.1.x", - "winston": "0.8.x" - } - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" - }, - "winston": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.0.tgz", - "integrity": "sha1-YdCDD6aZcGISIGsKK1ymmpMENmg=", - "requires": { - "async": "0.2.x", - "colors": "0.6.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "pkginfo": "0.3.x", - "stack-trace": "0.0.x" - } + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true } } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "@sinonjs/text-encoding": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", "dev": true }, - "browser-split": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/browser-split/-/browser-split-0.0.0.tgz", - "integrity": "sha1-QUGcrvdpdVkp3VGJZ9PuwKYmJ3E=" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha512-GKp5tQ8h0KMPWIYGRHHXI1s5tUpZixZ3IHF2jAu42wSCf6In/G873s6/y4DdKdhWvzhu1T6mE1JgvnhAKqyYYQ==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "acorn": "^4.0.3" }, "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha512-fu2ygVGuMmlzG8ZeRJ0bvR41nsAkxxhbyk8bZ1SS521Z7vmgJFTQQlfz/Mp/nJexGBz+v8sC9bM6+lNgskt4Ug==", "dev": true } } }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", + "dev": true + } } }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" - } + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", "dev": true, "requires": { - "pako": "~1.0.5" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, - "browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000792", - "electron-to-chromium": "^1.3.30" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "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, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", + "dev": true + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "string-width": "^2.0.0" } }, - "buffer-indexof-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz", - "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8=" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "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==", "dev": true }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "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 }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } }, - "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, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha512-iK7YPKV+GsvihPUTKcM3hh2gq47zSFCpVDv/Ay2O9mzuD7dfvLV4vhms4XcjZvv4VRgXuGLMEts51IlTjS11/A==", "requires": { - "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" - }, - "dependencies": { - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - } + "sprintf-js": "~1.0.2" } }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", + "requires": { + "arr-flatten": "^1.0.1" + } }, - "caller": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/caller/-/caller-0.0.1.tgz", - "integrity": "sha1-83odbqEOgp2UchrimpC7T7Uqt2c=", + "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==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true + }, + "array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "requires": { - "tape": "~2.3.2" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" } }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, "requires": { - "callsites": "^0.2.0" + "array-uniq": "^1.0.1" } }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==" + }, + "arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" }, "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "dev": true } } }, - "caniuse-api": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", - "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "assert": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", "dev": true, "requires": { - "browserslist": "^1.3.6", - "caniuse-db": "^1.0.30000529", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "object.assign": "^4.1.4", + "util": "^0.10.4" }, "dependencies": { - "browserslist": { - "version": "1.7.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dev": true, "requires": { - "caniuse-db": "^1.0.30000639", - "electron-to-chromium": "^1.2.7" + "inherits": "2.0.3" } } } }, - "caniuse-db": { - "version": "1.0.30000803", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000803.tgz", - "integrity": "sha1-Po0rr1bC/VpZyC4ieSig3CwmcC0=", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30000803", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000803.tgz", - "integrity": "sha512-AoROHIFLv2iv5CG4nonOfT9ZCQ3JTN0GyEn8LG2sPb2Wc5cIyX/UwLYP0pnVajVF3LWH+mrO/DXBzmte0BK9cQ==", - "dev": true + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "ccount": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.2.tgz", - "integrity": "sha1-U7ai+BW7d7nChx97mnLDol8djok=", + "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 }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "lodash": "^4.17.14" }, "dependencies": { - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true } } }, - "chai": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", - "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha512-STDwmg+1mv249vNFx+s+sF4HrdLxlF5Z6L4npilrkgchWPEuW4X13gKzSJq51qJy9InOgwmPepgfMb9/Qu0fSg==" + }, + "async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", "dev": true, "requires": { - "assertion-error": "^1.0.1", - "check-error": "^1.0.1", - "deep-eql": "^3.0.0", - "get-func-name": "^2.0.0", - "pathval": "^1.0.0", - "type-detect": "^4.0.0" + "retry": "0.13.1" } }, - "chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "requires": { - "check-error": "^1.0.2" - } + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "requires": { - "traverse": ">=0.3.0 <0.4" - } + "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 }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha512-WKExI/eSGgGAkWAO+wMVdFObZV7hQen54UpD1kCCTN3tvlL3W1jL4+lPP/M7MwoP7Q4RHzKtO3JQ4HxYEcd+xQ==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } } }, - "character-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.1.tgz", - "integrity": "sha1-92hxvl72bdt/j440eOzDdMJ9bco=", - "dev": true - }, - "character-entities-html4": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.1.tgz", - "integrity": "sha1-NZoqSg9+KdPcKsmb2+Ie45Q46lA=", - "dev": true - }, - "character-entities-legacy": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz", - "integrity": "sha1-9Ad53xoQGHK7UQo9KV4fzPFHIC8=", - "dev": true - }, - "character-reference-invalid": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz", - "integrity": "sha1-lCg191Dk7GGjCOYMLvjMEBEgLvw=", - "dev": true - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true + "available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "requires": { + "possible-typed-array-names": "^1.0.0" + } }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" }, - "check-types": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", - "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", - "dev": true + "aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==" }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "babel-helper-builder-react-jsx": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz", + "integrity": "sha512-02I9jDjnVEuGy2BR3LRm9nPRb/+Ja0pvZVLr1eI5TYAA/dB0Xoc+WBo50+aDfhGDLhlBY1+QURjn9uvcFd8gzg==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "esutils": "^2.0.2" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } }, - "clap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", - "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==", "dev": true, "requires": { - "chalk": "^1.1.3" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, - "class-list": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/class-list/-/class-list-0.1.1.tgz", - "integrity": "sha1-m5dFGSxBebXaCg12M2WOPHDXlss=", + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg==", + "dev": true, "requires": { - "indexof": "0.0.1" + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, - "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==", + "babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "semver": "^6.0.0" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.4", + "semver": "^6.3.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", + "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.4.4", + "core-js-compat": "^3.33.1" + }, + "dependencies": { + "@babel/helper-define-polyfill-provider": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", + "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "ms": "^2.1.3" } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "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==", + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, - "classnames": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", - "integrity": "sha1-+zgB1FNGdknvNgPH1hoCvRKb3m0=" - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-spinners": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.1.0.tgz", - "integrity": "sha1-8YR7FohE2RemceudFH499JfJDQY=", - "dev": true - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "cliff": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.10.tgz", - "integrity": "sha1-U74z6p9ZvshWCe4wCsQgdgPlIBM=", + "babel-plugin-polyfill-regenerator": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "dev": true, "requires": { - "colors": "~1.0.3", - "eyes": "~0.1.8", - "winston": "0.8.x" + "@babel/helper-define-polyfill-provider": "^0.5.0" }, "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + "@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + } }, - "winston": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", - "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, "requires": { - "async": "0.2.x", - "colors": "0.6.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "pkginfo": "0.3.x", - "stack-trace": "0.0.x" - }, - "dependencies": { - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" - } + "ms": "^2.1.3" } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw==", + "dev": true }, - "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=" + "babel-plugin-syntax-flow": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", + "integrity": "sha512-HbTDIoG1A1op7Tl/wIFQPULIBA61tsJ8Ntq2FAhLwuijrzosM/92kAfgU1Q3Kc7DH/cprJg5vDfuTY4QUL4rDA==", + "dev": true }, - "clone-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.0.tgz", - "integrity": "sha1-6uCiQT9VwJQvgYwin+/OhF1/Oxw=", + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==", + "dev": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw==", "dev": true, "requires": { - "is-regexp": "^1.0.0", - "is-supported-regexp-flag": "^1.0.0" + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "coa": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", - "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "babel-plugin-transform-flow-strip-types": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", + "integrity": "sha512-TxIM0ZWNw9oYsoTthL3lvAK3+eTujzktoXJg4ubGvICGbVuXVYv5hHv0XXpz8fbqlJaGYY4q5SVzaSmsg3t4Fg==", "dev": true, "requires": { - "q": "^1.1.2" + "babel-plugin-syntax-flow": "^6.18.0", + "babel-runtime": "^6.22.0" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collapse-white-space": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.3.tgz", - "integrity": "sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "babel-plugin-transform-react-display-name": { + "version": "6.25.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz", + "integrity": "sha512-QLYkLiZeeED2PKd4LuXGg5y9fCgPB5ohF8olWUuETE2ryHNRqqnXlEVP7RPuef89+HTfd3syptMGVHeoAu0Wig==", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "babel-runtime": "^6.22.0" } }, - "color": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color/-/color-2.0.1.tgz", - "integrity": "sha512-ubUCVVKfT7r2w2D3qtHakj8mbmKms+tThR8gI8zEYCbUBl8/voqFGt3kgBqGwXAopgXybnkuOq+qMYCRrp4cXw==", + "babel-plugin-transform-react-jsx": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz", + "integrity": "sha512-s+q/Y2u2OgDPHRuod3t6zyLoV8pUHc64i/O7ZNgIOEdYTq+ChPeybcKBi/xk9VI60VriILzFPW+dUxAEbTxh2w==", "dev": true, "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "babel-helper-builder-react-jsx": "^6.24.1", + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "babel-plugin-transform-react-jsx-self": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz", + "integrity": "sha512-Y3ZHP1nunv0U1+ysTNwLK39pabHj6cPVsfN4TRC7BDBfbgbyF4RifP5kd6LnbuMV9wcfedQMe7hn1fyKc7IzTQ==", "dev": true, "requires": { - "color-name": "^1.1.1" + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.2.tgz", - "integrity": "sha1-JuRYFLw8mny9Z1FkikFDRRSnc6k=", + "babel-plugin-transform-react-jsx-source": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz", + "integrity": "sha512-pcDNDsZ9q/6LJmujQ/OhjeoIlp5Nl546HJ2yiFIJK3mYpgNXhI5/S9mXfVxu5yqWAi7HdI7e/q6a9xtzwL69Vw==", "dev": true, "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "babel-plugin-syntax-jsx": "^6.8.0", + "babel-runtime": "^6.22.0" } }, - "colormin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", - "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==", "dev": true, "requires": { - "color": "^0.11.0", - "css-color-names": "0.0.4", - "has": "^1.0.1" + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" }, "dependencies": { - "color": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", - "dev": true, - "requires": { - "clone": "^1.0.2", - "color-convert": "^1.3.0", - "color-string": "^0.3.0" - } - }, - "color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dev": true, - "requires": { - "color-name": "^1.0.0" - } + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==", + "dev": true } } }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "babel-preset-flow": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz", + "integrity": "sha512-PQZFJXnM3d80Vq4O67OE6EMVKIw2Vmzy8UXovqulNogCtblWU8rzP7Sm5YgHiCg4uejUxzCkHfNXQ4Z6GI+Dhw==", + "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "babel-plugin-transform-flow-strip-types": "^6.22.0" } }, - "commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "concat": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", - "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=", + "babel-preset-react": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-react/-/babel-preset-react-6.24.1.tgz", + "integrity": "sha512-phQe3bElbgF887UM0Dhz55d22ob8czTL1kbhZFwpCE6+R/X9kHktfwmx9JZb+bBSVRGphP5tZ9oWhVhlgjrX3Q==", + "dev": true, "requires": { - "commander": "^2.9.0" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } + "babel-plugin-syntax-jsx": "^6.3.13", + "babel-plugin-transform-react-display-name": "^6.23.0", + "babel-plugin-transform-react-jsx": "^6.24.1", + "babel-plugin-transform-react-jsx-self": "^6.22.0", + "babel-plugin-transform-react-jsx-source": "^6.22.0", + "babel-preset-flow": "^6.23.0" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } }, - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", "dev": true, "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", "dev": true, "requires": { - "date-now": "^0.1.4" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-parser": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", - "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", + "dev": true, "requires": { - "cookie": "0.3.1", - "cookie-signature": "1.0.6" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" }, - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.4.3", - "minimist": "^1.2.0", - "object-assign": "^4.1.0", - "os-homedir": "^1.0.1", - "parse-json": "^2.2.0", - "require-from-string": "^1.1.0" + "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" + }, + "dependencies": { + "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, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } } }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" - } + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "requires": { - "capture-stack-trace": "^1.0.0" + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, - "create-hash": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "tweetnacl": "^0.14.3" } }, - "create-hmac": { - "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", "dev": true, "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + }, + "dependencies": { + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + } } }, - "create-react-class": { - "version": "15.6.3", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz", - "integrity": "sha512-M+/3Q6E6DLO6Yx3OwrWjwHBnvfXXYA7W+dFjt/ZDBemHO1DDZhsalX/NUtnTYclN6GfnBDRh4qRHjcDHmlJBJg==", - "requires": { - "fbjs": "^0.8.9", - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } + "big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==" }, - "cross-env": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.3.tgz", - "integrity": "sha512-UOokgwvDzCT0mqRSLEkJzUhYXB1vK3E5UgDrD41QiXsm9UetcW2rCGHYz/O3p873lMJ1VZbFCF9Izkwh7nYR5A==", - "dev": true, - "requires": { - "cross-spawn": "^5.1.0", - "is-windows": "^1.0.0" - } + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "file-uri-to-path": "1.0.0" } }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "bluebird": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", + "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", "dev": true }, - "css-color-function": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/css-color-function/-/css-color-function-1.3.3.tgz", - "integrity": "sha1-jtJMLAIFBzM5+voAS8jBQfzLKC4=", + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha512-XIXhPptoLGNcvFyyOzjNXCjDYIbYj4iuXO0VU9lM0f3kYdG0ar5yg7C+pIc3OyoTlZXDu5ObpLTmS2Cgp89oDg==", + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" + } + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "dev": true, "requires": { - "balanced-match": "0.1.0", - "color": "^0.11.0", - "debug": "^3.1.0", - "rgb": "~0.1.0" + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" }, "dependencies": { - "balanced-match": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.1.0.tgz", - "integrity": "sha1-tQS9BYabOSWd0MXvw12EMXbczEo=", - "dev": true - }, - "color": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", - "dev": true, - "requires": { - "clone": "^1.0.2", - "color-convert": "^1.3.0", - "color-string": "^0.3.0" - } - }, - "color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "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==", "dev": true, "requires": { - "color-name": "^1.0.0" + "color-convert": "^1.9.0" } }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-unit-converter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", - "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", - "dev": true - }, - "cssnano": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", - "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", - "dev": true, - "requires": { - "autoprefixer": "^6.3.1", - "decamelize": "^1.1.2", - "defined": "^1.0.0", - "has": "^1.0.1", - "object-assign": "^4.0.1", - "postcss": "^5.0.14", - "postcss-calc": "^5.2.0", - "postcss-colormin": "^2.1.8", - "postcss-convert-values": "^2.3.4", - "postcss-discard-comments": "^2.0.4", - "postcss-discard-duplicates": "^2.0.1", - "postcss-discard-empty": "^2.0.1", - "postcss-discard-overridden": "^0.1.1", - "postcss-discard-unused": "^2.2.1", - "postcss-filter-plugins": "^2.0.0", - "postcss-merge-idents": "^2.1.5", - "postcss-merge-longhand": "^2.0.1", - "postcss-merge-rules": "^2.0.3", - "postcss-minify-font-values": "^1.0.2", - "postcss-minify-gradients": "^1.0.1", - "postcss-minify-params": "^1.0.4", - "postcss-minify-selectors": "^2.0.4", - "postcss-normalize-charset": "^1.1.0", - "postcss-normalize-url": "^3.0.7", - "postcss-ordered-values": "^2.1.0", - "postcss-reduce-idents": "^2.2.2", - "postcss-reduce-initial": "^1.0.0", - "postcss-reduce-transforms": "^1.0.3", - "postcss-svgo": "^2.1.1", - "postcss-unique-selectors": "^2.0.2", - "postcss-value-parser": "^3.2.3", - "postcss-zindex": "^2.0.1" - }, - "dependencies": { - "postcss": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", - "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "chalk": "^1.1.3", - "js-base64": "^2.1.9", - "source-map": "^0.5.6", - "supports-color": "^3.2.3" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "^3.0.0" } } } }, - "csso": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", - "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", - "dev": true, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "clap": "^1.0.9", - "source-map": "^0.5.3" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "csv": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/csv/-/csv-5.1.1.tgz", - "integrity": "sha512-gezB9D+enrh2tLj+vsAD8JyYRMIJdSMpec/Pgbb+7YRj6Q6/D12HLSwjhx+CrirRT4dESjZYXWX1JfqlV4RlTA==", + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", "requires": { - "csv-generate": "^3.2.0", - "csv-parse": "^4.3.0", - "csv-stringify": "^5.1.2", - "stream-transform": "^1.0.8" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, - "csv-generate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.2.3.tgz", - "integrity": "sha512-IcR3K0Nx+nJAkcU2eAglVR7DuHnxcuhUM2w2cR+aHOW7bZp2S5LyN2HF3zTkp6BV/DjR6ykoKznUm+AjnWcOKg==" - }, - "csv-parse": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.4.3.tgz", - "integrity": "sha512-TiLGAy14FPJ7/yB+Gn6RgSxoZLpf6pJTRkGqmCt9t/SGVwubrXjbUWtEw39RlKB6hDHzbdjLyBZaysQ0Ji6p/w==" - }, - "csv-stringify": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.3.0.tgz", - "integrity": "sha512-VMYPbE8zWz475smwqb9VbX9cj0y4J0PBl59UdcqzLkzXHZZ8dh4Rmbb0ZywsWEtUml4A96Hn7Q5MW9ppVghYzg==", + "broadway": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/broadway/-/broadway-0.3.6.tgz", + "integrity": "sha512-zivf7KWx8ftTEsXaKfmve6wdSfbDJ6NLXwhwWN4Q1z5+/nsHWALP952KV9jJbJGwjZHEMZABHyuKqEAh3wb2kw==", "requires": { - "lodash.get": "~4.4.2" + "cliff": "0.1.9", + "eventemitter2": "0.4.14", + "nconf": "0.6.9", + "utile": "0.2.1", + "winston": "0.8.0" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==" + }, + "cliff": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.9.tgz", + "integrity": "sha512-2EECQDk23AtYy9WTUDS0UwdlyGJe62IatdR9dOfG/T3+VIoC6/SA5AnYJWGTjXjweTYL360HEGu4DchCeee4Ng==", + "requires": { + "colors": "0.x.x", + "eyes": "0.1.x", + "winston": "0.8.x" + } + }, + "winston": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.0.tgz", + "integrity": "sha512-BoFzn3FEOWlq+1rDbDrbD093E3IRqukS8DYiqtY4vblIFR+5MSGUstAU228MGJa0vodiqm/iU2c8OGw6Iorx1g==", + "requires": { + "async": "0.2.x", + "colors": "0.6.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" + } + } } }, - "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", "dev": true }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } + "browser-split": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/browser-split/-/browser-split-0.0.0.tgz", + "integrity": "sha512-CNXO3AXAS1H/kOGQkPjucm1161/XoF3aVkMfujqwk85XN/D/MkQMvoB81lXyX/2rerZS+hPAYYRR3mAW05awjQ==" }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, - "cytoscape": { - "version": "3.2.22", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.2.22.tgz", - "integrity": "sha512-0eHGQWuE6UTTZ0T3L/p1gYBfAkq/+PAFJWq79PL2qDexPSLnbYi6JivSid31TLIRwxe29MW6TPqZZ6ynMXPK8A==", + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, "requires": { - "heap": "^0.2.6", - "lodash.debounce": "^4.0.8" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "cytoscape-cola": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cytoscape-cola/-/cytoscape-cola-2.3.0.tgz", - "integrity": "sha512-xblxlCH8JXGLdH6XMUBJY3xBUJuL1rLy8bLMGvqkvoPHSbBfV+/klMWoqwervVKWOmFHPwUdihtxy8stG4RM5g==", + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, "requires": { - "webcola": "^3.3.6" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "cytoscape-cose-bilkent": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-3.0.4.tgz", - "integrity": "sha1-7JzgrS9/dHda5QyrUJW2i31YENI=", + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, "requires": { - "linkedlist-js": "1.3.0" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, - "cytoscape-cxtmenu": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/cytoscape-cxtmenu/-/cytoscape-cxtmenu-2.10.3.tgz", - "integrity": "sha1-0k3O4OCiRNFRxPjYBWUfL2dOgXo=" - }, - "cytoscape-expand-collapse": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cytoscape-expand-collapse/-/cytoscape-expand-collapse-3.1.2.tgz", - "integrity": "sha512-yClfo0z2IqEkhlOipUh85k1kJGSgxaSKs4e30KO1mDIXPKOnvL/iQhVXmNt9+KmuIGg9YtNt09P0j3F4BN3WsA==" - }, - "cytoscape-popper": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cytoscape-popper/-/cytoscape-popper-1.0.1.tgz", - "integrity": "sha512-TW1BWgD0z7n9WIur2bcyI82U2hfV4qoZG/jBMFd7+n6FOCLEdfBW69SNtf+jMzy8S8qkbzn8glFaCRvrBsdZxA==", + "browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", + "dev": true, "requires": { - "popper.js": "^1.0.0" + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, - "cytoscape-sbgn-stylesheet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cytoscape-sbgn-stylesheet/-/cytoscape-sbgn-stylesheet-3.0.1.tgz", - "integrity": "sha1-tSFWzZogwHkVM9R+X+oF+rK95z4=", + "browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "dev": true, "requires": { - "extend": "^3.0.0", - "lodash.defaultsdeep": "^4.6.0", - "lodash.memoize": "^4.1.2", - "text-width": "^1.2.0" + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "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 + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "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, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + } } }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "es5-ext": "^0.10.9" + "pako": "~1.0.5" } }, - "d3-dispatch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.5.tgz", - "integrity": "sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g==" - }, - "d3-drag": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.3.tgz", - "integrity": "sha512-8S3HWCAg+ilzjJsNtWW1Mutl74Nmzhb9yU6igspilaJzeZVFktmY6oO9xOh5TDk+BM2KrNFjttZNoJJmDnkjkg==", + "browserslist": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", + "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "dev": true, "requires": { - "d3-dispatch": "1", - "d3-selection": "1" + "caniuse-lite": "^1.0.30000792", + "electron-to-chromium": "^1.3.30" } }, - "d3-selection": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.2.tgz", - "integrity": "sha512-OoXdv1nZ7h2aKMVg3kaUFbLLK5jXUFAMLD/Tu5JA96mjf8f2a9ZUESGY+C36t8R1WFeWk/e55hy54Ml2I62CRQ==" - }, - "d3-timer": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.9.tgz", - "integrity": "sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg==" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, "requires": { - "assert-plus": "^1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "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 }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==" }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", "dev": true }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==" }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true }, - "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=", + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + }, + "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, "requires": { - "foreach": "^2.0.5", - "object-keys": "^1.0.8" + "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" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } } }, - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, + "call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "requires": { - "is-descriptor": "^1.0.0" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" } }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" } } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "dependency-graph": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.5.2.tgz", - "integrity": "sha512-fuF8ISen2Rk75wQ4tWHcfJ/IV1cmPMFE+wth10tAnj/JkpqMJzNW5oKpVOCAkpdfYD+NwtA3kL3nOeyprxPG2A==", - "dev": true - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==" }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "caller": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/caller/-/caller-1.1.0.tgz", + "integrity": "sha512-n+21IZC3j06YpCWaxmUy5AnVqhmCIM2bQtqQyy00HJlmStRt6kwDX5F9Z97pqwAB+G/tgSz6q/kUBbNyQzIubw==" + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", "dev": true, "requires": { - "repeating": "^2.0.0" + "callsites": "^0.2.0" } }, - "dice-coefficient": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/dice-coefficient/-/dice-coefficient-1.0.2.tgz", - "integrity": "sha1-mFyoYy3UzKzkWIfpLCR8+/GruMI=", - "requires": { - "n-gram": "^1.0.0" - } + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", + "dev": true }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", "dev": true }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" } }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha512-SBTl70K0PkDUIebbkXrxWqZlHNs0wRgRD6QZ8guctShjbh63gEPfF+Wj0Yw+75f5Y8tSzqAI/NcisYv/cCah2Q==", "dev": true, "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" }, "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==", "dev": true, "requires": { - "pify": "^3.0.0" + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" } } } }, - "director": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/director/-/director-1.2.7.tgz", - "integrity": "sha1-v9N0EHX9f7GlsuE2WMX0vsd3NvM=" - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", - "dev": true, - "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" - }, - "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", - "dev": true - } - } + "caniuse-db": { + "version": "1.0.30001707", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001707.tgz", + "integrity": "sha512-qAh4lbpYliRSGxdgUGeLYbKYu7JUikmfHp1N4GmeqMNAfXU7RssamxgR7vHNNOEP6a+devOkPS7FPrYIH+ubAA==", + "dev": true }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "caniuse-lite": { + "version": "1.0.30001707", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", + "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", "dev": true }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "capture-stack-trace": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz", + "integrity": "sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w==", "dev": true }, - "domhandler": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", - "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", - "dev": true, - "requires": { - "domelementtype": "1" - } + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, - "domutils": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.6.2.tgz", - "integrity": "sha1-GVjMC0yUJuntNn+xyOhUiRsPo/8=", + "ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "chai": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz", + "integrity": "sha512-YTHf80rJ8M5/cJoFKEV1y3PnexbGs0vSHjouRRU8gLM05Nc3Mqq9zor/P4SCqB/sgvKRLvya7wHLC1XQ9pTjgQ==", "dev": true, "requires": { - "is-obj": "^1.0.0" + "assertion-error": "^1.0.1", + "check-error": "^1.0.1", + "deep-eql": "^3.0.0", + "get-func-name": "^2.0.0", + "pathval": "^1.0.0", + "type-detect": "^4.0.0" } }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "requires": { - "readable-stream": "^2.0.2" + "check-error": "^1.0.2" } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "traverse": ">=0.3.0 <0.4" } }, - "echo-cli": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/echo-cli/-/echo-cli-1.0.8.tgz", - "integrity": "sha1-cKRbh/ltsItFQ8mJW/KuguaRCYg=", + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "requires": { - "meow": "^3.7.0", - "unescape-js": "^1.0.3" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true }, - "ejs": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.1.tgz", - "integrity": "sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ==", + "character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", "dev": true }, - "electron-to-chromium": { - "version": "1.3.32", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.32.tgz", - "integrity": "sha1-EdBoTAhA4APEvoko+KxfNdvCtOY=", + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true }, - "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", "dev": true }, - "encodeurl": { + "check-error": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==" }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", + "dev": true }, - "enhanced-resolve": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", - "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", - "dev": true, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==", "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "object-assign": "^4.0.1", - "tapable": "^0.2.7" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", "dev": true }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "cipher-base": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" }, "dependencies": { - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true } } }, - "es-abstract": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", - "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", "dev": true, "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "chalk": "^1.1.3" } }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "dev": true, + "class-list": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/class-list/-/class-list-0.1.1.tgz", + "integrity": "sha512-zqR0uW+VsLtyQhixBhkdQ+z6B8+Y8HTh28kdSVjJ4zTTKM7Xz2asAQSya9VI6m/34F6N6Ktm0mrchKB+E5a8Xw==", "requires": { - "is-callable": "^1.1.1", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.1" + "indexof": "0.0.1" } }, - "es5-ext": { - "version": "0.10.46", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", - "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", + "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, "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "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, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "classnames": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz", + "integrity": "sha512-DTt3GhOUDKhh4ONwIJW4lmhyotQmV2LjNlGK/J2hkwUcqcbKkCLAdJPtxQnxnlc7SR3f1CEXCyMmc7WLUsWbNA==" + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "restore-cursor": "^2.0.0" } }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "dev": true + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "cliff": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/cliff/-/cliff-0.1.10.tgz", + "integrity": "sha512-roZWcC2Cxo/kKjRXw7YUpVNtxJccbvcl7VzTjUYgLQk6Ot0R8bm2netbhSZYWWNrKlOO/7HD6GXHl8dtzE6SiQ==", + "requires": { + "colors": "~1.0.3", + "eyes": "~0.1.8", + "winston": "0.8.x" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==" + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==" + }, + "winston": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", + "integrity": "sha512-fPoamsHq8leJ62D1M9V/f15mjQ1UHe4+7j1wpAT3fqgA5JqhJkk4aIfPEjfMTI9x6ZTjaLOpMAjluLtmgO5b6g==", + "requires": { + "async": "0.2.x", + "colors": "0.6.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" + }, + "dependencies": { + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==" + } + } + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "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, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } } }, - "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==" + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha512-q59awR9d5z/jaFidcIvRUxOw4NxX8o7y6zAxqRL7Ym1Eqe4j5qBMRbGv8A1tsuRNxNrh6mxCVWkcmukICpd9XA==" }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "clone-regexp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.1.tgz", + "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "is-regexp": "^1.0.0", + "is-supported-regexp-flag": "^1.0.0" } }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha512-KAGck/eNAmCL0dcT3BiuYwLbExK6lduR8DxM3C1TyDzaXhZHyZ8ooX5I5+na2e3dPFuibfxrGdorr0/Lr7RYCQ==", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "q": "^1.1.2" } }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "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 + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "dev": true + }, + "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, "requires": { - "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha512-Ajpjd8asqZ6EdxQeqGzU5WBhhTfJ/0cA4Wlbre7e5vXfmDSmda7Ov6jeKoru+b0vHcb1CqvuroTHp5zIWzhVMA==", + "dev": true, + "requires": { + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" + } }, - "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=", + "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==", + "dev": true, + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha512-sz29j1bmSDfoAxKIEU6zwoIZXN6BrFbAMIhfYCNyiZXBDuU/aiHlN84lp/xDzL2ubyFhLDobHIlU1X70XRrMDA==", "dev": true, "requires": { - "es6-map": "^0.1.3", - "es6-weak-map": "^2.0.1", - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "color-name": "^1.0.0" } }, - "eslint": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.17.0.tgz", - "integrity": "sha512-AyxBUCANU/o/xC0ijGMKavo5Ls3oK6xykiOITlMdjFjrKOsqLrA7Nf5cnrDgcKrHzBirclAZt63XO7YZlVUPwA==", + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha512-XSEQUUQUR/lXqGyddiNH3XYFUPYlYr1vXy9rTFMsSOw+J7Q6EQkdlQIrTlYn4TccpsOaUE1PYQNjBn20gwCdgQ==", "dev": true, "requires": { - "ajv": "^5.3.0", - "babel-code-frame": "^6.22.0", - "chalk": "^2.1.0", - "concat-stream": "^1.6.0", - "cross-spawn": "^5.1.0", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^3.7.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^3.5.2", - "esquery": "^1.0.0", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.0.1", - "ignore": "^3.3.3", - "imurmurhash": "^0.1.4", - "inquirer": "^3.0.6", - "is-resolvable": "^1.0.0", - "js-yaml": "^3.9.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.4", - "minimatch": "^3.0.2", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "require-uncached": "^1.0.3", - "semver": "^5.3.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "~2.0.1", - "table": "^4.0.1", - "text-table": "~0.2.0" + "color": "^0.11.0", + "css-color-names": "0.0.4", + "has": "^1.0.1" + } + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true + }, + "concat": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", + "integrity": "sha512-f/ZaH1aLe64qHgTILdldbvyfGiGF4uzeo9IuXUloIOLQzFmIPloy9QbZadNsuVv0j5qbKQvQb/H/UYf2UsKTpw==", + "requires": { + "commander": "^2.9.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.1.0", - "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" - } - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "globals": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz", - "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==", - "dev": true - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" } } }, - "eslint-config-standard": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", - "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=", - "dev": true + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "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, "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "eslint-module-utils": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz", - "integrity": "sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw==", + "configstore": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.5.tgz", + "integrity": "sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==", "dev": true, "requires": { - "debug": "^2.6.8", - "pkg-dir": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - } + "dot-prop": "^4.2.1", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" } }, - "eslint-plugin-import": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", - "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "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 + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==" + }, + "cookie-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha512-EZyO2G+zVFsMjU8jDtxs2iLS1DmryYNjC0s4/IHtsS6pWPUJSr0kt0UPOctRZosebPHYekb7bNcIBt4YW0S9bg==", + "requires": { + "cookie": "0.3.1", + "cookie-signature": "1.0.6" + } + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "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 + }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + }, + "core-js-compat": { + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", "dev": true, "requires": { - "builtin-modules": "^1.1.1", - "contains-path": "^0.1.0", - "debug": "^2.6.8", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.1.1", - "has": "^1.0.1", - "lodash.cond": "^4.3.0", - "minimatch": "^3.0.3", - "read-pkg-up": "^2.0.0" + "browserslist": "^4.24.4" }, "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true } } }, - "eslint-plugin-node": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz", - "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + }, + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", "dev": true, "requires": { - "ignore": "^3.3.6", - "minimatch": "^3.0.4", - "resolve": "^1.3.3", - "semver": "5.3.0" + "is-directory": "^0.3.1", + "js-yaml": "^3.4.3", + "minimist": "^1.2.0", + "object-assign": "^4.1.0", + "os-homedir": "^1.0.1", + "parse-json": "^2.2.0", + "require-from-string": "^1.1.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" }, "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", "dev": true } } }, - "eslint-plugin-promise": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz", - "integrity": "sha512-YQzM6TLTlApAr7Li8vWKR+K3WghjwKcYzY0d2roWap4SLK+kzuagJX/leTetIDWsFcTFnKNJXWupDCD6aZkP2Q==", - "dev": true + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw==", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } }, - "eslint-plugin-standard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", - "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=", - "dev": true + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "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==", - "dev": true + "create-react-class": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", + "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } }, - "espree": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.3.tgz", - "integrity": "sha512-Zy3tAJDORxQZLl2baguiRU1syPERAIg0L+JB2MWorORgTu/CplzvxS9WWA7Xh4+Q+eOQihNs/1o1Xep8cvCxWQ==", + "cross-env": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.3.tgz", + "integrity": "sha512-UOokgwvDzCT0mqRSLEkJzUhYXB1vK3E5UgDrD41QiXsm9UetcW2rCGHYz/O3p873lMJ1VZbFCF9Izkwh7nYR5A==", "dev": true, "requires": { - "acorn": "^5.4.0", - "acorn-jsx": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", - "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==", - "dev": true - } + "cross-spawn": "^5.1.0", + "is-windows": "^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.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", "dev": true, "requires": { - "estraverse": "^4.0.0" - }, - "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "esrecurse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", - "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", "dev": true, "requires": { - "estraverse": "^4.1.0", - "object-assign": "^4.0.1" + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" }, "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true } } }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", "dev": true }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "css-color-function": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/css-color-function/-/css-color-function-1.3.3.tgz", + "integrity": "sha512-YD/WhiRZIYgadwFJ48X5QmlOQ/w8Me4yQI6/eSUoiE8spIFp+S/rGpsAH48iyq/0ZWkCDWqVQKUlQmUzn7BQ9w==", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "event-stream": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-0.5.3.tgz", - "integrity": "sha1-t3uTCfcQet3+q2PwwOr9jbC9jBw=", - "requires": { - "optimist": "0.2" + "balanced-match": "0.1.0", + "color": "^0.11.0", + "debug": "^3.1.0", + "rgb": "~0.1.0" }, "dependencies": { - "optimist": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz", - "integrity": "sha1-6YGrfiaLRXlIWTtVZ0wJmoFcrDE=", + "balanced-match": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.1.0.tgz", + "integrity": "sha512-4xb6XqAEo3Z+5pEDJz33R8BZXI8FRJU+cDNLdKgDpmnz+pKKRVYLpdv+VvUAC7yUhBMj4izmyt19eCGv1QGV7A==", + "dev": true + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "requires": { - "wordwrap": ">=0.0.1 <0.1.0" + "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=" - }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", + "dev": true }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==", "dev": true }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha512-0o0IMQE0Ezo4b41Yrm8U6Rp9/Ag81vNXY1gZMnT1XhO4DpjEf2utKERqWJbOoz3g1Wdc1d3QSta/cIuJ1wSTEg==", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" + }, + "dependencies": { + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } } }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha512-FmCI/hmqDeHHLaIQckMhMZneS84yzUZdrWDAvJVVxOwcKE1P1LF9FGmzr1ktIQSxOw6fl3PaQsmfg+GN+VvR3w==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "clap": "^1.0.9", + "source-map": "^0.5.3" } }, - "execall": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz", - "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=", - "dev": true, + "csv": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/csv/-/csv-5.1.1.tgz", + "integrity": "sha512-gezB9D+enrh2tLj+vsAD8JyYRMIJdSMpec/Pgbb+7YRj6Q6/D12HLSwjhx+CrirRT4dESjZYXWX1JfqlV4RlTA==", "requires": { - "clone-regexp": "^1.0.0" + "csv-generate": "^3.2.0", + "csv-parse": "^4.3.0", + "csv-stringify": "^5.1.2", + "stream-transform": "^1.0.8" } }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } + "csv-generate": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz", + "integrity": "sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==" }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "requires": { - "fill-range": "^2.1.0" - } + "csv-parse": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz", + "integrity": "sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==" }, - "express": { - "version": "4.16.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", - "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", - "requires": { - "accepts": "~1.3.4", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.1", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.0", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.2", - "qs": "6.5.1", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.1", - "serve-static": "1.13.1", - "setprototypeof": "1.1.0", - "statuses": "~1.3.1", - "type-is": "~1.6.15", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" - } - } + "csv-stringify": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", + "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==" }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==", + "dev": true }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "array-find-index": "^1.0.1" } }, - "external-editor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", - "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", - "dev": true, + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==" + }, + "cytoscape": { + "version": "3.2.22", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.2.22.tgz", + "integrity": "sha512-0eHGQWuE6UTTZ0T3L/p1gYBfAkq/+PAFJWq79PL2qDexPSLnbYi6JivSid31TLIRwxe29MW6TPqZZ6ynMXPK8A==", "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" + "heap": "^0.2.6", + "lodash.debounce": "^4.0.8" } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "cytoscape-cola": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cytoscape-cola/-/cytoscape-cola-2.3.0.tgz", + "integrity": "sha512-xblxlCH8JXGLdH6XMUBJY3xBUJuL1rLy8bLMGvqkvoPHSbBfV+/klMWoqwervVKWOmFHPwUdihtxy8stG4RM5g==", "requires": { - "is-extglob": "^1.0.0" + "webcola": "^3.3.6" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" - }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true + "cytoscape-cose-bilkent": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-3.0.4.tgz", + "integrity": "sha512-oAh/ga1fxJ7j9bBjjfGRlpTAKVFddYu+HfwJaebLpZTc0LUnnnHe/Ng3aiWj1Ammc301+RDTSXT6ecpIz4dSMQ==", + "requires": { + "linkedlist-js": "1.3.0" + } }, - "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=" + "cytoscape-cxtmenu": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/cytoscape-cxtmenu/-/cytoscape-cxtmenu-2.10.3.tgz", + "integrity": "sha512-P9yUbf7uxBJzxpcjcZTRH0IpPW29f2Ydv3gHgbMBd/KpZx0K4DbmR9+He/dy3feXrPqujXyeBX7vH5DGFY0dsw==" }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "cytoscape-expand-collapse": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cytoscape-expand-collapse/-/cytoscape-expand-collapse-3.1.2.tgz", + "integrity": "sha512-yClfo0z2IqEkhlOipUh85k1kJGSgxaSKs4e30KO1mDIXPKOnvL/iQhVXmNt9+KmuIGg9YtNt09P0j3F4BN3WsA==" }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "cytoscape-popper": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cytoscape-popper/-/cytoscape-popper-1.0.1.tgz", + "integrity": "sha512-TW1BWgD0z7n9WIur2bcyI82U2hfV4qoZG/jBMFd7+n6FOCLEdfBW69SNtf+jMzy8S8qkbzn8glFaCRvrBsdZxA==", "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "popper.js": "^1.0.0" } }, - "fibers": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fibers/-/fibers-3.0.0.tgz", - "integrity": "sha512-cAcOHOTbTMlcpNZvr94BNFsnBDBiEu9JP5MYcRLyl12HF/X0z3KvZyNzU9+BtI8lOIaV84PlDQJOKK3f5llJug==" + "cytoscape-sbgn-stylesheet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cytoscape-sbgn-stylesheet/-/cytoscape-sbgn-stylesheet-3.0.1.tgz", + "integrity": "sha512-c2Hw1Fo5Zq8t9W0GBWibLeUesfcVuq79JHdxsO+/hQRov3OcddgnKMz04jkyt6dTUUVLEzoQ/05iTbGTjLXcsg==", + "requires": { + "extend": "^3.0.0", + "lodash.defaultsdeep": "^4.6.0", + "lodash.memoize": "^4.1.2", + "text-width": "^1.2.0" + } }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", "dev": true, "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "es5-ext": "^0.10.64", + "type": "^2.7.2" } }, - "file-saver": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz", - "integrity": "sha1-zdTETTqiZOrC9o7BZbx5HDSvEjI=" + "d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + "d3-drag": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", + "requires": { + "d3-dispatch": "1", + "d3-selection": "1" + } }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "dev": true + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "d3-selection": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" + }, + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "d3-path": "1" } }, - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" - } + "assert-plus": "^1.0.0" } }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "requires": { - "locate-path": "^2.0.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" } }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "requires": { - "circular-json": "^0.3.1", - "del": "^2.0.2", - "graceful-fs": "^4.1.2", - "write": "^0.2.1" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" } }, - "flatiron": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/flatiron/-/flatiron-0.4.3.tgz", - "integrity": "sha1-JIz3mj2n19w3nioRySonGcu1QPY=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "broadway": "~0.3.2", - "director": "1.2.7", - "optimist": "0.6.0", - "prompt": "0.2.14" - }, - "dependencies": { - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" - }, - "optimist": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz", - "integrity": "sha1-aUJIJvNAX3nxQub8PZrljU27kgA=", - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - } + "ms": "2.0.0" } }, - "flatten": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", - "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "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 }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, "requires": { - "for-in": "^1.0.1" - } + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true + "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==" }, - "forever": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/forever/-/forever-0.15.3.tgz", - "integrity": "sha1-d9nX4V/S9RGtnYShEMfdj8js68I=", + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, "requires": { - "cliff": "~0.1.9", - "clone": "^1.0.2", - "colors": "~0.6.2", - "flatiron": "~0.4.2", - "forever-monitor": "~1.7.0", - "nconf": "~0.6.9", - "nssocket": "~0.5.1", - "object-assign": "^3.0.0", - "optimist": "~0.6.0", - "path-is-absolute": "~1.0.0", - "prettyjson": "^1.1.2", - "shush": "^1.0.0", - "timespan": "~2.3.0", - "utile": "~0.2.1", - "winston": "~0.8.1" - }, - "dependencies": { - "async": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=" + "type-detect": "^4.0.0" + } + }, + "deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "dependencies": { + "is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "requires": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + } }, - "winston": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", - "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", + "is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "requires": { - "async": "0.2.x", - "colors": "0.6.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "pkginfo": "0.3.x", - "stack-trace": "0.0.x" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" } } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, - "forever-monitor": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/forever-monitor/-/forever-monitor-1.7.1.tgz", - "integrity": "sha1-XYIPSjp42y2BriZx8Vi56GoJG7g=", + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "requires": { - "broadway": "~0.3.6", - "chokidar": "^1.0.1", - "minimatch": "~3.0.2", - "ps-tree": "0.0.x", - "utile": "~0.2.1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" } }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, - "format-util": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.3.tgz", - "integrity": "sha1-Ay3KShFiYqEsQ/TD7IVmQWxbLZU=" - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "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, "requires": { - "map-cache": "^0.2.2" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + } } }, - "fready": { + "defined": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", + "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", + "dev": true + }, + "delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fready/-/fready-1.0.0.tgz", - "integrity": "sha1-7x9xj44uOjAwDjsTDAPLwS/pX9k=" + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, - "fresh": { + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + }, + "dependency-graph": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.5.2.tgz", + "integrity": "sha512-fuF8ISen2Rk75wQ4tWHcfJ/IV1cmPMFE+wth10tAnj/JkpqMJzNW5oKpVOCAkpdfYD+NwtA3kL3nOeyprxPG2A==", + "dev": true }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" + }, + "dice-coefficient": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dice-coefficient/-/dice-coefficient-1.0.2.tgz", + "integrity": "sha512-A2/UWD5epmtd1o/qgnkeAnMcH1ewcPUc5dKEtYisAFFCu5hPqHaQWcxNuCvpD5+zUQduxnPs+6LPaWADZcTqdA==", + "requires": { + "n-gram": "^1.0.0" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + } + } }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "optional": true, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "path-type": "^3.0.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "optional": true, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, "requires": { - "ms": "2.0.0" + "pify": "^3.0.0" } + } + } + }, + "director": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/director/-/director-1.2.7.tgz", + "integrity": "sha512-Cuia7IBvmSanM+7ZmKYtP9hq+Du7n7mv2cpCt8GiEIkUDni0ecSlVCFJUL6HWwGzqLX03uA49xVOZOjwnabWmQ==" + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "optional": true, - "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" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "optional": true + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "dev": true + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "requires": { + "readable-stream": "^2.0.2" + } + }, + "duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "echo-cli": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/echo-cli/-/echo-cli-1.0.8.tgz", + "integrity": "sha512-OZC63J3y2i3Agl02OJ8R/+AAfbWp2l2HC57IPCzRXhK8qNccgMY34lM6juBs0QpDfmEghjVYGHbAnkqSRmLWtQ==", + "dev": true, + "requires": { + "meow": "^3.7.0", + "unescape-js": "^1.0.3" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.5.123", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.123.tgz", + "integrity": "sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==", + "dev": true + }, + "elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + } + } + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "optional": true, + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { - "safer-buffer": "^2.1.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" } - }, - "ignore-walk": { + } + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha512-ZaAux1rigq1e2nQrztHn4h2ugvpzZxs64qneNah+8Mh/K0CRqJFJc+UoXnUsq+1yX+DmQFPPdVqboKAJ89e0Iw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "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, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + } + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + } + } + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "requires": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + } + }, + "es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "dev": true, + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + } + }, + "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, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, + "es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + } + }, + "es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dev": true, + "requires": { + "d": "^1.0.2", + "ext": "^1.7.0" + } + }, + "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, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.17.0.tgz", + "integrity": "sha512-AyxBUCANU/o/xC0ijGMKavo5Ls3oK6xykiOITlMdjFjrKOsqLrA7Nf5cnrDgcKrHzBirclAZt63XO7YZlVUPwA==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.2", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "^4.0.1", + "text-table": "~0.2.0" + }, + "dependencies": { + "ansi-regex": { "version": "3.0.1", - "bundled": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "optional": true, + "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==", + "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "color-convert": "^1.9.0" } }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "optional": true, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "optional": true, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "ms": "^2.1.1" } }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "optional": true + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "optional": true, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, "requires": { - "minipass": "^2.2.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, "mkdirp": { - "version": "0.5.1", - "bundled": true, - "optional": true, + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.6" } }, "ms": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", - "optional": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, - "needle": { - "version": "2.2.0", - "bundled": true, - "optional": true, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "ansi-regex": "^3.0.0" } }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "optional": true, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "has-flag": "^3.0.0" } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "optional": true, + } + } + }, + "eslint-config-standard": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", + "integrity": "sha512-UkFojTV1o0GOe1edOEiuI5ccYLJSuNngtqSeClNzhsmG8KPJ+7mRxgtp2oYhqZAK/brlXMoCd+VgXViE0AfyKw==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "ms": "^2.1.1" } }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "optional": true, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "ms": "^2.1.1" } }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "optional": true, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz", + "integrity": "sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==", + "dev": true, + "requires": { + "builtin-modules": "^1.1.1", + "contains-path": "^0.1.0", + "debug": "^2.6.8", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.1.1", + "has": "^1.0.1", + "lodash.cond": "^4.3.0", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==", + "dev": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "optional": true + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } }, - "once": { - "version": "1.4.0", - "bundled": true, - "optional": true, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==", + "dev": true, "requires": { - "wrappy": "1" + "pify": "^2.0.0" } }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "optional": true + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "optional": true + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "optional": true, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==", + "dev": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, - "path-is-absolute": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + } + } + }, + "eslint-plugin-node": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz", + "integrity": "sha512-xhPXrh0Vl/b7870uEbaumb2Q+LxaEcOQ3kS1jtIXanBAwpMre1l5q/l2l/hESYJGEFKuI78bp6Uw50hlpr7B+g==", + "dev": true, + "requires": { + "ignore": "^3.3.6", + "minimatch": "^3.0.4", + "resolve": "^1.3.3", + "semver": "5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", + "dev": true + } + } + }, + "eslint-plugin-promise": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz", + "integrity": "sha512-YQzM6TLTlApAr7Li8vWKR+K3WghjwKcYzY0d2roWap4SLK+kzuagJX/leTetIDWsFcTFnKNJXWupDCD6aZkP2Q==", + "dev": true + }, + "eslint-plugin-standard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", + "integrity": "sha512-JyT7wqVYlaHxnljWMT7CKa0R1QDQqArTi6g8kYnexTHHuK7x3Vg//kCepnoTgdT9x/kDbSluXMhJgjBvgVRLlQ==", + "dev": true + }, + "eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + } + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.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.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha512-UUPPULqkyAV+M3Shodis7l8D+IyX6V8SbaBnTb449jf3fMTd8+UOZI1Q70NbZVOQkcR91yYgdHsJiMMMVmYshg==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "event-stream": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-0.5.3.tgz", + "integrity": "sha512-PzynKvHzEq8UpM5xBNuz8fSufJik0619XuJp5uXCC3X6PpmbHUmsWbpfCBS+grDG2xFBpsDF9TbtftWFEpDKaA==", + "requires": { + "optimist": "0.2" + }, + "dependencies": { + "optimist": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.2.8.tgz", + "integrity": "sha512-Wy7E3cQDpqsTIFyW7m22hSevyTLxw850ahYv7FWsw4G6MIKVTZ8NSA95KBrQ95a4SMsMr1UGUUnwEFKhVaSzIg==", + "requires": { + "wordwrap": ">=0.0.1 <0.1.0" + } + } + } + }, + "eventemitter2": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", + "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==" + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "execall": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz", + "integrity": "sha512-/J0Q8CvOvlAdpvhfkD/WnTQ4H1eU0exze2nFGPj/RSC7jpQ0NkKe2r28T5eMkhEEs+fzepMZNy1kVRKNlC04nQ==", + "dev": true, + "requires": { + "clone-regexp": "^1.0.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==", + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", + "requires": { + "fill-range": "^2.1.0" + } + }, + "express": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha512-4mc9RUEAUpPMFR6gpXcnPt0/q2Zil35FTUr07ixWYX90RmUKL3jUbvTvJzkc/uL3r+A7kuWSiIqOyVUSWoZXWQ==", + "requires": { + "accepts": "~1.3.4", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.1", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.2", + "qs": "6.5.1", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "~1.3.1", + "type-is": "~1.6.15", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==" + } + } + }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "requires": { + "type": "^2.7.2" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha512-u1aUSYGdAQxyguoP919qsgj24krDCtaO/DJFNPwFmojMmKp14gtCTVsc8lQSqRDFrwAch+mxMWC8/6ZJPz5Hpw==" + }, + "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, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { "version": "1.0.1", - "bundled": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "optional": true, + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "is-plain-object": "^2.0.4" } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, - "optional": true, + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==", + "requires": { + "is-extglob": "^1.0.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" + }, + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==", + "dev": true + }, + "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": "sha512-eIgZvM9C3P05kg0qxfqaVU6Tma4QedCPIByQOcemV0vju8ot3cS2DpHi4m2G2JvbSMI152rjfLX0p1pkSdyPlQ==" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fibers": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fibers/-/fibers-3.0.0.tgz", + "integrity": "sha512-cAcOHOTbTMlcpNZvr94BNFsnBDBiEu9JP5MYcRLyl12HF/X0z3KvZyNzU9+BtI8lOIaV84PlDQJOKK3f5llJug==" + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "file-saver": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz", + "integrity": "sha512-2lGfU4gymmhXRUiPLeQlnlkMaSY8azJB9W8e/vFp44AlAOEvzf6XiBUoTHO9NBM4OVlehybxDM9B4SwLBh42mw==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==" + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==" + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "requires": { - "glob": "^7.0.5" + "semver": "^6.0.0" } }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "optional": true - }, "semver": { - "version": "5.5.0", - "bundled": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "optional": true + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + } + }, + "flatiron": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/flatiron/-/flatiron-0.4.3.tgz", + "integrity": "sha512-+X3/0hl9in0FJPsPB5/xTpkxxMzDSoA4cyon46HtXhrfEbpqBvKxpR+HJGqMjKv4jcBmoLjEtTVIAADJjLjv8A==", + "requires": { + "broadway": "~0.3.2", + "director": "1.2.7", + "optimist": "0.6.0", + "prompt": "0.2.14" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==" }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "optional": true, + "optimist": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz", + "integrity": "sha512-ubrZPyOU0AHpXkmwqfWolap+eHMwQ484AKivkf0ZGyysd6fUJZl7ow9iu5UNV1vCZv46HQ7EM83IC3NGJ820hg==", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" } + } + } + }, + "flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "dev": true + }, + "for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "requires": { + "is-callable": "^1.2.7" + }, + "dependencies": { + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", + "requires": { + "for-in": "^1.0.1" + } + }, + "forever": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/forever/-/forever-0.15.3.tgz", + "integrity": "sha512-yUy1bmHlsX9NasrUMOPk6CiE53y08+jMl8Xoc3LOTJ22BRJLpG9IXPa+oJMGanSMMumoV/aPcGmDu+nIFMMezQ==", + "requires": { + "cliff": "~0.1.9", + "clone": "^1.0.2", + "colors": "~0.6.2", + "flatiron": "~0.4.2", + "forever-monitor": "~1.7.0", + "nconf": "~0.6.9", + "nssocket": "~0.5.1", + "object-assign": "^3.0.0", + "optimist": "~0.6.0", + "path-is-absolute": "~1.0.0", + "prettyjson": "^1.1.2", + "shush": "^1.0.0", + "timespan": "~2.3.0", + "utile": "~0.2.1", + "winston": "~0.8.1" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==" }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==" }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "optional": true, + "winston": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", + "integrity": "sha512-fPoamsHq8leJ62D1M9V/f15mjQ1UHe4+7j1wpAT3fqgA5JqhJkk4aIfPEjfMTI9x6ZTjaLOpMAjluLtmgO5b6g==", "requires": { - "ansi-regex": "^2.0.0" + "async": "0.2.x", + "colors": "0.6.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "pkginfo": "0.3.x", + "stack-trace": "0.0.x" } + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" + }, + "forever-monitor": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/forever-monitor/-/forever-monitor-1.7.2.tgz", + "integrity": "sha512-TGFkX9Hg1X0A4o0ShOvI7AH+p0Ra2kUfhA4kNL0/DY1lQO7T+DUBbSODFBQrykcrxjyw+D1RiawNOX3X2NFfrw==", + "requires": { + "broadway": "~0.3.6", + "chokidar": "^1.7.0", + "minimatch": "~3.0.2", + "ps-tree": "0.0.x", + "utile": "^0.3.0" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==" }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } + "deep-equal": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", + "integrity": "sha512-FXgye2Jr6oEk01S7gmSrHrPEQ1ontR7wwl+nYiZ8h4SXlHVm0DYda74BIPcHz2s2qPz4+375IcAz1vsWLwddgQ==" }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "optional": true + "ncp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", + "integrity": "sha512-akBX7I5X9KQDDWmYYgQlLbVbjkveTje2mioZjhLLrVt09akSZcoqXWE5LEn1E2fu8T7th1PZYGfewQsTkTLTmQ==" }, - "wide-align": { - "version": "1.1.2", - "bundled": true, - "optional": true, + "utile": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz", + "integrity": "sha512-KaciY16ate/pJ7BAwBpVcfQlgJT02WRivIv8DlCX1cvg6WxaNEXHcdqazuS9fQ7PUoU5CH2UeY3wkqq16wRiWg==", "requires": { - "string-width": "^1.0.2" + "async": "~0.9.0", + "deep-equal": "~0.2.1", + "i": "0.3.x", + "mkdirp": "0.x.x", + "ncp": "1.0.x", + "rimraf": "2.x.x" } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "optional": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "optional": true } } }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "format-util": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz", + "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==" + }, + "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, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fready": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fready/-/fready-1.0.0.tgz", + "integrity": "sha512-XyjZLP1efOKfAgAGQL8vNtqFPx9UlqP9K/8DQKOkwGihN3WsoaEdqSk3+mwMLRpl+7s0RFoOtJA94dsGuFQeqw==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -4746,52 +5581,115 @@ "rimraf": "2" } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + } }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "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 }, "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "dependencies": { + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + } + } + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, "get-stdin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", "dev": true }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true }, + "get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", "dev": true }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "requires": { "assert-plus": "^1.0.0" } @@ -4812,7 +5710,7 @@ "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==", "requires": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" @@ -4821,7 +5719,7 @@ "glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", "requires": { "is-glob": "^2.0.0" } @@ -4829,7 +5727,7 @@ "global-dirs": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", "dev": true, "requires": { "ini": "^1.3.4" @@ -4841,14 +5739,23 @@ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, + "globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "requires": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + } + }, "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", "dev": true, "requires": { "array-union": "^1.0.1", - "arrify": "^1.0.0", "glob": "^7.0.3", "object-assign": "^4.0.1", "pify": "^2.0.0", @@ -4858,7 +5765,7 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true } } @@ -4866,30 +5773,35 @@ "globjoin": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true }, "gonzales-pe": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.2.3.tgz", - "integrity": "sha512-Kjhohco0esHQnOiqqdJeNz/5fyPkOMD/d6XVjwTAoPGUFh0mCollPUTUTa2OZy4dYNAqlPIQdTiNzJTWdd9Htw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dev": true, "requires": { - "minimist": "1.1.x" + "minimist": "^1.2.5" }, "dependencies": { "minimist": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz", - "integrity": "sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag=", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true } } }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, "got": { "version": "6.7.1", - "resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg==", "dev": true, "requires": { "create-error-class": "^3.0.0", @@ -4908,7 +5820,7 @@ "graceful-fs": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + "integrity": "sha512-9x6DLUuW+ROFdMTII9ec9t/FK8va6kYcC8/LggumssLM8kNv7IdFl3VrNUqgir2tJuBVxBga1QBoRziZacO5Zg==" }, "growl": { "version": "1.10.5", @@ -4937,32 +5849,32 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==" }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "requires": { - "ajv": "^6.5.5", + "ajv": "^6.12.3", "har-schema": "^2.0.0" }, "dependencies": { "ajv": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", - "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "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=" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "json-schema-traverse": { "version": "0.4.1", @@ -4972,33 +5884,65 @@ } }, "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "dev": true, - "requires": { - "function-bind": "^1.0.2" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, + "has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==" + }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", "dev": true }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "requires": { + "has-symbols": "^1.0.3" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", "dev": true, "requires": { "get-value": "^2.0.6", @@ -5009,7 +5953,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true } } @@ -5017,7 +5961,7 @@ "has-values": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", "dev": true, "requires": { "is-number": "^3.0.0", @@ -5027,7 +5971,7 @@ "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "requires": { "kind-of": "^3.0.2" @@ -5036,7 +5980,7 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -5047,7 +5991,7 @@ "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -5056,62 +6000,82 @@ } }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "hash.js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", - "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + }, + "dependencies": { + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + } + } + }, "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "integrity": "sha512-z/GDPjlRMNOa2XJiB4em8wJpuuBfrFOlYKTZxtpkdr1uPdibHI8rYA3MY0KDObpVyaes0e/aunid/t88ZI2EKA==", "dev": true }, "heap": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz", - "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=" + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" }, "history": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", - "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", "requires": { - "invariant": "^2.2.1", + "@babel/runtime": "^7.1.2", "loose-envify": "^1.2.0", - "resolve-pathname": "^2.2.0", - "value-equal": "^0.4.0", - "warning": "^3.0.0" - }, - "dependencies": { - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "requires": { - "loose-envify": "^1.0.0" - } - } + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" } }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, "requires": { "hash.js": "^1.0.3", @@ -5124,16 +6088,6 @@ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz", "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==" }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - } - }, "hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -5141,21 +6095,21 @@ "dev": true }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "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 }, "html-comment-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", - "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", "dev": true }, "html-element": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/html-element/-/html-element-2.2.0.tgz", - "integrity": "sha1-w8H/iMJh23TQr2OR7vkMNG+QBzA=", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/html-element/-/html-element-2.3.1.tgz", + "integrity": "sha512-xnFt2ZkbFcjc+JoAtg3Hl89VeEZDjododu4VCPkRvFmBTHHA9U1Nt6hLUWfW2O+6Sl/rT1hHK/PivleX3PdBJQ==", "requires": { "class-list": "~0.1.1" } @@ -5163,45 +6117,66 @@ "html-tags": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", "dev": true }, "htmlparser2": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", - "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, "requires": { - "domelementtype": "^1.3.0", + "domelementtype": "^1.3.1", "domhandler": "^2.3.0", "domutils": "^1.5.1", "entities": "^1.1.1", "inherits": "^2.0.1", - "readable-stream": "^2.0.2" + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } } }, "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - } + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" } }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -5211,13 +6186,13 @@ "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true }, "hyperscript": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hyperscript/-/hyperscript-2.0.2.tgz", - "integrity": "sha1-ODnLpFVUvf4nu4HCFC0WhPgTWvU=", + "integrity": "sha512-uggBAYfHFC5WyZQXlJ61BNZbPmJbschcvfYNhYdZWCp+0J8KYb5Du8nQuk8Ru+ThoCNb01B0tPtnTRqnrFBkVg==", "requires": { "browser-split": "0.0.0", "class-list": "~0.1.0", @@ -5225,9 +6200,9 @@ } }, "i": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", - "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=" + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.7.tgz", + "integrity": "sha512-FYz4wlXgkQwIPqhzC5TdNMLSE5+GS1IIDJZY/1ZiEPCT2S3COUVZeT5OW4BmW4r5LHLQuOosSwsvnroG9GR59Q==" }, "iconv-lite": { "version": "0.4.19", @@ -5235,39 +6210,39 @@ "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, "ignore": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", - "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", "dev": true }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "indent-string": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", "dev": true, "requires": { "repeating": "^2.0.0" @@ -5276,18 +6251,18 @@ "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", "dev": true }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==" }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -5296,7 +6271,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "ini": { "version": "1.3.5", @@ -5325,127 +6300,79 @@ "through": "^2.3.6" }, "dependencies": { - "ansi-escapes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", - "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==", - "dev": true - }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.1.0", + "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" - } - }, - "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=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "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=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "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=", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "requires": { "ansi-regex": "^3.0.0" } }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "^3.0.0" } } } }, - "interpret": { + "internal-slot": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "requires": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, "invariant": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", - "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, "requires": { "loose-envify": "^1.0.0" } @@ -5453,91 +6380,123 @@ "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", "dev": true }, "ipaddr.js": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", - "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "is-absolute-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", "dev": true }, "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==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", "dev": true, "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "hasown": "^2.0.0" } }, "is-alphabetical": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.1.tgz", - "integrity": "sha1-x3B5zJHU76x3W+EDS/LSQ/lebwg=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true }, "is-alphanumeric": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", - "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "integrity": "sha512-ZmRL7++ZkcMOfDuWZuMJyIVLr2keE1o/DeNWh1EmgqGhUcV+9BIVsx0BcSBOHTZqzjs4+dISzr2KAeBEWGgXeA==", "dev": true }, "is-alphanumerical": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz", - "integrity": "sha1-37SqTRCF4zvbYcLe6cgOnGwZ9Ts=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, "requires": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" } }, + "is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", + "requires": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + } + }, + "is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + } + }, "is-arrayish": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.1.tgz", - "integrity": "sha1-wt/DhquqDD4zxI2z/ocFnmkGXv0=", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "requires": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + } + }, + "is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "requires": { + "has-bigints": "^1.0.2" + } + }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", "requires": { "binary-extensions": "^1.0.0" } }, + "is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "requires": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-ci": { @@ -5549,69 +6508,76 @@ "ci-info": "^1.5.0" } }, + "is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "requires": { + "hasown": "^2.0.2" + } + }, "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==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", "dev": true, "requires": { - "kind-of": "^6.0.0" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "hasown": "^2.0.0" + } + }, + "is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + } }, "is-decimal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.1.tgz", - "integrity": "sha1-9ftqlJlq2ejjdh+/vQkfH8qMToI=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true }, "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "dependencies": { - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } }, "is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", "dev": true }, "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==" }, "is-equal-shallow": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "integrity": "sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==", "requires": { "is-primitive": "^2.0.0" } @@ -5619,65 +6585,85 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" }, "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==" }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "call-bound": "^1.0.3" } }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" } }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "requires": { "is-extglob": "^1.0.0" } }, "is-hexadecimal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz", - "integrity": "sha1-bghLvJIGH7sJcexYts5tQE4k2mk=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, "is-installed-globally": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "integrity": "sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw==", "dev": true, "requires": { "global-dirs": "^0.1.0", "is-path-inside": "^1.0.0" } }, + "is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==" + }, "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "integrity": "sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg==", "dev": true }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", "requires": { "kind-of": "^3.0.2" }, @@ -5685,38 +6671,32 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "requires": { "is-buffer": "^1.1.5" } } } }, + "is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "requires": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + } + }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "dev": true }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "^1.0.0" - } - }, "is-path-inside": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", "dev": true, "requires": { "path-is-inside": "^1.0.1" @@ -5725,7 +6705,7 @@ "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true }, "is-plain-object": { @@ -5740,7 +6720,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true } } @@ -5748,38 +6728,35 @@ "is-posix-bracket": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + "integrity": "sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==" }, "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true + "integrity": "sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==" }, "is-redirect": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "integrity": "sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==", "dev": true }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "requires": { - "has": "^1.0.1" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" } }, "is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "dev": true }, "is-resolvable": { @@ -5789,120 +6766,170 @@ "dev": true }, "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "dev": true }, + "is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==" + }, + "is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "requires": { + "call-bound": "^1.0.3" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + }, + "is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "requires": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + } }, "is-supported-regexp-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.0.tgz", - "integrity": "sha1-i1IMhfrnolM4LUsCZS4EVXbhO7g=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz", + "integrity": "sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==", "dev": true }, "is-svg": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", - "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "integrity": "sha512-Ya1giYJUkcL/94quj0+XGcmts6cETPBW1MiFz1ReJrnDJ680F52qpAEGAEGU0nq96FRGIGPx6Yo1CyPXcOoyGw==", "dev": true, "requires": { "html-comment-regex": "^1.1.0" } }, "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + } + }, + "is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.16" + } }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true }, + "is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==" + }, + "is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "requires": { + "call-bound": "^1.0.3" + } + }, + "is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "requires": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + } + }, "is-whitespace-character": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz", - "integrity": "sha1-muAXbzKCtlRXoZks2whPil+DPjs=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", "dev": true }, "is-windows": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.1.tgz", - "integrity": "sha1-MQ23D3QtJZoWo2kgK1GvhCMzENk=", + "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 }, "is-word-character": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.1.tgz", - "integrity": "sha1-WgP6HqkazopusMfNdw64bWXIvvs=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "isnumeric": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/isnumeric/-/isnumeric-0.2.0.tgz", - "integrity": "sha1-ojR7o2DeGeM9D/1ZD933dVy/LmQ=", + "integrity": "sha512-uSJoAwnN1eCKDFKi8hL3UCYJSkQv+NwhKzhevUPIn/QZ8ILO21f+wQnlZHU0eh1rsLO1gI4w/HQdeOSTKwlqMg==", "dev": true }, "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", "requires": { "isarray": "1.0.0" } }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - } - }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "js-base64": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", - "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", "dev": true }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==" }, "js-yaml": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "integrity": "sha512-eIlkGty7HGmntbV6P/ZlAsoncFLGsNoM27lkTzS+oneY/EiNhj+geqD9ezg/ip+SW6Var0BJU2JtV0vEUZpWVQ==", "requires": { "argparse": "^1.0.7", "esprima": "^2.6.0" @@ -5911,19 +6938,19 @@ "esprima": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==" } } }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true }, "json-loader": { @@ -5933,20 +6960,20 @@ "dev": true }, "json-parse-better-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz", - "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "json-schema-ref-parser": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-1.4.1.tgz", - "integrity": "sha1-wMLkOL8HlnI7AkUbrovH3Qs3/tA=", + "integrity": "sha512-GdF0nCPo+cxX7/sgu0pIH4PI1uNUBZHsZOaOCrGha8rL7JoaIKYJd7iNDeqmwJZrbOwXw1g51knhz/HJdw02nA==", "requires": { "call-me-maybe": "^1.0.1", "debug": "^2.2.0", @@ -5958,58 +6985,62 @@ "es6-promise": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=" + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==" }, "ono": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/ono/-/ono-2.2.5.tgz", - "integrity": "sha1-2vCUiLURdNp6fkJ136sxtDj/oOM=" + "integrity": "sha512-pi/dX/DqBA9O8FFTgdR2uuYBQoW40QIB0UW7vH1QcRpoTsYA/ANcWspzD7pFxyrs+P09/K5fKAVdr9k42twy3A==" } } }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", "dev": true }, "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=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", "dev": true }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } }, "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" } }, "just-extend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", - "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, "kind-of": { @@ -6026,7 +7057,7 @@ "latest-version": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "integrity": "sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w==", "dev": true, "requires": { "package-json": "^4.0.0" @@ -6035,12 +7066,18 @@ "lazy": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/lazy/-/lazy-1.0.11.tgz", - "integrity": "sha1-2qBoIGKCVCwIgojpdcKXwa53tpA=" + "integrity": "sha512-Y+CjUfLmIpoUCCRl0ub4smrYtGGr5AOa2AKOaWelGHOGz33X/Y/KizefGqbkwfz44+cnq/+9habclf8vOmu2LA==" + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "dev": true }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", "dev": true, "requires": { "invert-kv": "^1.0.0" @@ -6049,7 +7086,7 @@ "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "requires": { "prelude-ls": "~1.1.2", @@ -6059,12 +7096,12 @@ "linkedlist-js": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/linkedlist-js/-/linkedlist-js-1.3.0.tgz", - "integrity": "sha1-K0H5MzjFOGg/WUCgyHhROIv13ng=" + "integrity": "sha512-YwgG4Et8dJF04nsn9YuyrydUJvwmJHOQo7PzxvkT09NTgQ1yC+vXHGBolo48rTjAItIYR7YWIXh6xZsavCBSvQ==" }, "listenercount": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" }, "livereload": { "version": "0.7.0", @@ -6073,32 +7110,14 @@ "dev": true, "requires": { "chokidar": "^1.7.0", - "opts": ">= 1.2.0", - "ws": "^1.1.5" - }, - "dependencies": { - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", - "dev": true - }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "dev": true, - "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - } + "opts": ">= 1.2.0", + "ws": "^1.1.5" } }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -6111,32 +7130,43 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true } } }, "loader-runner": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", - "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true }, "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } } }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "requires": { "p-locate": "^2.0.0", @@ -6151,63 +7181,63 @@ "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", "dev": true }, "lodash.cond": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=", + "integrity": "sha512-RWjUhzGbzG/KfDwk+onqdXvrsNv47G9UCMJgSKalPTSqJQyxZhQophG9jgqLf+15TIbZ5a/yG2YKOWsH3dVy9A==", "dev": true }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "lodash.defaultsdeep": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.0.tgz", - "integrity": "sha1-vsECT4WxvZbL6kBbI8FK1kQ6b4E=" + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==" }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, "lodash.template": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "dev": true, "requires": { - "lodash._reinterpolate": "~3.0.0", + "lodash._reinterpolate": "^3.0.0", "lodash.templatesettings": "^4.0.0" } }, "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", "dev": true, "requires": { - "lodash._reinterpolate": "~3.0.0" + "lodash._reinterpolate": "^3.0.0" } }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, "log-symbols": { @@ -6220,38 +7250,38 @@ }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.1.0", + "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "^3.0.0" } } } @@ -6265,19 +7295,19 @@ "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==", "dev": true }, "longest-streak": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.2.tgz", - "integrity": "sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true }, "loose-envify": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "integrity": "sha512-iG/U770U9HaHmy0u+fSyxSIclZ3d9WPFtGjV2drWW0SthBnQ1Fa/SCKIaGLAVwYzrBGEPx9gen047er+MCUgnQ==", "requires": { "js-tokens": "^3.0.0" } @@ -6285,7 +7315,7 @@ "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", "dev": true, "requires": { "currently-unhandled": "^0.4.1", @@ -6299,9 +7329,9 @@ "dev": true }, "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { "pseudomap": "^1.0.2", @@ -6313,25 +7343,19 @@ "resolved": "https://registry.npmjs.org/lucene-escape-query/-/lucene-escape-query-1.0.1.tgz", "integrity": "sha512-iuB/RqAZjHI9YWm3zyM8qQkPxCi5nA3zcYZn71UM/W/+wh26fWpfxkLKZSgogoAvBjhN/4NhR+hxk2gScc81ow==" }, - "macaddress": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.9.tgz", - "integrity": "sha512-k4F1JUof6cQXxNFzx3thLby4oJzXTXQueAOOts944Vqizn+Rjc2QNFenT9FJSLU1CH3PmrHRSyZs2E+Cqw+P2w==", - "dev": true - }, "make-dir": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", - "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { "pify": "^3.0.0" } }, "map-age-cleaner": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", - "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "requires": { "p-defer": "^1.0.0" } @@ -6339,57 +7363,62 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true }, "map-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true }, "map-stream": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", "dev": true }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", "dev": true, "requires": { "object-visit": "^1.0.0" } }, "markdown-escapes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.1.tgz", - "integrity": "sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", "dev": true }, "markdown-table": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.1.tgz", - "integrity": "sha1-Sz3ToTPRUYuO8NvHCb8qG0gkvIw=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", "dev": true }, "math-expression-evaluator": { - "version": "1.2.17", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", - "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.4.0.tgz", + "integrity": "sha512-4vRUvPyxdO8cWULGTh9dZWL2tZK6LDBvj+OGHBER7poH9Qdt7kXEoj20wiz4lQUbUXQZFjPbe5mVDo9nutizCw==", "dev": true }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==" }, "mathml-tag-names": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.0.1.tgz", - "integrity": "sha1-jUEmgWi/htEQK5gQnijlMeejRXg=", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true }, "md5.js": { @@ -6404,27 +7433,26 @@ }, "dependencies": { "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true } } }, "mdast-util-compact": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz", - "integrity": "sha1-zbX4TitqLTEU3zO9BdnLMuPECDo=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", + "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", "dev": true, "requires": { - "unist-util-modify-children": "^1.0.0", "unist-util-visit": "^1.1.0" } }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, "mem": { "version": "4.0.0", @@ -6439,7 +7467,7 @@ "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", "dev": true, "requires": { "errno": "^0.1.3", @@ -6449,13 +7477,13 @@ "memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true }, "meow": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", "dev": true, "requires": { "camelcase-keys": "^2.0.0", @@ -6473,17 +7501,17 @@ "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", "requires": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", @@ -6503,7 +7531,7 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "requires": { "is-buffer": "^1.1.5" } @@ -6518,6 +7546,14 @@ "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + } } }, "mime": { @@ -6526,16 +7562,16 @@ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { - "version": "1.30.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", - "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.17", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", - "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "~1.30.0" + "mime-db": "1.52.0" } }, "mimic-fn": { @@ -6552,7 +7588,7 @@ "minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", "dev": true }, "minimatch": { @@ -6566,7 +7602,7 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "integrity": "sha512-7Wl+Jz+IGWuSdgsQEJ4JunV0si/iMhg42MnQQG6h1R6TNeVenp4U9x5CC5v/gYqz/fENLQITAWXidNtVL0NNbw==" }, "minimist-options": { "version": "3.0.2", @@ -6579,9 +7615,9 @@ } }, "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { "for-in": "^1.0.2", @@ -6602,7 +7638,7 @@ "mkdirp": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", - "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "integrity": "sha512-xjjNGy+ry1lhtIKcr2PT6ok3aszhQfgrUDp4OZLHacgRgFmF6XR9XCOJVcXlVGQonIqXcK1DvqgKKQOPWYGSfw==", "requires": { "minimist": "0.0.8" }, @@ -6610,7 +7646,7 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==" } } }, @@ -6651,19 +7687,19 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "integrity": "sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q==", "dev": true }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "integrity": "sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA==", "dev": true, "requires": { "minimist": "0.0.8" @@ -6683,7 +7719,7 @@ "morgan": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", - "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", + "integrity": "sha512-vqY5UfyHbGQZ3KXlGtNvAqGzOkPxrFTtChQdP146QCjpUhbtgW/aQIb2gUVR0jY0rH+MNArmklXiXxDd+L8fmA==", "requires": { "basic-auth": "~2.0.0", "debug": "2.6.9", @@ -6700,7 +7736,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "multistream": { "version": "2.1.1", @@ -6714,12 +7750,18 @@ "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==" }, "n-gram": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/n-gram/-/n-gram-1.0.1.tgz", - "integrity": "sha1-0ppGXk3rz/f57tn7V9nabIBvQRI=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/n-gram/-/n-gram-1.1.2.tgz", + "integrity": "sha512-mBTpWKp0NHdujHmxrskPg2jc108mjyMmVxHN1rZGK/ogTLi9O0debDIXlQPqotNELdNmVGtL4jr7SCig+4OWvQ==" + }, + "nan": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", + "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", + "optional": true }, "nanomatch": { "version": "1.2.13", @@ -6743,54 +7785,13 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", "dev": true }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "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, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "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, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "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 - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true } } @@ -6798,13 +7799,13 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "nconf": { "version": "0.6.9", "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.6.9.tgz", - "integrity": "sha1-lXDvFe1vmuays8jV5xtm0xk81mE=", + "integrity": "sha512-MHiYHIc2igQsoI1v0IcVE4MVaV/+yIQtduOwUcQNoLd+pPgoKblWKbgU3itkhC0az5w2VMdQlQuAO+oi4qxtJg==", "requires": { "async": "0.2.9", "ini": "1.x.x", @@ -6814,17 +7815,17 @@ "async": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/async/-/async-0.2.9.tgz", - "integrity": "sha1-32MGD789Myhqdqr21Vophtn/hhk=" + "integrity": "sha512-OAtM6mexGteNKdU29wcUfRW+VuBr94A3hx9h9yzBnPaQAbKoW1ORd68XM4CCAOpdL5wlNFgO29hsY1TKv2vAKw==" }, "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==" }, "optimist": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.0.tgz", - "integrity": "sha1-aUJIJvNAX3nxQub8PZrljU27kgA=", + "integrity": "sha512-ubrZPyOU0AHpXkmwqfWolap+eHMwQ484AKivkf0ZGyysd6fUJZl7ow9iu5UNV1vCZv46HQ7EM83IC3NGJ820hg==", "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -6835,48 +7836,57 @@ "ncp": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz", - "integrity": "sha1-q8xsvT7C7Spyn/bnwfqPAXhKhXQ=" + "integrity": "sha512-PfGU8jYWdRl4FqJfCy0IzbkGyFHntfWygZg46nFk/dJD/XRrk2cj0SsKSX9n5u5gE0E0YfEpKWrEkfjnlZSTXA==" }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, "neo-async": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.2.tgz", - "integrity": "sha512-vdqTKI9GBIYcAEbFAcpKPErKINfPF5zIuz3/niBfq8WUZjpT2tytLlFVrBgWdOtqI4uaA/Rb6No0hux39XXDuw==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", "dev": true }, "nise": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.2.tgz", - "integrity": "sha512-/6RhOUlicRCbE9s+94qCUsyE+pKlVJ5AhIv+jEE7ESKwnbXqulKZ1FYU+XAtHHWE9TinYvAxDUJAb912PwPoWA==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", + "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", "dev": true, "requires": { "@sinonjs/formatio": "^3.2.1", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", - "lolex": "^4.1.0", + "lolex": "^5.0.1", "path-to-regexp": "^1.7.0" }, "dependencies": { "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, + "lolex": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", + "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "dev": true, "requires": { "isarray": "0.0.1" @@ -6903,9 +7913,9 @@ } }, "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "requires": { "assert": "^1.1.1", @@ -6915,10 +7925,10 @@ "constants-browserify": "^1.0.0", "crypto-browserify": "^3.11.0", "domain-browser": "^1.1.1", - "events": "^1.0.0", + "events": "^3.0.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", + "path-browserify": "0.0.1", "process": "^0.11.10", "punycode": "^1.2.4", "querystring-es3": "^0.2.0", @@ -6929,8 +7939,8 @@ "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", "url": "^0.11.0", - "util": "^0.10.3", - "vm-browserify": "0.0.4" + "util": "^0.11.0", + "vm-browserify": "^1.0.1" } }, "node-object-hash": { @@ -6938,6 +7948,12 @@ "resolved": "https://registry.npmjs.org/node-object-hash/-/node-object-hash-1.4.1.tgz", "integrity": "sha512-JQVqSM5/mOaUoUhCYR0t1vgm8RFo7qpJtPvnoFCLeqQh1xrfmr3BCD3nGBnACzpIEF7F7EVgqGD3O4lao/BY/A==" }, + "node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, "nodemon": { "version": "1.18.7", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.7.tgz", @@ -6964,18 +7980,29 @@ "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" + }, + "dependencies": { + "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, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", "dev": true }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true }, "braces": { @@ -6999,7 +8026,7 @@ "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "requires": { "is-extendable": "^0.1.0" @@ -7008,57 +8035,46 @@ } }, "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", "glob-parent": "^3.1.0", - "inherits": "^2.0.1", + "inherits": "^2.0.3", "is-binary-path": "^1.0.0", "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", + "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "readdirp": "^2.2.1", + "upath": "^1.1.1" } }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" }, "dependencies": { "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==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, - "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, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", "dev": true, "requires": { "debug": "^2.3.3", @@ -7082,7 +8098,7 @@ "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "requires": { "is-descriptor": "^0.1.0" @@ -7091,48 +8107,20 @@ "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "requires": { "is-extendable": "^0.1.0" } }, "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, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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 - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "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==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } } } @@ -7156,7 +8144,7 @@ "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, "requires": { "is-descriptor": "^1.0.0" @@ -7165,7 +8153,7 @@ "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "requires": { "is-extendable": "^0.1.0" @@ -7176,7 +8164,7 @@ "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -7188,7 +8176,7 @@ "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "requires": { "is-extendable": "^0.1.0" @@ -7199,7 +8187,7 @@ "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, "requires": { "is-glob": "^3.1.0", @@ -7209,7 +8197,7 @@ "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, "requires": { "is-extglob": "^2.1.0" @@ -7220,59 +8208,29 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -7281,7 +8239,7 @@ "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "requires": { "kind-of": "^3.0.2" @@ -7290,7 +8248,7 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -7301,7 +8259,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, "micromatch": { @@ -7325,6 +8283,23 @@ "to-regex": "^3.0.2" } }, + "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 + }, + "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, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -7336,23 +8311,14 @@ } } }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } @@ -7360,7 +8326,7 @@ "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "requires": { "remove-trailing-separator": "^1.0.1" } @@ -7368,19 +8334,19 @@ "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true }, "normalize-selector": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==", "dev": true }, "normalize-url": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", "dev": true, "requires": { "object-assign": "^4.0.1", @@ -7392,7 +8358,7 @@ "query-string": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", "dev": true, "requires": { "object-assign": "^4.1.0", @@ -7404,7 +8370,7 @@ "normalize.css": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-5.0.0.tgz", - "integrity": "sha1-fOyHXOgXilMzxN6Ato6pwYudfDc=" + "integrity": "sha512-/b05fOCyJtLDXlxSVdqyLWBrqi39nAUTeBOKrtLQw+a9FuMwNqguB6X4Mlf7C4QxTs/2xu8SlzE6Xbp9Smrq7A==" }, "npm-run-all": { "version": "4.1.2", @@ -7424,29 +8390,29 @@ }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.1.0", + "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" + "supports-color": "^5.3.0" } }, "event-stream": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", "dev": true, "requires": { "duplexer": "~0.1.1", @@ -7459,15 +8425,15 @@ } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -7479,7 +8445,7 @@ "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "requires": { "error-ex": "^1.3.1", @@ -7496,18 +8462,18 @@ } }, "ps-tree": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", - "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", "dev": true, "requires": { - "event-stream": "~3.3.0" + "event-stream": "=3.3.4" } }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "requires": { "load-json-file": "^4.0.0", @@ -7518,16 +8484,16 @@ "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "^3.0.0" } } } @@ -7535,7 +8501,7 @@ "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, "requires": { "path-key": "^2.0.0" @@ -7544,7 +8510,7 @@ "nssocket": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/nssocket/-/nssocket-0.5.3.tgz", - "integrity": "sha1-iDyi7GBfXtZKTVGQsmJUAZKPj40=", + "integrity": "sha512-qrxdGVhPQDkwoI62afGMEqlp35zyqj7PvrkGFAIFgXuIoZEvZtz3lJJR4ZFfOYnRPh2zLzAHw5ylU5vATCdMYQ==", "requires": { "eventemitter2": "~0.4.14", "lazy": "~1.0.11" @@ -7553,13 +8519,13 @@ "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", "dev": true }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true }, "oauth-sign": { @@ -7570,12 +8536,12 @@ "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", "dev": true, "requires": { "copy-descriptor": "^0.1.0", @@ -7586,53 +8552,16 @@ "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "requires": { "is-descriptor": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "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, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "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 - } - } - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -7645,21 +8574,52 @@ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.2.0.tgz", "integrity": "sha512-smRWXzkvxw72VquyZ0wggySl7PFUtoDhvhpdwgESXxUrH7vVhhp9asfup1+rVLrhsl7L45Ee1Q/l5R2Ul4MwUg==" }, + "object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" + }, + "object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "dependencies": { + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + } + } + }, "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=" + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz", + "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==" }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", "dev": true, "requires": { "isobject": "^3.0.0" @@ -7668,15 +8628,45 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true } } }, + "object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "dependencies": { + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + } + } + }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "integrity": "sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==", "requires": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" @@ -7685,7 +8675,7 @@ "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, "requires": { "isobject": "^3.0.1" @@ -7694,7 +8684,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true } } @@ -7702,30 +8692,39 @@ "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "requires": { "ee-first": "1.1.1" } }, "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "requires": { "wrappy": "1" } }, "onecolor": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-3.0.5.tgz", - "integrity": "sha1-Nu/zIgE3nv3xGA+0ReUajiQl+fY=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-3.1.0.tgz", + "integrity": "sha512-YZSypViXzu3ul5LMu/m6XjJ9ol8qAy9S2VjHl5E6UlhUH1KGKWabyEJifn0Jjpw23bYDzC2ucKMPGiH5kfwSGQ==", "dev": true }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, "ono": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/ono/-/ono-4.0.11.tgz", @@ -7735,20 +8734,20 @@ } }, "opencollective-postinstall": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.1.tgz", - "integrity": "sha512-saQQ9hjLwu/oS0492eyYotoh+bra1819cfAT5rjY/e4REWwuc8IgZ844Oo44SiftWcJuBiqp0SA0BFVbmLX0IQ==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" }, "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, "optimist": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -7757,42 +8756,34 @@ "minimist": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==" } } }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } + "word-wrap": "~1.2.3" } }, "options": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "integrity": "sha512-bOj3L1ypm++N+n7CEbbe473A414AB7z+amKYshRb//iuL3MpdDCLhPnw6aVTdKB9g5ZRVHIEp8eUln6L2NUStg==", "dev": true }, "opts": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/opts/-/opts-1.2.6.tgz", - "integrity": "sha1-0YXAQlz9652h0YKQi2W1wCOP67M=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", + "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", "dev": true }, "ora": { @@ -7808,66 +8799,38 @@ }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.1.0", + "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" - } - }, - "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=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "^3.0.0" } } } @@ -7875,41 +8838,74 @@ "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", "dev": true }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + }, + "dependencies": { + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha512-nOBDrc/wgpkd3X/JOhMqYR+/eLqlfLP4oQfoBA6QExIxEl+GU01oyEkwWyueyO8110pUKijtiHGhEmYoOn88oQ==", + "dev": true, + "requires": { + "mimic-fn": "^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=", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true }, + "own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + } + }, "p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==" }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true }, "p-is-promise": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==" }, "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { "p-try": "^1.0.0" @@ -7918,7 +8914,7 @@ "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "requires": { "p-limit": "^1.1.0" @@ -7931,30 +8927,18 @@ "requires": { "mem": "^4.0.0", "mimic-fn": "^1.0.0" - }, - "dependencies": { - "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" - } - } } }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true }, "package-json": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "integrity": "sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA==", "dev": true, "requires": { "got": "^6.7.1", @@ -7964,28 +8948,37 @@ } }, "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parse-asn1": { - "version": "5.1.1", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "parse-entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.1.tgz", - "integrity": "sha1-gRLYhHExnyerrk1klksSL+ThuJA=", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", "dev": true, "requires": { "character-entities": "^1.0.0", @@ -7999,7 +8992,7 @@ "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", "requires": { "glob-base": "^0.3.0", "is-dotfile": "^1.0.0", @@ -8010,73 +9003,73 @@ "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, "requires": { "error-ex": "^1.2.0" } }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", "dev": true }, "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", "dev": true }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", "dev": true }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "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=", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", "dev": true }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true }, "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "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 }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -8087,30 +9080,30 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true } } }, "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, "requires": { "through": "~2.3" } }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -8123,24 +9116,37 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "optional": true }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "requires": { "pinkie": "^2.0.0" @@ -8149,7 +9155,7 @@ "pixrem": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pixrem/-/pixrem-4.0.1.tgz", - "integrity": "sha1-LaSh3m7EQjxfw3lOkwuB1EkOxoY=", + "integrity": "sha512-sFMGjkE42jNwAMBvBdWSx9f6MGZfufkfChzLxow7JmKY6XHWpNqLIwTQABcJOek0LCdtNf22cdL5fYzKLELmCA==", "dev": true, "requires": { "browserslist": "^2.0.0", @@ -8158,23 +9164,74 @@ } }, "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "^2.1.0" + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } } }, "pkginfo": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", - "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=" + "integrity": "sha512-yO5feByMzAp96LtP58wvPKSbaKAi/1C4kV9XpTctr6EepnP6F33RBNOiVrdz9BrPA98U2BMFsTNHo44TWcbQ2A==" }, "pleeease-filters": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pleeease-filters/-/pleeease-filters-4.0.0.tgz", - "integrity": "sha1-ZjKy+wVkjSdY2GU4T7zteeHMrsc=", + "integrity": "sha512-EtyjMK41s2+q/eM6wED/9U5bWzowfP/ImQb9AxKzt/+Xlbb5CxQ7dAToEoSQuxyidmkZzHAl483m2sBm2XvfFw==", "dev": true, "requires": { "onecolor": "^3.0.4", @@ -8188,21 +9245,26 @@ "dev": true }, "popper.js": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.12.9.tgz", - "integrity": "sha1-DfvC3/lsRRuzMu3Pz6r1ZtMx1bM=" + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" }, "porter-stemmer": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/porter-stemmer/-/porter-stemmer-0.9.1.tgz", - "integrity": "sha1-oW7Oo6vkRySsiMFIACHqNrqiH5s=" + "integrity": "sha512-vnSYgMMWKMo0+zCUumdcQAYE2RD55k2b27sPySqseetSRaGtXCCktv3llCB4EXyU1nQApMM5u+rGwVWcW72AHg==" }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", "dev": true }, + "possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==" + }, "postcss": { "version": "6.0.17", "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz", @@ -8215,40 +9277,29 @@ }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.1.0", + "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" - }, - "dependencies": { - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", - "dev": true, - "requires": { - "has-flag": "^2.0.0" - } - } + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "source-map": { @@ -8258,12 +9309,12 @@ "dev": true }, "supports-color": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz", - "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "^3.0.0" } } } @@ -8271,7 +9322,7 @@ "postcss-apply": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/postcss-apply/-/postcss-apply-0.8.0.tgz", - "integrity": "sha1-FOVEu7XLbxweBIhXll15rgZrE0M=", + "integrity": "sha512-J8HDo5oAW4HSZ8rsSQrfUC4kRurHZFzNC0gGIrJEuRu0imobXMtPhAXQN7d44eDXKWshABjtFxowbQi8OIznwg==", "dev": true, "requires": { "babel-runtime": "^6.23.0", @@ -8282,7 +9333,7 @@ "balanced-match": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==", "dev": true } } @@ -8290,7 +9341,7 @@ "postcss-attribute-case-insensitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-2.0.0.tgz", - "integrity": "sha1-lNxCLI+QmX8WvTOjZUu77AhJY7Q=", + "integrity": "sha512-J8sdzNF8glKA0ZpNLOftTaNu12a48wJ97sVDTYGRR6gX8cSoRE4tXoVgYRemFz3TvSurbmVuMQUmqUclA0hL/Q==", "dev": true, "requires": { "postcss": "^6.0.0", @@ -8300,7 +9351,7 @@ "postcss-calc": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", - "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "integrity": "sha512-iBcptYFq+QUh9gzP7ta2btw50o40s4uLI4UDVgd5yRAZtUDWc5APdl5yQDd2h/TyiZNbJrv0HiYhT102CMgN7Q==", "dev": true, "requires": { "postcss": "^5.0.2", @@ -8323,7 +9374,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -8334,7 +9385,7 @@ "postcss-cli": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-4.1.1.tgz", - "integrity": "sha1-uUvY//u3rB9i8mB+ePyTl/f2Ol0=", + "integrity": "sha512-Mp21ROBZsInE5vYxpI3r+1tSiGtQvkLuMFBOJzPALu5Dpayx+tdNUXYLoa2f22C+oVUyQpkbT/Di1/kiJXzwtw==", "dev": true, "requires": { "chalk": "^2.1.0", @@ -8352,243 +9403,115 @@ "yargs": "^8.0.1" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.1.0", - "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" - } - }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", - "dev": true - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "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=", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "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==", "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - }, - "dependencies": { - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - } + "requires": { + "color-convert": "^1.9.0" } }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "pify": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==", "dev": true }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "has-flag": "^3.0.0" } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + } + } + }, + "postcss-color-function": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-color-function/-/postcss-color-function-4.1.0.tgz", + "integrity": "sha512-2/fuv6mP5Lt03XbRpVfMdGC8lRP1sykme+H1bR4ARyOmSMB8LPSjcL6EAI1iX6dqUF+jNEvKIVVXhan1w/oFDQ==", + "dev": true, + "requires": { + "css-color-function": "~1.3.3", + "postcss": "^6.0.23", + "postcss-message-helpers": "^2.0.0", + "postcss-value-parser": "^3.3.1" + }, + "dependencies": { + "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==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "color-convert": "^1.9.0" } }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "strip-bom": { + "has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "has-flag": "^3.0.0" } } } }, - "postcss-color-function": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-color-function/-/postcss-color-function-4.0.1.tgz", - "integrity": "sha1-QCs/LOvD9pR+YY+2vjZU++zvZEQ=", - "dev": true, - "requires": { - "css-color-function": "~1.3.3", - "postcss": "^6.0.1", - "postcss-message-helpers": "^2.0.0", - "postcss-value-parser": "^3.3.0" - } - }, "postcss-color-gray": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-4.1.0.tgz", @@ -8599,12 +9522,34 @@ "postcss": "^6.0.14", "postcss-message-helpers": "^2.0.0", "reduce-function-call": "^1.0.2" + }, + "dependencies": { + "color": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color/-/color-2.0.1.tgz", + "integrity": "sha512-ubUCVVKfT7r2w2D3qtHakj8mbmKms+tThR8gI8zEYCbUBl8/voqFGt3kgBqGwXAopgXybnkuOq+qMYCRrp4cXw==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + } } }, "postcss-color-hex-alpha": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-3.0.0.tgz", - "integrity": "sha1-HlPmyKyyN5Vej9CLfs2xuLgwn5U=", + "integrity": "sha512-Tpg2yEBcdE0e7jJSyRaLinX8xqf4geXIBClhbSA3hhnpXELJcqfvoRD8V9RHV6oYyoR/vyS3dCg1EuCEw6CvhQ==", "dev": true, "requires": { "color": "^1.0.3", @@ -8615,19 +9560,29 @@ "color": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", - "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=", + "integrity": "sha512-HWCZFEr1styyDW4BAYpeDtVrUfTzPK0XOxs8izgcGofpl/T9U2m5f7cYjcPKorrCLKDrFlmcHciMdktwxr1btw==", "dev": true, "requires": { "color-convert": "^1.8.2", "color-string": "^1.4.0" } + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } } } }, "postcss-color-hsl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-color-hsl/-/postcss-color-hsl-2.0.0.tgz", - "integrity": "sha1-EnA2ZvoxBDDj8wpFTawThjF9WEQ=", + "integrity": "sha512-4DNpOj3NWejHtjV4mLxf+rmE1KA+IKDJH8QSThgJOrjGFuiqOPxkFSZX1RQJ+XQISZD3MW/JDaZoNnmxS9pSBQ==", "dev": true, "requires": { "postcss": "^6.0.1", @@ -8638,7 +9593,7 @@ "postcss-color-hwb": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-color-hwb/-/postcss-color-hwb-3.0.0.tgz", - "integrity": "sha1-NAKxnvTYSXVAwftQcr6YY8qVVx4=", + "integrity": "sha512-53CnpaKZKKiuQ2KvVStY4uVYnp2UCSUCDGYnW2sbe4oJBq3/H4eCcO4My2cMv3l8czsh3yBRLNA9Ls8IwqARhA==", "dev": true, "requires": { "color": "^1.0.3", @@ -8650,29 +9605,93 @@ "color": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", - "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=", + "integrity": "sha512-HWCZFEr1styyDW4BAYpeDtVrUfTzPK0XOxs8izgcGofpl/T9U2m5f7cYjcPKorrCLKDrFlmcHciMdktwxr1btw==", "dev": true, "requires": { "color-convert": "^1.8.2", "color-string": "^1.4.0" } + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } } } }, "postcss-color-rebeccapurple": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-3.0.0.tgz", - "integrity": "sha1-7rrwPTY7QwC5Z5K9MIHBntZlE9M=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-3.1.0.tgz", + "integrity": "sha512-212hJUk9uSsbwO5ECqVjmh/iLsmiVL1xy9ce9TVf+X3cK/ZlUIlaMdoxje/YpsL9cmUH3I7io+/G2LyWx5rg1g==", "dev": true, "requires": { - "postcss": "^6.0.1", - "postcss-value-parser": "^3.3.0" + "postcss": "^6.0.22", + "postcss-values-parser": "^1.5.0" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-color-rgb": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-color-rgb/-/postcss-color-rgb-2.0.0.tgz", - "integrity": "sha1-FFOcinExSUtILg3RzCZf9lFLUmM=", + "integrity": "sha512-oGgwvqUHEz4CYmbwUwQ4LwIr4Wqw9p1r+6fJFQqdZPp+ulXFsmJ1cAqJ+V7x5VoNMOuAi1e3UPyJ01JpUtX+Vw==", "dev": true, "requires": { "postcss": "^6.0.1", @@ -8682,7 +9701,7 @@ "postcss-color-rgba-fallback": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-3.0.0.tgz", - "integrity": "sha1-N9XJNToHoJJwkSqCYGu0Kg1wLAQ=", + "integrity": "sha512-RBCHHCQ0sVJH+y31jiVSLBM/b3vvfiU8g9tyAglpF7NOuYzcw41Tu+iGEm8B2zVEAYYgEhWCASNY/j4Wh3vi4w==", "dev": true, "requires": { "postcss": "^6.0.6", @@ -8693,7 +9712,7 @@ "postcss-colormin": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", - "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "integrity": "sha512-XXitQe+jNNPf+vxvQXIQ1+pvdQKWKgkx8zlJNltcMEmLma1ypDRDQwlLt+6cP26fBreihNhZxohh1rcgCH2W5w==", "dev": true, "requires": { "colormin": "^1.0.5", @@ -8716,7 +9735,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -8727,7 +9746,7 @@ "postcss-convert-values": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", - "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "integrity": "sha512-SE7mf25D3ORUEXpu3WUqQqy0nCbMuM5BEny+ULE/FXdS/0UMA58OdzwvzuHJRpIFlk1uojt16JhaEogtP6W2oA==", "dev": true, "requires": { "postcss": "^5.0.11", @@ -8749,7 +9768,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -8797,32 +9816,32 @@ }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "autoprefixer": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.5.tgz", - "integrity": "sha512-XqHfo8Ht0VU+T5P+eWEVoXza456KJ4l62BPewu3vpNf3LP9s2+zYXkXBznzYby4XeECXgG3N4i+hGvOhXErZmA==", + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", + "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", "dev": true, "requires": { - "browserslist": "^2.11.1", - "caniuse-lite": "^1.0.30000791", + "browserslist": "^2.11.3", + "caniuse-lite": "^1.0.30000805", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^6.0.16", + "postcss": "^6.0.17", "postcss-value-parser": "^3.2.3" } }, "caniuse-api": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-2.0.0.tgz", - "integrity": "sha1-sd21pZZrFvSNxJmERNS7xsfZ2DQ=", + "integrity": "sha512-425yJRcUDCCMKc0Zga2KSUe7Qp7nCtL8H0BJIsDxF9yMzG2eSYvOggi5U1wXzxgcSgDGnzVLvZ8dZGMBrA6Ltg==", "dev": true, "requires": { "browserslist": "^2.0.0", @@ -8832,51 +9851,69 @@ } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.1.0", + "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "postcss-calc": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-6.0.1.tgz", - "integrity": "sha1-PSQXG79udinUIqQ26/5t2VEfQzA=", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-6.0.2.tgz", + "integrity": "sha512-fiznXjEN5T42Qm7qqMCVJXS3roaj9r4xsSi+meaBVe7CJBl8t/QLOXu02Z2E6oWAMWIvCuF6JrvzFekmVEbOKA==", "dev": true, "requires": { "css-unit-converter": "^1.1.1", - "postcss": "^6.0.0", + "postcss": "^7.0.2", "postcss-selector-parser": "^2.2.2", "reduce-css-calc": "^2.0.0" + }, + "dependencies": { + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } } }, "reduce-css-calc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.4.tgz", - "integrity": "sha512-i/vWQbyd3aJRmip9OVSN9V6nIjLf/gg/ctxb0CpvHWtcRysFl/ngDBQD+rqavxdw/doScA3GMBXhzkHQ4GCzFQ==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", + "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", "dev": true, "requires": { "css-unit-converter": "^1.1.1", "postcss-value-parser": "^3.3.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "^3.0.0" } } } @@ -8884,26 +9921,80 @@ "postcss-custom-media": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-6.0.0.tgz", - "integrity": "sha1-vlMnhBEOyylQRPtTlaGABushpzc=", + "integrity": "sha512-MLjf2Yghub+USZpLWCB11hLrEEaCWM4lYf4UR9ui3iPCQFdywvEaY5yt4PnOClGrACGaHTNKPF9koiZLdJOmYw==", "dev": true, "requires": { "postcss": "^6.0.1" } }, "postcss-custom-properties": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-6.2.0.tgz", - "integrity": "sha512-eNR2h9T9ciKMoQEORrPjH33XeN/nuvVuxArOKmHtsFbGbNss631tgTrKou3/pmjAZbA4QQkhLIkPQkIk3WW+8w==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-6.3.1.tgz", + "integrity": "sha512-zoiwn4sCiUFbr4KcgcNZLFkR6gVQom647L+z1p/KBVHZ1OYwT87apnS42atJtx6XlX2yI7N5fjXbFixShQO2QQ==", "dev": true, "requires": { "balanced-match": "^1.0.0", - "postcss": "^6.0.13" + "postcss": "^6.0.18" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-custom-selectors": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-4.0.1.tgz", - "integrity": "sha1-eBOC+UxS5yfvXKR3bqKt9JphE4I=", + "integrity": "sha512-mXhdsA16oq2xbXhIJs6LscTq8peUrvAD4w6I8+BhfIK5ZQH2sVjSM1xYJdadFBfR8MISg4466I+V860Hi68PfQ==", "dev": true, "requires": { "postcss": "^6.0.1", @@ -8913,7 +10004,7 @@ "postcss-discard-comments": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", - "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "integrity": "sha512-yGbyBDo5FxsImE90LD8C87vgnNlweQkODMkUZlDVM/CBgLr9C5RasLGJxxh9GjVOBeG8NcCMatoqI1pXg8JNXg==", "dev": true, "requires": { "postcss": "^5.0.14" @@ -8934,7 +10025,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -8945,7 +10036,7 @@ "postcss-discard-duplicates": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", - "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "integrity": "sha512-+lk5W1uqO8qIUTET+UETgj9GWykLC3LOldr7EehmymV0Wu36kyoHimC4cILrAAYpHQ+fr4ypKcWcVNaGzm0reA==", "dev": true, "requires": { "postcss": "^5.0.4" @@ -8966,7 +10057,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -8977,7 +10068,7 @@ "postcss-discard-empty": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", - "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "integrity": "sha512-IBFoyrwk52dhF+5z/ZAbzq5Jy7Wq0aLUsOn69JNS+7YeuyHaNzJwBIYE0QlUH/p5d3L+OON72Fsexyb7OK/3og==", "dev": true, "requires": { "postcss": "^5.0.14" @@ -8998,7 +10089,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9009,7 +10100,7 @@ "postcss-discard-overridden": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", - "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "integrity": "sha512-IyKoDL8QNObOiUc6eBw8kMxBHCfxUaERYTUe2QF8k7j/xiirayDzzkmlR6lMQjrAM1p1DDRTvWrS7Aa8lp6/uA==", "dev": true, "requires": { "postcss": "^5.0.16" @@ -9030,7 +10121,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9041,7 +10132,7 @@ "postcss-discard-unused": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", - "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "integrity": "sha512-nCbFNfqYAbKCw9J6PSJubpN9asnrwVLkRDFc4KCwyUEdOtM5XDE/eTW3OpqHrYY1L4fZxgan7LLRAAYYBzwzrg==", "dev": true, "requires": { "postcss": "^5.0.14", @@ -9063,7 +10154,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9074,7 +10165,7 @@ "postcss-extend": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/postcss-extend/-/postcss-extend-1.0.5.tgz", - "integrity": "sha1-XqmL94e6PKz030YJdD+AqDOx0Oc=", + "integrity": "sha512-zplAc8IovPMe/JqV0B9nl6o6sElIX7VX1CP2FbV+lGZud3hcnDMr4clN0S8xdHthQoTNDN2K1Q+z0YEW5FWc8A==", "dev": true, "requires": { "postcss": "^5.0.4" @@ -9095,7 +10186,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9104,13 +10195,12 @@ } }, "postcss-filter-plugins": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", - "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", "dev": true, "requires": { - "postcss": "^5.0.4", - "uniqid": "^4.0.0" + "postcss": "^5.0.4" }, "dependencies": { "postcss": { @@ -9128,7 +10218,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9148,7 +10238,7 @@ "postcss-font-variant": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-3.0.0.tgz", - "integrity": "sha1-CMzIj2BQuoLtjvLMdsDGprQfGD4=", + "integrity": "sha512-zZ89AX55J3Bfn6xQBOwNV75I+4Mqj7fhILlwu2KT+pDC3Xsu5vI0YQil3Q1imJQGhN5XnN/DMFQp+UvV91IXig==", "dev": true, "requires": { "postcss": "^6.0.1" @@ -9168,7 +10258,7 @@ "postcss-image-set-polyfill": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/postcss-image-set-polyfill/-/postcss-image-set-polyfill-0.3.5.tgz", - "integrity": "sha1-Dxk0E3AM8fgr05Bm7wFtZaShgYE=", + "integrity": "sha512-4Df/0UNixbXqkw8k+j4CWbicfeZe8/pzkePgBRwWk+iA8wpz1r9ac0YZoXAFAtGISGrw+2d+Kzm/RItZIlu43Q==", "dev": true, "requires": { "postcss": "^6.0.1", @@ -9178,7 +10268,7 @@ "postcss-import": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-10.0.0.tgz", - "integrity": "sha1-TIXJewmRNsxeoCQNwd/b/eTi674=", + "integrity": "sha512-tU3ZSSdREBRjndNDxfyaDOozz2ODOlV0DP26EZuZ9b3YVr0PR/AyGiGH/nhqNX1j0ku+D7JgrbcnZd8S6iLwFA==", "dev": true, "requires": { "object-assign": "^4.0.1", @@ -9191,7 +10281,7 @@ "postcss-initial": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-2.0.0.tgz", - "integrity": "sha1-cnFfczbgu3k1HZnuZcSiU6hEG6Q=", + "integrity": "sha512-XiU1taLGTuHjr/9QMrGMA3Y6zIIxlUudHL7XwLDepPPNSp8pJTYkv5VCQC8IynXGsXa3FKzNJ37eZdfsI71NjA==", "dev": true, "requires": { "lodash.template": "^4.2.4", @@ -9199,9 +10289,9 @@ } }, "postcss-less": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-1.1.3.tgz", - "integrity": "sha512-WS0wsQxRm+kmN8wEYAGZ3t4lnoNfoyx9EJZrhiPR1K0lMHR0UNWnz52Ya5QRXChHtY75Ef+kDc05FpnBujebgw==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-1.1.5.tgz", + "integrity": "sha512-QQIiIqgEjNnquc0d4b6HDOSFZxbFQoy4MPpli2lSLpKhMyBkKwwca2HFqu4xzxlKID/F2fxSOowwtKpgczhF7A==", "dev": true, "requires": { "postcss": "^5.2.16" @@ -9222,7 +10312,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9233,7 +10323,7 @@ "postcss-load-config": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", - "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "integrity": "sha512-3fpCfnXo9Qd/O/q/XL4cJUhRsqjVD2V1Vhy3wOEcLE5kz0TGtdDXJSoiTdH4e847KphbEac4+EZSH4qLRYIgLw==", "dev": true, "requires": { "cosmiconfig": "^2.1.0", @@ -9245,7 +10335,7 @@ "postcss-load-options": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", - "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "integrity": "sha512-WKS5LJMZLWGwtfhs5ahb2ycpoYF3m0kK4QEaM+elr5EpiMt0H296P/9ETa13WXzjPwB0DDTBiUBBWSHoApQIJg==", "dev": true, "requires": { "cosmiconfig": "^2.1.0", @@ -9255,7 +10345,7 @@ "postcss-load-plugins": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", - "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "integrity": "sha512-/WGUMYhKiryWjYO6c7kAcqMuD7DVkaQ8HcbQenDme/d3OBOmrYMFObOKgUWyUy1uih5U2Dakq8H6VcJi5C9wHQ==", "dev": true, "requires": { "cosmiconfig": "^2.1.1", @@ -9265,7 +10355,7 @@ "postcss-media-minmax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-3.0.0.tgz", - "integrity": "sha1-Z1JWA3pD70C8Twdgv9BtTcadSNI=", + "integrity": "sha512-lYwGbUhk6+8NSMJ4P2T4+Zi0tbHUDFgdHXC4zTe/P7zkIk+lRuaEpZcZFzlL3dxWarnwc6ImpDV4MGBV4uDDXg==", "dev": true, "requires": { "postcss": "^6.0.1" @@ -9274,13 +10364,13 @@ "postcss-media-query-parser": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", "dev": true }, "postcss-merge-idents": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", - "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "integrity": "sha512-9DHmfCZ7/hNHhIKnNkz4CU0ejtGen5BbTRJc13Z2uHfCedeCUsK2WEQoAJRBL+phs68iWK6Qf8Jze71anuysWA==", "dev": true, "requires": { "has": "^1.0.1", @@ -9303,7 +10393,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9314,7 +10404,7 @@ "postcss-merge-longhand": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", - "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "integrity": "sha512-ma7YvxjdLQdifnc1HFsW/AW6fVfubGyR+X4bE3FOSdBVMY9bZjKVdklHT+odknKBB7FSCfKIHC3yHK7RUAqRPg==", "dev": true, "requires": { "postcss": "^5.0.4" @@ -9335,7 +10425,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9346,7 +10436,7 @@ "postcss-merge-rules": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", - "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "integrity": "sha512-Wgg2FS6W3AYBl+5L9poL6ZUISi5YzL+sDCJfM7zNw/Q1qsyVQXXZ2cbVui6mu2cYJpt1hOKCGj1xA4mq/obz/Q==", "dev": true, "requires": { "browserslist": "^1.5.2", @@ -9359,7 +10449,7 @@ "browserslist": { "version": "1.7.7", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", - "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "integrity": "sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==", "dev": true, "requires": { "caniuse-db": "^1.0.30000639", @@ -9381,7 +10471,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9392,13 +10482,13 @@ "postcss-message-helpers": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "integrity": "sha512-tPLZzVAiIJp46TBbpXtrUAKqedXSyW5xDEo1sikrfEfnTs+49SBZR/xDdqCiJvSSbtr615xDsaMF3RrxS2jZlA==", "dev": true }, "postcss-minify-font-values": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", - "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "integrity": "sha512-vFSPzrJhNe6/8McOLU13XIsERohBJiIFFuC1PolgajOZdRWqRgKITP/A4Z/n4GQhEmtbxmO9NDw3QLaFfE1dFQ==", "dev": true, "requires": { "object-assign": "^4.0.1", @@ -9421,7 +10511,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9432,7 +10522,7 @@ "postcss-minify-gradients": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", - "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "integrity": "sha512-DZhT0OE+RbVqVyGsTIKx84rU/5cury1jmwPa19bViqYPQu499ZU831yMzzsyC8EhiZVd73+h5Z9xb/DdaBpw7Q==", "dev": true, "requires": { "postcss": "^5.0.12", @@ -9454,7 +10544,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9465,7 +10555,7 @@ "postcss-minify-params": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", - "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "integrity": "sha512-hhJdMVgP8vasrHbkKAk+ab28vEmPYgyuDzRl31V3BEB3QOR3L5TTIVEWLDNnZZ3+fiTi9d6Ker8GM8S1h8p2Ow==", "dev": true, "requires": { "alphanum-sort": "^1.0.1", @@ -9489,7 +10579,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9500,7 +10590,7 @@ "postcss-minify-selectors": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", - "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "integrity": "sha512-e13vxPBSo3ZaPne43KVgM+UETkx3Bs4/Qvm6yXI9HQpQp4nyb7HZ0gKpkF+Wn2x+/dbQ+swNpCdZSbMOT7+TIA==", "dev": true, "requires": { "alphanum-sort": "^1.0.2", @@ -9524,7 +10614,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9544,7 +10634,7 @@ "postcss-normalize-charset": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", - "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "integrity": "sha512-RKgjEks83l8w4yEhztOwNZ+nLSrJ+NvPNhpS+mVDzoaiRHZQVoG7NF2TP5qjwnaN9YswUhj6m1E0S0Z+WDCgEQ==", "dev": true, "requires": { "postcss": "^5.0.5" @@ -9565,7 +10655,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9576,7 +10666,7 @@ "postcss-normalize-url": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", - "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "integrity": "sha512-WqtWG6GV2nELsQEFES0RzfL2ebVwmGl/M8VmMbshKto/UClBo+mznX8Zi4/hkThdqx7ijwv+O8HWPdpK7nH/Ig==", "dev": true, "requires": { "is-absolute-url": "^2.0.0", @@ -9600,7 +10690,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9611,7 +10701,7 @@ "postcss-ordered-values": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", - "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "integrity": "sha512-5RB1IUZhkxDCfa5fx/ogp/A82mtq+r7USqS+7zt0e428HJ7+BHCxyeY39ClmkkUtxdOd3mk8gD6d9bjH2BECMg==", "dev": true, "requires": { "postcss": "^5.0.4", @@ -9633,7 +10723,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9644,7 +10734,7 @@ "postcss-pseudo-class-any-link": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-4.0.0.tgz", - "integrity": "sha1-kVKgYT00UHIFE+iJKFS65C0O5o4=", + "integrity": "sha512-xindgr9qqu6HDnHKk7lJSIII6nvNmGKxIb8BOUUfteLctichwaNEGtwWvq66Sc/EuTu/bK/+fAyLRwWkPx/nFA==", "dev": true, "requires": { "postcss": "^6.0.1", @@ -9654,7 +10744,7 @@ "postcss-pseudoelements": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz", - "integrity": "sha1-7vGU6NUkZFylIKlJ6V5RjoEkAss=", + "integrity": "sha512-XHKyn37k6nm8R9C1g+PXisjp5Y8ISOpeuQe9IVCAe5I2+t2WVBtF3YhS1TsRz3asMkW1zg+tIe6g7eX/sT/QOg==", "dev": true, "requires": { "postcss": "^6.0.0" @@ -9663,7 +10753,7 @@ "postcss-reduce-idents": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", - "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "integrity": "sha512-0+Ow9e8JLtffjumJJFPqvN4qAvokVbdQPnijUDSOX8tfTwrILLP4ETvrZcXZxAtpFLh/U0c+q8oRMJLr1Kiu4w==", "dev": true, "requires": { "postcss": "^5.0.4", @@ -9685,7 +10775,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9696,7 +10786,7 @@ "postcss-reduce-initial": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", - "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "integrity": "sha512-jJFrV1vWOPCQsIVitawGesRgMgunbclERQ/IRGW7r93uHrVzNQQmHQ7znsOIjJPZ4yWMzs5A8NFhp3AkPHPbDA==", "dev": true, "requires": { "postcss": "^5.0.4" @@ -9717,7 +10807,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9728,7 +10818,7 @@ "postcss-reduce-transforms": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", - "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "integrity": "sha512-lGgRqnSuAR5i5uUg1TA33r9UngfTadWxOyL2qx1KuPoCQzfmtaHjp9PuwX7yVyRxG3BWBzeFUaS5uV9eVgnEgQ==", "dev": true, "requires": { "has": "^1.0.1", @@ -9751,7 +10841,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9762,7 +10852,7 @@ "postcss-replace-overflow-wrap": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-2.0.0.tgz", - "integrity": "sha1-eU22+qVPjbEAhUOSqTr0V2i04ls=", + "integrity": "sha512-JNYt+DiUQiCtsy17cqcHQlCJ5huBPDq8F49hlnTd747GCMvaUEq4ouI0QR0E38zdKs1ptnzhoGYwm6mvpbeD5w==", "dev": true, "requires": { "postcss": "^6.0.1" @@ -9781,52 +10871,52 @@ }, "dependencies": { "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.1.0", + "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" + "supports-color": "^5.3.0" } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "^3.0.0" } } } }, "postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", "dev": true }, "postcss-safe-parser": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz", - "integrity": "sha1-t1Pv9sfArqXoN1++TN6L+QY/8UI=", + "integrity": "sha512-eK9pkDrG4YAt9IeopMfv3r94jL7VlNqUxjahusQS1pOCZKJCxs37vQJEABaZHJ9l1oc+4ddcJ1aTxctvR28Ong==", "dev": true, "requires": { "postcss": "^6.0.6" @@ -9843,18 +10933,72 @@ } }, "postcss-scss": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-1.0.3.tgz", - "integrity": "sha512-N2ZPDOV5PGEGVwdiB7b1QppxKkmkHodNWkemja7PV+/mHqbUlA6ZcYRreden5Ag5nwBBX8/aRE7lfg1xjdszyg==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-1.0.6.tgz", + "integrity": "sha512-4EFYGHcEw+H3E06PT/pQQri06u/1VIIPjeJQaM8skB80vZuXMhp4cSNV5azmdNkontnOID/XYWEvEEELLFB1ww==", "dev": true, "requires": { - "postcss": "^6.0.15" + "postcss": "^6.0.23" + }, + "dependencies": { + "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==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-selector-matches": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-3.0.1.tgz", - "integrity": "sha1-5WNAEeE5UIgYYbvdWMLQER/8lqs=", + "integrity": "sha512-R8p740Ufx5ho+agdlZ389OOOrylLJGMWwnpbm9LBoV/L4aL12MRR+zuGWJo03XYUAeXtAggSEnn6wngoSOqweQ==", "dev": true, "requires": { "balanced-match": "^0.4.2", @@ -9864,7 +11008,7 @@ "balanced-match": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==", "dev": true } } @@ -9872,7 +11016,7 @@ "postcss-selector-not": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-3.0.1.tgz", - "integrity": "sha1-Lk2y8JZTNsAefOx9tsYN/3ZzNdk=", + "integrity": "sha512-Tt/45Rvaj3I/nCHHMG3L9ioiJjI2YEk8lsvQbko+N6wrOBfLOx0yk51DMT3Ynhd7GzQwXinzeO3gYnwtUe83pA==", "dev": true, "requires": { "balanced-match": "^0.4.2", @@ -9882,7 +11026,7 @@ "balanced-match": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==", "dev": true } } @@ -9890,7 +11034,7 @@ "postcss-selector-parser": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "integrity": "sha512-3pqyakeGhrO0BQ5+/tGTfvi5IAUAhHRayGK8WFSu06aEv2BmHoXw/Mhb+w7VY5HERIuC+QoUI7wgrCcq2hqCVA==", "dev": true, "requires": { "flatten": "^1.0.2", @@ -9901,7 +11045,7 @@ "postcss-svgo": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", - "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "integrity": "sha512-y5AdQdgBoF4rbpdbeWAJuxE953g/ylRfVNp6mvAi61VCN/Y25Tu9p5mh3CyI42WbTRIiwR9a1GdFtmDnNPeskQ==", "dev": true, "requires": { "is-svg": "^2.0.0", @@ -9925,7 +11069,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9936,7 +11080,7 @@ "postcss-unique-selectors": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", - "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "integrity": "sha512-WZX8r1M0+IyljoJOJleg3kYm10hxNYF9scqAT7v/xeSX1IdehutOM85SNO0gP9K+bgs86XERr7Ud5u3ch4+D8g==", "dev": true, "requires": { "alphanum-sort": "^1.0.1", @@ -9959,7 +11103,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -9981,15 +11125,26 @@ } }, "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true }, + "postcss-values-parser": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-1.5.0.tgz", + "integrity": "sha512-3M3p+2gMp0AH3da530TlX8kiO1nxdTnc3C6vr8dMxRLIlh8UYkz0/wcwptSXjhtx2Fr0TySI7a+BHDQ8NL7LaQ==", + "dev": true, + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, "postcss-zindex": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", - "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "integrity": "sha512-uhRZ2hRgj0lorxm9cr62B01YzpUe63h0RXMXQ4gWW3oa2rpJh+FJAiEAytaFCPU/VgaBS+uW2SJ1XKyDNz1h4w==", "dev": true, "requires": { "has": "^1.0.1", @@ -10012,7 +11167,7 @@ "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -10023,71 +11178,63 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true }, "prepend-http": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", "dev": true }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + "integrity": "sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==" }, "pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", "dev": true }, "prettyjson": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.1.tgz", - "integrity": "sha1-/P+rQdGcq0365eV15kJGYZsS0ok=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/prettyjson/-/prettyjson-1.2.5.tgz", + "integrity": "sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==", "requires": { - "colors": "^1.1.2", + "colors": "1.4.0", "minimist": "^1.2.0" }, "dependencies": { "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" } } }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==" }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true }, "prompt": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/prompt/-/prompt-0.2.14.tgz", - "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=", + "integrity": "sha512-jDK5yEbAakJmNm+260gZG1+PuzX3jT5Jy0VZAUGrrW9RQ1JEWEDEVNnhO70mL3+U5r6bSJo02xsE34wOS/LnrA==", "requires": { "pkginfo": "0.x.x", "read": "1.0.x", @@ -10099,17 +11246,12 @@ "async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" - }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==" }, "winston": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/winston/-/winston-0.8.3.tgz", - "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=", + "integrity": "sha512-fPoamsHq8leJ62D1M9V/f15mjQ1UHe4+7j1wpAT3fqgA5JqhJkk4aIfPEjfMTI9x6ZTjaLOpMAjluLtmgO5b6g==", "requires": { "async": "0.2.x", "colors": "0.6.x", @@ -10123,33 +11265,51 @@ } }, "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + }, + "dependencies": { + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + } } }, "proxy-addr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", - "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.5.2" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + } } }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true }, "ps-tree": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-0.0.3.tgz", - "integrity": "sha1-2/jXUqf+Ivp9WGNWiUmWEOknbdw=", + "integrity": "sha512-FRHemqwOCUAt+U9Ni9bN/JfsFIBIm1Ho2Zr6Y/yWCgbfecrU4cEuYDebyv/pJpFBltArsJ3j4EgI89PR+BsXTA==", "requires": { "event-stream": "~0.5" } @@ -10157,18 +11317,28 @@ "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", "dev": true }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "requires": { + "punycode": "^2.3.1" + }, + "dependencies": { + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + } + } }, "pstree.remy": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.2.tgz", - "integrity": "sha512-vL6NLxNHzkNTjGJUpMm5PLC+94/0tTlC1vkP9bdU0pOHih+EujMjgMTwfZopZvHWRFbqJ5Y73OMoau50PewDDA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true }, "public-encrypt": { @@ -10185,10 +11355,16 @@ "safe-buffer": "^5.1.2" }, "dependencies": { + "bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", + "dev": true + }, "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==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true } } @@ -10196,12 +11372,12 @@ "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "dev": true }, "qs": { @@ -10219,22 +11395,16 @@ "strict-uri-encode": "^1.0.0" } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, "querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", "dev": true }, "quick-lru": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=" + "integrity": "sha512-tRS7sTgyxMXtLum8L65daJnHUhfDUgboRdcWW2bR9vBfrj2+O5HSMbQOJfJJjIVSPFqbBCF37FpwWXGitDc5tA==" }, "randomatic": { "version": "3.1.1", @@ -10254,9 +11424,9 @@ } }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -10273,19 +11443,42 @@ } }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "integrity": "sha512-Ss0DsBxqLxCmQkfG5yazYhtbVVTJqS9jTsZG2lhrNwqzOk2SUC7O/NB/M//CkEBqsrtmlNgJCPccJGuYSFr6Vg==", "requires": { "bytes": "3.0.0", "http-errors": "1.6.2", "iconv-lite": "0.4.19", "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha512-Jlk9xvkTDGXwZiIDyoM7+3AsuvJVoyOpRupvEVy9nX3YO3/ieZxhlgh8GpLNZ8AY7HjO6y2YwpMSh1ejhu3uIw==" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha512-STnYGcKMXL9CGdtpeTFnLmgMSHTTNQJSHxiC4DETHKf934Q160Ht5pljrNeH24S0O9xUN+9vsDJZdZtk5js6Ww==", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha512-9jphSf3UbIgpOX/RKvX02iw/rN2TKdusnsPpGfO/rkcsrd+IRqgHZb4VGnmL0Cynps8Nj2hN45wsi30BzrHDIw==" + } } }, "rc": { @@ -10327,10 +11520,15 @@ "resolved": "https://registry.npmjs.org/react-hyperscript/-/react-hyperscript-3.2.0.tgz", "integrity": "sha512-kf9VmxwCNqAImT3uDrCPJ8H5XdNzfSLps9x0qgJCH6OUCBiGAy1m9wHpedfr7GSuFqowhkNwv4ZuC40k3E/zRQ==" }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "react-loader": { "version": "2.4.5", "resolved": "https://registry.npmjs.org/react-loader/-/react-loader-2.4.5.tgz", - "integrity": "sha1-zT5VHGzQc4wcDxPwc2VPk4KL5ak=", + "integrity": "sha512-xtlIupZgMpW7F06nNvDh6MAcTZ/zYU6l1L8JtbRvSRTc49dbmRzLmJBuB2Qb7FO9iP2q/rAw9wDWTjV3VxLy8w==", "requires": { "create-react-class": "^15.5.2", "prop-types": "^15.5.8", @@ -10362,12 +11560,12 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "requires": { "isarray": "0.0.1" } @@ -10409,7 +11607,7 @@ "read": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "requires": { "mute-stream": "~0.0.4" } @@ -10417,7 +11615,7 @@ "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, "requires": { "pify": "^2.3.0" @@ -10426,7 +11624,7 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true } } @@ -10434,7 +11632,7 @@ "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, "requires": { "load-json-file": "^1.0.0", @@ -10445,7 +11643,7 @@ "read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dev": true, "requires": { "find-up": "^1.0.0", @@ -10455,7 +11653,7 @@ "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dev": true, "requires": { "path-exists": "^2.0.0", @@ -10465,7 +11663,7 @@ "path-exists": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dev": true, "requires": { "pinkie-promise": "^2.0.0" @@ -10490,7 +11688,7 @@ "readdirp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "integrity": "sha512-LgQ8mdp6hbxJUZz27qxVl7gmFM/0DfHRO52c5RUbKAgMvr81tour7YYWW1JYNmrXyD/o0Myy9/DC3fUYkqnyzg==", "requires": { "graceful-fs": "^4.1.2", "minimatch": "^3.0.2", @@ -10501,12 +11699,12 @@ "recursive-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/recursive-iterator/-/recursive-iterator-2.0.3.tgz", - "integrity": "sha1-0ODSx+eoMQnXMJHPBD/FCeWnbcM=" + "integrity": "sha512-SqfNKjjTw7Lq3E2S6P8L5Ac7YFD91mbkzWRlxrWK4tWioJRKDhe1+PtWS0X0hkQNEzZDpSish0TTXAVM4cRUzQ==" }, "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", "dev": true, "requires": { "indent-string": "^2.1.0", @@ -10516,7 +11714,7 @@ "reduce-css-calc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "integrity": "sha512-0dVfwYVOlf/LBA2ec4OwQ6p3X9mYxn/wOl2xTcLwjnPYrkgEfPx3VI4eGCH3rQLlPISG5v9I9bkZosKsNRTRKA==", "dev": true, "requires": { "balanced-match": "^0.4.2", @@ -10527,34 +11725,51 @@ "balanced-match": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==", "dev": true } } }, "reduce-function-call": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", - "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", + "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", "dev": true, "requires": { - "balanced-match": "^0.4.2" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } + "balanced-match": "^1.0.0" + } + }, + "reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" } }, "regenerate": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", - "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, + "regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", @@ -10562,14 +11777,12 @@ "dev": true }, "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, "requires": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" + "@babel/runtime": "^7.8.4" } }, "regex-cache": { @@ -10581,29 +11794,63 @@ } }, "regex-not": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.0.tgz", - "integrity": "sha1-Qvg+OXcWIt+CawKvF2Ul1qXxV/k=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "^2.0.1" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "requires": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "dependencies": { + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + } } }, "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", "dev": true, "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" } }, "registry-auth-token": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", - "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "dev": true, "requires": { "rc": "^1.1.6", @@ -10613,33 +11860,25 @@ "registry-url": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", "dev": true, "requires": { "rc": "^1.0.1" } }, "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "dev": true }, "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", "dev": true, "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - } + "jsesc": "~3.0.2" } }, "remark": { @@ -10701,22 +11940,22 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + "integrity": "sha512-PJn5P/wQgXwp0Bpmzv9JU693QYky9P5bwntpuw8SsMXgUZHlcEyr9Vajgp/zhGSFX56/lv9Bz2k9mKrkpxLI4A==" }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" }, "repeating": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", "dev": true, "requires": { "is-finite": "^1.0.0" @@ -10725,7 +11964,7 @@ "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "integrity": "sha512-vuNYXC7gG7IeVNBC1xUllqCcZKRbJoSPOBhnTEcAIiKCsbuef6zO3F0Rve3isPMMoNoQRWjQwbAgAjHUHniyEA==", "dev": true }, "request": { @@ -10760,58 +11999,45 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "requires": { - "mime-db": "~1.37.0" - } - }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==" }, "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==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" } } }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, "require-from-string": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", "dev": true }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", "dev": true }, "require-uncached": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==", "dev": true, "requires": { "caller-path": "^0.1.0", @@ -10819,37 +12045,41 @@ } }, "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-from": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==", "dev": true }, "resolve-pathname": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", - "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", "dev": true }, - "resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, "requires": { - "through": "~2.3.4" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "ret": { @@ -10867,24 +12097,24 @@ "revalidator": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "integrity": "sha1-/s5hv6DBtSoga9axgZgYS91SOjs=" + "integrity": "sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg==" }, "rgb": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/rgb/-/rgb-0.1.0.tgz", - "integrity": "sha1-vieykej+/+rBvZlylyG/pA/AN7U=", + "integrity": "sha512-F49dXX73a92N09uQkfCp2QjwXpmJcn9/i9PvjmwsSIXUGqRLCf/yx5Q9gRxuLQTq248kakqQuc8GX/U/CxSqlA==", "dev": true }, "rgb-hex": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-2.1.0.tgz", - "integrity": "sha1-x3PF/iJoolV42SU5qCp6XOU77aY=", + "integrity": "sha512-1hDa60MqECZiEGsa9TtcOE9VbV6fhZSMQARy7U+a2HkhIJyoEBhcG4v/qYAJYzV3Bbj+j52sBoAIKKF5EPuQZw==", "dev": true }, "right-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==", "dev": true, "requires": { "align-text": "^0.1.1" @@ -10909,43 +12139,102 @@ } }, "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true }, "rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==", "dev": true }, "rx-lite-aggregates": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==", "dev": true, "requires": { "rx-lite": "*" } }, + "safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, + "safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", "dev": true, "requires": { "ret": "~0.1.10" } }, + "safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "dependencies": { + "is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "requires": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + } + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -10954,7 +12243,7 @@ "sanitize-filename": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz", - "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=", + "integrity": "sha512-XJty6Im+yPTLWiF7mW6BeZogNpYLk4jCSHJh1Xm8MyTcjajC1NDB/SwJEN5rDop3hp0AV2FFipwaTnmtKJMyRQ==", "requires": { "truncate-utf8-bytes": "^1.0.0" } @@ -10978,19 +12267,56 @@ "resolved": "https://registry.npmjs.org/schedule/-/schedule-0.4.0.tgz", "integrity": "sha512-hYjmoaEMojiMkWCxKr6ue+LYcZ29u29+AamWYmzwT2VOO9ws5UJp/wNhsVUPiUeNh+EdRfZm7nDeB40ffTfMhA==", "requires": { - "object-assign": "^4.1.1" + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "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==", + "dev": true + } } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true }, "semver-diff": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "integrity": "sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw==", "dev": true, "requires": { "semver": "^5.0.3" @@ -11019,7 +12345,7 @@ "statuses": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==" } } }, @@ -11049,39 +12375,92 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "dependencies": { + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + } + } + }, + "set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + } + }, "set-immediate-shim": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + "integrity": "sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==" + }, + "set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "requires": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + } }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "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, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" + }, + "dependencies": { + "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, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "sha.js": { "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -11092,7 +12471,7 @@ "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "requires": { "shebang-regex": "^1.0.0" @@ -11101,50 +12480,96 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - } + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "dev": true }, "shush": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shush/-/shush-1.0.0.tgz", - "integrity": "sha1-wnQVqeRY8v7TmyfPjrN8ADeCtDE=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/shush/-/shush-1.0.4.tgz", + "integrity": "sha512-G5w1eODRWHWd/H5u6PMAN83TQJ/iOOM8cRgzC2v7trPbnMlq3XIxmQpGw8idyqRkE/wi5YX2j+fobj5xArPw+g==", "requires": { - "caller": "~0.0.1", - "strip-json-comments": "~0.1.1" + "caller": "^1.1.0", + "strip-json-comments": "^3.1.1" }, "dependencies": { "strip-json-comments": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-0.1.3.tgz", - "integrity": "sha1-Fkxk43Coo8wAyeAbU55WmCPw7lQ=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" } } }, + "side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + } + }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "dev": true, "requires": { "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } } }, "sinon": { @@ -11165,7 +12590,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "supports-color": { @@ -11182,7 +12607,7 @@ "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", "dev": true }, "slice-ansi": { @@ -11192,14 +12617,6 @@ "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "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=", - "dev": true - } } }, "snapdragon": { @@ -11221,68 +12638,20 @@ "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "requires": { "is-descriptor": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "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, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-extendable": "^0.1.0" } - }, - "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 } } }, @@ -11297,10 +12666,29 @@ "snapdragon-util": "^3.0.1" }, "dependencies": { + "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, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true } } @@ -11317,7 +12705,7 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -11328,71 +12716,73 @@ "sort-keys": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", "dev": true, "requires": { "is-plain-obj": "^1.0.0" } }, "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true }, "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "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==", "dev": true, "requires": { - "atob": "^2.1.1", + "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" } }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - }, "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "requires": { - "spdx-license-ids": "^1.0.2" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", "dev": true }, "specificity": { @@ -11404,12 +12794,12 @@ "spin.js": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/spin.js/-/spin.js-2.3.2.tgz", - "integrity": "sha1-bKpW1SBnNFD9XPvGlx5tB3LDeho=" + "integrity": "sha512-ryhCvKCRa6J5Fxa7Y+fnhE2a+e05JwfW5dxO82zPd0uDM9o+qp8p74BJUurjiqCqmDsWNvGOAxfqdD317XIedg==" }, "split": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", "dev": true, "requires": { "through": "2" @@ -11422,38 +12812,17 @@ "dev": true, "requires": { "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "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, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "sshpk": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", - "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -11469,18 +12838,18 @@ "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==" }, "state-toggle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.0.tgz", - "integrity": "sha1-0g+aYWu08MO5i5GSLSW2QKorxCU=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", "dev": true }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", "dev": true, "requires": { "define-property": "^0.2.5", @@ -11490,80 +12859,32 @@ "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "requires": { "is-descriptor": "^0.1.0" } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "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, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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 } } }, "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" + }, + "stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "requires": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + } }, "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { "inherits": "~2.0.1", @@ -11573,7 +12894,7 @@ "stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", "dev": true, "requires": { "duplexer": "~0.1.1" @@ -11593,15 +12914,15 @@ }, "dependencies": { "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "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 }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -11632,34 +12953,89 @@ "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.fromcodepoint": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", + "integrity": "sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==", + "dev": true + }, + "string.prototype.padend": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" } }, - "string.fromcodepoint": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", - "integrity": "sha1-jZeDM8C8klOPUPOD5IiPPlYZ1lM=", - "dev": true + "string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } }, - "string.prototype.padend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.4.3", - "function-bind": "^1.0.2" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "string_decoder": { @@ -11671,9 +13047,9 @@ } }, "stringify-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.1.tgz", - "integrity": "sha1-sVDsLXKsTBtfMktR+2soyc3/BYw=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", + "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", "dev": true, "requires": { "character-entities-html4": "^1.0.0", @@ -11685,7 +13061,7 @@ "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "requires": { "ansi-regex": "^2.0.0" @@ -11694,7 +13070,7 @@ "strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, "requires": { "is-utf8": "^0.2.0" @@ -11703,13 +13079,13 @@ "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true }, "strip-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", "dev": true, "requires": { "get-stdin": "^4.0.1" @@ -11718,13 +13094,13 @@ "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=", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true }, "style-search": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", "dev": true }, "stylelint": { @@ -11774,45 +13150,39 @@ "table": "^4.0.1" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "autoprefixer": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.5.tgz", - "integrity": "sha512-XqHfo8Ht0VU+T5P+eWEVoXza456KJ4l62BPewu3vpNf3LP9s2+zYXkXBznzYby4XeECXgG3N4i+hGvOhXErZmA==", + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", + "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", "dev": true, "requires": { - "browserslist": "^2.11.1", - "caniuse-lite": "^1.0.30000791", + "browserslist": "^2.11.3", + "caniuse-lite": "^1.0.30000805", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^6.0.16", + "postcss": "^6.0.17", "postcss-value-parser": "^3.2.3" } }, "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", "dev": true }, "camelcase-keys": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "integrity": "sha512-Ej37YKYbFUI8QiYlvj9YHb6/Z60dZyPJW0Cs8sFilMbd2lP0bw3ylAq9yJkK4lcTA2dID5fG8LjmJYbO7kWb7Q==", "dev": true, "requires": { "camelcase": "^4.1.0", @@ -11821,14 +13191,14 @@ } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.1.0", + "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" + "supports-color": "^5.3.0" } }, "cosmiconfig": { @@ -11844,30 +13214,33 @@ } }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } }, "get-stdin": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", + "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==", "dev": true }, "globby": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "integrity": "sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==", "dev": true, "requires": { "array-union": "^1.0.1", @@ -11879,27 +13252,27 @@ } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "indent-string": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", "dev": true }, - "is-fullwidth-code-point": { + "is-obj": { "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=", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -11909,7 +13282,7 @@ "load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -11921,7 +13294,7 @@ "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "requires": { "error-ex": "^1.3.1", @@ -11933,13 +13306,13 @@ "map-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", "dev": true }, "meow": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.0.tgz", - "integrity": "sha512-Me/kel335m6vMKmEmA6c87Z6DUFW3JqkINRnxkbC+A/PUm0D5Fl2dEBQrPKnqCL9Te/CIa1MUt/0InMJhuC/sw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", + "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", "dev": true, "requires": { "camelcase-keys": "^4.0.0", @@ -11953,10 +13326,16 @@ "trim-newlines": "^2.0.0" } }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, "parse-json": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-3.0.0.tgz", - "integrity": "sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM=", + "integrity": "sha512-bO3CWnT9rDPNFvYVH9+t7ZqrML3DUPYzyN3X87T1snwJHbgrb8+oscL116q39/ViL+qYoMCwLH70N0bTORMa8w==", "dev": true, "requires": { "error-ex": "^1.3.1" @@ -11972,12 +13351,12 @@ } }, "postcss-selector-parser": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", - "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", "dev": true, "requires": { - "dot-prop": "^4.1.1", + "dot-prop": "^5.2.0", "indexes-of": "^1.0.1", "uniq": "^1.0.1" } @@ -11985,7 +13364,7 @@ "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "requires": { "load-json-file": "^4.0.0", @@ -11996,7 +13375,7 @@ "read-pkg-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, "requires": { "find-up": "^2.0.0", @@ -12006,7 +13385,7 @@ "redent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "integrity": "sha512-XNwrTx77JQCEMXTeb8movBKuK75MgH0RZkujNuDKCezemx/voapl9i2gCSi8WWm8+ox5ycJi1gxF22fR7c0Ciw==", "dev": true, "requires": { "indent-string": "^3.0.0", @@ -12014,9 +13393,9 @@ } }, "require-from-string": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.1.tgz", - "integrity": "sha1-xUUjPp19pmFunVmt+zn8n1iGdv8=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, "resolve-from": { @@ -12025,50 +13404,31 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "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=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, "strip-indent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", "dev": true }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "^3.0.0" } }, "trim-newlines": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "integrity": "sha512-MTBWv3jhVjTU7XR3IQHllbiJs8sc75a80OEhB6or/q7pLTWgQ0bMGQXXYQSrSuXe6WiKWDZ5txXY5P59a/coVA==", "dev": true } } @@ -12100,19 +13460,25 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + }, + "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 }, "svg-tags": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, "svgo": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", - "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "integrity": "sha512-jT/g9FFMoe9lu2IT6HtAxTA7RR2XOrmcrmCtGnyB/+GQnV6ZjNn+KOHZbZ35yL81+1F/aB6OeEsJztzBQ2EEwA==", "dev": true, "requires": { "coa": "~1.0.1", @@ -12127,22 +13493,22 @@ "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==", "dev": true }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.6" } } } @@ -12150,7 +13516,7 @@ "swagger-jsdoc": { "version": "1.9.7", "resolved": "https://registry.npmjs.org/swagger-jsdoc/-/swagger-jsdoc-1.9.7.tgz", - "integrity": "sha1-enYdTX70pUv0V86lxn7DFruC+Lk=", + "integrity": "sha512-ELLLqU+JuThzOm5DxPwlz6SR8sl1Nv0tynnIFB1swozTbbTaDg6czHSMj88Op5IMYevzw4Q4RVjm17LLA9+Wew==", "requires": { "chokidar": "^1.7.0", "commander": "^2.11.0", @@ -12167,9 +13533,9 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "js-yaml": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", - "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -12198,147 +13564,115 @@ }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "requires": { "ms": "^2.1.1" } }, "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==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" } } }, "swagger-schema-official": { "version": "2.0.0-bab6bed", "resolved": "https://registry.npmjs.org/swagger-schema-official/-/swagger-schema-official-2.0.0-bab6bed.tgz", - "integrity": "sha1-cAcEaNbSl3ylI3suUZyn0Gouo/0=" + "integrity": "sha512-rCC0NWGKr/IJhtRuPq/t37qvZHI/mH4I4sxflVM+qgVe5Z2uOCivzWaVbuioJaB61kvm5UvB7b49E+oBY0M8jA==" }, "swagger-ui-express": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-3.0.10.tgz", - "integrity": "sha1-xysyEHpXpHkT87RgA+j9Yqc3jqI=" + "integrity": "sha512-vP0sHXTm8w0kwpy4z9tBe1sTOyIc807PvkBNrfBPMieeRrl3NbjUnz7KgOygkzmz4QBhd4fo3efFKcwR42vcjQ==" }, "table": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", - "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", + "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", "dev": true, "requires": { - "ajv": "^5.2.3", - "ajv-keywords": "^2.1.0", + "ajv": "^6.0.1", + "ajv-keywords": "^3.0.0", "chalk": "^2.1.0", "lodash": "^4.17.4", "slice-ansi": "1.0.0", "string-width": "^2.1.1" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } }, "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "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==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.1.0", + "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" + "supports-color": "^5.3.0" } }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "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=", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "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=", - "dev": true, - "requires": { - "ansi-regex": "^3.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==", + "dev": true }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "^3.0.0" } } } }, "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.9.tgz", + "integrity": "sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A==", "dev": true }, - "tape": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/tape/-/tape-2.3.3.tgz", - "integrity": "sha1-Lnzgox3wn41oUWZKcYQuDKUFevc=", - "requires": { - "deep-equal": "~0.1.0", - "defined": "~0.0.0", - "inherits": "~2.0.1", - "jsonify": "~0.0.0", - "resumer": "~0.0.0", - "through": "~2.3.4" - }, - "dependencies": { - "deep-equal": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.1.2.tgz", - "integrity": "sha1-skbCuApXCkfBG+HZvRBw7IeLh84=" - }, - "defined": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-0.0.0.tgz", - "integrity": "sha1-817qfXBekzuvE7LwOz+D2SFAOz4=" - } - } - }, "term-size": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "integrity": "sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ==", "dev": true, "requires": { "execa": "^0.7.0" @@ -12347,13 +13681,13 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "text-width": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/text-width/-/text-width-1.2.0.tgz", - "integrity": "sha1-dCFoDEi/hidlziSA995h4/AtoQI=", + "integrity": "sha512-OKG3qEx+b2F5270V+oVTfDq3GVbVhWyrvZjghpAeXwO3tAunG8Zy0SU33tMiYN87hG0EURwmT0Qutvbg/57vIA==", "requires": { "xtend": "~4.0.0" } @@ -12361,18 +13695,19 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "timed-out": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "dev": true }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -12381,7 +13716,17 @@ "timespan": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", - "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=" + "integrity": "sha512-0Jq9+58T2wbOyLth0EU+AUb6JMGCLaTWIykJFa7hyAybjVH9gpVMTfUAwo5fWAvtFt2Tjh/Elg8JtgNpnMnM8g==" + }, + "tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, "tippy.js": { "version": "2.6.0", @@ -12389,13 +13734,6 @@ "integrity": "sha512-hBcy6UXK3epiFwpkycy7Pn1SSLofUmawpPnlYg5ginbXMc/3EX2ivjzHfjvr/WPEpUg71/7ssiovhxDtCWvL2A==", "requires": { "popper.js": "^1.14.3" - }, - "dependencies": { - "popper.js": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.4.tgz", - "integrity": "sha1-juwdj/AqWjoVLdQ0FKFce3n9abY=" - } } }, "tmp": { @@ -12410,19 +13748,19 @@ "to-arraybuffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", "dev": true }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", "dev": true }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", "dev": true, "requires": { "kind-of": "^3.0.2" @@ -12431,7 +13769,7 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -12449,59 +13787,12 @@ "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" - }, - "dependencies": { - "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, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "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, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "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, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - } } }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, "requires": { "is-number": "^3.0.0", @@ -12511,7 +13802,7 @@ "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "requires": { "kind-of": "^3.0.2" @@ -12520,7 +13811,7 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "requires": { "is-buffer": "^1.1.5" @@ -12529,19 +13820,16 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true }, "tough-cookie": { "version": "2.4.3", @@ -12555,42 +13843,36 @@ "traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==" }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==", "dev": true }, "trim-newlines": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", "dev": true }, "trim-trailing-lines": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz", - "integrity": "sha1-eu+7eAjfnWafbaLkOMrIxGradoQ=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", "dev": true }, "trough": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.1.tgz", - "integrity": "sha1-qf2LA5Swro//guBjOgo2zK1bX4Y=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true }, "truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "requires": { "utf8-byte-length": "^1.0.1" } @@ -12604,13 +13886,13 @@ "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", "dev": true }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "requires": { "safe-buffer": "^5.0.1" } @@ -12618,36 +13900,95 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" + }, + "type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "dev": true }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "requires": { "prelude-ls": "~1.1.2" } }, "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true }, "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.15" + "mime-types": "~2.1.24" + } + }, + "typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + } + }, + "typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "requires": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + } + }, + "typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + } + }, + "typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" } }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, "tz-offset": { @@ -12655,15 +13996,10 @@ "resolved": "https://registry.npmjs.org/tz-offset/-/tz-offset-0.0.1.tgz", "integrity": "sha512-kMBmblijHJXyOpKzgDhKx9INYU4u4E1RPMB0HqmKSgWG8vEcf3exEfLh4FFfzd3xdQOw9EuIy/cP0akY6rHopQ==" }, - "ua-parser-js": { - "version": "0.7.18", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.18.tgz", - "integrity": "sha512-LtzwHlVHwFGTptfNSgezHp7WUlwiqb0gA9AALRbKaERfxwJoiX0A73QbTToxteIAuIaFshhgIZfqK8s7clqgnA==" - }, "uglify-js": { "version": "2.8.29", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "integrity": "sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==", "dev": true, "requires": { "source-map": "~0.5.1", @@ -12671,10 +14007,16 @@ "yargs": "~3.10.0" }, "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==", + "dev": true + }, "cliui": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "integrity": "sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==", "dev": true, "requires": { "center-align": "^0.1.1", @@ -12682,22 +14024,16 @@ "wordwrap": "0.0.2" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true - }, "wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==", "dev": true }, "yargs": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "integrity": "sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==", "dev": true, "requires": { "camelcase": "^1.0.2", @@ -12711,14 +14047,14 @@ "uglify-to-browserify": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==", "dev": true, "optional": true }, "uglifyjs-webpack-plugin": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", - "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "integrity": "sha512-TNM20HMW67kxHRNCZdvLyiwE1ST6WyY5Ae+TG55V81NpvNwJ9+V4/po4LHA1R9afV/WrqzfedG2UJCk2+swirw==", "dev": true, "requires": { "source-map": "^0.5.6", @@ -12726,38 +14062,81 @@ "webpack-sources": "^1.0.1" } }, - "undefsafe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", - "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha512-QMpnpVtYaWEeY+MwKDN/UdKlE/LsFZXM5lO1u7GaZzNgmIbGixHEmVMIKT+vqYOALu3m5GYQy9kz4Xu4IVn7Ow==", + "dev": true + }, + "unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "requires": { - "debug": "^2.2.0" + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" } }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, "unescape-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unescape-js/-/unescape-js-1.1.0.tgz", - "integrity": "sha512-i3T5O4vhXV9EktDDChkX3yPdBvFSOJl6wl+Rqb30XGE75fX/sP26AIgBnzI0QCKzxKfWGV/DzO0f0iu0gXK5qw==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unescape-js/-/unescape-js-1.1.4.tgz", + "integrity": "sha512-42SD8NOQEhdYntEiUQdYq/1V/YHwr1HLwlHuTJB5InVVdOSbgI6xu8jK5q65yIzuFCfczzyDF/7hbGzVbyCw0g==", + "dev": true, + "requires": { + "string.fromcodepoint": "^0.2.1" + } + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", "dev": true, "requires": { - "string.fromcodepoint": "^0.2.1" + "inherits": "^2.0.0", + "xtend": "^4.0.0" } }, - "unherit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.0.tgz", - "integrity": "sha1-a5qu379z3xdWrZ4xbdmBiFhAzX0=", + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { - "inherits": "^2.0.1", - "xtend": "^4.0.1" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, + "unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, "unified": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/unified/-/unified-6.1.6.tgz", - "integrity": "sha512-pW2f82bCIo2ifuIGYcV12fL96kMMYgw7JKVEgh7ODlrM9rj6vXSY3BV+H6lCcv1ksxynFf582hwWLnA1qRFy4w==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", + "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", "dev": true, "requires": { "bail": "^1.0.0", @@ -12765,123 +14144,99 @@ "is-plain-obj": "^1.1.0", "trough": "^1.0.0", "vfile": "^2.0.0", - "x-is-function": "^1.0.4", "x-is-string": "^0.1.0" } }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "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, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "uniq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", "dev": true }, - "uniqid": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", - "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", - "dev": true, - "requires": { - "macaddress": "^0.2.8" - } - }, "uniqs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==", "dev": true }, "unique-concat": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/unique-concat/-/unique-concat-0.2.2.tgz", - "integrity": "sha1-khD5vcqsxeHjkpSQ18AZ35bxhxI=" + "integrity": "sha512-nFT3frbsvTa9rrc71FJApPqXF8oIhVHbX3IWgObQi1mF7WrW48Ys70daL7o4evZUtmUf6Qn6WK0LbHhyO0hpXw==" }, "unique-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", "dev": true, "requires": { "crypto-random-string": "^1.0.0" } }, "unist-util-find-all-after": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.1.tgz", - "integrity": "sha1-TlUSq/734GFnga7Pex7XUcAK+Qg=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.5.tgz", + "integrity": "sha512-lWgIc3rrTMTlK1Y0hEuL+k+ApzFk78h+lsaa2gHf63Gp5Ww+mt11huDniuaoq1H+XMK2lIIjjPkncxXcDp3QDw==", "dev": true, "requires": { - "unist-util-is": "^2.0.0" + "unist-util-is": "^3.0.0" } }, "unist-util-is": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.1.tgz", - "integrity": "sha1-DDEmKeP5YMZukx6BLT2A53AQlHs=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", "dev": true }, - "unist-util-modify-children": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-1.1.1.tgz", - "integrity": "sha1-ZtfmpEnm9nIguXarPLi166w55R0=", - "dev": true, - "requires": { - "array-iterate": "^1.0.0" - } - }, "unist-util-remove-position": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz", - "integrity": "sha1-WoXBVV/BugwQG4ZwfRXlD6TIcbs=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", "dev": true, "requires": { "unist-util-visit": "^1.1.0" } }, "unist-util-stringify-position": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.1.tgz", - "integrity": "sha1-PMvcU2ee7W7PN3fdf14yKcG2qjw=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", "dev": true }, "unist-util-visit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.3.0.tgz", - "integrity": "sha512-9ntYcxPFtl44gnwXrQKZ5bMqXMY0ZHzUpqMFiU4zcc8mmf/jzYm8GhYgezuUlX4cJIM1zIDYaO6fG/fI+L6iiQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", "dev": true, "requires": { - "unist-util-is": "^2.1.1" + "unist-util-is": "^3.0.0" } }, "units-css": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/units-css/-/units-css-0.4.0.tgz", - "integrity": "sha1-1iKGU6UZg9fBb/KPi53Dsf/tOgc=", + "integrity": "sha512-WijzYC+chwzg2D6HmNGUSzPAgFRJfuxVyG9oiY28Ei5E+g6fHoPkhXUr5GV+5hE/RTHZNd9SuX2KLioYHdttoA==", "dev": true, "requires": { "isnumeric": "^0.2.0", @@ -12889,20 +14244,20 @@ } }, "universalify": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", - "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", "dev": true, "requires": { "has-value": "^0.3.1", @@ -12912,7 +14267,7 @@ "has-value": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", "dev": true, "requires": { "get-value": "^2.0.3", @@ -12923,7 +14278,7 @@ "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", "dev": true, "requires": { "isarray": "1.0.0" @@ -12934,13 +14289,13 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true } } @@ -12948,7 +14303,7 @@ "unzip-response": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "integrity": "sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw==", "dev": true }, "unzipper": { @@ -12970,17 +14325,17 @@ "bluebird": { "version": "3.4.7", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "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==" }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -13002,11 +14357,29 @@ } }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, + "update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "requires": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "dependencies": { + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + } + } + }, "update-notifier": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", @@ -13035,9 +14408,9 @@ } }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -13048,7 +14421,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "supports-color": { @@ -13071,40 +14444,43 @@ }, "dependencies": { "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" } } }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", "dev": true }, "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", "dev": true, "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "punycode": "^1.4.1", + "qs": "^6.12.3" }, "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true + "qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "requires": { + "side-channel": "^1.1.0" + } } } }, "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==", "dev": true, "requires": { "prepend-http": "^1.0.1" @@ -13117,14 +14493,14 @@ "dev": true }, "utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==" }, "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "requires": { "inherits": "2.0.3" @@ -13133,12 +14509,12 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "utile": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/utile/-/utile-0.2.1.tgz", - "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=", + "integrity": "sha512-ltfvuCJNa/JFOhKBBiQ9qDyyFwLstoMMO1ru0Yg/Mcl8dp1Z3IBaL7n+5dHpyma+d3lCogkgBQnWKtGxzNyqhg==", "requires": { "async": "~0.2.9", "deep-equal": "*", @@ -13151,14 +14527,14 @@ "async": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", - "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + "integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==" } } }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "uuid": { "version": "3.2.1", @@ -13166,13 +14542,13 @@ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" }, "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "~1.0.0", - "spdx-expression-parse": "~1.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "validator": { @@ -13181,25 +14557,25 @@ "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" }, "value-equal": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", - "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "vendors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", - "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", "dev": true }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -13219,15 +14595,15 @@ } }, "vfile-location": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.2.tgz", - "integrity": "sha1-02dcWch3SY5JK0dW/2Xkrxp1IlU=", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", "dev": true }, "vfile-message": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.0.tgz", - "integrity": "sha512-HPREhzTOB/sNDc9/Mxf8w0FmHnThg5CRSJdR9VRFkD2riqYWs+fuXlj5z8mIpv2LrD7uU41+oPWFOL4Mjlf+dw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", "dev": true, "requires": { "unist-util-stringify-position": "^1.1.1" @@ -13236,804 +14612,388 @@ "viewport-dimensions": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/viewport-dimensions/-/viewport-dimensions-0.2.0.tgz", - "integrity": "sha1-3nQHR9tTh/0XJfUXXpG6x2r982w=", + "integrity": "sha512-94JqlKxEP4m7WO+N3rm4tFRGXZmXXwSPQCoV+EPxDnn8YAGiLU3T+Ha1imLreAjXsHl0K+ELnIqv64i1XZHLFQ==", "dev": true }, "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true }, "warning": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz", - "integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", "requires": { "loose-envify": "^1.0.0" } }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", "dev": true, "requires": { - "chokidar": "^2.0.2", + "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" }, "dependencies": { "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "optional": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "optional": true }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "optional": true, "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "fill-range": "^7.1.1" } }, "chokidar": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", - "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "optional": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.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" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "optional": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "to-regex-range": "^5.0.1" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "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, + "optional": true, "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "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, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - } - }, - "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 - } + "is-glob": "^4.0.1" } }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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, + "optional": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "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, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "binary-extensions": "^2.0.0" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "optional": true + }, + "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, + "optional": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "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, + "optional": true + }, + "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, + "optional": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "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, + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, + "optional": true, "requires": { - "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" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "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, + "optional": true, "requires": { - "is-extendable": "^0.1.0" + "remove-trailing-separator": "^1.0.1" } } } }, - "fill-range": { + "arr-diff": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "optional": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "optional": true, "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "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" }, "dependencies": { "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "optional": true, "requires": { "is-extendable": "^0.1.0" } } } }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.2", - "bundled": true, - "dev": true, - "optional": true, - "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" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "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" + } + }, + "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, + "optional": true, + "requires": { + "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" + }, + "dependencies": { + "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, "optional": true, "requires": { - "glob": "^7.0.5" + "is-descriptor": "^0.1.0" } }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.5.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, + "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, "optional": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "is-extendable": "^0.1.0" } }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, + "is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "optional": true, + "requires": { + "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" + }, + "dependencies": { + "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, "optional": true, "requires": { - "ansi-regex": "^2.0.0" + "is-descriptor": "^1.0.0" } }, - "strip-json-comments": { + "extend-shallow": { "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "optional": true, "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" + "is-extendable": "^0.1.0" } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.2", - "bundled": true, + } + } + }, + "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, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "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, "optional": true, "requires": { - "string-width": "^1.0.2" + "is-extendable": "^0.1.0" } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true } } }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, + "optional": true, "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -14042,65 +15002,39 @@ "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, + "optional": true, "requires": { "is-extglob": "^2.1.0" } } } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, + "optional": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" } }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "optional": true }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "optional": true, "requires": { "is-extglob": "^2.1.1" } @@ -14108,8 +15042,9 @@ "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2" }, @@ -14117,31 +15052,28 @@ "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "optional": true, "requires": { "is-buffer": "^1.1.5" } } } }, - "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 - }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "optional": true }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, + "optional": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -14158,65 +15090,35 @@ "to-regex": "^3.0.2" } }, - "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", + "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, "optional": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "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" - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "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, + "optional": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "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, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - } + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } } } }, "webcola": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/webcola/-/webcola-3.3.8.tgz", - "integrity": "sha512-WVDTdHS1SaqYCUJGPdbOhqj44mchDyTC78tozUdqJllwYeJ2554+BWkJfc5kNphT8foip2StCMw1FWsIvGmv9w==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/webcola/-/webcola-3.4.0.tgz", + "integrity": "sha512-4BiLXjXw3SJHo3Xd+rF+7fyClT6n7I+AR6TkBqyQ4kTsePSAMDLRCXY1f3B/kXJeP9tYn4G1TblxTO+jAt0gaw==", "requires": { "d3-dispatch": "^1.0.3", "d3-drag": "^1.0.4", + "d3-shape": "^1.3.5", "d3-timer": "^1.0.5" } }, @@ -14251,51 +15153,27 @@ }, "dependencies": { "ajv": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", - "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, "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=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "has-flag": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "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=", + "integrity": "sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==", "dev": true }, "json-schema-traverse": { @@ -14304,145 +15182,14 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - }, - "dependencies": { - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - } - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "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=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, "supports-color": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "integrity": "sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==", "dev": true, "requires": { "has-flag": "^2.0.0" } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "yargs": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", - "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } } } }, @@ -14467,20 +15214,10 @@ "ws": "^6.0.0" }, "dependencies": { - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "ansi-styles": { @@ -14493,27 +15230,37 @@ } }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", + "bytes": "3.1.2", + "content-type": "~1.0.5", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + } } }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, "chalk": { @@ -14534,90 +15281,109 @@ "dev": true }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" } }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, "requires": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", + "depd": "2.0.0", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.3.1", "fresh": "0.5.2", - "merge-descriptors": "1.0.1", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" } }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", + "on-finished": "2.4.1", "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "statuses": "2.0.1", "unpipe": "~1.0.0" } }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" } }, "iconv-lite": { @@ -14629,16 +15395,22 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true }, "mime": { @@ -14647,137 +15419,120 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "requires": { - "mime-db": "1.40.0" - } - }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.6" } }, "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==", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "ee-first": "1.1.1" } }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true + "qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "requires": { + "side-channel": "^1.0.6" + } }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "2.0.0", "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", + "ms": "2.1.3", + "on-finished": "2.4.1", "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "statuses": "2.0.1" + }, + "dependencies": { + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + } } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, "requires": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.19.0" } }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, "supports-color": { @@ -14789,22 +15544,21 @@ "has-flag": "^3.0.0" } }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", "dev": true, "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "async-limiter": "~1.0.0" } } } }, "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -14822,23 +15576,107 @@ "whatwg-fetch": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz", - "integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=" + "integrity": "sha512-SA2KdOXATOroD3EBUYvcdugsusXS5YiQFqwskSbsp5b1gK8HpNi/YP0jcy/BDpdllp305HMnrsVf9K7Be9GiEQ==" }, "whet.extend": { "version": "0.9.9", "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", - "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "integrity": "sha512-mmIPAft2vTgEILgPeZFqE/wWh24SEsR/k+N9fJ3Jxrz44iDFy9aemCxdksfURSHYFCLmvs/d/7Iso5XjPpNfrA==", "dev": true }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "requires": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "dependencies": { + "is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "requires": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + } + } + } + }, + "which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, + "which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "requires": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + } + }, + "which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + } + }, "widest-line": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", @@ -14846,45 +15684,18 @@ "dev": true, "requires": { "string-width": "^2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "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=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "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=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } } }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==", + "dev": true + }, "winston": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.0.tgz", - "integrity": "sha1-gIBQuT1SZh7Z+2wms/DIJnCLCu4=", + "integrity": "sha512-4/DotzcMp5ilGEC0KrZkpZ0pCHuUrVWmM41qAT5zAa5nNaBAyc1MQBPTVjcajiYf1D6b+CHjziYNY2Mi6Svv2g==", "requires": { "async": "~1.0.0", "colors": "1.0.x", @@ -14897,60 +15708,93 @@ "async": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=" + "integrity": "sha512-5mO7DX4CbJzp9zjaFXusQQ4tzKJARjNB1Ih1pVBi8wkbmXy/xzIDgEMXxWePLzt2OdFwaxfneIlT1nCiXubrPQ==" + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==" } } }, + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true + }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==" }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" + }, + "dependencies": { + "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, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", "dev": true, "requires": { "mkdirp": "^0.5.1" }, "dependencies": { "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.6" } } } }, "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "requires": { "graceful-fs": "^4.1.11", @@ -14959,36 +15803,31 @@ } }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", "dev": true, "requires": { - "async-limiter": "~1.0.0" + "options": ">=0.0.5", + "ultron": "1.0.x" } }, - "x-is-function": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/x-is-function/-/x-is-function-1.0.4.tgz", - "integrity": "sha1-XSlNw9Joy90GJYDgxd93o5HR+h4=", - "dev": true - }, "x-is-string": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "integrity": "sha512-GojqklwG8gpzOVEVki5KudKNoq7MbbjYZCbyWzEz7tyPA7eleiE0+ePwOWQQRb5fm86rD3S8Tc0tSFf3AOv50w==", "dev": true }, "xdg-basedir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "integrity": "sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ==", "dev": true }, "xml-js": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.4.tgz", - "integrity": "sha512-ZJ4DPgx97LzSdZ0NAbd0J5gWeSgWTpL2hIH1j1bOmk6QMyppee0S+vQAv/H+oYY1923kck5msPWOuSs0BDUh/w==", + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", "requires": { "sax": "^1.2.4" } @@ -14996,7 +15835,7 @@ "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + "integrity": "sha512-iTwvhNBRetXWe81+VcIw5YeadVSWyze7uA7nVnpP13ulrpnJ3UfQm5ApGnrkmxDJFdrblRdZs0EvaTCIfei5oQ==" }, "xxhashjs": { "version": "0.2.2", @@ -15008,17 +15847,117 @@ } }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", "dev": true }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "dev": true }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha512-3RiZrpLpjrzIAKgGdPktBcMP/eG5bDFlkI+PHle1qwzyVXyDQL+pD/eZaMoOOO0Y7LLBfjpucObuUm/icvbpKQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha512-WhzC+xgstid9MbVUktco/bf+KJG+Uu6vMX0LN1sLJvwmbCQVxb4D8LzogobonKycNasCZLdOzTAk1SK7+K7swg==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==", + "dev": true + } + } + }, "z-schema": { "version": "3.25.1", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-3.25.1.tgz", @@ -15036,11 +15975,6 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "optional": true - }, - "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==" } } } diff --git a/package.json b/package.json index 15997130..21c69e4f 100644 --- a/package.json +++ b/package.json @@ -17,18 +17,18 @@ "lint:js": "eslint ./src", "bundle:js": "webpack", "watch:js": "webpack --watch", - "watch:sync-bundle": "livereload \"build, src/views/index.html\"", + "watch:sync-bundle": "livereload \"public, src/views/index.html\"", "watch:sync-server": "nodemon src/server/index.js", "lint:css": "stylelint src/**/*.css", - "bundle:css": "postcss src/styles/index.css -o build/bundle.css", - "watch:css": "postcss --watch src/styles/index.css -o build/bundle.css", - "bundle:css-deps": "postcss src/styles/deps.css -o build/deps.css", - "watch:css-deps": "postcss --watch src/styles/deps.css -o build/deps.css", + "bundle:css": "postcss src/styles/index.css -o public/bundle.css", + "watch:css": "postcss --watch src/styles/index.css -o public/bundle.css", + "bundle:css-deps": "postcss src/styles/deps.css -o public/deps.css", + "watch:css-deps": "postcss --watch src/styles/deps.css -o public/deps.css", "bundle": "run-s bundle:*", "bundle-profile": "cross-env NODE_ENV=production PROFILE=true webpack --profile", "build": "run-p bundle", "build-prod": "cross-env NODE_ENV=production run-s build", - "clean": "rimraf build/*", + "clean": "rimraf public/bundle.js public/deps.js public/bundle.css public/deps.css", "lint": "run-s lint:*", "watch": "run-p watch:*", "test": "mocha --recursive", @@ -94,17 +94,21 @@ "winston": "^2.4.0" }, "devDependencies": { + "@babel/core": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/preset-env": "^7.22.5", + "@babel/preset-react": "^7.26.3", "async-retry": "^1.3.3", - "babel-core": "^6.26.0", - "babel-loader": "^7.1.2", + "babel-loader": "^8.3.0", "babel-plugin-transform-async-to-generator": "^6.24.1", "babel-polyfill": "^6.26.0", - "babel-preset-env": "^1.6.0", "babel-preset-react": "^6.24.1", "chai": "^4.1.2", "commander": "^11.1.0", "cross-env": "^5.0.5", "cssnano": "^3.10.0", + "dotenv": "^16.4.7", "echo-cli": "^1.0.8", "eslint": "^4.8.0", "eslint-config-standard": "^10.2.1", diff --git a/public/bundle.css b/public/bundle.css index 952d31d1..c5c005c1 120000 --- a/public/bundle.css +++ b/public/bundle.css @@ -1 +1,2528 @@ -../build/bundle.css \ No newline at end of file +/* css entry point */ + +/* per-page css files */ + +:root { + /* Pathway commons colors */ + + /* Colours used by other modules */ +} + +/* Viewport scaling sizes */ + +.toggle-extra-downloads-container, .download-option-description { + cursor: default; +} + +body { + font-family: Open Sans, Roboto, Liberation Sans, Helvetica Neue, Helvetica, Arial, sans-serif; +} + +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + } + + 100% { + -webkit-transform: rotate(404deg); + transform: rotate(404deg); + } +} + +@keyframes spin { + 0% { + -webkit-transform: rotate(45deg); + transform: rotate(45deg); + } + + 100% { + -webkit-transform: rotate(404deg); + transform: rotate(404deg); + } +} + +@-webkit-keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +@keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +body { + font-family: Open Sans, Helvetica Neue, Helvetica, sans-serif; + font-size: 12pt +} + +body.content-page { + margin: 0.5em; +} + +* { + outline: none !important; +} + +input[type='text'], input[type='date'], input[type='week'], input[type='datetime'], input[type='email'], input[type='file'], input[type='month'], input[type='number'], input[type='password'], input[type='search'], input[type='tel'], input[type='url'], textarea { + /* width: var(--defaultWidgetWidth); */ +} + +input[type='text'], input[type='date'], input[type='week'], input[type='datetime'], input[type='email'], input[type='file'], input[type='month'], input[type='number'], input[type='password'], input[type='search'], input[type='tel'], input[type='url'], input[type='reset'], input[type='submit'], button, textarea, select, .radioset input[type="radio"] + label, .button-like { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + vertical-align: middle; + font: inherit; + outline: none !important; + padding: 0 0.25em; + height: 1.75em; + min-height: 1.75em; + line-height: 1.75em; + -webkit-box-sizing: border-box; + box-sizing: border-box; + display: inline-block; + background-color: transparent; + border-radius: 4px; + border: 1px solid #d3d8da; + -webkit-transition-property: border-color, background-color, color; + -o-transition-property: border-color, background-color, color; + transition-property: border-color, background-color, color; + -webkit-transition-duration: 500ms; + -o-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out +} + +input[type='text']:disabled, input[type='date']:disabled, input[type='week']:disabled, input[type='datetime']:disabled, input[type='email']:disabled, input[type='file']:disabled, input[type='month']:disabled, input[type='number']:disabled, input[type='password']:disabled, input[type='search']:disabled, input[type='tel']:disabled, input[type='url']:disabled, input[type='reset']:disabled, input[type='submit']:disabled, button:disabled, textarea:disabled, select:disabled, .radioset input[type="radio"] + label:disabled, .button-like:disabled { + border: 1px solid #ddd; + cursor: default; + color: #888; +} + +input[type='text']::-webkit-input-placeholder, input[type='date']::-webkit-input-placeholder, input[type='week']::-webkit-input-placeholder, input[type='datetime']::-webkit-input-placeholder, input[type='email']::-webkit-input-placeholder, input[type='file']::-webkit-input-placeholder, input[type='month']::-webkit-input-placeholder, input[type='number']::-webkit-input-placeholder, input[type='password']::-webkit-input-placeholder, input[type='search']::-webkit-input-placeholder, input[type='tel']::-webkit-input-placeholder, input[type='url']::-webkit-input-placeholder, input[type='reset']::-webkit-input-placeholder, input[type='submit']::-webkit-input-placeholder, button::-webkit-input-placeholder, textarea::-webkit-input-placeholder, select::-webkit-input-placeholder, .radioset input[type="radio"] + label::-webkit-input-placeholder, .button-like::-webkit-input-placeholder { + color: rgb(165, 165, 165); +} + +input[type='text']::-moz-placeholder, input[type='date']::-moz-placeholder, input[type='week']::-moz-placeholder, input[type='datetime']::-moz-placeholder, input[type='email']::-moz-placeholder, input[type='file']::-moz-placeholder, input[type='month']::-moz-placeholder, input[type='number']::-moz-placeholder, input[type='password']::-moz-placeholder, input[type='search']::-moz-placeholder, input[type='tel']::-moz-placeholder, input[type='url']::-moz-placeholder, input[type='reset']::-moz-placeholder, input[type='submit']::-moz-placeholder, button::-moz-placeholder, textarea::-moz-placeholder, select::-moz-placeholder, .radioset input[type="radio"] + label::-moz-placeholder, .button-like::-moz-placeholder { + color: rgb(165, 165, 165); +} + +input[type='text']::-ms-input-placeholder, input[type='date']::-ms-input-placeholder, input[type='week']::-ms-input-placeholder, input[type='datetime']::-ms-input-placeholder, input[type='email']::-ms-input-placeholder, input[type='file']::-ms-input-placeholder, input[type='month']::-ms-input-placeholder, input[type='number']::-ms-input-placeholder, input[type='password']::-ms-input-placeholder, input[type='search']::-ms-input-placeholder, input[type='tel']::-ms-input-placeholder, input[type='url']::-ms-input-placeholder, input[type='reset']::-ms-input-placeholder, input[type='submit']::-ms-input-placeholder, button::-ms-input-placeholder, textarea::-ms-input-placeholder, select::-ms-input-placeholder, .radioset input[type="radio"] + label::-ms-input-placeholder, .button-like::-ms-input-placeholder { + color: rgb(165, 165, 165); +} + +input[type='text']::placeholder, input[type='date']::placeholder, input[type='week']::placeholder, input[type='datetime']::placeholder, input[type='email']::placeholder, input[type='file']::placeholder, input[type='month']::placeholder, input[type='number']::placeholder, input[type='password']::placeholder, input[type='search']::placeholder, input[type='tel']::placeholder, input[type='url']::placeholder, input[type='reset']::placeholder, input[type='submit']::placeholder, button::placeholder, textarea::placeholder, select::placeholder, .radioset input[type="radio"] + label::placeholder, .button-like::placeholder { + color: rgb(165, 165, 165); +} + +input[type='text']:active, input[type='date']:active, input[type='week']:active, input[type='datetime']:active, input[type='email']:active, input[type='file']:active, input[type='month']:active, input[type='number']:active, input[type='password']:active, input[type='search']:active, input[type='tel']:active, input[type='url']:active, input[type='reset']:active, input[type='submit']:active, button:active, textarea:active, select:active, .radioset input[type="radio"] + label:active, .button-like:active { + color: #000; +} + +input[type='text']:active, input[type='text']:focus, input[type='date']:active, input[type='date']:focus, input[type='week']:active, input[type='week']:focus, input[type='datetime']:active, input[type='datetime']:focus, input[type='email']:active, input[type='email']:focus, input[type='file']:active, input[type='file']:focus, input[type='month']:active, input[type='month']:focus, input[type='number']:active, input[type='number']:focus, input[type='password']:active, input[type='password']:focus, input[type='search']:active, input[type='search']:focus, input[type='tel']:active, input[type='tel']:focus, input[type='url']:active, input[type='url']:focus, input[type='reset']:active, input[type='reset']:focus, input[type='submit']:active, input[type='submit']:focus, button:active, button:focus, textarea:active, textarea:focus, select:active, select:focus, .radioset input[type="radio"] + label:active, .radioset input[type="radio"] + label:focus, .button-like:active, .button-like:focus { + border-color: #aaa; +} + +input[type='text']:invalid, input[type='date']:invalid, input[type='week']:invalid, input[type='datetime']:invalid, input[type='email']:invalid, input[type='file']:invalid, input[type='month']:invalid, input[type='number']:invalid, input[type='password']:invalid, input[type='search']:invalid, input[type='tel']:invalid, input[type='url']:invalid, input[type='reset']:invalid, input[type='submit']:invalid, button:invalid, textarea:invalid, select:invalid, .radioset input[type="radio"] + label:invalid, .button-like:invalid { + border-color: #c20e0e; + -webkit-box-shadow: none; + box-shadow: none; +} + +input[type='text']::-moz-focus-inner, input[type='date']::-moz-focus-inner, input[type='week']::-moz-focus-inner, input[type='datetime']::-moz-focus-inner, input[type='email']::-moz-focus-inner, input[type='file']::-moz-focus-inner, input[type='month']::-moz-focus-inner, input[type='number']::-moz-focus-inner, input[type='password']::-moz-focus-inner, input[type='search']::-moz-focus-inner, input[type='tel']::-moz-focus-inner, input[type='url']::-moz-focus-inner, input[type='reset']::-moz-focus-inner, input[type='submit']::-moz-focus-inner, button::-moz-focus-inner, textarea::-moz-focus-inner, select::-moz-focus-inner, .radioset input[type="radio"] + label::-moz-focus-inner, .button-like::-moz-focus-inner { + border: 0; +} + +input[type='text']::-ms-clear, input[type='date']::-ms-clear, input[type='week']::-ms-clear, input[type='datetime']::-ms-clear, input[type='email']::-ms-clear, input[type='file']::-ms-clear, input[type='month']::-ms-clear, input[type='number']::-ms-clear, input[type='password']::-ms-clear, input[type='search']::-ms-clear, input[type='tel']::-ms-clear, input[type='url']::-ms-clear, input[type='reset']::-ms-clear, input[type='submit']::-ms-clear, button::-ms-clear, textarea::-ms-clear, select::-ms-clear, .radioset input[type="radio"] + label::-ms-clear, .button-like::-ms-clear { + display: none; +} + +button.button-toggle.button-toggle-on { + background-color: #ccc; +} + +.radioset { + display: -webkit-box; + display: -ms-flexbox; + display: flex +} + +.radioset input[type="radio"] { + display: none;/* hide native radio circle */ +} + +.radioset input[type="radio"]:active + label { + border-color: black; +} + +.radioset input[type="radio"]:checked + label { + background-color: #ccc; +} + +.radioset input[type="radio"] + label::before { + display: none;/* hide icon replacement */ +} + +.radioset input[type="radio"] + label { + border-radius: 0; +} + +.radioset input[type="radio"]:first-child + label { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.radioset input[type="radio"] + label:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +select { + width: 12em; + padding-right: 1em; + background-image: url("data:image/svg+xml,%3Csvg width%3D%221792%22 height%3D%221792%22 viewBox%3D%220 0 1792 1792%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath d%3D%22M1395 736q0 13-10 23l-466 466q-10 10-23 10t-23-10l-466-466q-10-10-10-23t10-23l50-50q10-10 23-10t23 10l393 393 393-393q10-10 23-10t23 10l50 50q10 10 10 23z%22%2F%3E%3C%2Fsvg%3E%0D"); + background-position: 100% 50%; + background-position: calc(100% - 0.5em) 50%; + background-size: 1em 1em; + background-repeat: no-repeat; + + /* background-blend-mode: overlay; */ + cursor: pointer + + /* &:disabled { + background-color: rgba(255, 255, 255, 0.5); + } */ + + /* removes dotted lines on ff */ +} + +select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #000; +} + +input[type='range'] { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + width: 12em; + height: 1em; + background: transparent; + cursor: pointer; + outline: none !important +} + +input[type='range']:focus { + outline: none !important; +} + +input[type='range']::-moz-focus-outer { + border: 0; +} + +input[type='range']::-webkit-slider-thumb { + -webkit-appearance: none; + background-color: #000; + border-radius: 1em; + border-width: 0; + width: 1em; + height: 1em; + margin-top: -0.45em; + cursor: pointer; + outline: none; +} + +input[type='range']::-moz-range-thumb { + background-color: #000; + border-radius: 1em; + border-width: 0; + width: 1em; + height: 1em; + margin-top: -0.45em; + cursor: pointer; + outline: none; +} + +input[type='range']::-ms-thumb { + background-color: #000; + border-radius: 1em; + border-width: 0; + width: 1em; + height: 1em; + margin-top: 0; + cursor: pointer; + outline: none; +} + +input[type='range']::-webkit-slider-runnable-track { + width: 100%; + height: 0.1em; + background-color: #d3d8da; + border-radius: 0.1em; + outline: none; +} + +input[type='range']::-moz-range-track { + width: 100%; + height: 0.1em; + background-color: #d3d8da; + border-radius: 0.1em; + outline: none; +} + +input[type='range']::-ms-track { + background: transparent; + color: transparent; + width: 100%; + height: 0.1em; + background-color: #d3d8da; + border-radius: 0.1em; + outline: none; +} + +input[type='reset'], input[type='submit'], button { + cursor: pointer; + text-align: center +} + +input[type='reset'].plain-button, input[type='submit'].plain-button, button.plain-button { + border-color: transparent; +} + +input[type='reset']:active, input[type='submit']:active, button:active { + border-color: #000; + -webkit-box-shadow: inset 0 0 0 1px #fff, inset 0 0 4px #fff; + box-shadow: inset 0 0 0 1px #fff, inset 0 0 4px #fff; +} + +input[type='reset']:active.plain-button, input[type='submit']:active.plain-button, button:active.plain-button { + border-color: rgb(84, 84, 84); +} + +input.input-joined + button, button.button-joined { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + min-width: 2em; +} + +input.input-joined { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + position: relative; +} + +input.input-joined:not(.input-round) { + border-right-width: 0; +} + +input.input-round { + border-radius: 1em; + padding-left: 0.5em; + padding-right: 2em; +} + +input.input-round + button, input.input-round + .input-joined-after { + -webkit-box-sizing: border-box; + box-sizing: border-box; + height: 1.75em; + display: -webkit-inline-box; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + border-color: transparent; + position: absolute; + width: 2em; + margin-left: -2em; + border-top-right-radius: 1em; + border-bottom-right-radius: 1em; +} + +input.input-round + button:active, input.input-round + .input-joined-after:active { + -webkit-box-shadow: none; + box-shadow: none; + color: #888; +} + +.input-icon { + position: absolute; + height: 1.75em; + line-height: 1.75em; + width: 2em; + text-align: center +} + +.input-icon + input { + padding-left: 1.75em; +} + +.icon { + display: inline-block; + line-height: 1em; + vertical-align: -0.125em; + width: 1em; + height: 1em; + background-size: contain; + background-repeat: no-repeat +} + +.icon.icon-spinner { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%0D%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0D%3Csvg version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220%22 y%3D%220%22 width%3D%2224%22 height%3D%2224%22 viewBox%3D%220%2C 0%2C 24%2C 24%22%3E%0D %3Cg id%3D%22Layer_1%22%3E%0D %3Cpath d%3D%22M12%2C18.975 C14.21%2C18.975 16.17%2C17.955 17.45%2C16.355 L20.05%2C17.885 C18.23%2C20.365 15.3%2C21.975 11.99%2C21.975 C6.47%2C21.975 2%2C17.495 2%2C11.975 C2%2C6.785 5.94%2C2.525 11%2C2.025 L11%2C5.055 C7.61%2C5.545 5%2C8.445 5%2C11.975 C5%2C15.845 8.13%2C18.975 12%2C18.975 z%22 fill%3D%22%23000000%22%2F%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D"); + -webkit-animation: spin 750ms infinite linear; + animation: spin 750ms infinite linear; +} + +.icon.icon-biofactoid { + background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0D%3Csvg width%3D%22100%25%22 height%3D%22100%25%22 viewBox%3D%220 0 100 100%22 version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 xml%3Aspace%3D%22preserve%22 xmlns%3Aserif%3D%22http%3A%2F%2Fwww.serif.com%2F%22 style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A2%3B%22%3E%0D %3Cg transform%3D%22matrix(1%2C0%2C0%2C1%2C-847.921%2C-1308.12)%22%3E%0D %3Cg transform%3D%22matrix(1.06872%2C0%2C0%2C1.06872%2C-41.1717%2C-50.3547)%22%3E%0D %3Cg transform%3D%22matrix(0.514119%2C0%2C0%2C0.514119%2C473.066%2C714.847)%22%3E%0D %3Ccircle cx%3D%22789%22 cy%3D%221173%22 r%3D%2291%22 style%3D%22fill%3Argb(255%2C212%2C121)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg transform%3D%22matrix(0.591623%2C0%2C0%2C0.591623%2C-475.358%2C574.836)%22%3E%0D %3Cg transform%3D%22matrix(9.26845e-18%2C0.151365%2C-0.151365%2C9.26845e-18%2C2476.47%2C1048.47)%22%3E%0D %3Cpath d%3D%22M1369.82%2C847.06L1540.04%2C945.334L1540.04%2C1141.88L1369.82%2C1240.16L1199.61%2C1141.88L1199.61%2C945.334L1369.82%2C847.06Z%22 style%3D%22fill%3Awhite%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg transform%3D%22matrix(9.26845e-18%2C0.151365%2C-0.151365%2C9.26845e-18%2C2428.92%2C1021.17)%22%3E%0D %3Cpath d%3D%22M1369.82%2C847.06L1540.04%2C945.334L1540.04%2C1141.88L1369.82%2C1240.16L1199.61%2C1141.88L1199.61%2C945.334L1369.82%2C847.06Z%22 style%3D%22fill%3Awhite%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg transform%3D%22matrix(9.26845e-18%2C0.151365%2C-0.151365%2C9.26845e-18%2C2428.92%2C1075.71)%22%3E%0D %3Cpath d%3D%22M1369.82%2C847.06L1540.04%2C945.334L1540.04%2C1141.88L1369.82%2C1240.16L1199.61%2C1141.88L1199.61%2C945.334L1369.82%2C847.06Z%22 style%3D%22fill%3Awhite%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D"); +} + +.icon.icon-t { + background-image: url("data:image/svg+xml,%3Csvg aria-hidden%3D%22true%22 focusable%3D%22false%22 data-prefix%3D%22fab%22 data-icon%3D%22twitter%22 class%3D%22svg-inline--fa fa-twitter fa-w-16%22 role%3D%22img%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 512 512%22%3E%3Cpath fill%3D%22%23000%22 d%3D%22M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E"); +} + +.icon.icon-t-white { + background-image: url("data:image/svg+xml,%3Csvg aria-hidden%3D%22true%22 focusable%3D%22false%22 data-prefix%3D%22fab%22 data-icon%3D%22twitter%22 class%3D%22svg-inline--fa fa-twitter fa-w-16%22 role%3D%22img%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 512 512%22%3E%3Cpath fill%3D%22%23fff%22 d%3D%22M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E"); +} + +.icon.icon-orcid { + background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%0D%3C!-- Generator%3A Adobe Illustrator 19.1.0%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 0) --%3E%0D%3Csvg version%3D%221.1%22 id%3D%22Layer_1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220px%22 y%3D%220px%22%0D%09 viewBox%3D%220 0 256 256%22 style%3D%22enable-background%3Anew 0 0 256 256%3B%22 xml%3Aspace%3D%22preserve%22%3E%0D%3Cstyle type%3D%22text%2Fcss%22%3E%0D%09.st0%7Bfill%3A%23A6CE39%3B%7D%0D%09.st1%7Bfill%3A%23FFFFFF%3B%7D%0D%3C%2Fstyle%3E%0D%3Cpath class%3D%22st0%22 d%3D%22M256%2C128c0%2C70.7-57.3%2C128-128%2C128C57.3%2C256%2C0%2C198.7%2C0%2C128C0%2C57.3%2C57.3%2C0%2C128%2C0C198.7%2C0%2C256%2C57.3%2C256%2C128z%22%2F%3E%0D%3Cg%3E%0D%09%3Cpath class%3D%22st1%22 d%3D%22M86.3%2C186.2H70.9V79.1h15.4v48.4V186.2z%22%2F%3E%0D%09%3Cpath class%3D%22st1%22 d%3D%22M108.9%2C79.1h41.6c39.6%2C0%2C57%2C28.3%2C57%2C53.6c0%2C27.5-21.5%2C53.6-56.8%2C53.6h-41.8V79.1z M124.3%2C172.4h24.5%0D%09%09c34.9%2C0%2C42.9-26.5%2C42.9-39.7c0-21.5-13.7-39.7-43.7-39.7h-23.7V172.4z%22%2F%3E%0D%09%3Cpath class%3D%22st1%22 d%3D%22M88.7%2C56.8c0%2C5.5-4.5%2C10.1-10.1%2C10.1c-5.6%2C0-10.1-4.6-10.1-10.1c0-5.6%2C4.5-10.1%2C10.1-10.1%0D%09%09C84.2%2C46.7%2C88.7%2C51.3%2C88.7%2C56.8z%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E"); +} + +.icon.icon-ncbi { + background-image: url('data:image/png;base64,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'); +} + +.icon.logo-pubmed { + background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22utf-8%22%3F%3E%0D%3C!-- Generator%3A Adobe Illustrator 13.0.2%2C SVG Export Plug-In . SVG Version%3A 6.00 Build 14948) --%3E%0D%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0D%3Csvg version%3D%221.1%22 id%3D%22Layer_1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 x%3D%220px%22 y%3D%220px%22%0D%09 width%3D%22720px%22 height%3D%22256px%22 viewBox%3D%220 0 123.1 43.691%22 enable-background%3D%22new 0 0 123.1 43.691%22 xml%3Aspace%3D%22preserve%22%3E%0D%3Cg%3E%0D%09%3Cg%3E%0D%09%09%3Cpath fill%3D%22%23231F1F%22 d%3D%22M50.487%2C2.04v29.034c0%2C0%2C11.162-1.299%2C11.162%2C9.604V13.201C61.649%2C2.818%2C50.487%2C2.04%2C50.487%2C2.04%22%2F%3E%0D%09%09%3Cpath fill%3D%22%23AAAAAA%22 d%3D%22M55.715%2C0v25.547c0%2C0%2C6.162%2C1.189%2C6.162%2C12.091c0%2C10.903%2C0.031-20.283%2C0.031-26.124%0D%09%09%09C61.909%2C1.132%2C55.715%2C0%2C55.715%2C0%22%2F%3E%0D%09%3C%2Fg%3E%0D%09%3Cpath fill%3D%22%233978AD%22 d%3D%22M62.077%2C12.941v26.422c0%2C0%2C5.359-15.01%2C27.887%2C4.328c0-7.008%2C0.043-24.683%2C0.043-30.525%0D%09%09C67.739-3.057%2C62.077%2C12.941%2C62.077%2C12.941%22%2F%3E%0D%09%3Cpath fill%3D%22%233978AD%22 d%3D%22M0%2C32.718h5v-6.399h2.848c4.388%2C0%2C6.852-1.996%2C6.852-6.55c0-4.427-2.869-6.349-7.018-6.349H0V32.718z%0D%09%09 M5%2C17.419h0.853c1.965%2C0%2C3.646%2C0.027%2C3.646%2C2.503c0%2C2.396-1.81%2C2.396-3.646%2C2.396H5V17.419z%22%2F%3E%0D%09%3Cpath fill%3D%22%233978AD%22 d%3D%22M16.699%2C19.619v7.871c0%2C4.304%2C3.073%2C5.629%2C7.05%2C5.629c3.977%2C0%2C7.051-1.324%2C7.051-5.629v-7.871h-4.7v6.974%0D%09%09c0%2C1.654-0.414%2C2.825-2.351%2C2.825s-2.35-1.171-2.35-2.825v-6.974H16.699z%22%2F%3E%0D%09%3Cpath fill%3D%22%233978AD%22 d%3D%22M33.6%2C32.718h4.7v-1.459h0.051c0.841%2C1.282%2C2.42%2C1.859%2C3.949%2C1.859c3.898%2C0%2C6.6-3.225%2C6.6-7.013%0D%09%09c0-3.764-2.677-6.988-6.549-6.988c-1.503%2C0-3.057%2C0.574-4.05%2C1.747v-9.347h-4.7L33.6%2C32.718z M41.1%2C23.118c1.897%2C0%2C3%2C1.378%2C3%2C3.014%0D%09%09c0%2C1.688-1.102%2C2.986-3%2C2.986c-1.897%2C0-3-1.298-3-2.986C38.1%2C24.496%2C39.202%2C23.118%2C41.1%2C23.118L41.1%2C23.118z%22%2F%3E%0D%09%3Cpolygon fill%3D%22%23FFFFFF%22 points%3D%2264.2%2C32.718 69.192%2C32.718 70.805%2C21.607 70.856%2C21.607 75.286%2C32.718 77.284%2C32.718 %0D%09%0981.918%2C21.607 81.969%2C21.607 83.377%2C32.718 88.399%2C32.718 85.477%2C13.419 80.485%2C13.419 76.336%2C23.733 72.418%2C13.419 67.477%2C13.419 %0D%09%09%09%22%2F%3E%0D%09%3Cpath fill%3D%22%233978AD%22 d%3D%22M96.7%2C24.218c0.281-1.374%2C1.408-2.1%2C2.764-2.1c1.254%2C0%2C2.406%2C0.83%2C2.639%2C2.1H96.7z M106.426%2C26.431%0D%09%09c0-4.49-2.65-7.313-7.227-7.313c-4.293%2C0-7.299%2C2.636-7.299%2C7.013c0%2C4.53%2C3.264%2C6.987%2C7.637%2C6.987c3.008%2C0%2C5.965-1.406%2C6.711-4.5%0D%09%09h-4.492c-0.512%2C0.869-1.23%2C1.201-2.23%2C1.201c-1.924%2C0-2.926-1.019-2.926-2.901h9.826V26.431z%22%2F%3E%0D%09%3Cpath fill%3D%22%233978AD%22 d%3D%22M118.399%2C32.718h4.701v-21.2h-4.701v9.347c-0.969-1.173-2.549-1.747-4.051-1.747%0D%09%09c-3.873%2C0-6.549%2C3.225-6.549%2C6.987c0%2C3.762%2C2.727%2C7.012%2C6.6%2C7.012c1.527%2C0%2C3.133-0.578%2C3.947-1.859h0.053V32.718z M115.6%2C23.118%0D%09%09c1.896%2C0%2C3%2C1.378%2C3%2C3.014c0%2C1.688-1.102%2C2.986-3%2C2.986c-1.896%2C0-3-1.298-3-2.986C112.6%2C24.496%2C113.702%2C23.118%2C115.6%2C23.118%0D%09%09L115.6%2C23.118z%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D"); +} + +.icon.icon-chebi { + background-image: url('data:image/png;base64,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'); +} + +.icon.icon-pc-light { + background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0D%3Csvg width%3D%22100%25%22 height%3D%22100%25%22 viewBox%3D%220 0 736 876%22 version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 xml%3Aspace%3D%22preserve%22 xmlns%3Aserif%3D%22http%3A%2F%2Fwww.serif.com%2F%22 style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A1.41421%3B%22%3E%0D %3Cg transform%3D%22matrix(1%2C0%2C0%2C1%2C-74.9667%2C0)%22%3E%0D %3Cg id%3D%22path4%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Cpath d%3D%22M562.305%2C328.826C530.644%2C291.595 484.241%2C270.142 435.374%2C270.142C343.405%2C270.142 268.738%2C344.823 268.738%2C436.81C268.738%2C528.797 343.405%2C603.479 435.374%2C603.479C474.934%2C603.479 513.204%2C589.402 543.338%2C563.766L479.072%2C488.195C466.876%2C498.571 451.386%2C504.268 435.374%2C504.268C398.15%2C504.268 367.929%2C474.041 367.929%2C436.81C367.929%2C399.579 398.15%2C369.352 435.374%2C369.352C455.153%2C369.352 473.934%2C378.035 486.749%2C393.104L562.305%2C328.826Z%22 style%3D%22fill%3Argb(22%2C160%2C133)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22rect6%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Crect x%3D%22130%22 y%3D%22436%22 width%3D%22139%22 height%3D%22422.932%22 style%3D%22fill%3Argb(42%2C62%2C80)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22path8%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Cpath d%3D%22M297.36%2C708.985C340.117%2C730.656 387.377%2C741.949 435.31%2C741.949C603.748%2C741.949 740.497%2C605.172 740.497%2C436.702C740.497%2C268.231 603.748%2C131.455 435.31%2C131.455C266.76%2C131.455 130.123%2C268.119 130.123%2C436.702L269.019%2C436.702C269.019%2C344.844 343.47%2C270.378 435.31%2C270.378C527.089%2C270.378 601.601%2C344.905 601.601%2C436.702C601.601%2C528.498 527.089%2C603.025 435.31%2C603.025C409.192%2C603.025 383.441%2C596.872 360.144%2C585.064L297.36%2C708.985Z%22 style%3D%22fill%3Argb(42%2C62%2C80)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22rect3712%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Crect x%3D%22131.234%22 y%3D%22421.93%22 width%3D%22104.987%22 height%3D%2281.365%22 style%3D%22fill%3Argb(42%2C62%2C80)%3Bstroke%3Argb(42%2C62%2C80)%3Bstroke-width%3A1px%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22rect3714%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Crect x%3D%22196.851%22 y%3D%22403.557%22 width%3D%2268.242%22 height%3D%22125.985%22 style%3D%22fill%3Argb(42%2C62%2C80)%3Bstroke%3Argb(42%2C62%2C80)%3Bstroke-width%3A1px%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D"); +} + +.icon.logo-biofactoid { + background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0D%3Csvg width%3D%22100%25%22 height%3D%22100%25%22 viewBox%3D%220 0 1229 187%22 version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 xml%3Aspace%3D%22preserve%22 xmlns%3Aserif%3D%22http%3A%2F%2Fwww.serif.com%2F%22 style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A2%3B%22%3E%0D %3Cg transform%3D%22matrix(1%2C0%2C0%2C1%2C-1926.56%2C-1883.8)%22%3E%0D %3Cg transform%3D%22matrix(1%2C0%2C0%2C1%2C0%2C607.427)%22%3E%0D %3Cg transform%3D%22matrix(0.904512%2C0%2C0%2C0.904512%2C1381.44%2C266.242)%22%3E%0D %3Ctext x%3D%22836.31px%22 y%3D%221317.08px%22 style%3D%22font-family%3A'HelveticaNeue-Thin'%2C 'Helvetica Neue'%2C sans-serif%3Bfont-weight%3A200%3Bfont-size%3A266.667px%3B%22%3Ebio%3C%2Ftext%3E%0D %3Ctext x%3D%221172.58px%22 y%3D%221317.08px%22 style%3D%22font-family%3A'HelveticaNeue-Medium'%2C 'Helvetica Neue'%2C sans-serif%3Bfont-weight%3A500%3Bfont-size%3A266.667px%3B%22%3Efact%3C%2Ftext%3E%0D %3Ctext x%3D%221641.91px%22 y%3D%221317.08px%22 style%3D%22font-family%3A'HelveticaNeue-Thin'%2C 'Helvetica Neue'%2C sans-serif%3Bfont-weight%3A200%3Bfont-size%3A266.667px%3B%22%3Eoid%3C%2Ftext%3E%0D %3C%2Fg%3E%0D %3Cg transform%3D%22matrix(1.34193%2C0%2C0%2C1.34193%2C416.61%2C-209.197)%22%3E%0D %3Cg%3E%0D %3Cg transform%3D%22matrix(1.2169e-17%2C0.198734%2C-0.198734%2C1.2169e-17%2C1434.11%2C904.48)%22%3E%0D %3Cpath d%3D%22M1369.82%2C847.06L1540.04%2C945.334L1540.04%2C1141.88L1369.82%2C1240.16L1199.61%2C1141.88L1199.61%2C945.334L1369.82%2C847.06Z%22 style%3D%22fill%3Argb(255%2C212%2C121)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg transform%3D%22matrix(1.2169e-17%2C0.198734%2C-0.198734%2C1.2169e-17%2C1371.67%2C868.635)%22%3E%0D %3Cpath d%3D%22M1369.82%2C847.06L1540.04%2C945.334L1540.04%2C1141.88L1369.82%2C1240.16L1199.61%2C1141.88L1199.61%2C945.334L1369.82%2C847.06Z%22 style%3D%22fill%3Argb(255%2C212%2C121)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg transform%3D%22matrix(1.2169e-17%2C0.198734%2C-0.198734%2C1.2169e-17%2C1371.67%2C940.242)%22%3E%0D %3Cpath d%3D%22M1369.82%2C847.06L1540.04%2C945.334L1540.04%2C1141.88L1369.82%2C1240.16L1199.61%2C1141.88L1199.61%2C945.334L1369.82%2C847.06Z%22 style%3D%22fill%3Argb(255%2C212%2C121)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D"); +} + +.icon {/* Add chevron icons for gene card scrolling */ +} + +.icon.icon-chevron-left { + position: relative; + width: 0.6em; + height: 0.6em; + border-width: 0 0 0.1em 0.1em; + border-style: solid; + border-color: currentColor; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + +.icon.icon-chevron-right { + position: relative; + width: 0.6em; + height: 0.6em; + border-width: 0.1em 0.1em 0 0; + border-style: solid; + border-color: currentColor; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); +} + +.icon-rot-90 { + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} + +.icon-rot-180 { + -webkit-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); +} + +.icon-rot-270 { + -webkit-transform: rotate(270deg); + -ms-transform: rotate(270deg); + transform: rotate(270deg); +} + +h1, h2, h3 { + font-weight: 600; + line-height: 1.5em; +} + +h1 { + font-size: 1.5em; + margin: 0.66667em 0; +} + +h2 { + font-size: 1.25em; + margin: 0.8em 0; +} + +h3 { + font-size: 1em; + margin: 1em 0; +} + +a { + color: inherit; + text-decoration: none +} + +a.plain-link { + -webkit-box-shadow: 0 -1px rgba(49, 147, 253, 0.5) inset; + box-shadow: 0 -1px rgba(49, 147, 253, 0.5) inset; + -webkit-transition: -webkit-box-shadow 500ms ease-out; + transition: -webkit-box-shadow 500ms ease-out; + -o-transition: box-shadow 500ms ease-out; + transition: box-shadow 500ms ease-out; + transition: box-shadow 500ms ease-out, -webkit-box-shadow 500ms ease-out; +} + +a.plain-link:active { + -webkit-box-shadow: 0 -2px #3193fd inset; + box-shadow: 0 -2px #3193fd inset; +} + +img { + border: none; +} + +p { + line-height: 1.5em; + margin: 1em 0; +} + +pre.code-block { + border: 1px solid #d3d8da; + border-radius: 4px; +} + +ul, ol { + margin: 1em 0; + padding-left: 1.5em; + line-height: 1.5em; +} + +li { + margin: 1em 0; +} + +ul.horizontal-list { + margin: 0; + padding: 0; +} + +ul.horizontal-list > li { + list-style: none; + display: inline; +} + +ul.horizontal-list > li::after { + content: '\00a0\00b7\00a0'; +} + +ul.horizontal-list > li:last-child::after { + content: none; +} + +code, pre, .code, input.code { + font-family: Inconsolata, Courier New, monospace; +} + +.dropdown { + position: relative; + cursor: pointer; + border: 1px solid #d3d8da; + min-width: 11em; + opacity: 1; +} + +.dropdown-active { +} + +.dropdown-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 5px; + color: #7F8C8D; + z-index: 1 +} + +.dropdown-header i { + padding-left: 10px; +} + +.dropdown-title { + border-right: 1px solid #d3d8da; + padding-right: 10px; +} + +.dropdown-options { + border: 1px solid #d3d8da; + list-style: none; + position: absolute; + background-color: white; + margin: 0 -1px; + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); + z-index: 1; +} + +.dropdown-option { + /* height: 2em; */ + padding: 10px; +} + +.dropdown-option:hover { + background-color: #d3d8da +} + +.search-dropdown { + font-size: 0.75em; +} + +button.call-to-action { + text-align: center; + text-transform: uppercase +} + +button.call-to-action:not(:active) { + border-color: #3193fd; + color: #3193fd; +} + +.icon-button { + width: 1.75em; + text-align: center +} + +.icon-button i { + font-size: 1.2em; +} + +.empty-network { + text-align: center; + padding: 10em +} + +.empty-network .pc-logo { + background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3Csvg%0D xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%0D xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%0D xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%0D xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22%0D xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22%0D width%3D%22100%25%22%0D height%3D%22100%25%22%0D viewBox%3D%220 0 876 876%22%0D version%3D%221.1%22%0D xml%3Aspace%3D%22preserve%22%0D style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A1.41421%3B%22%0D id%3D%22svg12%22%0D sodipodi%3Adocname%3D%22pc_logo_dark.svg%22%0D inkscape%3Aversion%3D%220.92.2 5c3e80d%2C 2017-08-06%22%3E%3Cmetadata%0D id%3D%22metadata18%22%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%0D rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%0D rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22 %2F%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cdefs%0D id%3D%22defs16%22 %2F%3E%3Csodipodi%3Anamedview%0D pagecolor%3D%22%23ffffff%22%0D bordercolor%3D%22%23666666%22%0D borderopacity%3D%221%22%0D objecttolerance%3D%2210%22%0D gridtolerance%3D%2210%22%0D guidetolerance%3D%2210%22%0D inkscape%3Apageopacity%3D%220%22%0D inkscape%3Apageshadow%3D%222%22%0D inkscape%3Awindow-width%3D%221927%22%0D inkscape%3Awindow-height%3D%22973%22%0D id%3D%22namedview14%22%0D showgrid%3D%22false%22%0D inkscape%3Azoom%3D%222.1552511%22%0D inkscape%3Acx%3D%22177.6091%22%0D inkscape%3Acy%3D%22419.30717%22%0D inkscape%3Awindow-x%3D%220%22%0D inkscape%3Awindow-y%3D%220%22%0D inkscape%3Awindow-maximized%3D%220%22%0D inkscape%3Acurrent-layer%3D%22svg12%22 %2F%3E%3Cg%0D id%3D%22g10%22%3E%3Cpath%0D d%3D%22M0%2C437.619c0%2C-241.528 196.052%2C-437.619 437.534%2C-437.619c241.481%2C0 437.533%2C196.091 437.533%2C437.619c0%2C241.529 -196.052%2C437.619 -437.533%2C437.619c-241.482%2C0 -437.534%2C-196.09 -437.534%2C-437.619Z%22%0D style%3D%22fill%3A%23ecf0f1%3B%22%0D id%3D%22path2%22 %2F%3E%3Cpath%0D d%3D%22M562.305%2C328.826c-31.661%2C-37.231 -78.064%2C-58.684 -126.931%2C-58.684c-91.969%2C0 -166.636%2C74.681 -166.636%2C166.668c0%2C91.987 74.667%2C166.669 166.636%2C166.669c39.56%2C0 77.83%2C-14.077 107.964%2C-39.713l-64.266%2C-75.571c-12.196%2C10.376 -27.686%2C16.073 -43.698%2C16.073c-37.224%2C0 -67.445%2C-30.227 -67.445%2C-67.458c0%2C-37.231 30.221%2C-67.458 67.445%2C-67.458c19.779%2C0 38.56%2C8.683 51.375%2C23.752l75.556%2C-64.278Z%22%0D style%3D%22fill%3A%2316a085%3B%22%0D id%3D%22path4%22 %2F%3E%3Crect%0D x%3D%22130%22%0D y%3D%22436%22%0D width%3D%22139%22%0D height%3D%22422.932%22%0D style%3D%22fill%3A%232a3e50%3B%22%0D id%3D%22rect6%22 %2F%3E%3Cpath%0D d%3D%22M297.36%2C708.985c42.757%2C21.671 90.017%2C32.964 137.95%2C32.964c168.438%2C0 305.187%2C-136.777 305.187%2C-305.247c0%2C-168.471 -136.749%2C-305.247 -305.187%2C-305.247c-168.55%2C0 -305.187%2C136.664 -305.187%2C305.247l138.896%2C0c0%2C-91.858 74.451%2C-166.324 166.291%2C-166.324c91.779%2C0 166.291%2C74.527 166.291%2C166.324c0%2C91.796 -74.512%2C166.323 -166.291%2C166.323c-26.118%2C0 -51.869%2C-6.153 -75.166%2C-17.961l-62.784%2C123.921Z%22%0D style%3D%22fill%3A%232a3e50%3B%22%0D id%3D%22path8%22 %2F%3E%3C%2Fg%3E%3Cg%0D inkscape%3Agroupmode%3D%22layer%22%0D id%3D%22layer1%22%0D inkscape%3Alabel%3D%22Layer 1%22%0D style%3D%22display%3Ainline%22 %2F%3E%3Crect%0D style%3D%22fill%3A%232a3e50%3Bfill-opacity%3A1%3Bstroke%3A%232a3e50%3Bstroke-opacity%3A1%22%0D id%3D%22rect3712%22%0D width%3D%22104.98738%22%0D height%3D%2281.365219%22%0D x%3D%22131.23422%22%0D y%3D%22421.9296%22 %2F%3E%3Crect%0D style%3D%22fill%3A%232a3e50%3Bfill-opacity%3A1%3Bstroke%3A%232a3e50%3Bstroke-opacity%3A1%22%0D id%3D%22rect3714%22%0D width%3D%2268.241798%22%0D height%3D%22125.98486%22%0D x%3D%22196.85133%22%0D y%3D%22403.55679%22 %2F%3E%3C%2Fsvg%3E"); + background-repeat: no-repeat; + height: 5em; + width: 5em; + padding: 20px 0px 0px 0px; +} + +.empty-network .empty-network-message { + margin-left: 10px; +} + +.empty-network-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: space-between; + -ms-flex-align: space-between; + align-items: space-between; +} + +.error-message-container { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + margin: 1.5em +} + +.error-message-container .pc-logo { + background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3Csvg%0D xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%0D xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%0D xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%0D xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22%0D xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22%0D width%3D%22100%25%22%0D height%3D%22100%25%22%0D viewBox%3D%220 0 876 876%22%0D version%3D%221.1%22%0D xml%3Aspace%3D%22preserve%22%0D style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A1.41421%3B%22%0D id%3D%22svg12%22%0D sodipodi%3Adocname%3D%22pc_logo_dark.svg%22%0D inkscape%3Aversion%3D%220.92.2 5c3e80d%2C 2017-08-06%22%3E%3Cmetadata%0D id%3D%22metadata18%22%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%0D rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%0D rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22 %2F%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cdefs%0D id%3D%22defs16%22 %2F%3E%3Csodipodi%3Anamedview%0D pagecolor%3D%22%23ffffff%22%0D bordercolor%3D%22%23666666%22%0D borderopacity%3D%221%22%0D objecttolerance%3D%2210%22%0D gridtolerance%3D%2210%22%0D guidetolerance%3D%2210%22%0D inkscape%3Apageopacity%3D%220%22%0D inkscape%3Apageshadow%3D%222%22%0D inkscape%3Awindow-width%3D%221927%22%0D inkscape%3Awindow-height%3D%22973%22%0D id%3D%22namedview14%22%0D showgrid%3D%22false%22%0D inkscape%3Azoom%3D%222.1552511%22%0D inkscape%3Acx%3D%22177.6091%22%0D inkscape%3Acy%3D%22419.30717%22%0D inkscape%3Awindow-x%3D%220%22%0D inkscape%3Awindow-y%3D%220%22%0D inkscape%3Awindow-maximized%3D%220%22%0D inkscape%3Acurrent-layer%3D%22svg12%22 %2F%3E%3Cg%0D id%3D%22g10%22%3E%3Cpath%0D d%3D%22M0%2C437.619c0%2C-241.528 196.052%2C-437.619 437.534%2C-437.619c241.481%2C0 437.533%2C196.091 437.533%2C437.619c0%2C241.529 -196.052%2C437.619 -437.533%2C437.619c-241.482%2C0 -437.534%2C-196.09 -437.534%2C-437.619Z%22%0D style%3D%22fill%3A%23ecf0f1%3B%22%0D id%3D%22path2%22 %2F%3E%3Cpath%0D d%3D%22M562.305%2C328.826c-31.661%2C-37.231 -78.064%2C-58.684 -126.931%2C-58.684c-91.969%2C0 -166.636%2C74.681 -166.636%2C166.668c0%2C91.987 74.667%2C166.669 166.636%2C166.669c39.56%2C0 77.83%2C-14.077 107.964%2C-39.713l-64.266%2C-75.571c-12.196%2C10.376 -27.686%2C16.073 -43.698%2C16.073c-37.224%2C0 -67.445%2C-30.227 -67.445%2C-67.458c0%2C-37.231 30.221%2C-67.458 67.445%2C-67.458c19.779%2C0 38.56%2C8.683 51.375%2C23.752l75.556%2C-64.278Z%22%0D style%3D%22fill%3A%2316a085%3B%22%0D id%3D%22path4%22 %2F%3E%3Crect%0D x%3D%22130%22%0D y%3D%22436%22%0D width%3D%22139%22%0D height%3D%22422.932%22%0D style%3D%22fill%3A%232a3e50%3B%22%0D id%3D%22rect6%22 %2F%3E%3Cpath%0D d%3D%22M297.36%2C708.985c42.757%2C21.671 90.017%2C32.964 137.95%2C32.964c168.438%2C0 305.187%2C-136.777 305.187%2C-305.247c0%2C-168.471 -136.749%2C-305.247 -305.187%2C-305.247c-168.55%2C0 -305.187%2C136.664 -305.187%2C305.247l138.896%2C0c0%2C-91.858 74.451%2C-166.324 166.291%2C-166.324c91.779%2C0 166.291%2C74.527 166.291%2C166.324c0%2C91.796 -74.512%2C166.323 -166.291%2C166.323c-26.118%2C0 -51.869%2C-6.153 -75.166%2C-17.961l-62.784%2C123.921Z%22%0D style%3D%22fill%3A%232a3e50%3B%22%0D id%3D%22path8%22 %2F%3E%3C%2Fg%3E%3Cg%0D inkscape%3Agroupmode%3D%22layer%22%0D id%3D%22layer1%22%0D inkscape%3Alabel%3D%22Layer 1%22%0D style%3D%22display%3Ainline%22 %2F%3E%3Crect%0D style%3D%22fill%3A%232a3e50%3Bfill-opacity%3A1%3Bstroke%3A%232a3e50%3Bstroke-opacity%3A1%22%0D id%3D%22rect3712%22%0D width%3D%22104.98738%22%0D height%3D%2281.365219%22%0D x%3D%22131.23422%22%0D y%3D%22421.9296%22 %2F%3E%3Crect%0D style%3D%22fill%3A%232a3e50%3Bfill-opacity%3A1%3Bstroke%3A%232a3e50%3Bstroke-opacity%3A1%22%0D id%3D%22rect3714%22%0D width%3D%2268.241798%22%0D height%3D%22125.98486%22%0D x%3D%22196.85133%22%0D y%3D%22403.55679%22 %2F%3E%3C%2Fsvg%3E"); + background-repeat: no-repeat; + height: 3em; + width: 3em; + padding: 0; +} + +.error-branding { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 100%; + padding-right: 0.5em; + margin-bottom: 1em; +} + +.error-branding-descriptor { + margin-left: 0.5em; +} + +.error-title { + margin: 0; + line-height: 1em; + color: #212f3d; + font-size: 2em; +} + +.error-subtitle { + margin: 0; + line-height: 1em; + color: #212f3d; + font-size: 0.75em; +} + +.error-message { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} + +.error-message-body, .error-message-footer { + color: #b5b9bb; + margin: 0; + font-size: 0.9em; +} + +.pc-logo { + height: 50px; + width: 50px; + background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3Csvg%0D xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%0D xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%0D xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%0D xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0D xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22%0D xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22%0D width%3D%22100%25%22%0D height%3D%22100%25%22%0D viewBox%3D%220 0 876 876%22%0D version%3D%221.1%22%0D xml%3Aspace%3D%22preserve%22%0D style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A1.41421%3B%22%0D id%3D%22svg12%22%0D sodipodi%3Adocname%3D%22pc_logo_dark.svg%22%0D inkscape%3Aversion%3D%220.92.2 5c3e80d%2C 2017-08-06%22%3E%3Cmetadata%0D id%3D%22metadata18%22%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%0D rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%0D rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22 %2F%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cdefs%0D id%3D%22defs16%22 %2F%3E%3Csodipodi%3Anamedview%0D pagecolor%3D%22%23ffffff%22%0D bordercolor%3D%22%23666666%22%0D borderopacity%3D%221%22%0D objecttolerance%3D%2210%22%0D gridtolerance%3D%2210%22%0D guidetolerance%3D%2210%22%0D inkscape%3Apageopacity%3D%220%22%0D inkscape%3Apageshadow%3D%222%22%0D inkscape%3Awindow-width%3D%221927%22%0D inkscape%3Awindow-height%3D%22973%22%0D id%3D%22namedview14%22%0D showgrid%3D%22false%22%0D inkscape%3Azoom%3D%222.1552511%22%0D inkscape%3Acx%3D%22177.6091%22%0D inkscape%3Acy%3D%22419.30717%22%0D inkscape%3Awindow-x%3D%220%22%0D inkscape%3Awindow-y%3D%220%22%0D inkscape%3Awindow-maximized%3D%220%22%0D inkscape%3Acurrent-layer%3D%22svg12%22 %2F%3E%3Cg%0D id%3D%22g10%22%3E%3Cpath%0D d%3D%22M0%2C437.619c0%2C-241.528 196.052%2C-437.619 437.534%2C-437.619c241.481%2C0 437.533%2C196.091 437.533%2C437.619c0%2C241.529 -196.052%2C437.619 -437.533%2C437.619c-241.482%2C0 -437.534%2C-196.09 -437.534%2C-437.619Z%22%0D style%3D%22fill%3A%23ecf0f1%3B%22%0D id%3D%22path2%22 %2F%3E%3Cpath%0D d%3D%22M562.305%2C328.826c-31.661%2C-37.231 -78.064%2C-58.684 -126.931%2C-58.684c-91.969%2C0 -166.636%2C74.681 -166.636%2C166.668c0%2C91.987 74.667%2C166.669 166.636%2C166.669c39.56%2C0 77.83%2C-14.077 107.964%2C-39.713l-64.266%2C-75.571c-12.196%2C10.376 -27.686%2C16.073 -43.698%2C16.073c-37.224%2C0 -67.445%2C-30.227 -67.445%2C-67.458c0%2C-37.231 30.221%2C-67.458 67.445%2C-67.458c19.779%2C0 38.56%2C8.683 51.375%2C23.752l75.556%2C-64.278Z%22%0D style%3D%22fill%3A%2316a085%3B%22%0D id%3D%22path4%22 %2F%3E%3Crect%0D x%3D%22130%22%0D y%3D%22436%22%0D width%3D%22139%22%0D height%3D%22422.932%22%0D style%3D%22fill%3A%232a3e50%3B%22%0D id%3D%22rect6%22 %2F%3E%3Cpath%0D d%3D%22M297.36%2C708.985c42.757%2C21.671 90.017%2C32.964 137.95%2C32.964c168.438%2C0 305.187%2C-136.777 305.187%2C-305.247c0%2C-168.471 -136.749%2C-305.247 -305.187%2C-305.247c-168.55%2C0 -305.187%2C136.664 -305.187%2C305.247l138.896%2C0c0%2C-91.858 74.451%2C-166.324 166.291%2C-166.324c91.779%2C0 166.291%2C74.527 166.291%2C166.324c0%2C91.796 -74.512%2C166.323 -166.291%2C166.323c-26.118%2C0 -51.869%2C-6.153 -75.166%2C-17.961l-62.784%2C123.921Z%22%0D style%3D%22fill%3A%232a3e50%3B%22%0D id%3D%22path8%22 %2F%3E%3C%2Fg%3E%3Cg%0D inkscape%3Agroupmode%3D%22layer%22%0D id%3D%22layer1%22%0D inkscape%3Alabel%3D%22Layer 1%22%0D style%3D%22display%3Ainline%22 %2F%3E%3Crect%0D style%3D%22fill%3A%232a3e50%3Bfill-opacity%3A1%3Bstroke%3A%232a3e50%3Bstroke-opacity%3A1%22%0D id%3D%22rect3712%22%0D width%3D%22104.98738%22%0D height%3D%2281.365219%22%0D x%3D%22131.23422%22%0D y%3D%22421.9296%22 %2F%3E%3Crect%0D style%3D%22fill%3A%232a3e50%3Bfill-opacity%3A1%3Bstroke%3A%232a3e50%3Bstroke-opacity%3A1%22%0D id%3D%22rect3714%22%0D width%3D%2268.241798%22%0D height%3D%22125.98486%22%0D x%3D%22196.85133%22%0D y%3D%22403.55679%22 %2F%3E%3C%2Fsvg%3E"); +} + +.pc-logo-light { + height: 30px; + width: 30px; + background-image: url("data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22 standalone%3D%22no%22%3F%3E%0D%3C!DOCTYPE svg PUBLIC %22-%2F%2FW3C%2F%2FDTD SVG 1.1%2F%2FEN%22 %22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%0D%3Csvg width%3D%22100%25%22 height%3D%22100%25%22 viewBox%3D%220 0 736 876%22 version%3D%221.1%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22 xml%3Aspace%3D%22preserve%22 xmlns%3Aserif%3D%22http%3A%2F%2Fwww.serif.com%2F%22 style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A1.41421%3B%22%3E%0D %3Cg transform%3D%22matrix(1%2C0%2C0%2C1%2C-74.9667%2C0)%22%3E%0D %3Cg id%3D%22path4%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Cpath d%3D%22M562.305%2C328.826C530.644%2C291.595 484.241%2C270.142 435.374%2C270.142C343.405%2C270.142 268.738%2C344.823 268.738%2C436.81C268.738%2C528.797 343.405%2C603.479 435.374%2C603.479C474.934%2C603.479 513.204%2C589.402 543.338%2C563.766L479.072%2C488.195C466.876%2C498.571 451.386%2C504.268 435.374%2C504.268C398.15%2C504.268 367.929%2C474.041 367.929%2C436.81C367.929%2C399.579 398.15%2C369.352 435.374%2C369.352C455.153%2C369.352 473.934%2C378.035 486.749%2C393.104L562.305%2C328.826Z%22 style%3D%22fill%3Argb(22%2C160%2C133)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22rect6%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Crect x%3D%22130%22 y%3D%22436%22 width%3D%22139%22 height%3D%22422.932%22 style%3D%22fill%3Argb(42%2C62%2C80)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22path8%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Cpath d%3D%22M297.36%2C708.985C340.117%2C730.656 387.377%2C741.949 435.31%2C741.949C603.748%2C741.949 740.497%2C605.172 740.497%2C436.702C740.497%2C268.231 603.748%2C131.455 435.31%2C131.455C266.76%2C131.455 130.123%2C268.119 130.123%2C436.702L269.019%2C436.702C269.019%2C344.844 343.47%2C270.378 435.31%2C270.378C527.089%2C270.378 601.601%2C344.905 601.601%2C436.702C601.601%2C528.498 527.089%2C603.025 435.31%2C603.025C409.192%2C603.025 383.441%2C596.872 360.144%2C585.064L297.36%2C708.985Z%22 style%3D%22fill%3Argb(42%2C62%2C80)%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22rect3712%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Crect x%3D%22131.234%22 y%3D%22421.93%22 width%3D%22104.987%22 height%3D%2281.365%22 style%3D%22fill%3Argb(42%2C62%2C80)%3Bstroke%3Argb(42%2C62%2C80)%3Bstroke-width%3A1px%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3Cg id%3D%22rect3714%22 transform%3D%22matrix(1.20416%2C0%2C0%2C1.20416%2C-81.5743%2C-158.293)%22%3E%0D %3Crect x%3D%22196.851%22 y%3D%22403.557%22 width%3D%2268.242%22 height%3D%22125.985%22 style%3D%22fill%3Argb(42%2C62%2C80)%3Bstroke%3Argb(42%2C62%2C80)%3Bstroke-width%3A1px%3B%22%2F%3E%0D %3C%2Fg%3E%0D %3C%2Fg%3E%0D%3C%2Fsvg%3E%0D"); +} + +.sidebar-menu { + height: 100%; + width: 33%; + position: fixed; + top: 0; + right: 0; + z-index: 25; + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); + opacity: 0; + -webkit-transform: translate3d(110%, 0, 0); + transform: translate3d(110%, 0, 0); + pointer-events: none; + -webkit-transition-duration: 250ms; + -o-transition-duration: 250ms; + transition-duration: 250ms; + -webkit-transition-property: opacity, -webkit-transform; + transition-property: opacity, -webkit-transform; + -o-transition-property: transform, opacity; + transition-property: transform, opacity; + transition-property: transform, opacity, -webkit-transform; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-left: 1px solid rgb(211, 216, 218); + background-color: #ecf0f1 +} + +.sidebar-menu.sidebar-menu-open { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + pointer-events: auto; +} + +.sidebar-close { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); + height: 36px; + width: 36px; + left: -36px; + position: absolute; + top: -1px; + z-index: 10; + background-color: rgba(255, 255, 255, .5); + background-color: #ecf0f1; + border-radius: 0 0 0 3px; + border: 1px solid rgb(211, 216, 218); + border-right: 0; +} + +.sidebar-content { + height: 100%; + width: 100%; + position: relative; + z-index: 50; +} + +.sidebar-text { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 100%; + width: 100%; + padding: 1em; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-sizing: border-box; + box-sizing: border-box; + position: relative; + z-index: 300; + background-color: #ecf0f1; + overflow-y: scroll +} + +.sidebar-text h2 { + margin-top: 0; +} + +.sidebar-text p { + font-size: 0.9em; +} + +/* Mobile scaling */ + +@media (max-width: 600px) { + .sidebar-text h2 { + font-size: 1em; + } +} + +.cy-tooltip { + max-width: 500px; + min-width: 10em; + max-height: 95vh; + position: relative; + top: 0; + right: 0; + border-radius: 0; + color: black; + text-align: left; + overflow-y: scroll; + word-wrap: break-word; +} + +@media (max-width: 600px){ + .cy-tooltip { + max-height: calc(100vh - 14em); + max-width: 300px; + } +} + +.cy-tooltip-content { + position: relative; + left: 0; + text-align: left; +} + +.cy-tooltip-header { + color: #212f3d; + margin: 0.25em 0.5em; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.cy-tooltip-title { + margin: 0; + line-height: 1.5em; + display: inline-block; +} + +.cy-tooltip-type-chip { + display: inline-block; + padding: 2px 6px; + background-color: #d3d8da; + font-size: 0.9em; + color: black; + border-radius: 10px; + margin-left: 0.5em; +} + +.cy-tooltip-body { + border-top: 1px solid #d3d8da; + margin: 0.25em; +} + +.cy-tooltip-warning { + margin: 0.25em; + font-weight: bold; +} + +.cy-tooltip-section { + font-size: 0.9em; + margin: 0.25em; +} + +.cy-tooltip-field-name { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + font-weight: bold +} + +.cy-tooltip-field-name i { + height: 10px; + width: 10px; +} + +.cy-tooltip-field-value { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + margin: 2px; +} + +.cy-tooltip-footer { + margin: 0.25em; + border-top: 1px solid #d3d8da; +} + +.cy-tooltip-links { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -ms-flex-wrap: wrap; + flex-wrap: wrap +} + +.cy-tooltip-links a { + display: inline-block; + margin-right: 10px; +} + +.cy-tooltip-links a.cy-tooltip-number-link { + padding: 0 0.5em; +} + +.cy-tooltip-call-to-action { + text-align: center; + margin: 0.5em 0.25em 0.25em; +} + +.cy-overflow-content { + word-wrap: break-word; + overflow: hidden; + margin: 0.25em 0; + width: 100% +} + +.cy-overflow-content + .cy-overflow-content { + margin-top: 0.5em; +} + +.expand-collapse-cue { + cursor: pointer; + margin: 0.25em; + font-size: 1.5em; +} + +.expand-collapse-cue:hover { + color: #16a085; +} + +a.cy-tooltip-edge-link { + cursor: pointer; +} + +.cy-tooltip-edge-entry { + margin: 0.5em 0; + display: relative; +} + +.cy-tooltip-edge-color { + display: inline-block; + margin-bottom: -0.0625em; + margin-right: 0.25em; + height: 0.85em; + width: 1em; + background-color: #888; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #ccc; +} + +.cy-tooltip-back { + margin-right: 0.25em; + cursor: pointer; + font-weight: bold; + font-size: 1.25em; +} + +.cy-tooltip-loading-section { + font-size: 1.5em; + text-align: center; + margin: 0.25em; +} + +.network { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; +} + +.network-loading { + visibility: hidden; +} + +.network-sidebar-open { + width: calc(100vw - 33%); +} + +.network-cy { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; +} + +.app-bar { + max-width: 95vw; /* 80% browser window size */ + position: fixed; /* relative to viewport */ + z-index: 10; + left: 0; + margin: 0.5em; + border-radius: 0.25em; + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); +} + +@media(max-width: 600px){ + .app-bar { + font-size: 0.8em; + } +} + +.app-bar-branding { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + max-width: 95vw; + padding: 0.25em 0.5em; + background-color: #ecf0f1; + border: 1px solid #d3d8da; + border-radius: 0.25em 0.25em 0 0; +} + +/* .app-bar-title { + color: var(--dark-base-colour); + font-weight: bold; + font-size: 0.9em; + max-width: 95vw; +} */ + +.app-toolbar { + display: -webkit-box; + display: -ms-flexbox; + display: flex; /* use inline-flex if you want the bar to take up only the width of its children */ + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + padding: 0.33em 0; + z-index: 10; + position: relative; + top: 0; + width: auto; + border: 1px solid #d3d8da; + border-radius: 0 0 0.25em 0.25em; + border-top: 0; + background-color: rgba(255, 255, 255, .9) +} + +.app-toolbar .icon-button { + margin: 0 0.25em; +} + +.app-toolbar {/* make the search bar take up the remainder of the unused space + disable for now b/c chrome 68 is buggy *//* & .element-search { + flex-grow: 1; + } */ +} + +.app-toolbar .element-search { + white-space: nowrap; +} + +.app-toolbar .element-search-input { + width: 100%; +} + +.app-bar .contribute { + position: absolute; + margin: 0.5em 0; + left: 0.25em; +} + +.info-menu { + width: 35em; + max-width: 95vw; + padding: 0.25em; + position: relative +} + +.info-menu p:first-child { + margin-top: 0; +} + +.info-menu p:last-child { + margin-bottom: 0; +} + +.file-download-menu { + width: 66vw; + max-width: 600px; +} + +@media(max-width: 600px){ + .file-download-menu { + font-size: 0.8em; + width: 300px; + } + + .info-menu { + font-size: 0.8em; + width: 300px; + } +} + +.interactions-download-menu { + max-width: 315px; +} + +.enrichment-download-menu { + max-width: 315px; +} + +.file-download-menu h2 { + font-size: 1em; + padding: 0.25em; + margin: 0; + text-align: center; +} + +.file-download-content { + overflow: scroll; + max-height: 80vh; +} + +.file-download-error { + padding: 0.5em 1em; + color: #c20e0e; +} + +.toggle-extra-downloads-container { + + width: 100%; + margin: 0.5em 0; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.file-download-extras { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + max-height: 100%; + -webkit-transform-origin: top center; + -ms-transform-origin: top center; + transform-origin: top center; + -webkit-transform: scaleY(100%); + -ms-transform: scaleY(100%); + transform: scaleY(100%); + overflow: hidden; + -webkit-transition: max-height 0s linear 0s, -webkit-transform 0.25s ease-out; + transition: max-height 0s linear 0s, -webkit-transform 0.25s ease-out; + -o-transition: max-height 0s linear 0s, transform 0.25s ease-out; + transition: max-height 0s linear 0s, transform 0.25s ease-out; + transition: max-height 0s linear 0s, transform 0.25s ease-out, -webkit-transform 0.25s ease-out +} + +.file-download-extras.file-download-extras-hide { + max-height: 0; + -webkit-transform: scaleY(0); + -ms-transform: scaleY(0); + transform: scaleY(0); + -webkit-transition: max-height 0s linear 0.25s, -webkit-transform 0.25s ease-out; + transition: max-height 0s linear 0.25s, -webkit-transform 0.25s ease-out; + -o-transition: transform 0.25s ease-out, max-height 0s linear 0.25s; + transition: transform 0.25s ease-out, max-height 0s linear 0.25s; + transition: transform 0.25s ease-out, max-height 0s linear 0.25s, -webkit-transform 0.25s ease-out; +} + +.download-option { + width: 100%; + padding: 0.25em; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -ms-flex-line-pack: center; + align-content: center; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border-style: solid; + border-color: #d3d8da; + border-width: 1px 1px 0px; + cursor: pointer; + -webkit-transition: all 0.1s linear; + -o-transition: all 0.1s linear; + transition: all 0.1s linear +} + +.download-option:hover { + background-color: #d3d8da; +} + +.download-option:last-of-type { + border-width: 1px; +} + +.download-option-header { + margin-bottom: 0.25em; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center +} + +.download-option-header h3 { + margin: 0; + margin-right: 1em; + cursor: pointer; +} + +.download-option-description { + + width: 100%; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + cursor: pointer; + font-size: 0.8em; +} + +/* css for non-cytoscape tooltips */ + +.tooltip-description { + display: inline-block; + padding: 0.25em 0.33em; +} + +.card { + height: 70px; + width: 220px; + border: 1px solid #d3d8da; + overflow: hidden; + margin-right: 1em; + margin-bottom: 0.5em; + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); +} + +/* + AppCard +*/ + +.app-card { + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); + border: 1px solid #d3d8da; + margin: 0.5em 0.25em 0.5em 0; + position: relative; + overflow: hidden; + padding-bottom: 1.75em; + padding-bottom: 1.75em; + cursor: default +} + +.app-card.app-card-disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.app-card.app-card-disabled a { + pointer-events: none; +} + +.app-card.app-card-disabled .app-card-hint { + display: block; +} + +.app-card-content { + width: 100%; + padding: 0.5em 0.25em; + background: rgba(255, 255, 255, .85); + position: absolute; + -webkit-transform: translateY(-0.25em); + -ms-transform: translateY(-0.25em); + transform: translateY(-0.25em); + -webkit-transition: -webkit-transform 250ms ease-out; + transition: -webkit-transform 250ms ease-out; + -o-transition: transform 250ms ease-out; + transition: transform 250ms ease-out; + transition: transform 250ms ease-out, -webkit-transform 250ms ease-out; +} + +.app-card:hover .app-card-content { + -webkit-transform: translateY(calc(-100% + 2em)); + -ms-transform: translateY(calc(-100% + 2em)); + transform: translateY(calc(-100% + 2em)); +} + +.app-card-header { + margin-bottom: 0.5em; +} + +.app-card-title { + margin: 0; + padding-bottom: 0.5em; +} + +.app-card-hint { + text-decoration: underline; + margin-bottom: 1em; + display: none; +} + +.app-card-image { + text-align: center; + height: 150px +} + +.app-card-image > img { + height: 100%; + padding-bottom: 1.75em; +} + +.app-card-image.background { + background-repeat: no-repeat; + background-size: contain; + background-position: center center; +} + +.app-card-body { + margin: 0.5em; + max-height: 112.5px; + overflow-y: scroll; +} + +.app-card .hidden { + display: none; +} + +.contribute i { + margin: 0em 0.25em; + color: #888; +} + +.contribute i:hover { + cursor: pointer; +} + +.contribute-popover-info { + max-width: 30em; + padding: 0.5em; +} + +@media(max-width: 600px){ + .contribute-popover-info { + font-size: 0.8em; + } +} + +.search { + height: 100vh; + width: 100vw; +} + +.search .hidden { + display: none; +} + +.search-nav-links { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + padding: 0em 0.5em; +} + +.search-nav-links a { + padding: 1em 1em; + /* background: cyan; */ +} + +.search-nav-links .contribute { + padding: 1em +} + +.search-nav-links .contribute a { + text-decoration: none; + padding: 0; +} + +.search-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + background-color: #ecf0f1; + padding: 1em; + border-bottom: 1px solid #d3d8da; +} + +.search-branding { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + height: 100%; + padding-right: 0.5em; +} + +.search-branding-descriptor { + margin-left: 0.5em; +} + +.search-title { + margin: 0; + line-height: 1em; + color: #212f3d; + font-size: 2em; +} + +.search-subtitle { + margin: 0; + line-height: 1em; + color: #212f3d; + font-size: 0.75em; +} + +.search-logo { + display: inline-block; + height: 55px; + width: 55px; +} + +.search-searchbar-container { + max-width: 100%; + width: 740px; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; +} + +.search-searchbar { + height: 50px; + border: 1px solid; + border-color: white; + padding-left: 0.25em; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + background-color: white; + -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, .1), 0 3px 6px rgba(0, 0, 0, .2); + box-shadow: 0 2px 3px rgba(0, 0, 0, .1), 0 3px 6px rgba(0, 0, 0, .2); + -webkit-transition: -webkit-box-shadow 0.15s ease-in-out; + transition: -webkit-box-shadow 0.15s ease-in-out; + -o-transition: box-shadow 0.15s ease-in-out; + transition: box-shadow 0.15s ease-in-out; + transition: box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; +} + +.search-searchbar:hover { + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, .1), 0 6px 6px rgba(0, 0, 0, .2); + box-shadow: 0 2px 4px rgba(0, 0, 0, .1), 0 6px 6px rgba(0, 0, 0, .2); +} + +.search-searchbar > input { + background: none; + border: none; + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + height: 100%; +} + +.search-search-button { + font-size: 1.5em; + border-radius: 5px; + background-color: white; + line-height: 2em; + margin: 0 5px; + cursor: pointer; +} + +.search-searchbar > button > i { + color: #333; +} + +.search-suggestions { + padding: 0.5em 0 0 0.25em; + font-size: 0.75em; + color: #212f3d; +} + +.search-example { + cursor: pointer +} + +.search-example:hover { + color: #16a085; +} + +.search-body { + min-height: 4em; + padding-left: 200px; + max-width: 740px; + position: relative; +} + +.search-results-header p { + margin: 0.5em 0 0.25em; +} + +.search-results-header .search-results-header-title { + font-size: larger; +} + +.search-results-header .search-results-header-subtitle { + font-size: smaller; + color: #212f3d; +} + +.search-tools { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin: 1em 0; +} + +@media (max-width: 700px) { + .search-tools { + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + } + + .search-results-header { + display: none; + } +} + +.search-pathways-header { + margin: 0; +} + +.search-result-hit-count { + margin-top: 10px; +} + +.search-genes-info-panel { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row wrap; + flex-flow: row wrap; +} + +.search-genes-scroll-container { + position: relative; + width: 100%; + padding: 0 2em; /* Reduced padding for arrows */ + margin: 1em 0; +} + +.search-genes-list { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + overflow-x: auto; + scroll-behavior: smooth; + scrollbar-width: none; /* Firefox */ + -ms-overflow-style: none; /* IE and Edge */ + gap: 1em; /* Space between cards */ + padding: 0.5em 0; /* Vertical padding only */ + -ms-scroll-snap-type: x mandatory; + scroll-snap-type: x mandatory; +} + +.search-genes-list::-webkit-scrollbar { + display: none; /* Chrome, Safari, Opera */ +} + +.scroll-caret-button { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); + background: rgba(255, 255, 255, .9); + border: 1px solid #d3d8da; + border-radius: 50%; + width: 2em; + height: 2em; + display: none; /* Hidden by default */ + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + cursor: pointer; + z-index: 1; + -webkit-transition: all 0.2s ease; + -o-transition: all 0.2s ease; + transition: all 0.2s ease; +} + +.scroll-caret-button:hover { + background: #ecf0f1; +} + +.scroll-caret-button.left { + left: 0.5em; /* Adjusted position */ +} + +.scroll-caret-button.right { + right: 0.5em; /* Adjusted position */ +} + +.scroll-caret-button.inactive { + opacity: 0.5; + cursor: default; +} + +.search-genes-scroll-container.has-scroll .scroll-caret-button { + display: -webkit-box; + display: -ms-flexbox; + display: flex; /* Only show when needed */ +} + +/* Ensure cards have consistent width and spacing */ + +.search-genes-list .card { + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: calc(33.33% - 0.67em); /* One-third width minus gap */ + min-width: 15em; /* Minimum width for readability */ + margin: 0; /* Remove margin as we're using gap */ + scroll-snap-align: start; +} + +.search-genes-header { + margin-bottom: 1em; +} + +/* Ensure the container takes full width */ + +.search-genes-results { + width: 100%; + max-width: 100%; + overflow: hidden; +} + +.card { + min-width: 20em; /* Previously was in px */ + margin: 0.5em; + -ms-flex-negative: 0; + flex-shrink: 0; +} + +/* Update other pixel values to em/rem */ + +.search-genes-header { + margin-bottom: 1em; + font-size: 1.25rem; +} + +.search-app-cards { + margin-top: 2em; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(20em, 1fr)); + gap: 1em; +} + +.interactions-logo { + background-image: url("data:image/png;base64,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"); +} + +.enrichment-logo { + background-image: url("data:image/png;base64,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"); +} + +.search-filters { + font-size: 12px; +} + +.search-datasource-filter { + font-size: 12px; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + width: 25em; +} + +.search-datasource-filter > option { + overflow: hidden; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} + +.search-item { + padding: 1em 0; +} + +.search-item.preview { + /* background-color: var(--cloud); */ + border: 1px solid #b5b9bb; +} + +.search-item-info { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + vertical-align: middle; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.search-item-icon { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + width: 80px; + height: auto; +} + +.search-item-icon > img { + max-width: 80px; + max-height: 40px; +} + +.search-item-content { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding-right: 0.5em; +} + +.search-item-content-datasource { + margin: 0; + margin-top: 2px; + font-size: 14px; +} + +.search-item-content-participants { + margin: 0; + margin-top: 2px; + color: #7f8c8d; + font-size: 0.66em; +} + +.search-item-preview { + display: block; + margin-left: auto; + margin-right: auto; + width: 70%; +} + +.loader { + color: #16a085; +} + +.search-error { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + padding: 10px; + padding-left: 215px; + width: 60%; +} + +/* Feature */ + +.feature-area.header { + grid-area: header; +} + +.feature-area.article { + grid-area: article; +} + +.feature-area.article .headline { + font-size: 1.3em; + color: #0066CC; +} + +.feature-area.article i.icon.logo-pubmed { + margin: auto 1em; + width: 6em; + height: 2em; +} + +.feature-area .feature-detail-links { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row; + flex-flow: row; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin: 1em 0; +} + +.feature-area .feature-detail-links .feature-detail-link { + margin-right: 1em; +} + +.feature-area.pathway { + grid-area: pathway; +} + +.feature-area.pathway .app-card .app-card-image { + height: 210px; +} + +.feature-area.pathway .app-card .app-card-title { + font-size: 0.9em; + color: rgb(102, 102, 102); + font-weight: normal; +} + +.feature-area.pathway .app-card .app-card-title i.icon { + width: 10em; + height: 1.25em; +} + +.feature-area.pathway .app-card .app-card-body p { + font-size: 0.9em; + margin: 0 auto; +} + +.feature-area.pathway .app-card .app-card-body i.icon { + margin-left: 0.2em; +} + +.feature-area.footer { + grid-area: footer; +} + +.feature-container { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-areas: + 'header header' + 'pathway article' + 'footer footer' + ; + -webkit-column-gap: 2%; + -moz-column-gap: 2%; + column-gap: 2%; + margin: 1em auto; + line-height: normal +} + +.feature-container hr { + width: 740px; + display: block; + overflow: hidden; + border: solid 0.5px #D3D3D3; + margin: 1em auto; +} + +.feature-item { + margin: auto auto 1em; +} + +.feature-detail { + font-size: 0.85em; + color: rgb(102, 102, 102); +} + +.feature-item-row { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-flow: row nowrap; + flex-flow: row nowrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +@media (max-width: 600px) { + .search-nav-links { + display: none; + } + + .search-header { + display: block; + } + + .search-genes-info-panel { + display: block; + } + + .search-item-icon { + display: none; + } + + .search-body { + padding-left: 10px; + } + + .search-error { + padding-left: 50px; + } + + .search-tabs { + overflow-x: scroll; + } + + .search-app-cards { + grid-template-columns: 1fr; + } + + .search-results-header { + display: none; + } + + .feature-container { + display: none; + } +} + +.element-search { + margin: 0 0.25em; +} + +input.element-search-input { + margin-right: 0.25em; + width: 12em; + background-color: #fff; +} + +.element-search-input[value=""] + .element-search-clear { + opacity: 0; + pointer-events: none; +} + +.paint { + overflow: hidden; +} + +.paint-legend { + padding: 0px 5px 0px 5px; + height: 40px; + color: white; + background: -webkit-gradient(linear, left top, right top, from(#0A872C), color-stop(33%, white), color-stop(66%, white), to(#880E7C)); + background: -o-linear-gradient(left, #0A872C, white 33%, white 66%, #880E7C); + background: linear-gradient(to right, #0A872C, white 33%, white 66%, #880E7C); + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; +} + +.paint-legend > p { + margin: 0; + padding-top: 10px; + text-shadow: + -1px -1px 0 #000, + 1px -1px 0 #000, + -1px 1px 0 #000, + 1px 1px 0 #000; +} + +.paint-menu { + width: 100%; +} + +.paint-menu-controls { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-pack: distribute; + justify-content: space-around; + padding: 15px; +} + +.paint-select { + width: 75px; +} + +.paint-search-result { + cursor: pointer; + padding: 5px +} + +.paint-search-result p { + margin: 0; +} + +.paint-search-result h3 { + margin-bottom: 2px; +} + +.paint-search-result-selected { + color: #16a085; +} + +.paint-drawer-tab { + display: inline-block; + border: 1px solid transparent; + border-bottom: none; + bottom: -1px; + position: relative; + list-style: none; + padding: 6px 0; + cursor: pointer; + margin-bottom: 0; + margin-right: 10px; +} + +.paint-drawer-tab-selected { + font-weight: bold; + color: #16a085; + border-bottom: 3px solid #16a085; +} + +.expression-table-header { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: distribute; + justify-content: space-around; +} + +.expression-entry { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-pack: distribute; + justify-content: space-around; +} + +.expression-table-view { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + background-color: white; + border: 1px solid #d3d8da; + border-radius: 0.25em; + +} + +.expression-table-header { + margin: 10px; +} + +.expression-table-header-column { + width: 50%; + cursor: pointer; +} + +.expression-filter input { + width: 100%; +} + +.expression-list { + max-height: 74vh; + overflow: scroll; +} + +.expression-entry { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + border-top: 1px solid #d3d8da; + + padding: 10px; +} + +.expression-gene { + width: 50%; + padding-left: 10px; +} + +.pathways { + width: 100vw; + height: 100vh; + position: relative; + overflow: hidden; +} + +.pathway-title { + max-width: 95vw; + margin: 0.25em; +} + +.pathway-title .pathway-title-name { + font-size: 1.2em; + font-weight: bold; + padding: 0.15em +} + +.pathway-title .pathway-title-name .highlight-link { + color: rgb(26, 117, 215); +} + +.pathway-title .pathway-title-source { + font-size: 1em; + padding: 0.15em; + +} + +.interactions { + overflow: hidden; + width: 100%; + height: 100%; + position: absolute; +} + +.interactions-bar { + position: absolute; + top: 0; + left: 0; + margin: 0.5em; + border-radius: 0.25em; + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); +} + +.interactions-legend { + font-size: 0.9em; + position: absolute; + bottom: 0; + left: 0; + margin: 0.5em; + border-radius: 0.25em; + padding: 0.25em; + z-index: 10; + opacity: 0.9; + background-color: white; + border: 1px solid #d3d8da; + -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2); + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, .14), 0 3px 1px -2px rgba(0, 0, 0, .12), 0 1px 5px 0 rgba(0, 0, 0, .2) +} + +.interactions-legend h3 { + margin-top: 0; +} + +@media(max-width: 600px){ + .interactions-legend { + font-size: 0.8em; + } +} + +input[type="range"].interactions-sidebar-vis-filter { + width: 100%; +} + +.interactions-filter-check { + display: inline-block; +} + +.interactions-filter-button { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + padding: 0.5em 0.25em; + margin: 0.25em; + border-radius: 0.25em; + cursor: pointer; + -webkit-transition-property: border-color; + -o-transition-property: border-color; + transition-property: border-color; + -webkit-transition-duration: 500ms; + -o-transition-duration: 500ms; + transition-duration: 500ms; + -webkit-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out; + border: 1px solid #d3d8da +} + +.interactions-filter-button:active { + border-color: #000; +} + +.interactions-color { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + width: 1.25em; + background-color: #888; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: 1px solid #ccc; +} + +.interactions-color-modification { + background-color: #ffc28b; +} + +.interactions-color-binding { + background-color: #8bd8dd; +} + +.interactions-color-expression { + background-color: #f4a2a3; +} + +.interactions-filter-label { + -webkit-box-flex: 1; + -ms-flex-positive: 1; + flex-grow: 1; + margin: 0 0.5em; +} + +.entity-summary-box { + pointer-events: all; + padding: 0.25em 0.5em; +} + +.entity-subtitle { + color: #b5b9bb; + margin: 0; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + font-size: 0.66em; +} + +.entity-title { + margin: 0 0 0.5em; +} + +.entity-names { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + margin: 0.5em 0; +} + +.entity-links-container { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start +} + +.entity-links-container a { + margin-right: 0.5em; + font-size: 0.66em; +} + +.enrichment { + overflow: hidden; +} + +.enrichment-sources-popover { + width: 100px; + max-height: 66vh; + overflow-y: scroll; + text-align: left; + padding: 0.5em 0.25em; +} + +.enrichment-popover-link { + cursor: pointer; +} + +@media(max-width: 600px){ + .enrichment-sources-popover { + font-size: 0.8em; + } +} + +.biofactoid { + height: 100vh; + width: 100vw +} + +.biofactoid a { + display: block; +} diff --git a/public/bundle.js b/public/bundle.js index 804dc37b..0fcecc6b 120000 --- a/public/bundle.js +++ b/public/bundle.js @@ -1 +1,7135 @@ -../build/bundle.js \ No newline at end of file +webpackJsonp([0],{ + +/***/ 131: +/***/ (function(module, exports, __webpack_require__) { + +var _require = __webpack_require__(132), + PATHWAYS_LAYOUT_OPTS = _require.PATHWAYS_LAYOUT_OPTS; +var _require2 = __webpack_require__(188), + expandCollapse = _require2.expandCollapse, + searchNodes = _require2.searchNodes, + layout = _require2.layout, + fit = _require2.fit; +module.exports = { + expandCollapse: expandCollapse, + fit: fit, + layout: layout, + stylesheet: __webpack_require__(478), + bindCyEvents: __webpack_require__(479), + searchNodes: searchNodes, + PATHWAYS_LAYOUT_OPTS: PATHWAYS_LAYOUT_OPTS +}; + +/***/ }), + +/***/ 132: +/***/ (function(module, exports) { + +module.exports = { + PATHWAYS_LAYOUT_OPTS: { + name: 'cose-bilkent', + nodeRepulsion: 5000, + nodeDimensionsIncludeLabels: true, + tilingPaddingVertical: 20, + tilingPaddingHorizontal: 20, + animate: 'end', + animationEasing: 'ease-in-out', + animationDuration: 800, + fit: true, + padding: 75, + randomize: false + } +}; + +/***/ }), + +/***/ 133: +/***/ (function(module, exports) { + +module.exports = { + PATHWAYS_LAYOUT_OPTS: { + name: 'cose-bilkent', + nodeRepulsion: 5000, + nodeDimensionsIncludeLabels: true, + tilingPaddingVertical: 50, + tilingPaddingHorizontal: 20, + animate: 'end', + animationEasing: 'ease-in-out', + animationDuration: 800, + fit: true, + padding: 75, + randomize: false + } +}; + +/***/ }), + +/***/ 16: +/***/ (function(module, exports, __webpack_require__) { + +var ServerAPI = __webpack_require__(466); +module.exports = { + ServerAPI: ServerAPI +}; + +/***/ }), + +/***/ 182: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +var _ = __webpack_require__(6); + +// basic pathway model to serve the needs of the pathways view +// - api to get entities, +// - compose each entity with entity metadata +// - get entity by id +var Pathway = /*#__PURE__*/function () { + function Pathway() { + _classCallCheck(this, Pathway); + this.loaded = false; + } + return _createClass(Pathway, [{ + key: "load", + value: function load(pathwayJSON) { + this.raw = pathwayJSON, this.loaded = true; + } + }, { + key: "uri", + value: function uri() { + return _.get(this.raw, 'graph.pathwayMetadata.uri', 'Unknown uri'); + } + }, { + key: "cyJson", + value: function cyJson() { + return this.raw.graph; + } + }, { + key: "isEmpty", + value: function isEmpty() { + return false; + } + }, { + key: "name", + value: function name() { + return _.get(this.raw, 'graph.pathwayMetadata.title', ''); + } + }, { + key: "datasource", + value: function datasource() { + return _.get(this.raw, 'graph.pathwayMetadata.dataSource', 'Unknown datasource'); + } + }, { + key: "datasourceUrl", + value: function datasourceUrl() { + return _.get(this.raw, 'graph.pathwayMetadata.urlToHomepage'); + } + }, { + key: "comments", + value: function comments() { + return _.get(this.raw, 'graph.pathwayMetadata.comments', []); + } + }, { + key: "macromolecules", + value: function macromolecules() { + return _.get(this.raw, 'graph.nodes', []).filter(function (node) { + return node.data.class === 'macromolecule'; + }); + } + }, { + key: "geneNames", + value: function geneNames() { + var ms = this.macromolecules(); + var names = _.flatten(ms.map(function (node) { + return [].concat(_toConsumableArray(_.get(node, 'data.metadata.synonyms', [])), [_.get(node, 'data.label', '')]); + })); + return _.uniq(names); + } + }, { + key: "publicationXrefs", + value: function publicationXrefs() { + return _.get(this.raw, 'graph.pathwayMetadata.pubXrefs'); + } + }, { + key: "unificationXrefs", + value: function unificationXrefs() { + return _.get(this.raw, 'graph.pathwayMetadata.uniXrefs'); + } + }]); +}(); +module.exports = Pathway; + +/***/ }), + +/***/ 183: +/***/ (function(module, exports) { + +module.exports = [{ + type: 'png', + displayName: 'Image (PNG)', + ext: 'png', + description: 'Download an image of the entire view.' +}, { + type: 'gmt', + displayName: 'GMT', + pc2Name: 'GSEA', + ext: 'gmt', + description: 'Gene Matrix Transposed format. The gene database of named gene sets (UniProt) useful for performing enrichment analysis using Gene Set Enrichment Analysis (GSEA)' +}, { + type: 'sif', + displayName: 'SIF', + pc2Name: 'SIF', + ext: 'txt', + description: 'Simple interaction format (SIF) is a list of interaction pairs useful for viewing, styling, and editing using Cytoscape desktop software, and for analysis with graph algorithms.' +}, { + type: 'txt', + displayName: 'Extended SIF', + pc2Name: 'TXT', + ext: 'txt', + description: 'Similar to the SIF output, but contains extra information on entities and interactions. See the SIF section on the PC2 formats page for more details.' +}, { + type: 'biopax', + displayName: 'BioPAX', + pc2Name: 'BIOPAX', + ext: 'xml', + description: 'Biological Pathways Exchange (BioPAX) format includes all details of the biological network stored in Pathway Commons. It is recommended that this format be interpreted using tools like Paxtools or Jena SPARQL.' +}, { + type: 'jsonld', + displayName: 'JSON-LD', + pc2Name: 'JSONLD', + ext: 'json', + description: 'JSON-LD is a human-readable linked format. This format is ideal for programming environments, REST web services, and unstructured databses.' +}, { + type: 'sbgn', + displayName: 'SBGN-ML', + pc2Name: 'SBGN', + ext: 'xml', + description: 'Systems Biology Graphical Notation (SBGN) is a standard visual notation for biological networks. This download provides an XML in SBGN markup language (SBGN-ML).' +}]; + +/***/ }), + +/***/ 187: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _readOnlyError(r) { throw new TypeError('"' + r + '" is read-only'); } +function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); } +function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } +function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } +var _ = __webpack_require__(6); +var geneIntersection = function geneIntersection(pathway, expressionTable) { + var genesInPathway = pathway.geneNames(); + var genesInExpressionData = expressionTable.rawExpressions.map(function (e) { + return e.geneName; + }); + return _.intersection(genesInPathway, genesInExpressionData); +}; +var expressionDataToNodeStyle = function expressionDataToNodeStyle(value, range) { + var _range = _slicedToArray(range, 2), + max = _range[1]; + var style = {}; + if (0 - max / 3 <= value < 0 + max / 3) { + style['background-color'] = 'white'; + style['background-opacity'] = 1; + style['color'] = 'black'; + style['text-outline-color'] = 'white'; + } + if (value < 0 - max / 3) { + style['background-opacity'] = "".concat(Math.abs(value / max)); + style['background-color'] = 'green'; + style['color'] = 'white'; + style['text-outline-color'] = 'black'; + } + if (0 + max / 3 <= value) { + style['background-color'] = 'purple'; + style['background-opacity'] = "".concat(value / max); + style['color'] = 'white'; + style['text-outline-color'] = 'black'; + } + return style; +}; +var applyExpressionData = function applyExpressionData(cy, expressionTable, selectedClass, selectedFunction) { + var geneNodes = cy.nodes('[class="macromolecule"]'); + var nodeNames = function nodeNames(node) { + return [node.data('label')].concat(_toConsumableArray(_.get(node.data('metadata'), 'synonyms', []))); + }; + var geneNodeLabels = _.uniq(_.flattenDeep(geneNodes.map(function (node) { + return nodeNames(node); + }))).sort(); + var expressionsInNetwork = expressionTable.expressions().filter(function (expression) { + return geneNodeLabels.includes(expression.geneName); + }); + var expressionLabels = expressionsInNetwork.map(function (expression) { + return expression.geneName; + }); + geneNodes.filter(function (node) { + return _.intersection(expressionLabels, nodeNames(node)).length === 0; + }).style({ + 'background-color': 'grey', + 'color': 'grey', + 'opacity': 0.4 + }); + var _expressionTable$comp = expressionTable.computeFoldChangeRange(selectedClass, selectedFunction), + min = _expressionTable$comp.min, + max = _expressionTable$comp.max; + var range = [min, max]; + expressionsInNetwork.forEach(function (expression) { + var fv = expression.foldChange(selectedClass, selectedFunction); + if (fv !== Infinity && fv !== -Infinity) { + var matchedNodes = cy.nodes().filter(function (node) { + return nodeNames(node).includes(expression.geneName); + }); + var style = expressionDataToNodeStyle(fv, range); + matchedNodes.style(style); + } + }); +}; +var Expression = /*#__PURE__*/function () { + function Expression(rawExpressionData, expressionClasses) { + _classCallCheck(this, Expression); + var geneName = rawExpressionData.geneName; + var values = rawExpressionData.values; + var replacedExpression = rawExpressionData.replaced ? rawExpressionData.replaced : {}; + var class2ValuesMap = new Map(); + var _iterator = _createForOfIteratorHelper(_.uniq(expressionClasses)), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var expressionClass = _step.value; + class2ValuesMap.set(expressionClass, []); + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + for (var i = 0; i < values.length; i++) { + class2ValuesMap.get(expressionClasses[i]).push(values[i]); + } + var classValues = {}; + Array.from(class2ValuesMap.entries()).forEach(function (entry) { + var className = entry[0]; + var values = entry[1]; + classValues[className] = values; + }); + this.geneName = geneName; + this.classValues = classValues; + this.replacedExpression = replacedExpression; + } + return _createClass(Expression, [{ + key: "foldChange", + value: function foldChange(selectedClass, selectedFunction) { + var invalidValueReplacement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var selectedClassValues = this.classValues[selectedClass]; + var nonSelectedClasses = _.omit(this.classValues, [selectedClass]); + var nonSelectedClassesValues = _.flattenDeep(Object.entries(nonSelectedClasses).map(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + className = _ref2[0], + values = _ref2[1]; + return values; + })); // eslint-disable-line no-unused-vars + + var c1Val = selectedFunction(selectedClassValues); + var c2Val = _.mean(nonSelectedClassesValues); + if (c2Val === 0) { + c2Val = 1; + } + var foldChange = Math.log2(c1Val / c2Val); + if (foldChange === Infinity || foldChange === -Infinity) { + return invalidValueReplacement; + } + return parseFloat(foldChange.toFixed(2)); + } + }]); +}(); +var createRawExpressions = function createRawExpressions(expressionJSON, networkJSON) { + var expressionByGeneName = new Map(); + expressionJSON.forEach(function (expression) { + expressionByGeneName.set(expression.geneName, expression); + }); + networkJSON.nodes.forEach(function (node) { + var label = _.get(node, 'data.label', ''); + var synonyms = _.get(node, 'data.metadata.synonyms', []); + var geneIntersection = _.intersection(_toConsumableArray(expressionByGeneName.keys()), synonyms); + var isGenericMapping = !expressionByGeneName.has(label) && geneIntersection.length > 0; + if (isGenericMapping) { + var mappingCandidate = geneIntersection[0]; + var existingExpression = expressionByGeneName.get(mappingCandidate); + expressionByGeneName.delete(mappingCandidate); + expressionByGeneName.set(label, { + geneName: label, + values: existingExpression.values, + replaced: existingExpression + }); + var _iterator2 = _createForOfIteratorHelper(geneIntersection), + _step2; + try { + for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { + var gene = _step2.value; + expressionByGeneName.delete(gene); + } + } catch (err) { + _iterator2.e(err); + } finally { + _iterator2.f(); + } + } + }); + return _toConsumableArray(expressionByGeneName.entries()).map(function (entry) { + return entry[1]; + }); +}; +var ExpressionTable = /*#__PURE__*/function () { + function ExpressionTable() { + _classCallCheck(this, ExpressionTable); + this.loaded = false; + } + return _createClass(ExpressionTable, [{ + key: "load", + value: function load(rawJsonData) { + this.raw = rawJsonData; + var rawExpressionClasses = _.get(rawJsonData.dataSetClassList, '0.classes', []); + var rawExpressions = _.get(rawJsonData.dataSetExpressionList, '0.expressions', []); + this.rawExpressions = rawExpressions; + this.rawExpressionClasses = rawExpressionClasses; + this.classes = _.uniq(rawExpressionClasses); + this.loaded = true; + } + }, { + key: "loadPathway", + value: function loadPathway(pathwayJSON) { + if (!this.loaded) { + throw new Error('You must call load() with enrichment JSON first'); + } + var expressionClasses = this.rawExpressionClasses; + var expressions = createRawExpressions(this.rawExpressions, pathwayJSON); + this.rows = []; + this.expressionMap = new Map(); + var _iterator3 = _createForOfIteratorHelper(expressions), + _step3; + try { + for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { + var rawExpression = _step3.value; + var exp = new Expression(rawExpression, expressionClasses); + this.rows.push(exp); + this.expressionMap.set(rawExpression.geneName, exp); + } + } catch (err) { + _iterator3.e(err); + } finally { + _iterator3.f(); + } + } + }, { + key: "expressions", + value: function expressions() { + var geneName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + if (geneName != null) { + if (this.expressionMap.has(geneName)) { + return [this.expressionMap.get(geneName)]; + } else { + return []; + } + } + return this.rows; + } + }, { + key: "foldChange", + value: function foldChange(selectedClass, selectedFunction) { + var results = new Map(); + this.rows.forEach(function (expression) { + var foldChange = expression.foldChange(selectedClass, selectedFunction); + results.set(expression.geneName, foldChange); + }); + return results; + } + }, { + key: "computeFoldChangeRange", + value: function computeFoldChangeRange(selectedClass, selectedFunction) { + var foldValues = this.rows.map(function (expression) { + return expression.foldChange(selectedClass, selectedFunction); + }); + var fvs = foldValues.filter(function (fv) { + return fv !== Infinity && fv !== -Infinity; + }); + var maxMagnitude = Math.max(Math.max.apply(Math, _toConsumableArray(fvs)), Math.abs(Math.min.apply(Math, _toConsumableArray(fvs)))); + var max = maxMagnitude; + var min = -maxMagnitude; + return { + min: min, + max: max + }; + } + }]); +}(); +module.exports = { + ExpressionTable: ExpressionTable, + applyExpressionData: applyExpressionData, + geneIntersection: geneIntersection +}; + +/***/ }), + +/***/ 188: +/***/ (function(module, exports, __webpack_require__) { + +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +var _ = __webpack_require__(6); +var _require = __webpack_require__(132), + PATHWAYS_LAYOUT_OPTS = _require.PATHWAYS_LAYOUT_OPTS; +var MATCHED_SEARCH_CLASS = 'search-match'; +var expandCollapseAll = function expandCollapseAll() { + var expanded = true; + return function (cy) { + var api = cy.expandCollapse('get'); + if (expanded) { + var nodesToCollapse = cy.nodes('[class="complex"], [class="complex multimer"]').filter(function (node) { + return api.isCollapsible(node); + }); + api.collapseRecursively(nodesToCollapse); + } else { + var nodesToExpand = cy.nodes('[class="complex"], [class="complex multimer"]').filter(function (node) { + return api.isExpandable(node); + }); + api.expandRecursively(nodesToExpand); + } + expanded = !expanded; + }; +}; +var fit = function fit(cy) { + cy.animation({ + duration: 250, + fit: { + padding: 75 + } + }).play(); +}; +var layout = function layout(cy) { + cy.layout(PATHWAYS_LAYOUT_OPTS).run(); +}; +var searchNodes = function searchNodes(cy, query) { + var queryEmpty = _.trim(query) === ''; + var ecAPI = cy.expandCollapse('get'); + var allNodes = cy.nodes().union(ecAPI.getAllCollapsedChildrenRecursively()); + var getSyns = function getSyns(node) { + var metadata = node.data('metadata'); + var _metadata$synonyms = metadata.synonyms, + synonyms = _metadata$synonyms === void 0 ? [] : _metadata$synonyms, + _metadata$standardNam = metadata.standardName, + standardName = _metadata$standardNam === void 0 ? '' : _metadata$standardNam, + _metadata$displayName = metadata.displayName, + displayName = _metadata$displayName === void 0 ? '' : _metadata$displayName; + var label = node.data('label'); + return _.uniq([].concat(_toConsumableArray(synonyms), [standardName, displayName, label])).filter(function (el) { + return !_.isEmpty(el); + }); + }; + var matched = allNodes.filter(function (node) { + var synonyms = getSyns(node); + var synonymMatch = synonyms.find(function (synonym) { + return synonym.toUpperCase().includes(query.toUpperCase()); + }); + return synonymMatch != null; + }); + allNodes.removeClass(MATCHED_SEARCH_CLASS); + if (matched.length > 0 && !queryEmpty) { + matched.addClass(MATCHED_SEARCH_CLASS); + } +}; +module.exports = { + expandCollapse: expandCollapseAll(), + fit: fit, + layout: layout, + searchNodes: _.debounce(searchNodes, 300), + MATCHED_SEARCH_CLASS: MATCHED_SEARCH_CLASS +}; + +/***/ }), + +/***/ 191: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var _ = __webpack_require__(6); +var h = __webpack_require__(2); +var Popover = __webpack_require__(72); +var tippyDefaults = __webpack_require__(192); + +/* Props +Required +- description +Optional +- tippy (an object with tippy.js options) +- popover props (props you want the popover to have, see popover) +*/ +var Tooltip = /*#__PURE__*/function (_React$Component) { + function Tooltip() { + _classCallCheck(this, Tooltip); + return _callSuper(this, Tooltip, arguments); + } + _inherits(Tooltip, _React$Component); + return _createClass(Tooltip, [{ + key: "componentWillMount", + value: function componentWillMount() { + var _this = this; + var props = this.props; + var tippyOptions = _.assign({}, tippyDefaults, { + html: function () { + return h('div.tooltip-content', [h('span.tooltip-description', props.description)]); + }(), + trigger: 'mouseenter manual', + theme: 'dark', + delay: [200, 0] + }, props.tippy); + this.popoverOptions = _.assign({}, props, { + tippy: tippyOptions, + hide: function hide(hideTippy) { + if (props.hide) { + props.hide(hideTippy); // make sure we don't override the hide() from props + } + _this.hideTippy = hideTippy; + }, + onClick: function onClick() { + _this.hideTippy(); + } + }); + } + }, { + key: "componentWillUnmount", + value: function componentWillUnmount() {} + }, { + key: "render", + value: function render() { + var props = this.props; + return h(Popover, this.popoverOptions, props.children); + } + }]); +}(React.Component); +module.exports = Tooltip; + +/***/ }), + +/***/ 192: +/***/ (function(module, exports) { + +module.exports = { + theme: 'light', + placement: 'bottom', + createPopperInstanceOnInit: true, + animation: 'fade', + animateFill: false, + duration: [250, 0], + delay: [0, 0], + arrow: true, + trigger: 'click manual', + interactive: true, + multiple: true, + hideOnClick: true +}; + +/***/ }), + +/***/ 193: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var classNames = __webpack_require__(14); +var PcLogoLink = /*#__PURE__*/function (_React$Component) { + function PcLogoLink() { + _classCallCheck(this, PcLogoLink); + return _callSuper(this, PcLogoLink, arguments); + } + _inherits(PcLogoLink, _React$Component); + return _createClass(PcLogoLink, [{ + key: "render", + value: function render() { + var cn = this.props.className; + return h('a', { + href: '/' + }, [h('div', { + className: classNames('pc-logo', cn) + })]); + } + }]); +}(React.Component); +module.exports = PcLogoLink; + +/***/ }), + +/***/ 194: +/***/ (function(module, exports, __webpack_require__) { + +var _require = __webpack_require__(133), + PATHWAYS_LAYOUT_OPTS = _require.PATHWAYS_LAYOUT_OPTS; +var _require2 = __webpack_require__(195), + expandCollapse = _require2.expandCollapse, + searchNodes = _require2.searchNodes, + layout = _require2.layout, + fit = _require2.fit; +module.exports = { + expandCollapse: expandCollapse, + fit: fit, + layout: layout, + stylesheet: __webpack_require__(496), + bindCyEvents: __webpack_require__(497), + searchNodes: searchNodes, + PATHWAYS_LAYOUT_OPTS: PATHWAYS_LAYOUT_OPTS +}; + +/***/ }), + +/***/ 195: +/***/ (function(module, exports, __webpack_require__) { + +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +var _ = __webpack_require__(6); +var _require = __webpack_require__(133), + PATHWAYS_LAYOUT_OPTS = _require.PATHWAYS_LAYOUT_OPTS; +var MATCHED_SEARCH_CLASS = 'search-match'; +var expandCollapseAll = function expandCollapseAll() { + var expanded = true; + return function (cy) { + var api = cy.expandCollapse('get'); + if (expanded) { + var nodesToCollapse = cy.nodes('[class="complex"], [class="complex multimer"]').filter(function (node) { + return api.isCollapsible(node); + }); + api.collapseRecursively(nodesToCollapse); + } else { + var nodesToExpand = cy.nodes('[class="complex"], [class="complex multimer"]').filter(function (node) { + return api.isExpandable(node); + }); + api.expandRecursively(nodesToExpand); + } + expanded = !expanded; + }; +}; +var fit = function fit(cy) { + cy.animation({ + duration: 250, + fit: { + padding: 75 + } + }).play(); +}; +var layout = function layout(cy) { + cy.layout(PATHWAYS_LAYOUT_OPTS).run(); +}; +var searchNodes = function searchNodes(cy, query) { + var queryEmpty = _.trim(query) === ''; + var ecAPI = cy.expandCollapse('get'); + var allNodes = cy.nodes().union(ecAPI.getAllCollapsedChildrenRecursively()); + var getSyns = function getSyns(node) { + var metadata = node.data('metadata'); + var _metadata$synonyms = metadata.synonyms, + synonyms = _metadata$synonyms === void 0 ? [] : _metadata$synonyms, + _metadata$standardNam = metadata.standardName, + standardName = _metadata$standardNam === void 0 ? '' : _metadata$standardNam, + _metadata$displayName = metadata.displayName, + displayName = _metadata$displayName === void 0 ? '' : _metadata$displayName; + var label = node.data('label'); + return _.uniq([].concat(_toConsumableArray(synonyms), [standardName, displayName, label])).filter(function (el) { + return !_.isEmpty(el); + }); + }; + var matched = allNodes.filter(function (node) { + var synonyms = getSyns(node); + var synonymMatch = synonyms.find(function (synonym) { + return synonym.toUpperCase().includes(query.toUpperCase()); + }); + return synonymMatch != null; + }); + allNodes.removeClass(MATCHED_SEARCH_CLASS); + if (matched.length > 0 && !queryEmpty) { + matched.addClass(MATCHED_SEARCH_CLASS); + } +}; +module.exports = { + expandCollapse: expandCollapseAll(), + fit: fit, + layout: layout, + searchNodes: _.debounce(searchNodes, 300), + MATCHED_SEARCH_CLASS: MATCHED_SEARCH_CLASS +}; + +/***/ }), + +/***/ 196: +/***/ (function(module, exports, __webpack_require__) { + +var h = __webpack_require__(2); +var CytoscapeTooltip = __webpack_require__(93); +var _ = __webpack_require__(6); +var _require = __webpack_require__(16), + ServerAPI = _require.ServerAPI; +var InteractionsNodeTooltip = __webpack_require__(506); +var InteractionsEdgeTooltip = __webpack_require__(507); +var SINGLE_SRC_LAYOUT = { + name: 'concentric', + concentric: function concentric(node) { + return node.data('queried') ? 1 : 0; + }, + levelWidth: function levelWidth() { + return 1; + }, + animate: true, + animationDuration: 800, + animationEasing: 'ease-in-out' +}; +var MULTI_SRC_LAYOUT = { + name: 'cose-bilkent', + nodeRepulsion: 2000, + nodeDimensionsIncludeLabels: true, + animate: 'end', + animationEasing: 'ease-in-out', + animationDuration: 800, + fit: true, + padding: 75, + randomize: true +}; +var interactionsLayoutOpts = function interactionsLayoutOpts(cy) { + var numSources = cy.nodes('[?queried]').size(); + if (numSources > 1) { + return MULTI_SRC_LAYOUT; + } + return SINGLE_SRC_LAYOUT; +}; +var SHOW_INTERACTIONS_TOOLTIPS_EVENT = 'showinteractionstooltip'; +var bindEvents = function bindEvents(cy) { + var geneData = []; + + // on initial interactions data load, popualate gene metadata + cy.one('add', function () { + var geneQuery = cy.nodes().map(function (node) { + return node.data('id'); + }).join(' '); + ServerAPI.searchGenes(geneQuery).then(function (res) { + return geneData = res; + }).catch(function () {}); // swallow + }); + var hideTooltips = function hideTooltips() { + cy.elements().forEach(function (ele) { + var tooltip = ele.scratch('_tooltip'); + if (tooltip) { + tooltip.hide(); + } + }); + }; + cy.on(SHOW_INTERACTIONS_TOOLTIPS_EVENT, 'node', function (evt) { + var node = evt.target; + var geneId = node.data('id'); + var geneMetadata = geneData.find(function (info) { + return info.query === geneId; + }) || {}; + var tooltip = new CytoscapeTooltip(node.popperRef(), { + html: h(InteractionsNodeTooltip, { + node: node, + geneMetadata: geneMetadata + }) + }); + node.scratch('_tooltip', tooltip); + tooltip.show(); + }); + cy.on(SHOW_INTERACTIONS_TOOLTIPS_EVENT, 'edge', function (evt) { + var edge = evt.target; + var tooltip = new CytoscapeTooltip(edge.popperRef(), { + html: h(InteractionsEdgeTooltip, { + edge: edge + }) + }); + edge.scratch('_tooltip', tooltip); + tooltip.show(); + }); + cy.on('tap', function (evt) { + var tgt = evt.target; + + // we clicked an element that has a tooltip open -> close it + if (tgt.scratch('_tooltip')) { + hideTooltips(); + tgt.removeScratch('_tooltip'); + } else { + // open the tooltip for the clicked element + hideTooltips(); + tgt.emit(SHOW_INTERACTIONS_TOOLTIPS_EVENT); + } + }); + + //Hide Tooltips on various graph movements + cy.on('drag', function () { + return hideTooltips(); + }); + cy.on('pan', function () { + return hideTooltips(); + }); + cy.on('zoom', function () { + return hideTooltips(); + }); + cy.on('layoutstart', function () { + return hideTooltips(); + }); + cy.on('hide-type', function () { + return hideTooltips(); + }); + cy.on('slider-change', function () { + return hideTooltips(); + }); + var nodeHoverMouseOver = _.debounce(function (evt) { + var node = evt.target; + var elesToHighlight = cy.collection(); + + //Create a list of the hovered node & its neighbourhood + node.neighborhood().nodes().union(node).forEach(function (node) { + elesToHighlight.merge(node.ancestors()); + elesToHighlight.merge(node.descendants()); + elesToHighlight.merge(node); + }); + elesToHighlight.merge(node.neighborhood().edges()); + + //Add highlighted class to node & its neighbourhood, unhighlighted to everything else + cy.elements().addClass('unhighlighted'); + elesToHighlight.forEach(function (ele) { + ele.removeClass('unhighlighted'); + ele.addClass('highlighted'); + }); + }, 750); + + //call style-applying and style-removing functions on 'mouseover' and 'mouseout' for non-compartment nodes + cy.on('mouseover', 'node[class!="compartment"]', nodeHoverMouseOver); + cy.on('mouseout', 'node[class!="compartment"]', function () { + nodeHoverMouseOver.cancel(); + cy.elements().removeClass('highlighted unhighlighted'); + }); +}; + +//Search by keyword within network +var searchInteractionNodes = _.debounce(function (cy, query) { + var queryEmpty = _.trim(query) === ''; + var allNodes = cy.nodes(); + var matched = allNodes.filter(function (node) { + return node.data('id').toUpperCase().includes(query.toUpperCase()); + }); + cy.batch(function () { + allNodes.removeClass('matched'); + if (matched.length > 0 && !queryEmpty) { + matched.addClass('matched'); + } + }); +}, 250); +module.exports = { + interactionsLayoutOpts: interactionsLayoutOpts, + searchInteractionNodes: searchInteractionNodes, + interactionsStylesheet: __webpack_require__(508), + bindEvents: bindEvents +}; + +/***/ }), + +/***/ 197: +/***/ (function(module, exports) { + +var INTERACTION_TYPES = { + BINDING: 'Binding', + MODIFICATION: 'Modification', + EXPRESSION: 'Expression', + OTHER: 'Other' +}; +module.exports = INTERACTION_TYPES; + +/***/ }), + +/***/ 198: +/***/ (function(module, exports, __webpack_require__) { + +var h = __webpack_require__(2); +var CytoscapeTooltip = __webpack_require__(93); +var _ = __webpack_require__(6); +var EnrichmentTooltip = __webpack_require__(514); +var _require = __webpack_require__(515), + generateClusterLabels = _require.generateClusterLabels; +var SHOW_ENRICHMENT_TOOLTIPS_EVENT = 'showenrichmenttooltip'; +var ENRICHMENT_LAYOUT_OPTS = { + name: 'cola', + refresh: 10, + animate: false, + maxSimulationTime: 500, + nodeDimensionsIncludeLabels: true, + randomize: true, + convergenceThreshold: 50, + padding: 50 +}; +var PARENT_SEL_PREFIX = 'component-'; +var noParent = function noParent(component) { + return !component.isChild(); +}; +var enrichmentLayout = function enrichmentLayout(cy) { + var nodesWithNoEdges = cy.nodes().filter(function (node) { + return node.connectedEdges().size() === 0; + }); + var nodesWithEdges = cy.elements().difference(nodesWithNoEdges); + var w = cy.width(); + var h = cy.height(); + var firstLayout = nodesWithEdges.layout(ENRICHMENT_LAYOUT_OPTS); + var firstLayoutPromise = firstLayout.pon('layoutstop'); + firstLayout.run(); + return firstLayoutPromise.then(function () { + // add parent nodes for each component with size > 2 + cy.elements().components().filter(function (component) { + return component.size() > 2; + }).filter(noParent).forEach(function (component, index) { + var labelInput = component.nodes().map(function (node) { + return node.data('name'); + }).join('. '); + var tags = generateClusterLabels(labelInput); + var componentParentId = PARENT_SEL_PREFIX + index; + cy.add({ + group: 'nodes', + label: '', + data: { + tags: tags.join(' '), + id: componentParentId + } + }); + component.move({ + parent: componentParentId + }); + }); + var firstLayoutBB = nodesWithEdges.boundingBox(); + var bbIsEmpty = function bbIsEmpty(bb) { + return bb.h === 0 && bb.w === 0; + }; + var secondLayoutBB = { + x1: 0, + x2: w, + y1: 0, + y2: h + }; + if (!bbIsEmpty(firstLayoutBB)) { + secondLayoutBB = { + x1: firstLayoutBB.x1, + x2: firstLayoutBB.x2, + y1: firstLayoutBB.y2 + 200, + y2: firstLayoutBB.y2 + 400 + }; + } + var secondLayout = nodesWithNoEdges.layout({ + name: 'grid', + nodeDimensionsIncludeLabels: true, + boundingBox: secondLayoutBB, + stop: function stop() { + return cy.fit([], Math.min(0.05 * h, 0.05 * w)); + } + }); + var secondLayoutPromise = secondLayout.pon('layoutstop'); + secondLayout.run(); + return secondLayoutPromise; + }); +}; +var bindEvents = function bindEvents(cy) { + var hideTooltips = function hideTooltips() { + cy.elements().forEach(function (ele) { + var tooltip = ele.scratch('_tooltip'); + if (tooltip) { + tooltip.hide(); + } + }); + }; + cy.on(SHOW_ENRICHMENT_TOOLTIPS_EVENT, 'node', function (evt) { + var node = evt.target; + if (node.isParent()) { + return; + } + var tooltip = new CytoscapeTooltip(node.popperRef(), { + html: h(EnrichmentTooltip, { + node: node + }) + }); + node.scratch('_tooltip', tooltip); + tooltip.show(); + }); + cy.on('tap', function (evt) { + var tgt = evt.target; + + // if we didn't click a node, close all tooltips + if (evt.target === cy || evt.target.isEdge()) { + hideTooltips(); + return; + } + + // we clicked a node that has a tooltip open -> close it + if (tgt.scratch('_tooltip-opened')) { + hideTooltips(); + } else { + // open the tooltip for the clicked node + hideTooltips(); + tgt.emit(SHOW_ENRICHMENT_TOOLTIPS_EVENT); + } + }); + + //Hide Tooltips on various graph movements + cy.on('drag', function () { + return hideTooltips(); + }); + cy.on('pan', function () { + return hideTooltips(); + }); + cy.on('zoom', function () { + return hideTooltips(); + }); + cy.on('layoutstart', function () { + return hideTooltips(); + }); +}; +var searchEnrichmentNodes = _.debounce(function (cy, query) { + var queryEmpty = _.trim(query) === ''; + var allNodes = cy.nodes(); + var matched = allNodes.filter(function (node) { + var geneSet = (node.data('geneSet') || []).map(function (name) { + return name.toUpperCase(); + }); + var name = (node.data('name') || '').toUpperCase(); + var matches = function matches(str, q) { + return str.indexOf(q) >= 0; + }; + var q = query.toUpperCase(); + return matches(name, q) || geneSet.some(function (geneName) { + return matches(geneName, q); + }); + }); + cy.batch(function () { + allNodes.removeClass('matched'); + if (matched.length > 0 && !queryEmpty) { + matched.addClass('matched'); + } + }); +}, 250); +module.exports = { + enrichmentLayout: enrichmentLayout, + searchEnrichmentNodes: searchEnrichmentNodes, + enrichmentStylesheet: __webpack_require__(519), + bindEvents: bindEvents +}; + +/***/ }), + +/***/ 206: +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(207); +__webpack_require__(409); +var debug = __webpack_require__(410); +var hh = __webpack_require__(123); +var h = __webpack_require__(2); +var Router = __webpack_require__(419); +var ReactDOM = __webpack_require__(54); +var RegisterCyExtensions = __webpack_require__(521); +if (debug.enabled()) { + debug.init(); +} +RegisterCyExtensions(); +var root = hh('div#root'); +document.body.appendChild(root); +ReactDOM.render(h(Router), root); + +/***/ }), + +/***/ 24: +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(process) {var _ = __webpack_require__(6); +var defaults = { + PORT: 3000, + METADATA_CRON_SCHEDULE: '0 0 * * Monday', + // update file from gprofiler etc. (Monday at midnight) + PC_URL: 'https://www.pathwaycommons.org/', + DOWNLOADS_FOLDER_NAME: 'downloads', + GPROFILER_URL: "https://biit.cs.ut.ee/gprofiler/", + GMT_ARCHIVE_URL: 'https://biit.cs.ut.ee/gprofiler/static/gprofiler_hsapiens.name.zip', + IDENTIFIERS_URL: 'http://bioregistry.io', + NCBI_EUTILS_BASE_URL: 'https://eutils.ncbi.nlm.nih.gov/entrez/eutils', + NCBI_API_KEY: 'b99e10ebe0f90d815a7a99f18403aab08008', + // for dev testing only (baderlabsysmonitor ncbi key) + PUBMED_BASE_URL: 'https://pubmed.ncbi.nlm.nih.gov/', + HGNC_BASE_URL: 'https://rest.genenames.org', + UNIPROT_API_BASE_URL: 'https://www.ebi.ac.uk/proteins/api', + DOI_BASE_URL: 'https://doi.org/', + ORCID_BASE_URL: 'https://orcid.org/', + SBGN_IMG_SERVICE_BASE_URL: 'http://localhost:9090/', + SBGN_IMG_PATH: 'public/img/pathways', + PC_IMAGE_CACHE_MAX_SIZE: 10000, + PC_CACHE_MAX_SIZE: 1000, + PUB_CACHE_MAX_SIZE: 1000000, + ENT_CACHE_MAX_SIZE: 1000000, + ENT_SUMMARY_CACHE_MAX_SIZE: 1000000, + MAX_SIF_NODES: 25, + CLIENT_FETCH_TIMEOUT: 15000, + SERVER_FETCH_TIMEOUT: 5000, + // DB config values + DB_NAME: 'appui', + DB_HOST: '127.0.0.1', + DB_PORT: '28015', + DB_USER: undefined, + DB_PASS: undefined, + DB_CERT: undefined, + // factoid specific urls + FACTOID_URL: 'https://biofactoid.org/', + NS_CHEBI: 'chebi', + NS_ENSEMBL: 'ensembl', + NS_GENECARDS: 'genecards', + NS_GENE_ONTOLOGY: 'go', + NS_HGNC: 'hgnc', + NS_HGNC_SYMBOL: 'hgnc.symbol', + NS_NCBI_GENE: 'ncbigene', + NS_PUBMED: 'pubmed', + NS_REACTOME: 'reactome', + NS_UNIPROT: 'uniprot', + NS_BIOFACTOID: 'biofactoid', + NS_PATHWAYCOMMONS: 'pathwaycommons' +}; +var envVars = _.pick(process.env, Object.keys(defaults)); + +// these vars are always included in the bundle because they ref `process.env.${name}` directly +// NB DO NOT include passwords etc. here +var clientVars = { + NODE_ENV: "development", + PC_URL: "https://www.pathwaycommons.org", + FACTOID_URL: "https://factoid.baderlab.org" +}; +_.assign(envVars, clientVars); +for (var key in envVars) { + var val = envVars[key]; + if (val === '' || val == null) { + delete envVars[key]; + } +} +var conf = Object.assign({}, defaults, envVars); +Object.freeze(conf); +module.exports = conf; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(129))) + +/***/ }), + +/***/ 410: +/***/ (function(module, exports, __webpack_require__) { + +var domReady = __webpack_require__(411); +var sync = __webpack_require__(412); +var debug = window.dbg = { + enabled: function enabled(on) { + if (arguments.length === 0) { + if (this._enabled != null) { + return this._enabled; + } else { + return window.DEBUG || "development" !== 'production'; + } + } else { + this._enabled = !!on; + } + }, + init: function init() { + domReady(sync); + } +}; +module.exports = debug; + +/***/ }), + +/***/ 412: +/***/ (function(module, exports) { + +module.exports = function appendScript() { + var script = document.createElement('script'); + script.src = 'http://' + window.location.hostname + ':35729/livereload.js'; + document.head.insertBefore(script, document.head.firstChild); +}; + +/***/ }), + +/***/ 416: +/***/ (function(module, exports) { + +/* (ignored) */ + +/***/ }), + +/***/ 419: +/***/ (function(module, exports, __webpack_require__) { + +var _require = __webpack_require__(60), + BrowserRouter = _require.BrowserRouter, + Route = _require.Route, + Switch = _require.Switch; +var h = __webpack_require__(2); +var _ = __webpack_require__(6); +var qs = __webpack_require__(37); +var Features = __webpack_require__(450); +module.exports = function () { + return h(BrowserRouter, [h(Switch, [{ + path: '/', + render: function render(props) { + return h(Features.Search, props); + } + }, { + path: '/search', + render: function render(props) { + return h(Features.Search, props); + } + }, { + path: '/pathways', + render: function render(props) { + var uri = qs.parse(location.search).uri; + var apiOpts = { + type: 'pathways', + uri: uri + }; + var downloadOpts = { + downloadTypes: ['png', 'gmt', 'sif', 'txt', 'biopax', 'jsonld', 'sbgn'] + }; + return h(Features.Pathways, _.assign({}, props, { + apiOpts: apiOpts, + downloadOpts: downloadOpts + })); + } + }, { + path: '/biofactoid', + render: function render(props) { + return h(Features.Biofactoid, props); + } + }, { + path: '/biofactoid/:id', + render: function render(props) { + var match = props.match; + var id = match.params.id; + var apiOpts = { + type: 'biofactoid', + id: id + }; + return h(Features.Pathways, _.assign({}, props, { + apiOpts: apiOpts + })); + } + }, { + path: '/paint', + render: function render(props) { + return h(Features.Paint, props); + } + }, { + path: '/interactions', + render: function render(props) { + return h(Features.Interactions, props); + } + }, { + path: '/enrichment', + render: function render(props) { + return h(Features.Enrichment, props); + } + }, { + path: '*', + render: function render(props) { + props = _.assign({ + notFoundError: true + }, props); + return h(Features.Search, props); + } + }].map(function (spec) { + return h(Route, _.assign({ + exact: true + }, spec)); + }))]); +}; + +/***/ }), + +/***/ 450: +/***/ (function(module, exports, __webpack_require__) { + +var Paint = __webpack_require__(451); +var Pathways = __webpack_require__(492); +var Search = __webpack_require__(500); +var Interactions = __webpack_require__(504); +var Enrichment = __webpack_require__(511); +var Biofactoid = __webpack_require__(520); +module.exports = { + Paint: Paint, + Search: Search, + Pathways: Pathways, + Interactions: Interactions, + Enrichment: Enrichment, + Biofactoid: Biofactoid +}; + +/***/ }), + +/***/ 451: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var queryString = __webpack_require__(37); +var _ = __webpack_require__(6); +var classNames = __webpack_require__(14); +var Loader = __webpack_require__(38); +var Promise = __webpack_require__(128).Promise; +var _require = __webpack_require__(63), + fetch = _require.fetch; +var CytoscapeService = __webpack_require__(90); +var _require2 = __webpack_require__(16), + ServerAPI = _require2.ServerAPI; +var Pathway = __webpack_require__(182); +var FileDownloadMenu = __webpack_require__(467); +var InfoMenu = __webpack_require__(470); +var PaintMenu = __webpack_require__(471); +var PathwaysToolbar = __webpack_require__(481); +var _require3 = __webpack_require__(55), + Sidebar = _require3.Sidebar, + PcLogoLink = _require3.PcLogoLink, + CytoscapeNetwork = _require3.CytoscapeNetwork; +var demoExpressions = __webpack_require__(490); +var demoPathways = __webpack_require__(491); +var _require4 = __webpack_require__(187), + ExpressionTable = _require4.ExpressionTable, + applyExpressionData = _require4.applyExpressionData, + geneIntersection = _require4.geneIntersection; +var _require5 = __webpack_require__(131), + stylesheet = _require5.stylesheet, + bindCyEvents = _require5.bindCyEvents, + PATHWAYS_LAYOUT_OPTS = _require5.PATHWAYS_LAYOUT_OPTS; + +// given a string of N gene names, chunk them into N / 15 subqueries and send them to pathway commons +// for each pathway in the search results +// get the pathway json for that result +// find out all the genes are in that pathway +// find all the genes in the expression data +// return the intersection between genes in (expData, p) for p in Pathway List +var getPathwaysRelevantTo = function getPathwaysRelevantTo(searchParam, expressionTable) { + var expressions = expressionTable.rawExpressions; + var geneQueries = _.chunk(expressions.map(function (expression) { + return expression.geneName; + }), 15).map(function (chunk) { + return ServerAPI.search({ + q: chunk.join(' '), + type: 'Pathway' + }); + }); + var searchQuery = ServerAPI.search({ + q: searchParam, + type: 'Pathway' + }); + return Promise.all([].concat(_toConsumableArray(geneQueries), [searchQuery])).then(function (searchResults) { + var pathwaySearchResults = _toConsumableArray(searchResults.map(function (result) { + return result.searchHits; + })); + var uniqueResults = _.uniqBy(_.flatten(pathwaySearchResults), function (result) { + return result.uri; + }); + var pathwaysJSON = uniqueResults.map(function (result) { + return ServerAPI.getPathway(result.uri, 'latest').catch(function () { + return null; + }); + }); + return Promise.all(pathwaysJSON).then(function (pathwaysJSON) { + return _.uniqWith(pathwaysJSON.filter(function (pj) { + return pj != null; + }).map(function (pathwayJSON) { + var p = new Pathway(); + p.load(pathwayJSON); + return p; + }), function (p0, p1) { + return _.isEqual(p0.cyJson(), p1.cyJson()); + }); + }); + }); +}; +var Paint = /*#__PURE__*/function (_React$Component) { + function Paint(props) { + var _this; + _classCallCheck(this, Paint); + _this = _callSuper(this, Paint, [props]); + _this.state = { + cySrv: new CytoscapeService({ + style: stylesheet, + onMount: bindCyEvents + }), + pathways: [], + curPathway: new Pathway(), + expressionTable: new ExpressionTable(), + activeMenu: 'paintMenu', + paintMenuCtrls: { + exprClass: '', + exprFnName: 'mean', + exprFn: _.mean + }, + activeTab: 0, + invalidEnrichments: false, + loading: true + }; + if (true) { + _this.state.cySrv.getPromise().then(function (cy) { + return window.cy = cy; + }); + } + return _this; + } + _inherits(Paint, _React$Component); + return _createClass(Paint, [{ + key: "loadPaintDemoData", + value: function loadPaintDemoData() { + var _this2 = this; + var _this$state = this.state, + expressionTable = _this$state.expressionTable, + paintMenuCtrls = _this$state.paintMenuCtrls; + var pathways = demoPathways.map(function (json) { + var p = new Pathway(); + p.load(json); + return p; + }); + expressionTable.load(demoExpressions); + this.setState({ + paintMenuCtrls: _.assign({}, paintMenuCtrls, { + exprClass: expressionTable.classes[0] + }), + pathways: pathways + }, function () { + return _this2.loadPathway(pathways[0]); + }); + } + + // onMount prop passed to CytoscapeNetwork + // called after CytoscapeNetwork has mounted + }, { + key: "getEnrichmentsAndPathways", + value: function getEnrichmentsAndPathways() { + var _this3 = this; + var query = queryString.parse(this.props.location.search); + var searchParam = query.q; + var enrichmentsUri = query.uri; + var _this$state2 = this.state, + expressionTable = _this$state2.expressionTable, + paintMenuCtrls = _this$state2.paintMenuCtrls; + + // if the user just comes into the app without enrichments, load the demo data + if (enrichmentsUri == null) { + this.loadPaintDemoData(); + return; + } + var getEnrichments = function getEnrichments() { + return fetch(enrichmentsUri).then(function (res) { + return res.json(); + }).then(function (json) { + expressionTable.load(json); + }); + }; + var findBestPathway = function findBestPathway(pathways) { + // 1. check if there is a pathway with a name that matches the search param + // 2. sort the pathawys by their gene intersection between the expression table + + // see if there is a pathway that has the same title as the search param + var bestResult = pathways.find(function (pathway) { + return pathway.name() === searchParam; + }); + if (bestResult == null) { + bestResult = pathways[0]; + } + if (bestResult == null) { + return null; + } + return bestResult; + }; + getEnrichments().then(function () { + return getPathwaysRelevantTo(searchParam, expressionTable); + }).then(function (pathways) { + if (expressionTable.classes == null) { + _this3.setState({ + invalidEnrichments: true + }); + return; + } + pathways.sort(function (p0, p1) { + return geneIntersection(p1, expressionTable).length - geneIntersection(p0, expressionTable).length; + }); + _this3.setState({ + paintMenuCtrls: _.assign({}, paintMenuCtrls, { + exprClass: expressionTable.classes[0] + }), + pathways: pathways + }, function () { + return _this3.loadPathway(findBestPathway(pathways)); + }); + }); + } + }, { + key: "loadPathway", + value: function loadPathway(pathway) { + var _this4 = this; + var _this$state3 = this.state, + cySrv = _this$state3.cySrv, + paintMenuCtrls = _this$state3.paintMenuCtrls, + expressionTable = _this$state3.expressionTable; + var exprClass = paintMenuCtrls.exprClass, + exprFn = paintMenuCtrls.exprFn; + var cy = cySrv.get(); + this.setState({ + curPathway: pathway, + loading: true + }, function () { + expressionTable.loadPathway(pathway.cyJson()); + cy.remove('*'); + cy.add(pathway.cyJson()); + cy.layout(_.assign({}, PATHWAYS_LAYOUT_OPTS, { + stop: function stop() { + applyExpressionData(cy, expressionTable, exprClass, exprFn); + _this4.setState({ + loading: false + }); + } + })).run(); + }); + } + }, { + key: "changeMenu", + value: function changeMenu(menu) { + var _this5 = this; + var resizeCyImmediate = function resizeCyImmediate() { + return _this5.state.cySrv.get().resize(); + }; + var resizeCyDebounced = _.debounce(resizeCyImmediate, 500); + if (menu === this.state.activeMenu) { + this.setState({ + activeMenu: 'closeMenu' + }, resizeCyDebounced); + } else { + this.setState({ + activeMenu: menu + }, resizeCyDebounced); + } + } + }, { + key: "handlePaintCtrlChange", + value: function handlePaintCtrlChange(newVal) { + var _this6 = this; + this.setState({ + paintMenuCtrls: _.assign({}, this.state.paintMenuCtrls, newVal) + }, function () { + var _this6$state = _this6.state, + cySrv = _this6$state.cySrv, + expressionTable = _this6$state.expressionTable, + paintMenuCtrls = _this6$state.paintMenuCtrls; + var exprClass = paintMenuCtrls.exprClass, + exprFn = paintMenuCtrls.exprFn; + applyExpressionData(cySrv.get(), expressionTable, exprClass, exprFn); + }); + } + }, { + key: "handlePaintMenuTabChange", + value: function handlePaintMenuTabChange(newTab) { + this.setState({ + activeTab: newTab + }); + } + }, { + key: "render", + value: function render() { + var _this7 = this; + var _this$state4 = this.state, + invalidEnrichments = _this$state4.invalidEnrichments, + loading = _this$state4.loading, + expressionTable = _this$state4.expressionTable, + curPathway = _this$state4.curPathway, + pathways = _this$state4.pathways, + cySrv = _this$state4.cySrv, + activeMenu = _this$state4.activeMenu, + paintMenuCtrls = _this$state4.paintMenuCtrls, + activeTab = _this$state4.activeTab; + if (invalidEnrichments) { + return h('div', 'The painter app requires enrichments that have an associated class file'); + } + var appBar = h('div.app-bar', [h('div.app-bar-branding', [h(PcLogoLink), h('div.app-bar-title', [h('span', curPathway.name() + ' | '), h('a.plain-link', { + href: curPathway.datasourceUrl(), + target: '_blank' + }, ' ' + curPathway.datasource())])]), h(PathwaysToolbar, { + cySrv: cySrv, + activeMenu: activeMenu, + controller: this + })]); + var sidebar = h(Sidebar, { + controller: this, + activeMenu: activeMenu + }, [h(InfoMenu, { + key: 'infoMenu', + infoList: curPathway.comments() + }), h(FileDownloadMenu, { + key: 'downloadMenu', + cySrv: cySrv, + fileName: curPathway.name(), + uri: curPathway.uri() + }), h(PaintMenu, { + key: 'paintMenu', + selectedIndex: activeTab, + controller: this, + cySrv: cySrv, + curPathway: curPathway, + paintMenuCtrls: paintMenuCtrls, + pathways: pathways, + expressionTable: expressionTable + })]); + var content = [h(Loader, { + loaded: !loading, + options: { + left: '50%', + color: '#16a085' + } + }, [appBar, sidebar]), h(CytoscapeNetwork, { + cySrv: cySrv, + onMount: function onMount() { + return _this7.getEnrichmentsAndPathways(); + }, + className: classNames({ + 'network-loading': loading, + 'network-sidebar-open': activeMenu !== 'closeMenu' + }) + })]; + return h('div.paint', content); + } + }]); +}(React.Component); +module.exports = Paint; + +/***/ }), + +/***/ 461: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +var _require = __webpack_require__(462), + promiseTimeout = _require.promiseTimeout, + TimeoutError = _require.TimeoutError; +var _ = __webpack_require__(6); +var _require2 = __webpack_require__(24), + CLIENT_FETCH_TIMEOUT = _require2.CLIENT_FETCH_TIMEOUT, + SERVER_FETCH_TIMEOUT = _require2.SERVER_FETCH_TIMEOUT; +var isClient = function isClient() { + return (typeof window === "undefined" ? "undefined" : _typeof(window)) !== ( true ? "undefined" : _typeof(undefined)); +}; +var isServer = function isServer() { + return !isClient(); +}; +var failOnBadStatus = function failOnBadStatus(res) { + if (!res.ok) { + throw new Error("Fetch failed due to bad status code : ".concat(res.statusText, " : ").concat(res.url)); + } else { + return res; + } +}; +var safeFetch = function safeFetch(url, options) { + var FETCH_TIMEOUT = isServer() ? SERVER_FETCH_TIMEOUT : CLIENT_FETCH_TIMEOUT; + var timeout = _.get(options, ['timeout'], FETCH_TIMEOUT); + var opts = _.omit(options, ['timeout']); + return promiseTimeout(function () { + return fetch(url, opts).then(failOnBadStatus); + }, timeout); +}; +module.exports = { + safeFetch: safeFetch, + TimeoutError: TimeoutError +}; + +/***/ }), + +/***/ 462: +/***/ (function(module, exports, __webpack_require__) { + +var Promise = __webpack_require__(128); +var promiseTimeout = function promiseTimeout(fn, timeout) { + return Promise.resolve().then(fn).timeout(timeout); +}; +module.exports = { + promiseTimeout: promiseTimeout, + TimeoutError: Promise.TimeoutError +}; + +/***/ }), + +/***/ 466: +/***/ (function(module, exports, __webpack_require__) { + +var qs = __webpack_require__(37); +var _ = __webpack_require__(6); +var PC_URL; +var _require = __webpack_require__(63), + fetch = _require.fetch; +var _require2 = __webpack_require__(24), + NCBI_EUTILS_BASE_URL = _require2.NCBI_EUTILS_BASE_URL; +var defaultFetchOpts = { + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json' + } +}; +var ServerAPI = { + getPCURL: function getPCURL() { + if (PC_URL) { + return Promise.resolve(PC_URL); + } else { + return fetch('/api/pc/baseURL').then(function (res) { + return res.text(); + }).then(function (baseUrl) { + PC_URL = baseUrl; + return PC_URL; + }); + } + }, + // a generic method that gets pathway sbgn json from various sources + // e.g. pathwaycommons, factoid, or human created layouts + getAPIResource: function getAPIResource(opts) { + var type = opts.type, + uri = opts.uri, + id = opts.id; + if (type === 'pathways') { + if (uri !== null) { + return this.getPathway(uri); + } else { + throw new Error('Invalid parameter. Pathways api calls require a uri parameter'); + } + } + if (type === 'biofactoid') { + if (id !== null) { + return this.getDocById(opts.id); + } else { + throw new Error('Invalid paramter. Factoids api calls require a id parameter'); + } + } + }, + getPathway: function getPathway(uri) { + var url = "/api/pathways?".concat(qs.stringify({ + uri: uri + })); + var fetchOpts = _.assign({}, defaultFetchOpts); + return fetch(url, fetchOpts).then(function (res) { + return res.json(); + }).then(function (pathwayJson) { + return { + graph: pathwayJson + }; + }); + }, + getAllDocs: function getAllDocs() { + return fetch('/api/biofactoid', defaultFetchOpts).then(function (res) { + return res.json(); + }); + }, + getDocById: function getDocById(id) { + var url = "/api/biofactoid/".concat(id); + return fetch(url, defaultFetchOpts).then(function (res) { + return res.json(); + }).then(function (pathwayJson) { + return { + graph: pathwayJson + }; + }); + }, + getInteractionGraph: function getInteractionGraph(sources) { + return fetch("/api/interactions?".concat(qs.stringify(sources)), defaultFetchOpts).then(function (res) { + return res.json(); + }); + }, + getPubmedPublications: function getPubmedPublications(pubmedIds) { + var opts = { + db: 'pubmed', + retmode: 'json', + id: pubmedIds.toString() + }; + var url = "".concat(NCBI_EUTILS_BASE_URL, "/esummary.fcgi?").concat(qs.stringify(opts)); + return fetch(url).then(function (res) { + return res.json(); + }).then(function (res) { + var result = res.result; + if (result == null) { + return []; + } + var uids = result.uids; + return uids.map(function (uid) { + var record = result[uid]; + var title = record.title, + authors = record.authors, + sortfirstauthor = record.sortfirstauthor, + pubdate = record.pubdate, + source = record.source, + articleids = record.articleids; + var doi = _.find(articleids, { + idtype: 'doi' + }); + var pubmed = _.find(articleids, { + idtype: 'pubmed' + }); + var pmc = _.find(articleids, { + idtype: 'pmc' + }); + return { + id: uid, + title: title, + authors: authors, + firstAuthor: sortfirstauthor, + date: pubdate, + source: source, + doi: _.get(doi, 'value', null), + pubmed: _.get(pubmed, 'value', null), + pmc: pmc ? pmc.value : null + }; + }); + }); + }, + getGoInformation: function getGoInformation(goID) { + return fetch("https://www.ebi.ac.uk/QuickGO/services/ontology/go/search?query=GO%3A".concat(goID, "&limit=1&page=1")).then(function (res) { + return res.json(); + }); + }, + getReactomeInformation: function getReactomeInformation(reactomeID) { + return fetch("https://reactome.org/ContentService/data/query/".concat(reactomeID)).then(function (res) { + return res.json(); + }); + }, + downloadFileFromPathwayCommons: function downloadFileFromPathwayCommons(uri, format) { + return this.getPCURL().then(function (url) { + return fetch(url + 'pc2/get?' + qs.stringify({ + uri: uri, + format: format + }), defaultFetchOpts); + }); + }, + search: function search(query) { + var queryClone = _.assign({}, query); + if (/^((uniprot|hgnc|hgnc.symbol):\w+|ncbi:[0-9]+)$/i.test(queryClone.q)) { + queryClone.q = queryClone.q.replace(/^(uniprot|ncbi|hgnc|hgnc.symbol):/i, ""); + } + return fetch("/api/search", { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(queryClone) + }).then(function (res) { + return res.json(); + }); + }, + searchGenes: function searchGenes(query) { + return fetch('/api/search/genes', { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + query: query + }) + }).then(function (res) { + return res.json(); + }); + }, + enrichmentAPI: function enrichmentAPI(query, type) { + return fetch("/api/enrichment/".concat(type), { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + body: JSON.stringify(query) + }).then(function (res) { + return res.json(); + }); + } +}; +module.exports = ServerAPI; + +/***/ }), + +/***/ 467: +/***/ (function(module, exports, __webpack_require__) { + +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var saveAs = __webpack_require__(91).saveAs; +var _ = __webpack_require__(6); +var Loader = __webpack_require__(38); +var _require = __webpack_require__(16), + ServerAPI = _require.ServerAPI; +var pcDownloadTypes = __webpack_require__(183); +var FileDownloadMenu = /*#__PURE__*/function (_React$Component) { + function FileDownloadMenu(props) { + var _this; + _classCallCheck(this, FileDownloadMenu); + _this = _callSuper(this, FileDownloadMenu, [props]); + _this.state = { + downloadTypes: pcDownloadTypes, + loading: false + }; + return _this; + } + _inherits(FileDownloadMenu, _React$Component); + return _createClass(FileDownloadMenu, [{ + key: "downloadFromDisplayName", + value: function downloadFromDisplayName(displayName) { + var _this2 = this; + var _this$props = this.props, + cySrv = _this$props.cySrv, + fileName = _this$props.fileName; + var downloadTypes = this.state.downloadTypes; + var option = _.find(downloadTypes, ['displayName', displayName]); + var pc2Name = option.pc2Name, + ext = option.ext, + type = option.type; + if (type === 'png') { + // The setTimeout triggers a rerender so that the loader appears on screen + this.setState({ + loading: true + }, function () { + setTimeout(function () { + saveAs(cySrv.get().png({ + output: 'blob', + scale: 2, + bg: 'white', + full: true + }), "".concat(fileName, ".").concat(ext)); + _this2.setState({ + loading: false + }); + }, 1); + }); + } else { + this.downloadFileFromPC(pc2Name, ext); + } + } + }, { + key: "downloadFileFromPC", + value: function downloadFileFromPC(format, fileExt) { + var _this3 = this; + var FILENAME_CUTOFF = 20; + var _this$props2 = this.props, + fileName = _this$props2.fileName, + uri = _this$props2.uri; + fileName = fileName.substr(0, fileName.length < FILENAME_CUTOFF ? fileName.length : FILENAME_CUTOFF).replace(/ /g, '_'); + var downloadFetch = ServerAPI.downloadFileFromPathwayCommons(uri, format).then(function (res) { + return res.text(); + }); + this.setState({ + loading: true + }, function () { + downloadFetch.then(function (content) { + content = _typeof(content) === 'object' ? JSON.stringify(content) : content; + var fileContent = new File([content], "".concat(fileName, ".").concat(fileExt), { + type: 'text/plain;charset=utf-8' + }); + saveAs(fileContent); + _this3.setState({ + loading: false + }); + }); + }); + } + }, { + key: "render", + value: function render() { + var _this4 = this; + var menuContents = this.state.downloadTypes.map(function (dt) { + var dlOption = h('div.download-option', { + onClick: function onClick() { + return _this4.downloadFromDisplayName(dt.displayName); + } + }, [h('div.download-option-header', [h('h3', dt.displayName)]), h('div.download-option-description', dt.description)]); + return dlOption; + }); + return h('div.file-download-menu', [h('h2', 'Network Downloads'), h('div.file-download-content', [].concat(_toConsumableArray(menuContents), [h(Loader, { + loaded: !this.state.loading + })]))]); + } + }]); +}(React.Component); +module.exports = FileDownloadMenu; + +/***/ }), + +/***/ 470: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var NetworkInfoMenu = /*#__PURE__*/function (_React$Component) { + function NetworkInfoMenu() { + _classCallCheck(this, NetworkInfoMenu); + return _callSuper(this, NetworkInfoMenu, arguments); + } + _inherits(NetworkInfoMenu, _React$Component); + return _createClass(NetworkInfoMenu, [{ + key: "render", + value: function render() { + var infoList = this.props.infoList; + var noInfoMessage = h('span', [h('p', 'No additional information was found for this network!'), h('p', 'Additional information about the network is normally found here, but we couldn\'t find any for this one.')]); + var comments = infoList.map(function (comment) { + return h('div', [h('p', comment.replace(/

/g, ' '))]); + }); + var additionalInfo = comments.length ? [h('div', [h('h2', 'Additional Information')].concat(comments))] : [noInfoMessage]; + return h('div', [h('div', additionalInfo)]); + } + }]); +}(React.Component); +module.exports = NetworkInfoMenu; + +/***/ }), + +/***/ 471: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var _ = __webpack_require__(6); +var classNames = __webpack_require__(14); +var _require = __webpack_require__(472), + Tab = _require.Tab, + Tabs = _require.Tabs, + TabList = _require.TabList, + TabPanel = _require.TabPanel; +var _require2 = __webpack_require__(187), + geneIntersection = _require2.geneIntersection; +var _require3 = __webpack_require__(131), + searchNodes = _require3.searchNodes; +var ExpressionColourLegend = /*#__PURE__*/function (_React$Component) { + function ExpressionColourLegend() { + _classCallCheck(this, ExpressionColourLegend); + return _callSuper(this, ExpressionColourLegend, arguments); + } + _inherits(ExpressionColourLegend, _React$Component); + return _createClass(ExpressionColourLegend, [{ + key: "render", + value: function render() { + var _this$props = this.props, + min = _this$props.min, + max = _this$props.max; + return h('div.paint-legend', [h('p', "low ".concat(min)), h('p', "high ".concat(max))]); + } + }]); +}(React.Component); +var ExpressionTableView = /*#__PURE__*/function (_React$Component2) { + function ExpressionTableView(props) { + var _this; + _classCallCheck(this, ExpressionTableView); + _this = _callSuper(this, ExpressionTableView, [props]); + _this.state = { + sortBy: 'geneName', + sortType: 'asc', + nodeSearchValue: '' + }; + return _this; + } + _inherits(ExpressionTableView, _React$Component2); + return _createClass(ExpressionTableView, [{ + key: "handleSortChange", + value: function handleSortChange(newSort) { + var _this$state = this.state, + sortBy = _this$state.sortBy, + sortType = _this$state.sortType; + if (newSort == sortBy) { + this.setState({ + sortType: sortType === 'asc' ? 'desc' : 'asc' + }); + } else { + this.setState({ + sortBy: newSort + }); + } + } + }, { + key: "handleSearchChange", + value: function handleSearchChange(newVal) { + var cy = this.props.cySrv.get(); + this.setState({ + nodeSearchValue: newVal + }, function () { + return searchNodes(cy, newVal); + }); + } + }, { + key: "generateFoldChangeList", + value: function generateFoldChangeList() { + var _this$props2 = this.props, + expressionTable = _this$props2.expressionTable, + paintMenuCtrls = _this$props2.paintMenuCtrls; + var exprClass = paintMenuCtrls.exprClass, + exprFn = paintMenuCtrls.exprFn; + var _this$state2 = this.state, + sortBy = _this$state2.sortBy, + sortType = _this$state2.sortType, + nodeSearchValue = _this$state2.nodeSearchValue; + var foldChangeExpressions = expressionTable.expressions().map(function (e) { + return { + geneName: e.geneName, + foldChange: e.foldChange(exprClass, exprFn, 'N/A') + }; + }); + var sortedFoldChanges = _.orderBy(foldChangeExpressions, [sortBy], [sortType]); + var filteredFoldChanges = sortedFoldChanges.filter(function (fc) { + var upperFc = fc.geneName.toUpperCase(); + var upperFilter = nodeSearchValue.toUpperCase(); + return upperFc.includes(upperFilter) || upperFilter.includes(upperFc); + }); + return filteredFoldChanges; + } + }, { + key: "render", + value: function render() { + var _this2 = this; + var _this$state3 = this.state, + sortBy = _this$state3.sortBy, + sortType = _this$state3.sortType; + var foldChangeExpressions = this.generateFoldChangeList(); + return h('table.expression-table-view', [h('thead', [h('tr.expression-table-header', [h('th.expression-table-header-column', { + onClick: function onClick() { + return _this2.handleSortChange('geneName'); + } + }, ['Gene', sortBy === 'geneName' ? h('i.material-icons', sortType === 'asc' ? 'keyboard_arrow_up' : 'keyboard_arrow_down') : null]), h('th.expression-table-header-column', { + onClick: function onClick() { + return _this2.handleSortChange('foldChange'); + } + }, ['Expression Ratio (Log2)', sortBy === 'foldChange' ? h('i.material-icons', sortType === 'asc' ? 'keyboard_arrow_up' : 'keyboard_arrow_down') : null])])]), h('tbody.expression-list', [h('tr.expression-entry', [h('td.expression-filter', [h('input', { + placeholder: 'Filter by gene', + onChange: function onChange(e) { + return _this2.handleSearchChange(e.target.value); + } + })])]), foldChangeExpressions.map(function (e) { + return h('tr.expression-entry', { + key: e.geneName + }, [h('td.expression-gene', e.geneName), h('td.expression-fold-change', e.foldChange)]); + })])]); + } + }]); +}(React.Component); +var PathwayResultsListView = /*#__PURE__*/function (_React$Component3) { + function PathwayResultsListView() { + _classCallCheck(this, PathwayResultsListView); + return _callSuper(this, PathwayResultsListView, arguments); + } + _inherits(PathwayResultsListView, _React$Component3); + return _createClass(PathwayResultsListView, [{ + key: "render", + value: function render() { + var _this$props3 = this.props, + pathways = _this$props3.pathways, + curPathway = _this$props3.curPathway, + expressionTable = _this$props3.expressionTable, + controller = _this$props3.controller; + var pathwayResults = pathways.map(function (pathway) { + return h('div.paint-search-result', { + className: classNames({ + 'paint-search-result-selected': curPathway.uri() === pathway.uri() + }), + onClick: function onClick() { + return controller.loadPathway(pathway); + } + }, [h('h3', pathway.name()), h('p', pathway.datasource()), h('p', "Genes matched: ".concat(geneIntersection(pathway, expressionTable).length))]); + }); + return h('div.pathways-list', _toConsumableArray(pathwayResults)); + } + }]); +}(React.Component); +var PaintMenu = /*#__PURE__*/function (_React$Component4) { + function PaintMenu() { + _classCallCheck(this, PaintMenu); + return _callSuper(this, PaintMenu, arguments); + } + _inherits(PaintMenu, _React$Component4); + return _createClass(PaintMenu, [{ + key: "analysisFns", + value: function analysisFns() { + return { + 'mean': _.mean, + 'max': _.max, + 'min': _.min + }; + } + }, { + key: "render", + value: function render() { + var _this3 = this; + var _this$props4 = this.props, + cySrv = _this$props4.cySrv, + controller = _this$props4.controller, + expressionTable = _this$props4.expressionTable, + paintMenuCtrls = _this$props4.paintMenuCtrls, + curPathway = _this$props4.curPathway, + pathways = _this$props4.pathways, + selectedIndex = _this$props4.selectedIndex; + var exprClass = paintMenuCtrls.exprClass, + exprFn = paintMenuCtrls.exprFn, + exprFnName = paintMenuCtrls.exprFnName; + var _expressionTable$comp = expressionTable.computeFoldChangeRange(exprClass, exprFn), + min = _expressionTable$comp.min, + max = _expressionTable$comp.max; + var functionSelector = h('div', ['Class: ', h('select.paint-select', { + value: exprFnName, + onChange: function onChange(e) { + return controller.handlePaintCtrlChange({ + exprFnName: e.target.value, + exprFn: _this3.analysisFns()[e.target.value] + }); + } + }, Object.entries(this.analysisFns()).map(function (entry) { + return h('option', { + value: entry[0] + }, entry[0]); + }))]); + var classSelector = h('div', ['Compare: ', h('select.paint-select', { + value: exprClass, + onChange: function onChange(e) { + return controller.handlePaintCtrlChange({ + exprClass: e.target.value + }); + } + }, expressionTable.classes.map(function (cls) { + return h('option', { + value: cls + }, cls); + })), " vs ".concat(_.difference(expressionTable.classes, [exprClass]))]); + return h('div.paint-menu', [h(Tabs, { + selectedIndex: selectedIndex, + onSelect: function onSelect(index) { + return controller.handlePaintMenuTabChange(index); + } + }, [h(TabList, [h(Tab, { + className: 'paint-drawer-tab', + selectedClassName: 'paint-drawer-tab-selected' + }, 'Expression Data'), h(Tab, { + className: 'paint-drawer-tab', + selectedClassName: 'paint-drawer-tab-selected' + }, 'Select Pathway')]), h(TabPanel, [h(ExpressionColourLegend, { + min: min, + max: max + }), h('div.paint-menu-controls', [functionSelector, classSelector]), h(ExpressionTableView, { + cySrv: cySrv, + expressionTable: expressionTable, + controller: controller, + paintMenuCtrls: paintMenuCtrls + })]), h(TabPanel, [h(PathwayResultsListView, { + controller: controller, + curPathway: curPathway, + expressionTable: expressionTable, + pathways: pathways + })])])]); + } + }]); +}(React.Component); +module.exports = PaintMenu; + +/***/ }), + +/***/ 478: +/***/ (function(module, exports, __webpack_require__) { + +var cytoscape = __webpack_require__(64); +var sbgnStyleSheet = __webpack_require__(189); +var _require = __webpack_require__(188), + MATCHED_SEARCH_CLASS = _require.MATCHED_SEARCH_CLASS; +module.exports = sbgnStyleSheet(cytoscape).selector('node').css({ + 'background-opacity': '0.4' +}).selector('node:active').css({ + 'background-opacity': '0.7' +}).selector('node[class!="compartment"]').css({ + 'font-size': 20, + 'color': 'black', + 'text-outline-color': 'white', + 'text-outline-width': 2, + 'text-outline-opacity': 0.5, + 'text-wrap': 'wrap', + 'text-max-width': 175, + 'label': function label(node) { + var label = node.data('label').split('(').join('').split(')').join('').split(':').join(' '); + return label; + } +}).selector('node[class="complex"]').css({ + 'width': 45, + 'height': 45, + 'label': function label(node) { + return node.isParent() ? '' : node.data('label'); + } +}).selector('.compoundcollapse-collapsed-node').css({ + 'font-size': 20, + 'text-max-width': 175 +}).selector('edge').css({ + 'opacity': 0.3 +}).selector('node[class="and"],node[class="or"],node[class="not"]').css({ + 'label': function label(node) { + return node.data('class'); + } +}).selector('.hidden').css({ + 'display': 'none' +}).selector(".".concat(MATCHED_SEARCH_CLASS)).css({ + 'border-width': 8, + 'border-color': 'red' +}); + +/***/ }), + +/***/ 479: +/***/ (function(module, exports, __webpack_require__) { + +var _ = __webpack_require__(6); +var h = __webpack_require__(2); +var PathwayNodeMetadataView = __webpack_require__(480); +var _require = __webpack_require__(132), + PATHWAYS_LAYOUT_OPTS = _require.PATHWAYS_LAYOUT_OPTS; +var CytoscapeTooltip = __webpack_require__(93); +var EXPAND_COLLAPSE_OPTS = { + layoutBy: _.assign({}, PATHWAYS_LAYOUT_OPTS, { + fit: false + }), + fisheye: true, + animate: true, + undoable: false, + cueEnabled: false +}; +var SHOW_TOOLTIPS_EVENT = 'showtooltip'; +var bindCyEvents = function bindCyEvents(cy) { + var hideTooltips = function hideTooltips() { + cy.elements().forEach(function (ele) { + var tooltip = ele.scratch('_tooltip'); + if (tooltip) { + tooltip.hide(); + } + }); + }; + cy.expandCollapse(EXPAND_COLLAPSE_OPTS); + cy.on(SHOW_TOOLTIPS_EVENT, 'node[class != "compartment"]', function (evt) { + var node = evt.target; + var tooltip = new CytoscapeTooltip(node.popperRef(), { + html: h(PathwayNodeMetadataView, { + node: node + }) + }); + node.scratch('_tooltip', tooltip); + tooltip.show(); + }); + cy.on('tap', function (evt) { + var tgt = evt.target; + + // if we didn't click a node, close all tooltips + if (evt.target === cy || evt.target.isEdge()) { + hideTooltips(); + return; + } + + // we clicked a node that has a tooltip open -> close it + if (tgt.scratch('_tooltip-opened')) { + hideTooltips(); + } else { + // open the tooltip for the clicked node + hideTooltips(); + tgt.emit(SHOW_TOOLTIPS_EVENT); + } + }); + + //Hide Tooltips on various graph movements + cy.on('drag', function () { + return hideTooltips(); + }); + cy.on('pan', function () { + return hideTooltips(); + }); + cy.on('zoom', function () { + return hideTooltips(); + }); + cy.on('layoutstart', function () { + return hideTooltips(); + }); + var nodeHoverMouseOver = _.debounce(function (evt) { + var node = evt.target; + var elesToHighlight = cy.collection(); + + //Create a list of the hovered node & its neighbourhood + node.neighborhood().nodes().union(node).forEach(function (node) { + elesToHighlight.merge(node.ancestors()); + elesToHighlight.merge(node.descendants()); + elesToHighlight.merge(node); + }); + elesToHighlight.merge(node.neighborhood().edges()); + + //Add highlighted class to node & its neighbourhood, unhighlighted to everything else + cy.elements().addClass('unhighlighted'); + elesToHighlight.forEach(function (ele) { + ele.removeClass('unhighlighted'); + ele.addClass('highlighted'); + }); + }, 750); + + //call style-applying and style-removing functions on 'mouseover' and 'mouseout' for non-compartment nodes + cy.on('mouseover', 'node[class!="compartment"]', nodeHoverMouseOver); + cy.on('mouseout', 'node[class!="compartment"]', function () { + nodeHoverMouseOver.cancel(); + cy.elements().removeClass('highlighted unhighlighted'); + }); +}; +module.exports = bindCyEvents; + +/***/ }), + +/***/ 480: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var _ = __webpack_require__(6); +var _require = __webpack_require__(16), + ServerAPI = _require.ServerAPI; +var _require2 = __webpack_require__(24), + NS_CHEBI = _require2.NS_CHEBI, + NS_ENSEMBL = _require2.NS_ENSEMBL, + NS_HGNC = _require2.NS_HGNC, + NS_HGNC_SYMBOL = _require2.NS_HGNC_SYMBOL, + NS_NCBI_GENE = _require2.NS_NCBI_GENE, + NS_PUBMED = _require2.NS_PUBMED, + NS_REACTOME = _require2.NS_REACTOME, + NS_UNIPROT = _require2.NS_UNIPROT; +var DEFAULT_NUM_NAMES = 3; +var SUPPORTED_COLLECTIONS = new Map([[NS_CHEBI, 'ChEBI'], [NS_ENSEMBL, 'Ensembl'], [NS_HGNC, 'HGNC'], [NS_HGNC_SYMBOL, 'HGNC'], [NS_NCBI_GENE, 'NCBI Gene'], [NS_REACTOME, 'Reactome'], [NS_UNIPROT, 'UniProt']]); +var getUriIds = function getUriIds(uris) { + return uris.map(function (uri) { + return _.last(uri.split('/')); + }); +}; + +// A component that displays a pathway node's metadata +// props: +// - cytoscape node) +var PathwayNodeMetadataView = /*#__PURE__*/function (_React$Component) { + function PathwayNodeMetadataView(props) { + var _this; + _classCallCheck(this, PathwayNodeMetadataView); + _this = _callSuper(this, PathwayNodeMetadataView, [props]); + _this.state = { + publications: [] + }; + return _this; + } + _inherits(PathwayNodeMetadataView, _React$Component); + return _createClass(PathwayNodeMetadataView, [{ + key: "componentDidMount", + value: function componentDidMount() { + var _this2 = this; + var node = this.props.node; + var metadata = node.data('metadata'); + var pubmedUris = _.get(metadata, "xrefLinks.".concat(NS_PUBMED), null); + if (pubmedUris != null) { + var pubmedIds = getUriIds(pubmedUris); + ServerAPI.getPubmedPublications(pubmedIds).then(function (publications) { + _this2.setState({ + publications: publications + }); + }); + } + } + }, { + key: "render", + value: function render() { + var node = this.props.node; + var publications = this.state.publications; + var md = node.data('metadata'); + var synonyms = md.synonyms, + type = md.type, + standardName = md.standardName, + displayName = md.displayName, + xrefLinks = md.xrefLinks; + var searchLinkQuery = node.data('class') === 'process' ? displayName : node.data('label'); + var label = node.data('label'); + if (_.isEmpty(md)) { + return h('div.cy-tooltip', [h('div.cy-tooltip-content', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', node.data('class'))])])]); + } + var dbLinks = _.keys(xrefLinks).map(function (collection) { + var link = null; + var displayName = SUPPORTED_COLLECTIONS.get(collection); + var uri = _.get(xrefLinks, "".concat(collection, "[0]")); + if (displayName && uri) link = h('a.plain-link', { + href: uri, + target: '_blank' + }, displayName); + return link; + }); + var publicationEles = publications.map(function (publication) { + var id = publication.id, + title = publication.title, + firstAuthor = publication.firstAuthor, + date = publication.date, + source = publication.source; + return h('div.cy-overflow-content', [h('a.plain-link', { + href: 'https://bioregistry.io/pubmed:' + id, + target: '_blank' + }, title), h('div', firstAuthor + ' et al. | ' + source + ' - ' + new Date(date).getFullYear().toString())]); + }); + var showType = type !== ''; + var showStdName = standardName !== ''; + var showDispName = displayName !== '' && displayName !== label; + var showSynonyms = synonyms.length > 0; + var showPubs = publicationEles.length > 0; + var showBody = showStdName || showDispName || showSynonyms || showPubs; + var showLinks = dbLinks.length > 0; + var showPcSearchLink = label || displayName; + return h('div.cy-tooltip', [h('div.cy-tooltip-content', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', "".concat(label || displayName || '')), showType ? h('div.cy-tooltip-type-chip', type) : null]), showBody ? h('div.cy-tooltip-body', [showStdName ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Name'), h('div.cy-tooltip-field-value', standardName)]) : null, showDispName ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Display Name'), h('div.cy-tooltip-field-value', displayName)]) : null, showSynonyms ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Synonyms']), h('div.cy-tooltip-field-value', synonyms.slice(0, DEFAULT_NUM_NAMES).join(', '))]) : null, showPubs ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Publications']), h('div', publicationEles)]) : null]) : null, h('div.cy-tooltip-footer', [showLinks ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Links']), h('div.cy-tooltip-links', dbLinks)]) : null]), showPcSearchLink ? h('div.cy-tooltip-call-to-action', [h('a', { + target: '_blank', + href: '/search?q=' + searchLinkQuery + }, [h('button.call-to-action', 'Find Related Pathways')])]) : null])]); + } + }]); +}(React.Component); +module.exports = PathwayNodeMetadataView; + +/***/ }), + +/***/ 481: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var IconButton = __webpack_require__(71); +var _require = __webpack_require__(131), + fit = _require.fit, + expandCollapse = _require.expandCollapse, + layout = _require.layout; +var PathwaysToolbar = /*#__PURE__*/function (_React$Component) { + function PathwaysToolbar() { + _classCallCheck(this, PathwaysToolbar); + return _callSuper(this, PathwaysToolbar, arguments); + } + _inherits(PathwaysToolbar, _React$Component); + return _createClass(PathwaysToolbar, [{ + key: "render", + value: function render() { + var _this$props = this.props, + cySrv = _this$props.cySrv, + controller = _this$props.controller, + activeMenu = _this$props.activeMenu; + var cy = cySrv.get(); + return h('div.app-toolbar', [h(IconButton, { + description: 'Extra Information', + onClick: function onClick() { + return controller.changeMenu('infoMenu'); + }, + isActive: activeMenu === 'infoMenu', + icon: 'info' + }), h(IconButton, { + description: 'Downloads', + onClick: function onClick() { + return controller.changeMenu('downloadMenu'); + }, + isActive: activeMenu === 'downloadMenu', + icon: 'file_download' + }), h(IconButton, { + description: 'Downloads', + onClick: function onClick() { + return controller.changeMenu('paintMenu'); + }, + isActive: activeMenu === 'paintMenu', + icon: 'format_paint' + }), h(IconButton, { + description: 'Expand/Collapse all complex nodes', + onClick: function onClick() { + return expandCollapse(cy); + }, + isActive: false, + icon: 'select_all' + }), h(IconButton, { + description: 'Fit pathway to screen', + onClick: function onClick() { + return fit(cy); + }, + isActive: false, + icon: 'fullscreen' + }), h(IconButton, { + description: 'Reset pathway arrangement', + onClick: function onClick() { + return layout(cy); + }, + isActive: false, + icon: 'replay' + })]); + } + }]); +}(React.Component); +module.exports = PathwaysToolbar; + +/***/ }), + +/***/ 484: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var classNames = __webpack_require__(14); +var Dropdown = /*#__PURE__*/function (_React$Component) { + function Dropdown(props) { + var _this; + _classCallCheck(this, Dropdown); + _this = _callSuper(this, Dropdown, [props]); + _this.state = { + open: false, + title: props.title + }; + _this.handleClose = function (e) { + return _this.close(e); + }; + return _this; + } + _inherits(Dropdown, _React$Component); + return _createClass(Dropdown, [{ + key: "open", + value: function open(e) { + var _this2 = this; + e.preventDefault(); + this.setState({ + open: true + }, function () { + document.addEventListener('click', _this2.handleClose); + }); + } + }, { + key: "close", + value: function close(e) { + var _this3 = this; + if (!this.el.contains(e.target)) { + this.setState({ + open: false + }, function () { + document.removeEventListener('click', _this3.handleClose); + }); + } + } + }, { + key: "handleChange", + value: function handleChange(newVal) { + var _this4 = this; + this.props.onChange(newVal); + this.setState({ + open: false, + title: newVal.label + }, function () { + document.removeEventListener('click', _this4.handleClose); + }); + } + }, { + key: "render", + value: function render() { + var _this5 = this; + var listOptions = this.props.listOptions; + var _this$state = this.state, + open = _this$state.open, + title = _this$state.title; + return h("div.dropdown", { + ref: function ref(el) { + return _this5.el = el; + }, + className: classNames(this.props.className, { + 'dropdown-active': open + }) + }, [h('div.dropdown-header', { + onClick: function onClick(e) { + return _this5.open(e); + } + }, [h('div.dropdown-title', title), h('i.material-icons', open ? 'keyboard_arrow_up' : 'keyboard_arrow_down')]), open ? h('div.dropdown-options', listOptions.map(function (dOpt) { + return h('div.dropdown-option', [h('div', { + key: dOpt.value, + onClick: function onClick() { + return _this5.handleChange(dOpt); + } + }, dOpt.label)]); + })) : null]); + } + }]); +}(React.Component); +module.exports = Dropdown; + +/***/ }), + +/***/ 485: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var Card = /*#__PURE__*/function (_React$Component) { + function Card() { + _classCallCheck(this, Card); + return _callSuper(this, Card, arguments); + } + _inherits(Card, _React$Component); + return _createClass(Card, [{ + key: "render", + value: function render() { + return h('div.card', [this.props.children]); + } + }]); +}(React.Component); +var CardGrid = /*#__PURE__*/function (_React$Component2) { + function CardGrid() { + _classCallCheck(this, CardGrid); + return _callSuper(this, CardGrid, arguments); + } + _inherits(CardGrid, _React$Component2); + return _createClass(CardGrid, [{ + key: "render", + value: function render() { + return h('div.card-grid', this.props.children.map(function (item) { + return h(Card, [item]); + })); + } + }]); +}(React.Component); +module.exports = { + Card: Card, + CardGrid: CardGrid +}; + +/***/ }), + +/***/ 486: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var classNames = __webpack_require__(14); +var AppCard = /*#__PURE__*/function (_React$Component) { + function AppCard(props) { + _classCallCheck(this, AppCard); + return _callSuper(this, AppCard, [props]); + } + _inherits(AppCard, _React$Component); + return _createClass(AppCard, [{ + key: "render", + value: function render() { + var _this$props = this.props, + enabled = _this$props.enabled, + hint = _this$props.hint, + url = _this$props.url, + image = _this$props.image, + imageClass = _this$props.imageClass, + title = _this$props.title, + body = _this$props.body, + linkifyContent = _this$props.linkifyContent; + return h('.app-card', { + className: classNames({ + 'app-card-disabled': !enabled + }) + }, [h('a', { + href: url, + target: '_blank' + }, [h('div.app-card-image', { + className: classNames(_defineProperty(_defineProperty({}, imageClass, !!imageClass), 'background', !!imageClass)) + }, [image])]), h('a.app-card-content-link', linkifyContent ? { + href: url, + target: '_blank' + } : {}, [h('div.app-card-content', [h('div.app-card-header', [h('h4.app-card-title', [title]), h('span.app-card-hint', [hint])]), h('div.app-card-body', [body])])])]); + } + }]); +}(React.Component); // Specifies the default values for props: +AppCard.defaultProps = { + enabled: true, + hint: null, + imageClass: null, + image: null +}; +module.exports = { + AppCard: AppCard +}; + +/***/ }), + +/***/ 487: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var _require = __webpack_require__(60), + Link = _require.Link; +var EmptyNetwork = /*#__PURE__*/function (_React$Component) { + function EmptyNetwork() { + _classCallCheck(this, EmptyNetwork); + return _callSuper(this, EmptyNetwork, arguments); + } + _inherits(EmptyNetwork, _React$Component); + return _createClass(EmptyNetwork, [{ + key: "render", + value: function render() { + var _this$props = this.props, + msg = _this$props.msg, + showPcLink = _this$props.showPcLink; + var linkToPcSearch = showPcLink ? h('div', ['Return to', h(Link, { + className: 'plain-link', + to: { + pathname: '/' + } + }, ' Pathway Commons Search')]) : null; + return h('div.empty-network', [h('div.empty-network-header', [h('div.pc-logo'), h('h1.empty-network-message', msg)]), linkToPcSearch]); + } + }]); +}(React.Component); +module.exports = EmptyNetwork; + +/***/ }), + +/***/ 488: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var classNames = __webpack_require__(14); +var IconButton = __webpack_require__(71); + +// a sidebar for a network view +// props: +// - controller: parent component that implements changeMenu +// - activeMenu: a string representing which menu to open +// - children: each menu should be a child for this sidebar +// and contain a key that can be used to compare +// against the current menu +// + +// example usage: +// class ParentComponent extends React.Component { +// constructor(props){ +// this.state = { +// activeMenu: 'menu1' +// }; +// } +// changeMenu(newMenu){ +// this.setState({ activeMenu: newMenu }); +// } +// render(){ +// let { activeMenu } = this.state; +// return h(Sidebar, { controller: this, activeMenu }, [ +// h(Menu1, { key: 'menu1' }), +// h(Menu2, { key: 'menu2' }) +// ]) +// } +// } +var Sidebar = /*#__PURE__*/function (_React$Component) { + function Sidebar() { + _classCallCheck(this, Sidebar); + return _callSuper(this, Sidebar, arguments); + } + _inherits(Sidebar, _React$Component); + return _createClass(Sidebar, [{ + key: "render", + value: function render() { + var _this$props = this.props, + controller = _this$props.controller, + activeMenu = _this$props.activeMenu, + children = _this$props.children; + var activeMenuContent = children.find(function (child) { + return child.key === activeMenu; + }); + return h('div.sidebar-menu', { + className: classNames({ + 'sidebar-menu-open': activeMenu != 'closeMenu' + }) + }, [h('div.sidebar-close', [h(IconButton, { + description: 'Close the sidebar', + onClick: function onClick() { + return controller.changeMenu('closeMenu'); + }, + isActive: false, + icon: 'close' + })]), h('div.sidebar-content', [h('div.sidebar-text', [activeMenuContent])])]); + } + }]); +}(React.Component); +module.exports = Sidebar; + +/***/ }), + +/***/ 489: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var classNames = __webpack_require__(14); +var CytoscapeNetwork = /*#__PURE__*/function (_React$Component) { + function CytoscapeNetwork() { + _classCallCheck(this, CytoscapeNetwork); + return _callSuper(this, CytoscapeNetwork, arguments); + } + _inherits(CytoscapeNetwork, _React$Component); + return _createClass(CytoscapeNetwork, [{ + key: "componentDidMount", + value: function componentDidMount() { + var _this$props = this.props, + cySrv = _this$props.cySrv, + _this$props$onMount = _this$props.onMount, + onMount = _this$props$onMount === void 0 ? function () {} : _this$props$onMount; + cySrv.mount(this.network); + onMount(); + } + }, { + key: "componentWillUnmount", + value: function componentWillUnmount() { + var cySrv = this.props.cySrv; + cySrv.destroy(); + } + }, { + key: "render", + value: function render() { + var _this = this; + return h('div.network', { + className: classNames('network', this.props.className) + }, [h('div.network-cy#cy', { + ref: function ref(dom) { + return _this.network = dom; + } + })]); + } + }]); +}(React.Component); +module.exports = CytoscapeNetwork; + +/***/ }), + +/***/ 490: +/***/ (function(module, exports) { + +module.exports = {"dataSetExpressionList":[{"dataSets":["TEP"],"numConditions":10,"columnNames":["MGH-BrCa-H-74_htsqct","MGH-BrCa-H-68_htsqct","MGH-BrCa-H-66_htsqct","MGH-BrCa-H-59_htsqct","MGH-BrCa-H-11_htsqct","HD-5_htsqct","HD-4_htsqct","HD-3-1_htsqct","HD-2-1_htsqct","HD-1_htsqct"],"expressionUniverse":6211,"expressions":[{"geneName":"TP53","values":[116.7492,74.6966,85.4111,283.3992,55.8744,632.8274,509.1714,545.0434,577.2644,291.2219]},{"geneName":"ZNF385A","values":[116.7492,74.6966,85.4111,283.3992,55.8744,506.2619,407.3371,436.0348,461.8115,232.9776]},{"geneName":"PCBP4","values":[350.2476,224.0899,256.2334,850.1974,167.6233,126.5655,101.8343,109.0087,115.4529,58.2444]},{"geneName":"CDKN1A","values":[116.7492,74.6966,85.4111,283.3992,55.8744,379.6964,305.5029,327.0261,346.3587,174.7332]}]}],"dataSetClassList":[{"dataSet":"TEP","classes":["BrCa","BrCa","BrCa","BrCa","BrCa","HD","HD","HD","HD","HD"],"phenotype1":"BrCa","phenotype2":"HD"}]} + +/***/ }), + +/***/ 491: +/***/ (function(module, exports) { + +module.exports = [{"graph":{"edges":[{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f--TO--INP_http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","portTarget":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","target":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"production","id":"OUT_http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT--TO--http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","portSource":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","portTarget":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","source":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","target":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f--TO--INP_http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","portTarget":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","target":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"production","id":"OUT_http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT--TO--http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","portSource":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","portTarget":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","source":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","target":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"inhibition","id":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049--TO--http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","portTarget":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","target":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56--TO--INP_http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56","portTarget":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56","target":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56--TO--INP_http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56","portTarget":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56","target":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Protein_c1f5c065e6bc72127ca56ee0bf005494--TO--INP_http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Protein_c1f5c065e6bc72127ca56ee0bf005494","portTarget":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Protein_c1f5c065e6bc72127ca56ee0bf005494","target":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"production","id":"OUT_http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT--TO--http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","portSource":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","portTarget":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","source":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","target":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"stimulation","id":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334--TO--http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","portTarget":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","target":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"production","id":"OUT_http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT--TO--http://pathwaycommons.org/pc2/Protein_9d656b3e41b0c69ff45a305f058b3cef","portSource":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","portTarget":"http://pathwaycommons.org/pc2/Protein_9d656b3e41b0c69ff45a305f058b3cef","source":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","target":"http://pathwaycommons.org/pc2/Protein_9d656b3e41b0c69ff45a305f058b3cef"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Complex_e4c55477314b3d4bfd4b8f47ceff3e14--TO--INP_http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Complex_e4c55477314b3d4bfd4b8f47ceff3e14","portTarget":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Complex_e4c55477314b3d4bfd4b8f47ceff3e14","target":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"production","id":"OUT_http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT--TO--http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","portSource":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","portTarget":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","source":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","target":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba--TO--INP_http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","portTarget":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","target":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT"}},{"data":{"bendPointPositions":[],"cardinality":0,"class":"consumption","id":"http://pathwaycommons.org/pc2/Protein_74816ffc8af8e1d43b16b1226a5c0db2--TO--INP_http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","portSource":"http://pathwaycommons.org/pc2/Protein_74816ffc8af8e1d43b16b1226a5c0db2","portTarget":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","source":"http://pathwaycommons.org/pc2/Protein_74816ffc8af8e1d43b16b1226a5c0db2","target":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT"}}],"nodes":[{"data":{"bbox":{"h":15,"w":15,"x":7.5,"y":7.5},"class":"process","clonemarker":false,"id":"http://identifiers.org/reactome/R-HSA-6803403_LEFTTORIGHT","label":"","metadata":{"comments":["Edited: Orlic-Milacic, Marija, 2015-10-14","PCBP4 binds the 3'-UTR of the CDKN1A (p21) mRNA and reduces its stability (Scoumanne et al. 2011).","Reviewed: Zaccara, Sara, 2016-02-04","Authored: Orlic-Milacic, Marija, 2015-10-14","Reviewed: Inga, Alberto, 2016-02-04"],"databaseIds":{"pubmed":["20817677"],"reactome":["R-HSA-6803403"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"PCBP4 binds the CDKN1A mRNA","standardName":"","synonyms":[],"type":"BiochemicalReaction"},"parent":"cytosol","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":15,"w":15,"x":7.5,"y":7.5},"class":"process","clonemarker":false,"id":"http://identifiers.org/reactome/R-HSA-6803411_LEFTTORIGHT","label":"","metadata":{"comments":["Reviewed: Zaccara, Sara, 2016-02-04","Reviewed: Inga, Alberto, 2016-02-04","Edited: Orlic-Milacic, Marija, 2015-10-14","Authored: Orlic-Milacic, Marija, 2015-10-14","PCBP4 binding to the 3'-UTR of the CDKN1A (p21) mRNA reduces half-life of the CDKN1A mRNA and the amount of CDKN1A protein. Upon DNA damage, TP53-mediated induction of CDKN1A is rapid, while the induction of PCBP4 is more gradual. It is hypothesized that, under prolonged stress, PCBP4-mediated down-regulation of CDKN1A may switch from G1 cell cycle arrest to G2 arrest, which may precede apoptosis (Scoumanne et al. 2011)."],"databaseIds":{"pubmed":["20817677"],"reactome":["R-HSA-6803411"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"PCBP4 modulates CDKN1A translation","standardName":"","synonyms":[],"type":"BiochemicalReaction"},"parent":"cytosol","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":50,"x":25,"y":15},"class":"nucleic acid feature","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f","label":"CDKN1A","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Rna95","Reactome DB_ID: 6803386"],"databaseIds":{"ensembl":["ENST00000244741"],"hgnc.symbol":["CDKN1A"],"reactome":["R-HSA-6803386"],"uniprot":["P38936"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p21 mRNA","standardName":"","synonyms":["CDKN1A mRNA","ENSEMBL:ENST00000244741 CDKN1A"],"type":"Rna"},"parent":"cytosol","stateVariables":[],"unitsOfInformation":[{"class":"unit of information","id":null,"label":{"text":"mt:RNA"}}]}},{"data":{"bbox":{"h":34,"w":54,"x":25,"y":15},"class":"complex","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","label":"PCBP4:CDKN1A mRNA","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Complex4632","Reactome DB_ID: 6803405"],"databaseIds":{"reactome":["R-HSA-6803405"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"PCBP4:CDKN1A mRNA","standardName":"","synonyms":[],"type":"Complex"},"parent":"cytosol","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":50,"x":25,"y":15},"class":"nucleic acid feature","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Rna_b0c799710a192ab1ed6794a6332e3b0f_5178567a47ecc386c9cd4c86331da218","label":"CDKN1A","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Rna95","Reactome DB_ID: 6803386"],"databaseIds":{"ensembl":["ENST00000244741"],"hgnc.symbol":["CDKN1A"],"reactome":["R-HSA-6803386"],"uniprot":["P38936"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p21 mRNA","standardName":"","synonyms":["CDKN1A mRNA","ENSEMBL:ENST00000244741 CDKN1A"],"type":"Rna"},"parent":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","stateVariables":[],"unitsOfInformation":[{"class":"unit of information","id":null,"label":{"text":"mt:RNA"}}]}},{"data":{"bbox":{"h":30,"w":48,"x":24,"y":15},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_c1f5c065e6bc72127ca56ee0bf005494_5178567a47ecc386c9cd4c86331da218","label":"PCBP4","metadata":{"comments":["Reactome DB_ID: 6803382","REPLACED http://www.reactome.org/biopax/64/48887#Protein10458"],"databaseIds":{"hgnc.symbol":["PCBP4"],"reactome":["R-HSA-6803382"],"uniprot":["P57723"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"PCBP4","standardName":"Poly(rC)-binding protein 4","synonyms":["Alpha-CP4","Poly(rC)-binding protein 4","MCG10","PCBP4"],"type":"Protein"},"parent":"http://pathwaycommons.org/pc2/Complex_e5eadb29e1ffa1af7e4743cca5684049","stateVariables":[{"class":"state variable","id":null,"state":{"value":"x[1 - 403]","variable":""}}],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":48,"x":24,"y":15},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_c1f5c065e6bc72127ca56ee0bf005494","label":"PCBP4","metadata":{"comments":["Reactome DB_ID: 6803382","REPLACED http://www.reactome.org/biopax/64/48887#Protein10458"],"databaseIds":{"hgnc.symbol":["PCBP4"],"reactome":["R-HSA-6803382"],"uniprot":["P57723"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"PCBP4","standardName":"Poly(rC)-binding protein 4","synonyms":["Alpha-CP4","Poly(rC)-binding protein 4","MCG10","PCBP4"],"type":"Protein"},"parent":"cytosol","stateVariables":[{"class":"state variable","id":null,"state":{"value":"x[1 - 403]","variable":""}}],"unitsOfInformation":[]}},{"data":{"bbox":{"h":15,"w":15,"x":7.5,"y":7.5},"class":"process","clonemarker":false,"id":"http://identifiers.org/reactome/R-HSA-6803801_LEFTTORIGHT","label":"","metadata":{"comments":["Reviewed: Inga, Alberto, 2016-02-04","Edited: Orlic-Milacic, Marija, 2015-10-14","TP53 (p53) binds at least two p53 response elements in the promoter of the CDKN1A (p21, WAF1) gene (El-Deiry et al. 1993, Espinosa et al. 2003). Formation of the complex of TP53 and ZNF385A (HZF) facilitates binding of TP53 to the CDKN1A promoter (Das et al. 2007).","Authored: Orlic-Milacic, M, 2013-07-15","Reviewed: Samarajiwa, Shamith, 2013-09-03","Reviewed: Zaccara, Sara, 2016-02-04","Authored: Orlic-Milacic, Marija, 2015-10-14"],"databaseIds":{"pubmed":["14580351","8242752","17719541"],"reactome":["R-HSA-6803801"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"TP53 in complex with ZNF385A binds the CDKN1A promoter","standardName":"","synonyms":[],"type":"BiochemicalReaction"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":15,"w":15,"x":7.5,"y":7.5},"class":"process","clonemarker":false,"id":"http://identifiers.org/reactome/R-HSA-6803388_LEFTTORIGHT","label":"","metadata":{"comments":["Authored: Orlic-Milacic, Marija, 2015-10-14","Edited: Orlic-Milacic, Marija, 2015-10-14","Reviewed: Inga, Alberto, 2016-02-04","Reviewed: Coqueret, O, 2006-10-06 08:59:06","Binding of TP53 (p53) to its response elements in the promoter of the CDKN1A (p21) gene stimulates CDKN1A transcription (El-Deiry et al. 1993). Binding of ZNF385A (HZF) to the DNA binding domain of TP53 facilitates CDKN1A induction and the consequent cell cycle arrest (Das et al. 2007).","Reviewed: Zaccara, Sara, 2016-02-04","Authored: Matthews, L, 2006-09-29 13:54:26"],"databaseIds":{"pubmed":["17719541","8242752"],"reactome":["R-HSA-6803388"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"TP53 stimulates CDKN1A (p21) transcription","standardName":"","synonyms":[],"type":"BiochemicalReaction"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":15,"w":15,"x":7.5,"y":7.5},"class":"process","clonemarker":false,"id":"http://identifiers.org/reactome/R-HSA-6803719_LEFTTORIGHT","label":"","metadata":{"comments":["Reviewed: Inga, Alberto, 2016-02-04","Reviewed: Zaccara, Sara, 2016-02-04","ZNF385A (HZF) forms a complex with TP53 (p53), interacting with the DNA binding domain of TP53. The complex of TP53 and ZNF385A associates with p53 response elements of cell cycle arrest genes, such as CDKN1A (p21) and stimulates their transcription. Under prolonged stress, ZNF385A undergoes ubiquitination and proteasome-mediated degradation, which coincides with expression of TP53-regulated pro-apoptotic genes (Das et al. 2007).","Authored: Orlic-Milacic, Marija, 2015-10-14","Edited: Orlic-Milacic, Marija, 2015-10-14"],"databaseIds":{"pubmed":["17719541"],"reactome":["R-HSA-6803719"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"TP53 binds ZNF385A","standardName":"","synonyms":[],"type":"BiochemicalReaction"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":25,"w":48,"x":24,"y":12.5},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_74816ffc8af8e1d43b16b1226a5c0db2","label":"ZNF385A","metadata":{"comments":["Reactome DB_ID: 6803421","REPLACED http://www.reactome.org/biopax/64/48887#Protein10457"],"databaseIds":{"hgnc.symbol":["ZNF385A"],"reactome":["R-HSA-6803421"],"uniprot":["Q96PM9"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"HZF","standardName":"Zinc finger protein 385A","synonyms":["Zinc finger protein 385A","ZNF385A","ZNF385","Retinal zinc finger protein","Hematopoietic zinc finger protein","RZF","HZF"],"type":"Protein"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":34,"w":89,"x":42.5,"y":15},"class":"complex","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Complex_e4c55477314b3d4bfd4b8f47ceff3e14","label":"p-S15,S20-TP53 Tetramer","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Complex4625","Reactome DB_ID: 3222171"],"databaseIds":{"reactome":["R-HSA-3222171"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p-S15,S20-TP53 Tetramer","standardName":"","synonyms":[],"type":"Complex"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":85,"x":42.5,"y":15},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_1bda2d80d7f26e79f1ec46b69ea62814_118feaa670629f9e2393b181ce87eec2","label":"TP53","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Protein10449","Reactome DB_ID: 69683"],"databaseIds":{"hgnc.symbol":["TP53"],"reactome":["R-HSA-69683"],"uniprot":["P04637"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p-S15,S20-TP53","standardName":"Cellular tumor antigen p53","synonyms":["Tumor suppressor p53","TP53","Antigen NY-CO-13","Phosphoprotein p53","P53"],"type":"Protein"},"parent":"http://pathwaycommons.org/pc2/Complex_e4c55477314b3d4bfd4b8f47ceff3e14","stateVariables":[{"class":"state variable","id":null,"state":{"value":"opser-51","variable":"20"}},{"class":"state variable","id":null,"state":{"value":"opser-51","variable":"15"}},{"class":"state variable","id":null,"state":{"value":"x[1 - 393]","variable":""}}],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":50,"x":25,"y":15},"class":"nucleic acid feature","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56","label":"CDKN1A","metadata":{"comments":["Reactome DB_ID: 3786256","REPLACED http://www.reactome.org/biopax/64/48887#Dna50"],"databaseIds":{"ensembl":["ENSG00000124762"],"hgnc.symbol":["CDKN1A"],"reactome":["R-HSA-3786256"],"uniprot":["P38936"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p21 gene","standardName":"","synonyms":["WAF1 gene","CIP1 gene","CDKN1A gene","PIC1","CAP20","CDKN1A","WAF1","MDA6","CDKN1","SDI1","ENSEMBL:ENSG00000124762 CDKN1A"],"type":"Dna"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[{"class":"unit of information","id":null,"label":{"text":"mt:DNA"}}]}},{"data":{"bbox":{"h":30,"w":48,"x":24,"y":15},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_9d656b3e41b0c69ff45a305f058b3cef","label":"CDKN1A","metadata":{"comments":["Reactome DB_ID: 182585","REPLACED http://www.reactome.org/biopax/64/48887#Protein1393"],"databaseIds":{"hgnc.symbol":["CDKN1A"],"reactome":["R-HSA-182585"],"uniprot":["P38936"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p21","standardName":"Cyclin-dependent kinase inhibitor 1","synonyms":["CDKN1A","CAP20","WAF1","CDKN1","PIC1","p21","MDA-6","MDA6","Melanoma differentiation-associated protein 6","SDI1","CDK-interacting protein 1","CIP1"],"type":"Protein"},"parent":"nucleoplasm","stateVariables":[{"class":"state variable","id":null,"state":{"value":"x[2 - 164]","variable":""}}],"unitsOfInformation":[]}},{"data":{"bbox":{"h":34,"w":89,"x":42.5,"y":15},"class":"complex","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","label":"p-S15,S20-TP53 Tetramer:ZNF385A","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Complex4630","Reactome DB_ID: 6803718"],"databaseIds":{"reactome":["R-HSA-6803718"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p-S15,S20-TP53 Tetramer:ZNF385A","standardName":"","synonyms":[],"type":"Complex"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":85,"x":42.5,"y":15},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_1bda2d80d7f26e79f1ec46b69ea62814_8f3ce9a594ac249a622a48b0f53f0b29","label":"TP53","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Protein10449","Reactome DB_ID: 69683"],"databaseIds":{"hgnc.symbol":["TP53"],"reactome":["R-HSA-69683"],"uniprot":["P04637"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p-S15,S20-TP53","standardName":"Cellular tumor antigen p53","synonyms":["Tumor suppressor p53","TP53","Antigen NY-CO-13","Phosphoprotein p53","P53"],"type":"Protein"},"parent":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","stateVariables":[{"class":"state variable","id":null,"state":{"value":"opser-51","variable":"20"}},{"class":"state variable","id":null,"state":{"value":"opser-51","variable":"15"}},{"class":"state variable","id":null,"state":{"value":"x[1 - 393]","variable":""}}],"unitsOfInformation":[]}},{"data":{"bbox":{"h":25,"w":48,"x":24,"y":12.5},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_74816ffc8af8e1d43b16b1226a5c0db2_8f3ce9a594ac249a622a48b0f53f0b29","label":"ZNF385A","metadata":{"comments":["Reactome DB_ID: 6803421","REPLACED http://www.reactome.org/biopax/64/48887#Protein10457"],"databaseIds":{"hgnc.symbol":["ZNF385A"],"reactome":["R-HSA-6803421"],"uniprot":["Q96PM9"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"HZF","standardName":"Zinc finger protein 385A","synonyms":["Zinc finger protein 385A","ZNF385A","ZNF385","Retinal zinc finger protein","Hematopoietic zinc finger protein","RZF","HZF"],"type":"Protein"},"parent":"http://pathwaycommons.org/pc2/Complex_3b9bde21e8f130870b91f73ac31dcaba","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":34,"w":89,"x":42.5,"y":15},"class":"complex","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","label":"p-S15,S20-TP53 Tetramer:ZNF385A:CDKN1A Gene","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Complex4631","Reactome DB_ID: 6803802"],"databaseIds":{"reactome":["R-HSA-6803802"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p-S15,S20-TP53 Tetramer:ZNF385A:CDKN1A Gene","standardName":"","synonyms":[],"type":"Complex"},"parent":"nucleoplasm","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":85,"x":42.5,"y":15},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_1bda2d80d7f26e79f1ec46b69ea62814_e084db4218995c6713265fec7de6398c","label":"TP53","metadata":{"comments":["REPLACED http://www.reactome.org/biopax/64/48887#Protein10449","Reactome DB_ID: 69683"],"databaseIds":{"hgnc.symbol":["TP53"],"reactome":["R-HSA-69683"],"uniprot":["P04637"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p-S15,S20-TP53","standardName":"Cellular tumor antigen p53","synonyms":["Tumor suppressor p53","TP53","Antigen NY-CO-13","Phosphoprotein p53","P53"],"type":"Protein"},"parent":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","stateVariables":[{"class":"state variable","id":null,"state":{"value":"opser-51","variable":"20"}},{"class":"state variable","id":null,"state":{"value":"opser-51","variable":"15"}},{"class":"state variable","id":null,"state":{"value":"x[1 - 393]","variable":""}}],"unitsOfInformation":[]}},{"data":{"bbox":{"h":30,"w":50,"x":25,"y":15},"class":"nucleic acid feature","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Dna_91b0bb49fefe3673ba23d46ddacefc56_e084db4218995c6713265fec7de6398c","label":"CDKN1A","metadata":{"comments":["Reactome DB_ID: 3786256","REPLACED http://www.reactome.org/biopax/64/48887#Dna50"],"databaseIds":{"ensembl":["ENSG00000124762"],"hgnc.symbol":["CDKN1A"],"reactome":["R-HSA-3786256"],"uniprot":["P38936"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"p21 gene","standardName":"","synonyms":["WAF1 gene","CIP1 gene","CDKN1A gene","PIC1","CAP20","CDKN1A","WAF1","MDA6","CDKN1","SDI1","ENSEMBL:ENSG00000124762 CDKN1A"],"type":"Dna"},"parent":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","stateVariables":[],"unitsOfInformation":[{"class":"unit of information","id":null,"label":{"text":"mt:DNA"}}]}},{"data":{"bbox":{"h":25,"w":48,"x":24,"y":12.5},"class":"macromolecule","clonemarker":false,"id":"http://pathwaycommons.org/pc2/Protein_74816ffc8af8e1d43b16b1226a5c0db2_e084db4218995c6713265fec7de6398c","label":"ZNF385A","metadata":{"comments":["Reactome DB_ID: 6803421","REPLACED http://www.reactome.org/biopax/64/48887#Protein10457"],"databaseIds":{"hgnc.symbol":["ZNF385A"],"reactome":["R-HSA-6803421"],"uniprot":["Q96PM9"]},"datasource":"http://pathwaycommons.org/pc2/reactome","displayName":"HZF","standardName":"Zinc finger protein 385A","synonyms":["Zinc finger protein 385A","ZNF385A","ZNF385","Retinal zinc finger protein","Hematopoietic zinc finger protein","RZF","HZF"],"type":"Protein"},"parent":"http://pathwaycommons.org/pc2/Complex_293d627d8f9f22b9e72ebcd86909d334","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":38,"w":58,"x":25,"y":15},"class":"compartment","clonemarker":false,"id":"cytosol","label":"cytosol","metadata":{},"parent":"","stateVariables":[],"unitsOfInformation":[]}},{"data":{"bbox":{"h":38,"w":93,"x":42.5,"y":15},"class":"compartment","clonemarker":false,"id":"nucleoplasm","label":"nucleoplasm","metadata":{},"parent":"","stateVariables":[],"unitsOfInformation":[]}}],"pathwayMetadata":{"comments":["Both p53-independent and p53-dependent mechanisms of induction of p21 mRNA have been demonstrated. p21 is transcriptionally activated by p53 after DNA damage (el-Deiry et al., 1993)."],"dataSource":["Reactome"],"organism":["Homo sapiens"],"title":["Transcriptional activation of cell cycle inhibitor p21"],"uri":"http://identifiers.org/reactome/R-HSA-69895"}}}] + +/***/ }), + +/***/ 492: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var Loader = __webpack_require__(38); +var classNames = __webpack_require__(14); +var CytoscapeService = __webpack_require__(90); +var _require = __webpack_require__(16), + ServerAPI = _require.ServerAPI; +var PathwaysToolbar = __webpack_require__(493); +var _require2 = __webpack_require__(55), + PcLogoLink = _require2.PcLogoLink, + CytoscapeNetwork = _require2.CytoscapeNetwork; +var Pathway = __webpack_require__(182); +var _require3 = __webpack_require__(194), + stylesheet = _require3.stylesheet, + bindCyEvents = _require3.bindCyEvents, + PATHWAYS_LAYOUT_OPTS = _require3.PATHWAYS_LAYOUT_OPTS; +var _require4 = __webpack_require__(63), + TimeoutError = _require4.TimeoutError; +var _require5 = __webpack_require__(73), + ErrorMessage = _require5.ErrorMessage; +var _require6 = __webpack_require__(94), + Contribute = _require6.Contribute; +var PathwayTitle = __webpack_require__(499); +var Pathways = /*#__PURE__*/function (_React$Component) { + function Pathways(props) { + var _this; + _classCallCheck(this, Pathways); + _this = _callSuper(this, Pathways, [props]); + _this.state = { + cySrv: new CytoscapeService({ + style: stylesheet, + onMount: bindCyEvents + }), + pathway: new Pathway(), + activeMenu: 'closeMenu', + loading: true, + networkEmpty: false + }; + if (true) { + _this.state.cySrv.getPromise().then(function (cy) { + return window.cy = cy; + }); + } + return _this; + } + + // onMount prop passed to CytoscapeNetwork + // called after CytoscapeNetwork has mounted + _inherits(Pathways, _React$Component); + return _createClass(Pathways, [{ + key: "loadPathway", + value: function loadPathway() { + var _this2 = this; + var _this$state = this.state, + pathway = _this$state.pathway, + cySrv = _this$state.cySrv; + var apiOpts = this.props.apiOpts; + var initializeCytoscape = function initializeCytoscape(pathway) { + var cy = cySrv.get(); + cy.remove('*'); + cy.add(pathway.cyJson()); + var layout = cy.layout(PATHWAYS_LAYOUT_OPTS); + layout.on('layoutstop', function () { + _this2.setState({ + loading: false, + pathway: pathway, + error: null + }); + }); + layout.run(); + }; + ServerAPI.getAPIResource(apiOpts).then(function (pathwayJSON) { + if (pathwayJSON.graph.nodes.length === 0) { + _this2.setState({ + loading: false, + networkEmpty: true + }); + return; + } + pathway.load(pathwayJSON); + initializeCytoscape(pathway); + }).catch(function (e) { + return _this2.setState({ + error: e + }); + }); + } + }, { + key: "render", + value: function render() { + var _this3 = this; + var _this$state2 = this.state, + loading = _this$state2.loading, + pathway = _this$state2.pathway, + cySrv = _this$state2.cySrv, + networkEmpty = _this$state2.networkEmpty, + error = _this$state2.error; + var downloadOpts = this.props.downloadOpts; + var errorMessage; + if (networkEmpty) { + errorMessage = h(ErrorMessage, { + title: 'No pathway data available. Please view another result', + footer: null + }); + } else if (error instanceof TimeoutError) { + errorMessage = h(ErrorMessage, { + title: 'This is taking longer that we expected', + body: 'Try again later.', + logo: true + }); + } else if (error) { + errorMessage = h(ErrorMessage, { + logo: true + }); + } + var appBar = h('div.app-bar', [h('div.app-bar-branding', [h(PcLogoLink), h(PathwayTitle, { + pathway: pathway + })]), h(PathwaysToolbar, { + cySrv: cySrv, + pathway: pathway, + downloadOpts: downloadOpts + }), h(Contribute, { + text: 'Add my pathway' + })]); + var content = !errorMessage ? [h(Loader, { + loaded: !loading, + options: { + left: '50%', + color: '#16a085' + } + }, [appBar]), h(CytoscapeNetwork, { + cySrv: cySrv, + onMount: function onMount() { + return _this3.loadPathway(); + }, + className: classNames({ + 'network-loading': loading + }) + })] : [errorMessage]; + return h('div.pathways', content); + } + }]); +}(React.Component); +module.exports = Pathways; + +/***/ }), + +/***/ 493: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var ReactDom = __webpack_require__(54); +var h = __webpack_require__(2); +var Popover = __webpack_require__(72); +var InfoMenu = __webpack_require__(494); +var FileDownloadMenu = __webpack_require__(495); +var IconButton = __webpack_require__(71); +var _require = __webpack_require__(194), + fit = _require.fit, + expandCollapse = _require.expandCollapse, + layout = _require.layout, + searchNodes = _require.searchNodes; +var PathwaysToolbar = /*#__PURE__*/function (_React$Component) { + function PathwaysToolbar(props) { + var _this; + _classCallCheck(this, PathwaysToolbar); + _this = _callSuper(this, PathwaysToolbar, [props]); + _this.state = { + searchValue: '' + }; + return _this; + } + _inherits(PathwaysToolbar, _React$Component); + return _createClass(PathwaysToolbar, [{ + key: "handleNodeSearchChange", + value: function handleNodeSearchChange(searchVal) { + var _this2 = this; + this.setState({ + searchValue: searchVal + }, function () { + return searchNodes(_this2.props.cySrv.get(), searchVal); + }); + } + }, { + key: "focusNodeSearch", + value: function focusNodeSearch() { + ReactDom.findDOMNode(this).querySelector('.element-search-input').focus(); + } + }, { + key: "render", + value: function render() { + var _this3 = this; + var _this$props = this.props, + cySrv = _this$props.cySrv, + pathway = _this$props.pathway, + downloadOpts = _this$props.downloadOpts; + var searchValue = this.state.searchValue; + var cy = cySrv.get(); + return h('div.app-toolbar', [h(Popover, { + tippy: { + position: 'bottom', + html: h(InfoMenu, { + key: 'infoMenu', + infoList: pathway.comments() + }) + } + }, [h(IconButton, { + description: 'Extra Information', + icon: 'info' + })]), h(Popover, { + tippy: { + position: 'bottom', + html: h(FileDownloadMenu, { + key: 'downloadMenu', + cySrv: cySrv, + fileName: pathway.name(), + uri: pathway.uri(), + downloadOpts: downloadOpts + }) + } + }, [h(IconButton, { + description: 'Downloads', + icon: 'file_download' + })]), h(IconButton, { + description: 'Expand/Collapse all complex nodes', + onClick: function onClick() { + return expandCollapse(cy); + }, + icon: 'select_all' + }), h(IconButton, { + description: 'Fit pathway to screen', + onClick: function onClick() { + return fit(cy); + }, + icon: 'fullscreen' + }), h(IconButton, { + description: 'Reset pathway arrangement', + onClick: function onClick() { + return layout(cy); + }, + icon: 'replay' + }), h('div.element-search', [h('input.element-search-input.input-round.input-joined', { + value: searchValue, + onChange: function onChange(e) { + return _this3.handleNodeSearchChange(e.target.value); + }, + type: 'text', + placeholder: 'Search' + }), h('button.element-search-clear', { + onClick: function onClick() { + _this3.handleNodeSearchChange(''); + _this3.focusNodeSearch(); + } + }, [h('i.material-icons', 'close')])])]); + } + }]); +}(React.Component); +module.exports = PathwaysToolbar; + +/***/ }), + +/***/ 494: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var NetworkInfoMenu = /*#__PURE__*/function (_React$Component) { + function NetworkInfoMenu() { + _classCallCheck(this, NetworkInfoMenu); + return _callSuper(this, NetworkInfoMenu, arguments); + } + _inherits(NetworkInfoMenu, _React$Component); + return _createClass(NetworkInfoMenu, [{ + key: "render", + value: function render() { + var infoList = this.props.infoList; + var noInfoMessage = [h('p', { + key: 1 + }, 'No additional information was found for this network!'), h('p', { + key: 2 + }, 'Additional information about the network is normally found here, but we couldn\'t find any for this one.')]; + var comments = infoList.map(function (comment, key) { + return h('p', { + key: key + }, comment.replace(/

/g, ' ')); + }); + return h('div.info-menu', [comments.length > 0 ? comments : noInfoMessage]); + } + }]); +}(React.Component); +module.exports = NetworkInfoMenu; + +/***/ }), + +/***/ 495: +/***/ (function(module, exports, __webpack_require__) { + +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var saveAs = __webpack_require__(91).saveAs; +var _ = __webpack_require__(6); +var Loader = __webpack_require__(38); +var _require = __webpack_require__(16), + ServerAPI = _require.ServerAPI; +var pcDownloadTypes = __webpack_require__(183); +var FileDownloadMenu = /*#__PURE__*/function (_React$Component) { + function FileDownloadMenu(props) { + var _this; + _classCallCheck(this, FileDownloadMenu); + _this = _callSuper(this, FileDownloadMenu, [props]); + _this.state = { + downloadTypes: pcDownloadTypes, + loading: false, + error: null + }; + return _this; + } + _inherits(FileDownloadMenu, _React$Component); + return _createClass(FileDownloadMenu, [{ + key: "downloadFromDisplayName", + value: function downloadFromDisplayName(displayName) { + var _this2 = this; + var _this$props = this.props, + cySrv = _this$props.cySrv, + fileName = _this$props.fileName; + var downloadTypes = this.state.downloadTypes; + var option = _.find(downloadTypes, ['displayName', displayName]); + var pc2Name = option.pc2Name, + ext = option.ext, + type = option.type; + if (type === 'png') { + // The setTimeout triggers a rerender so that the loader appears on screen + this.setState({ + loading: true + }, function () { + setTimeout(function () { + saveAs(cySrv.get().png({ + output: 'blob', + scale: 2, + bg: 'white', + full: true + }), "".concat(fileName, ".").concat(ext)); + _this2.setState({ + loading: false + }); + }, 1); + }); + } else { + this.downloadFileFromPC(pc2Name, ext); + } + } + }, { + key: "downloadFileFromPC", + value: function downloadFileFromPC(format, fileExt) { + var _this3 = this; + var FILENAME_CUTOFF = 20; + var _this$props2 = this.props, + fileName = _this$props2.fileName, + uri = _this$props2.uri; + fileName = fileName.substr(0, fileName.length < FILENAME_CUTOFF ? fileName.length : FILENAME_CUTOFF).replace(/ /g, '_'); + this.setState({ + loading: true + }, function () { + ServerAPI.downloadFileFromPathwayCommons(uri, format).then(function (res) { + return res.text(); + }).then(function (content) { + content = _typeof(content) === 'object' ? JSON.stringify(content) : content; + var fileContent = new File([content], "".concat(fileName, ".").concat(fileExt), { + type: 'text/plain;charset=utf-8' + }); + saveAs(fileContent); + _this3.setState({ + error: null, + loading: false + }); + }).catch(function (e) { + return _this3.setState({ + error: e, + loading: false + }); + }); + }); + } + }, { + key: "render", + value: function render() { + var _this4 = this; + var downloadOpts = this.props.downloadOpts; + var opts = _.assign({ + downloadTypes: ['png'] + }, downloadOpts); + var menuContents = this.state.downloadTypes.filter(function (dt) { + return opts.downloadTypes.indexOf(dt.type) >= 0; + }).map(function (dt) { + var dlOption = h('div.download-option', { + onClick: function onClick() { + return _this4.downloadFromDisplayName(dt.displayName); + } + }, [h('div.download-option-header', [h('h3', dt.displayName)]), h('div.download-option-description', dt.description)]); + return dlOption; + }); + var errorMessage = this.state.error ? h('div.file-download-error', 'An error occurred - Please try again later.') : null; + return h('div.file-download-menu', [h('h2', 'Download As...'), h('div.file-download-content', [].concat(_toConsumableArray(menuContents), [h(Loader, { + loaded: !this.state.loading + })])), errorMessage]); + } + }]); +}(React.Component); +module.exports = FileDownloadMenu; + +/***/ }), + +/***/ 496: +/***/ (function(module, exports, __webpack_require__) { + +var cytoscape = __webpack_require__(64); +var sbgnStyleSheet = __webpack_require__(189); +var _require = __webpack_require__(195), + MATCHED_SEARCH_CLASS = _require.MATCHED_SEARCH_CLASS; +module.exports = sbgnStyleSheet(cytoscape).selector('node').css({ + 'background-opacity': '0.4' +}).selector('node:active').css({ + 'background-opacity': '0.7' +}).selector('node[class!="compartment"]').css({ + 'font-size': 20, + 'color': 'black', + 'text-outline-color': 'white', + 'text-outline-width': 2, + 'text-outline-opacity': 0.5, + 'text-wrap': 'wrap', + 'text-max-width': 175, + 'label': function label(node) { + var label = node.data('label').split('(').join('').split(')').join('').split(':').join(' '); + return label; + } +}).selector('node[class="complex"]').css({ + 'width': 45, + 'height': 45, + 'label': function label(node) { + return node.isParent() ? '' : node.data('label'); + } +}).selector('.cy-expand-collapse-collapsed-node').css({ + 'font-size': 20, + 'text-max-width': 175 +}).selector('.cy-expand-collapse-meta-edge').css({ + 'line-style': 'dashed' +}).selector('edge').css({ + 'opacity': 0.3 +}).selector('node[class="and"],node[class="or"],node[class="not"]').css({ + 'label': function label(node) { + return node.data('class'); + } +}).selector('.highlighted').css({ + 'opacity': 1 +}).selector('.unhighlighted').css({ + 'opacity': 0.4 +}).selector('.hidden').css({ + 'display': 'none' +}).selector(".".concat(MATCHED_SEARCH_CLASS)).css({ + 'overlay-color': 'yellow', + 'overlay-padding': 0, + 'overlay-opacity': 0.5 +}); + +/***/ }), + +/***/ 497: +/***/ (function(module, exports, __webpack_require__) { + +var _ = __webpack_require__(6); +var h = __webpack_require__(2); +var PathwayNodeMetadataView = __webpack_require__(498); +var _require = __webpack_require__(133), + PATHWAYS_LAYOUT_OPTS = _require.PATHWAYS_LAYOUT_OPTS; +var CytoscapeTooltip = __webpack_require__(93); +var EXPAND_COLLAPSE_OPTS = { + layoutBy: _.assign({}, PATHWAYS_LAYOUT_OPTS, { + fit: false + }), + fisheye: true, + animate: true, + undoable: false, + cueEnabled: false +}; +var SHOW_TOOLTIPS_EVENT = 'showtooltip'; +var bindCyEvents = function bindCyEvents(cy) { + var hideTooltips = function hideTooltips() { + cy.elements().forEach(function (ele) { + var tooltip = ele.scratch('_tooltip'); + if (tooltip) { + tooltip.hide(); + } + }); + }; + cy.expandCollapse(EXPAND_COLLAPSE_OPTS); + cy.on(SHOW_TOOLTIPS_EVENT, 'node[class != "compartment"]', function (evt) { + var node = evt.target; + var tooltip = new CytoscapeTooltip(node.popperRef(), { + html: h(PathwayNodeMetadataView, { + node: node + }) + }); + node.scratch('_tooltip', tooltip); + tooltip.show(); + }); + cy.on('tap', function (evt) { + var tgt = evt.target; + + // if we didn't click a node, close all tooltips + if (evt.target === cy || evt.target.isEdge()) { + hideTooltips(); + return; + } + + // we clicked a node that has a tooltip open -> close it + if (tgt.scratch('_tooltip-opened')) { + hideTooltips(); + } else { + // open the tooltip for the clicked node + hideTooltips(); + tgt.emit(SHOW_TOOLTIPS_EVENT); + } + }); + + //Hide Tooltips on various graph movements + cy.on('drag', function () { + return hideTooltips(); + }); + cy.on('pan', function () { + return hideTooltips(); + }); + cy.on('zoom', function () { + return hideTooltips(); + }); + cy.on('layoutstart', function () { + return hideTooltips(); + }); + var nodeHoverMouseOver = _.debounce(function (evt) { + var node = evt.target; + var elesToHighlight = cy.collection(); + + //Create a list of the hovered node & its neighbourhood + node.neighborhood().nodes().union(node).forEach(function (node) { + elesToHighlight.merge(node.ancestors()); + elesToHighlight.merge(node.descendants()); + elesToHighlight.merge(node); + }); + elesToHighlight.merge(node.neighborhood().edges()); + + //Add highlighted class to node & its neighbourhood, unhighlighted to everything else + cy.elements().addClass('unhighlighted'); + elesToHighlight.forEach(function (ele) { + ele.removeClass('unhighlighted'); + ele.addClass('highlighted'); + }); + }, 750); + + //call style-applying and style-removing functions on 'mouseover' and 'mouseout' for non-compartment nodes + cy.on('mouseover', 'node[class!="compartment"]', nodeHoverMouseOver); + cy.on('mouseout', 'node[class!="compartment"]', function () { + nodeHoverMouseOver.cancel(); + cy.elements().removeClass('highlighted unhighlighted'); + }); +}; +module.exports = bindCyEvents; + +/***/ }), + +/***/ 498: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var _ = __webpack_require__(6); +var _require = __webpack_require__(16), + ServerAPI = _require.ServerAPI; +var _require2 = __webpack_require__(24), + NS_CHEBI = _require2.NS_CHEBI, + NS_ENSEMBL = _require2.NS_ENSEMBL, + NS_HGNC = _require2.NS_HGNC, + NS_HGNC_SYMBOL = _require2.NS_HGNC_SYMBOL, + NS_NCBI_GENE = _require2.NS_NCBI_GENE, + NS_PUBMED = _require2.NS_PUBMED, + NS_REACTOME = _require2.NS_REACTOME, + NS_UNIPROT = _require2.NS_UNIPROT; +var DEFAULT_NUM_NAMES = 3; +var SUPPORTED_COLLECTIONS = new Map([[NS_CHEBI, 'ChEBI'], [NS_ENSEMBL, 'Ensembl'], [NS_HGNC, 'HGNC'], [NS_HGNC_SYMBOL, 'HGNC'], [NS_NCBI_GENE, 'NCBI Gene'], [NS_REACTOME, 'Reactome'], [NS_UNIPROT, 'UniProt']]); +var getUriIds = function getUriIds(uris) { + return uris.map(function (uri) { + return _.last(uri.split('/')); + }); +}; + +// A component that displays a pathway node's metadata +// props: +// - cytoscape node) +var PathwayNodeMetadataView = /*#__PURE__*/function (_React$Component) { + function PathwayNodeMetadataView(props) { + var _this; + _classCallCheck(this, PathwayNodeMetadataView); + _this = _callSuper(this, PathwayNodeMetadataView, [props]); + _this.state = { + publications: [] + }; + return _this; + } + _inherits(PathwayNodeMetadataView, _React$Component); + return _createClass(PathwayNodeMetadataView, [{ + key: "componentDidMount", + value: function componentDidMount() { + var _this2 = this; + var node = this.props.node; + var metadata = node.data('metadata'); + var pubmedUris = _.get(metadata, "xrefLinks.".concat(NS_PUBMED), null); + if (pubmedUris != null) { + var pubmedIds = getUriIds(pubmedUris); + ServerAPI.getPubmedPublications(pubmedIds).then(function (publications) { + _this2.setState({ + publications: publications + }); + }); + } + } + }, { + key: "render", + value: function render() { + var node = this.props.node; + var publications = this.state.publications; + var nodeData = node.data(); + var nodeClass = _.get(nodeData, ['class']); + var nodeLabel = _.get(nodeData, ['label']); + var defaultNodeMeta = { + synonyms: [], + datasource: '', + type: nodeClass, + standardName: '', + displayName: nodeLabel, + xrefLinks: [] + }; + var nodeMeta = _.get(nodeData, ['metadata'], {}); + var md = _.assign({}, defaultNodeMeta, nodeMeta); + var synonyms = md.synonyms, + type = md.type, + standardName = md.standardName, + displayName = md.displayName, + xrefLinks = md.xrefLinks; + var title = nodeLabel || displayName; + var searchLinkQuery = displayName; + var dbLinks = _.keys(xrefLinks).map(function (collection) { + var link = null; + var displayName = SUPPORTED_COLLECTIONS.get(collection); + var uri = _.get(xrefLinks, "".concat(collection, "[0]")); + if (displayName && uri) link = h('a.plain-link', { + href: uri, + target: '_blank' + }, displayName); + return link; + }); + var publicationEles = publications.map(function (publication) { + var id = publication.id, + title = publication.title, + firstAuthor = publication.firstAuthor, + date = publication.date, + source = publication.source; + return h('div.cy-overflow-content', [h('a.plain-link', { + href: 'http://bioregistry.io/pubmed:' + id, + target: '_blank' + }, title), h('div', firstAuthor + ' et al. | ' + source + ' - ' + new Date(date).getFullYear().toString())]); + }); + var showTitle = title !== ''; + var showType = type !== ''; + var showStdName = standardName !== ''; + var showDispName = displayName !== '' && displayName !== (nodeLabel || title); + var showSynonyms = synonyms.length > 0; + var showPubs = publicationEles.length > 0; + var showLinks = dbLinks.length > 0; + var showHeader = showTitle || showType; + var showBody = showStdName || showDispName || showSynonyms || showPubs; + var showFooter = showLinks; + var showPcSearchLink = searchLinkQuery !== ''; + return h('div.cy-tooltip', [h('div.cy-tooltip-content', [showHeader ? h('div.cy-tooltip-header', [showTitle ? h('h2.cy-tooltip-title', title) : null, showType ? h('div.cy-tooltip-type-chip', type) : null]) : null, showBody ? h('div.cy-tooltip-body', [showStdName ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Name'), h('div.cy-tooltip-field-value', standardName)]) : null, showDispName ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Display Name'), h('div.cy-tooltip-field-value', displayName)]) : null, showSynonyms ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Synonyms']), h('div.cy-tooltip-field-value', synonyms.slice(0, DEFAULT_NUM_NAMES).join(', '))]) : null, showPubs ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Publications']), h('div', publicationEles)]) : null]) : null, showFooter ? h('div.cy-tooltip-footer', [showLinks ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Links']), h('div.cy-tooltip-links', dbLinks)]) : null]) : null, showPcSearchLink ? h('div.cy-tooltip-call-to-action', [h('a', { + target: '_blank', + href: '/search?q=' + searchLinkQuery + }, [h('button.call-to-action', 'Find Related Pathways')])]) : null])]); + } + }]); +}(React.Component); +module.exports = PathwayNodeMetadataView; + +/***/ }), + +/***/ 499: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var _ = __webpack_require__(6); +var _require = __webpack_require__(16), + ServerAPI = _require.ServerAPI; +var _require2 = __webpack_require__(24), + DOI_BASE_URL = _require2.DOI_BASE_URL, + IDENTIFIERS_URL = _require2.IDENTIFIERS_URL, + PUBMED_BASE_URL = _require2.PUBMED_BASE_URL; + +// A component that displays a pathway title +// props: +// - pathway: Model instance +var PathwayTitle = /*#__PURE__*/function (_React$Component) { + function PathwayTitle(props) { + var _this; + _classCallCheck(this, PathwayTitle); + _this = _callSuper(this, PathwayTitle, [props]); + _this.state = { + publications: [] + }; + return _this; + } + + /** + * Supports PublicationXrefs from PubMed; in principle, could be any source (e.g. bioRxiv). + * @returns {Promise} - Array of publication objects + */ + _inherits(PathwayTitle, _React$Component); + return _createClass(PathwayTitle, [{ + key: "loadPublications", + value: (function () { + var _loadPublications = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { + var normalizePubmedRecord, MAX_PUBS, isPubmedXref, pathway, pubmedIds; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + normalizePubmedRecord = function normalizePubmedRecord(record) { + var journal = record.source, + date = record.date, + firstAuthor = record.firstAuthor, + doi = record.doi, + pubmed = record.pubmed; + return { + journal: journal, + date: date, + firstAuthor: firstAuthor, + doi: doi, + pubmed: pubmed + }; + }; + MAX_PUBS = 10; + isPubmedXref = function isPubmedXref(_ref) { + var db = _ref.db; + return db === 'pubmed'; + }; + pathway = this.props.pathway; + pubmedIds = pathway.publicationXrefs().slice(0, MAX_PUBS).filter(isPubmedXref).map(function (_ref2) { + var id = _ref2.id; + return id; + }); + _context.prev = 5; + return _context.abrupt("return", ServerAPI.getPubmedPublications(pubmedIds).map(normalizePubmedRecord)); + case 9: + _context.prev = 9; + _context.t0 = _context["catch"](5); + case 11: + case "end": + return _context.stop(); + } + }, _callee, this, [[5, 9]]); + })); + function loadPublications() { + return _loadPublications.apply(this, arguments); + } + return loadPublications; + }()) + }, { + key: "componentDidMount", + value: function () { + var _componentDidMount = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { + var _this2 = this; + var publications; + return _regeneratorRuntime().wrap(function _callee2$(_context2) { + while (1) switch (_context2.prev = _context2.next) { + case 0: + _context2.next = 2; + return this.loadPublications(); + case 2: + publications = _context2.sent; + return _context2.abrupt("return", new Promise(function (resolve) { + return _this2.setState({ + publications: publications + }, function () { + return resolve(publications); + }); + })); + case 4: + case "end": + return _context2.stop(); + } + }, _callee2, this); + })); + function componentDidMount() { + return _componentDidMount.apply(this, arguments); + } + return componentDidMount; + }() // Enhance the name with a link to a source page if possible + }, { + key: "getName", + value: function getName() { + // Crapshoot whether a DB has a resolvable URL or not + var DB_PREFIX_2_URL_TEMPLATE = new Map([['biofactoid', "".concat(IDENTIFIERS_URL, "/biofactoid:")], ['panther.pathway', "".concat(IDENTIFIERS_URL, "/panther.pathway:")], ['smpdb', "".concat(IDENTIFIERS_URL, "/smpdb:")], ['reactome', "".concat(IDENTIFIERS_URL, "/reactome:")]]); + var isSupportedDb = function isSupportedDb(_ref3) { + var db = _ref3.db; + return DB_PREFIX_2_URL_TEMPLATE.has(db); + }; + var pathway = this.props.pathway; + var name = pathway.name(); + var uniXrefs = pathway.unificationXrefs(); + if (!_.isEmpty(uniXrefs)) { + uniXrefs = uniXrefs.filter(isSupportedDb); + if (uniXrefs.length) { + var _$first = _.first(uniXrefs), + db = _$first.db, + id = _$first.id; + var baseUrl = DB_PREFIX_2_URL_TEMPLATE.get(db); + var href = "".concat(baseUrl).concat(id); + name = [h('a.highlight-link', { + href: href, + target: '_blank' + }, name)]; + } + } + return name; + } + + // Add an article link when directly relevant to pathway (i.e. Biofactoid!) + }, { + key: "getSource", + value: function getSource() { + var ARTICLE_SUPPORTED_DATASOURCES = new Set(['Biofactoid']); + var pathway = this.props.pathway; + var publications = this.state.publications; + var datasource = pathway.datasource(); + var source = [h('a', { + href: pathway.datasourceUrl(), + target: '_blank' + }, ' ' + datasource)]; + if (ARTICLE_SUPPORTED_DATASOURCES.has(datasource) && publications.length) { + var _$first2 = _.first(publications), + journal = _$first2.journal, + date = _$first2.date, + firstAuthor = _$first2.firstAuthor, + doi = _$first2.doi, + pubmed = _$first2.pubmed; + var author = h('span', " ".concat(firstAuthor, " et al.")); + var reference = h(doi ? 'a.plain-link' : 'span', doi ? { + href: "".concat(DOI_BASE_URL).concat(doi), + target: '_blank' + } : null, "".concat(journal, " ").concat(date)); + source.push(h('span', ' | '), author, ' ', reference); + if (pubmed) { + var pubmedLink = h('a.plain-link', { + href: "".concat(PUBMED_BASE_URL).concat(pubmed), + target: '_blank' + }, 'PubMed'); + source.push(' · ', pubmedLink); + } + } + return source; + } + }, { + key: "render", + value: function render() { + var name = this.getName(); + var source = this.getSource(); + return h('div.pathway-title', [h('div.pathway-title-name', name), h('div.pathway-title-source', source)]); + } + }]); +}(React.Component); +module.exports = PathwayTitle; + +/***/ }), + +/***/ 500: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var Link = __webpack_require__(60).Link; +var Loader = __webpack_require__(38); +var classNames = __webpack_require__(14); +var queryString = __webpack_require__(37); +var _ = __webpack_require__(6); +var _require = __webpack_require__(24), + FACTOID_URL = _require.FACTOID_URL; +var _require2 = __webpack_require__(16), + ServerAPI = _require2.ServerAPI; +var PcLogoLink = __webpack_require__(193); +var _require3 = __webpack_require__(501), + PathwayResultsView = _require3.PathwayResultsView; +var _require4 = __webpack_require__(502), + GeneResultsView = _require4.GeneResultsView; +var _require5 = __webpack_require__(63), + TimeoutError = _require5.TimeoutError; +var _require6 = __webpack_require__(73), + ErrorMessage = _require6.ErrorMessage; +var _require7 = __webpack_require__(503), + FeatureView = _require7.FeatureView; +var _require8 = __webpack_require__(94), + Contribute = _require8.Contribute; +var Search = /*#__PURE__*/function (_React$Component) { + function Search(props) { + var _this; + _classCallCheck(this, Search); + _this = _callSuper(this, Search, [props]); + var query = queryString.parse(props.location.search); + _this.state = { + query: _.assign({ + q: '', + type: 'Pathway', + datasource: [] + }, query), + geneResults: null, + searchHits: null, + feature: null, + dataSources: [], + loading: false, + error: null, + PC_URL: null + }; + return _this; + } + _inherits(Search, _React$Component); + return _createClass(Search, [{ + key: "getSearchResult", + value: function getSearchResult() { + var _this2 = this; + var state = this.state; + var query = state.query; + if (query.q !== '') { + this.setState({ + loading: true + }); + ServerAPI.search(query).then(function (res) { + var genes = res.genes, + searchHits = res.searchHits, + feature = res.feature, + dataSources = res.dataSources; + _this2.setState({ + geneResults: genes, + searchHits: searchHits, + feature: feature, + dataSources: dataSources, + loading: false, + error: null + }); + return null; // Bluebird warning + }).catch(function (e) { + return _this2.setState({ + error: e, + loading: false + }); + }); + } + } + }, { + key: "componentDidMount", + value: function componentDidMount() { + var _this3 = this; + this.getSearchResult(); + return ServerAPI.getPCURL().then(function (PC_URL) { + return _this3.setState({ + PC_URL: PC_URL + }); + }); + } + }, { + key: "onSearchValueChange", + value: function onSearchValueChange(e) { + // if the user presses enter, submit the query + if (e.which && e.which === 13) { + this.submitSearchQuery(e); + } else { + var newQueryState = _.assign({}, this.state.query); + newQueryState.q = e.target.value; + this.setState({ + query: newQueryState + }); + } + } + }, { + key: "setAndSubmitSearchQuery", + value: function setAndSubmitSearchQuery(query) { + var _this4 = this; + var state = this.state; + if (!state.searchLoading) { + var newQueryState = _.assign({}, state.query, query); + this.setState({ + query: newQueryState + }, function () { + return _this4.submitSearchQuery(); + }); + } + } + }, { + key: "submitSearchQuery", + value: function submitSearchQuery() { + var props = this.props; + var state = this.state; + var query = state.query; + props.history.push({ + pathname: '/search', + search: queryString.stringify(query), + state: {} + }); + this.getSearchResult(); + } + }, { + key: "componentWillReceiveProps", + value: function componentWillReceiveProps(nextProps) { + var _this5 = this; + var nextSearch = nextProps.location.search; + if (this.props.location.search !== nextSearch) { + this.setState({ + query: _.assign({ + q: '', + type: 'Pathway', + datasource: [] + }, queryString.parse(nextSearch)) + }, function () { + _this5.getSearchResult(); + }); + } + } + }, { + key: "render", + value: function render() { + var _this6 = this; + var _this$state = this.state, + geneResults = _this$state.geneResults, + searchHits = _this$state.searchHits, + feature = _this$state.feature, + query = _this$state.query, + loading = _this$state.loading, + dataSources = _this$state.dataSources, + PC_URL = _this$state.PC_URL; + var searchListing = h(Loader, { + loaded: !loading, + options: { + left: '50%', + color: '#16A085' + } + }, [h('div.search-results-header', [h('p.search-results-header-title', { + className: classNames({ + 'hidden': _.isEmpty(geneResults) && _.isEmpty(searchHits) + }) + }, 'Explore how your query is connected to millions of curated interactions'), h('p.search-results-header-subtitle', ['Pathway Commons accepts contributions - ', h('a.plain-link', { + href: "".concat(FACTOID_URL), + target: '_blank' + }, 'add interactions from your publication')])]), h('div.search-results-content', [h(FeatureView, { + feature: feature + }), h(GeneResultsView, { + geneResults: geneResults + }), h(PathwayResultsView, { + searchHits: searchHits, + query: query, + controller: this, + dataSources: dataSources, + hasFeature: feature != null + })])]); + var errorMessage; + if (this.props.notFoundError) { + errorMessage = h(ErrorMessage, { + title: 'We couldn\'t find the resource you are looking for', + body: 'Check the location and try again.' + }); + } else if (this.state.error instanceof TimeoutError) { + errorMessage = h(ErrorMessage, { + title: 'This is taking longer than expected', + body: 'Try again later.' + }); + } else if (this.state.error) { + errorMessage = h(ErrorMessage); + } + var searchBody = errorMessage ? errorMessage : searchListing; + return h('div.search', [h('div.search-nav-links', [h('a', { + href: PC_URL, + target: '_blank' + }, 'About'), h('a', { + href: PC_URL + '#faq', + target: '_blank' + }, 'FAQ'), h('a', { + href: PC_URL + '#training', + target: '_blank' + }, 'Training'), h('a', { + href: PC_URL + '#data', + target: '_blank' + }, 'Data'), h('a', { + href: PC_URL + '#contact', + target: '_blank' + }, 'Contact'), h(Contribute, { + text: 'Contribute' + })]), h('div.search-header', [h('div.search-branding', [h(PcLogoLink, { + className: 'search-logo' + }), h('div.search-branding-descriptor', [h('h2.search-subtitle', 'Pathway Commons'), h('h1.search-title', 'Search')])]), h('div.search-searchbar-container', { + ref: function ref(dom) { + return _this6.searchBar = dom; + } + }, [h('div.search-searchbar', [h('input', { + type: 'text', + placeholder: 'Enter pathway name or gene names', + value: query.q, + maxLength: 250, + // 250 chars max of user input + onChange: function onChange(e) { + return _this6.onSearchValueChange(e); + }, + onKeyPress: function onKeyPress(e) { + return _this6.onSearchValueChange(e); + } + }), h(Link, { + to: { + pathname: '/search', + search: queryString.stringify(query) + }, + className: "search-search-button" + }, [h('i.material-icons', 'search')])]), h('div.search-suggestions', ['e.g. ', h(Link, { + to: { + pathname: '/search', + search: queryString.stringify(_.assign({}, query, { + q: 'cell cycle' + })) + } + }, 'cell cycle, '), h(Link, { + to: { + pathname: '/search', + search: queryString.stringify(_.assign({}, query, { + q: 'SRC TLN1 DLC1 PXN VCL KANK1' + })) + } + }, 'SRC TLN1 DLC1 PXN VCL KANK1, '), h(Link, { + to: { + pathname: '/search', + search: queryString.stringify(_.assign({}, query, { + q: 'uniprot:Q9Y490' + })) + } + }, 'uniprot:Q9Y490')])])]), h('div.search-body', [searchBody])]); + } + }]); +}(React.Component); +module.exports = Search; + +/***/ }), + +/***/ 501: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var Link = __webpack_require__(60).Link; +var queryString = __webpack_require__(37); +var _ = __webpack_require__(6); +var classNames = __webpack_require__(14); +var _require = __webpack_require__(73), + ErrorMessage = _require.ErrorMessage; +var PathwayResultsView = /*#__PURE__*/function (_React$Component) { + function PathwayResultsView() { + _classCallCheck(this, PathwayResultsView); + return _callSuper(this, PathwayResultsView, arguments); + } + _inherits(PathwayResultsView, _React$Component); + return _createClass(PathwayResultsView, [{ + key: "render", + value: function render() { + var _this$props = this.props, + pathwayResults = _this$props.searchHits, + controller = _this$props.controller, + query = _this$props.query, + dataSources = _this$props.dataSources, + hasFeature = _this$props.hasFeature; + var curDatasource = query.datasource; + var sources = dataSources.filter(function (source) { + return query.type === 'Pathway' ? source.numPathways : source.numInteractions; + }); + var noPathwaysMsg = h(ErrorMessage, { + title: 'Your search didn\'t match any pathways', + footer: 'Try different keywords or gene names.' + }); + if (pathwayResults === null) { + return null; + } + var searchList = pathwayResults.map(function (result, index) { + var dsInfo = _.get(result, 'sourceInfo', ''); + var iconUrl = dsInfo.iconUrl || ''; + var name = dsInfo.name || ''; + var pathwayTitle = result.name; + var topHit = index === 0; + var hasPreview = result.previewUrl; + var showPreview = topHit && hasPreview; + var item; + var itemLink = function itemLink(children) { + return h(Link, { + className: 'plain-link', + to: { + pathname: '/pathways', + search: queryString.stringify({ + uri: result.uri + }) + }, + target: '_blank' + }, children || 'N/A'); + }; + var itemPreview = h('img.search-item-preview', { + src: result.previewUrl + }); + var itemInfo = function itemInfo(title) { + return h('div.search-item-info', [h('div.search-item-icon', [h('img', { + src: iconUrl + })]), h('div.search-item-content', [title, h('p.search-item-content-datasource', " ".concat(name)), h('p.search-item-content-participants', "".concat(result.numParticipants, " Participants"))])]); + }; + if (showPreview) { + // Wrap the entire item in a link + item = itemLink([itemInfo(pathwayTitle), itemPreview]); + } else { + // Associate the link with the content + item = itemInfo(itemLink(pathwayTitle)); + } + return h('div.search-item', { + className: classNames({ + 'preview': showPreview + }) + }, item); + }); + var searchResultFilter = h('div.search-filters', [h('select.search-datasource-filter', { + value: !Array.isArray(curDatasource) ? curDatasource : '', + multiple: false, + onChange: function onChange(e) { + return controller.setAndSubmitSearchQuery({ + datasource: e.target.value + }); + } + }, [h('option', { + value: [] + }, 'Any datasource')].concat(sources.map(function (ds) { + return h('option', { + value: [ds.identifier] + }, ds.name); + })))]); + var header = h('h3.search-pathways-header', pathwayResults.length ? "Pathways (".concat(searchList.length, ")") : null); + var filter = pathwayResults.length || curDatasource.length ? searchResultFilter : null; + var listing = pathwayResults.length || hasFeature ? searchList : [noPathwaysMsg]; + return h('div.search-pathway-results', [h('div.search-tools', [header, filter])].concat(_toConsumableArray(listing))); + } + }]); +}(React.Component); +module.exports = { + PathwayResultsView: PathwayResultsView +}; + +/***/ }), + +/***/ 502: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var queryString = __webpack_require__(37); +var _ = __webpack_require__(6); +var MIN_GENE_COUNT_ENRICHMENT = 5; +var _require = __webpack_require__(24), + NS_HGNC_SYMBOL = _require.NS_HGNC_SYMBOL, + NS_GENECARDS = _require.NS_GENECARDS, + NS_NCBI_GENE = _require.NS_NCBI_GENE, + NS_UNIPROT = _require.NS_UNIPROT; +var _require2 = __webpack_require__(55), + AppCard = _require2.AppCard; +var SUPPORTED_COLLECTIONS = new Map([[NS_GENECARDS, 'GeneCards'], [NS_HGNC_SYMBOL, 'HGNC'], [NS_NCBI_GENE, 'NCBI Gene'], [NS_UNIPROT, 'UniProt']]); +var EntitySummaryBox = /*#__PURE__*/function (_React$Component) { + function EntitySummaryBox() { + _classCallCheck(this, EntitySummaryBox); + return _callSuper(this, EntitySummaryBox, arguments); + } + _inherits(EntitySummaryBox, _React$Component); + return _createClass(EntitySummaryBox, [{ + key: "render", + value: function render() { + var geneInfo = this.props.geneInfo; + var geneSymbol = geneInfo.geneSymbol, + summary = geneInfo.summary; + var displayName = summary.displayName, + xrefLinks = summary.xrefLinks; + + // sometimes duplicated namespace/uri pairs are received e.g. uniprot/tp53 twice + var sortedLinks = _.uniqWith(xrefLinks.sort(function (p1, p2) { + return p1.namespace > p2.namespace ? 1 : -1; + }), function (p1, p2) { + return p1.namespace === p2.namespace; + }).map(function (link) { + return h('a.plain-link', { + href: link.uri, + target: '_blank' + }, SUPPORTED_COLLECTIONS.get(link.namespace)); + }); + return h('div.entity-summary-box', [h('h5.entity-subtitle', displayName), h('h3.entity-title', geneSymbol), h('div.entity-links-container', _toConsumableArray(sortedLinks))]); + } + }]); +}(React.Component); +var GeneResultsView = /*#__PURE__*/function (_React$Component2) { + function GeneResultsView(props) { + var _this; + _classCallCheck(this, GeneResultsView); + _this = _callSuper(this, GeneResultsView, [props]); + _defineProperty(_this, "checkScroll", function () { + if (_this.scrollContainerRef.current) { + var _this$scrollContainer = _this.scrollContainerRef.current, + scrollLeft = _this$scrollContainer.scrollLeft, + scrollWidth = _this$scrollContainer.scrollWidth, + clientWidth = _this$scrollContainer.clientWidth; + var geneResults = _this.props.geneResults; + _this.setState({ + showLeftButton: scrollLeft > 0 && geneResults.length > _this.visibleItems, + showRightButton: scrollLeft < scrollWidth - clientWidth && geneResults.length > _this.visibleItems + }); + } + }); + _defineProperty(_this, "scroll", function (direction) { + if (_this.scrollContainerRef.current) { + var container = _this.scrollContainerRef.current; + var cardWidth = container.querySelector('.card').offsetWidth; + var containerWidth = container.clientWidth; + var scrollAmount = Math.floor(containerWidth / cardWidth) * cardWidth; + var newScrollLeft = container.scrollLeft + (direction === 'left' ? -scrollAmount : scrollAmount); + container.scrollTo({ + left: newScrollLeft, + behavior: 'smooth' + }); + } + }); + _this.state = { + showLeftButton: false, + showRightButton: false + }; + _this.scrollContainerRef = React.createRef(); + _this.itemWidth = 20; // in em units + _this.visibleItems = 3; + return _this; + } + _inherits(GeneResultsView, _React$Component2); + return _createClass(GeneResultsView, [{ + key: "componentDidMount", + value: function componentDidMount() { + var _this$scrollContainer2; + this.checkScroll(); + (_this$scrollContainer2 = this.scrollContainerRef.current) === null || _this$scrollContainer2 === void 0 || _this$scrollContainer2.addEventListener('scroll', this.checkScroll); + } + }, { + key: "componentWillUnmount", + value: function componentWillUnmount() { + var _this$scrollContainer3; + (_this$scrollContainer3 = this.scrollContainerRef.current) === null || _this$scrollContainer3 === void 0 || _this$scrollContainer3.removeEventListener('scroll', this.checkScroll); + } + }, { + key: "getEnrichmentAppInfo", + value: function getEnrichmentAppInfo(geneResults, searchString) { + var enabled = geneResults.length >= MIN_GENE_COUNT_ENRICHMENT; + var hint = "Requires at least ".concat(MIN_GENE_COUNT_ENRICHMENT, " genes."); + var linkPath = '/enrichment'; + var url = "".concat(linkPath, "/?").concat(searchString); + var imageClass = 'enrichment-logo'; + var title = 'Enrichment'; + var body = 'Explore a network of pathways that contain genes identified in your query.'; + return { + enabled: enabled, + hint: hint, + url: url, + imageClass: imageClass, + title: title, + body: body, + linkifyContent: true + }; + } + }, { + key: "getInteractionsAppInfo", + value: function getInteractionsAppInfo(geneResults, searchString) { + var enabled = geneResults.length > 0; + var hint = "Requires one recognized gene."; + var linkPath = '/interactions'; + var url = "".concat(linkPath, "/?").concat(searchString); + var imageClass = 'interactions-logo'; + var title = 'Interactions'; + var body = 'Visualize interactions between the genes identified in your query.'; + return { + enabled: enabled, + hint: hint, + url: url, + imageClass: imageClass, + title: title, + body: body, + linkifyContent: true + }; + } + }, { + key: "render", + value: function render() { + var _this2 = this; + var geneResults = this.props.geneResults; + var _this$state = this.state, + showLeftButton = _this$state.showLeftButton, + showRightButton = _this$state.showRightButton; + if (geneResults === null || geneResults.length === 0) { + return null; + } + var sources = geneResults.map(function (geneInfo) { + return geneInfo.geneSymbol; + }); + var searchString = queryString.stringify({ + source: sources.join(',') + }); + var appsInfos = [this.getInteractionsAppInfo(geneResults, searchString), this.getEnrichmentAppInfo(geneResults, searchString)].map(function (info) { + return h(AppCard, info); + }); + return h('div.search-genes-results', [h('h3.search-genes-header', "Recognized genes (".concat(geneResults.length, ")")), h('div.search-genes-scroll-container', [showLeftButton && h('button.scroll-caret-button.left', { + onClick: function onClick() { + return _this2.scroll('left'); + }, + disabled: !showLeftButton, + className: showLeftButton ? 'active' : 'inactive' + }, [h('i.icon.icon-chevron-left')]), h('div.search-genes-list', { + ref: this.scrollContainerRef, + onScroll: this.checkScroll + }, _toConsumableArray(geneResults.map(function (geneInfo) { + return h('div.card', [h(EntitySummaryBox, { + geneInfo: geneInfo + })]); + }))), showRightButton && h('button.scroll-caret-button.right', { + onClick: function onClick() { + return _this2.scroll('right'); + }, + disabled: !showRightButton, + className: showRightButton ? 'active' : 'inactive' + }, [h('i.icon.icon-chevron-right')])]), h('div.search-app-cards', appsInfos)]); + } + }]); +}(React.Component); +module.exports = { + GeneResultsView: GeneResultsView +}; + +/***/ }), + +/***/ 503: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var _require = __webpack_require__(55), + AppCard = _require.AppCard; +var _ = __webpack_require__(6); +var _require2 = __webpack_require__(24), + NS_BIOFACTOID = _require2.NS_BIOFACTOID, + NS_PATHWAYCOMMONS = _require2.NS_PATHWAYCOMMONS; +var FeatureView = /*#__PURE__*/function (_React$Component) { + function FeatureView() { + _classCallCheck(this, FeatureView); + return _callSuper(this, FeatureView, arguments); + } + _inherits(FeatureView, _React$Component); + return _createClass(FeatureView, [{ + key: "render", + value: function render() { + var feature = this.props.feature; + if (feature == null) return null; + var MAX_AUTHORS = 8; + var article = feature.article, + pathways = feature.pathways, + authors = feature.authors; + var pcPathway = _.find(pathways, ['db', NS_PATHWAYCOMMONS]); + var biofactoidPathway = _.find(pathways, ['db', NS_BIOFACTOID]); + + // Card Content + var body = biofactoidPathway.text; + + // Authors + var authorList = authors.map(function (_ref, key) { + var href = _ref.url, + label = _ref.label; + var element = null; + if (href) { + element = [h('a.plain-link', { + href: href, + target: '_blank' + }, "".concat(label, " ")), h('i.icon.icon-orcid')]; + } else { + element = h('span', label); + } + return h('li', { + key: key + }, element); + }); + if (authorList.length > MAX_AUTHORS) { + // Abbreviate when necessary + var numFromStart = Math.floor(MAX_AUTHORS / 2); + var numFromEnd = Math.ceil(MAX_AUTHORS / 2); + authorList = _.concat(_.take(authorList, numFromStart), h('li', '...'), _.takeRight(authorList, numFromEnd)); + } + return h('div.feature-container', [h('div.feature-area.pathway', [h('div.feature-item', [h(AppCard, { + url: biofactoidPathway.url, + image: h('img', { + src: biofactoidPathway.imageSrc + }), + title: h('div', [h('i.icon.logo-biofactoid'), biofactoidPathway.organism ? h('span', biofactoidPathway.organism) : null]), + body: body + }), h('a.plain-link', { + href: "/pathways?uri=".concat(pcPathway.url), + target: '_blank' + }, 'Detailed pathway view (SBGN)')])]), h('div.feature-area.article', [h('div.feature-item', [h('div.headline', article.title), h('ul.horizontal-list.feature-detail', authorList), h('div.horizontal-list.feature-detail.feature-detail-links', [h('div.feature-detail-link', [article.doiUrl ? h('a.plain-link', { + href: article.doiUrl, + target: '_blank' + }, article.reference) : h('span', article.reference)]), h('div.feature-detail-link', [article.pubmedUrl ? h('a.plain-link', { + href: article.pubmedUrl, + target: '_blank' + }, 'PubMed') : null])])])]), h('div.feature-area.footer', [h('hr')])]); + } + }]); +}(React.Component); +module.exports = { + FeatureView: FeatureView +}; + +/***/ }), + +/***/ 504: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var _ = __webpack_require__(6); +var queryString = __webpack_require__(37); +var Loader = __webpack_require__(38); +var classNames = __webpack_require__(14); +var config = __webpack_require__(24); +var CytoscapeService = __webpack_require__(90); +var _require = __webpack_require__(16), + ServerAPI = _require.ServerAPI; +var InteractionsToolbar = __webpack_require__(505); +var _require2 = __webpack_require__(55), + Popover = _require2.Popover, + PcLogoLink = _require2.PcLogoLink, + CytoscapeNetwork = _require2.CytoscapeNetwork; +var _require3 = __webpack_require__(196), + interactionsStylesheet = _require3.interactionsStylesheet, + interactionsLayoutOpts = _require3.interactionsLayoutOpts, + bindEvents = _require3.bindEvents; +var _require4 = __webpack_require__(63), + TimeoutError = _require4.TimeoutError; +var _require5 = __webpack_require__(73), + ErrorMessage = _require5.ErrorMessage; +var MAX_ELEMENTS_CUTOFF = 3; +var LIST_ELEMENTS_SHOWN = MAX_ELEMENTS_CUTOFF - 1; +var InteractionsMenu = __webpack_require__(510); +var _require6 = __webpack_require__(94), + Contribute = _require6.Contribute; +var Interactions = /*#__PURE__*/function (_React$Component) { + function Interactions(props) { + var _this; + _classCallCheck(this, Interactions); + _this = _callSuper(this, Interactions, [props]); + _this.state = { + cySrv: new CytoscapeService({ + style: interactionsStylesheet, + onMount: bindEvents + }), + loading: true, + sources: _.uniq(queryString.parse(props.location.search).source.split(',')), + networkEmpty: false + }; + if (true) { + _this.state.cySrv.getPromise().then(function (cy) { + return window.cy = cy; + }); + } + return _this; + } + _inherits(Interactions, _React$Component); + return _createClass(Interactions, [{ + key: "loadInteractionsNetwork", + value: function loadInteractionsNetwork() { + var _this2 = this; + var _this$state = this.state, + cySrv = _this$state.cySrv, + sources = _this$state.sources; + var initializeCytoscape = function initializeCytoscape(network) { + var cy = cySrv.get(); + cy.remove('*'); + cy.add(network); + if (network.nodes.length === 0) { + _this2.setState({ + networkEmpty: true, + loading: false, + error: null + }); + return; + } + cy.layout(_.assign({}, interactionsLayoutOpts(cy), { + stop: function stop() { + _this2.setState({ + loading: false, + error: null + }); + } + })).run(); + }; + ServerAPI.getInteractionGraph({ + sources: sources + }).then(function (result) { + initializeCytoscape(_.get(result, 'network', { + nodes: [], + edges: [] + })); + return null; //http://bluebirdjs.com/docs/warning-explanations.html#warning-a-promise-was-created-in-a-handler-but-was-not-returned-from-it + }).catch(function (e) { + return _this2.setState({ + error: e + }); + }); + } + }, { + key: "componentWillUnmount", + value: function componentWillUnmount() { + this.state.cySrv.destroy(); + } + }, { + key: "render", + value: function render() { + var _this3 = this; + var _this$state2 = this.state, + loading = _this$state2.loading, + cySrv = _this$state2.cySrv, + activeMenu = _this$state2.activeMenu, + sources = _this$state2.sources, + networkEmpty = _this$state2.networkEmpty, + error = _this$state2.error; + var errorMessage; + if (networkEmpty) { + errorMessage = h(ErrorMessage, { + title: 'No interactions to display.', + body: 'Try different genes in your search.', + footer: null, + logo: true + }); + } else if (error instanceof TimeoutError) { + errorMessage = h(ErrorMessage, { + title: 'This is taking longer than expected', + body: 'Try again later.', + logo: true + }); + } else if (error) { + errorMessage = h(ErrorMessage, { + logo: true + }); + } + var titleContent = []; + if (sources.length === 1) { + titleContent.push(h('span', "Interactions between ".concat(sources[0], " and ").concat(config.MAX_SIF_NODES, " other genes"))); + } + if (1 < sources.length && sources.length <= MAX_ELEMENTS_CUTOFF) { + titleContent.push(h('span', "Interactions between ".concat(sources.slice(0, sources.length - 1).join(', '), " and ").concat(sources.slice(-1)))); + } + if (sources.length > MAX_ELEMENTS_CUTOFF) { + titleContent.push(h('span', "Interactions between ".concat(sources.slice(0, LIST_ELEMENTS_SHOWN).join(', '), " and "))); + titleContent.push(h(Popover, { + tippy: { + position: 'bottom', + html: h('div.enrichment-sources-popover', sources.slice(LIST_ELEMENTS_SHOWN).sort().map(function (s) { + return h('div', s); + })) + } + }, [h('a.plain-link.enrichment-popover-link', "".concat(sources.length - LIST_ELEMENTS_SHOWN, " other gene(s)"))])); + } + var appBar = h('div.app-bar.interactions-bar', [h('div.app-bar-branding', [h(PcLogoLink), h('div.app-bar-title', titleContent)]), h(InteractionsToolbar, { + cySrv: cySrv, + activeMenu: activeMenu, + sources: this.state.sources, + controller: this + }), h(Contribute, { + text: 'Add my interactions' + })]); + var interactionsLegend = h('div.interactions-legend', [h(InteractionsMenu, { + cySrv: cySrv + })]); + var content = !errorMessage ? [h(Loader, { + loaded: !loading, + options: { + left: '50%', + color: '#16a085' + } + }, [appBar, interactionsLegend]), h(CytoscapeNetwork, { + cySrv: cySrv, + onMount: function onMount() { + return _this3.loadInteractionsNetwork(); + }, + className: classNames({ + 'network-loading': loading + }) + })] : [errorMessage]; + return h('div.interactions', content); + } + }]); +}(React.Component); +module.exports = Interactions; + +/***/ }), + +/***/ 505: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var ReactDom = __webpack_require__(54); +var h = __webpack_require__(2); +var Popover = __webpack_require__(72); +var IconButton = __webpack_require__(71); +var _require = __webpack_require__(196), + interactionsLayoutOpts = _require.interactionsLayoutOpts, + searchInteractionNodes = _require.searchInteractionNodes; +var InteractionsDownloadMenu = __webpack_require__(509); +var InteractionsToolbar = /*#__PURE__*/function (_React$Component) { + function InteractionsToolbar(props) { + var _this; + _classCallCheck(this, InteractionsToolbar); + _this = _callSuper(this, InteractionsToolbar, [props]); + _this.state = { + searchValue: '' + }; + return _this; + } + _inherits(InteractionsToolbar, _React$Component); + return _createClass(InteractionsToolbar, [{ + key: "handleNodeSearchChange", + value: function handleNodeSearchChange(searchVal) { + var _this2 = this; + this.setState({ + searchValue: searchVal + }, function () { + return searchInteractionNodes(_this2.props.cySrv.get(), searchVal); + }); + } + }, { + key: "focusNodeSearch", + value: function focusNodeSearch() { + ReactDom.findDOMNode(this).querySelector('.element-search-input').focus(); + } + }, { + key: "render", + value: function render() { + var _this3 = this; + var cySrv = this.props.cySrv; + var searchValue = this.state.searchValue; + var cy = cySrv.get(); + var sources = this.props.sources || ['download']; + return h('div.app-toolbar', [h(Popover, { + tippy: { + position: 'bottom', + html: h(InteractionsDownloadMenu, { + cySrv: cySrv, + sources: sources + }) + } + }, [h(IconButton, { + description: 'Downloads', + icon: 'file_download' + })]), h(IconButton, { + description: 'Fit to screen', + onClick: function onClick() { + return cy.animate({ + fit: { + eles: cy.nodes().filter(function (n) { + return !n.hasClass('type-hidden') && !n.hasClass('metric-hidden'); + }), + padding: 25 + }, + easing: 'ease-in-out' + }); + }, + isActive: false, + icon: 'fullscreen' + }), h(IconButton, { + description: 'Reset arrangement', + onClick: function onClick() { + return cy.layout(interactionsLayoutOpts(cy)).run(); + }, + isActive: false, + icon: 'replay' + }), h('div.element-search', [h('input.element-search-input.input-round.input-joined', { + value: searchValue, + onChange: function onChange(e) { + return _this3.handleNodeSearchChange(e.target.value); + }, + type: 'text', + placeholder: 'Search' + }), h('button.element-search-clear', { + onClick: function onClick() { + _this3.handleNodeSearchChange(''); + _this3.focusNodeSearch(); + } + }, [h('i.material-icons', 'close')])])]); + } + }]); +}(React.Component); +module.exports = InteractionsToolbar; + +/***/ }), + +/***/ 506: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var _ = __webpack_require__(6); +var _require = __webpack_require__(24), + NS_GENECARDS = _require.NS_GENECARDS, + NS_NCBI_GENE = _require.NS_NCBI_GENE, + NS_HGNC_SYMBOL = _require.NS_HGNC_SYMBOL, + NS_UNIPROT = _require.NS_UNIPROT; +var InteractionsNodeTooltip = /*#__PURE__*/function (_React$Component) { + function InteractionsNodeTooltip() { + _classCallCheck(this, InteractionsNodeTooltip); + return _callSuper(this, InteractionsNodeTooltip, arguments); + } + _inherits(InteractionsNodeTooltip, _React$Component); + return _createClass(InteractionsNodeTooltip, [{ + key: "render", + value: function render() { + var _this$props = this.props, + node = _this$props.node, + geneMetadata = _this$props.geneMetadata; + var xrefLinks = _.get(geneMetadata, 'summary.xrefLinks', []); + var description = _.get(geneMetadata, 'summary.description', ''); + var aliases = _.get(geneMetadata, 'summary.aliases', []); + var title = node.data('id'); + var links = []; + xrefLinks.forEach(function (link) { + var name; + var url = link.uri; + switch (link.namespace) { + case NS_HGNC_SYMBOL: + name = 'HGNC'; + break; + case NS_UNIPROT: + name = 'UniProt'; + break; + case NS_NCBI_GENE: + name = 'NCBI Gene'; + break; + case NS_GENECARDS: + name = 'GeneCards'; + break; + default: + name = null; + } + links.push({ + name: name, + url: url + }); + }); + return h('div.cy-tooltip', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', title)]), h('div.cy-tooltip-body', [aliases.length > 0 ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Other names')].concat(_toConsumableArray(aliases.slice(0, 3).map(function (alias) { + return h('div.cy-tooltip-field-value', alias); + })))) : null, description != '' ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Description'), h('div.cy-tooltip-field-value', description)]) : null]), links.length > 0 ? h('div.cy-tooltip-footer', [h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', ['Links']), h('div.cy-tooltip-links', links.map(function (link) { + var name = link.name, + url = link.url; + return h('a.plain-link', { + href: url, + target: '_blank' + }, name); + }))])]) : null, h('div.cy-tooltip-call-to-action', [h('a', { + target: '_blank', + href: '/search?q=' + title + }, [h('button.call-to-action', "Find Related Pathways")])])]); + } + }]); +}(React.Component); +module.exports = InteractionsNodeTooltip; + +/***/ }), + +/***/ 507: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var queryString = __webpack_require__(37); +var _require = __webpack_require__(16), + ServerAPI = _require.ServerAPI; +var INTERACTION_TYPES = __webpack_require__(197); +var InteractionsEdgeTooltip = /*#__PURE__*/function (_React$Component) { + function InteractionsEdgeTooltip(props) { + var _this; + _classCallCheck(this, InteractionsEdgeTooltip); + _this = _callSuper(this, InteractionsEdgeTooltip, [props]); + var edges = props.edge.parallelEdges(); + _this.state = { + publications: [], + publicationsLoaded: false, + parallelEdges: edges, + selectedEdge: edges.length === 1 ? edges[0] : null + }; + return _this; + } + _inherits(InteractionsEdgeTooltip, _React$Component); + return _createClass(InteractionsEdgeTooltip, [{ + key: "componentDidMount", + value: function componentDidMount() { + if (this.state.selectedEdge) { + this.getPublications(this.state.selectedEdge); + } + } + }, { + key: "getPublications", + value: function getPublications(edge) { + var _this2 = this; + var pubmedIds = edge.data('pubmedIds'); + this.setState({ + publicationsLoaded: false + }, function () { + ServerAPI.getPubmedPublications(pubmedIds).then(function (publications) { + _this2.setState({ + publications: publications, + publicationsLoaded: true + }); + }).catch(function () { + return _this2.setState({ + publicationsLoaded: true + }); + }); // swallow; + }); + } + }, { + key: "selectEdge", + value: function selectEdge(edge) { + this.setState({ + selectedEdge: edge + }); + this.getPublications(edge); + } + }, { + key: "deselectEdge", + value: function deselectEdge() { + this.setState({ + selectedEdge: null + }); + } + }, { + key: "renderEdge", + value: function renderEdge() { + var _this3 = this; + var _this$state = this.state, + edge = _this$state.selectedEdge, + parallelEdges = _this$state.parallelEdges, + publicationsLoaded = _this$state.publicationsLoaded, + publications = _this$state.publications; + var title = edge.data('id'); + var datasources = edge.data('datasources'); + var pcIds = edge.data('pcIds'); + if (!publicationsLoaded) { + return h('div.cy-tooltip', [h('div.cy-tooltip-content', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', 'Loading...')]), h('div.cy-tooltip-body', [h('div.cy-tooltip-loading-section', [h('i.icon.icon-spinner')])])])]); + } + var providersList = datasources.map(function (ds) { + return h('div', ds); + }); + var publicationList = publications.map(function (publication) { + var id = publication.id, + title = publication.title, + firstAuthor = publication.firstAuthor, + date = publication.date, + source = publication.source; + return h('div.cy-overflow-content', [h('a.plain-link', { + href: 'http://bioregistry.io/pubmed:' + id, + target: '_blank' + }, title), h('div', firstAuthor + ' et al. | ' + source + ' - ' + new Date(date).getFullYear().toString())]); + }); + var detailedViewsList = pcIds.map(function (pcId, index) { + return h('a.plain-link.cy-tooltip-number-link', { + href: '/pathways?' + queryString.stringify({ + uri: pcId + }), + target: '_blank' + }, " ".concat(index + 1, " ")); + }); + return h('div.cy-tooltip', [h('div.cy-tooltip-header', [parallelEdges.length > 1 ? h('button.plain-button.cy-tooltip-back', { + onClick: function onClick() { + return _this3.deselectEdge(); + } + }, [ + // h('i.material-icons', 'arrow_back') // does not work for some reason + h('span', '<')]) : null, h('h2.cy-tooltip-title', title)].filter(function (el) { + return el != null; + })), h('div.cy-tooltip-body', [providersList.length > 0 ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Data Sources'), h('div', providersList)]) : null, publicationList.length > 0 ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Publications'), h('div', publicationList)]) : null, detailedViewsList.length > 0 ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Open a detailed view of this interaction'), h('div.cy-tooltip-links', detailedViewsList)]) : null + // h('div.cy-tooltip-section', [ + // h('div.cy-tooltip-field-name', 'Reactome Links'), + // h('div.cy-tooltip-field-value', reactomeIds) + // ]) + ])]); + } + }, { + key: "renderEdgeChoice", + value: function renderEdgeChoice() { + var _this4 = this; + var edges = this.state.parallelEdges; + var interactionTypeValues = Object.keys(INTERACTION_TYPES).map(function (k) { + return INTERACTION_TYPES[k]; + }); + return h('div.cy-tooltip', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', 'Choose an interaction')]), h('div.cy-tooltip-body', [h('div.cy-tooltip-edge-entries', edges.map(function (edge) { + return h('div.cy-tooltip-edge-entry', [h('a.plain-link.cy-tooltip-edge-link', { + onClick: function onClick() { + return _this4.selectEdge(edge); + } + }, [h('span.cy-tooltip-edge-color', { + className: 'interactions-color-' + interactionTypeValues.find(function (type) { + return edge.hasClass(type); + }).toLowerCase() + }), h('span.cy-tooltip-edge-name', edge.id())])]); + }))])]); + } + }, { + key: "render", + value: function render() { + var selectedEdge = this.state.selectedEdge; + if (selectedEdge) { + return this.renderEdge(); + } else { + return this.renderEdgeChoice(); + } + } + }]); +}(React.Component); +module.exports = InteractionsEdgeTooltip; + +/***/ }), + +/***/ 508: +/***/ (function(module, exports, __webpack_require__) { + +var cytoscape = __webpack_require__(64); +var iStylesheet = cytoscape.stylesheet().selector('edge').css({ + 'opacity': 0.4, + 'line-color': '#555', + 'width': 4, + 'curve-style': 'haystack', + 'haystack-radius': 0.25 +}).selector('.Modification').css({ + 'line-color': '#ffc28b' +}).selector('.Binding').css({ + 'line-color': '#8bd8dd' +}).selector('.Expression').css({ + 'line-color': '#f4a2a3' +}).selector('.Other').css({ + 'line-color': '#949494' +}).selector('node[class@="ball"]').css({ + 'font-size': 20, + 'color': '#fff', + 'background-color': '#555', + 'text-outline-color': '#555', + 'text-outline-width': 4, + 'width': 50, + 'height': 50, + 'label': 'data(id)', + 'text-halign': 'center', + 'text-valign': 'center' +}).selector('.highlighted').css({ + 'opacity': 1 +}).selector('.unhighlighted').css({ + 'opacity': 0.2 +}).selector('.metric-hidden').css({ + 'display': 'none' +}).selector('.type-hidden').css({ + 'display': 'none' +}).selector(".matched").css({ + 'border-color': 'yellow', + 'border-width': 10, + 'background-color': '#606000', + 'text-outline-color': '#606000' +}).selector('node[[degree = 0]]').css({ + 'display': 'none' +}).selector('node[?queried]').css({ + 'display': 'element', + 'width': 75, + 'height': 75 +}).selector('node:selected').css({ + 'background-color': '#0169d9', + 'text-outline-color': '#0169d9' +}).selector('edge:selected').css({ + 'z-index': 999, + 'opacity': 1 +}); +module.exports = iStylesheet; + +/***/ }), + +/***/ 509: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var saveAs = __webpack_require__(91).saveAs; +var Loader = __webpack_require__(38); +var InteractionsDownloadMenu = /*#__PURE__*/function (_React$Component) { + function InteractionsDownloadMenu(props) { + var _this; + _classCallCheck(this, InteractionsDownloadMenu); + _this = _callSuper(this, InteractionsDownloadMenu, [props]); + _this.state = { + loading: false + }; + return _this; + } + _inherits(InteractionsDownloadMenu, _React$Component); + return _createClass(InteractionsDownloadMenu, [{ + key: "downloadPng", + value: function downloadPng() { + var _this2 = this; + var _this$props = this.props, + cySrv = _this$props.cySrv, + sources = _this$props.sources; + var cy = cySrv.get(); + var saveCyPng = function saveCyPng() { + setTimeout(function () { + saveAs(cy.png({ + output: 'blob', + scale: 2, + bg: 'white', + full: true + }), "".concat(sources.join('_'), "_interactions.png")); + _this2.setState({ + loading: false + }); + }, 1); + }; + this.setState({ + loading: true + }, function () { + return saveCyPng(); + }); + } + }, { + key: "downloadSif", + value: function downloadSif() { + var _this$props2 = this.props, + cySrv = _this$props2.cySrv, + sources = _this$props2.sources; + var edgeIds = cySrv.get().edges().map(function (edge) { + return edge.data('id'); + }).sort().join('\n'); + saveAs(new File([edgeIds], "".concat(sources.join('_'), "_interactions.sif"), { + type: 'text/plain;charset=utf-8' + })); + } + }, { + key: "render", + value: function render() { + var _this3 = this; + return h('div.file-download-menu.interactions-download-menu', [h('h2', 'Download As...'), h('div.file-download-content', [h('div.download-option', { + onClick: function onClick() { + return _this3.downloadPng(); + } + }, [h('div.download-option-header', [h('h3', 'Image (PNG)')]), h('div.download-option-description', 'Download an image of the entire view')]), h('div.download-option', { + onClick: function onClick() { + return _this3.downloadSif(); + } + }, [h('div.download-option-header', [h('h3', 'SIF')]), h('div.download-option-description', 'List of interaction pairs to be used with Cytoscape desktop, analysis, and graph algorithms.')]), h(Loader, { + loaded: !this.state.loading + })])]); + } + }]); +}(React.Component); +module.exports = InteractionsDownloadMenu; + +/***/ }), + +/***/ 510: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var classNames = __webpack_require__(14); +var INTERACTION_TYPES = __webpack_require__(197); +var InteractionsMenu = /*#__PURE__*/function (_React$Component) { + function InteractionsMenu(props) { + var _this; + _classCallCheck(this, InteractionsMenu); + _this = _callSuper(this, InteractionsMenu, [props]); + var BINDING = INTERACTION_TYPES.BINDING, + MODIFICATION = INTERACTION_TYPES.MODIFICATION, + EXPRESSION = INTERACTION_TYPES.EXPRESSION, + OTHER = INTERACTION_TYPES.OTHER; + _this.state = _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, BINDING, true), MODIFICATION, true), EXPRESSION, true), OTHER, true); + return _this; + } + _inherits(InteractionsMenu, _React$Component); + return _createClass(InteractionsMenu, [{ + key: "toggleIntnType", + value: function toggleIntnType(type) { + var cySrv = this.props.cySrv; + var cy = cySrv.get(); + var edges = cy.edges(".".concat(type)); + var nodes = edges.connectedNodes(); + var nodeHasNoVisibleEdges = function nodeHasNoVisibleEdges(node) { + return node.connectedEdges().every(function (edge) { + return edge.hasClass('type-hidden') || edge.hasClass('metric-hidden'); + }); + }; + if (this.state[type]) { + edges.addClass('type-hidden'); + nodes.filter(nodeHasNoVisibleEdges).addClass('type-hidden'); + } else { + nodes.removeClass('type-hidden'); + edges.removeClass('type-hidden'); + } + cy.emit('hide-type'); + this.setState(_defineProperty({}, type, !this.state[type])); + } + }, { + key: "render", + value: function render() { + var _this2 = this; + var cySrv = this.props.cySrv; + var _this$state2 = this.state, + Binding = _this$state2.Binding, + Expression = _this$state2.Expression, + Modification = _this$state2.Modification, + Other = _this$state2.Other; + var cy = cySrv.get(); + var hasType = function hasType(cy, type) { + return cy.edges(".".concat(type)).length > 0; + }; + var BINDING = INTERACTION_TYPES.BINDING, + MODIFICATION = INTERACTION_TYPES.MODIFICATION, + EXPRESSION = INTERACTION_TYPES.EXPRESSION, + OTHER = INTERACTION_TYPES.OTHER; + var hasModifications = hasType(cy, MODIFICATION); + var hasExpressions = hasType(cy, EXPRESSION); + var hasBindings = hasType(cy, BINDING); + var hasOther = hasType(cy, OTHER); + var InteractionToggleButton = function InteractionToggleButton(props) { + var type = props.type, + active = props.active; + var legendClass = "interactions-color-".concat(type.toLowerCase()); + return h('div', { + onClick: function onClick() { + return _this2.toggleIntnType(type); + }, + className: classNames({ + 'interactions-filter-button': true, + 'interactions-filter-button-active': active + }) + }, [h('div', { + className: classNames(_defineProperty(_defineProperty({}, legendClass, true), 'interactions-color', true)) + }), h('div.interactions-filter-label', type), h('div.interactions-filter-check', [h('i.material-icons', active ? 'check_box' : 'check_box_outline_blank')])]); + }; + return h('div.interactions-sidebar', [hasBindings ? h(InteractionToggleButton, { + type: BINDING, + active: Binding + }) : null, hasExpressions ? h(InteractionToggleButton, { + type: EXPRESSION, + active: Expression + }) : null, hasModifications ? h(InteractionToggleButton, { + type: MODIFICATION, + active: Modification + }) : null, hasOther ? h(InteractionToggleButton, { + type: OTHER, + active: Other + }) : null]); + } + }]); +}(React.Component); +module.exports = InteractionsMenu; + +/***/ }), + +/***/ 511: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var _ = __webpack_require__(6); +var Loader = __webpack_require__(38); +var classNames = __webpack_require__(14); +var queryString = __webpack_require__(37); +var EnrichmentToolbar = __webpack_require__(512); +var _require = __webpack_require__(55), + PcLogoLink = _require.PcLogoLink, + CytoscapeNetwork = _require.CytoscapeNetwork, + Popover = _require.Popover; +var CytoscapeService = __webpack_require__(90); +var _require2 = __webpack_require__(16), + ServerAPI = _require2.ServerAPI; +var _require3 = __webpack_require__(198), + enrichmentLayout = _require3.enrichmentLayout, + enrichmentStylesheet = _require3.enrichmentStylesheet, + bindEvents = _require3.bindEvents; +var _require4 = __webpack_require__(63), + TimeoutError = _require4.TimeoutError; +var _require5 = __webpack_require__(73), + ErrorMessage = _require5.ErrorMessage; +var _require6 = __webpack_require__(94), + Contribute = _require6.Contribute; +var MAX_ELEMENTS_CUTOFF = 3; +var LIST_ELEMENTS_SHOWN = MAX_ELEMENTS_CUTOFF - 1; +var Enrichment = /*#__PURE__*/function (_React$Component) { + function Enrichment(props) { + var _this; + _classCallCheck(this, Enrichment); + _this = _callSuper(this, Enrichment, [props]); + _this.state = { + cySrv: new CytoscapeService({ + style: enrichmentStylesheet, + onMount: bindEvents + }), + sources: _.uniq(queryString.parse(props.location.search).source.split(',')), + error: null, + loading: true, + networkEmpty: false + }; + if (true) { + _this.state.cySrv.getPromise().then(function (cy) { + return window.cy = cy; + }); + } + return _this; + } + _inherits(Enrichment, _React$Component); + return _createClass(Enrichment, [{ + key: "componentDidMount", + value: function componentDidMount() { + this.loadEnrichment(); + } + }, { + key: "loadEnrichment", + value: function loadEnrichment() { + var _this2 = this; + var _this$state = this.state, + sources = _this$state.sources, + cySrv = _this$state.cySrv; + var cy = cySrv.get(); + var getNetworkJson = /*#__PURE__*/function () { + var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() { + var _yield$ServerAPI$enri, pathways, enrichmentNetwork, networkHasZeroNodes; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + _context.prev = 0; + _context.next = 3; + return ServerAPI.enrichmentAPI({ + query: sources + }, 'analysis'); + case 3: + _yield$ServerAPI$enri = _context.sent; + pathways = _yield$ServerAPI$enri.pathways; + _context.next = 7; + return ServerAPI.enrichmentAPI({ + pathways: pathways + }, 'visualization'); + case 7: + enrichmentNetwork = _context.sent; + networkHasZeroNodes = enrichmentNetwork.graph.elements.nodes.length === 0; + enrichmentNetwork.graph.elements.nodes.forEach(function (node) { + var intersection = _.intersection(node.data.geneSet, sources); + _.assign(node.data, { + intersection: intersection + }); + }); + cy.remove('*'); + cy.add({ + edges: enrichmentNetwork.graph.elements.edges, + nodes: enrichmentNetwork.graph.elements.nodes + }); + enrichmentLayout(cy).then(function () { + _this2.setState({ + loading: false, + networkEmpty: networkHasZeroNodes, + error: null + }); + }); + _context.next = 18; + break; + case 15: + _context.prev = 15; + _context.t0 = _context["catch"](0); + _this2.setState({ + error: _context.t0, + loading: false + }); + case 18: + case "end": + return _context.stop(); + } + }, _callee, null, [[0, 15]]); + })); + return function getNetworkJson() { + return _ref.apply(this, arguments); + }; + }(); + this.setState({ + loading: true, + networkEmpty: false + }, function () { + return getNetworkJson(); + }); + } + }, { + key: "render", + value: function render() { + var _this$state2 = this.state, + loading = _this$state2.loading, + cySrv = _this$state2.cySrv, + networkEmpty = _this$state2.networkEmpty, + sources = _this$state2.sources, + error = _this$state2.error; + var titleContent = []; + var errorMessage; + if (networkEmpty) { + errorMessage = h(ErrorMessage, { + title: 'No results to display.', + body: 'Try different genes in your search.', + footer: null, + logo: true + }); + } else if (error instanceof TimeoutError) { + errorMessage = h(ErrorMessage, { + title: 'This is taking longer than expected', + body: 'Try again later.', + logo: true + }); + } else if (error) { + errorMessage = h(ErrorMessage, { + logo: true + }); + } + if (sources.length === 1) { + titleContent.push(h('span', "Pathways enriched for ".concat(sources[0]))); + } + if (1 < sources.length && sources.length <= MAX_ELEMENTS_CUTOFF) { + titleContent.push(h('span', "Pathways enriched for ".concat(sources.slice(0, sources.length - 1).join(', '), " and ").concat(sources.slice(-1)))); + } + if (sources.length > MAX_ELEMENTS_CUTOFF) { + titleContent.push(h('span', "Pathways enriched for ".concat(sources.slice(0, LIST_ELEMENTS_SHOWN).join(', '), " and "))); + titleContent.push(h(Popover, { + tippy: { + position: 'bottom', + html: h('div.enrichment-sources-popover', sources.slice(LIST_ELEMENTS_SHOWN).sort().map(function (s) { + return h('div', s); + })) + } + }, [h('a.plain-link.enrichment-popover-link', "".concat(sources.length - LIST_ELEMENTS_SHOWN, " other gene(s)"))])); + } + var appBar = h('div.app-bar.interactions-bar', [h('div.app-bar-branding', [h(PcLogoLink), h('div.app-bar-title', titleContent)]), h(EnrichmentToolbar, { + cySrv: cySrv, + sources: this.state.sources, + controller: this + }), h(Contribute, { + text: 'Add my pathway' + })]); + return !errorMessage ? h('div.enrichment', [h(Loader, { + loaded: !loading, + options: { + left: '50%', + color: '#16a085' + } + }, [appBar]), h(CytoscapeNetwork, { + cySrv: cySrv, + className: classNames({ + 'network-loading': loading + }) + })]) : errorMessage; + } + }]); +}(React.Component); +module.exports = Enrichment; + +/***/ }), + +/***/ 512: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var ReactDom = __webpack_require__(54); +var h = __webpack_require__(2); +var _require = __webpack_require__(55), + Popover = _require.Popover, + IconButton = _require.IconButton; +var EnrichmentDownloadMenu = __webpack_require__(513); +var _require2 = __webpack_require__(198), + enrichmentLayout = _require2.enrichmentLayout, + searchEnrichmentNodes = _require2.searchEnrichmentNodes; +var EnrichmentToolbar = /*#__PURE__*/function (_React$Component) { + function EnrichmentToolbar(props) { + var _this; + _classCallCheck(this, EnrichmentToolbar); + _this = _callSuper(this, EnrichmentToolbar, [props]); + _this.state = { + searchValue: '' + }; + return _this; + } + _inherits(EnrichmentToolbar, _React$Component); + return _createClass(EnrichmentToolbar, [{ + key: "handleNodeSearchChange", + value: function handleNodeSearchChange(searchVal) { + var _this2 = this; + this.setState({ + searchValue: searchVal + }, function () { + return searchEnrichmentNodes(_this2.props.cySrv.get(), searchVal); + }); + } + }, { + key: "focusNodeSearch", + value: function focusNodeSearch() { + ReactDom.findDOMNode(this).querySelector('.element-search-input').focus(); + } + }, { + key: "render", + value: function render() { + var _this3 = this; + var cySrv = this.props.cySrv; + var searchValue = this.state.searchValue; + var cy = cySrv.get(); + return h('div.app-toolbar', [h(Popover, { + tippy: { + position: 'bottom', + html: h(EnrichmentDownloadMenu, { + cySrv: cySrv + }) + } + }, [h(IconButton, { + description: 'Downloads', + icon: 'file_download' + })]), h(IconButton, { + description: 'Fit to screen', + onClick: function onClick() { + return cy.animate({ + fit: { + padding: 25 + }, + easing: 'ease-in-out' + }); + }, + isActive: false, + icon: 'fullscreen' + }), h(IconButton, { + description: 'Reset arrangement', + onClick: function onClick() { + return enrichmentLayout(cy); + }, + isActive: false, + icon: 'replay' + }), h('div.element-search', [h('input.element-search-input.input-round.input-joined', { + value: searchValue, + onChange: function onChange(e) { + return _this3.handleNodeSearchChange(e.target.value); + }, + type: 'text', + placeholder: 'Search' + }), h('button.element-search-clear', { + onClick: function onClick() { + _this3.handleNodeSearchChange(''); + _this3.focusNodeSearch(); + } + }, [h('i.material-icons', 'close')])])]); + } + }]); +}(React.Component); +module.exports = EnrichmentToolbar; + +/***/ }), + +/***/ 513: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var saveAs = __webpack_require__(91).saveAs; +var Loader = __webpack_require__(38); +var EnrichmentDownloadMenu = /*#__PURE__*/function (_React$Component) { + function EnrichmentDownloadMenu(props) { + var _this; + _classCallCheck(this, EnrichmentDownloadMenu); + _this = _callSuper(this, EnrichmentDownloadMenu, [props]); + _this.state = { + loading: false + }; + return _this; + } + _inherits(EnrichmentDownloadMenu, _React$Component); + return _createClass(EnrichmentDownloadMenu, [{ + key: "downloadPng", + value: function downloadPng() { + var _this2 = this; + var cySrv = this.props.cySrv; + var cy = cySrv.get(); + var saveCyPng = function saveCyPng() { + setTimeout(function () { + saveAs(cy.png({ + output: 'blob', + scale: 2, + bg: 'white', + full: true + }), "enrichment-network.png"); + _this2.setState({ + loading: false + }); + }, 1); + }; + this.setState({ + loading: true + }, function () { + return saveCyPng(); + }); + } + }, { + key: "downloadJson", + value: function downloadJson() { + var _this3 = this; + var cySrv = this.props.cySrv; + var cy = cySrv.get(); + var saveCyJson = function saveCyJson() { + setTimeout(function () { + saveAs(new Blob([JSON.stringify(cy.json(), null, 2)], { + type: 'text/plain;charset=utf-8' + }), "enrichment-network.json"); + _this3.setState({ + loading: false + }); + }, 1); + }; + this.setState({ + loading: true + }, function () { + return saveCyJson(); + }); + } + }, { + key: "render", + value: function render() { + var _this4 = this; + return h('div.file-download-menu', [h('h2', 'Network Downloads'), h('div.file-download-content', [h('div.download-option', { + onClick: function onClick() { + return _this4.downloadPng(); + } + }, [h('div.download-option-header', [h('h3', 'Image (PNG)')]), h('div.download-option-description', 'Download an image of the entire view')]), h('div.download-option', { + onClick: function onClick() { + return _this4.downloadJson(); + } + }, [h('div.download-option-header', [h('h3', 'Cytoscape JSON')]), h('div.download-option-description', 'Download a Cytoscape JSON file, compatible with Cytoscape and Cytoscape.js')]), h(Loader, { + loaded: !this.state.loading + })])]); + } + }]); +}(React.Component); +module.exports = EnrichmentDownloadMenu; + +/***/ }), + +/***/ 514: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var _ = __webpack_require__(6); +var _require = __webpack_require__(24), + NS_GENE_ONTOLOGY = _require.NS_GENE_ONTOLOGY, + NS_REACTOME = _require.NS_REACTOME; +var _require2 = __webpack_require__(16), + ServerAPI = _require2.ServerAPI; +var EnrichmentTooltip = /*#__PURE__*/function (_React$Component) { + function EnrichmentTooltip(props) { + var _this; + _classCallCheck(this, EnrichmentTooltip); + _this = _callSuper(this, EnrichmentTooltip, [props]); + _this.state = { + name: '', + description: '', + descriptionLoaded: false + }; + return _this; + } + _inherits(EnrichmentTooltip, _React$Component); + return _createClass(EnrichmentTooltip, [{ + key: "componentDidMount", + value: function componentDidMount() { + var _this2 = this; + var node = this.props.node; + var id = node.data('id'); + var namespace = node.data('namespace'); + var descriptionOnFail = 'No description available'; + if (namespace === NS_GENE_ONTOLOGY) { + ServerAPI.getGoInformation(id.replace('GO:', '')).then(function (res) { + var description = _.get(res, 'results[0].definition.text', descriptionOnFail); + var update = function update() { + return _this2.setState({ + name: NS_GENE_ONTOLOGY.toUpperCase(), + description: description, + descriptionLoaded: true + }); + }; + update(); + }).catch(function () { + return _this2.setState({ + name: NS_GENE_ONTOLOGY.toUpperCase(), + descriptionLoaded: true + }); + }); + } + if (namespace === NS_REACTOME) { + ServerAPI.getReactomeInformation(id.replace('REAC:', '')).then(function (res) { + var description = _.get(res, 'summation[0].text', descriptionOnFail); + var update = function update() { + return _this2.setState({ + name: NS_REACTOME.toUpperCase(), + description: description, + descriptionLoaded: true + }); + }; + update(); + }).catch(function () { + return _this2.setState({ + name: NS_REACTOME.toUpperCase(), + descriptionLoaded: true + }); + }); + } + } + }, { + key: "render", + value: function render() { + var node = this.props.node; + var _this$state = this.state, + description = _this$state.description, + name = _this$state.name; + var title = node.data('name'); + var sharedGeneList = node.data('intersection').sort(); + var sharedGeneCount = sharedGeneList.length; + var url = node.data('uri'); + if (!this.state.descriptionLoaded) { + return h('div.cy-tooltip', [h('div.cy-tooltip-content', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', 'Loading...')]), h('div.cy-tooltip-body', [h('div.cy-tooltip-loading-section', [h('i.icon.icon-spinner')])])])]); + } + var descriptionSection = description ? h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Description'), h('div.cy-tooltip-field-value', description)]) : null; + return h('div.cy-tooltip', [h('div.cy-tooltip-content', [h('div.cy-tooltip-header', [h('h2.cy-tooltip-title', [h('a.plain-link', { + href: url, + target: '_blank' + }, title[0].toUpperCase() + title.substr(1)), h('div.cy-tooltip-type-chip', name)])]), h('div.cy-tooltip-body', [descriptionSection, h('div.cy-tooltip-section', [h('div.cy-tooltip-field-name', 'Genes Shared with Entered List (' + sharedGeneCount + ')'), h('div.cy-tooltip-field-value', sharedGeneList.join(', '))])]), h('div.cy-tooltip-call-to-action', [h('a', { + target: '_blank', + href: '/search?q=' + title + }, [h('button.call-to-action', 'Find Related Pathways')])])])]); + } + }]); +}(React.Component); +module.exports = EnrichmentTooltip; + +/***/ }), + +/***/ 515: +/***/ (function(module, exports, __webpack_require__) { + +function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } +function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } +function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } +function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } +function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } +function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } +var _ = __webpack_require__(6); +var _require = __webpack_require__(516), + stemmer = _require.stemmer; +var stopWords = __webpack_require__(517); +var flaggedWords = __webpack_require__(518); + +// This module summarizes text for a enrichment cluster. +// Here is the general algorithm: +// Input Sanitization +// 1. tokenize by a list of delimiters e.g. tabs, spaces, newlines, special characters +// 2. filter the tokens for stop words or flagged words +// Preprocessing +// 3. compute the occurences of each token +// 4. compute the word stem of the token using the Porter Stemmer Algorithm +// 5. associate each stem with the original token +// Selection +// 6. for each stem, get the token associated with the most occurences + +// For more context/information: +// https://tagcrowd.com/faq.html#howto +// http://wordcloud.cs.arizona.edu/faq.html#q-how-it-works +// http://snowball.tartarus.org/algorithms/porter/stemmer.html + +// Input: String -- representing text labels of pathway names of a given component +// Output: Array of strings -- representing the most common words that are not stop words or flagged words +var generateClusterLabels = function generateClusterLabels(text) { + var delimiterRegex = /[\t \n\r\f!\\#$%&()*+,.<=>?@[^\\\]`_{|}~\\'"]/; + var filterWords = new Set([].concat(_toConsumableArray(stopWords), [flaggedWords])); + var wordOccurenceMap = new Map(); + var stemToWordsMap = new Map(); + var incrKey = function incrKey(m, k) { + if (m.has(k)) { + m.set(k, m.get(k) + 1); + } else { + m.set(k, 1); + } + }; + var appendKey = function appendKey(m, k, v) { + if (m.has(k)) { + m.set(k, m.get(k).add(v)); + } else { + m.set(k, new Set([v])); + } + }; + + // input sanitization + var tokens = text.split(delimiterRegex).filter(function (word) { + return !filterWords.has(word) && word !== ''; + }); + + // preprocess the tokens -- compute word occurences, compute word stems + var wordStems = _.uniq(tokens.map(function (token) { + incrKey(wordOccurenceMap, token); + var wordStem = stemmer(token.toLowerCase()); + appendKey(stemToWordsMap, wordStem, token); + return wordStem; + })); + + // for each stem, get its associated tokens and return the token with the most occurences + var words = wordStems.map(function (ws) { + var associatedWords = _toConsumableArray(stemToWordsMap.get(ws)).sort(function (w0, w1) { + return wordOccurenceMap.get(w1) > wordOccurenceMap.get(w0); + }); + return associatedWords[0]; + }); + + // return all words that appear at least once + return words.filter(function (word) { + return wordOccurenceMap.get(word) > 1; + }); +}; +module.exports = { + generateClusterLabels: generateClusterLabels +}; + +/***/ }), + +/***/ 517: +/***/ (function(module, exports) { + +module.exports = ["a","a's","able","about","above","according","accordingly","across","actually","after","afterwards","again","against","ain't","all","allow","allows","almost","alone","along","already","also","although","always","am","among","amongst","an","and","another","any","anybody","anyhow","anyone","anything","anyway","anyways","anywhere","apart","appear","appreciate","appropriate","are","aren't","around","as","aside","ask","asking","associated","at","available","away","awfully","b","be","became","because","become","becomes","becoming","been","before","beforehand","behind","being","believe","below","beside","besides","best","better","between","beyond","both","brief","but","by","c","c'mon","c's","came","can","can't","cannot","cant","cause","causes","certain","certainly","changes","clearly","co","com","come","comes","concerning","consequently","consider","considering","contain","containing","contains","corresponding","could","couldn't","course","currently","d","definitely","described","despite","did","didn't","different","do","does","doesn't","doing","don't","done","down","downwards","during","e","each","edu","eg","eight","either","else","elsewhere","enough","entirely","especially","et","etc","even","ever","every","everybody","everyone","everything","everywhere","ex","exactly","example","except","f","far","few","fifth","first","five","followed","following","follows","for","former","formerly","forth","four","from","further","furthermore","g","get","gets","getting","given","gives","go","goes","going","gone","got","gotten","greetings","h","had","hadn't","happens","hardly","has","hasn't","have","haven't","having","he","he's","hello","help","hence","her","here","here's","hereafter","hereby","herein","hereupon","hers","herself","hi","him","himself","his","hither","hopefully","how","howbeit","however","i","i'd","i'll","i'm","i've","ie","if","ignored","immediate","in","inasmuch","inc","indeed","indicate","indicated","indicates","inner","insofar","instead","into","inward","is","isn't","it","it'd","it'll","it's","its","itself","j","just","k","keep","keeps","kept","know","knows","known","l","last","lately","later","latter","latterly","least","less","lest","let","let's","like","liked","likely","little","look","looking","looks","ltd","m","mainly","many","may","maybe","me","mean","meanwhile","merely","might","more","moreover","most","mostly","much","must","my","myself","n","name","namely","nd","near","nearly","necessary","need","needs","neither","never","nevertheless","new","next","nine","no","nobody","non","none","noone","nor","normally","not","nothing","novel","now","nowhere","o","obviously","of","off","often","oh","ok","okay","old","on","once","one","ones","only","onto","or","other","others","otherwise","ought","our","ours","ourselves","out","outside","over","overall","own","p","particular","particularly","per","perhaps","placed","please","plus","possible","presumably","probably","provides","q","que","quite","qv","r","rather","rd","re","really","reasonably","regarding","regardless","regards","relatively","respectively","right","s","said","same","saw","say","saying","says","second","secondly","see","seeing","seem","seemed","seeming","seems","seen","self","selves","sensible","sent","serious","seriously","seven","several","shall","she","should","shouldn't","since","six","so","some","somebody","somehow","someone","something","sometime","sometimes","somewhat","somewhere","soon","sorry","specified","specify","specifying","still","sub","such","sup","sure","t","t's","take","taken","tell","tends","th","than","thank","thanks","thanx","that","that's","thats","the","their","theirs","them","themselves","then","thence","there","there's","thereafter","thereby","therefore","therein","theres","thereupon","these","they","they'd","they'll","they're","they've","think","third","this","thorough","thoroughly","those","though","three","through","throughout","thru","thus","to","together","too","took","toward","towards","tried","tries","truly","try","trying","twice","two","u","un","under","unfortunately","unless","unlikely","until","unto","up","upon","us","use","used","useful","uses","using","usually","uucp","v","value","various","very","via","viz","vs","w","want","wants","was","wasn't","way","we","we'd","we'll","we're","we've","welcome","well","went","were","weren't","what","what's","whatever","when","whence","whenever","where","where's","whereafter","whereas","whereby","wherein","whereupon","wherever","whether","which","while","whither","who","who's","whoever","whole","whom","whose","why","will","willing","wish","with","within","without","won't","wonder","would","would","wouldn't","x","y","yes","yet","you","you'd","you'll","you're","you've","your","yours","yourself","yourselves","z","zero"] + +/***/ }), + +/***/ 518: +/***/ (function(module, exports) { + +module.exports = ["kegg","reactome","react","biocarta","go","nci","msigdb"] + +/***/ }), + +/***/ 519: +/***/ (function(module, exports, __webpack_require__) { + +var cytoscape = __webpack_require__(64); +var DEFAULT_NODE_SIZE = 30; +var getNodeSize = function getNodeSize(node) { + var geneCount = node.data('geneCount') || DEFAULT_NODE_SIZE; + return Math.min(Math.max(DEFAULT_NODE_SIZE, geneCount), 100); +}; +var enrichmentStylesheet = cytoscape.stylesheet().selector('edge').css({ + 'opacity': 0.3, + 'curve-style': 'haystack', + 'haystack-radius': 0, + 'line-color': '#555', + 'width': function width(edge) { + var similarity = edge.data('similarity'); + if (similarity <= 0.3) { + return 2; + } + if (similarity <= 0.75) { + return 4; + } + return 12; + } +}).selector('node').css({ + 'font-size': 14, + 'color': '#fff', + 'background-color': '#333', + 'text-outline-color': '#333', + 'text-outline-width': 4, + 'text-wrap': 'wrap', + 'text-max-width': 175, + 'width': function width(node) { + return getNodeSize(node); + }, + 'height': function height(node) { + return getNodeSize(node); + }, + 'label': function label(node) { + return node.data('name'); + }, + 'min-zoomed-font-size': 5, + 'text-halign': 'center', + 'text-valign': 'center', + 'text-events': 'yes' +}).selector('$node > node').css({ + 'text-outline-width': 0, + 'label': function label(node) { + return node.data('tags') != '' ? "Tags: ".concat(node.data('tags')) : ''; + }, + 'border-width': 5, + 'background-color': 'white', + 'color': '#333', + 'text-valign': 'bottom', + 'text-max-width': 1000, + 'font-size': 40, + 'text-events': 'no' +}).selector('node[?queried]').css({ + 'background-color': 'blue', + 'opacity': 1, + 'z-compound-depth': 'top', + 'color': 'white', + 'text-outline-color': 'black' +}).selector('node:selected').css({ + 'background-color': '#0169d9', + 'text-outline-color': '#0169d9' +}).selector('edge:selected').css({ + 'z-index': 999, + 'opacity': 1, + 'line-color': '#0169d9' +}).selector('.hidden').css({ + 'display': 'none' +}).selector('.highlighted').css({ + 'opacity': 1 +}).selector('.unhighlighted').css({ + 'opacity': 0.1 +}).selector(".matched").css({ + 'border-color': 'yellow', + 'border-width': 10, + 'background-color': '#606000', + 'text-outline-color': '#606000' +}); +module.exports = enrichmentStylesheet; + +/***/ }), + +/***/ 520: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var h = __webpack_require__(2); +var _require = __webpack_require__(1), + Component = _require.Component; +var _require2 = __webpack_require__(60), + Link = _require2.Link; +var _require3 = __webpack_require__(16), + ServerAPI = _require3.ServerAPI; +var Biofactoid = /*#__PURE__*/function (_Component) { + function Biofactoid(props) { + var _this; + _classCallCheck(this, Biofactoid); + _this = _callSuper(this, Biofactoid, [props]); + _this.state = { + docs: [] + }; + return _this; + } + _inherits(Biofactoid, _Component); + return _createClass(Biofactoid, [{ + key: "componentDidMount", + value: function componentDidMount() { + var _this2 = this; + ServerAPI.getAllDocs().then(function (res) { + return _this2.setState({ + docs: res + }); + }); + } + }, { + key: "render", + value: function render() { + var docs = this.state.docs; + return h('div.biofactoid', docs.map(function (f) { + return h(Link, { + className: 'plain-link', + to: { + pathname: "/biofactoid/".concat(f.id) + }, + target: '_blank' + }, f.id); + })); + } + }]); +}(Component); +module.exports = Biofactoid; + +/***/ }), + +/***/ 521: +/***/ (function(module, exports, __webpack_require__) { + +var cytoscape = __webpack_require__(64); + +//Layouts +var coseBilkent = __webpack_require__(522); +var cola = __webpack_require__(523); +var expandCollapse = __webpack_require__(531); + +//Tooltips +var popper = __webpack_require__(537); +module.exports = function () { + cytoscape.use(cola); + cytoscape.use(coseBilkent); + cytoscape.use(expandCollapse); + cytoscape.use(popper); +}; + +/***/ }), + +/***/ 55: +/***/ (function(module, exports, __webpack_require__) { + +var Dropdown = __webpack_require__(484); +var Popover = __webpack_require__(72); +var Tooltip = __webpack_require__(191); +var IconButton = __webpack_require__(71); +var _require = __webpack_require__(485), + Card = _require.Card, + CardGrid = _require.CardGrid; +var _require2 = __webpack_require__(486), + AppCard = _require2.AppCard; +var PcLogoLink = __webpack_require__(193); +var EmptyNetwork = __webpack_require__(487); +var Sidebar = __webpack_require__(488); +var CytoscapeNetwork = __webpack_require__(489); +module.exports = { + Dropdown: Dropdown, + Popover: Popover, + Tooltip: Tooltip, + IconButton: IconButton, + Card: Card, + CardGrid: CardGrid, + AppCard: AppCard, + PcLogoLink: PcLogoLink, + EmptyNetwork: EmptyNetwork, + Sidebar: Sidebar, + CytoscapeNetwork: CytoscapeNetwork +}; + +/***/ }), + +/***/ 63: +/***/ (function(module, exports, __webpack_require__) { + +var _require = __webpack_require__(461), + fetch = _require.safeFetch, + TimeoutError = _require.TimeoutError; +module.exports = { + fetch: fetch, + TimeoutError: TimeoutError +}; + +/***/ }), + +/***/ 71: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var Tooltip = __webpack_require__(191); +var classNames = __webpack_require__(14); +var IconButton = /*#__PURE__*/function (_React$Component) { + function IconButton() { + _classCallCheck(this, IconButton); + return _callSuper(this, IconButton, arguments); + } + _inherits(IconButton, _React$Component); + return _createClass(IconButton, [{ + key: "render", + value: function render() { + var _this$props = this.props, + description = _this$props.description, + _onClick = _this$props.onClick, + isActive = _this$props.isActive, + icon = _this$props.icon; + _onClick = _onClick || function () {}; + return h('button.icon-button.button-toggle.plain-button', { + onClick: function onClick(e) { + return _onClick(e); + }, + className: classNames({ + 'button-toggle-on': isActive + }) + }, [h(Tooltip, { + description: description + }, [h('span', [h('i.material-icons', icon)])])]); + } + }]); +}(React.Component); +module.exports = IconButton; + +/***/ }), + +/***/ 72: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var ReactDom = __webpack_require__(54); +var h = __webpack_require__(2); +var hh = __webpack_require__(123); +var Tippy = __webpack_require__(190); +var _ = __webpack_require__(6); +var Mousetrap = __webpack_require__(482); +var EventEmitter = __webpack_require__(483); +var tippyEmitter = new EventEmitter(); +var tippyDefaults = __webpack_require__(192); +Mousetrap.bind('escape', function () { + return tippyEmitter.emit('esc'); +}); +var Popover = /*#__PURE__*/function (_React$Component) { + function Popover(props) { + _classCallCheck(this, Popover); + return _callSuper(this, Popover, [props]); + } + _inherits(Popover, _React$Component); + return _createClass(Popover, [{ + key: "render", + value: function render() { + var _this = this; + var p = this.props; + return h('span.popover-target', { + ref: function ref(el) { + return _this.target = el; + }, + onClick: p.onClick + }, p.children); + } + }, { + key: "renderTipContent", + value: function renderTipContent() { + var el = this.props.tippy.html; + if (_.isFunction(el)) { + el = h(el); + } + ReactDom.render(el, this.content); + } + }, { + key: "componentDidMount", + value: function componentDidMount() { + var _this2 = this; + var p = this.props; + var target = p.target || this.target; + var options = p.tippy; + var content = this.content = hh('div', { + className: (this.props.className || '') + ' popover-content' + }); + var rawTippyOptions = _.assign({}, tippyDefaults, options); + var tippyOptions = _.assign({}, rawTippyOptions, { + html: content, + hideOnClick: false + }); + this.renderTipContent(); + var tippy = Tippy(target, tippyOptions).tooltips[0]; + var show = function show() { + return tippy.show(); + }; + var hide = function hide() { + return tippy.hide(); + }; + if (p.show) { + p.show(show); + } + if (p.hide) { + p.hide(hide); + } + this.showTippy = function () { + return tippy.show(); + }; + this.hideTippy = function () { + return tippy.hide(); + }; + this.destroyTippy = function () { + return tippy.destroy(); + }; + tippyEmitter.on('esc', this.hideTippy); + + // the tippy hide on click doesn't work with and nested tippies otherwise + if (rawTippyOptions.hideOnClick) { + this.onBodyClick = function (e) { + var parent = e.target; + var hide = true; + while (parent !== document.body) { + if (parent === content || parent === target) { + hide = false; + break; + } + parent = parent.parentNode; + } + if (hide) { + _this2.hideTippy(); + } + }; + document.body.addEventListener('click', this.onBodyClick); + } + } + }, { + key: "componentWillUnmount", + value: function componentWillUnmount() { + tippyEmitter.removeListener('esc', this.hideTippy); + ReactDom.unmountComponentAtNode(this.content); + if (this.onBodyClick) { + document.body.removeEventListener('click', this.onBodyClick); + } + this.destroyTippy(); + } + }, { + key: "componentDidUpdate", + value: function componentDidUpdate() { + this.renderTipContent(); + } + }]); +}(React.Component); +module.exports = Popover; + +/***/ }), + +/***/ 73: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var _require = __webpack_require__(60), + Link = _require.Link; +var ErrorMessage = /*#__PURE__*/function (_React$Component) { + function ErrorMessage() { + _classCallCheck(this, ErrorMessage); + return _callSuper(this, ErrorMessage, arguments); + } + _inherits(ErrorMessage, _React$Component); + return _createClass(ErrorMessage, [{ + key: "render", + value: function render() { + var logo = this.props.logo ? h(Link, { + to: { + pathname: "/" + }, + target: '_blank' + }, [h('div.error-branding', [h('div.pc-logo'), h('div.error-branding-descriptor', [h('h2.error-subtitle', 'Pathway Commons'), h('h1.error-title', 'Search')])])]) : null; + var title = h('h1.error-message-title', this.props.title !== undefined ? this.props.title : 'An error occurred'); + var body = this.props.body ? h('p.error-message-body', [h('span', this.props.body)]) : null; + var footer = h('p.error-message-footer', this.props.footer !== undefined ? this.props.footer : [h('span', 'If difficulties persist, please report this to our '), h('a.plain-link', { + href: 'mailto: pathway-commons-help@googlegroups.com' + }, 'help forum.')]); + return h('div.error-message-container', [h('div.error-message', [logo, title, body, footer])]); + } + }]); +}(React.Component); +module.exports = { + ErrorMessage: ErrorMessage +}; + +/***/ }), + +/***/ 90: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +var cytoscape = __webpack_require__(64); +var Promise = __webpack_require__(128); + +/** + * A service to create Cytoscape instances. This can be used to create + * Cytoscape instances that are passed to multiple components, with delayed + * mounting. + */ +var CytoscapeService = /*#__PURE__*/function () { + /** + * Creates the service, storing the specified options for later initialisation of + * the Cytoscape instance. + * @param options An options object that contains Cytoscape options and common app + * binding options. + */ + function CytoscapeService(options) { + var _this = this; + _classCallCheck(this, CytoscapeService); + this.options = Object.assign({ + onMount: function onMount() {}, + minZoom: 0.08, + maxZoom: 4, + zoomingEnabled: true, + layout: { + name: 'null' + } + }, options); + this.mounted = false; + this.mountPromise = new Promise(function (resolve) { + _this.resolveMount = resolve; + }); + this.loadedPromise = new Promise(function (resolve) { + _this.resolveLoad = resolve; + }); + } + + /** + * Synchronously gets the Cytoscape instance. This may return `undefined`, as the + * instance might not be initialised yet. + * @returns The Cytoscape instance (`cy`) + */ + return _createClass(CytoscapeService, [{ + key: "get", + value: function get() { + return this.cy; + } + + /** + * Asynchronously gets the Cytoscape instance by resolving a promise with the instance + * (`cy`). Using this guarantees that you won't get null exceptions on `cy`. + */ + }, { + key: "getPromise", + value: function getPromise() { + return this.mountPromise; + } + }, { + key: "loadPromise", + value: function loadPromise() { + return this.loadedPromise; + } + + /** + * Initialise the Cytoscape instance. + * @param container The container in which to mount. If unspecified, Cytoscape is + * mounted in `options.container`. + */ + }, { + key: "mount", + value: function mount(container) { + if (this.mounted) { + throw new Error("Can not mount an already mounted CytoscapeService"); + } + this.mounted = true; + var options = container == null ? this.options : Object.assign({}, this.options, { + container: container + }); + var cy = this.cy = cytoscape(options); + options.onMount(cy); + this.resolveMount(cy); + } + }, { + key: "load", + value: function load() { + if (!this.mounted) { + throw new Error("Can not indicate loaded for an unmounted CytoscapeService"); + } + if (!this.cy) { + throw new Error("Can not indicate loaded with no cy ref"); + } + this.resolveLoad(this.cy); + } + + /** + * Destroy the Cytoscape instance, unmounting it and cleaning up any listeners etc. + */ + }, { + key: "destroy", + value: function destroy() { + if (this.cy == null) { + throw new Error("Can not destroy a non-mounted CytoscapeService"); + } + this.cy.destroy(); + } + }]); +}(); +module.exports = CytoscapeService; + +/***/ }), + +/***/ 93: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +var ReactDom = __webpack_require__(54); +var hh = __webpack_require__(123); +var tippy = __webpack_require__(190); +var _ = __webpack_require__(6); +var CytoscapeTooltip = /*#__PURE__*/function () { + function CytoscapeTooltip(tippyRef, tippyOpts) { + var _this = this; + _classCallCheck(this, CytoscapeTooltip); + this.tooltip = null; + this.opts = tippyOpts; + this.tippyRef = tippyRef; + this.onBodyClick = function (e) { + var parent = e.target; + var target = document.getElementById('cy'); + var hide = true; + while (parent !== document.body) { + if (parent === _this.container || parent === target) { + hide = false; + break; + } + parent = parent.parentNode; + } + if (hide) { + _this.hide(); + } + }; + document.body.addEventListener('click', this.onBodyClick); + } + return _createClass(CytoscapeTooltip, [{ + key: "isSmallScreen", + value: function isSmallScreen() { + return window.innerWidth <= 600; + } + }, { + key: "reactRender", + value: function reactRender(html) { + var div = hh('div'); + ReactDom.render(html, div); + this.container = div; + return div; + } + }, { + key: "show", + value: function show() { + var tooltip = this.tooltip, + tippyRef = this.tippyRef, + opts = this.opts; + var html = opts.html; + var isSmallScreen = this.isSmallScreen(); + if (tooltip != null) { + tooltip.destroy(); + tooltip = null; + } + if (isSmallScreen) { + tippyRef = { + clientWidth: 1, + clientHeight: 1, + focus: function focus() {}, + // TODO file bug with tippy expecting focus method on ref obj + getBoundingClientRect: function getBoundingClientRect() { + var w = window.innerWidth; + var h = window.innerHeight; + return { + top: h, + bottom: 0, + left: w / 2, + right: w / 2, + width: 1, + height: 1 + }; + } + }; + } + tooltip = tippy(tippyRef, _.assign({}, { + theme: 'light', + interactive: true, + trigger: 'manual', + animation: 'fade', + animateFill: false, + duration: [250, 0], + hideOnClick: false, + arrow: !isSmallScreen, + placement: isSmallScreen ? 'top' : 'right', + flip: isSmallScreen ? false : true, + distance: 10 + }, opts, { + html: this.reactRender(html) + })).tooltips[0]; + this.tooltip = tooltip; + tooltip.show(); + } + }, { + key: "hide", + value: function hide() { + if (this.tooltip) { + this.tooltip.hide(); + document.body.removeEventListener('click', this.onBodyClick); + } + } + }]); +}(); +module.exports = CytoscapeTooltip; + +/***/ }), + +/***/ 94: +/***/ (function(module, exports, __webpack_require__) { + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } +function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } +function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } +function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } +function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } +function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } +function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } +function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } +function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } +function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } +var React = __webpack_require__(1); +var h = __webpack_require__(2); +var Popover = __webpack_require__(72); +var _require = __webpack_require__(24), + FACTOID_URL = _require.FACTOID_URL; +var Contribute = /*#__PURE__*/function (_React$Component) { + function Contribute(props) { + _classCallCheck(this, Contribute); + return _callSuper(this, Contribute, [props]); + } + _inherits(Contribute, _React$Component); + return _createClass(Contribute, [{ + key: "render", + value: function render() { + var _this$props = this.props, + text = _this$props.text, + info = _this$props.info; + return h('div.contribute', {}, [h('a.contribute-popover-link', { + href: "".concat(FACTOID_URL), + target: '_blank' + }, text), h(Popover, { + tippy: { + position: 'bottom', + html: h('div.contribute-popover', [info]) + } + }, [h('i.material-icons', 'info')])]); + } + }]); +}(React.Component); // Specifies the default values for props: +Contribute.defaultProps = { + text: 'Add my data', + info: h('div.contribute-popover-info', {}, ["Authors of primary research articles with pathway and interaction information (e.g. binding, transcription) can contribute these findings to Pathway Commons through Biofactoid. Learn more at ", h('a.plain-link', { + href: "".concat(FACTOID_URL), + target: '_blank' + }, 'biofactoid.org'), '.']) +}; +module.exports = { + Contribute: Contribute +}; + +/***/ }) + +},[206]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L2N5L2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvY3kvbGF5b3V0LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGF0aHdheXMvY3kvbGF5b3V0LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvc2VydmljZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21vZGVscy9wYXRod2F5L3BhdGh3YXktbW9kZWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vcGMtZG93bmxvYWQtdHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9leHByZXNzaW9uLXRhYmxlLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvY3kvYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL3Rvb2x0aXAuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vdGlwcHktZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vY29tcG9uZW50cy9wYy1sb2dvLWxpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9jeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL2N5L2FjdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvY3kvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvdHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9lbnJpY2htZW50L2N5L2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2RlYnVnLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvc3luYy5qcyIsIndlYnBhY2s6Ly8vaHRtbC1lbGVtZW50IChpZ25vcmVkKSIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L3JvdXRlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWwvZmV0Y2guanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWwvcHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L3NlcnZpY2VzL3NlcnZlci1hcGkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9tZW51cy9maWxlLWRvd25sb2FkLW1lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9tZW51cy9uZXR3b3JrLWluZm8tbWVudS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L21lbnVzL3BhaW50LW1lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9jeS9wYXRod2F5cy1zdHlsZXNoZWV0LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvY3kvZXZlbnRzLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvcGF0aHdheS1ub2RlLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvcGF0aHdheXMtdG9vbGJhci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2Ryb3Bkb3duLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvY2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2FwcC1jYXJkLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvZW1wdHktbmV0d29yay5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL3NpZGViYXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vY29tcG9uZW50cy9jeXRvc2NhcGUtbmV0d29yay5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L2RlbW8tZXhwcmVzc2lvbnMuanNvbiIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L2RlbW8tcGF0aHdheS1yZXN1bHRzLmpzb24iLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL3BhdGh3YXlzLXRvb2xiYXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9tZW51cy9uZXR3b3JrLWluZm8tbWVudS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL21lbnVzL2ZpbGUtZG93bmxvYWQtbWVudS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL2N5L3BhdGh3YXlzLXN0eWxlc2hlZXQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9jeS9ldmVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9wYXRod2F5LW5vZGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9wYXRod2F5LXRpdGxlLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvc2VhcmNoL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvc2VhcmNoL3BhdGh3YXktcmVzdWx0cy12aWV3LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvc2VhcmNoL2dlbmUtcmVzdWx0cy12aWV3LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvc2VhcmNoL2ZlYXR1cmUtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2ludGVyYWN0aW9ucy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2ludGVyYWN0aW9ucy9pbnRlcmFjdGlvbnMtdG9vbGJhci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2ludGVyYWN0aW9ucy9pbnRlcmFjdGlvbnMtbm9kZS10b29sdGlwLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvaW50ZXJhY3Rpb25zL2ludGVyYWN0aW9ucy1lZGdlLXRvb2x0aXAuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvY3kvaW50ZXJhY3Rpb25zLXN0eWxlc2hlZXQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvaW50ZXJhY3Rpb25zLWRvd25sb2FkLW1lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvaW50ZXJhY3Rpb25zLW1lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9lbnJpY2htZW50L2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9lbnJpY2htZW50LXRvb2xiYXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9lbnJpY2htZW50L2VucmljaG1lbnQtZG93bmxvYWQtbWVudS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2VucmljaG1lbnQvZW5yaWNobWVudC10b29sdGlwLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9jeS9jbHVzdGVyLWxhYmVsLWNhdGVnb3JpemF0aW9uL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9jeS9jbHVzdGVyLWxhYmVsLWNhdGVnb3JpemF0aW9uL3N0b3B3b3Jkcy5qc29uIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9jeS9jbHVzdGVyLWxhYmVsLWNhdGVnb3JpemF0aW9uL2ZsYWdnZWR3b3Jkcy5qc29uIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9jeS9lbnJpY2htZW50LXN0eWxlc2hlZXQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9mZWF0dXJlcy9iaW9mYWN0b2lkL2luZGV4LmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvY3l0b3NjYXBlLWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vY29tcG9uZW50cy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdXRpbC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2ljb24tYnV0dG9uLmpzIiwid2VicGFjazovLy8uL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvcG9wb3Zlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2Vycm9yLW1lc3NhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vY3kvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vY3kvY3l0b3NjYXBlLXRvb2x0aXAuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NsaWVudC9jb21tb24vY29tcG9uZW50cy9jb250cmlidXRlLmpzIl0sIm5hbWVzIjpbIl9yZXF1aXJlIiwicmVxdWlyZSIsIlBBVEhXQVlTX0xBWU9VVF9PUFRTIiwiX3JlcXVpcmUyIiwiZXhwYW5kQ29sbGFwc2UiLCJzZWFyY2hOb2RlcyIsImxheW91dCIsImZpdCIsIm1vZHVsZSIsImV4cG9ydHMiLCJzdHlsZXNoZWV0IiwiYmluZEN5RXZlbnRzIiwibmFtZSIsIm5vZGVSZXB1bHNpb24iLCJub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHMiLCJ0aWxpbmdQYWRkaW5nVmVydGljYWwiLCJ0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbCIsImFuaW1hdGUiLCJhbmltYXRpb25FYXNpbmciLCJhbmltYXRpb25EdXJhdGlvbiIsInBhZGRpbmciLCJyYW5kb21pemUiLCJTZXJ2ZXJBUEkiLCJfIiwiUGF0aHdheSIsIl9jbGFzc0NhbGxDaGVjayIsImxvYWRlZCIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwibG9hZCIsInBhdGh3YXlKU09OIiwicmF3IiwidXJpIiwiZ2V0IiwiY3lKc29uIiwiZ3JhcGgiLCJpc0VtcHR5IiwiZGF0YXNvdXJjZSIsImRhdGFzb3VyY2VVcmwiLCJjb21tZW50cyIsIm1hY3JvbW9sZWN1bGVzIiwiZmlsdGVyIiwibm9kZSIsImRhdGEiLCJjbGFzcyIsImdlbmVOYW1lcyIsIm1zIiwibmFtZXMiLCJmbGF0dGVuIiwibWFwIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwidW5pcSIsInB1YmxpY2F0aW9uWHJlZnMiLCJ1bmlmaWNhdGlvblhyZWZzIiwidHlwZSIsImRpc3BsYXlOYW1lIiwiZXh0IiwiZGVzY3JpcHRpb24iLCJwYzJOYW1lIiwiZ2VuZUludGVyc2VjdGlvbiIsInBhdGh3YXkiLCJleHByZXNzaW9uVGFibGUiLCJnZW5lc0luUGF0aHdheSIsImdlbmVzSW5FeHByZXNzaW9uRGF0YSIsInJhd0V4cHJlc3Npb25zIiwiZSIsImdlbmVOYW1lIiwiaW50ZXJzZWN0aW9uIiwiZXhwcmVzc2lvbkRhdGFUb05vZGVTdHlsZSIsInJhbmdlIiwiX3JhbmdlIiwiX3NsaWNlZFRvQXJyYXkiLCJtYXgiLCJzdHlsZSIsIk1hdGgiLCJhYnMiLCJhcHBseUV4cHJlc3Npb25EYXRhIiwiY3kiLCJzZWxlY3RlZENsYXNzIiwic2VsZWN0ZWRGdW5jdGlvbiIsImdlbmVOb2RlcyIsIm5vZGVzIiwibm9kZU5hbWVzIiwiZ2VuZU5vZGVMYWJlbHMiLCJmbGF0dGVuRGVlcCIsInNvcnQiLCJleHByZXNzaW9uc0luTmV0d29yayIsImV4cHJlc3Npb25zIiwiZXhwcmVzc2lvbiIsImluY2x1ZGVzIiwiZXhwcmVzc2lvbkxhYmVscyIsImxlbmd0aCIsIl9leHByZXNzaW9uVGFibGUkY29tcCIsImNvbXB1dGVGb2xkQ2hhbmdlUmFuZ2UiLCJtaW4iLCJmb3JFYWNoIiwiZnYiLCJmb2xkQ2hhbmdlIiwiSW5maW5pdHkiLCJtYXRjaGVkTm9kZXMiLCJFeHByZXNzaW9uIiwicmF3RXhwcmVzc2lvbkRhdGEiLCJleHByZXNzaW9uQ2xhc3NlcyIsInZhbHVlcyIsInJlcGxhY2VkRXhwcmVzc2lvbiIsInJlcGxhY2VkIiwiY2xhc3MyVmFsdWVzTWFwIiwiTWFwIiwiX2l0ZXJhdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfc3RlcCIsInMiLCJuIiwiZG9uZSIsImV4cHJlc3Npb25DbGFzcyIsInNldCIsImVyciIsImYiLCJpIiwicHVzaCIsImNsYXNzVmFsdWVzIiwiQXJyYXkiLCJmcm9tIiwiZW50cmllcyIsImVudHJ5IiwiY2xhc3NOYW1lIiwiaW52YWxpZFZhbHVlUmVwbGFjZW1lbnQiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJzZWxlY3RlZENsYXNzVmFsdWVzIiwibm9uU2VsZWN0ZWRDbGFzc2VzIiwib21pdCIsIm5vblNlbGVjdGVkQ2xhc3Nlc1ZhbHVlcyIsIk9iamVjdCIsIl9yZWYiLCJfcmVmMiIsImMxVmFsIiwiYzJWYWwiLCJtZWFuIiwibG9nMiIsInBhcnNlRmxvYXQiLCJ0b0ZpeGVkIiwiY3JlYXRlUmF3RXhwcmVzc2lvbnMiLCJleHByZXNzaW9uSlNPTiIsIm5ldHdvcmtKU09OIiwiZXhwcmVzc2lvbkJ5R2VuZU5hbWUiLCJsYWJlbCIsInN5bm9ueW1zIiwia2V5cyIsImlzR2VuZXJpY01hcHBpbmciLCJoYXMiLCJtYXBwaW5nQ2FuZGlkYXRlIiwiZXhpc3RpbmdFeHByZXNzaW9uIiwiZGVsZXRlIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsImdlbmUiLCJFeHByZXNzaW9uVGFibGUiLCJyYXdKc29uRGF0YSIsInJhd0V4cHJlc3Npb25DbGFzc2VzIiwiZGF0YVNldENsYXNzTGlzdCIsImRhdGFTZXRFeHByZXNzaW9uTGlzdCIsImNsYXNzZXMiLCJsb2FkUGF0aHdheSIsIkVycm9yIiwicm93cyIsImV4cHJlc3Npb25NYXAiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwicmF3RXhwcmVzc2lvbiIsImV4cCIsInJlc3VsdHMiLCJmb2xkVmFsdWVzIiwiZnZzIiwibWF4TWFnbml0dWRlIiwiYXBwbHkiLCJNQVRDSEVEX1NFQVJDSF9DTEFTUyIsImV4cGFuZENvbGxhcHNlQWxsIiwiZXhwYW5kZWQiLCJhcGkiLCJub2Rlc1RvQ29sbGFwc2UiLCJpc0NvbGxhcHNpYmxlIiwiY29sbGFwc2VSZWN1cnNpdmVseSIsIm5vZGVzVG9FeHBhbmQiLCJpc0V4cGFuZGFibGUiLCJleHBhbmRSZWN1cnNpdmVseSIsImFuaW1hdGlvbiIsImR1cmF0aW9uIiwicGxheSIsInJ1biIsInF1ZXJ5IiwicXVlcnlFbXB0eSIsInRyaW0iLCJlY0FQSSIsImFsbE5vZGVzIiwidW5pb24iLCJnZXRBbGxDb2xsYXBzZWRDaGlsZHJlblJlY3Vyc2l2ZWx5IiwiZ2V0U3lucyIsIm1ldGFkYXRhIiwiX21ldGFkYXRhJHN5bm9ueW1zIiwiX21ldGFkYXRhJHN0YW5kYXJkTmFtIiwic3RhbmRhcmROYW1lIiwiX21ldGFkYXRhJGRpc3BsYXlOYW1lIiwiZWwiLCJtYXRjaGVkIiwic3lub255bU1hdGNoIiwiZmluZCIsInN5bm9ueW0iLCJ0b1VwcGVyQ2FzZSIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJkZWJvdW5jZSIsIlJlYWN0IiwiaCIsIlBvcG92ZXIiLCJ0aXBweURlZmF1bHRzIiwiVG9vbHRpcCIsIl9SZWFjdCRDb21wb25lbnQiLCJfY2FsbFN1cGVyIiwiX2luaGVyaXRzIiwiY29tcG9uZW50V2lsbE1vdW50IiwiX3RoaXMiLCJwcm9wcyIsInRpcHB5T3B0aW9ucyIsImFzc2lnbiIsImh0bWwiLCJ0cmlnZ2VyIiwidGhlbWUiLCJkZWxheSIsInRpcHB5IiwicG9wb3Zlck9wdGlvbnMiLCJoaWRlIiwiaGlkZVRpcHB5Iiwib25DbGljayIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiY2hpbGRyZW4iLCJDb21wb25lbnQiLCJwbGFjZW1lbnQiLCJjcmVhdGVQb3BwZXJJbnN0YW5jZU9uSW5pdCIsImFuaW1hdGVGaWxsIiwiYXJyb3ciLCJpbnRlcmFjdGl2ZSIsIm11bHRpcGxlIiwiaGlkZU9uQ2xpY2siLCJjbGFzc05hbWVzIiwiUGNMb2dvTGluayIsImNuIiwiaHJlZiIsIkN5dG9zY2FwZVRvb2x0aXAiLCJJbnRlcmFjdGlvbnNOb2RlVG9vbHRpcCIsIkludGVyYWN0aW9uc0VkZ2VUb29sdGlwIiwiU0lOR0xFX1NSQ19MQVlPVVQiLCJjb25jZW50cmljIiwibGV2ZWxXaWR0aCIsIk1VTFRJX1NSQ19MQVlPVVQiLCJpbnRlcmFjdGlvbnNMYXlvdXRPcHRzIiwibnVtU291cmNlcyIsInNpemUiLCJTSE9XX0lOVEVSQUNUSU9OU19UT09MVElQU19FVkVOVCIsImJpbmRFdmVudHMiLCJnZW5lRGF0YSIsIm9uZSIsImdlbmVRdWVyeSIsImpvaW4iLCJzZWFyY2hHZW5lcyIsInRoZW4iLCJyZXMiLCJjYXRjaCIsImhpZGVUb29sdGlwcyIsImVsZW1lbnRzIiwiZWxlIiwidG9vbHRpcCIsInNjcmF0Y2giLCJvbiIsImV2dCIsInRhcmdldCIsImdlbmVJZCIsImdlbmVNZXRhZGF0YSIsImluZm8iLCJwb3BwZXJSZWYiLCJzaG93IiwiZWRnZSIsInRndCIsInJlbW92ZVNjcmF0Y2giLCJlbWl0Iiwibm9kZUhvdmVyTW91c2VPdmVyIiwiZWxlc1RvSGlnaGxpZ2h0IiwiY29sbGVjdGlvbiIsIm5laWdoYm9yaG9vZCIsIm1lcmdlIiwiYW5jZXN0b3JzIiwiZGVzY2VuZGFudHMiLCJlZGdlcyIsImNhbmNlbCIsInNlYXJjaEludGVyYWN0aW9uTm9kZXMiLCJiYXRjaCIsImludGVyYWN0aW9uc1N0eWxlc2hlZXQiLCJJTlRFUkFDVElPTl9UWVBFUyIsIkJJTkRJTkciLCJNT0RJRklDQVRJT04iLCJFWFBSRVNTSU9OIiwiT1RIRVIiLCJFbnJpY2htZW50VG9vbHRpcCIsImdlbmVyYXRlQ2x1c3RlckxhYmVscyIsIlNIT1dfRU5SSUNITUVOVF9UT09MVElQU19FVkVOVCIsIkVOUklDSE1FTlRfTEFZT1VUX09QVFMiLCJyZWZyZXNoIiwibWF4U2ltdWxhdGlvblRpbWUiLCJjb252ZXJnZW5jZVRocmVzaG9sZCIsIlBBUkVOVF9TRUxfUFJFRklYIiwibm9QYXJlbnQiLCJjb21wb25lbnQiLCJpc0NoaWxkIiwiZW5yaWNobWVudExheW91dCIsIm5vZGVzV2l0aE5vRWRnZXMiLCJjb25uZWN0ZWRFZGdlcyIsIm5vZGVzV2l0aEVkZ2VzIiwiZGlmZmVyZW5jZSIsInciLCJ3aWR0aCIsImhlaWdodCIsImZpcnN0TGF5b3V0IiwiZmlyc3RMYXlvdXRQcm9taXNlIiwicG9uIiwiY29tcG9uZW50cyIsImluZGV4IiwibGFiZWxJbnB1dCIsInRhZ3MiLCJjb21wb25lbnRQYXJlbnRJZCIsImFkZCIsImdyb3VwIiwiaWQiLCJtb3ZlIiwicGFyZW50IiwiZmlyc3RMYXlvdXRCQiIsImJvdW5kaW5nQm94IiwiYmJJc0VtcHR5IiwiYmIiLCJzZWNvbmRMYXlvdXRCQiIsIngxIiwieDIiLCJ5MSIsInkyIiwic2Vjb25kTGF5b3V0Iiwic3RvcCIsInNlY29uZExheW91dFByb21pc2UiLCJpc1BhcmVudCIsImlzRWRnZSIsInNlYXJjaEVucmljaG1lbnROb2RlcyIsImdlbmVTZXQiLCJtYXRjaGVzIiwic3RyIiwicSIsImluZGV4T2YiLCJzb21lIiwiZW5yaWNobWVudFN0eWxlc2hlZXQiLCJkZWJ1ZyIsImhoIiwiUm91dGVyIiwiUmVhY3RET00iLCJSZWdpc3RlckN5RXh0ZW5zaW9ucyIsImVuYWJsZWQiLCJpbml0Iiwicm9vdCIsImRvY3VtZW50IiwiYm9keSIsImFwcGVuZENoaWxkIiwiZGVmYXVsdHMiLCJQT1JUIiwiTUVUQURBVEFfQ1JPTl9TQ0hFRFVMRSIsIlBDX1VSTCIsIkRPV05MT0FEU19GT0xERVJfTkFNRSIsIkdQUk9GSUxFUl9VUkwiLCJHTVRfQVJDSElWRV9VUkwiLCJJREVOVElGSUVSU19VUkwiLCJOQ0JJX0VVVElMU19CQVNFX1VSTCIsIk5DQklfQVBJX0tFWSIsIlBVQk1FRF9CQVNFX1VSTCIsIkhHTkNfQkFTRV9VUkwiLCJVTklQUk9UX0FQSV9CQVNFX1VSTCIsIkRPSV9CQVNFX1VSTCIsIk9SQ0lEX0JBU0VfVVJMIiwiU0JHTl9JTUdfU0VSVklDRV9CQVNFX1VSTCIsIlNCR05fSU1HX1BBVEgiLCJQQ19JTUFHRV9DQUNIRV9NQVhfU0laRSIsIlBDX0NBQ0hFX01BWF9TSVpFIiwiUFVCX0NBQ0hFX01BWF9TSVpFIiwiRU5UX0NBQ0hFX01BWF9TSVpFIiwiRU5UX1NVTU1BUllfQ0FDSEVfTUFYX1NJWkUiLCJNQVhfU0lGX05PREVTIiwiQ0xJRU5UX0ZFVENIX1RJTUVPVVQiLCJTRVJWRVJfRkVUQ0hfVElNRU9VVCIsIkRCX05BTUUiLCJEQl9IT1NUIiwiREJfUE9SVCIsIkRCX1VTRVIiLCJEQl9QQVNTIiwiREJfQ0VSVCIsIkZBQ1RPSURfVVJMIiwiTlNfQ0hFQkkiLCJOU19FTlNFTUJMIiwiTlNfR0VORUNBUkRTIiwiTlNfR0VORV9PTlRPTE9HWSIsIk5TX0hHTkMiLCJOU19IR05DX1NZTUJPTCIsIk5TX05DQklfR0VORSIsIk5TX1BVQk1FRCIsIk5TX1JFQUNUT01FIiwiTlNfVU5JUFJPVCIsIk5TX0JJT0ZBQ1RPSUQiLCJOU19QQVRIV0FZQ09NTU9OUyIsImVudlZhcnMiLCJwaWNrIiwicHJvY2VzcyIsImVudiIsImNsaWVudFZhcnMiLCJOT0RFX0VOViIsInZhbCIsImNvbmYiLCJmcmVlemUiLCJkb21SZWFkeSIsInN5bmMiLCJ3aW5kb3ciLCJkYmciLCJfZW5hYmxlZCIsIkRFQlVHIiwiYXBwZW5kU2NyaXB0Iiwic2NyaXB0IiwiY3JlYXRlRWxlbWVudCIsInNyYyIsImxvY2F0aW9uIiwiaG9zdG5hbWUiLCJoZWFkIiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsIkJyb3dzZXJSb3V0ZXIiLCJSb3V0ZSIsIlN3aXRjaCIsInFzIiwiRmVhdHVyZXMiLCJwYXRoIiwiU2VhcmNoIiwicGFyc2UiLCJzZWFyY2giLCJhcGlPcHRzIiwiZG93bmxvYWRPcHRzIiwiZG93bmxvYWRUeXBlcyIsIlBhdGh3YXlzIiwiQmlvZmFjdG9pZCIsIm1hdGNoIiwicGFyYW1zIiwiUGFpbnQiLCJJbnRlcmFjdGlvbnMiLCJFbnJpY2htZW50Iiwibm90Rm91bmRFcnJvciIsInNwZWMiLCJleGFjdCIsInF1ZXJ5U3RyaW5nIiwiTG9hZGVyIiwiUHJvbWlzZSIsImZldGNoIiwiQ3l0b3NjYXBlU2VydmljZSIsIkZpbGVEb3dubG9hZE1lbnUiLCJJbmZvTWVudSIsIlBhaW50TWVudSIsIlBhdGh3YXlzVG9vbGJhciIsIl9yZXF1aXJlMyIsIlNpZGViYXIiLCJDeXRvc2NhcGVOZXR3b3JrIiwiZGVtb0V4cHJlc3Npb25zIiwiZGVtb1BhdGh3YXlzIiwiX3JlcXVpcmU0IiwiX3JlcXVpcmU1IiwiZ2V0UGF0aHdheXNSZWxldmFudFRvIiwic2VhcmNoUGFyYW0iLCJnZW5lUXVlcmllcyIsImNodW5rIiwic2VhcmNoUXVlcnkiLCJhbGwiLCJzZWFyY2hSZXN1bHRzIiwicGF0aHdheVNlYXJjaFJlc3VsdHMiLCJyZXN1bHQiLCJzZWFyY2hIaXRzIiwidW5pcXVlUmVzdWx0cyIsInVuaXFCeSIsInBhdGh3YXlzSlNPTiIsImdldFBhdGh3YXkiLCJ1bmlxV2l0aCIsInBqIiwicCIsInAwIiwicDEiLCJpc0VxdWFsIiwic3RhdGUiLCJjeVNydiIsIm9uTW91bnQiLCJwYXRod2F5cyIsImN1clBhdGh3YXkiLCJhY3RpdmVNZW51IiwicGFpbnRNZW51Q3RybHMiLCJleHByQ2xhc3MiLCJleHByRm5OYW1lIiwiZXhwckZuIiwiYWN0aXZlVGFiIiwiaW52YWxpZEVucmljaG1lbnRzIiwibG9hZGluZyIsImdldFByb21pc2UiLCJsb2FkUGFpbnREZW1vRGF0YSIsIl90aGlzMiIsIl90aGlzJHN0YXRlIiwianNvbiIsInNldFN0YXRlIiwiZ2V0RW5yaWNobWVudHNBbmRQYXRod2F5cyIsIl90aGlzMyIsImVucmljaG1lbnRzVXJpIiwiX3RoaXMkc3RhdGUyIiwiZ2V0RW5yaWNobWVudHMiLCJmaW5kQmVzdFBhdGh3YXkiLCJiZXN0UmVzdWx0IiwiX3RoaXM0IiwiX3RoaXMkc3RhdGUzIiwicmVtb3ZlIiwiY2hhbmdlTWVudSIsIm1lbnUiLCJfdGhpczUiLCJyZXNpemVDeUltbWVkaWF0ZSIsInJlc2l6ZSIsInJlc2l6ZUN5RGVib3VuY2VkIiwiaGFuZGxlUGFpbnRDdHJsQ2hhbmdlIiwibmV3VmFsIiwiX3RoaXM2IiwiX3RoaXM2JHN0YXRlIiwiaGFuZGxlUGFpbnRNZW51VGFiQ2hhbmdlIiwibmV3VGFiIiwiX3RoaXM3IiwiX3RoaXMkc3RhdGU0IiwiYXBwQmFyIiwiY29udHJvbGxlciIsInNpZGViYXIiLCJpbmZvTGlzdCIsImZpbGVOYW1lIiwic2VsZWN0ZWRJbmRleCIsImNvbnRlbnQiLCJvcHRpb25zIiwibGVmdCIsImNvbG9yIiwicHJvbWlzZVRpbWVvdXQiLCJUaW1lb3V0RXJyb3IiLCJpc0NsaWVudCIsIl90eXBlb2YiLCJpc1NlcnZlciIsImZhaWxPbkJhZFN0YXR1cyIsIm9rIiwic3RhdHVzVGV4dCIsInVybCIsInNhZmVGZXRjaCIsIkZFVENIX1RJTUVPVVQiLCJ0aW1lb3V0Iiwib3B0cyIsImZuIiwicmVzb2x2ZSIsImRlZmF1bHRGZXRjaE9wdHMiLCJoZWFkZXJzIiwiZ2V0UENVUkwiLCJ0ZXh0IiwiYmFzZVVybCIsImdldEFQSVJlc291cmNlIiwiZ2V0RG9jQnlJZCIsInN0cmluZ2lmeSIsImZldGNoT3B0cyIsInBhdGh3YXlKc29uIiwiZ2V0QWxsRG9jcyIsImdldEludGVyYWN0aW9uR3JhcGgiLCJzb3VyY2VzIiwiZ2V0UHVibWVkUHVibGljYXRpb25zIiwicHVibWVkSWRzIiwiZGIiLCJyZXRtb2RlIiwidG9TdHJpbmciLCJ1aWRzIiwidWlkIiwicmVjb3JkIiwidGl0bGUiLCJhdXRob3JzIiwic29ydGZpcnN0YXV0aG9yIiwicHViZGF0ZSIsInNvdXJjZSIsImFydGljbGVpZHMiLCJkb2kiLCJpZHR5cGUiLCJwdWJtZWQiLCJwbWMiLCJmaXJzdEF1dGhvciIsImRhdGUiLCJnZXRHb0luZm9ybWF0aW9uIiwiZ29JRCIsImdldFJlYWN0b21lSW5mb3JtYXRpb24iLCJyZWFjdG9tZUlEIiwiZG93bmxvYWRGaWxlRnJvbVBhdGh3YXlDb21tb25zIiwiZm9ybWF0IiwicXVlcnlDbG9uZSIsInRlc3QiLCJyZXBsYWNlIiwibWV0aG9kIiwiSlNPTiIsImVucmljaG1lbnRBUEkiLCJzYXZlQXMiLCJwY0Rvd25sb2FkVHlwZXMiLCJkb3dubG9hZEZyb21EaXNwbGF5TmFtZSIsIl90aGlzJHByb3BzIiwib3B0aW9uIiwic2V0VGltZW91dCIsInBuZyIsIm91dHB1dCIsInNjYWxlIiwiYmciLCJmdWxsIiwiZG93bmxvYWRGaWxlRnJvbVBDIiwiZmlsZUV4dCIsIkZJTEVOQU1FX0NVVE9GRiIsIl90aGlzJHByb3BzMiIsInN1YnN0ciIsImRvd25sb2FkRmV0Y2giLCJmaWxlQ29udGVudCIsIkZpbGUiLCJtZW51Q29udGVudHMiLCJkdCIsImRsT3B0aW9uIiwiTmV0d29ya0luZm9NZW51Iiwibm9JbmZvTWVzc2FnZSIsImNvbW1lbnQiLCJhZGRpdGlvbmFsSW5mbyIsIlRhYiIsIlRhYnMiLCJUYWJMaXN0IiwiVGFiUGFuZWwiLCJFeHByZXNzaW9uQ29sb3VyTGVnZW5kIiwiRXhwcmVzc2lvblRhYmxlVmlldyIsIl9SZWFjdCRDb21wb25lbnQyIiwic29ydEJ5Iiwic29ydFR5cGUiLCJub2RlU2VhcmNoVmFsdWUiLCJoYW5kbGVTb3J0Q2hhbmdlIiwibmV3U29ydCIsImhhbmRsZVNlYXJjaENoYW5nZSIsImdlbmVyYXRlRm9sZENoYW5nZUxpc3QiLCJmb2xkQ2hhbmdlRXhwcmVzc2lvbnMiLCJzb3J0ZWRGb2xkQ2hhbmdlcyIsIm9yZGVyQnkiLCJmaWx0ZXJlZEZvbGRDaGFuZ2VzIiwiZmMiLCJ1cHBlckZjIiwidXBwZXJGaWx0ZXIiLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwiUGF0aHdheVJlc3VsdHNMaXN0VmlldyIsIl9SZWFjdCRDb21wb25lbnQzIiwiX3RoaXMkcHJvcHMzIiwicGF0aHdheVJlc3VsdHMiLCJfUmVhY3QkQ29tcG9uZW50NCIsImFuYWx5c2lzRm5zIiwiX3RoaXMkcHJvcHM0IiwiZnVuY3Rpb25TZWxlY3RvciIsImNsYXNzU2VsZWN0b3IiLCJjbHMiLCJvblNlbGVjdCIsInNlbGVjdGVkQ2xhc3NOYW1lIiwiY3l0b3NjYXBlIiwic2JnblN0eWxlU2hlZXQiLCJzZWxlY3RvciIsImNzcyIsInNwbGl0IiwiUGF0aHdheU5vZGVNZXRhZGF0YVZpZXciLCJFWFBBTkRfQ09MTEFQU0VfT1BUUyIsImxheW91dEJ5IiwiZmlzaGV5ZSIsInVuZG9hYmxlIiwiY3VlRW5hYmxlZCIsIlNIT1dfVE9PTFRJUFNfRVZFTlQiLCJERUZBVUxUX05VTV9OQU1FUyIsIlNVUFBPUlRFRF9DT0xMRUNUSU9OUyIsImdldFVyaUlkcyIsInVyaXMiLCJsYXN0IiwicHVibGljYXRpb25zIiwiY29tcG9uZW50RGlkTW91bnQiLCJwdWJtZWRVcmlzIiwibWQiLCJ4cmVmTGlua3MiLCJzZWFyY2hMaW5rUXVlcnkiLCJkYkxpbmtzIiwibGluayIsInB1YmxpY2F0aW9uRWxlcyIsInB1YmxpY2F0aW9uIiwiRGF0ZSIsImdldEZ1bGxZZWFyIiwic2hvd1R5cGUiLCJzaG93U3RkTmFtZSIsInNob3dEaXNwTmFtZSIsInNob3dTeW5vbnltcyIsInNob3dQdWJzIiwic2hvd0JvZHkiLCJzaG93TGlua3MiLCJzaG93UGNTZWFyY2hMaW5rIiwic2xpY2UiLCJJY29uQnV0dG9uIiwiaXNBY3RpdmUiLCJpY29uIiwiRHJvcGRvd24iLCJvcGVuIiwiaGFuZGxlQ2xvc2UiLCJjbG9zZSIsInByZXZlbnREZWZhdWx0IiwiYWRkRXZlbnRMaXN0ZW5lciIsImNvbnRhaW5zIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZUNoYW5nZSIsImxpc3RPcHRpb25zIiwicmVmIiwiZE9wdCIsIkNhcmQiLCJDYXJkR3JpZCIsIml0ZW0iLCJBcHBDYXJkIiwiaGludCIsImltYWdlIiwiaW1hZ2VDbGFzcyIsImxpbmtpZnlDb250ZW50IiwiX2RlZmluZVByb3BlcnR5IiwiZGVmYXVsdFByb3BzIiwiTGluayIsIkVtcHR5TmV0d29yayIsIm1zZyIsInNob3dQY0xpbmsiLCJsaW5rVG9QY1NlYXJjaCIsInRvIiwicGF0aG5hbWUiLCJhY3RpdmVNZW51Q29udGVudCIsImNoaWxkIiwiX3RoaXMkcHJvcHMkb25Nb3VudCIsIm1vdW50IiwibmV0d29yayIsImRlc3Ryb3kiLCJkb20iLCJFcnJvck1lc3NhZ2UiLCJfcmVxdWlyZTYiLCJDb250cmlidXRlIiwiUGF0aHdheVRpdGxlIiwibmV0d29ya0VtcHR5IiwiaW5pdGlhbGl6ZUN5dG9zY2FwZSIsImVycm9yIiwiZXJyb3JNZXNzYWdlIiwiZm9vdGVyIiwibG9nbyIsIlJlYWN0RG9tIiwic2VhcmNoVmFsdWUiLCJoYW5kbGVOb2RlU2VhcmNoQ2hhbmdlIiwic2VhcmNoVmFsIiwiZm9jdXNOb2RlU2VhcmNoIiwiZmluZERPTU5vZGUiLCJxdWVyeVNlbGVjdG9yIiwiZm9jdXMiLCJwb3NpdGlvbiIsIm5vZGVEYXRhIiwibm9kZUNsYXNzIiwibm9kZUxhYmVsIiwiZGVmYXVsdE5vZGVNZXRhIiwibm9kZU1ldGEiLCJzaG93VGl0bGUiLCJzaG93SGVhZGVyIiwic2hvd0Zvb3RlciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJ0IiwiciIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsImFyZyIsImNhbGwiLCJsIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJkIiwiZ2V0UHJvdG90eXBlT2YiLCJ2IiwiZyIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX19hd2FpdCIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJyZXR1cm4iLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfbmV4dCIsIl90aHJvdyIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJfdG9QcmltaXRpdmUiLCJ0b1ByaW1pdGl2ZSIsIlN0cmluZyIsIk51bWJlciIsIl9nZXRQcm90b3R5cGVPZiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiUmVmZXJlbmNlRXJyb3IiLCJCb29sZWFuIiwidmFsdWVPZiIsImJpbmQiLCJfc2V0UHJvdG90eXBlT2YiLCJfbG9hZFB1YmxpY2F0aW9ucyIsIl9jYWxsZWUiLCJub3JtYWxpemVQdWJtZWRSZWNvcmQiLCJNQVhfUFVCUyIsImlzUHVibWVkWHJlZiIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJqb3VybmFsIiwidDAiLCJsb2FkUHVibGljYXRpb25zIiwiX2NvbXBvbmVudERpZE1vdW50IiwiX2NhbGxlZTIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJnZXROYW1lIiwiREJfUFJFRklYXzJfVVJMX1RFTVBMQVRFIiwiaXNTdXBwb3J0ZWREYiIsIl9yZWYzIiwidW5pWHJlZnMiLCJfJGZpcnN0IiwiZmlyc3QiLCJnZXRTb3VyY2UiLCJBUlRJQ0xFX1NVUFBPUlRFRF9EQVRBU09VUkNFUyIsIlNldCIsIl8kZmlyc3QyIiwiYXV0aG9yIiwicmVmZXJlbmNlIiwicHVibWVkTGluayIsIlBhdGh3YXlSZXN1bHRzVmlldyIsIkdlbmVSZXN1bHRzVmlldyIsIl9yZXF1aXJlNyIsIkZlYXR1cmVWaWV3IiwiX3JlcXVpcmU4IiwiZ2VuZVJlc3VsdHMiLCJmZWF0dXJlIiwiZGF0YVNvdXJjZXMiLCJnZXRTZWFyY2hSZXN1bHQiLCJnZW5lcyIsIm9uU2VhcmNoVmFsdWVDaGFuZ2UiLCJ3aGljaCIsInN1Ym1pdFNlYXJjaFF1ZXJ5IiwibmV3UXVlcnlTdGF0ZSIsInNldEFuZFN1Ym1pdFNlYXJjaFF1ZXJ5Iiwic2VhcmNoTG9hZGluZyIsImhpc3RvcnkiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwibmV4dFByb3BzIiwibmV4dFNlYXJjaCIsInNlYXJjaExpc3RpbmciLCJoYXNGZWF0dXJlIiwic2VhcmNoQm9keSIsInNlYXJjaEJhciIsIm1heExlbmd0aCIsIm9uS2V5UHJlc3MiLCJjdXJEYXRhc291cmNlIiwibnVtUGF0aHdheXMiLCJudW1JbnRlcmFjdGlvbnMiLCJub1BhdGh3YXlzTXNnIiwic2VhcmNoTGlzdCIsImRzSW5mbyIsImljb25VcmwiLCJwYXRod2F5VGl0bGUiLCJ0b3BIaXQiLCJoYXNQcmV2aWV3IiwicHJldmlld1VybCIsInNob3dQcmV2aWV3IiwiaXRlbUxpbmsiLCJpdGVtUHJldmlldyIsIml0ZW1JbmZvIiwibnVtUGFydGljaXBhbnRzIiwic2VhcmNoUmVzdWx0RmlsdGVyIiwiaXNBcnJheSIsImRzIiwiaWRlbnRpZmllciIsImhlYWRlciIsImxpc3RpbmciLCJNSU5fR0VORV9DT1VOVF9FTlJJQ0hNRU5UIiwiRW50aXR5U3VtbWFyeUJveCIsImdlbmVJbmZvIiwiZ2VuZVN5bWJvbCIsInN1bW1hcnkiLCJzb3J0ZWRMaW5rcyIsInAyIiwibmFtZXNwYWNlIiwic2Nyb2xsQ29udGFpbmVyUmVmIiwiY3VycmVudCIsIl90aGlzJHNjcm9sbENvbnRhaW5lciIsInNjcm9sbExlZnQiLCJzY3JvbGxXaWR0aCIsImNsaWVudFdpZHRoIiwic2hvd0xlZnRCdXR0b24iLCJ2aXNpYmxlSXRlbXMiLCJzaG93UmlnaHRCdXR0b24iLCJkaXJlY3Rpb24iLCJjb250YWluZXIiLCJjYXJkV2lkdGgiLCJvZmZzZXRXaWR0aCIsImNvbnRhaW5lcldpZHRoIiwic2Nyb2xsQW1vdW50IiwiZmxvb3IiLCJuZXdTY3JvbGxMZWZ0Iiwic2Nyb2xsVG8iLCJiZWhhdmlvciIsImNyZWF0ZVJlZiIsIml0ZW1XaWR0aCIsIl90aGlzJHNjcm9sbENvbnRhaW5lcjIiLCJjaGVja1Njcm9sbCIsIl90aGlzJHNjcm9sbENvbnRhaW5lcjMiLCJnZXRFbnJpY2htZW50QXBwSW5mbyIsInNlYXJjaFN0cmluZyIsImxpbmtQYXRoIiwiZ2V0SW50ZXJhY3Rpb25zQXBwSW5mbyIsImFwcHNJbmZvcyIsInNjcm9sbCIsImRpc2FibGVkIiwib25TY3JvbGwiLCJNQVhfQVVUSE9SUyIsImFydGljbGUiLCJwY1BhdGh3YXkiLCJiaW9mYWN0b2lkUGF0aHdheSIsImF1dGhvckxpc3QiLCJlbGVtZW50IiwibnVtRnJvbVN0YXJ0IiwibnVtRnJvbUVuZCIsImNlaWwiLCJ0YWtlIiwidGFrZVJpZ2h0IiwiaW1hZ2VTcmMiLCJvcmdhbmlzbSIsImRvaVVybCIsInB1Ym1lZFVybCIsImNvbmZpZyIsIkludGVyYWN0aW9uc1Rvb2xiYXIiLCJNQVhfRUxFTUVOVFNfQ1VUT0ZGIiwiTElTVF9FTEVNRU5UU19TSE9XTiIsIkludGVyYWN0aW9uc01lbnUiLCJsb2FkSW50ZXJhY3Rpb25zTmV0d29yayIsInRpdGxlQ29udGVudCIsImludGVyYWN0aW9uc0xlZ2VuZCIsIkludGVyYWN0aW9uc0Rvd25sb2FkTWVudSIsImVsZXMiLCJoYXNDbGFzcyIsImVhc2luZyIsImFsaWFzZXMiLCJsaW5rcyIsImFsaWFzIiwicGFyYWxsZWxFZGdlcyIsInB1YmxpY2F0aW9uc0xvYWRlZCIsInNlbGVjdGVkRWRnZSIsImdldFB1YmxpY2F0aW9ucyIsInNlbGVjdEVkZ2UiLCJkZXNlbGVjdEVkZ2UiLCJyZW5kZXJFZGdlIiwiZGF0YXNvdXJjZXMiLCJwY0lkcyIsInByb3ZpZGVyc0xpc3QiLCJwdWJsaWNhdGlvbkxpc3QiLCJkZXRhaWxlZFZpZXdzTGlzdCIsInBjSWQiLCJyZW5kZXJFZGdlQ2hvaWNlIiwiaW50ZXJhY3Rpb25UeXBlVmFsdWVzIiwiayIsInRvTG93ZXJDYXNlIiwiaVN0eWxlc2hlZXQiLCJkb3dubG9hZFBuZyIsInNhdmVDeVBuZyIsImRvd25sb2FkU2lmIiwiZWRnZUlkcyIsInRvZ2dsZUludG5UeXBlIiwiY29ubmVjdGVkTm9kZXMiLCJub2RlSGFzTm9WaXNpYmxlRWRnZXMiLCJldmVyeSIsIkJpbmRpbmciLCJNb2RpZmljYXRpb24iLCJPdGhlciIsImhhc1R5cGUiLCJoYXNNb2RpZmljYXRpb25zIiwiaGFzRXhwcmVzc2lvbnMiLCJoYXNCaW5kaW5ncyIsImhhc090aGVyIiwiSW50ZXJhY3Rpb25Ub2dnbGVCdXR0b24iLCJhY3RpdmUiLCJsZWdlbmRDbGFzcyIsIkVucmljaG1lbnRUb29sYmFyIiwibG9hZEVucmljaG1lbnQiLCJnZXROZXR3b3JrSnNvbiIsIl95aWVsZCRTZXJ2ZXJBUEkkZW5yaSIsImVucmljaG1lbnROZXR3b3JrIiwibmV0d29ya0hhc1plcm9Ob2RlcyIsIkVucmljaG1lbnREb3dubG9hZE1lbnUiLCJkb3dubG9hZEpzb24iLCJzYXZlQ3lKc29uIiwiQmxvYiIsImRlc2NyaXB0aW9uTG9hZGVkIiwiZGVzY3JpcHRpb25PbkZhaWwiLCJ1cGRhdGUiLCJzaGFyZWRHZW5lTGlzdCIsInNoYXJlZEdlbmVDb3VudCIsImRlc2NyaXB0aW9uU2VjdGlvbiIsInN0ZW1tZXIiLCJzdG9wV29yZHMiLCJmbGFnZ2VkV29yZHMiLCJkZWxpbWl0ZXJSZWdleCIsImZpbHRlcldvcmRzIiwid29yZE9jY3VyZW5jZU1hcCIsInN0ZW1Ub1dvcmRzTWFwIiwiaW5jcktleSIsIm0iLCJhcHBlbmRLZXkiLCJ0b2tlbnMiLCJ3b3JkIiwid29yZFN0ZW1zIiwidG9rZW4iLCJ3b3JkU3RlbSIsIndvcmRzIiwid3MiLCJhc3NvY2lhdGVkV29yZHMiLCJ3MCIsIncxIiwiREVGQVVMVF9OT0RFX1NJWkUiLCJnZXROb2RlU2l6ZSIsImdlbmVDb3VudCIsInNpbWlsYXJpdHkiLCJfQ29tcG9uZW50IiwiZG9jcyIsImNvc2VCaWxrZW50IiwiY29sYSIsInBvcHBlciIsInVzZSIsIlRpcHB5IiwiTW91c2V0cmFwIiwiRXZlbnRFbWl0dGVyIiwidGlwcHlFbWl0dGVyIiwicmVuZGVyVGlwQ29udGVudCIsImlzRnVuY3Rpb24iLCJyYXdUaXBweU9wdGlvbnMiLCJ0b29sdGlwcyIsInNob3dUaXBweSIsImRlc3Ryb3lUaXBweSIsIm9uQm9keUNsaWNrIiwicGFyZW50Tm9kZSIsInJlbW92ZUxpc3RlbmVyIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsIm1pblpvb20iLCJtYXhab29tIiwiem9vbWluZ0VuYWJsZWQiLCJtb3VudGVkIiwibW91bnRQcm9taXNlIiwicmVzb2x2ZU1vdW50IiwibG9hZGVkUHJvbWlzZSIsInJlc29sdmVMb2FkIiwibG9hZFByb21pc2UiLCJ0aXBweVJlZiIsInRpcHB5T3B0cyIsImdldEVsZW1lbnRCeUlkIiwiaXNTbWFsbFNjcmVlbiIsImlubmVyV2lkdGgiLCJyZWFjdFJlbmRlciIsImRpdiIsImNsaWVudEhlaWdodCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImlubmVySGVpZ2h0IiwidG9wIiwiYm90dG9tIiwicmlnaHQiLCJmbGlwIiwiZGlzdGFuY2UiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFpQ0MsbUJBQU8sQ0FBQyxHQUFVLENBQUM7RUFBNUNDLG9CQUFvQixHQUFBRixRQUFBLENBQXBCRSxvQkFBb0I7QUFDNUIsSUFBQUMsU0FBQSxHQUFxREYsbUJBQU8sQ0FBQyxHQUFXLENBQUM7RUFBakVHLGNBQWMsR0FBQUQsU0FBQSxDQUFkQyxjQUFjO0VBQUVDLFdBQVcsR0FBQUYsU0FBQSxDQUFYRSxXQUFXO0VBQUVDLE1BQU0sR0FBQUgsU0FBQSxDQUFORyxNQUFNO0VBQUVDLEdBQUcsR0FBQUosU0FBQSxDQUFISSxHQUFHO0FBRWhEQyxNQUFNLENBQUNDLE9BQU8s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Q1YsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxDQUMxQjtBQUNILENBQUM7QUFFRDlRLE1BQU0sQ0FBQ0MsT0FBTyxHQUFHO0VBQUVvdUIsVUFBVSxFQUFWQTtBQUFXLENBQUMsQyIsImZpbGUiOiIuL3B1YmxpYy9idW5kbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7IFBBVEhXQVlTX0xBWU9VVF9PUFRTIH0gPSByZXF1aXJlKCcuL2xheW91dCcpO1xyXG5jb25zdCB7IGV4cGFuZENvbGxhcHNlLCBzZWFyY2hOb2RlcywgbGF5b3V0LCBmaXQgfSA9IHJlcXVpcmUoJy4vYWN0aW9ucycpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgZXhwYW5kQ29sbGFwc2UsXHJcbiAgZml0LFxyXG4gIGxheW91dCxcclxuICBzdHlsZXNoZWV0OiByZXF1aXJlKCcuL3BhdGh3YXlzLXN0eWxlc2hlZXQnKSxcclxuICBiaW5kQ3lFdmVudHM6IHJlcXVpcmUoJy4vZXZlbnRzJyksXHJcbiAgc2VhcmNoTm9kZXMsXHJcbiAgUEFUSFdBWVNfTEFZT1VUX09QVFNcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L2N5L2luZGV4LmpzIiwibW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgUEFUSFdBWVNfTEFZT1VUX09QVFM6IHtcclxuICAgIG5hbWU6ICdjb3NlLWJpbGtlbnQnLFxyXG4gICAgbm9kZVJlcHVsc2lvbjogNTAwMCxcclxuICAgIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogdHJ1ZSxcclxuICAgIHRpbGluZ1BhZGRpbmdWZXJ0aWNhbDogMjAsXHJcbiAgICB0aWxpbmdQYWRkaW5nSG9yaXpvbnRhbDogMjAsXHJcbiAgICBhbmltYXRlOiAnZW5kJyxcclxuICAgIGFuaW1hdGlvbkVhc2luZzogJ2Vhc2UtaW4tb3V0JyxcclxuICAgIGFuaW1hdGlvbkR1cmF0aW9uOiA4MDAsXHJcbiAgICBmaXQ6IHRydWUsXHJcbiAgICBwYWRkaW5nOiA3NSxcclxuICAgIHJhbmRvbWl6ZTogZmFsc2VcclxuICB9XHJcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9jeS9sYXlvdXQuanMiLCJtb2R1bGUuZXhwb3J0cyA9IHtcclxuICBQQVRIV0FZU19MQVlPVVRfT1BUUzoge1xyXG4gICAgbmFtZTogJ2Nvc2UtYmlsa2VudCcsXHJcbiAgICBub2RlUmVwdWxzaW9uOiA1MDAwLFxyXG4gICAgbm9kZURpbWVuc2lvbnNJbmNsdWRlTGFiZWxzOiB0cnVlLFxyXG4gICAgdGlsaW5nUGFkZGluZ1ZlcnRpY2FsOiA1MCxcclxuICAgIHRpbGluZ1BhZGRpbmdIb3Jpem9udGFsOiAyMCxcclxuICAgIGFuaW1hdGU6ICdlbmQnLFxyXG4gICAgYW5pbWF0aW9uRWFzaW5nOiAnZWFzZS1pbi1vdXQnLFxyXG4gICAgYW5pbWF0aW9uRHVyYXRpb246IDgwMCxcclxuICAgIGZpdDogdHJ1ZSxcclxuICAgIHBhZGRpbmc6IDc1LFxyXG4gICAgcmFuZG9taXplOiBmYWxzZVxyXG4gIH1cclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL2N5L2xheW91dC5qcyIsImNvbnN0IFNlcnZlckFQSSA9IHJlcXVpcmUoJy4vc2VydmVyLWFwaS8nKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1NlcnZlckFQSX07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9zZXJ2aWNlcy9pbmRleC5qcyIsImNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuXHJcbi8vIGJhc2ljIHBhdGh3YXkgbW9kZWwgdG8gc2VydmUgdGhlIG5lZWRzIG9mIHRoZSBwYXRod2F5cyB2aWV3XHJcbi8vICAtIGFwaSB0byBnZXQgZW50aXRpZXMsXHJcbi8vICAtIGNvbXBvc2UgZWFjaCBlbnRpdHkgd2l0aCBlbnRpdHkgbWV0YWRhdGFcclxuLy8gIC0gZ2V0IGVudGl0eSBieSBpZFxyXG5jbGFzcyBQYXRod2F5IHtcclxuICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGxvYWQocGF0aHdheUpTT04pe1xyXG4gICAgdGhpcy5yYXcgPSBwYXRod2F5SlNPTixcclxuICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHVyaSgpe1xyXG4gICAgcmV0dXJuIF8uZ2V0KHRoaXMucmF3LCAnZ3JhcGgucGF0aHdheU1ldGFkYXRhLnVyaScsICdVbmtub3duIHVyaScpO1xyXG4gIH1cclxuXHJcbiAgY3lKc29uKCl7XHJcbiAgICByZXR1cm4gdGhpcy5yYXcuZ3JhcGg7XHJcbiAgfVxyXG5cclxuICBpc0VtcHR5KCl7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuYW1lKCl7XHJcbiAgICByZXR1cm4gXy5nZXQodGhpcy5yYXcsICdncmFwaC5wYXRod2F5TWV0YWRhdGEudGl0bGUnLCAnJyk7XHJcbiAgfVxyXG5cclxuICBkYXRhc291cmNlKCl7XHJcbiAgICByZXR1cm4gXy5nZXQodGhpcy5yYXcsICdncmFwaC5wYXRod2F5TWV0YWRhdGEuZGF0YVNvdXJjZScsICdVbmtub3duIGRhdGFzb3VyY2UnKTtcclxuICB9XHJcblxyXG4gIGRhdGFzb3VyY2VVcmwoKXtcclxuICAgIHJldHVybiBfLmdldCh0aGlzLnJhdywgJ2dyYXBoLnBhdGh3YXlNZXRhZGF0YS51cmxUb0hvbWVwYWdlJyApO1xyXG4gIH1cclxuXHJcbiAgY29tbWVudHMoKXtcclxuICAgIHJldHVybiBfLmdldCh0aGlzLnJhdywgJ2dyYXBoLnBhdGh3YXlNZXRhZGF0YS5jb21tZW50cycsIFtdKTtcclxuICB9XHJcblxyXG4gIG1hY3JvbW9sZWN1bGVzKCl7XHJcbiAgICByZXR1cm4gXy5nZXQodGhpcy5yYXcsICdncmFwaC5ub2RlcycsIFtdKS5maWx0ZXIoIG5vZGUgPT4gbm9kZS5kYXRhLmNsYXNzID09PSAnbWFjcm9tb2xlY3VsZScgKTtcclxuICB9XHJcblxyXG4gIGdlbmVOYW1lcygpe1xyXG4gICAgbGV0IG1zID0gdGhpcy5tYWNyb21vbGVjdWxlcygpO1xyXG4gICAgbGV0IG5hbWVzID0gXy5mbGF0dGVuKG1zLm1hcCggbm9kZSA9PiBbIC4uLl8uZ2V0KG5vZGUsICdkYXRhLm1ldGFkYXRhLnN5bm9ueW1zJywgW10pLCAuLi5bXy5nZXQobm9kZSwgJ2RhdGEubGFiZWwnLCAnJyldIF0gKSk7XHJcbiAgICByZXR1cm4gXy51bmlxKG5hbWVzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpY2F0aW9uWHJlZnMoKXtcclxuICAgIHJldHVybiBfLmdldCggdGhpcy5yYXcsICdncmFwaC5wYXRod2F5TWV0YWRhdGEucHViWHJlZnMnICk7XHJcbiAgfVxyXG5cclxuICB1bmlmaWNhdGlvblhyZWZzKCl7XHJcbiAgICByZXR1cm4gXy5nZXQoIHRoaXMucmF3LCAnZ3JhcGgucGF0aHdheU1ldGFkYXRhLnVuaVhyZWZzJyApO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGF0aHdheTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvbW9kZWxzL3BhdGh3YXkvcGF0aHdheS1tb2RlbC5qcyIsIm1vZHVsZS5leHBvcnRzID0gW1xyXG4gIHsgdHlwZTogJ3BuZycsIGRpc3BsYXlOYW1lOiAnSW1hZ2UgKFBORyknLCBleHQ6ICdwbmcnLCBkZXNjcmlwdGlvbjogJ0Rvd25sb2FkIGFuIGltYWdlIG9mIHRoZSBlbnRpcmUgdmlldy4nIH0sXHJcbiAgeyB0eXBlOiAnZ210JywgZGlzcGxheU5hbWU6ICdHTVQnLCBwYzJOYW1lOiAnR1NFQScsIGV4dDogJ2dtdCcsIGRlc2NyaXB0aW9uOiAnR2VuZSBNYXRyaXggVHJhbnNwb3NlZCBmb3JtYXQuIFRoZSBnZW5lIGRhdGFiYXNlIG9mIG5hbWVkIGdlbmUgc2V0cyAoVW5pUHJvdCkgdXNlZnVsIGZvciBwZXJmb3JtaW5nIGVucmljaG1lbnQgYW5hbHlzaXMgdXNpbmcgR2VuZSBTZXQgRW5yaWNobWVudCBBbmFseXNpcyAoR1NFQSknIH0sXHJcbiAgeyB0eXBlOiAnc2lmJywgZGlzcGxheU5hbWU6ICdTSUYnLCBwYzJOYW1lOiAnU0lGJywgZXh0OiAndHh0JywgZGVzY3JpcHRpb246ICdTaW1wbGUgaW50ZXJhY3Rpb24gZm9ybWF0IChTSUYpIGlzIGEgbGlzdCBvZiBpbnRlcmFjdGlvbiBwYWlycyB1c2VmdWwgZm9yIHZpZXdpbmcsIHN0eWxpbmcsIGFuZCBlZGl0aW5nIHVzaW5nIEN5dG9zY2FwZSBkZXNrdG9wIHNvZnR3YXJlLCBhbmQgZm9yIGFuYWx5c2lzIHdpdGggZ3JhcGggYWxnb3JpdGhtcy4nIH0sXHJcbiAgeyB0eXBlOiAndHh0JywgZGlzcGxheU5hbWU6ICdFeHRlbmRlZCBTSUYnLCBwYzJOYW1lOiAnVFhUJywgZXh0OiAndHh0JywgZGVzY3JpcHRpb246ICdTaW1pbGFyIHRvIHRoZSBTSUYgb3V0cHV0LCBidXQgY29udGFpbnMgZXh0cmEgaW5mb3JtYXRpb24gb24gZW50aXRpZXMgYW5kIGludGVyYWN0aW9ucy4gU2VlIHRoZSBTSUYgc2VjdGlvbiBvbiB0aGUgUEMyIGZvcm1hdHMgcGFnZSBmb3IgbW9yZSBkZXRhaWxzLicgfSxcclxuICB7IHR5cGU6ICdiaW9wYXgnLCBkaXNwbGF5TmFtZTogJ0Jpb1BBWCcsIHBjMk5hbWU6ICdCSU9QQVgnLCBleHQ6ICd4bWwnLCBkZXNjcmlwdGlvbjogJ0Jpb2xvZ2ljYWwgUGF0aHdheXMgRXhjaGFuZ2UgKEJpb1BBWCkgZm9ybWF0IGluY2x1ZGVzIGFsbCBkZXRhaWxzIG9mIHRoZSBiaW9sb2dpY2FsIG5ldHdvcmsgc3RvcmVkIGluIFBhdGh3YXkgQ29tbW9ucy4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGZvcm1hdCBiZSBpbnRlcnByZXRlZCB1c2luZyB0b29scyBsaWtlIFBheHRvb2xzIG9yIEplbmEgU1BBUlFMLicgfSxcclxuICB7IHR5cGU6ICdqc29ubGQnLCBkaXNwbGF5TmFtZTogJ0pTT04tTEQnLCBwYzJOYW1lOiAnSlNPTkxEJywgZXh0OiAnanNvbicsIGRlc2NyaXB0aW9uOiAnSlNPTi1MRCBpcyBhIGh1bWFuLXJlYWRhYmxlIGxpbmtlZCBmb3JtYXQuIFRoaXMgZm9ybWF0IGlzIGlkZWFsIGZvciBwcm9ncmFtbWluZyBlbnZpcm9ubWVudHMsIFJFU1Qgd2ViIHNlcnZpY2VzLCBhbmQgdW5zdHJ1Y3R1cmVkIGRhdGFic2VzLicgfSxcclxuICB7IHR5cGU6ICdzYmduJywgZGlzcGxheU5hbWU6ICdTQkdOLU1MJywgcGMyTmFtZTogJ1NCR04nLCBleHQ6ICd4bWwnLCBkZXNjcmlwdGlvbjogJ1N5c3RlbXMgQmlvbG9neSBHcmFwaGljYWwgTm90YXRpb24gKFNCR04pIGlzIGEgc3RhbmRhcmQgdmlzdWFsIG5vdGF0aW9uIGZvciBiaW9sb2dpY2FsIG5ldHdvcmtzLiBUaGlzIGRvd25sb2FkIHByb3ZpZGVzIGFuIFhNTCBpbiBTQkdOIG1hcmt1cCBsYW5ndWFnZSAoU0JHTi1NTCkuJyB9XHJcbl07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9jb21tb24vcGMtZG93bmxvYWQtdHlwZXMuanMiLCJjb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcblxyXG5sZXQgZ2VuZUludGVyc2VjdGlvbiA9IChwYXRod2F5LCBleHByZXNzaW9uVGFibGUpID0+IHtcclxuICBsZXQgZ2VuZXNJblBhdGh3YXkgPSBwYXRod2F5LmdlbmVOYW1lcygpO1xyXG4gIGxldCBnZW5lc0luRXhwcmVzc2lvbkRhdGEgPSBleHByZXNzaW9uVGFibGUucmF3RXhwcmVzc2lvbnMubWFwKCBlID0+IGUuZ2VuZU5hbWUpO1xyXG5cclxuICByZXR1cm4gXy5pbnRlcnNlY3Rpb24oZ2VuZXNJblBhdGh3YXksIGdlbmVzSW5FeHByZXNzaW9uRGF0YSk7XHJcbn07XHJcblxyXG5jb25zdCBleHByZXNzaW9uRGF0YVRvTm9kZVN0eWxlID0gKHZhbHVlLCByYW5nZSkgPT4ge1xyXG4gIGNvbnN0IFssIG1heF0gPSByYW5nZTtcclxuICBjb25zdCBzdHlsZSA9IHt9O1xyXG5cclxuICBpZiAoKDAgLSBtYXggLyAzKSA8PSB2YWx1ZSA8ICgwICsgbWF4IC8gMykpIHtcclxuICAgIHN0eWxlWydiYWNrZ3JvdW5kLWNvbG9yJ10gPSAnd2hpdGUnO1xyXG4gICAgc3R5bGVbJ2JhY2tncm91bmQtb3BhY2l0eSddID0gMTtcclxuICAgIHN0eWxlWydjb2xvciddID0gJ2JsYWNrJztcclxuICAgIHN0eWxlWyd0ZXh0LW91dGxpbmUtY29sb3InXSA9ICd3aGl0ZSc7XHJcbiAgfVxyXG5cclxuICBpZiAodmFsdWUgPCAoMCAtIG1heCAvIDMpKSB7XHJcbiAgICBzdHlsZVsnYmFja2dyb3VuZC1vcGFjaXR5J10gPSBgJHtNYXRoLmFicyh2YWx1ZSAvIG1heCl9YDtcclxuICAgIHN0eWxlWydiYWNrZ3JvdW5kLWNvbG9yJ10gPSAnZ3JlZW4nO1xyXG4gICAgc3R5bGVbJ2NvbG9yJ10gPSAnd2hpdGUnO1xyXG4gICAgc3R5bGVbJ3RleHQtb3V0bGluZS1jb2xvciddID0gJ2JsYWNrJztcclxuICB9XHJcblxyXG4gIGlmICgoMCArIG1heCAvIDMpIDw9IHZhbHVlICkge1xyXG4gICAgc3R5bGVbJ2JhY2tncm91bmQtY29sb3InXSA9ICdwdXJwbGUnO1xyXG4gICAgc3R5bGVbJ2JhY2tncm91bmQtb3BhY2l0eSddID0gYCR7dmFsdWUgLyBtYXh9YDtcclxuICAgIHN0eWxlWydjb2xvciddID0gJ3doaXRlJztcclxuICAgIHN0eWxlWyd0ZXh0LW91dGxpbmUtY29sb3InXSA9ICdibGFjayc7XHJcblxyXG4gIH1cclxuICByZXR1cm4gc3R5bGU7XHJcbn07XHJcblxyXG5jb25zdCBhcHBseUV4cHJlc3Npb25EYXRhID0gKGN5LCBleHByZXNzaW9uVGFibGUsIHNlbGVjdGVkQ2xhc3MsIHNlbGVjdGVkRnVuY3Rpb24pID0+IHtcclxuICBjb25zdCBnZW5lTm9kZXMgPSBjeS5ub2RlcygnW2NsYXNzPVwibWFjcm9tb2xlY3VsZVwiXScpO1xyXG4gIGNvbnN0IG5vZGVOYW1lcyA9IG5vZGUgPT4gW25vZGUuZGF0YSgnbGFiZWwnKSwgLi4uXy5nZXQobm9kZS5kYXRhKCdtZXRhZGF0YScpLCAnc3lub255bXMnLCBbXSldO1xyXG4gIGNvbnN0IGdlbmVOb2RlTGFiZWxzID0gXy51bmlxKFxyXG4gICAgXy5mbGF0dGVuRGVlcChnZW5lTm9kZXMubWFwKG5vZGUgPT4gbm9kZU5hbWVzKG5vZGUpKVxyXG4gICkpLnNvcnQoKTtcclxuXHJcbiAgY29uc3QgZXhwcmVzc2lvbnNJbk5ldHdvcmsgPSBleHByZXNzaW9uVGFibGUuZXhwcmVzc2lvbnMoKS5maWx0ZXIoZXhwcmVzc2lvbiA9PiBnZW5lTm9kZUxhYmVscy5pbmNsdWRlcyhleHByZXNzaW9uLmdlbmVOYW1lKSk7XHJcblxyXG4gIGNvbnN0IGV4cHJlc3Npb25MYWJlbHMgPSBleHByZXNzaW9uc0luTmV0d29yay5tYXAoZXhwcmVzc2lvbiA9PiBleHByZXNzaW9uLmdlbmVOYW1lKTtcclxuICBnZW5lTm9kZXMuZmlsdGVyKG5vZGUgPT4gXy5pbnRlcnNlY3Rpb24oZXhwcmVzc2lvbkxhYmVscywgbm9kZU5hbWVzKG5vZGUpKS5sZW5ndGggPT09IDApLnN0eWxlKHtcclxuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2dyZXknLFxyXG4gICAgJ2NvbG9yJzogJ2dyZXknLFxyXG4gICAgJ29wYWNpdHknOiAwLjRcclxuICB9KTtcclxuXHJcbiAgY29uc3Qge21pbiwgbWF4fSA9IGV4cHJlc3Npb25UYWJsZS5jb21wdXRlRm9sZENoYW5nZVJhbmdlKHNlbGVjdGVkQ2xhc3MsIHNlbGVjdGVkRnVuY3Rpb24pO1xyXG4gIGNvbnN0IHJhbmdlID0gW21pbiwgbWF4XTtcclxuXHJcbiAgZXhwcmVzc2lvbnNJbk5ldHdvcmsuZm9yRWFjaChleHByZXNzaW9uID0+IHtcclxuICAgIGNvbnN0IGZ2ID0gZXhwcmVzc2lvbi5mb2xkQ2hhbmdlKHNlbGVjdGVkQ2xhc3MsIHNlbGVjdGVkRnVuY3Rpb24pO1xyXG5cclxuICAgIGlmIChmdiAhPT0gSW5maW5pdHkgJiYgZnYgIT09IC1JbmZpbml0eSkge1xyXG5cclxuICAgICAgY29uc3QgbWF0Y2hlZE5vZGVzID0gY3kubm9kZXMoKS5maWx0ZXIobm9kZSA9PiBub2RlTmFtZXMobm9kZSkuaW5jbHVkZXMoZXhwcmVzc2lvbi5nZW5lTmFtZSkpO1xyXG5cclxuICAgICAgY29uc3Qgc3R5bGUgPSBleHByZXNzaW9uRGF0YVRvTm9kZVN0eWxlKGZ2LCByYW5nZSk7XHJcbiAgICAgIG1hdGNoZWROb2Rlcy5zdHlsZShzdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gIH0pO1xyXG59O1xyXG5cclxuXHJcblxyXG5jbGFzcyBFeHByZXNzaW9uIHtcclxuICBjb25zdHJ1Y3RvcihyYXdFeHByZXNzaW9uRGF0YSwgZXhwcmVzc2lvbkNsYXNzZXMpIHtcclxuICAgIGNvbnN0IGdlbmVOYW1lID0gcmF3RXhwcmVzc2lvbkRhdGEuZ2VuZU5hbWU7XHJcbiAgICBjb25zdCB2YWx1ZXMgPSByYXdFeHByZXNzaW9uRGF0YS52YWx1ZXM7XHJcbiAgICBjb25zdCByZXBsYWNlZEV4cHJlc3Npb24gPSByYXdFeHByZXNzaW9uRGF0YS5yZXBsYWNlZCA/IHJhd0V4cHJlc3Npb25EYXRhLnJlcGxhY2VkIDoge307XHJcblxyXG4gICAgY29uc3QgY2xhc3MyVmFsdWVzTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZXhwcmVzc2lvbkNsYXNzIG9mIF8udW5pcShleHByZXNzaW9uQ2xhc3NlcykpIHtcclxuICAgICAgY2xhc3MyVmFsdWVzTWFwLnNldChleHByZXNzaW9uQ2xhc3MsIFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjbGFzczJWYWx1ZXNNYXAuZ2V0KGV4cHJlc3Npb25DbGFzc2VzW2ldKS5wdXNoKHZhbHVlc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2xhc3NWYWx1ZXMgPSB7fTtcclxuICAgIEFycmF5LmZyb20oY2xhc3MyVmFsdWVzTWFwLmVudHJpZXMoKSkuZm9yRWFjaChlbnRyeSA9PiB7XHJcbiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGVudHJ5WzBdO1xyXG4gICAgICBjb25zdCB2YWx1ZXMgPSBlbnRyeVsxXTtcclxuICAgICAgY2xhc3NWYWx1ZXNbY2xhc3NOYW1lXSA9IHZhbHVlcztcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ2VuZU5hbWUgPSBnZW5lTmFtZTtcclxuICAgIHRoaXMuY2xhc3NWYWx1ZXMgPSBjbGFzc1ZhbHVlcztcclxuICAgIHRoaXMucmVwbGFjZWRFeHByZXNzaW9uID0gcmVwbGFjZWRFeHByZXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgZm9sZENoYW5nZShzZWxlY3RlZENsYXNzLCBzZWxlY3RlZEZ1bmN0aW9uLCBpbnZhbGlkVmFsdWVSZXBsYWNlbWVudCA9IG51bGwpIHtcclxuICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3NWYWx1ZXMgPSB0aGlzLmNsYXNzVmFsdWVzW3NlbGVjdGVkQ2xhc3NdO1xyXG4gICAgY29uc3Qgbm9uU2VsZWN0ZWRDbGFzc2VzID0gXy5vbWl0KHRoaXMuY2xhc3NWYWx1ZXMsIFtzZWxlY3RlZENsYXNzXSk7XHJcblxyXG4gICAgY29uc3Qgbm9uU2VsZWN0ZWRDbGFzc2VzVmFsdWVzID1fLmZsYXR0ZW5EZWVwKE9iamVjdC5lbnRyaWVzKG5vblNlbGVjdGVkQ2xhc3NlcylcclxuICAgICAgLm1hcCgoW2NsYXNzTmFtZSwgdmFsdWVzXSkgPT4gdmFsdWVzKSk7Ly8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xyXG5cclxuICAgIGNvbnN0IGMxVmFsID0gc2VsZWN0ZWRGdW5jdGlvbihzZWxlY3RlZENsYXNzVmFsdWVzKTtcclxuXHJcbiAgICBsZXQgYzJWYWwgPSBfLm1lYW4obm9uU2VsZWN0ZWRDbGFzc2VzVmFsdWVzKTtcclxuXHJcbiAgICBpZiAoYzJWYWwgPT09IDApIHtcclxuICAgICAgYzJWYWwgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZvbGRDaGFuZ2UgPSBNYXRoLmxvZzIoYzFWYWwgLyBjMlZhbCk7XHJcblxyXG4gICAgaWYgKGZvbGRDaGFuZ2UgPT09IEluZmluaXR5IHx8IGZvbGRDaGFuZ2UgPT09IC1JbmZpbml0eSkge1xyXG4gICAgICByZXR1cm4gaW52YWxpZFZhbHVlUmVwbGFjZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoZm9sZENoYW5nZS50b0ZpeGVkKDIpKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5jb25zdCBjcmVhdGVSYXdFeHByZXNzaW9ucyA9IChleHByZXNzaW9uSlNPTiwgbmV0d29ya0pTT04pID0+IHtcclxuICBjb25zdCBleHByZXNzaW9uQnlHZW5lTmFtZSA9IG5ldyBNYXAoKTtcclxuXHJcbiAgZXhwcmVzc2lvbkpTT04uZm9yRWFjaChleHByZXNzaW9uID0+IHtcclxuICAgIGV4cHJlc3Npb25CeUdlbmVOYW1lLnNldChleHByZXNzaW9uLmdlbmVOYW1lLCBleHByZXNzaW9uKTtcclxuICB9KTtcclxuXHJcbiAgbmV0d29ya0pTT04ubm9kZXMuZm9yRWFjaChub2RlID0+IHtcclxuICAgIGNvbnN0IGxhYmVsID0gXy5nZXQobm9kZSwgJ2RhdGEubGFiZWwnLCAnJyk7XHJcbiAgICBjb25zdCBzeW5vbnltcyA9IF8uZ2V0KG5vZGUsICdkYXRhLm1ldGFkYXRhLnN5bm9ueW1zJywgW10pO1xyXG4gICAgY29uc3QgZ2VuZUludGVyc2VjdGlvbiA9ICBfLmludGVyc2VjdGlvbihbLi4uZXhwcmVzc2lvbkJ5R2VuZU5hbWUua2V5cygpXSwgc3lub255bXMpO1xyXG4gICAgY29uc3QgaXNHZW5lcmljTWFwcGluZyA9ICFleHByZXNzaW9uQnlHZW5lTmFtZS5oYXMobGFiZWwpICYmIGdlbmVJbnRlcnNlY3Rpb24ubGVuZ3RoID4gMDtcclxuXHJcbiAgICBpZiAoaXNHZW5lcmljTWFwcGluZykge1xyXG4gICAgICBjb25zdCBtYXBwaW5nQ2FuZGlkYXRlID0gZ2VuZUludGVyc2VjdGlvblswXTtcclxuICAgICAgY29uc3QgZXhpc3RpbmdFeHByZXNzaW9uID0gZXhwcmVzc2lvbkJ5R2VuZU5hbWUuZ2V0KG1hcHBpbmdDYW5kaWRhdGUpO1xyXG4gICAgICBleHByZXNzaW9uQnlHZW5lTmFtZS5kZWxldGUobWFwcGluZ0NhbmRpZGF0ZSk7XHJcbiAgICAgIGV4cHJlc3Npb25CeUdlbmVOYW1lLnNldChsYWJlbCwge2dlbmVOYW1lOiBsYWJlbCwgdmFsdWVzOiBleGlzdGluZ0V4cHJlc3Npb24udmFsdWVzLCByZXBsYWNlZDogZXhpc3RpbmdFeHByZXNzaW9ufSk7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGdlbmUgb2YgZ2VuZUludGVyc2VjdGlvbikge1xyXG4gICAgICAgIGV4cHJlc3Npb25CeUdlbmVOYW1lLmRlbGV0ZShnZW5lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gWy4uLmV4cHJlc3Npb25CeUdlbmVOYW1lLmVudHJpZXMoKV0ubWFwKGVudHJ5ID0+IGVudHJ5WzFdKTtcclxufTtcclxuXHJcbmNsYXNzIEV4cHJlc3Npb25UYWJsZSB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbG9hZCggcmF3SnNvbkRhdGEgKXtcclxuICAgIHRoaXMucmF3ID0gcmF3SnNvbkRhdGE7XHJcbiAgICBsZXQgcmF3RXhwcmVzc2lvbkNsYXNzZXMgPSBfLmdldChyYXdKc29uRGF0YS5kYXRhU2V0Q2xhc3NMaXN0LCAnMC5jbGFzc2VzJywgW10pO1xyXG4gICAgbGV0IHJhd0V4cHJlc3Npb25zID0gXy5nZXQocmF3SnNvbkRhdGEuZGF0YVNldEV4cHJlc3Npb25MaXN0LCAnMC5leHByZXNzaW9ucycsIFtdKTtcclxuXHJcbiAgICB0aGlzLnJhd0V4cHJlc3Npb25zID0gcmF3RXhwcmVzc2lvbnM7XHJcbiAgICB0aGlzLnJhd0V4cHJlc3Npb25DbGFzc2VzID0gcmF3RXhwcmVzc2lvbkNsYXNzZXM7XHJcbiAgICB0aGlzLmNsYXNzZXMgPSBfLnVuaXEocmF3RXhwcmVzc2lvbkNsYXNzZXMpO1xyXG4gICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xyXG5cclxuICB9XHJcblxyXG4gIGxvYWRQYXRod2F5KCBwYXRod2F5SlNPTiApe1xyXG4gICAgaWYoICF0aGlzLmxvYWRlZCApe1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGNhbGwgbG9hZCgpIHdpdGggZW5yaWNobWVudCBKU09OIGZpcnN0Jyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGV4cHJlc3Npb25DbGFzc2VzID0gdGhpcy5yYXdFeHByZXNzaW9uQ2xhc3NlcztcclxuICAgIGxldCBleHByZXNzaW9ucyA9IGNyZWF0ZVJhd0V4cHJlc3Npb25zKHRoaXMucmF3RXhwcmVzc2lvbnMsIHBhdGh3YXlKU09OKTtcclxuICAgIHRoaXMucm93cyA9IFtdO1xyXG4gICAgdGhpcy5leHByZXNzaW9uTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAobGV0IHJhd0V4cHJlc3Npb24gb2YgZXhwcmVzc2lvbnMpIHtcclxuICAgICAgbGV0IGV4cCA9IG5ldyBFeHByZXNzaW9uKHJhd0V4cHJlc3Npb24sIGV4cHJlc3Npb25DbGFzc2VzKTtcclxuICAgICAgdGhpcy5yb3dzLnB1c2goZXhwKTtcclxuICAgICAgdGhpcy5leHByZXNzaW9uTWFwLnNldChyYXdFeHByZXNzaW9uLmdlbmVOYW1lLCBleHApO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGV4cHJlc3Npb25zKGdlbmVOYW1lID0gbnVsbCkge1xyXG4gICAgaWYgKGdlbmVOYW1lICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZXhwcmVzc2lvbk1hcC5oYXMoZ2VuZU5hbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIFt0aGlzLmV4cHJlc3Npb25NYXAuZ2V0KGdlbmVOYW1lKV07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5yb3dzO1xyXG4gIH1cclxuXHJcbiAgZm9sZENoYW5nZShzZWxlY3RlZENsYXNzLCBzZWxlY3RlZEZ1bmN0aW9uKSB7XHJcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIHRoaXMucm93cy5mb3JFYWNoKGV4cHJlc3Npb24gPT4ge1xyXG4gICAgICBjb25zdCBmb2xkQ2hhbmdlID0gZXhwcmVzc2lvbi5mb2xkQ2hhbmdlKHNlbGVjdGVkQ2xhc3MsIHNlbGVjdGVkRnVuY3Rpb24pO1xyXG4gICAgICByZXN1bHRzLnNldChleHByZXNzaW9uLmdlbmVOYW1lLCBmb2xkQ2hhbmdlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgY29tcHV0ZUZvbGRDaGFuZ2VSYW5nZShzZWxlY3RlZENsYXNzLCBzZWxlY3RlZEZ1bmN0aW9uKSB7XHJcbiAgICBjb25zdCBmb2xkVmFsdWVzID0gdGhpcy5yb3dzLm1hcChleHByZXNzaW9uID0+IGV4cHJlc3Npb24uZm9sZENoYW5nZShzZWxlY3RlZENsYXNzLCBzZWxlY3RlZEZ1bmN0aW9uKSk7XHJcbiAgICBjb25zdCBmdnMgPSBmb2xkVmFsdWVzLmZpbHRlcihmdiA9PiBmdiAhPT0gSW5maW5pdHkgJiYgZnYgIT09IC1JbmZpbml0eSk7XHJcbiAgICBjb25zdCBtYXhNYWduaXR1ZGUgPSBNYXRoLm1heChNYXRoLm1heCguLi5mdnMpLCBNYXRoLmFicyhNYXRoLm1pbiguLi5mdnMpKSk7XHJcblxyXG4gICAgY29uc3QgbWF4ID0gIG1heE1hZ25pdHVkZTtcclxuICAgIGNvbnN0IG1pbiA9IC1tYXhNYWduaXR1ZGU7XHJcblxyXG4gICAgcmV0dXJuIHttaW4sIG1heH07XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHsgRXhwcmVzc2lvblRhYmxlLCBhcHBseUV4cHJlc3Npb25EYXRhLCBnZW5lSW50ZXJzZWN0aW9uIH07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9leHByZXNzaW9uLXRhYmxlLmpzIiwiY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCB7IFBBVEhXQVlTX0xBWU9VVF9PUFRTIH0gPSByZXF1aXJlKCcuL2xheW91dCcpO1xyXG5cclxuXHJcbmNvbnN0IE1BVENIRURfU0VBUkNIX0NMQVNTID0gJ3NlYXJjaC1tYXRjaCc7XHJcblxyXG5sZXQgZXhwYW5kQ29sbGFwc2VBbGwgPSAoKSA9PiB7XHJcbiAgbGV0IGV4cGFuZGVkID0gdHJ1ZTtcclxuXHJcbiAgcmV0dXJuIGN5ID0+IHtcclxuICAgIGxldCBhcGkgPSBjeS5leHBhbmRDb2xsYXBzZSgnZ2V0Jyk7XHJcblxyXG4gICAgaWYoIGV4cGFuZGVkICl7XHJcbiAgICAgIGxldCBub2Rlc1RvQ29sbGFwc2UgPSBjeS5ub2RlcygnW2NsYXNzPVwiY29tcGxleFwiXSwgW2NsYXNzPVwiY29tcGxleCBtdWx0aW1lclwiXScpLmZpbHRlcihub2RlID0+IGFwaS5pc0NvbGxhcHNpYmxlKG5vZGUpKTtcclxuICAgICAgYXBpLmNvbGxhcHNlUmVjdXJzaXZlbHkobm9kZXNUb0NvbGxhcHNlKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgbm9kZXNUb0V4cGFuZCA9IGN5Lm5vZGVzKCdbY2xhc3M9XCJjb21wbGV4XCJdLCBbY2xhc3M9XCJjb21wbGV4IG11bHRpbWVyXCJdJykuZmlsdGVyKG5vZGUgPT4gYXBpLmlzRXhwYW5kYWJsZShub2RlKSk7XHJcbiAgICAgIGFwaS5leHBhbmRSZWN1cnNpdmVseShub2Rlc1RvRXhwYW5kKTtcclxuICAgIH1cclxuICAgIGV4cGFuZGVkID0gIWV4cGFuZGVkO1xyXG4gIH07XHJcbn07XHJcblxyXG5sZXQgZml0ID0gY3kgPT4ge1xyXG4gIGN5LmFuaW1hdGlvbih7IGR1cmF0aW9uOiAyNTAsIGZpdDogeyBwYWRkaW5nOiA3NSB9fSkucGxheSgpO1xyXG59O1xyXG5cclxubGV0IGxheW91dCA9IGN5ID0+IHtcclxuICBjeS5sYXlvdXQoUEFUSFdBWVNfTEFZT1VUX09QVFMpLnJ1bigpO1xyXG59O1xyXG5cclxubGV0IHNlYXJjaE5vZGVzID0gKGN5LCBxdWVyeSkgPT4ge1xyXG4gIGxldCBxdWVyeUVtcHR5ID0gXy50cmltKHF1ZXJ5KSA9PT0gJyc7XHJcbiAgbGV0IGVjQVBJID0gY3kuZXhwYW5kQ29sbGFwc2UoJ2dldCcpO1xyXG4gIGxldCBhbGxOb2RlcyA9IGN5Lm5vZGVzKCkudW5pb24oZWNBUEkuZ2V0QWxsQ29sbGFwc2VkQ2hpbGRyZW5SZWN1cnNpdmVseSgpKTtcclxuXHJcbiAgbGV0IGdldFN5bnMgPSBub2RlID0+IHtcclxuICAgIGxldCBtZXRhZGF0YSA9IG5vZGUuZGF0YSgnbWV0YWRhdGEnKTtcclxuICAgIGxldCB7IHN5bm9ueW1zID0gW10sIHN0YW5kYXJkTmFtZSA9ICcnLCBkaXNwbGF5TmFtZSA9ICcnIH0gPSBtZXRhZGF0YTtcclxuICAgIGxldCBsYWJlbCA9IG5vZGUuZGF0YSgnbGFiZWwnKTtcclxuXHJcbiAgICByZXR1cm4gXy51bmlxKFtcclxuICAgICAgLi4uc3lub255bXMsXHJcbiAgICAgIHN0YW5kYXJkTmFtZSxcclxuICAgICAgZGlzcGxheU5hbWUsXHJcbiAgICAgIGxhYmVsXHJcbiAgICBdKS5maWx0ZXIoIGVsID0+ICFfLmlzRW1wdHkoIGVsICkgKTtcclxuICB9O1xyXG5cclxuICBsZXQgbWF0Y2hlZCA9IGFsbE5vZGVzLmZpbHRlcihub2RlID0+IHtcclxuICAgIGxldCBzeW5vbnltcyA9IGdldFN5bnMobm9kZSk7XHJcblxyXG4gICAgbGV0IHN5bm9ueW1NYXRjaCA9IHN5bm9ueW1zLmZpbmQoIHN5bm9ueW0gPT4gc3lub255bS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKCBxdWVyeS50b1VwcGVyQ2FzZSgpICkpO1xyXG5cclxuICAgIHJldHVybiBzeW5vbnltTWF0Y2ggIT0gbnVsbDtcclxuICB9KTtcclxuXHJcbiAgYWxsTm9kZXMucmVtb3ZlQ2xhc3MoTUFUQ0hFRF9TRUFSQ0hfQ0xBU1MpO1xyXG5cclxuICBpZiAoIG1hdGNoZWQubGVuZ3RoID4gMCAmJiAhcXVlcnlFbXB0eSApIHtcclxuICAgIG1hdGNoZWQuYWRkQ2xhc3MoTUFUQ0hFRF9TRUFSQ0hfQ0xBU1MpO1xyXG4gIH1cclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIGV4cGFuZENvbGxhcHNlOiBleHBhbmRDb2xsYXBzZUFsbCgpLFxyXG4gIGZpdCxcclxuICBsYXlvdXQsXHJcbiAgc2VhcmNoTm9kZXM6IF8uZGVib3VuY2Uoc2VhcmNoTm9kZXMsIDMwMCksXHJcbiAgTUFUQ0hFRF9TRUFSQ0hfQ0xBU1NcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L2N5L2FjdGlvbnMuanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcblxyXG5jb25zdCBQb3BvdmVyID0gcmVxdWlyZSgnLi9wb3BvdmVyJyk7XHJcbmNvbnN0IHRpcHB5RGVmYXVsdHMgPSByZXF1aXJlKCcuLi90aXBweS1kZWZhdWx0cycpO1xyXG5cclxuLyogUHJvcHNcclxuUmVxdWlyZWRcclxuLSBkZXNjcmlwdGlvblxyXG5PcHRpb25hbFxyXG4tIHRpcHB5IChhbiBvYmplY3Qgd2l0aCB0aXBweS5qcyBvcHRpb25zKVxyXG4tIHBvcG92ZXIgcHJvcHMgKHByb3BzIHlvdSB3YW50IHRoZSBwb3BvdmVyIHRvIGhhdmUsIHNlZSBwb3BvdmVyKVxyXG4qL1xyXG5jbGFzcyBUb29sdGlwIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICBjb21wb25lbnRXaWxsTW91bnQoKXtcclxuICAgIGxldCBwcm9wcyA9IHRoaXMucHJvcHM7XHJcblxyXG4gICAgbGV0IHRpcHB5T3B0aW9ucyA9IF8uYXNzaWduKHt9LCB0aXBweURlZmF1bHRzLCB7XHJcbiAgICAgIGh0bWw6ICgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGgoJ2Rpdi50b29sdGlwLWNvbnRlbnQnLCBbaCgnc3Bhbi50b29sdGlwLWRlc2NyaXB0aW9uJywgcHJvcHMuZGVzY3JpcHRpb24pXSk7XHJcbiAgICAgIH0pKCksXHJcbiAgICAgIHRyaWdnZXI6ICdtb3VzZWVudGVyIG1hbnVhbCcsXHJcbiAgICAgIHRoZW1lOiAnZGFyaycsXHJcbiAgICAgIGRlbGF5OiBbIDIwMCwgMCBdXHJcbiAgICB9LCBwcm9wcy50aXBweSk7XHJcblxyXG4gICAgdGhpcy5wb3BvdmVyT3B0aW9ucyA9IF8uYXNzaWduKHt9LCBwcm9wcywge1xyXG4gICAgICB0aXBweTogdGlwcHlPcHRpb25zLFxyXG4gICAgICBoaWRlOiBoaWRlVGlwcHkgPT4ge1xyXG4gICAgICAgIGlmKHByb3BzLmhpZGUpe1xyXG4gICAgICAgICAgcHJvcHMuaGlkZShoaWRlVGlwcHkpOyAvLyBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcnJpZGUgdGhlIGhpZGUoKSBmcm9tIHByb3BzXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmhpZGVUaXBweSA9IGhpZGVUaXBweTtcclxuICAgICAgfSxcclxuICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGlkZVRpcHB5KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuXHJcbiAgfVxyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgcHJvcHMgPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIHJldHVybiBoKFBvcG92ZXIsIHRoaXMucG9wb3Zlck9wdGlvbnMsIHByb3BzLmNoaWxkcmVuKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gVG9vbHRpcDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL3Rvb2x0aXAuanMiLCJtb2R1bGUuZXhwb3J0cyA9IHtcclxuICB0aGVtZTogJ2xpZ2h0JyxcclxuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxyXG4gIGNyZWF0ZVBvcHBlckluc3RhbmNlT25Jbml0OiB0cnVlLFxyXG4gIGFuaW1hdGlvbjogJ2ZhZGUnLFxyXG4gIGFuaW1hdGVGaWxsOiBmYWxzZSxcclxuICBkdXJhdGlvbjogWyAyNTAsIDAgXSxcclxuICBkZWxheTogWyAwLCAwIF0sXHJcbiAgYXJyb3c6IHRydWUsXHJcbiAgdHJpZ2dlcjogJ2NsaWNrIG1hbnVhbCcsXHJcbiAgaW50ZXJhY3RpdmU6IHRydWUsXHJcbiAgbXVsdGlwbGU6IHRydWUsXHJcbiAgaGlkZU9uQ2xpY2s6IHRydWVcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi90aXBweS1kZWZhdWx0cy5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IGNsYXNzTmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XHJcblxyXG5jbGFzcyBQY0xvZ29MaW5rIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgY24gPSB0aGlzLnByb3BzLmNsYXNzTmFtZTtcclxuICAgIHJldHVybiBoKCdhJywgeyBocmVmOiAnLycgfSwgWyBoKCdkaXYnLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygncGMtbG9nbycsIGNuKSB9KSBdKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGNMb2dvTGluaztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL3BjLWxvZ28tbGluay5qcyIsImNvbnN0IHsgUEFUSFdBWVNfTEFZT1VUX09QVFMgfSA9IHJlcXVpcmUoJy4vbGF5b3V0Jyk7XHJcbmNvbnN0IHsgZXhwYW5kQ29sbGFwc2UsIHNlYXJjaE5vZGVzLCBsYXlvdXQsIGZpdCB9ID0gcmVxdWlyZSgnLi9hY3Rpb25zJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICBleHBhbmRDb2xsYXBzZSxcclxuICBmaXQsXHJcbiAgbGF5b3V0LFxyXG4gIHN0eWxlc2hlZXQ6IHJlcXVpcmUoJy4vcGF0aHdheXMtc3R5bGVzaGVldCcpLFxyXG4gIGJpbmRDeUV2ZW50czogcmVxdWlyZSgnLi9ldmVudHMnKSxcclxuICBzZWFyY2hOb2RlcyxcclxuICBQQVRIV0FZU19MQVlPVVRfT1BUU1xyXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGF0aHdheXMvY3kvaW5kZXguanMiLCJjb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IHsgUEFUSFdBWVNfTEFZT1VUX09QVFMgfSA9IHJlcXVpcmUoJy4vbGF5b3V0Jyk7XHJcblxyXG5cclxuY29uc3QgTUFUQ0hFRF9TRUFSQ0hfQ0xBU1MgPSAnc2VhcmNoLW1hdGNoJztcclxuXHJcbmxldCBleHBhbmRDb2xsYXBzZUFsbCA9ICgpID0+IHtcclxuICBsZXQgZXhwYW5kZWQgPSB0cnVlO1xyXG5cclxuICByZXR1cm4gY3kgPT4ge1xyXG4gICAgbGV0IGFwaSA9IGN5LmV4cGFuZENvbGxhcHNlKCdnZXQnKTtcclxuXHJcbiAgICBpZiggZXhwYW5kZWQgKXtcclxuICAgICAgbGV0IG5vZGVzVG9Db2xsYXBzZSA9IGN5Lm5vZGVzKCdbY2xhc3M9XCJjb21wbGV4XCJdLCBbY2xhc3M9XCJjb21wbGV4IG11bHRpbWVyXCJdJykuZmlsdGVyKG5vZGUgPT4gYXBpLmlzQ29sbGFwc2libGUobm9kZSkpO1xyXG4gICAgICBhcGkuY29sbGFwc2VSZWN1cnNpdmVseShub2Rlc1RvQ29sbGFwc2UpO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBub2Rlc1RvRXhwYW5kID0gY3kubm9kZXMoJ1tjbGFzcz1cImNvbXBsZXhcIl0sIFtjbGFzcz1cImNvbXBsZXggbXVsdGltZXJcIl0nKS5maWx0ZXIobm9kZSA9PiBhcGkuaXNFeHBhbmRhYmxlKG5vZGUpKTtcclxuICAgICAgYXBpLmV4cGFuZFJlY3Vyc2l2ZWx5KG5vZGVzVG9FeHBhbmQpO1xyXG4gICAgfVxyXG4gICAgZXhwYW5kZWQgPSAhZXhwYW5kZWQ7XHJcbiAgfTtcclxufTtcclxuXHJcbmxldCBmaXQgPSBjeSA9PiB7XHJcbiAgY3kuYW5pbWF0aW9uKHsgZHVyYXRpb246IDI1MCwgZml0OiB7IHBhZGRpbmc6IDc1IH19KS5wbGF5KCk7XHJcbn07XHJcblxyXG5sZXQgbGF5b3V0ID0gY3kgPT4ge1xyXG4gIGN5LmxheW91dChQQVRIV0FZU19MQVlPVVRfT1BUUykucnVuKCk7XHJcbn07XHJcblxyXG5sZXQgc2VhcmNoTm9kZXMgPSAoY3ksIHF1ZXJ5KSA9PiB7XHJcbiAgbGV0IHF1ZXJ5RW1wdHkgPSBfLnRyaW0ocXVlcnkpID09PSAnJztcclxuICBsZXQgZWNBUEkgPSBjeS5leHBhbmRDb2xsYXBzZSgnZ2V0Jyk7XHJcbiAgbGV0IGFsbE5vZGVzID0gY3kubm9kZXMoKS51bmlvbihlY0FQSS5nZXRBbGxDb2xsYXBzZWRDaGlsZHJlblJlY3Vyc2l2ZWx5KCkpO1xyXG5cclxuICBsZXQgZ2V0U3lucyA9IG5vZGUgPT4ge1xyXG4gICAgbGV0IG1ldGFkYXRhID0gbm9kZS5kYXRhKCdtZXRhZGF0YScpO1xyXG4gICAgbGV0IHsgc3lub255bXMgPSBbXSwgc3RhbmRhcmROYW1lID0gJycsIGRpc3BsYXlOYW1lID0gJycgfSA9IG1ldGFkYXRhO1xyXG4gICAgbGV0IGxhYmVsID0gbm9kZS5kYXRhKCdsYWJlbCcpO1xyXG5cclxuICAgIHJldHVybiBfLnVuaXEoW1xyXG4gICAgICAuLi5zeW5vbnltcyxcclxuICAgICAgc3RhbmRhcmROYW1lLFxyXG4gICAgICBkaXNwbGF5TmFtZSxcclxuICAgICAgbGFiZWxcclxuICAgIF0pLmZpbHRlciggZWwgPT4gIV8uaXNFbXB0eSggZWwgKSApO1xyXG4gIH07XHJcblxyXG4gIGxldCBtYXRjaGVkID0gYWxsTm9kZXMuZmlsdGVyKG5vZGUgPT4ge1xyXG4gICAgbGV0IHN5bm9ueW1zID0gZ2V0U3lucyhub2RlKTtcclxuXHJcbiAgICBsZXQgc3lub255bU1hdGNoID0gc3lub255bXMuZmluZCggc3lub255bSA9PiBzeW5vbnltLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoIHF1ZXJ5LnRvVXBwZXJDYXNlKCkgKSk7XHJcblxyXG4gICAgcmV0dXJuIHN5bm9ueW1NYXRjaCAhPSBudWxsO1xyXG4gIH0pO1xyXG5cclxuICBhbGxOb2Rlcy5yZW1vdmVDbGFzcyhNQVRDSEVEX1NFQVJDSF9DTEFTUyk7XHJcblxyXG4gIGlmICggbWF0Y2hlZC5sZW5ndGggPiAwICYmICFxdWVyeUVtcHR5ICkge1xyXG4gICAgbWF0Y2hlZC5hZGRDbGFzcyhNQVRDSEVEX1NFQVJDSF9DTEFTUyk7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgZXhwYW5kQ29sbGFwc2U6IGV4cGFuZENvbGxhcHNlQWxsKCksXHJcbiAgZml0LFxyXG4gIGxheW91dCxcclxuICBzZWFyY2hOb2RlczogXy5kZWJvdW5jZShzZWFyY2hOb2RlcywgMzAwKSxcclxuICBNQVRDSEVEX1NFQVJDSF9DTEFTU1xyXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGF0aHdheXMvY3kvYWN0aW9ucy5qcyIsImNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBDeXRvc2NhcGVUb29sdGlwID0gcmVxdWlyZSgnLi4vLi4vLi4vY29tbW9uL2N5L2N5dG9zY2FwZS10b29sdGlwJyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuXHJcbmNvbnN0IHsgU2VydmVyQVBJIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9zZXJ2aWNlcycpO1xyXG5jb25zdCBJbnRlcmFjdGlvbnNOb2RlVG9vbHRpcCA9IHJlcXVpcmUoJy4uL2ludGVyYWN0aW9ucy1ub2RlLXRvb2x0aXAnKTtcclxuY29uc3QgSW50ZXJhY3Rpb25zRWRnZVRvb2x0aXAgPSByZXF1aXJlKCcuLi9pbnRlcmFjdGlvbnMtZWRnZS10b29sdGlwJyk7XHJcblxyXG5jb25zdCBTSU5HTEVfU1JDX0xBWU9VVCA9IHtcclxuICBuYW1lOiAnY29uY2VudHJpYycsXHJcbiAgY29uY2VudHJpYzogbm9kZSA9PiBub2RlLmRhdGEoJ3F1ZXJpZWQnKSA/IDEgOiAwLFxyXG4gIGxldmVsV2lkdGg6ICgpID0+IDEsXHJcbiAgYW5pbWF0ZTogdHJ1ZSxcclxuICBhbmltYXRpb25EdXJhdGlvbjogODAwLFxyXG4gIGFuaW1hdGlvbkVhc2luZzogJ2Vhc2UtaW4tb3V0J1xyXG59O1xyXG5cclxuY29uc3QgTVVMVElfU1JDX0xBWU9VVCA9IHtcclxuICBuYW1lOiAnY29zZS1iaWxrZW50JyxcclxuICBub2RlUmVwdWxzaW9uOiAyMDAwLFxyXG4gIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogdHJ1ZSxcclxuICBhbmltYXRlOiAnZW5kJyxcclxuICBhbmltYXRpb25FYXNpbmc6ICdlYXNlLWluLW91dCcsXHJcbiAgYW5pbWF0aW9uRHVyYXRpb246IDgwMCxcclxuICBmaXQ6IHRydWUsXHJcbiAgcGFkZGluZzogNzUsXHJcbiAgcmFuZG9taXplOiB0cnVlXHJcbn07XHJcblxyXG5jb25zdCBpbnRlcmFjdGlvbnNMYXlvdXRPcHRzID0gY3kgPT4ge1xyXG4gIGxldCBudW1Tb3VyY2VzID0gY3kubm9kZXMoJ1s/cXVlcmllZF0nKS5zaXplKCk7XHJcbiAgaWYoIG51bVNvdXJjZXMgPiAxICl7XHJcbiAgICByZXR1cm4gTVVMVElfU1JDX0xBWU9VVDtcclxuICB9XHJcbiAgcmV0dXJuIFNJTkdMRV9TUkNfTEFZT1VUO1xyXG59O1xyXG5cclxuY29uc3QgU0hPV19JTlRFUkFDVElPTlNfVE9PTFRJUFNfRVZFTlQgPSAnc2hvd2ludGVyYWN0aW9uc3Rvb2x0aXAnO1xyXG5cclxubGV0IGJpbmRFdmVudHMgPSAoIGN5ICkgPT4ge1xyXG4gIGxldCBnZW5lRGF0YSA9IFtdO1xyXG5cclxuICAvLyBvbiBpbml0aWFsIGludGVyYWN0aW9ucyBkYXRhIGxvYWQsIHBvcHVhbGF0ZSBnZW5lIG1ldGFkYXRhXHJcbiAgY3kub25lKCdhZGQnLCAoKSA9PiB7XHJcbiAgICBsZXQgZ2VuZVF1ZXJ5ID0gY3kubm9kZXMoKS5tYXAoIG5vZGUgPT4gbm9kZS5kYXRhKCdpZCcpICkuam9pbignICcpO1xyXG4gICAgU2VydmVyQVBJLnNlYXJjaEdlbmVzKCBnZW5lUXVlcnkgKVxyXG4gICAgICAudGhlbiggcmVzID0+IGdlbmVEYXRhID0gcmVzIClcclxuICAgICAgLmNhdGNoKCAoKSA9PiB7fSApOyAvLyBzd2FsbG93XHJcbiAgfSk7XHJcblxyXG4gIGxldCBoaWRlVG9vbHRpcHMgPSAoKSA9PiB7XHJcbiAgICBjeS5lbGVtZW50cygpLmZvckVhY2goZWxlID0+IHtcclxuICAgICAgbGV0IHRvb2x0aXAgPSBlbGUuc2NyYXRjaCgnX3Rvb2x0aXAnKTtcclxuICAgICAgaWYgKHRvb2x0aXApIHtcclxuICAgICAgICB0b29sdGlwLmhpZGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgY3kub24oU0hPV19JTlRFUkFDVElPTlNfVE9PTFRJUFNfRVZFTlQsICdub2RlJywgZnVuY3Rpb24gKGV2dCkge1xyXG4gICAgbGV0IG5vZGUgPSBldnQudGFyZ2V0O1xyXG4gICAgbGV0IGdlbmVJZCA9IG5vZGUuZGF0YSgnaWQnKTtcclxuICAgIGxldCBnZW5lTWV0YWRhdGEgPSBnZW5lRGF0YS5maW5kKCBpbmZvID0+IGluZm8ucXVlcnkgPT09IGdlbmVJZCApIHx8IHt9O1xyXG4gICAgbGV0IHRvb2x0aXAgPSBuZXcgQ3l0b3NjYXBlVG9vbHRpcCggbm9kZS5wb3BwZXJSZWYoKSwge1xyXG4gICAgICBodG1sOiBoKEludGVyYWN0aW9uc05vZGVUb29sdGlwLCB7IG5vZGUsIGdlbmVNZXRhZGF0YSB9KVxyXG4gICAgfSApO1xyXG4gICAgbm9kZS5zY3JhdGNoKCdfdG9vbHRpcCcsIHRvb2x0aXApO1xyXG4gICAgdG9vbHRpcC5zaG93KCk7XHJcbiAgfSk7XHJcblxyXG4gIGN5Lm9uKFNIT1dfSU5URVJBQ1RJT05TX1RPT0xUSVBTX0VWRU5ULCAnZWRnZScsIGZ1bmN0aW9uIChldnQpIHtcclxuICAgIGxldCBlZGdlID0gZXZ0LnRhcmdldDtcclxuICAgIGxldCB0b29sdGlwID0gbmV3IEN5dG9zY2FwZVRvb2x0aXAoIGVkZ2UucG9wcGVyUmVmKCksIHtcclxuICAgICAgaHRtbDogaChJbnRlcmFjdGlvbnNFZGdlVG9vbHRpcCwge1xyXG4gICAgICAgIGVkZ2U6IGVkZ2VcclxuICAgICAgICB9KVxyXG4gICAgfSApO1xyXG4gICAgZWRnZS5zY3JhdGNoKCdfdG9vbHRpcCcsIHRvb2x0aXApO1xyXG4gICAgdG9vbHRpcC5zaG93KCk7XHJcbiAgfSk7XHJcblxyXG4gIGN5Lm9uKCd0YXAnLCBldnQgPT4ge1xyXG4gICAgY29uc3QgdGd0ID0gZXZ0LnRhcmdldDtcclxuXHJcbiAgICAvLyB3ZSBjbGlja2VkIGFuIGVsZW1lbnQgdGhhdCBoYXMgYSB0b29sdGlwIG9wZW4gLT4gY2xvc2UgaXRcclxuICAgIGlmKCB0Z3Quc2NyYXRjaCgnX3Rvb2x0aXAnKSl7XHJcbiAgICAgIGhpZGVUb29sdGlwcygpO1xyXG4gICAgICB0Z3QucmVtb3ZlU2NyYXRjaCgnX3Rvb2x0aXAnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIG9wZW4gdGhlIHRvb2x0aXAgZm9yIHRoZSBjbGlja2VkIGVsZW1lbnRcclxuICAgICAgaGlkZVRvb2x0aXBzKCk7XHJcbiAgICAgIHRndC5lbWl0KFNIT1dfSU5URVJBQ1RJT05TX1RPT0xUSVBTX0VWRU5UKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy9IaWRlIFRvb2x0aXBzIG9uIHZhcmlvdXMgZ3JhcGggbW92ZW1lbnRzXHJcbiAgY3kub24oJ2RyYWcnLCAoKSA9PiBoaWRlVG9vbHRpcHMoKSk7XHJcbiAgY3kub24oJ3BhbicsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuICBjeS5vbignem9vbScsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuICBjeS5vbignbGF5b3V0c3RhcnQnLCAoKSA9PiBoaWRlVG9vbHRpcHMoKSk7XHJcbiAgY3kub24oJ2hpZGUtdHlwZScsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuICBjeS5vbignc2xpZGVyLWNoYW5nZScsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuXHJcbiAgbGV0IG5vZGVIb3Zlck1vdXNlT3ZlciA9IF8uZGVib3VuY2UoZXZ0ID0+IHtcclxuICAgIGxldCBub2RlID0gZXZ0LnRhcmdldDtcclxuICAgIGxldCBlbGVzVG9IaWdobGlnaHQgPSBjeS5jb2xsZWN0aW9uKCk7XHJcblxyXG4gICAgLy9DcmVhdGUgYSBsaXN0IG9mIHRoZSBob3ZlcmVkIG5vZGUgJiBpdHMgbmVpZ2hib3VyaG9vZFxyXG4gICAgbm9kZS5uZWlnaGJvcmhvb2QoKS5ub2RlcygpLnVuaW9uKG5vZGUpLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgIGVsZXNUb0hpZ2hsaWdodC5tZXJnZShub2RlLmFuY2VzdG9ycygpKTtcclxuICAgICAgZWxlc1RvSGlnaGxpZ2h0Lm1lcmdlKG5vZGUuZGVzY2VuZGFudHMoKSk7XHJcbiAgICAgIGVsZXNUb0hpZ2hsaWdodC5tZXJnZShub2RlKTtcclxuICAgIH0pO1xyXG4gICAgZWxlc1RvSGlnaGxpZ2h0Lm1lcmdlKG5vZGUubmVpZ2hib3Job29kKCkuZWRnZXMoKSk7XHJcblxyXG4gICAgLy9BZGQgaGlnaGxpZ2h0ZWQgY2xhc3MgdG8gbm9kZSAmIGl0cyBuZWlnaGJvdXJob29kLCB1bmhpZ2hsaWdodGVkIHRvIGV2ZXJ5dGhpbmcgZWxzZVxyXG4gICAgY3kuZWxlbWVudHMoKS5hZGRDbGFzcygndW5oaWdobGlnaHRlZCcpO1xyXG4gICAgZWxlc1RvSGlnaGxpZ2h0LmZvckVhY2goZWxlID0+IHtcclxuICAgICAgZWxlLnJlbW92ZUNsYXNzKCd1bmhpZ2hsaWdodGVkJyk7XHJcbiAgICAgIGVsZS5hZGRDbGFzcygnaGlnaGxpZ2h0ZWQnKTtcclxuICAgIH0pO1xyXG5cclxuICB9LCA3NTApO1xyXG5cclxuICAvL2NhbGwgc3R5bGUtYXBwbHlpbmcgYW5kIHN0eWxlLXJlbW92aW5nIGZ1bmN0aW9ucyBvbiAnbW91c2VvdmVyJyBhbmQgJ21vdXNlb3V0JyBmb3Igbm9uLWNvbXBhcnRtZW50IG5vZGVzXHJcbiAgY3kub24oJ21vdXNlb3ZlcicsICdub2RlW2NsYXNzIT1cImNvbXBhcnRtZW50XCJdJywgbm9kZUhvdmVyTW91c2VPdmVyKTtcclxuICBjeS5vbignbW91c2VvdXQnLCAnbm9kZVtjbGFzcyE9XCJjb21wYXJ0bWVudFwiXScsICgpID0+IHtcclxuICAgIG5vZGVIb3Zlck1vdXNlT3Zlci5jYW5jZWwoKTtcclxuICAgIGN5LmVsZW1lbnRzKCkucmVtb3ZlQ2xhc3MoJ2hpZ2hsaWdodGVkIHVuaGlnaGxpZ2h0ZWQnKTtcclxuICB9KTtcclxufTtcclxuXHJcbi8vU2VhcmNoIGJ5IGtleXdvcmQgd2l0aGluIG5ldHdvcmtcclxubGV0IHNlYXJjaEludGVyYWN0aW9uTm9kZXMgPSBfLmRlYm91bmNlKChjeSwgcXVlcnkpID0+IHtcclxuICBsZXQgcXVlcnlFbXB0eSA9IF8udHJpbShxdWVyeSkgPT09ICcnO1xyXG4gIGxldCBhbGxOb2RlcyA9IGN5Lm5vZGVzKCk7XHJcbiAgbGV0IG1hdGNoZWQgPSBhbGxOb2Rlcy5maWx0ZXIoIG5vZGUgPT4gbm9kZS5kYXRhKCdpZCcpLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoIHF1ZXJ5LnRvVXBwZXJDYXNlKCkgKSApO1xyXG5cclxuICBjeS5iYXRjaCgoKSA9PiB7XHJcbiAgICBhbGxOb2Rlcy5yZW1vdmVDbGFzcygnbWF0Y2hlZCcpO1xyXG5cclxuICAgIGlmKCBtYXRjaGVkLmxlbmd0aCA+IDAgJiYgIXF1ZXJ5RW1wdHkgKXtcclxuICAgICAgbWF0Y2hlZC5hZGRDbGFzcygnbWF0Y2hlZCcpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59LCAyNTApO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIGludGVyYWN0aW9uc0xheW91dE9wdHMsXHJcbiAgc2VhcmNoSW50ZXJhY3Rpb25Ob2RlcyxcclxuICBpbnRlcmFjdGlvbnNTdHlsZXNoZWV0OiByZXF1aXJlKCcuL2ludGVyYWN0aW9ucy1zdHlsZXNoZWV0JyksXHJcbiAgYmluZEV2ZW50c1xyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2ludGVyYWN0aW9ucy9jeS9pbmRleC5qcyIsImNvbnN0IElOVEVSQUNUSU9OX1RZUEVTID0ge1xyXG4gIEJJTkRJTkc6ICdCaW5kaW5nJyxcclxuICBNT0RJRklDQVRJT046ICdNb2RpZmljYXRpb24nLFxyXG4gIEVYUFJFU1NJT046ICdFeHByZXNzaW9uJyxcclxuICBPVEhFUjogJ090aGVyJ1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJTlRFUkFDVElPTl9UWVBFUztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvdHlwZXMuanMiLCJjb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgQ3l0b3NjYXBlVG9vbHRpcCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbW1vbi9jeS9jeXRvc2NhcGUtdG9vbHRpcCcpO1xyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcblxyXG5jb25zdCBFbnJpY2htZW50VG9vbHRpcCA9IHJlcXVpcmUoJy4uL2VucmljaG1lbnQtdG9vbHRpcCcpO1xyXG5cclxuY29uc3QgeyBnZW5lcmF0ZUNsdXN0ZXJMYWJlbHMgfSA9IHJlcXVpcmUoJy4vY2x1c3Rlci1sYWJlbC1jYXRlZ29yaXphdGlvbicpO1xyXG5cclxuXHJcbmNvbnN0IFNIT1dfRU5SSUNITUVOVF9UT09MVElQU19FVkVOVCA9ICdzaG93ZW5yaWNobWVudHRvb2x0aXAnO1xyXG5jb25zdCBFTlJJQ0hNRU5UX0xBWU9VVF9PUFRTID0ge1xyXG4gIG5hbWU6ICdjb2xhJyxcclxuICByZWZyZXNoOiAxMCxcclxuICBhbmltYXRlOiBmYWxzZSxcclxuICBtYXhTaW11bGF0aW9uVGltZTogNTAwLFxyXG4gIG5vZGVEaW1lbnNpb25zSW5jbHVkZUxhYmVsczogdHJ1ZSxcclxuXHJcbiAgcmFuZG9taXplOiB0cnVlLFxyXG4gIGNvbnZlcmdlbmNlVGhyZXNob2xkOiA1MCxcclxuICBwYWRkaW5nOiA1MFxyXG59O1xyXG5jb25zdCBQQVJFTlRfU0VMX1BSRUZJWCA9ICdjb21wb25lbnQtJztcclxuY29uc3Qgbm9QYXJlbnQgPSBjb21wb25lbnQgPT4gIWNvbXBvbmVudC5pc0NoaWxkKCk7XHJcblxyXG5sZXQgZW5yaWNobWVudExheW91dCA9IGN5ID0+IHtcclxuICBsZXQgbm9kZXNXaXRoTm9FZGdlcyA9IGN5Lm5vZGVzKCkuZmlsdGVyKCBub2RlID0+IG5vZGUuY29ubmVjdGVkRWRnZXMoKS5zaXplKCkgPT09IDAgKTtcclxuICBsZXQgbm9kZXNXaXRoRWRnZXMgPSBjeS5lbGVtZW50cygpLmRpZmZlcmVuY2UoIG5vZGVzV2l0aE5vRWRnZXMgKTtcclxuICBsZXQgdyA9IGN5LndpZHRoKCk7XHJcbiAgbGV0IGggPSBjeS5oZWlnaHQoKTtcclxuXHJcbiAgbGV0IGZpcnN0TGF5b3V0ID0gbm9kZXNXaXRoRWRnZXMubGF5b3V0KEVOUklDSE1FTlRfTEFZT1VUX09QVFMpO1xyXG4gIGxldCBmaXJzdExheW91dFByb21pc2UgPSBmaXJzdExheW91dC5wb24oJ2xheW91dHN0b3AnKTtcclxuICBmaXJzdExheW91dC5ydW4oKTtcclxuXHJcbiAgcmV0dXJuIGZpcnN0TGF5b3V0UHJvbWlzZS50aGVuKCAoKSA9PiB7XHJcblxyXG4gICAgLy8gYWRkIHBhcmVudCBub2RlcyBmb3IgZWFjaCBjb21wb25lbnQgd2l0aCBzaXplID4gMlxyXG4gICAgY3kuZWxlbWVudHMoKVxyXG4gICAgICAuY29tcG9uZW50cygpXHJcbiAgICAgIC5maWx0ZXIoIGNvbXBvbmVudCA9PiBjb21wb25lbnQuc2l6ZSgpID4gMiApXHJcbiAgICAgIC5maWx0ZXIoIG5vUGFyZW50IClcclxuICAgICAgLmZvckVhY2goIChjb21wb25lbnQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgbGV0IGxhYmVsSW5wdXQgPSBjb21wb25lbnQubm9kZXMoKS5tYXAobm9kZSA9PiBub2RlLmRhdGEoJ25hbWUnKSkuam9pbignLiAnKTtcclxuICAgICAgICBsZXQgdGFncyA9IGdlbmVyYXRlQ2x1c3RlckxhYmVscyhsYWJlbElucHV0KTtcclxuXHJcbiAgICAgICAgbGV0IGNvbXBvbmVudFBhcmVudElkID0gUEFSRU5UX1NFTF9QUkVGSVggKyBpbmRleDtcclxuICAgICAgICBjeS5hZGQoe1xyXG4gICAgICAgICAgZ3JvdXA6ICdub2RlcycsXHJcbiAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHRhZ3M6IHRhZ3Muam9pbignICcpLFxyXG4gICAgICAgICAgICBpZDogY29tcG9uZW50UGFyZW50SWRcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbXBvbmVudC5tb3ZlKHtcclxuICAgICAgICAgIHBhcmVudDogY29tcG9uZW50UGFyZW50SWRcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG5cclxuICAgIGxldCBmaXJzdExheW91dEJCID0gbm9kZXNXaXRoRWRnZXMuYm91bmRpbmdCb3goKTtcclxuICAgIGxldCBiYklzRW1wdHkgPSBiYiA9PiBiYi5oID09PSAwICYmIGJiLncgPT09IDA7XHJcblxyXG4gICAgbGV0IHNlY29uZExheW91dEJCID0ge1xyXG4gICAgICB4MTogMCxcclxuICAgICAgeDI6IHcsXHJcbiAgICAgIHkxOiAwLFxyXG4gICAgICB5MjogaFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiggIWJiSXNFbXB0eSggZmlyc3RMYXlvdXRCQiApICl7XHJcbiAgICAgIHNlY29uZExheW91dEJCID0ge1xyXG4gICAgICAgIHgxOiBmaXJzdExheW91dEJCLngxLFxyXG4gICAgICAgIHgyOiBmaXJzdExheW91dEJCLngyLFxyXG4gICAgICAgIHkxOiBmaXJzdExheW91dEJCLnkyICsgMjAwLFxyXG4gICAgICAgIHkyOiBmaXJzdExheW91dEJCLnkyICsgNDAwXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNlY29uZExheW91dCA9IG5vZGVzV2l0aE5vRWRnZXMubGF5b3V0KHtcclxuICAgICAgbmFtZTogJ2dyaWQnLFxyXG4gICAgICBub2RlRGltZW5zaW9uc0luY2x1ZGVMYWJlbHM6IHRydWUsXHJcbiAgICAgIGJvdW5kaW5nQm94OiBzZWNvbmRMYXlvdXRCQixcclxuICAgICAgc3RvcDogKCkgPT4gY3kuZml0KFtdLCBNYXRoLm1pbigwLjA1ICogaCwgMC4wNSAqIHcpKVxyXG4gICAgfSk7XHJcbiAgICBsZXQgc2Vjb25kTGF5b3V0UHJvbWlzZSA9IHNlY29uZExheW91dC5wb24oJ2xheW91dHN0b3AnKTtcclxuICAgIHNlY29uZExheW91dC5ydW4oKTtcclxuXHJcbiAgICByZXR1cm4gc2Vjb25kTGF5b3V0UHJvbWlzZTtcclxuICB9KTtcclxufTtcclxuXHJcblxyXG5sZXQgYmluZEV2ZW50cyA9IGN5ID0+IHtcclxuICBsZXQgaGlkZVRvb2x0aXBzID0gKCkgPT4ge1xyXG4gICAgY3kuZWxlbWVudHMoKS5mb3JFYWNoKGVsZSA9PiB7XHJcbiAgICAgIGxldCB0b29sdGlwID0gZWxlLnNjcmF0Y2goJ190b29sdGlwJyk7XHJcbiAgICAgIGlmICh0b29sdGlwKSB7XHJcbiAgICAgICAgdG9vbHRpcC5oaWRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIGN5Lm9uKFNIT1dfRU5SSUNITUVOVF9UT09MVElQU19FVkVOVCwgJ25vZGUnLCBmdW5jdGlvbiAoZXZ0KSB7XHJcbiAgICBsZXQgbm9kZSA9IGV2dC50YXJnZXQ7XHJcblxyXG4gICAgaWYoIG5vZGUuaXNQYXJlbnQoKSApeyByZXR1cm47IH1cclxuXHJcbiAgICBsZXQgdG9vbHRpcCA9IG5ldyBDeXRvc2NhcGVUb29sdGlwKCBub2RlLnBvcHBlclJlZigpLCB7XHJcbiAgICAgIGh0bWw6IGgoRW5yaWNobWVudFRvb2x0aXAsIHtcclxuICAgICAgICBub2RlOiBub2RlLFxyXG4gICAgICAgIH0pXHJcbiAgICB9ICk7XHJcbiAgICBub2RlLnNjcmF0Y2goJ190b29sdGlwJywgdG9vbHRpcCk7XHJcbiAgICB0b29sdGlwLnNob3coKTtcclxuICB9KTtcclxuXHJcbiAgY3kub24oJ3RhcCcsIGV2dCA9PiB7XHJcbiAgICBjb25zdCB0Z3QgPSBldnQudGFyZ2V0O1xyXG5cclxuICAgIC8vIGlmIHdlIGRpZG4ndCBjbGljayBhIG5vZGUsIGNsb3NlIGFsbCB0b29sdGlwc1xyXG4gICAgaWYoIGV2dC50YXJnZXQgPT09IGN5IHx8IGV2dC50YXJnZXQuaXNFZGdlKCkgKXtcclxuICAgICAgaGlkZVRvb2x0aXBzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyB3ZSBjbGlja2VkIGEgbm9kZSB0aGF0IGhhcyBhIHRvb2x0aXAgb3BlbiAtPiBjbG9zZSBpdFxyXG4gICAgaWYoIHRndC5zY3JhdGNoKCdfdG9vbHRpcC1vcGVuZWQnKSApe1xyXG4gICAgICBoaWRlVG9vbHRpcHMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIG9wZW4gdGhlIHRvb2x0aXAgZm9yIHRoZSBjbGlja2VkIG5vZGVcclxuICAgICAgaGlkZVRvb2x0aXBzKCk7XHJcbiAgICAgIHRndC5lbWl0KFNIT1dfRU5SSUNITUVOVF9UT09MVElQU19FVkVOVCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vSGlkZSBUb29sdGlwcyBvbiB2YXJpb3VzIGdyYXBoIG1vdmVtZW50c1xyXG4gIGN5Lm9uKCdkcmFnJywgKCkgPT4gaGlkZVRvb2x0aXBzKCkpO1xyXG4gIGN5Lm9uKCdwYW4nLCAoKSA9PiBoaWRlVG9vbHRpcHMoKSk7XHJcbiAgY3kub24oJ3pvb20nLCAoKSA9PiBoaWRlVG9vbHRpcHMoKSk7XHJcbiAgY3kub24oJ2xheW91dHN0YXJ0JywgKCkgPT4gaGlkZVRvb2x0aXBzKCkpO1xyXG59O1xyXG5cclxubGV0IHNlYXJjaEVucmljaG1lbnROb2RlcyA9IF8uZGVib3VuY2UoKGN5LCBxdWVyeSkgPT4ge1xyXG4gIGxldCBxdWVyeUVtcHR5ID0gXy50cmltKHF1ZXJ5KSA9PT0gJyc7XHJcbiAgbGV0IGFsbE5vZGVzID0gY3kubm9kZXMoKTtcclxuICBsZXQgbWF0Y2hlZCA9IGFsbE5vZGVzLmZpbHRlciggbm9kZSA9PiB7XHJcbiAgICBjb25zdCBnZW5lU2V0ID0gKG5vZGUuZGF0YSgnZ2VuZVNldCcpIHx8IFtdKS5tYXAobmFtZSA9PiBuYW1lLnRvVXBwZXJDYXNlKCkpO1xyXG4gICAgY29uc3QgbmFtZSA9IChub2RlLmRhdGEoJ25hbWUnKSB8fCAnJykudG9VcHBlckNhc2UoKTtcclxuICAgIGNvbnN0IG1hdGNoZXMgPSAoc3RyLCBxKSA9PiBzdHIuaW5kZXhPZihxKSA+PSAwO1xyXG4gICAgY29uc3QgcSA9IHF1ZXJ5LnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgcmV0dXJuIG1hdGNoZXMobmFtZSwgcSkgfHwgZ2VuZVNldC5zb21lKGdlbmVOYW1lID0+IG1hdGNoZXMoZ2VuZU5hbWUsIHEpKTtcclxuICB9KTtcclxuXHJcbiAgY3kuYmF0Y2goKCkgPT4ge1xyXG4gICAgYWxsTm9kZXMucmVtb3ZlQ2xhc3MoJ21hdGNoZWQnKTtcclxuICAgIGlmKCBtYXRjaGVkLmxlbmd0aCA+IDAgJiYgIXF1ZXJ5RW1wdHkgKXtcclxuICAgICAgbWF0Y2hlZC5hZGRDbGFzcygnbWF0Y2hlZCcpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59LCAyNTApO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgZW5yaWNobWVudExheW91dCxcclxuICBzZWFyY2hFbnJpY2htZW50Tm9kZXMsXHJcbiAgZW5yaWNobWVudFN0eWxlc2hlZXQ6IHJlcXVpcmUoJy4vZW5yaWNobWVudC1zdHlsZXNoZWV0JyksXHJcbiAgYmluZEV2ZW50c1xyXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9jeS9pbmRleC5qcyIsInJlcXVpcmUoJ2JhYmVsLXBvbHlmaWxsJyk7XHJcbnJlcXVpcmUoJ3doYXR3Zy1mZXRjaCcpO1xyXG5cclxuY29uc3QgZGVidWcgPSByZXF1aXJlKCcuL2RlYnVnJyk7XHJcbmNvbnN0IGhoID0gcmVxdWlyZSgnaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IFJvdXRlciA9IHJlcXVpcmUoJy4vcm91dGVyJyk7XHJcbmNvbnN0IFJlYWN0RE9NID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XHJcblxyXG5jb25zdCBSZWdpc3RlckN5RXh0ZW5zaW9ucyA9IHJlcXVpcmUoJy4vY3l0b3NjYXBlLWV4dGVuc2lvbnMnKTtcclxuXHJcbmlmKCBkZWJ1Zy5lbmFibGVkKCkgKXtcclxuICBkZWJ1Zy5pbml0KCk7XHJcbn1cclxuXHJcblJlZ2lzdGVyQ3lFeHRlbnNpb25zKCk7XHJcblxyXG5sZXQgcm9vdCA9IGhoKCdkaXYjcm9vdCcpO1xyXG5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCByb290ICk7XHJcblxyXG5SZWFjdERPTS5yZW5kZXIoIGgoUm91dGVyKSwgcm9vdCk7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvaW5kZXguanMiLCJjb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcblxyXG5sZXQgZGVmYXVsdHMgPSB7XHJcbiAgUE9SVDogMzAwMCxcclxuICBNRVRBREFUQV9DUk9OX1NDSEVEVUxFOiAnMCAwICogKiBNb25kYXknLCAvLyB1cGRhdGUgZmlsZSBmcm9tIGdwcm9maWxlciBldGMuIChNb25kYXkgYXQgbWlkbmlnaHQpXHJcbiAgUENfVVJMOiAnaHR0cHM6Ly93d3cucGF0aHdheWNvbW1vbnMub3JnLycsXHJcbiAgRE9XTkxPQURTX0ZPTERFUl9OQU1FOiAnZG93bmxvYWRzJyxcclxuICBHUFJPRklMRVJfVVJMOiBcImh0dHBzOi8vYmlpdC5jcy51dC5lZS9ncHJvZmlsZXIvXCIsXHJcbiAgR01UX0FSQ0hJVkVfVVJMOiAnaHR0cHM6Ly9iaWl0LmNzLnV0LmVlL2dwcm9maWxlci9zdGF0aWMvZ3Byb2ZpbGVyX2hzYXBpZW5zLm5hbWUuemlwJyxcclxuICBJREVOVElGSUVSU19VUkw6ICdodHRwOi8vYmlvcmVnaXN0cnkuaW8nLFxyXG4gIE5DQklfRVVUSUxTX0JBU0VfVVJMOiAnaHR0cHM6Ly9ldXRpbHMubmNiaS5ubG0ubmloLmdvdi9lbnRyZXovZXV0aWxzJyxcclxuICBOQ0JJX0FQSV9LRVk6ICdiOTllMTBlYmUwZjkwZDgxNWE3YTk5ZjE4NDAzYWFiMDgwMDgnLCAvLyBmb3IgZGV2IHRlc3Rpbmcgb25seSAoYmFkZXJsYWJzeXNtb25pdG9yIG5jYmkga2V5KVxyXG4gIFBVQk1FRF9CQVNFX1VSTDogJ2h0dHBzOi8vcHVibWVkLm5jYmkubmxtLm5paC5nb3YvJyxcclxuICBIR05DX0JBU0VfVVJMOiAnaHR0cHM6Ly9yZXN0LmdlbmVuYW1lcy5vcmcnLFxyXG4gIFVOSVBST1RfQVBJX0JBU0VfVVJMOiAnaHR0cHM6Ly93d3cuZWJpLmFjLnVrL3Byb3RlaW5zL2FwaScsXHJcbiAgRE9JX0JBU0VfVVJMOiAnaHR0cHM6Ly9kb2kub3JnLycsXHJcbiAgT1JDSURfQkFTRV9VUkw6ICdodHRwczovL29yY2lkLm9yZy8nLFxyXG4gIFNCR05fSU1HX1NFUlZJQ0VfQkFTRV9VUkw6ICdodHRwOi8vbG9jYWxob3N0OjkwOTAvJyxcclxuICBTQkdOX0lNR19QQVRIOiAncHVibGljL2ltZy9wYXRod2F5cycsXHJcbiAgUENfSU1BR0VfQ0FDSEVfTUFYX1NJWkU6IDEwMDAwLFxyXG4gIFBDX0NBQ0hFX01BWF9TSVpFOiAxMDAwLFxyXG4gIFBVQl9DQUNIRV9NQVhfU0laRTogMTAwMDAwMCxcclxuICBFTlRfQ0FDSEVfTUFYX1NJWkU6IDEwMDAwMDAsXHJcbiAgRU5UX1NVTU1BUllfQ0FDSEVfTUFYX1NJWkU6IDEwMDAwMDAsXHJcbiAgTUFYX1NJRl9OT0RFUzogMjUsXHJcbiAgQ0xJRU5UX0ZFVENIX1RJTUVPVVQ6IDE1MDAwLFxyXG4gIFNFUlZFUl9GRVRDSF9USU1FT1VUOiA1MDAwLFxyXG4gIC8vIERCIGNvbmZpZyB2YWx1ZXNcclxuICBEQl9OQU1FOiAgJ2FwcHVpJyxcclxuICBEQl9IT1NUOiAgJzEyNy4wLjAuMScsXHJcbiAgREJfUE9SVDogJzI4MDE1JyxcclxuICBEQl9VU0VSOiB1bmRlZmluZWQsXHJcbiAgREJfUEFTUzogdW5kZWZpbmVkLFxyXG4gIERCX0NFUlQ6IHVuZGVmaW5lZCxcclxuICAvLyBmYWN0b2lkIHNwZWNpZmljIHVybHNcclxuICBGQUNUT0lEX1VSTDogJ2h0dHBzOi8vYmlvZmFjdG9pZC5vcmcvJyxcclxuICBOU19DSEVCSTogJ2NoZWJpJyxcclxuICBOU19FTlNFTUJMOiAnZW5zZW1ibCcsXHJcbiAgTlNfR0VORUNBUkRTOiAnZ2VuZWNhcmRzJyxcclxuICBOU19HRU5FX09OVE9MT0dZOiAnZ28nLFxyXG4gIE5TX0hHTkM6ICdoZ25jJyxcclxuICBOU19IR05DX1NZTUJPTDogJ2hnbmMuc3ltYm9sJyxcclxuICBOU19OQ0JJX0dFTkU6ICduY2JpZ2VuZScsXHJcbiAgTlNfUFVCTUVEOiAncHVibWVkJyxcclxuICBOU19SRUFDVE9NRTogJ3JlYWN0b21lJyxcclxuICBOU19VTklQUk9UOiAndW5pcHJvdCcsXHJcbiAgTlNfQklPRkFDVE9JRDogJ2Jpb2ZhY3RvaWQnLFxyXG4gIE5TX1BBVEhXQVlDT01NT05TOiAncGF0aHdheWNvbW1vbnMnXHJcbn07XHJcblxyXG5sZXQgZW52VmFycyA9IF8ucGljayggcHJvY2Vzcy5lbnYsIE9iamVjdC5rZXlzKCBkZWZhdWx0cyApICk7XHJcblxyXG5cclxuLy8gdGhlc2UgdmFycyBhcmUgYWx3YXlzIGluY2x1ZGVkIGluIHRoZSBidW5kbGUgYmVjYXVzZSB0aGV5IHJlZiBgcHJvY2Vzcy5lbnYuJHtuYW1lfWAgZGlyZWN0bHlcclxuLy8gTkIgRE8gTk9UIGluY2x1ZGUgcGFzc3dvcmRzIGV0Yy4gaGVyZVxyXG5sZXQgY2xpZW50VmFycyA9IHtcclxuICBOT0RFX0VOVjogcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXHJcbiAgUENfVVJMOiBwcm9jZXNzLmVudi5QQ19VUkwsXHJcbiAgRkFDVE9JRF9VUkw6IHByb2Nlc3MuZW52LkZBQ1RPSURfVVJMXHJcbn07XHJcblxyXG5fLmFzc2lnbihlbnZWYXJzLCBjbGllbnRWYXJzKTtcclxuXHJcbmZvciggbGV0IGtleSBpbiBlbnZWYXJzICl7XHJcbiAgbGV0IHZhbCA9IGVudlZhcnNba2V5XTtcclxuXHJcbiAgaWYoIHZhbCA9PT0gJycgfHwgdmFsID09IG51bGwgKXtcclxuICAgIGRlbGV0ZSBlbnZWYXJzW2tleV07XHJcbiAgfVxyXG59XHJcblxyXG5sZXQgY29uZiA9IE9iamVjdC5hc3NpZ24oIHt9LCBkZWZhdWx0cywgZW52VmFycyApO1xyXG5cclxuT2JqZWN0LmZyZWV6ZSggY29uZiApO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBjb25mO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29uZmlnLmpzIiwibGV0IGRvbVJlYWR5ID0gcmVxdWlyZSgnZnJlYWR5Jyk7XHJcbmxldCBzeW5jID0gcmVxdWlyZSgnLi9zeW5jJyk7XHJcblxyXG5sZXQgZGVidWcgPSB3aW5kb3cuZGJnID0ge1xyXG4gIGVuYWJsZWQ6IGZ1bmN0aW9uKCBvbiApe1xyXG4gICAgaWYoIGFyZ3VtZW50cy5sZW5ndGggPT09IDAgKXtcclxuICAgICAgaWYoIHRoaXMuX2VuYWJsZWQgIT0gbnVsbCApe1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuREVCVUcgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fZW5hYmxlZCA9ICEhb247XHJcbiAgICB9XHJcbiAgfSxcclxuXHJcbiAgaW5pdDogZnVuY3Rpb24oKXtcclxuICAgIGRvbVJlYWR5KCBzeW5jICk7XHJcbiAgfVxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBkZWJ1ZztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9kZWJ1Zy5qcyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXBwZW5kU2NyaXB0KCl7XHJcbiAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gIHNjcmlwdC5zcmMgPSAnaHR0cDovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAnOjM1NzI5L2xpdmVyZWxvYWQuanMnO1xyXG5cclxuICBkb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZSggc2NyaXB0LCBkb2N1bWVudC5oZWFkLmZpcnN0Q2hpbGQgKTtcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9zeW5jLmpzIiwiLyogKGlnbm9yZWQpICovXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gaHRtbC1lbGVtZW50IChpZ25vcmVkKVxuLy8gbW9kdWxlIGlkID0gNDE2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImNvbnN0IHtCcm93c2VyUm91dGVyLCBSb3V0ZSwgU3dpdGNofSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgcXMgPSByZXF1aXJlKCdxdWVyeS1zdHJpbmcnKTtcclxuXHJcbmNvbnN0IEZlYXR1cmVzID0gcmVxdWlyZSgnLi9mZWF0dXJlcycpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSAoKSA9PiB7XHJcbiAgcmV0dXJuIGgoQnJvd3NlclJvdXRlciwgW1xyXG4gICAgaChTd2l0Y2gsIFtcclxuICAgICAge1xyXG4gICAgICAgIHBhdGg6ICcvJyxcclxuICAgICAgICByZW5kZXI6IHByb3BzID0+IHtcclxuICAgICAgICAgIHJldHVybiBoKEZlYXR1cmVzLlNlYXJjaCwgcHJvcHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHBhdGg6ICcvc2VhcmNoJyxcclxuICAgICAgICByZW5kZXI6IHByb3BzID0+IHtcclxuICAgICAgICAgIHJldHVybiBoKEZlYXR1cmVzLlNlYXJjaCwgcHJvcHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHBhdGg6ICcvcGF0aHdheXMnLFxyXG4gICAgICAgIHJlbmRlcjogcHJvcHMgPT4ge1xyXG4gICAgICAgICAgbGV0IHVyaSA9IHFzLnBhcnNlKGxvY2F0aW9uLnNlYXJjaCkudXJpO1xyXG4gICAgICAgICAgbGV0IGFwaU9wdHMgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdwYXRod2F5cycsXHJcbiAgICAgICAgICAgIHVyaVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbnN0IGRvd25sb2FkT3B0cyA9IHtcclxuICAgICAgICAgICAgZG93bmxvYWRUeXBlczogWyAncG5nJywgJ2dtdCcsICdzaWYnLCAndHh0JywgJ2Jpb3BheCcsICdqc29ubGQnLCAnc2JnbicgXVxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gaChGZWF0dXJlcy5QYXRod2F5cywgXy5hc3NpZ24oIHt9LCBwcm9wcywgeyBhcGlPcHRzLCBkb3dubG9hZE9wdHMgfSApKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBwYXRoOiAnL2Jpb2ZhY3RvaWQnLFxyXG4gICAgICAgIHJlbmRlcjogcHJvcHMgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGgoRmVhdHVyZXMuQmlvZmFjdG9pZCwgcHJvcHMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHBhdGg6ICcvYmlvZmFjdG9pZC86aWQnLFxyXG4gICAgICAgIHJlbmRlcjogcHJvcHMgPT4ge1xyXG4gICAgICAgICAgbGV0IHsgbWF0Y2ggfSA9IHByb3BzO1xyXG4gICAgICAgICAgbGV0IHsgaWQgfSA9IG1hdGNoLnBhcmFtcztcclxuICAgICAgICAgIGxldCBhcGlPcHRzID0ge1xyXG4gICAgICAgICAgICB0eXBlOiAnYmlvZmFjdG9pZCcsXHJcbiAgICAgICAgICAgIGlkXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHJldHVybiBoKEZlYXR1cmVzLlBhdGh3YXlzLCBfLmFzc2lnbigge30sIHByb3BzLCB7IGFwaU9wdHMgfSApKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBwYXRoOiAnL3BhaW50JyxcclxuICAgICAgICByZW5kZXI6IHByb3BzID0+IHtcclxuICAgICAgICAgIHJldHVybiBoKEZlYXR1cmVzLlBhaW50LCBwcm9wcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgcGF0aDogJy9pbnRlcmFjdGlvbnMnLFxyXG4gICAgICAgIHJlbmRlcjogcHJvcHMgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGgoRmVhdHVyZXMuSW50ZXJhY3Rpb25zLCBwcm9wcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgcGF0aDogJy9lbnJpY2htZW50JyxcclxuICAgICAgICByZW5kZXI6IHByb3BzID0+IHtcclxuICAgICAgICAgIHJldHVybiBoKEZlYXR1cmVzLkVucmljaG1lbnQsIHByb3BzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBwYXRoOiAnKicsXHJcbiAgICAgICAgcmVuZGVyOiBwcm9wcyA9PiB7XHJcbiAgICAgICAgICBwcm9wcyA9IF8uYXNzaWduKHsgbm90Rm91bmRFcnJvcjogdHJ1ZSB9LCBwcm9wcyk7XHJcbiAgICAgICAgICByZXR1cm4gaChGZWF0dXJlcy5TZWFyY2gsIHByb3BzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIF0ubWFwKCBzcGVjID0+IGgoUm91dGUsIF8uYXNzaWduKHsgZXhhY3Q6IHRydWUgfSwgc3BlYykpICkpXHJcbiAgXSk7XHJcbn07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvcm91dGVyLmpzIiwiY29uc3QgUGFpbnQgPSByZXF1aXJlKCcuL3BhaW50Jyk7XHJcbmNvbnN0IFBhdGh3YXlzID0gcmVxdWlyZSgnLi9wYXRod2F5cycpO1xyXG5jb25zdCBTZWFyY2ggPSByZXF1aXJlKCcuL3NlYXJjaCcpO1xyXG5jb25zdCBJbnRlcmFjdGlvbnMgPSByZXF1aXJlKCcuL2ludGVyYWN0aW9ucycpO1xyXG5jb25zdCBFbnJpY2htZW50ID0gcmVxdWlyZSgnLi9lbnJpY2htZW50Jyk7XHJcbmNvbnN0IEJpb2ZhY3RvaWQgPSByZXF1aXJlKCcuL2Jpb2ZhY3RvaWQnKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIFBhaW50LFxyXG4gIFNlYXJjaCxcclxuICBQYXRod2F5cyxcclxuICBJbnRlcmFjdGlvbnMsXHJcbiAgRW5yaWNobWVudCxcclxuICBCaW9mYWN0b2lkXHJcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbmRleC5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IHF1ZXJ5U3RyaW5nID0gcmVxdWlyZSgncXVlcnktc3RyaW5nJyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgY2xhc3NOYW1lcyA9IHJlcXVpcmUoJ2NsYXNzbmFtZXMnKTtcclxuY29uc3QgTG9hZGVyID0gcmVxdWlyZSgncmVhY3QtbG9hZGVyJyk7XHJcbmNvbnN0IFByb21pc2UgPSByZXF1aXJlKCdibHVlYmlyZCcpLlByb21pc2U7XHJcblxyXG5jb25zdCB7IGZldGNoIH0gPSByZXF1aXJlKCcuLi8uLi8uLi91dGlsJyk7XHJcbmNvbnN0IEN5dG9zY2FwZVNlcnZpY2UgPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY3knKTtcclxuY29uc3QgeyBTZXJ2ZXJBUEkgfSA9IHJlcXVpcmUoJy4uLy4uL3NlcnZpY2VzJyk7XHJcblxyXG5jb25zdCBQYXRod2F5ID0gcmVxdWlyZSgnLi4vLi4vLi4vbW9kZWxzL3BhdGh3YXkvcGF0aHdheS1tb2RlbCcpO1xyXG5cclxuY29uc3QgRmlsZURvd25sb2FkTWVudSA9IHJlcXVpcmUoJy4vbWVudXMvZmlsZS1kb3dubG9hZC1tZW51Jyk7XHJcbmNvbnN0IEluZm9NZW51ID0gcmVxdWlyZSgnLi9tZW51cy9uZXR3b3JrLWluZm8tbWVudScpO1xyXG5jb25zdCBQYWludE1lbnUgPSByZXF1aXJlKCcuL21lbnVzL3BhaW50LW1lbnUnKTtcclxuY29uc3QgUGF0aHdheXNUb29sYmFyID0gcmVxdWlyZSgnLi9wYXRod2F5cy10b29sYmFyJyk7XHJcblxyXG5jb25zdCB7IFNpZGViYXIsIFBjTG9nb0xpbmssIEN5dG9zY2FwZU5ldHdvcmsgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzLycpO1xyXG5cclxuY29uc3QgZGVtb0V4cHJlc3Npb25zID0gcmVxdWlyZSgnLi9kZW1vLWV4cHJlc3Npb25zLmpzb24nKTtcclxuY29uc3QgZGVtb1BhdGh3YXlzID0gcmVxdWlyZSgnLi9kZW1vLXBhdGh3YXktcmVzdWx0cy5qc29uJyk7XHJcblxyXG5jb25zdCB7IEV4cHJlc3Npb25UYWJsZSwgYXBwbHlFeHByZXNzaW9uRGF0YSwgZ2VuZUludGVyc2VjdGlvbiB9ID0gcmVxdWlyZSgnLi9leHByZXNzaW9uLXRhYmxlJyk7XHJcblxyXG5jb25zdCB7IHN0eWxlc2hlZXQsIGJpbmRDeUV2ZW50cywgUEFUSFdBWVNfTEFZT1VUX09QVFMgfSA9ICByZXF1aXJlKCcuL2N5Jyk7XHJcblxyXG4vLyBnaXZlbiBhIHN0cmluZyBvZiBOIGdlbmUgbmFtZXMsIGNodW5rIHRoZW0gaW50byBOIC8gMTUgc3VicXVlcmllcyBhbmQgc2VuZCB0aGVtIHRvIHBhdGh3YXkgY29tbW9uc1xyXG4vLyBmb3IgZWFjaCBwYXRod2F5IGluIHRoZSBzZWFyY2ggcmVzdWx0c1xyXG4vLyBnZXQgdGhlIHBhdGh3YXkganNvbiBmb3IgdGhhdCByZXN1bHRcclxuLy8gZmluZCBvdXQgYWxsIHRoZSBnZW5lcyBhcmUgaW4gdGhhdCBwYXRod2F5XHJcbi8vIGZpbmQgYWxsIHRoZSBnZW5lcyBpbiB0aGUgZXhwcmVzc2lvbiBkYXRhXHJcbi8vIHJldHVybiB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gZ2VuZXMgaW4gKGV4cERhdGEsIHApIGZvciBwIGluIFBhdGh3YXkgTGlzdFxyXG5sZXQgZ2V0UGF0aHdheXNSZWxldmFudFRvID0gKHNlYXJjaFBhcmFtLCBleHByZXNzaW9uVGFibGUpID0+IHtcclxuICBsZXQgZXhwcmVzc2lvbnMgPSBleHByZXNzaW9uVGFibGUucmF3RXhwcmVzc2lvbnM7XHJcbiAgbGV0IGdlbmVRdWVyaWVzID0gXy5jaHVuayhleHByZXNzaW9ucy5tYXAoZXhwcmVzc2lvbiA9PiBleHByZXNzaW9uLmdlbmVOYW1lKSwgMTUpXHJcbiAgLm1hcChjaHVuayA9PiBTZXJ2ZXJBUEkuc2VhcmNoKHtxOiBjaHVuay5qb2luKCcgJyksIHR5cGU6ICdQYXRod2F5J30pKTtcclxuXHJcblxyXG4gIGxldCBzZWFyY2hRdWVyeSA9IFNlcnZlckFQSS5zZWFyY2goe3E6IHNlYXJjaFBhcmFtLCB0eXBlOiAnUGF0aHdheSd9KTtcclxuXHJcbiAgcmV0dXJuIFByb21pc2UuYWxsKFsuLi5nZW5lUXVlcmllcywgc2VhcmNoUXVlcnldKS50aGVuKHNlYXJjaFJlc3VsdHMgPT4ge1xyXG4gICAgbGV0IHBhdGh3YXlTZWFyY2hSZXN1bHRzID0gWy4uLnNlYXJjaFJlc3VsdHMubWFwKCByZXN1bHQgPT4gcmVzdWx0LnNlYXJjaEhpdHMpXTtcclxuICAgIGxldCB1bmlxdWVSZXN1bHRzID0gXy51bmlxQnkoXy5mbGF0dGVuKHBhdGh3YXlTZWFyY2hSZXN1bHRzKSwgcmVzdWx0ID0+IHJlc3VsdC51cmkpO1xyXG4gICAgbGV0IHBhdGh3YXlzSlNPTiA9IHVuaXF1ZVJlc3VsdHMubWFwKHJlc3VsdCA9PiBTZXJ2ZXJBUEkuZ2V0UGF0aHdheShyZXN1bHQudXJpLCAnbGF0ZXN0JykuY2F0Y2goICgpID0+IG51bGwgKSk7XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHBhdGh3YXlzSlNPTikudGhlbihwYXRod2F5c0pTT04gPT4ge1xyXG4gICAgICByZXR1cm4gXy51bmlxV2l0aChwYXRod2F5c0pTT04uZmlsdGVyKCBwaiA9PiBwaiAhPSBudWxsICkubWFwKCBwYXRod2F5SlNPTiA9PiB7XHJcbiAgICAgICAgbGV0IHAgPSBuZXcgUGF0aHdheSgpO1xyXG4gICAgICAgIHAubG9hZCggcGF0aHdheUpTT04gKTtcclxuICAgICAgICByZXR1cm4gcDtcclxuICAgICAgfSksIChwMCwgcDEpID0+IF8uaXNFcXVhbChwMC5jeUpzb24oKSwgcDEuY3lKc29uKCkpKTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG59O1xyXG5cclxuY2xhc3MgUGFpbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgY3lTcnY6IG5ldyBDeXRvc2NhcGVTZXJ2aWNlKHsgc3R5bGU6IHN0eWxlc2hlZXQsIG9uTW91bnQ6IGJpbmRDeUV2ZW50cyB9KSxcclxuICAgICAgcGF0aHdheXM6IFtdLFxyXG4gICAgICBjdXJQYXRod2F5OiBuZXcgUGF0aHdheSgpLFxyXG4gICAgICBleHByZXNzaW9uVGFibGU6IG5ldyBFeHByZXNzaW9uVGFibGUoKSxcclxuICAgICAgYWN0aXZlTWVudTogJ3BhaW50TWVudScsXHJcbiAgICAgIHBhaW50TWVudUN0cmxzOiB7XHJcbiAgICAgICAgZXhwckNsYXNzOiAnJyxcclxuICAgICAgICBleHByRm5OYW1lOiAnbWVhbicsXHJcbiAgICAgICAgZXhwckZuOiBfLm1lYW5cclxuICAgICAgfSxcclxuICAgICAgYWN0aXZlVGFiOiAwLFxyXG4gICAgICBpbnZhbGlkRW5yaWNobWVudHM6IGZhbHNlLFxyXG4gICAgICBsb2FkaW5nOiB0cnVlXHJcbiAgICB9O1xyXG5cclxuICAgIGlmKCBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICl7XHJcbiAgICAgIHRoaXMuc3RhdGUuY3lTcnYuZ2V0UHJvbWlzZSgpLnRoZW4oY3kgPT4gd2luZG93LmN5ID0gY3kpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZFBhaW50RGVtb0RhdGEoKXtcclxuICAgIGxldCB7IGV4cHJlc3Npb25UYWJsZSwgcGFpbnRNZW51Q3RybHMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgcGF0aHdheXMgPSBkZW1vUGF0aHdheXMubWFwKCBqc29uID0+IHtcclxuICAgICAgbGV0IHAgPSBuZXcgUGF0aHdheSgpO1xyXG4gICAgICBwLmxvYWQoIGpzb24gKTtcclxuICAgICAgcmV0dXJuIHA7XHJcbiAgICB9KTtcclxuXHJcbiAgICBleHByZXNzaW9uVGFibGUubG9hZCggZGVtb0V4cHJlc3Npb25zICk7XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHBhaW50TWVudUN0cmxzOiBfLmFzc2lnbih7fSwgcGFpbnRNZW51Q3RybHMsIHsgZXhwckNsYXNzOiBleHByZXNzaW9uVGFibGUuY2xhc3Nlc1swXSB9KSxcclxuICAgICAgcGF0aHdheXNcclxuICAgIH0sICgpID0+IHRoaXMubG9hZFBhdGh3YXkocGF0aHdheXNbMF0pKTtcclxuICB9XHJcblxyXG4gIC8vIG9uTW91bnQgcHJvcCBwYXNzZWQgdG8gQ3l0b3NjYXBlTmV0d29ya1xyXG4gIC8vIGNhbGxlZCBhZnRlciBDeXRvc2NhcGVOZXR3b3JrIGhhcyBtb3VudGVkXHJcbiAgZ2V0RW5yaWNobWVudHNBbmRQYXRod2F5cygpe1xyXG4gICAgbGV0IHF1ZXJ5ID0gcXVlcnlTdHJpbmcucGFyc2UodGhpcy5wcm9wcy5sb2NhdGlvbi5zZWFyY2gpO1xyXG4gICAgbGV0IHNlYXJjaFBhcmFtID0gcXVlcnkucTtcclxuICAgIGxldCBlbnJpY2htZW50c1VyaSA9IHF1ZXJ5LnVyaTtcclxuICAgIGxldCB7IGV4cHJlc3Npb25UYWJsZSwgcGFpbnRNZW51Q3RybHMgIH0gPSB0aGlzLnN0YXRlO1xyXG5cclxuICAgIC8vIGlmIHRoZSB1c2VyIGp1c3QgY29tZXMgaW50byB0aGUgYXBwIHdpdGhvdXQgZW5yaWNobWVudHMsIGxvYWQgdGhlIGRlbW8gZGF0YVxyXG4gICAgaWYoIGVucmljaG1lbnRzVXJpID09IG51bGwgKXtcclxuICAgICAgdGhpcy5sb2FkUGFpbnREZW1vRGF0YSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGdldEVucmljaG1lbnRzID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gZmV0Y2goZW5yaWNobWVudHNVcmkpLnRoZW4oIHJlcyA9PiByZXMuanNvbigpICkudGhlbigganNvbiA9PiAge1xyXG4gICAgICAgIGV4cHJlc3Npb25UYWJsZS5sb2FkKCBqc29uICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgZmluZEJlc3RQYXRod2F5ID0gcGF0aHdheXMgPT4ge1xyXG4gICAgICAvLyAxLiBjaGVjayBpZiB0aGVyZSBpcyBhIHBhdGh3YXkgd2l0aCBhIG5hbWUgdGhhdCBtYXRjaGVzIHRoZSBzZWFyY2ggcGFyYW1cclxuICAgICAgLy8gMi4gc29ydCB0aGUgcGF0aGF3eXMgYnkgdGhlaXIgZ2VuZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0aGUgZXhwcmVzc2lvbiB0YWJsZVxyXG5cclxuICAgICAgLy8gc2VlIGlmIHRoZXJlIGlzIGEgcGF0aHdheSB0aGF0IGhhcyB0aGUgc2FtZSB0aXRsZSBhcyB0aGUgc2VhcmNoIHBhcmFtXHJcbiAgICAgIGxldCBiZXN0UmVzdWx0ID0gcGF0aHdheXMuZmluZCggcGF0aHdheSA9PiBwYXRod2F5Lm5hbWUoKSA9PT0gc2VhcmNoUGFyYW0gKTtcclxuICAgICAgaWYoIGJlc3RSZXN1bHQgPT0gbnVsbCApe1xyXG4gICAgICAgIGJlc3RSZXN1bHQgPSBwYXRod2F5c1swXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoIGJlc3RSZXN1bHQgPT0gbnVsbCApe1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYmVzdFJlc3VsdDtcclxuICAgIH07XHJcblxyXG4gICAgZ2V0RW5yaWNobWVudHMoKS50aGVuKCAoKSA9PiBnZXRQYXRod2F5c1JlbGV2YW50VG8oIHNlYXJjaFBhcmFtLCBleHByZXNzaW9uVGFibGUgKSApLnRoZW4oIHBhdGh3YXlzID0+IHtcclxuXHJcbiAgICAgIGlmKCBleHByZXNzaW9uVGFibGUuY2xhc3NlcyA9PSBudWxsICl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICBpbnZhbGlkRW5yaWNobWVudHM6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHBhdGh3YXlzLnNvcnQoKHAwLCBwMSkgPT4gZ2VuZUludGVyc2VjdGlvbihwMSwgZXhwcmVzc2lvblRhYmxlKS5sZW5ndGggLSBnZW5lSW50ZXJzZWN0aW9uKHAwLCBleHByZXNzaW9uVGFibGUpLmxlbmd0aCk7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIHBhaW50TWVudUN0cmxzOiBfLmFzc2lnbih7fSwgcGFpbnRNZW51Q3RybHMsIHsgZXhwckNsYXNzOiBleHByZXNzaW9uVGFibGUuY2xhc3Nlc1swXSB9KSxcclxuICAgICAgICBwYXRod2F5czogcGF0aHdheXMsXHJcbiAgICAgIH0sICgpID0+IHRoaXMubG9hZFBhdGh3YXkoZmluZEJlc3RQYXRod2F5KHBhdGh3YXlzKSkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkUGF0aHdheShwYXRod2F5KXtcclxuICAgIGxldCB7IGN5U3J2LCBwYWludE1lbnVDdHJscywgZXhwcmVzc2lvblRhYmxlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IHsgZXhwckNsYXNzLCBleHByRm4gfSA9IHBhaW50TWVudUN0cmxzO1xyXG4gICAgbGV0IGN5ID0gY3lTcnYuZ2V0KCk7XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGN1clBhdGh3YXk6IHBhdGh3YXksXHJcbiAgICAgIGxvYWRpbmc6IHRydWVcclxuICAgIH0sICgpID0+IHtcclxuICAgICAgZXhwcmVzc2lvblRhYmxlLmxvYWRQYXRod2F5KCBwYXRod2F5LmN5SnNvbigpICk7XHJcbiAgICAgIGN5LnJlbW92ZSgnKicpO1xyXG4gICAgICBjeS5hZGQoIHBhdGh3YXkuY3lKc29uKCkgKTtcclxuXHJcbiAgICAgIGN5LmxheW91dChfLmFzc2lnbih7fSwgUEFUSFdBWVNfTEFZT1VUX09QVFMsIHtcclxuICAgICAgICBzdG9wOiAoKSA9PiB7XHJcbiAgICAgICAgICBhcHBseUV4cHJlc3Npb25EYXRhKGN5LCBleHByZXNzaW9uVGFibGUsIGV4cHJDbGFzcywgZXhwckZuKTtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2xvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSkpLnJ1bigpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VNZW51KG1lbnUpe1xyXG4gICAgbGV0IHJlc2l6ZUN5SW1tZWRpYXRlID0gKCkgPT4gdGhpcy5zdGF0ZS5jeVNydi5nZXQoKS5yZXNpemUoKTtcclxuICAgIGxldCByZXNpemVDeURlYm91bmNlZCA9IF8uZGVib3VuY2UoIHJlc2l6ZUN5SW1tZWRpYXRlLCA1MDAgKTtcclxuICAgIGlmKCBtZW51ID09PSB0aGlzLnN0YXRlLmFjdGl2ZU1lbnUgKXtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGFjdGl2ZU1lbnU6ICdjbG9zZU1lbnUnIH0sIHJlc2l6ZUN5RGVib3VuY2VkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBhY3RpdmVNZW51OiBtZW51IH0sIHJlc2l6ZUN5RGVib3VuY2VkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVBhaW50Q3RybENoYW5nZShuZXdWYWwpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBwYWludE1lbnVDdHJsczogXy5hc3NpZ24oe30sIHRoaXMuc3RhdGUucGFpbnRNZW51Q3RybHMsIG5ld1ZhbClcclxuICAgIH0sICgpID0+IHtcclxuICAgICAgbGV0IHsgY3lTcnYsIGV4cHJlc3Npb25UYWJsZSwgcGFpbnRNZW51Q3RybHMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgIGxldCB7IGV4cHJDbGFzcywgZXhwckZuIH0gPSBwYWludE1lbnVDdHJscztcclxuICAgICAgYXBwbHlFeHByZXNzaW9uRGF0YShjeVNydi5nZXQoKSwgZXhwcmVzc2lvblRhYmxlLCBleHByQ2xhc3MsIGV4cHJGbik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVBhaW50TWVudVRhYkNoYW5nZShuZXdUYWIpe1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGFjdGl2ZVRhYjogbmV3VGFiXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGxldCB7IGludmFsaWRFbnJpY2htZW50cywgbG9hZGluZywgZXhwcmVzc2lvblRhYmxlLCBjdXJQYXRod2F5LCBwYXRod2F5cywgY3lTcnYsIGFjdGl2ZU1lbnUsIHBhaW50TWVudUN0cmxzLCBhY3RpdmVUYWIgfSA9IHRoaXMuc3RhdGU7XHJcblxyXG4gICAgaWYoIGludmFsaWRFbnJpY2htZW50cyApe1xyXG4gICAgICByZXR1cm4gaCgnZGl2JywgJ1RoZSBwYWludGVyIGFwcCByZXF1aXJlcyBlbnJpY2htZW50cyB0aGF0IGhhdmUgYW4gYXNzb2NpYXRlZCBjbGFzcyBmaWxlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGFwcEJhciA9IGgoJ2Rpdi5hcHAtYmFyJywgW1xyXG4gICAgICBoKCdkaXYuYXBwLWJhci1icmFuZGluZycsIFtcclxuICAgICAgICBoKFBjTG9nb0xpbmspLFxyXG4gICAgICAgIGgoJ2Rpdi5hcHAtYmFyLXRpdGxlJywgW1xyXG4gICAgICAgICAgaCgnc3BhbicsIGN1clBhdGh3YXkubmFtZSgpICsgJyB8ICcpLFxyXG4gICAgICAgICAgaCgnYS5wbGFpbi1saW5rJywgeyBocmVmOiBjdXJQYXRod2F5LmRhdGFzb3VyY2VVcmwoKSwgdGFyZ2V0OidfYmxhbmsnIH0sICcgJyArIGN1clBhdGh3YXkuZGF0YXNvdXJjZSgpKSxcclxuICAgICAgICBdKSxcclxuICAgICAgXSksXHJcbiAgICAgIGgoUGF0aHdheXNUb29sYmFyLCB7IGN5U3J2LCBhY3RpdmVNZW51LCBjb250cm9sbGVyOiB0aGlzIH0pXHJcbiAgICBdKTtcclxuXHJcbiAgICBsZXQgc2lkZWJhciA9IGgoU2lkZWJhciwgeyAgY29udHJvbGxlcjogdGhpcywgYWN0aXZlTWVudSB9LCBbXHJcbiAgICAgIGgoSW5mb01lbnUsIHsga2V5OiAnaW5mb01lbnUnLCBpbmZvTGlzdDogY3VyUGF0aHdheS5jb21tZW50cygpIH0gKSxcclxuICAgICAgaChGaWxlRG93bmxvYWRNZW51LCB7XHJcbiAgICAgICAga2V5OiAnZG93bmxvYWRNZW51JyxcclxuICAgICAgICBjeVNydixcclxuICAgICAgICBmaWxlTmFtZTogY3VyUGF0aHdheS5uYW1lKCksXHJcbiAgICAgICAgdXJpOiBjdXJQYXRod2F5LnVyaSgpXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKFBhaW50TWVudSwge1xyXG4gICAgICAgIGtleTogJ3BhaW50TWVudScsXHJcbiAgICAgICAgc2VsZWN0ZWRJbmRleDogYWN0aXZlVGFiLFxyXG4gICAgICAgIGNvbnRyb2xsZXI6IHRoaXMsXHJcbiAgICAgICAgY3lTcnYsXHJcbiAgICAgICAgY3VyUGF0aHdheSxcclxuICAgICAgICBwYWludE1lbnVDdHJscyxcclxuICAgICAgICBwYXRod2F5cyxcclxuICAgICAgICBleHByZXNzaW9uVGFibGVcclxuICAgICAgfSlcclxuICAgIF0pO1xyXG5cclxuICAgIGxldCBjb250ZW50ID0gW1xyXG4gICAgICBoKExvYWRlciwgeyBsb2FkZWQ6ICFsb2FkaW5nLCBvcHRpb25zOiB7IGxlZnQ6ICc1MCUnLCBjb2xvcjogJyMxNmEwODUnIH19LCBbIGFwcEJhciwgc2lkZWJhciBdICksXHJcbiAgICAgIGgoQ3l0b3NjYXBlTmV0d29yaywge1xyXG4gICAgICAgIGN5U3J2LFxyXG4gICAgICAgIG9uTW91bnQ6ICgpID0+IHRoaXMuZ2V0RW5yaWNobWVudHNBbmRQYXRod2F5cygpLFxyXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyh7XHJcbiAgICAgICAgJ25ldHdvcmstbG9hZGluZyc6IGxvYWRpbmcsXHJcbiAgICAgICAgJ25ldHdvcmstc2lkZWJhci1vcGVuJzogYWN0aXZlTWVudSAhPT0gJ2Nsb3NlTWVudSdcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgXTtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LnBhaW50JywgY29udGVudCk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhaW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvaW5kZXguanMiLCJjb25zdCB7IHByb21pc2VUaW1lb3V0LCBUaW1lb3V0RXJyb3IgfSA9IHJlcXVpcmUoJy4vcHJvbWlzZScpO1xyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcblxyXG5jb25zdCB7IENMSUVOVF9GRVRDSF9USU1FT1VULCBTRVJWRVJfRkVUQ0hfVElNRU9VVCB9ID0gcmVxdWlyZSgnLi4vY29uZmlnJyk7XHJcblxyXG5jb25zdCBpc0NsaWVudCA9ICgpID0+IHR5cGVvZiB3aW5kb3cgIT09IHR5cGVvZiB1bmRlZmluZWQ7XHJcbmNvbnN0IGlzU2VydmVyID0gKCkgPT4gIWlzQ2xpZW50KCk7XHJcblxyXG5jb25zdCBmYWlsT25CYWRTdGF0dXMgPSByZXMgPT4ge1xyXG4gIGlmKCFyZXMub2spe1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBGZXRjaCBmYWlsZWQgZHVlIHRvIGJhZCBzdGF0dXMgY29kZSA6ICR7cmVzLnN0YXR1c1RleHR9IDogJHtyZXMudXJsfWApO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IHNhZmVGZXRjaCA9ICAoIHVybCwgb3B0aW9ucyApID0+IHtcclxuICBjb25zdCBGRVRDSF9USU1FT1VUID0gaXNTZXJ2ZXIoKSA/IFNFUlZFUl9GRVRDSF9USU1FT1VUIDogQ0xJRU5UX0ZFVENIX1RJTUVPVVQ7XHJcbiAgY29uc3QgdGltZW91dCA9IF8uZ2V0KCBvcHRpb25zLCBbJ3RpbWVvdXQnXSwgRkVUQ0hfVElNRU9VVCApO1xyXG4gIGNvbnN0IG9wdHMgPSBfLm9taXQoIG9wdGlvbnMsIFsndGltZW91dCddKTtcclxuICByZXR1cm4gcHJvbWlzZVRpbWVvdXQoICgpID0+IGZldGNoKCB1cmwsIG9wdHMgKS50aGVuKCBmYWlsT25CYWRTdGF0dXMgKSwgdGltZW91dCApO1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IHNhZmVGZXRjaCwgVGltZW91dEVycm9yIH07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlsL2ZldGNoLmpzIiwiY29uc3QgUHJvbWlzZSA9IHJlcXVpcmUoJ2JsdWViaXJkJyk7XHJcblxyXG5sZXQgcHJvbWlzZVRpbWVvdXQgPSAoIGZuLCB0aW1lb3V0ICkgPT4ge1xyXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKCBmbiApLnRpbWVvdXQoIHRpbWVvdXQgKTtcclxufTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICBwcm9taXNlVGltZW91dCxcclxuICBUaW1lb3V0RXJyb3I6IFByb21pc2UuVGltZW91dEVycm9yXHJcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3V0aWwvcHJvbWlzZS5qcyIsImNvbnN0IHFzID0gcmVxdWlyZSgncXVlcnktc3RyaW5nJyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuXHJcbmxldCBQQ19VUkw7XHJcbmNvbnN0IHsgZmV0Y2ggfSA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWwnKTtcclxuY29uc3QgeyBOQ0JJX0VVVElMU19CQVNFX1VSTCB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uZmlnJyk7XHJcblxyXG5jb25zdCBkZWZhdWx0RmV0Y2hPcHRzID0ge1xyXG4gIGhlYWRlcnM6IHtcclxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgU2VydmVyQVBJID0ge1xyXG4gIGdldFBDVVJMKCl7XHJcbiAgICBpZiggUENfVVJMICl7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoUENfVVJMKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmZXRjaCgnL2FwaS9wYy9iYXNlVVJMJylcclxuICAgICAgICAudGhlbiggcmVzID0+IHJlcy50ZXh0KCkgKVxyXG4gICAgICAgIC50aGVuKCBiYXNlVXJsID0+IHtcclxuICAgICAgICAgIFBDX1VSTCA9IGJhc2VVcmw7XHJcbiAgICAgICAgICByZXR1cm4gUENfVVJMO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8vIGEgZ2VuZXJpYyBtZXRob2QgdGhhdCBnZXRzIHBhdGh3YXkgc2JnbiBqc29uIGZyb20gdmFyaW91cyBzb3VyY2VzXHJcbiAgLy8gZS5nLiBwYXRod2F5Y29tbW9ucywgZmFjdG9pZCwgb3IgaHVtYW4gY3JlYXRlZCBsYXlvdXRzXHJcbiAgZ2V0QVBJUmVzb3VyY2Uob3B0cyl7XHJcbiAgICBsZXQgeyB0eXBlLCB1cmksIGlkIH0gPSBvcHRzO1xyXG4gICAgaWYoIHR5cGUgPT09ICdwYXRod2F5cycgKXtcclxuICAgICAgaWYoIHVyaSAhPT0gbnVsbCApe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhdGh3YXkoIHVyaSApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYXJhbWV0ZXIuICBQYXRod2F5cyBhcGkgY2FsbHMgcmVxdWlyZSBhIHVyaSBwYXJhbWV0ZXInKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoIHR5cGUgPT09ICdiaW9mYWN0b2lkJyApe1xyXG4gICAgICBpZiggaWQgIT09IG51bGwgKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXREb2NCeUlkKG9wdHMuaWQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYXJhbXRlci4gRmFjdG9pZHMgYXBpIGNhbGxzIHJlcXVpcmUgYSBpZCBwYXJhbWV0ZXInKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIGdldFBhdGh3YXkodXJpKSB7XHJcbiAgICBsZXQgdXJsID0gYC9hcGkvcGF0aHdheXM/JHsgcXMuc3RyaW5naWZ5KHsgdXJpIH0pIH1gO1xyXG4gICAgY29uc3QgZmV0Y2hPcHRzID0gXy5hc3NpZ24oIHt9LCBkZWZhdWx0RmV0Y2hPcHRzICk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBmZXRjaCh1cmwsIGZldGNoT3B0cylcclxuICAgICAgICAudGhlbihyZXMgPT4gIHJlcy5qc29uKCkpXHJcbiAgICAgICAgLnRoZW4oIHBhdGh3YXlKc29uID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGdyYXBoOiBwYXRod2F5SnNvblxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuICB9LFxyXG5cclxuICBnZXRBbGxEb2NzKCkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZmV0Y2goJy9hcGkvYmlvZmFjdG9pZCcsIGRlZmF1bHRGZXRjaE9wdHMpXHJcbiAgICAgICAgLnRoZW4oIHJlcyA9PiByZXMuanNvbigpIClcclxuICAgICk7XHJcbiAgfSxcclxuXHJcbiAgZ2V0RG9jQnlJZChpZCkge1xyXG4gICAgbGV0IHVybCA9IGAvYXBpL2Jpb2ZhY3RvaWQvJHsgaWQgfWA7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBmZXRjaCh1cmwsIGRlZmF1bHRGZXRjaE9wdHMpXHJcbiAgICAgICAgLnRoZW4ocmVzID0+ICByZXMuanNvbigpKVxyXG4gICAgICAgIC50aGVuKCBwYXRod2F5SnNvbiA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBncmFwaDogcGF0aHdheUpzb25cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgfSxcclxuXHJcbiAgZ2V0SW50ZXJhY3Rpb25HcmFwaChzb3VyY2VzKSB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBmZXRjaChgL2FwaS9pbnRlcmFjdGlvbnM/JHtxcy5zdHJpbmdpZnkoc291cmNlcyl9YCwgZGVmYXVsdEZldGNoT3B0cylcclxuICAgICAgIC50aGVuKCByZXMgPT4gcmVzLmpzb24oKSlcclxuICAgICk7XHJcbiAgfSxcclxuXHJcbiAgZ2V0UHVibWVkUHVibGljYXRpb25zKCBwdWJtZWRJZHMgKXtcclxuICAgIGNvbnN0IG9wdHMgPSB7XHJcbiAgICAgIGRiOiAncHVibWVkJyxcclxuICAgICAgcmV0bW9kZTogJ2pzb24nLFxyXG4gICAgICBpZDogcHVibWVkSWRzLnRvU3RyaW5nKClcclxuICAgIH07XHJcbiAgICBjb25zdCB1cmwgPSBgJHtOQ0JJX0VVVElMU19CQVNFX1VSTH0vZXN1bW1hcnkuZmNnaT8ke3FzLnN0cmluZ2lmeShvcHRzKX1gO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZmV0Y2godXJsKVxyXG4gICAgICAgIC50aGVuKHJlcyA9PiByZXMuanNvbigpKVxyXG4gICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICBsZXQgeyByZXN1bHQgfSA9IHJlcztcclxuICAgICAgICAgIGlmKCByZXN1bHQgPT0gbnVsbCApeyByZXR1cm4gW107IH1cclxuICAgICAgICAgIGxldCB7IHVpZHMgfSA9IHJlc3VsdDtcclxuXHJcbiAgICAgICAgICByZXR1cm4gdWlkcy5tYXAoIHVpZCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHJlc3VsdFt1aWRdO1xyXG4gICAgICAgICAgICBsZXQgeyB0aXRsZSwgYXV0aG9ycywgc29ydGZpcnN0YXV0aG9yLCBwdWJkYXRlLCBzb3VyY2UsIGFydGljbGVpZHMgfSA9IHJlY29yZDtcclxuICAgICAgICAgICAgY29uc3QgZG9pID0gXy5maW5kKCBhcnRpY2xlaWRzLCB7IGlkdHlwZTogJ2RvaScgfSApO1xyXG4gICAgICAgICAgICBjb25zdCBwdWJtZWQgPSBfLmZpbmQoIGFydGljbGVpZHMsIHsgaWR0eXBlOiAncHVibWVkJyB9ICk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBtYyA9IF8uZmluZCggYXJ0aWNsZWlkcywgeyBpZHR5cGU6ICdwbWMnIH0gKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgaWQ6IHVpZCxcclxuICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICBhdXRob3JzLFxyXG4gICAgICAgICAgICAgIGZpcnN0QXV0aG9yOiBzb3J0Zmlyc3RhdXRob3IsXHJcbiAgICAgICAgICAgICAgZGF0ZTogcHViZGF0ZSxcclxuICAgICAgICAgICAgICBzb3VyY2UsXHJcbiAgICAgICAgICAgICAgZG9pOiBfLmdldCggZG9pLCAndmFsdWUnLCBudWxsKSxcclxuICAgICAgICAgICAgICBwdWJtZWQ6IF8uZ2V0KCBwdWJtZWQsICd2YWx1ZScsIG51bGwpLFxyXG4gICAgICAgICAgICAgIHBtYzogcG1jID8gcG1jLnZhbHVlIDogbnVsbFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSApO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG4gIH0sXHJcblxyXG4gIGdldEdvSW5mb3JtYXRpb24oZ29JRCkge1xyXG4gICAgcmV0dXJuIGZldGNoKGBodHRwczovL3d3dy5lYmkuYWMudWsvUXVpY2tHTy9zZXJ2aWNlcy9vbnRvbG9neS9nby9zZWFyY2g/cXVlcnk9R08lM0Eke2dvSUR9JmxpbWl0PTEmcGFnZT0xYClcclxuICAgIC50aGVuKCByZXMgPT4gcmVzLmpzb24oKSApO1xyXG4gIH0sXHJcblxyXG4gIGdldFJlYWN0b21lSW5mb3JtYXRpb24ocmVhY3RvbWVJRCkge1xyXG4gICAgcmV0dXJuIGZldGNoKGBodHRwczovL3JlYWN0b21lLm9yZy9Db250ZW50U2VydmljZS9kYXRhL3F1ZXJ5LyR7cmVhY3RvbWVJRH1gKVxyXG4gICAgLnRoZW4oIHJlcyA9PiByZXMuanNvbigpICk7XHJcbiAgfSxcclxuXHJcbiAgZG93bmxvYWRGaWxlRnJvbVBhdGh3YXlDb21tb25zKCB1cmksIGZvcm1hdCApe1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0UENVUkwoKVxyXG4gICAgICAudGhlbiggdXJsID0+IHtcclxuICAgICAgICByZXR1cm4gZmV0Y2godXJsICsgJ3BjMi9nZXQ/JyArIHFzLnN0cmluZ2lmeSh7IHVyaSwgZm9ybWF0fSksIGRlZmF1bHRGZXRjaE9wdHMpO1xyXG4gICAgICB9KTtcclxuICB9LFxyXG5cclxuICBzZWFyY2gocXVlcnkpe1xyXG4gICAgY29uc3QgcXVlcnlDbG9uZT1fLmFzc2lnbih7fSxxdWVyeSk7XHJcbiAgICBpZiAoL14oKHVuaXByb3R8aGduY3xoZ25jLnN5bWJvbCk6XFx3K3xuY2JpOlswLTldKykkL2kudGVzdChxdWVyeUNsb25lLnEpKSB7XHJcbiAgICAgIHF1ZXJ5Q2xvbmUucT1xdWVyeUNsb25lLnEucmVwbGFjZSgvXih1bmlwcm90fG5jYml8aGduY3xoZ25jLnN5bWJvbCk6L2ksXCJcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmV0Y2goYC9hcGkvc2VhcmNoYCwge1xyXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICB9LFxyXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShxdWVyeUNsb25lKVxyXG4gICAgfSkudGhlbihyZXMgPT4gcmVzLmpzb24oKSk7XHJcbiAgfSxcclxuXHJcbiAgc2VhcmNoR2VuZXMoIHF1ZXJ5ICl7XHJcbiAgICByZXR1cm4gZmV0Y2goJy9hcGkvc2VhcmNoL2dlbmVzJywge1xyXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICB9LFxyXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSggeyBxdWVyeSB9IClcclxuICAgIH0pLnRoZW4oIHJlcyA9PiByZXMuanNvbigpICk7XHJcbiAgfSxcclxuXHJcbiAgZW5yaWNobWVudEFQSShxdWVyeSwgdHlwZSl7XHJcbiAgICByZXR1cm4gZmV0Y2goYC9hcGkvZW5yaWNobWVudC8ke3R5cGV9YCwge1xyXG4gICAgICBtZXRob2Q6J1BPU1QnLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHF1ZXJ5KVxyXG4gICAgfSlcclxuICAgIC50aGVuKHJlcyA9PiByZXMuanNvbigpKTtcclxuICB9XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFNlcnZlckFQSTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L3NlcnZpY2VzL3NlcnZlci1hcGkvaW5kZXguanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBzYXZlQXMgPSByZXF1aXJlKCdmaWxlLXNhdmVyJykuc2F2ZUFzO1xyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IExvYWRlciA9IHJlcXVpcmUoJ3JlYWN0LWxvYWRlcicpO1xyXG5cclxuY29uc3QgeyBTZXJ2ZXJBUEkgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL3NlcnZpY2VzJyk7XHJcblxyXG5jb25zdCBwY0Rvd25sb2FkVHlwZXMgPSByZXF1aXJlKCcuLi8uLi8uLi9jb21tb24vcGMtZG93bmxvYWQtdHlwZXMnKTtcclxuXHJcblxyXG5jbGFzcyBGaWxlRG93bmxvYWRNZW51IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgZG93bmxvYWRUeXBlczogcGNEb3dubG9hZFR5cGVzLFxyXG4gICAgICBsb2FkaW5nOiBmYWxzZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkRnJvbURpc3BsYXlOYW1lKGRpc3BsYXlOYW1lKSB7XHJcbiAgICBsZXQgeyBjeVNydiwgZmlsZU5hbWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgeyBkb3dubG9hZFR5cGVzLCB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCBvcHRpb24gPSBfLmZpbmQoZG93bmxvYWRUeXBlcywgWydkaXNwbGF5TmFtZScsIGRpc3BsYXlOYW1lXSk7XHJcbiAgICBsZXQgeyBwYzJOYW1lLCBleHQsIHR5cGUgfSA9IG9wdGlvbjtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gJ3BuZycpIHtcclxuICAgICAgLy8gVGhlIHNldFRpbWVvdXQgdHJpZ2dlcnMgYSByZXJlbmRlciBzbyB0aGF0IHRoZSBsb2FkZXIgYXBwZWFycyBvbiBzY3JlZW5cclxuICAgICAgdGhpcy5zZXRTdGF0ZSggeyBsb2FkaW5nOiB0cnVlIH0gLCAoKSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBzYXZlQXMoY3lTcnYuZ2V0KCkucG5nKHtcclxuICAgICAgICAgICAgb3V0cHV0OiAnYmxvYicsXHJcbiAgICAgICAgICAgIHNjYWxlOiAyLFxyXG4gICAgICAgICAgICBiZzogJ3doaXRlJyxcclxuICAgICAgICAgICAgZnVsbDogdHJ1ZVxyXG4gICAgICAgICAgfSksIGAke2ZpbGVOYW1lfS4ke2V4dH1gKTtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICB9LCAxKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRvd25sb2FkRmlsZUZyb21QQyhwYzJOYW1lLCBleHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRGaWxlRnJvbVBDKGZvcm1hdCwgZmlsZUV4dCkge1xyXG4gICAgY29uc3QgRklMRU5BTUVfQ1VUT0ZGID0gMjA7XHJcbiAgICBsZXQgeyBmaWxlTmFtZSwgdXJpIH0gID0gIHRoaXMucHJvcHM7XHJcbiAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnN1YnN0cigwLCBmaWxlTmFtZS5sZW5ndGggPCBGSUxFTkFNRV9DVVRPRkYgPyBmaWxlTmFtZS5sZW5ndGggOiBGSUxFTkFNRV9DVVRPRkYpLnJlcGxhY2UoLyAvZywgJ18nKTtcclxuXHJcbiAgICBsZXQgZG93bmxvYWRGZXRjaCA9IFNlcnZlckFQSS5kb3dubG9hZEZpbGVGcm9tUGF0aHdheUNvbW1vbnModXJpLCBmb3JtYXQpLnRoZW4ocmVzID0+IHJlcy50ZXh0KCkpO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7bG9hZGluZzogdHJ1ZX0sICgpID0+IHtcclxuICAgICAgZG93bmxvYWRGZXRjaC50aGVuKGNvbnRlbnQgPT4ge1xyXG4gICAgICAgIGNvbnRlbnQgPSB0eXBlb2YgY29udGVudCA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShjb250ZW50KSA6IGNvbnRlbnQ7XHJcbiAgICAgICAgbGV0IGZpbGVDb250ZW50ID0gbmV3IEZpbGUoW2NvbnRlbnRdLCBgJHtmaWxlTmFtZX0uJHtmaWxlRXh0fWAsIHsgdHlwZTondGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04JyB9KTtcclxuXHJcbiAgICAgICAgc2F2ZUFzKGZpbGVDb250ZW50KTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2V9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGxldCBtZW51Q29udGVudHMgPSB0aGlzLnN0YXRlLmRvd25sb2FkVHlwZXMubWFwKCBkdCA9PiB7XHJcbiAgICAgIGxldCBkbE9wdGlvbiA9IGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24nLCB7IG9uQ2xpY2s6ICgpID0+IHRoaXMuZG93bmxvYWRGcm9tRGlzcGxheU5hbWUoIGR0LmRpc3BsYXlOYW1lICkgfSwgW1xyXG4gICAgICAgICAgaCgnZGl2LmRvd25sb2FkLW9wdGlvbi1oZWFkZXInLCBbXHJcbiAgICAgICAgICAgIGgoJ2gzJywgZHQuZGlzcGxheU5hbWUpLFxyXG4gICAgICAgICAgXSksXHJcbiAgICAgICAgICBoKCdkaXYuZG93bmxvYWQtb3B0aW9uLWRlc2NyaXB0aW9uJywgZHQuZGVzY3JpcHRpb24pXHJcbiAgICAgIF0pO1xyXG5cclxuICAgICAgcmV0dXJuIGRsT3B0aW9uO1xyXG4gICAgfSApO1xyXG5cclxuICAgIHJldHVybiBoKCdkaXYuZmlsZS1kb3dubG9hZC1tZW51JywgW1xyXG4gICAgICBoKCdoMicsICdOZXR3b3JrIERvd25sb2FkcycpLFxyXG4gICAgICBoKCdkaXYuZmlsZS1kb3dubG9hZC1jb250ZW50JywgW1xyXG4gICAgICAgIC4uLm1lbnVDb250ZW50cyxcclxuICAgICAgICBoKExvYWRlciwgeyBsb2FkZWQ6ICF0aGlzLnN0YXRlLmxvYWRpbmcgfSlcclxuICAgICAgXSlcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGaWxlRG93bmxvYWRNZW51O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvbWVudXMvZmlsZS1kb3dubG9hZC1tZW51LmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuXHJcblxyXG5jbGFzcyBOZXR3b3JrSW5mb01lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHsgaW5mb0xpc3QgfSA9IHRoaXMucHJvcHM7XHJcblxyXG4gICAgY29uc3Qgbm9JbmZvTWVzc2FnZSA9IGgoJ3NwYW4nLCBbXHJcbiAgICAgIGgoJ3AnLCAnTm8gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB3YXMgZm91bmQgZm9yIHRoaXMgbmV0d29yayEnKSxcclxuICAgICAgaCgncCcsICdBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBuZXR3b3JrIGlzIG5vcm1hbGx5IGZvdW5kIGhlcmUsIGJ1dCB3ZSBjb3VsZG5cXCd0IGZpbmQgYW55IGZvciB0aGlzIG9uZS4nKVxyXG4gICAgXSk7XHJcblxyXG4gICAgY29uc3QgY29tbWVudHMgPSBpbmZvTGlzdC5tYXAoY29tbWVudCA9PiB7XHJcbiAgICAgIHJldHVybiBoKCdkaXYnLCBbaCgncCcsIGNvbW1lbnQucmVwbGFjZSgvPHA+L2csICcgJykpXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhZGRpdGlvbmFsSW5mbyA9IGNvbW1lbnRzLmxlbmd0aCA/XHJcbiAgICAgIFtoKCdkaXYnLCBbXHJcbiAgICAgICAgaCgnaDInLCAnQWRkaXRpb25hbCBJbmZvcm1hdGlvbicpXHJcbiAgICAgIF0uY29uY2F0KGNvbW1lbnRzKSldXHJcbiAgICAgIDogW25vSW5mb01lc3NhZ2VdO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIGgoJ2RpdicsIFtcclxuICAgICAgICBoKCdkaXYnLCBhZGRpdGlvbmFsSW5mbylcclxuICAgICAgXSlcclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IE5ldHdvcmtJbmZvTWVudTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L21lbnVzL25ldHdvcmstaW5mby1tZW51LmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCBjbGFzc05hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xyXG5jb25zdCB7IFRhYiwgVGFicywgVGFiTGlzdCwgVGFiUGFuZWwgfSA9IHJlcXVpcmUoJ3JlYWN0LXRhYnMnKTtcclxuY29uc3QgeyBnZW5lSW50ZXJzZWN0aW9uIH0gPSByZXF1aXJlKCcuLi9leHByZXNzaW9uLXRhYmxlJyk7XHJcbmNvbnN0IHsgc2VhcmNoTm9kZXMgfSA9IHJlcXVpcmUoJy4uL2N5Jyk7XHJcblxyXG5jbGFzcyBFeHByZXNzaW9uQ29sb3VyTGVnZW5kIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICByZW5kZXIoKXtcclxuICAgIGxldCB7IG1pbiwgbWF4IH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIHJldHVybiBoKCdkaXYucGFpbnQtbGVnZW5kJywgW1xyXG4gICAgICBoKCdwJywgYGxvdyAke21pbn1gKSxcclxuICAgICAgaCgncCcsIGBoaWdoICR7bWF4fWApXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIEV4cHJlc3Npb25UYWJsZVZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBzb3J0Qnk6ICdnZW5lTmFtZScsXHJcbiAgICAgIHNvcnRUeXBlOiAnYXNjJyxcclxuICAgICAgbm9kZVNlYXJjaFZhbHVlOiAnJ1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNvcnRDaGFuZ2UobmV3U29ydCl7XHJcbiAgICBsZXQgeyBzb3J0QnksIHNvcnRUeXBlIH0gPSB0aGlzLnN0YXRlO1xyXG5cclxuICAgIGlmKCBuZXdTb3J0ID09IHNvcnRCeSApe1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgc29ydFR5cGU6IHNvcnRUeXBlID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgc29ydEJ5OiBuZXdTb3J0IH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2VhcmNoQ2hhbmdlKG5ld1ZhbCl7XHJcbiAgICBsZXQgY3kgPSB0aGlzLnByb3BzLmN5U3J2LmdldCgpO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7bm9kZVNlYXJjaFZhbHVlOiBuZXdWYWx9LCAoKSA9PiBzZWFyY2hOb2RlcyhjeSwgbmV3VmFsKSk7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZUZvbGRDaGFuZ2VMaXN0KCl7XHJcbiAgICBsZXQgeyBleHByZXNzaW9uVGFibGUsIHBhaW50TWVudUN0cmxzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IHsgZXhwckNsYXNzLCBleHByRm4gfSA9IHBhaW50TWVudUN0cmxzO1xyXG4gICAgbGV0IHsgc29ydEJ5LCBzb3J0VHlwZSwgbm9kZVNlYXJjaFZhbHVlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IGZvbGRDaGFuZ2VFeHByZXNzaW9ucyA9IGV4cHJlc3Npb25UYWJsZS5leHByZXNzaW9ucygpLm1hcChlID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBnZW5lTmFtZTogZS5nZW5lTmFtZSxcclxuICAgICAgICBmb2xkQ2hhbmdlOiBlLmZvbGRDaGFuZ2UoIGV4cHJDbGFzcywgZXhwckZuLCAnTi9BJylcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBzb3J0ZWRGb2xkQ2hhbmdlcyA9IF8ub3JkZXJCeShmb2xkQ2hhbmdlRXhwcmVzc2lvbnMsIFtzb3J0QnldLCBbc29ydFR5cGVdKTtcclxuXHJcbiAgICBsZXQgZmlsdGVyZWRGb2xkQ2hhbmdlcyA9IHNvcnRlZEZvbGRDaGFuZ2VzLmZpbHRlcihmYyA9PiB7XHJcbiAgICAgIGxldCB1cHBlckZjID0gZmMuZ2VuZU5hbWUudG9VcHBlckNhc2UoKTtcclxuICAgICAgbGV0IHVwcGVyRmlsdGVyID0gbm9kZVNlYXJjaFZhbHVlLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgIHJldHVybiB1cHBlckZjLmluY2x1ZGVzKHVwcGVyRmlsdGVyKSB8fCB1cHBlckZpbHRlci5pbmNsdWRlcyh1cHBlckZjKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmaWx0ZXJlZEZvbGRDaGFuZ2VzO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBzb3J0QnksIHNvcnRUeXBlIH0gPSB0aGlzLnN0YXRlO1xyXG5cclxuICAgIGxldCBmb2xkQ2hhbmdlRXhwcmVzc2lvbnMgPSB0aGlzLmdlbmVyYXRlRm9sZENoYW5nZUxpc3QoKTtcclxuXHJcbiAgICByZXR1cm4gaCgndGFibGUuZXhwcmVzc2lvbi10YWJsZS12aWV3JywgW1xyXG4gICAgICBoKCd0aGVhZCcsIFtcclxuICAgICAgICBoKCd0ci5leHByZXNzaW9uLXRhYmxlLWhlYWRlcicsIFtcclxuICAgICAgICAgIGgoJ3RoLmV4cHJlc3Npb24tdGFibGUtaGVhZGVyLWNvbHVtbicsIHsgb25DbGljazogKCkgPT4gdGhpcy5oYW5kbGVTb3J0Q2hhbmdlKCdnZW5lTmFtZScpIH0sIFtcclxuICAgICAgICAgICAgJ0dlbmUnLFxyXG4gICAgICAgICAgICBzb3J0QnkgPT09ICdnZW5lTmFtZScgPyBoKCdpLm1hdGVyaWFsLWljb25zJywgc29ydFR5cGUgPT09ICdhc2MnID8gJ2tleWJvYXJkX2Fycm93X3VwJyA6ICdrZXlib2FyZF9hcnJvd19kb3duJykgOiBudWxsXHJcbiAgICAgICAgICBdKSxcclxuICAgICAgICAgIGgoJ3RoLmV4cHJlc3Npb24tdGFibGUtaGVhZGVyLWNvbHVtbicsIHsgb25DbGljazogKCkgPT4gdGhpcy5oYW5kbGVTb3J0Q2hhbmdlKCdmb2xkQ2hhbmdlJykgfSwgW1xyXG4gICAgICAgICAgICAnRXhwcmVzc2lvbiBSYXRpbyAoTG9nMiknLFxyXG4gICAgICAgICAgICBzb3J0QnkgPT09ICdmb2xkQ2hhbmdlJyA/IGgoJ2kubWF0ZXJpYWwtaWNvbnMnLCBzb3J0VHlwZSA9PT0gJ2FzYycgPyAna2V5Ym9hcmRfYXJyb3dfdXAnIDogJ2tleWJvYXJkX2Fycm93X2Rvd24nKSA6IG51bGxcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgXSlcclxuICAgICAgXSksXHJcbiAgICAgIGgoJ3Rib2R5LmV4cHJlc3Npb24tbGlzdCcsIFtcclxuICAgICAgICBoKCd0ci5leHByZXNzaW9uLWVudHJ5JywgW1xyXG4gICAgICAgICAgaCgndGQuZXhwcmVzc2lvbi1maWx0ZXInLCBbXHJcbiAgICAgICAgICAgIGgoJ2lucHV0JywgeyBwbGFjZWhvbGRlcjogJ0ZpbHRlciBieSBnZW5lJywgb25DaGFuZ2U6IGUgPT4gdGhpcy5oYW5kbGVTZWFyY2hDaGFuZ2UoZS50YXJnZXQudmFsdWUpIH0pLFxyXG4gICAgICAgICAgXSlcclxuICAgICAgICBdKSxcclxuICAgICAgICBmb2xkQ2hhbmdlRXhwcmVzc2lvbnMubWFwKCBlID0+IHtcclxuICAgICAgICAgIHJldHVybiBoKCd0ci5leHByZXNzaW9uLWVudHJ5JywgeyBrZXk6IGUuZ2VuZU5hbWUgfSwgW1xyXG4gICAgICAgICAgICBoKCd0ZC5leHByZXNzaW9uLWdlbmUnLCBlLmdlbmVOYW1lKSxcclxuICAgICAgICAgICAgaCgndGQuZXhwcmVzc2lvbi1mb2xkLWNoYW5nZScsIGUuZm9sZENoYW5nZSlcclxuICAgICAgICAgIF0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIF0pXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5jbGFzcyBQYXRod2F5UmVzdWx0c0xpc3RWaWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICByZW5kZXIoKXtcclxuICAgIGxldCB7IHBhdGh3YXlzLCBjdXJQYXRod2F5LCBleHByZXNzaW9uVGFibGUsIGNvbnRyb2xsZXIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgcGF0aHdheVJlc3VsdHMgPSBwYXRod2F5cy5tYXAocGF0aHdheSA9PiB7XHJcbiAgICAgIHJldHVybiBoKCdkaXYucGFpbnQtc2VhcmNoLXJlc3VsdCcsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHsncGFpbnQtc2VhcmNoLXJlc3VsdC1zZWxlY3RlZCc6IGN1clBhdGh3YXkudXJpKCkgPT09IHBhdGh3YXkudXJpKCl9KSwgb25DbGljazogKCkgPT4gY29udHJvbGxlci5sb2FkUGF0aHdheShwYXRod2F5KSB9LCBbXHJcbiAgICAgICAgaCgnaDMnLCBwYXRod2F5Lm5hbWUoKSksXHJcbiAgICAgICAgaCgncCcsIHBhdGh3YXkuZGF0YXNvdXJjZSgpKSxcclxuICAgICAgICBoKCdwJywgYEdlbmVzIG1hdGNoZWQ6ICR7Z2VuZUludGVyc2VjdGlvbihwYXRod2F5LCBleHByZXNzaW9uVGFibGUpLmxlbmd0aH1gKVxyXG4gICAgICBdKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBoKCdkaXYucGF0aHdheXMtbGlzdCcsIFtcclxuICAgICAgLi4ucGF0aHdheVJlc3VsdHNcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxuY2xhc3MgUGFpbnRNZW51IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgYW5hbHlzaXNGbnMoKXtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdtZWFuJzogXy5tZWFuLFxyXG4gICAgICAnbWF4JzogXy5tYXgsXHJcbiAgICAgICdtaW4nOiBfLm1pblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGxldCB7IGN5U3J2LCBjb250cm9sbGVyLCBleHByZXNzaW9uVGFibGUsIHBhaW50TWVudUN0cmxzLCBjdXJQYXRod2F5LCBwYXRod2F5cywgc2VsZWN0ZWRJbmRleCB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCB7IGV4cHJDbGFzcywgZXhwckZuLCBleHByRm5OYW1lIH0gPSBwYWludE1lbnVDdHJscztcclxuICAgIGxldCB7IG1pbiwgbWF4IH0gPSBleHByZXNzaW9uVGFibGUuY29tcHV0ZUZvbGRDaGFuZ2VSYW5nZShleHByQ2xhc3MsIGV4cHJGbik7XHJcblxyXG5cclxuICAgICAgbGV0IGZ1bmN0aW9uU2VsZWN0b3IgPSBoKCdkaXYnLCBbXHJcbiAgICAgICAgJ0NsYXNzOiAnLFxyXG4gICAgICAgIGgoJ3NlbGVjdC5wYWludC1zZWxlY3QnLCB7IHZhbHVlOiBleHByRm5OYW1lLFxyXG4gICAgICAgICAgb25DaGFuZ2U6IGUgPT4gY29udHJvbGxlci5oYW5kbGVQYWludEN0cmxDaGFuZ2Uoe1xyXG4gICAgICAgICAgICBleHByRm5OYW1lOiBlLnRhcmdldC52YWx1ZSxcclxuICAgICAgICAgICAgZXhwckZuOiB0aGlzLmFuYWx5c2lzRm5zKClbZS50YXJnZXQudmFsdWVdXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5hbmFseXNpc0ZucygpKS5tYXAoZW50cnkgPT4gaCgnb3B0aW9uJywge3ZhbHVlOiBlbnRyeVswXX0sIGVudHJ5WzBdKSlcclxuICAgICAgKVxyXG4gICAgICBdKTtcclxuXHJcbiAgICBsZXQgY2xhc3NTZWxlY3RvciA9IGgoJ2RpdicsIFtcclxuICAgICAgJ0NvbXBhcmU6ICcsXHJcbiAgICAgIGgoJ3NlbGVjdC5wYWludC1zZWxlY3QnLCB7XHJcbiAgICAgICAgdmFsdWU6IGV4cHJDbGFzcyxcclxuICAgICAgICBvbkNoYW5nZTogZSA9PiBjb250cm9sbGVyLmhhbmRsZVBhaW50Q3RybENoYW5nZSh7ZXhwckNsYXNzOiBlLnRhcmdldC52YWx1ZX0pXHJcbiAgICAgIH0sXHJcbiAgICAgIGV4cHJlc3Npb25UYWJsZS5jbGFzc2VzLm1hcChjbHMgPT4gaCgnb3B0aW9uJywgeyB2YWx1ZTogY2xzfSwgY2xzKSlcclxuICAgICAgKSxcclxuICAgICAgYCB2cyAke18uZGlmZmVyZW5jZShleHByZXNzaW9uVGFibGUuY2xhc3NlcywgW2V4cHJDbGFzc10pfWBcclxuICAgIF0pO1xyXG5cclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LnBhaW50LW1lbnUnLCBbXHJcbiAgICAgIGgoVGFicywgeyBzZWxlY3RlZEluZGV4LCBvblNlbGVjdDogaW5kZXggPT4gY29udHJvbGxlci5oYW5kbGVQYWludE1lbnVUYWJDaGFuZ2UoaW5kZXgpIH0sIFtcclxuICAgICAgICBoKFRhYkxpc3QsIFtcclxuICAgICAgICAgIGgoVGFiLCB7XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZTogJ3BhaW50LWRyYXdlci10YWInLFxyXG4gICAgICAgICAgICBzZWxlY3RlZENsYXNzTmFtZTogJ3BhaW50LWRyYXdlci10YWItc2VsZWN0ZWQnLFxyXG4gICAgICAgICAgfSwgJ0V4cHJlc3Npb24gRGF0YScpLFxyXG4gICAgICAgICAgaChUYWIsIHsgY2xhc3NOYW1lOiAncGFpbnQtZHJhd2VyLXRhYicsIHNlbGVjdGVkQ2xhc3NOYW1lOiAncGFpbnQtZHJhd2VyLXRhYi1zZWxlY3RlZCcgfSwgJ1NlbGVjdCBQYXRod2F5JylcclxuICAgICAgICBdKSxcclxuICAgICAgICBoKFRhYlBhbmVsLCBbXHJcbiAgICAgICAgICBoKEV4cHJlc3Npb25Db2xvdXJMZWdlbmQsIHsgbWluLCBtYXggfSksXHJcbiAgICAgICAgICBoKCdkaXYucGFpbnQtbWVudS1jb250cm9scycsIFtcclxuICAgICAgICAgICAgZnVuY3Rpb25TZWxlY3RvcixcclxuICAgICAgICAgICAgY2xhc3NTZWxlY3RvclxyXG4gICAgICAgICAgXSksXHJcbiAgICAgICAgICBoKEV4cHJlc3Npb25UYWJsZVZpZXcsIHsgY3lTcnYsIGV4cHJlc3Npb25UYWJsZSwgY29udHJvbGxlciwgcGFpbnRNZW51Q3RybHN9ICksXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgaChUYWJQYW5lbCwgW1xyXG4gICAgICAgICAgaChQYXRod2F5UmVzdWx0c0xpc3RWaWV3LCB7IGNvbnRyb2xsZXIsIGN1clBhdGh3YXksIGV4cHJlc3Npb25UYWJsZSwgcGF0aHdheXMgfSlcclxuICAgICAgICBdKVxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IFBhaW50TWVudTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhaW50L21lbnVzL3BhaW50LW1lbnUuanMiLCJjb25zdCBjeXRvc2NhcGUgPSByZXF1aXJlKCdjeXRvc2NhcGUnKTtcclxuY29uc3Qgc2JnblN0eWxlU2hlZXQgPSByZXF1aXJlKCdjeXRvc2NhcGUtc2Jnbi1zdHlsZXNoZWV0Jyk7XHJcbmNvbnN0IHsgTUFUQ0hFRF9TRUFSQ0hfQ0xBU1MgfSA9IHJlcXVpcmUoJy4vYWN0aW9ucycpO1xyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gc2JnblN0eWxlU2hlZXQoY3l0b3NjYXBlKVxyXG4uc2VsZWN0b3IoJ25vZGUnKVxyXG4uY3NzKHtcclxuICAnYmFja2dyb3VuZC1vcGFjaXR5JzogJzAuNCdcclxufSlcclxuLnNlbGVjdG9yKCdub2RlOmFjdGl2ZScpXHJcbi5jc3Moe1xyXG4gICdiYWNrZ3JvdW5kLW9wYWNpdHknOiAnMC43JyxcclxufSlcclxuLnNlbGVjdG9yKCdub2RlW2NsYXNzIT1cImNvbXBhcnRtZW50XCJdJylcclxuLmNzcyh7XHJcbiAgJ2ZvbnQtc2l6ZSc6IDIwLFxyXG4gICdjb2xvcic6ICdibGFjaycsXHJcbiAgJ3RleHQtb3V0bGluZS1jb2xvcic6ICd3aGl0ZScsXHJcbiAgJ3RleHQtb3V0bGluZS13aWR0aCc6IDIsXHJcbiAgJ3RleHQtb3V0bGluZS1vcGFjaXR5JzogMC41LFxyXG4gICd0ZXh0LXdyYXAnOiAnd3JhcCcsXHJcbiAgJ3RleHQtbWF4LXdpZHRoJzogMTc1LFxyXG4gICdsYWJlbCc6IG5vZGUgPT4ge1xyXG4gICAgY29uc3QgbGFiZWwgPSBub2RlLmRhdGEoJ2xhYmVsJylcclxuICAgICAgLnNwbGl0KCcoJykuam9pbignJykuc3BsaXQoJyknKS5qb2luKCcnKVxyXG4gICAgICAuc3BsaXQoJzonKS5qb2luKCcgJyk7XHJcbiAgICByZXR1cm4gbGFiZWw7XHJcbiAgfVxyXG59KVxyXG4uc2VsZWN0b3IoJ25vZGVbY2xhc3M9XCJjb21wbGV4XCJdJylcclxuLmNzcyh7XHJcbiAgJ3dpZHRoJzogNDUsXHJcbiAgJ2hlaWdodCc6IDQ1LFxyXG4gICdsYWJlbCc6IG5vZGUgPT4gbm9kZS5pc1BhcmVudCgpID8gJycgOiBub2RlLmRhdGEoJ2xhYmVsJylcclxufSlcclxuLnNlbGVjdG9yKCcuY29tcG91bmRjb2xsYXBzZS1jb2xsYXBzZWQtbm9kZScpXHJcbi5jc3Moe1xyXG4gICdmb250LXNpemUnOiAyMCxcclxuICAndGV4dC1tYXgtd2lkdGgnOiAxNzVcclxufSlcclxuLnNlbGVjdG9yKCdlZGdlJylcclxuLmNzcyh7XHJcbiAgJ29wYWNpdHknOiAwLjNcclxufSlcclxuLnNlbGVjdG9yKCdub2RlW2NsYXNzPVwiYW5kXCJdLG5vZGVbY2xhc3M9XCJvclwiXSxub2RlW2NsYXNzPVwibm90XCJdJylcclxuLmNzcyh7XHJcbiAgJ2xhYmVsJzpub2RlPT5ub2RlLmRhdGEoJ2NsYXNzJylcclxufSlcclxuLnNlbGVjdG9yKCcuaGlkZGVuJylcclxuLmNzcyh7XHJcbiAgJ2Rpc3BsYXknOidub25lJyxcclxufSlcclxuLnNlbGVjdG9yKGAuJHtNQVRDSEVEX1NFQVJDSF9DTEFTU31gKVxyXG4uY3NzKHtcclxuICAnYm9yZGVyLXdpZHRoJzogOCxcclxuICAnYm9yZGVyLWNvbG9yJzogJ3JlZCdcclxufSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9jeS9wYXRod2F5cy1zdHlsZXNoZWV0LmpzIiwiY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuXHJcbmNvbnN0IFBhdGh3YXlOb2RlTWV0YWRhdGFWaWV3ID0gcmVxdWlyZSgnLi4vcGF0aHdheS1ub2RlLW1ldGFkYXRhJyk7XHJcbmNvbnN0IHsgUEFUSFdBWVNfTEFZT1VUX09QVFMgfSA9IHJlcXVpcmUoJy4vbGF5b3V0Jyk7XHJcblxyXG5jb25zdCBDeXRvc2NhcGVUb29sdGlwID0gcmVxdWlyZSgnLi4vLi4vLi4vY29tbW9uL2N5L2N5dG9zY2FwZS10b29sdGlwJyk7XHJcblxyXG5jb25zdCBFWFBBTkRfQ09MTEFQU0VfT1BUUyA9IHtcclxuICBsYXlvdXRCeTogXy5hc3NpZ24oe30sIFBBVEhXQVlTX0xBWU9VVF9PUFRTLCB7IGZpdDogZmFsc2UgfSksXHJcbiAgZmlzaGV5ZTogdHJ1ZSxcclxuICBhbmltYXRlOiB0cnVlLFxyXG4gIHVuZG9hYmxlOiBmYWxzZSxcclxuICBjdWVFbmFibGVkOiBmYWxzZVxyXG59O1xyXG5cclxuY29uc3QgU0hPV19UT09MVElQU19FVkVOVCA9ICdzaG93dG9vbHRpcCc7XHJcblxyXG5sZXQgYmluZEN5RXZlbnRzID0gY3kgPT4ge1xyXG5cclxuICBsZXQgaGlkZVRvb2x0aXBzID0gKCkgPT4ge1xyXG4gICAgY3kuZWxlbWVudHMoKS5mb3JFYWNoKGVsZSA9PiB7XHJcbiAgICAgIGxldCB0b29sdGlwID0gZWxlLnNjcmF0Y2goJ190b29sdGlwJyk7XHJcbiAgICAgIGlmICh0b29sdGlwKSB7XHJcbiAgICAgICAgdG9vbHRpcC5oaWRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIGN5LmV4cGFuZENvbGxhcHNlKEVYUEFORF9DT0xMQVBTRV9PUFRTKTtcclxuICBjeS5vbihTSE9XX1RPT0xUSVBTX0VWRU5ULCAnbm9kZVtjbGFzcyAhPSBcImNvbXBhcnRtZW50XCJdJywgZnVuY3Rpb24gKGV2dCkge1xyXG4gICAgbGV0IG5vZGUgPSBldnQudGFyZ2V0O1xyXG5cclxuICAgIGxldCB0b29sdGlwID0gbmV3IEN5dG9zY2FwZVRvb2x0aXAoIG5vZGUucG9wcGVyUmVmKCksIHtcclxuICAgICAgaHRtbDogaChQYXRod2F5Tm9kZU1ldGFkYXRhVmlldywgeyBub2RlIH0pXHJcbiAgICB9ICk7XHJcbiAgICBub2RlLnNjcmF0Y2goJ190b29sdGlwJywgdG9vbHRpcCk7XHJcbiAgICB0b29sdGlwLnNob3coKTtcclxuICB9KTtcclxuXHJcbiAgY3kub24oJ3RhcCcsIGV2dCA9PiB7XHJcbiAgICBjb25zdCB0Z3QgPSBldnQudGFyZ2V0O1xyXG5cclxuICAgIC8vIGlmIHdlIGRpZG4ndCBjbGljayBhIG5vZGUsIGNsb3NlIGFsbCB0b29sdGlwc1xyXG4gICAgaWYoIGV2dC50YXJnZXQgPT09IGN5IHx8IGV2dC50YXJnZXQuaXNFZGdlKCkgKXtcclxuICAgICAgaGlkZVRvb2x0aXBzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyB3ZSBjbGlja2VkIGEgbm9kZSB0aGF0IGhhcyBhIHRvb2x0aXAgb3BlbiAtPiBjbG9zZSBpdFxyXG4gICAgaWYoIHRndC5zY3JhdGNoKCdfdG9vbHRpcC1vcGVuZWQnKSApe1xyXG4gICAgICBoaWRlVG9vbHRpcHMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIG9wZW4gdGhlIHRvb2x0aXAgZm9yIHRoZSBjbGlja2VkIG5vZGVcclxuICAgICAgaGlkZVRvb2x0aXBzKCk7XHJcbiAgICAgIHRndC5lbWl0KFNIT1dfVE9PTFRJUFNfRVZFTlQpO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICAvL0hpZGUgVG9vbHRpcHMgb24gdmFyaW91cyBncmFwaCBtb3ZlbWVudHNcclxuICBjeS5vbignZHJhZycsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuICBjeS5vbigncGFuJywgKCkgPT4gaGlkZVRvb2x0aXBzKCkpO1xyXG4gIGN5Lm9uKCd6b29tJywgKCkgPT4gaGlkZVRvb2x0aXBzKCkpO1xyXG4gIGN5Lm9uKCdsYXlvdXRzdGFydCcsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuXHJcbiAgbGV0IG5vZGVIb3Zlck1vdXNlT3ZlciA9IF8uZGVib3VuY2UoZXZ0ID0+IHtcclxuICAgIGxldCBub2RlID0gZXZ0LnRhcmdldDtcclxuICAgIGxldCBlbGVzVG9IaWdobGlnaHQgPSBjeS5jb2xsZWN0aW9uKCk7XHJcblxyXG4gICAgLy9DcmVhdGUgYSBsaXN0IG9mIHRoZSBob3ZlcmVkIG5vZGUgJiBpdHMgbmVpZ2hib3VyaG9vZFxyXG4gICAgbm9kZS5uZWlnaGJvcmhvb2QoKS5ub2RlcygpLnVuaW9uKG5vZGUpLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgIGVsZXNUb0hpZ2hsaWdodC5tZXJnZShub2RlLmFuY2VzdG9ycygpKTtcclxuICAgICAgZWxlc1RvSGlnaGxpZ2h0Lm1lcmdlKG5vZGUuZGVzY2VuZGFudHMoKSk7XHJcbiAgICAgIGVsZXNUb0hpZ2hsaWdodC5tZXJnZShub2RlKTtcclxuICAgIH0pO1xyXG4gICAgZWxlc1RvSGlnaGxpZ2h0Lm1lcmdlKG5vZGUubmVpZ2hib3Job29kKCkuZWRnZXMoKSk7XHJcblxyXG4gICAgLy9BZGQgaGlnaGxpZ2h0ZWQgY2xhc3MgdG8gbm9kZSAmIGl0cyBuZWlnaGJvdXJob29kLCB1bmhpZ2hsaWdodGVkIHRvIGV2ZXJ5dGhpbmcgZWxzZVxyXG4gICAgY3kuZWxlbWVudHMoKS5hZGRDbGFzcygndW5oaWdobGlnaHRlZCcpO1xyXG4gICAgZWxlc1RvSGlnaGxpZ2h0LmZvckVhY2goZWxlID0+IHtcclxuICAgICAgZWxlLnJlbW92ZUNsYXNzKCd1bmhpZ2hsaWdodGVkJyk7XHJcbiAgICAgIGVsZS5hZGRDbGFzcygnaGlnaGxpZ2h0ZWQnKTtcclxuICAgIH0pO1xyXG5cclxuICB9LCA3NTApO1xyXG5cclxuICAvL2NhbGwgc3R5bGUtYXBwbHlpbmcgYW5kIHN0eWxlLXJlbW92aW5nIGZ1bmN0aW9ucyBvbiAnbW91c2VvdmVyJyBhbmQgJ21vdXNlb3V0JyBmb3Igbm9uLWNvbXBhcnRtZW50IG5vZGVzXHJcbiAgY3kub24oJ21vdXNlb3ZlcicsICdub2RlW2NsYXNzIT1cImNvbXBhcnRtZW50XCJdJywgbm9kZUhvdmVyTW91c2VPdmVyKTtcclxuICBjeS5vbignbW91c2VvdXQnLCAnbm9kZVtjbGFzcyE9XCJjb21wYXJ0bWVudFwiXScsICgpID0+IHtcclxuICAgIG5vZGVIb3Zlck1vdXNlT3Zlci5jYW5jZWwoKTtcclxuICAgIGN5LmVsZW1lbnRzKCkucmVtb3ZlQ2xhc3MoJ2hpZ2hsaWdodGVkIHVuaGlnaGxpZ2h0ZWQnKTtcclxuICB9KTtcclxuXHJcbn07XHJcbm1vZHVsZS5leHBvcnRzID0gYmluZEN5RXZlbnRzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvY3kvZXZlbnRzLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5cclxuY29uc3QgeyBTZXJ2ZXJBUEkgfSA9IHJlcXVpcmUoJy4uLy4uL3NlcnZpY2VzJyk7XHJcbmNvbnN0IHsgTlNfQ0hFQkksIE5TX0VOU0VNQkwsIE5TX0hHTkMsIE5TX0hHTkNfU1lNQk9MLCBOU19OQ0JJX0dFTkUsIE5TX1BVQk1FRCwgTlNfUkVBQ1RPTUUsIE5TX1VOSVBST1QgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbmZpZycpO1xyXG5cclxuY29uc3QgREVGQVVMVF9OVU1fTkFNRVMgPSAzO1xyXG5jb25zdCBTVVBQT1JURURfQ09MTEVDVElPTlMgPSBuZXcgTWFwKFtcclxuICBbTlNfQ0hFQkksICdDaEVCSSddLFxyXG4gIFtOU19FTlNFTUJMLCAnRW5zZW1ibCddLFxyXG4gIFtOU19IR05DLCAnSEdOQyddLFxyXG4gIFtOU19IR05DX1NZTUJPTCwgJ0hHTkMnXSxcclxuICBbTlNfTkNCSV9HRU5FLCAnTkNCSSBHZW5lJ10sXHJcbiAgW05TX1JFQUNUT01FLCAnUmVhY3RvbWUnXSxcclxuICBbTlNfVU5JUFJPVCwgJ1VuaVByb3QnXVxyXG5dKTtcclxuXHJcbmNvbnN0IGdldFVyaUlkcyA9IHVyaXMgPT4gdXJpcy5tYXAoIHVyaSA9PiBfLmxhc3QoIHVyaS5zcGxpdCggJy8nICkgKSApO1xyXG5cclxuLy8gQSBjb21wb25lbnQgdGhhdCBkaXNwbGF5cyBhIHBhdGh3YXkgbm9kZSdzIG1ldGFkYXRhXHJcbi8vIHByb3BzOlxyXG4vLyAtIGN5dG9zY2FwZSBub2RlKVxyXG5jbGFzcyBQYXRod2F5Tm9kZU1ldGFkYXRhVmlldyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHB1YmxpY2F0aW9uczogW11cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb21wb25lbnREaWRNb3VudCgpe1xyXG4gICAgbGV0IHsgbm9kZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBtZXRhZGF0YSA9IG5vZGUuZGF0YSgnbWV0YWRhdGEnKTtcclxuICAgIGxldCBwdWJtZWRVcmlzID0gXy5nZXQobWV0YWRhdGEsIGB4cmVmTGlua3MuJHtOU19QVUJNRUR9YCwgbnVsbCk7XHJcblxyXG4gICAgaWYoIHB1Ym1lZFVyaXMgIT0gbnVsbCApe1xyXG4gICAgICBjb25zdCBwdWJtZWRJZHMgPSBnZXRVcmlJZHMoIHB1Ym1lZFVyaXMgKTtcclxuICAgICAgU2VydmVyQVBJLmdldFB1Ym1lZFB1YmxpY2F0aW9ucyhwdWJtZWRJZHMpLnRoZW4oIHB1YmxpY2F0aW9ucyA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHB1YmxpY2F0aW9ucyB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKXtcclxuICAgIGxldCB7IG5vZGUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgeyBwdWJsaWNhdGlvbnMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgbWQgPSBub2RlLmRhdGEoJ21ldGFkYXRhJyk7XHJcbiAgICBsZXQgeyBzeW5vbnltcywgdHlwZSwgc3RhbmRhcmROYW1lLCBkaXNwbGF5TmFtZSwgeHJlZkxpbmtzIH0gPSBtZDtcclxuICAgIGxldCBzZWFyY2hMaW5rUXVlcnkgPSBub2RlLmRhdGEoJ2NsYXNzJykgPT09ICdwcm9jZXNzJyA/IGRpc3BsYXlOYW1lIDogbm9kZS5kYXRhKCdsYWJlbCcpO1xyXG4gICAgbGV0IGxhYmVsID0gbm9kZS5kYXRhKCdsYWJlbCcpO1xyXG5cclxuICAgIGlmKCBfLmlzRW1wdHkoIG1kICkgKXtcclxuICAgICAgcmV0dXJuIGgoJ2Rpdi5jeS10b29sdGlwJywgW1xyXG4gICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWNvbnRlbnQnLCBbXHJcbiAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1oZWFkZXInLCBbXHJcbiAgICAgICAgICAgIGgoJ2gyLmN5LXRvb2x0aXAtdGl0bGUnLCAgbm9kZS5kYXRhKCdjbGFzcycpKVxyXG4gICAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGJMaW5rcyA9IF8ua2V5cyggeHJlZkxpbmtzICkubWFwKCBjb2xsZWN0aW9uID0+IHtcclxuICAgICAgbGV0IGxpbmsgPSBudWxsO1xyXG4gICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IFNVUFBPUlRFRF9DT0xMRUNUSU9OUy5nZXQoIGNvbGxlY3Rpb24gKTtcclxuICAgICAgY29uc3QgdXJpID0gXy5nZXQoIHhyZWZMaW5rcywgYCR7Y29sbGVjdGlvbn1bMF1gICk7XHJcbiAgICAgIGlmICggZGlzcGxheU5hbWUgJiYgdXJpICkgbGluayA9IGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogdXJpLCB0YXJnZXQ6ICdfYmxhbmsnIH0sIGRpc3BsYXlOYW1lICk7XHJcbiAgICAgIHJldHVybiBsaW5rO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHB1YmxpY2F0aW9uRWxlcyA9IHB1YmxpY2F0aW9ucy5tYXAocHVibGljYXRpb24gPT4ge1xyXG4gICAgICBsZXQgeyBpZCwgdGl0bGUsIGZpcnN0QXV0aG9yLCBkYXRlLCBzb3VyY2UgfSA9IHB1YmxpY2F0aW9uO1xyXG4gICAgICByZXR1cm4gaCgnZGl2LmN5LW92ZXJmbG93LWNvbnRlbnQnLCBbXHJcbiAgICAgICAgaCgnYS5wbGFpbi1saW5rJywgeyBocmVmOiAnaHR0cHM6Ly9iaW9yZWdpc3RyeS5pby9wdWJtZWQ6JyArIGlkLCB0YXJnZXQ6ICdfYmxhbmsnICB9LCB0aXRsZSksXHJcbiAgICAgICAgaCgnZGl2JywgZmlyc3RBdXRob3IgKyAgJyBldCBhbC4gfCAnICsgc291cmNlICsgJyAtICcgKyBuZXcgRGF0ZShkYXRlKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkpXHJcbiAgICAgIF0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHNob3dUeXBlID0gdHlwZSAhPT0gJyc7XHJcblxyXG4gICAgbGV0IHNob3dTdGROYW1lID0gc3RhbmRhcmROYW1lICE9PSAnJztcclxuICAgIGxldCBzaG93RGlzcE5hbWUgPSBkaXNwbGF5TmFtZSAhPT0gJycgJiYgZGlzcGxheU5hbWUgIT09IGxhYmVsO1xyXG4gICAgbGV0IHNob3dTeW5vbnltcyA9IHN5bm9ueW1zLmxlbmd0aCA+IDA7XHJcbiAgICBsZXQgc2hvd1B1YnMgPSBwdWJsaWNhdGlvbkVsZXMubGVuZ3RoID4gMDtcclxuXHJcbiAgICBsZXQgc2hvd0JvZHkgPSBzaG93U3RkTmFtZSB8fCBzaG93RGlzcE5hbWUgfHwgc2hvd1N5bm9ueW1zIHx8IHNob3dQdWJzO1xyXG4gICAgbGV0IHNob3dMaW5rcyA9IGRiTGlua3MubGVuZ3RoID4gMDtcclxuICAgIGxldCBzaG93UGNTZWFyY2hMaW5rID0gbGFiZWwgfHwgZGlzcGxheU5hbWU7XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5jeS10b29sdGlwJywgW1xyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1jb250ZW50JywgW1xyXG4gICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWhlYWRlcicsIFtcclxuICAgICAgICAgIGgoJ2gyLmN5LXRvb2x0aXAtdGl0bGUnLCAgYCR7bGFiZWwgfHwgZGlzcGxheU5hbWUgfHwgJyd9YCksXHJcbiAgICAgICAgICBzaG93VHlwZSA/IGgoJ2Rpdi5jeS10b29sdGlwLXR5cGUtY2hpcCcsIHR5cGUpIDogbnVsbCxcclxuICAgICAgICBdKSxcclxuICAgICAgICBzaG93Qm9keSA/IGgoJ2Rpdi5jeS10b29sdGlwLWJvZHknLCBbXHJcbiAgICAgICAgICBzaG93U3RkTmFtZSA/IGgoJ2Rpdi5jeS10b29sdGlwLXNlY3Rpb24nLCBbXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLW5hbWUnLCAnTmFtZScpLFxyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC12YWx1ZScsIHN0YW5kYXJkTmFtZSlcclxuICAgICAgICAgIF0pIDogbnVsbCxcclxuICAgICAgICAgIHNob3dEaXNwTmFtZSA/IGgoJ2Rpdi5jeS10b29sdGlwLXNlY3Rpb24nLCBbXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLW5hbWUnLCAnRGlzcGxheSBOYW1lJyksXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLXZhbHVlJywgZGlzcGxheU5hbWUpXHJcbiAgICAgICAgICBdKSA6IG51bGwsXHJcbiAgICAgICAgICBzaG93U3lub255bXMgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgW1xyXG4gICAgICAgICAgICAgICdTeW5vbnltcycsXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC12YWx1ZScsIHN5bm9ueW1zLnNsaWNlKDAsIERFRkFVTFRfTlVNX05BTUVTKS5qb2luKCcsICcpKVxyXG4gICAgICAgICAgXSkgOiBudWxsLFxyXG4gICAgICAgICAgc2hvd1B1YnMgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgW1xyXG4gICAgICAgICAgICAgICdQdWJsaWNhdGlvbnMnLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgaCgnZGl2JywgcHVibGljYXRpb25FbGVzKVxyXG4gICAgICAgICAgXSkgOiBudWxsXHJcbiAgICAgICAgXSk6IG51bGwsXHJcbiAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZm9vdGVyJywgW1xyXG4gICAgICAgICAgc2hvd0xpbmtzID8gaCgnZGl2LmN5LXRvb2x0aXAtc2VjdGlvbicsIFtcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsIFtcclxuICAgICAgICAgICAgICAnTGlua3MnLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtbGlua3MnLCBkYkxpbmtzKVxyXG4gICAgICAgICAgXSkgOiBudWxsXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgc2hvd1BjU2VhcmNoTGluayA/IGgoJ2Rpdi5jeS10b29sdGlwLWNhbGwtdG8tYWN0aW9uJywgW1xyXG4gICAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJyxcclxuICAgICAgICAgICAgaHJlZjogJy9zZWFyY2g/cT0nICsgc2VhcmNoTGlua1F1ZXJ5XHJcbiAgICAgICAgICB9LCBbXHJcbiAgICAgICAgICAgIGgoJ2J1dHRvbi5jYWxsLXRvLWFjdGlvbicsICdGaW5kIFJlbGF0ZWQgUGF0aHdheXMnKVxyXG4gICAgICAgICAgXSlcclxuICAgICAgICBdKSA6IG51bGxcclxuICAgICAgXSlcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUGF0aHdheU5vZGVNZXRhZGF0YVZpZXc7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9wYXRod2F5LW5vZGUtbWV0YWRhdGEuanMiLCJcclxuY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuXHJcbmNvbnN0IEljb25CdXR0b24gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy9pY29uLWJ1dHRvbicpO1xyXG5cclxuXHJcbmNvbnN0IHsgZml0LCBleHBhbmRDb2xsYXBzZSwgbGF5b3V0IH0gPSByZXF1aXJlKCcuL2N5Jyk7XHJcblxyXG5jbGFzcyBQYXRod2F5c1Rvb2xiYXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHsgY3lTcnYsIGNvbnRyb2xsZXIsIGFjdGl2ZU1lbnUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgY3kgPSBjeVNydi5nZXQoKTtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmFwcC10b29sYmFyJywgW1xyXG4gICAgICBoKEljb25CdXR0b24sIHtcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ0V4dHJhIEluZm9ybWF0aW9uJyxcclxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb250cm9sbGVyLmNoYW5nZU1lbnUoJ2luZm9NZW51JyksXHJcbiAgICAgICAgaXNBY3RpdmU6IGFjdGl2ZU1lbnUgPT09ICdpbmZvTWVudScsXHJcbiAgICAgICAgaWNvbjogJ2luZm8nXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKEljb25CdXR0b24sIHtcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ0Rvd25sb2FkcycsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4gY29udHJvbGxlci5jaGFuZ2VNZW51KCdkb3dubG9hZE1lbnUnKSxcclxuICAgICAgICBpc0FjdGl2ZTogYWN0aXZlTWVudSA9PT0gJ2Rvd25sb2FkTWVudScsXHJcbiAgICAgICAgaWNvbjogJ2ZpbGVfZG93bmxvYWQnXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKEljb25CdXR0b24sIHtcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ0Rvd25sb2FkcycsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4gY29udHJvbGxlci5jaGFuZ2VNZW51KCdwYWludE1lbnUnKSxcclxuICAgICAgICBpc0FjdGl2ZTogYWN0aXZlTWVudSA9PT0gJ3BhaW50TWVudScsXHJcbiAgICAgICAgaWNvbjogJ2Zvcm1hdF9wYWludCdcclxuICAgICAgfSksXHJcbiAgICAgIGgoSWNvbkJ1dHRvbiwge1xyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRXhwYW5kL0NvbGxhcHNlIGFsbCBjb21wbGV4IG5vZGVzJyxcclxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBleHBhbmRDb2xsYXBzZSggY3kgKSxcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaWNvbjogJ3NlbGVjdF9hbGwnXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKEljb25CdXR0b24sIHtcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ0ZpdCBwYXRod2F5IHRvIHNjcmVlbicsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4gZml0KCBjeSApLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpY29uOiAnZnVsbHNjcmVlbidcclxuICAgICAgfSksXHJcbiAgICAgIGgoSWNvbkJ1dHRvbiwge1xyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmVzZXQgcGF0aHdheSBhcnJhbmdlbWVudCcsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4gbGF5b3V0KCBjeSApLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpY29uOiAncmVwbGF5J1xyXG4gICAgICB9KSxcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXRod2F5c1Rvb2xiYXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9wYXRod2F5cy10b29sYmFyLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgY2xhc3NOYW1lcyA9IHJlcXVpcmUoJ2NsYXNzbmFtZXMnKTtcclxuXHJcbmNsYXNzIERyb3Bkb3duIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgb3BlbjogZmFsc2UsXHJcbiAgICAgIHRpdGxlOiBwcm9wcy50aXRsZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmhhbmRsZUNsb3NlID0gZSA9PiB0aGlzLmNsb3NlKGUpO1xyXG4gIH1cclxuXHJcbiAgb3BlbiggZSApe1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuOiB0cnVlfSwgKCkgPT4ge1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuaGFuZGxlQ2xvc2UpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjbG9zZSggZSApe1xyXG4gICAgaWYoICF0aGlzLmVsLmNvbnRhaW5zKGUudGFyZ2V0KSApe1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgb3BlbjogZmFsc2UgfSwgKCkgPT4ge1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbG9zZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2hhbmdlKCBuZXdWYWwgKXtcclxuICAgIHRoaXMucHJvcHMub25DaGFuZ2UobmV3VmFsKTtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuOiBmYWxzZSwgdGl0bGU6IG5ld1ZhbC5sYWJlbCB9LCAoKSA9PiB7XHJcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5oYW5kbGVDbG9zZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHsgbGlzdE9wdGlvbnMgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IG9wZW4sIHRpdGxlIH0gPSB0aGlzLnN0YXRlO1xyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIGgoYGRpdi5kcm9wZG93bmAsIHsgcmVmOiBlbCA9PiB0aGlzLmVsID0gZWwsIGNsYXNzTmFtZTogY2xhc3NOYW1lcyh0aGlzLnByb3BzLmNsYXNzTmFtZSwgeydkcm9wZG93bi1hY3RpdmUnOiBvcGVufSkgfSwgW1xyXG4gICAgICAgIGgoJ2Rpdi5kcm9wZG93bi1oZWFkZXInLCB7IG9uQ2xpY2s6IGUgPT4gdGhpcy5vcGVuKGUpIH0sIFtcclxuICAgICAgICAgIGgoJ2Rpdi5kcm9wZG93bi10aXRsZScsIHRpdGxlKSxcclxuICAgICAgICAgIGgoJ2kubWF0ZXJpYWwtaWNvbnMnLCBvcGVuID8gJ2tleWJvYXJkX2Fycm93X3VwJyA6ICdrZXlib2FyZF9hcnJvd19kb3duJylcclxuICAgICAgICBdKSxcclxuXHJcbiAgICAgICAgb3BlbiA/IGgoJ2Rpdi5kcm9wZG93bi1vcHRpb25zJywgbGlzdE9wdGlvbnMubWFwKCBkT3B0ID0+IHtcclxuICAgICAgICAgIHJldHVybiBoKCdkaXYuZHJvcGRvd24tb3B0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYnLCB7IGtleTogZE9wdC52YWx1ZSwgb25DbGljazogKCkgPT4gdGhpcy5oYW5kbGVDaGFuZ2UoZE9wdCkgfSwgZE9wdC5sYWJlbCApXHJcbiAgICAgICAgICBdKTtcclxuICAgICAgICB9KSkgOiBudWxsXHJcbiAgICAgIF0pXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBEcm9wZG93bjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2Ryb3Bkb3duLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuXHJcbmNsYXNzIENhcmQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIHJlbmRlcigpe1xyXG4gICAgcmV0dXJuIGgoJ2Rpdi5jYXJkJywgW1xyXG4gICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIENhcmRHcmlkIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICByZW5kZXIoKXtcclxuICAgIHJldHVybiBoKCdkaXYuY2FyZC1ncmlkJywgdGhpcy5wcm9wcy5jaGlsZHJlbi5tYXAoIGl0ZW0gPT4gaChDYXJkLCBbIGl0ZW0gXSApKSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHsgQ2FyZCwgQ2FyZEdyaWQgfTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2NhcmQuanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBjbGFzc05hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xyXG5cclxuY2xhc3MgQXBwQ2FyZCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IoIHByb3BzICl7XHJcbiAgICBzdXBlciggcHJvcHMgKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHsgZW5hYmxlZCwgaGludCwgdXJsLCBpbWFnZSwgaW1hZ2VDbGFzcywgdGl0bGUsIGJvZHksIGxpbmtpZnlDb250ZW50IH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIHJldHVybiBoKCcuYXBwLWNhcmQnLCB7XHJcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHsgJ2FwcC1jYXJkLWRpc2FibGVkJzogIWVuYWJsZWQgfSlcclxuICAgICAgfSwgW1xyXG4gICAgICBoKCAnYScsIHtcclxuICAgICAgICBocmVmOiB1cmwsXHJcbiAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJ1xyXG4gICAgICB9LCBbXHJcbiAgICAgICAgaCggJ2Rpdi5hcHAtY2FyZC1pbWFnZScsIHtcclxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyh7XHJcbiAgICAgICAgICAgIFtpbWFnZUNsYXNzXTogISFpbWFnZUNsYXNzLFxyXG4gICAgICAgICAgICAnYmFja2dyb3VuZCc6ICEhaW1hZ2VDbGFzcyxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSwgWyBpbWFnZSBdKVxyXG4gICAgICBdKSxcclxuICAgICAgaCgnYS5hcHAtY2FyZC1jb250ZW50LWxpbmsnLCBsaW5raWZ5Q29udGVudCA/IHtcclxuICAgICAgICBocmVmOiB1cmwsXHJcbiAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJ1xyXG4gICAgICB9IDoge30sIFtcclxuICAgICAgICBoKCdkaXYuYXBwLWNhcmQtY29udGVudCcsIFtcclxuICAgICAgICAgIGgoICdkaXYuYXBwLWNhcmQtaGVhZGVyJywgW1xyXG4gICAgICAgICAgICBoKCAnaDQuYXBwLWNhcmQtdGl0bGUnLCBbdGl0bGVdICksXHJcbiAgICAgICAgICAgIGgoICdzcGFuLmFwcC1jYXJkLWhpbnQnLCBbaGludF0gKVxyXG4gICAgICAgICAgXSksXHJcbiAgICAgICAgICBoKCAnZGl2LmFwcC1jYXJkLWJvZHknLCBbYm9keV0gKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIFNwZWNpZmllcyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHByb3BzOlxyXG5BcHBDYXJkLmRlZmF1bHRQcm9wcyA9IHtcclxuICBlbmFibGVkOiB0cnVlLFxyXG4gIGhpbnQ6IG51bGwsXHJcbiAgaW1hZ2VDbGFzczogbnVsbCxcclxuICBpbWFnZTogbnVsbFxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IEFwcENhcmQgfTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2FwcC1jYXJkLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgeyBMaW5rIH0gPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJyk7XHJcblxyXG5cclxuXHJcblxyXG5jbGFzcyBFbXB0eU5ldHdvcmsgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHsgbXNnLCBzaG93UGNMaW5rIH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIGxldCBsaW5rVG9QY1NlYXJjaCA9IHNob3dQY0xpbmsgPyBoKCdkaXYnLCBbJ1JldHVybiB0bycsIGgoTGluaywgeyBjbGFzc05hbWU6ICdwbGFpbi1saW5rJywgdG86IHsgcGF0aG5hbWU6ICcvJyB9IH0sICAnIFBhdGh3YXkgQ29tbW9ucyBTZWFyY2gnKV0pIDogbnVsbDtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmVtcHR5LW5ldHdvcmsnLFtcclxuICAgICAgaCgnZGl2LmVtcHR5LW5ldHdvcmstaGVhZGVyJywgW1xyXG4gICAgICAgIGgoJ2Rpdi5wYy1sb2dvJyksXHJcbiAgICAgICAgaCgnaDEuZW1wdHktbmV0d29yay1tZXNzYWdlJywgbXNnKVxyXG4gICAgICBdKSxcclxuICAgICAgbGlua1RvUGNTZWFyY2hcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbXB0eU5ldHdvcms7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9jb21tb24vY29tcG9uZW50cy9lbXB0eS1uZXR3b3JrLmpzIiwiXHJcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IGNsYXNzTmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XHJcblxyXG5jb25zdCBJY29uQnV0dG9uID0gcmVxdWlyZSgnLi9pY29uLWJ1dHRvbicpO1xyXG5cclxuXHJcbi8vIGEgc2lkZWJhciBmb3IgYSBuZXR3b3JrIHZpZXdcclxuLy8gcHJvcHM6XHJcbi8vICAtIGNvbnRyb2xsZXI6IHBhcmVudCBjb21wb25lbnQgdGhhdCBpbXBsZW1lbnRzIGNoYW5nZU1lbnVcclxuLy8gIC0gYWN0aXZlTWVudTogYSBzdHJpbmcgcmVwcmVzZW50aW5nIHdoaWNoIG1lbnUgdG8gb3BlblxyXG4vLyAgLSBjaGlsZHJlbjogZWFjaCBtZW51IHNob3VsZCBiZSBhIGNoaWxkIGZvciB0aGlzIHNpZGViYXJcclxuLy8gICAgICAgICAgICAgIGFuZCBjb250YWluIGEga2V5IHRoYXQgY2FuIGJlIHVzZWQgdG8gY29tcGFyZVxyXG4vLyAgICAgICAgICAgICAgYWdhaW5zdCB0aGUgY3VycmVudCBtZW51XHJcbi8vXHJcblxyXG4vLyBleGFtcGxlIHVzYWdlOlxyXG4vLyBjbGFzcyBQYXJlbnRDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4vLyAgIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuLy8gICAgIHRoaXMuc3RhdGUgPSB7XHJcbi8vICAgICAgIGFjdGl2ZU1lbnU6ICdtZW51MSdcclxuLy8gICAgIH07XHJcbi8vICAgfVxyXG4vLyAgIGNoYW5nZU1lbnUobmV3TWVudSl7XHJcbi8vICAgICB0aGlzLnNldFN0YXRlKHsgYWN0aXZlTWVudTogbmV3TWVudSB9KTtcclxuLy8gICB9XHJcbi8vICAgcmVuZGVyKCl7XHJcbi8vICAgICBsZXQgeyBhY3RpdmVNZW51IH0gPSB0aGlzLnN0YXRlO1xyXG4vLyAgICAgcmV0dXJuIGgoU2lkZWJhciwgeyBjb250cm9sbGVyOiB0aGlzLCBhY3RpdmVNZW51IH0sIFtcclxuLy8gICAgICAgaChNZW51MSwgeyBrZXk6ICdtZW51MScgfSksXHJcbi8vICAgICAgIGgoTWVudTIsIHsga2V5OiAnbWVudTInIH0pXHJcbi8vICAgICBdKVxyXG4vLyAgIH1cclxuLy8gfVxyXG5cclxuY2xhc3MgU2lkZWJhciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBjb250cm9sbGVyLCBhY3RpdmVNZW51LCBjaGlsZHJlbiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBhY3RpdmVNZW51Q29udGVudCA9IGNoaWxkcmVuLmZpbmQoY2hpbGQgPT4gY2hpbGQua2V5ID09PSBhY3RpdmVNZW51KTtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LnNpZGViYXItbWVudScsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKHsnc2lkZWJhci1tZW51LW9wZW4nOiBhY3RpdmVNZW51ICE9ICdjbG9zZU1lbnUnIH0pfSwgW1xyXG4gICAgICBoKCdkaXYuc2lkZWJhci1jbG9zZScsIFtcclxuICAgICAgICBoKEljb25CdXR0b24sIHtcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ2xvc2UgdGhlIHNpZGViYXInLFxyXG4gICAgICAgICAgb25DbGljazogKCkgPT4gY29udHJvbGxlci5jaGFuZ2VNZW51KCdjbG9zZU1lbnUnKSxcclxuICAgICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICAgIGljb246ICdjbG9zZSdcclxuICAgICAgICB9KVxyXG4gICAgICBdKSxcclxuICAgICAgaCgnZGl2LnNpZGViYXItY29udGVudCcsIFtcclxuICAgICAgICBoKCdkaXYuc2lkZWJhci10ZXh0JywgW2FjdGl2ZU1lbnVDb250ZW50XSlcclxuICAgICAgXSlcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBTaWRlYmFyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvc2lkZWJhci5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IGNsYXNzTmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XHJcblxyXG5cclxuXHJcblxyXG5jbGFzcyBDeXRvc2NhcGVOZXR3b3JrIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgY29tcG9uZW50RGlkTW91bnQoKXtcclxuICAgIGxldCB7IGN5U3J2LCBvbk1vdW50ID0gKCkgPT4ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjeVNydi5tb3VudCh0aGlzLm5ldHdvcmspO1xyXG5cclxuICAgIG9uTW91bnQoKTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgIGxldCB7IGN5U3J2IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY3lTcnYuZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICByZXR1cm4gaCgnZGl2Lm5ldHdvcmsnLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnbmV0d29yaycsIHRoaXMucHJvcHMuY2xhc3NOYW1lKX0sIFtcclxuICAgICAgaCgnZGl2Lm5ldHdvcmstY3kjY3knLCB7XHJcbiAgICAgICAgcmVmOiBkb20gPT4gdGhpcy5uZXR3b3JrID0gZG9tXHJcbiAgICAgIH0pXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3l0b3NjYXBlTmV0d29yaztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2N5dG9zY2FwZS1uZXR3b3JrLmpzIiwibW9kdWxlLmV4cG9ydHMgPSB7XCJkYXRhU2V0RXhwcmVzc2lvbkxpc3RcIjpbe1wiZGF0YVNldHNcIjpbXCJURVBcIl0sXCJudW1Db25kaXRpb25zXCI6MTAsXCJjb2x1bW5OYW1lc1wiOltcIk1HSC1CckNhLUgtNzRfaHRzcWN0XCIsXCJNR0gtQnJDYS1ILTY4X2h0c3FjdFwiLFwiTUdILUJyQ2EtSC02Nl9odHNxY3RcIixcIk1HSC1CckNhLUgtNTlfaHRzcWN0XCIsXCJNR0gtQnJDYS1ILTExX2h0c3FjdFwiLFwiSEQtNV9odHNxY3RcIixcIkhELTRfaHRzcWN0XCIsXCJIRC0zLTFfaHRzcWN0XCIsXCJIRC0yLTFfaHRzcWN0XCIsXCJIRC0xX2h0c3FjdFwiXSxcImV4cHJlc3Npb25Vbml2ZXJzZVwiOjYyMTEsXCJleHByZXNzaW9uc1wiOlt7XCJnZW5lTmFtZVwiOlwiVFA1M1wiLFwidmFsdWVzXCI6WzExNi43NDkyLDc0LjY5NjYsODUuNDExMSwyODMuMzk5Miw1NS44NzQ0LDYzMi44Mjc0LDUwOS4xNzE0LDU0NS4wNDM0LDU3Ny4yNjQ0LDI5MS4yMjE5XX0se1wiZ2VuZU5hbWVcIjpcIlpORjM4NUFcIixcInZhbHVlc1wiOlsxMTYuNzQ5Miw3NC42OTY2LDg1LjQxMTEsMjgzLjM5OTIsNTUuODc0NCw1MDYuMjYxOSw0MDcuMzM3MSw0MzYuMDM0OCw0NjEuODExNSwyMzIuOTc3Nl19LHtcImdlbmVOYW1lXCI6XCJQQ0JQNFwiLFwidmFsdWVzXCI6WzM1MC4yNDc2LDIyNC4wODk5LDI1Ni4yMzM0LDg1MC4xOTc0LDE2Ny42MjMzLDEyNi41NjU1LDEwMS44MzQzLDEwOS4wMDg3LDExNS40NTI5LDU4LjI0NDRdfSx7XCJnZW5lTmFtZVwiOlwiQ0RLTjFBXCIsXCJ2YWx1ZXNcIjpbMTE2Ljc0OTIsNzQuNjk2Niw4NS40MTExLDI4My4zOTkyLDU1Ljg3NDQsMzc5LjY5NjQsMzA1LjUwMjksMzI3LjAyNjEsMzQ2LjM1ODcsMTc0LjczMzJdfV19XSxcImRhdGFTZXRDbGFzc0xpc3RcIjpbe1wiZGF0YVNldFwiOlwiVEVQXCIsXCJjbGFzc2VzXCI6W1wiQnJDYVwiLFwiQnJDYVwiLFwiQnJDYVwiLFwiQnJDYVwiLFwiQnJDYVwiLFwiSERcIixcIkhEXCIsXCJIRFwiLFwiSERcIixcIkhEXCJdLFwicGhlbm90eXBlMVwiOlwiQnJDYVwiLFwicGhlbm90eXBlMlwiOlwiSERcIn1dfVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYWludC9kZW1vLWV4cHJlc3Npb25zLmpzb25cbi8vIG1vZHVsZSBpZCA9IDQ5MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IFt7XCJncmFwaFwiOntcImVkZ2VzXCI6W3tcImRhdGFcIjp7XCJiZW5kUG9pbnRQb3NpdGlvbnNcIjpbXSxcImNhcmRpbmFsaXR5XCI6MCxcImNsYXNzXCI6XCJjb25zdW1wdGlvblwiLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1JuYV9iMGM3OTk3MTBhMTkyYWIxZWQ2Nzk0YTYzMzJlM2IwZi0tVE8tLUlOUF9odHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM0MTFfTEVGVFRPUklHSFRcIixcInBvcnRTb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1JuYV9iMGM3OTk3MTBhMTkyYWIxZWQ2Nzk0YTYzMzJlM2IwZlwiLFwicG9ydFRhcmdldFwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNDExX0xFRlRUT1JJR0hUXCIsXCJzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1JuYV9iMGM3OTk3MTBhMTkyYWIxZWQ2Nzk0YTYzMzJlM2IwZlwiLFwidGFyZ2V0XCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM0MTFfTEVGVFRPUklHSFRcIn19LHtcImRhdGFcIjp7XCJiZW5kUG9pbnRQb3NpdGlvbnNcIjpbXSxcImNhcmRpbmFsaXR5XCI6MCxcImNsYXNzXCI6XCJwcm9kdWN0aW9uXCIsXCJpZFwiOlwiT1VUX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzgwMV9MRUZUVE9SSUdIVC0tVE8tLWh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfMjkzZDYyN2Q4ZjlmMjJiOWU3MmViY2Q4NjkwOWQzMzRcIixcInBvcnRTb3VyY2VcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzgwMV9MRUZUVE9SSUdIVFwiLFwicG9ydFRhcmdldFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8yOTNkNjI3ZDhmOWYyMmI5ZTcyZWJjZDg2OTA5ZDMzNFwiLFwic291cmNlXCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM4MDFfTEVGVFRPUklHSFRcIixcInRhcmdldFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8yOTNkNjI3ZDhmOWYyMmI5ZTcyZWJjZDg2OTA5ZDMzNFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcImNvbnN1bXB0aW9uXCIsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUm5hX2IwYzc5OTcxMGExOTJhYjFlZDY3OTRhNjMzMmUzYjBmLS1UTy0tSU5QX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQwM19MRUZUVE9SSUdIVFwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUm5hX2IwYzc5OTcxMGExOTJhYjFlZDY3OTRhNjMzMmUzYjBmXCIsXCJwb3J0VGFyZ2V0XCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM0MDNfTEVGVFRPUklHSFRcIixcInNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUm5hX2IwYzc5OTcxMGExOTJhYjFlZDY3OTRhNjMzMmUzYjBmXCIsXCJ0YXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQwM19MRUZUVE9SSUdIVFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcInByb2R1Y3Rpb25cIixcImlkXCI6XCJPVVRfaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNzE5X0xFRlRUT1JJR0hULS1UTy0taHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8zYjliZGUyMWU4ZjEzMDg3MGI5MWY3M2FjMzFkY2FiYVwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNzE5X0xFRlRUT1JJR0hUXCIsXCJwb3J0VGFyZ2V0XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzNiOWJkZTIxZThmMTMwODcwYjkxZjczYWMzMWRjYWJhXCIsXCJzb3VyY2VcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzcxOV9MRUZUVE9SSUdIVFwiLFwidGFyZ2V0XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzNiOWJkZTIxZThmMTMwODcwYjkxZjczYWMzMWRjYWJhXCJ9fSx7XCJkYXRhXCI6e1wiYmVuZFBvaW50UG9zaXRpb25zXCI6W10sXCJjYXJkaW5hbGl0eVwiOjAsXCJjbGFzc1wiOlwiaW5oaWJpdGlvblwiLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfZTVlYWRiMjllMWZmYTFhZjdlNDc0M2NjYTU2ODQwNDktLVRPLS1odHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM0MTFfTEVGVFRPUklHSFRcIixcInBvcnRTb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfZTVlYWRiMjllMWZmYTFhZjdlNDc0M2NjYTU2ODQwNDlcIixcInBvcnRUYXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQxMV9MRUZUVE9SSUdIVFwiLFwic291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4X2U1ZWFkYjI5ZTFmZmExYWY3ZTQ3NDNjY2E1Njg0MDQ5XCIsXCJ0YXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQxMV9MRUZUVE9SSUdIVFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcImNvbnN1bXB0aW9uXCIsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvRG5hXzkxYjBiYjQ5ZmVmZTM2NzNiYTIzZDQ2ZGRhY2VmYzU2LS1UTy0tSU5QX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzgwMV9MRUZUVE9SSUdIVFwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvRG5hXzkxYjBiYjQ5ZmVmZTM2NzNiYTIzZDQ2ZGRhY2VmYzU2XCIsXCJwb3J0VGFyZ2V0XCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM4MDFfTEVGVFRPUklHSFRcIixcInNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvRG5hXzkxYjBiYjQ5ZmVmZTM2NzNiYTIzZDQ2ZGRhY2VmYzU2XCIsXCJ0YXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzgwMV9MRUZUVE9SSUdIVFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcImNvbnN1bXB0aW9uXCIsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvRG5hXzkxYjBiYjQ5ZmVmZTM2NzNiYTIzZDQ2ZGRhY2VmYzU2LS1UTy0tSU5QX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzM4OF9MRUZUVE9SSUdIVFwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvRG5hXzkxYjBiYjQ5ZmVmZTM2NzNiYTIzZDQ2ZGRhY2VmYzU2XCIsXCJwb3J0VGFyZ2V0XCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDMzODhfTEVGVFRPUklHSFRcIixcInNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvRG5hXzkxYjBiYjQ5ZmVmZTM2NzNiYTIzZDQ2ZGRhY2VmYzU2XCIsXCJ0YXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzM4OF9MRUZUVE9SSUdIVFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcImNvbnN1bXB0aW9uXCIsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUHJvdGVpbl9jMWY1YzA2NWU2YmM3MjEyN2NhNTZlZTBiZjAwNTQ5NC0tVE8tLUlOUF9odHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM0MDNfTEVGVFRPUklHSFRcIixcInBvcnRTb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1Byb3RlaW5fYzFmNWMwNjVlNmJjNzIxMjdjYTU2ZWUwYmYwMDU0OTRcIixcInBvcnRUYXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQwM19MRUZUVE9SSUdIVFwiLFwic291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluX2MxZjVjMDY1ZTZiYzcyMTI3Y2E1NmVlMGJmMDA1NDk0XCIsXCJ0YXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQwM19MRUZUVE9SSUdIVFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcInByb2R1Y3Rpb25cIixcImlkXCI6XCJPVVRfaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzMzg4X0xFRlRUT1JJR0hULS1UTy0taHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUm5hX2IwYzc5OTcxMGExOTJhYjFlZDY3OTRhNjMzMmUzYjBmXCIsXCJwb3J0U291cmNlXCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDMzODhfTEVGVFRPUklHSFRcIixcInBvcnRUYXJnZXRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1JuYV9iMGM3OTk3MTBhMTkyYWIxZWQ2Nzk0YTYzMzJlM2IwZlwiLFwic291cmNlXCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDMzODhfTEVGVFRPUklHSFRcIixcInRhcmdldFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUm5hX2IwYzc5OTcxMGExOTJhYjFlZDY3OTRhNjMzMmUzYjBmXCJ9fSx7XCJkYXRhXCI6e1wiYmVuZFBvaW50UG9zaXRpb25zXCI6W10sXCJjYXJkaW5hbGl0eVwiOjAsXCJjbGFzc1wiOlwic3RpbXVsYXRpb25cIixcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzI5M2Q2MjdkOGY5ZjIyYjllNzJlYmNkODY5MDlkMzM0LS1UTy0taHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzMzg4X0xFRlRUT1JJR0hUXCIsXCJwb3J0U291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzI5M2Q2MjdkOGY5ZjIyYjllNzJlYmNkODY5MDlkMzM0XCIsXCJwb3J0VGFyZ2V0XCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDMzODhfTEVGVFRPUklHSFRcIixcInNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8yOTNkNjI3ZDhmOWYyMmI5ZTcyZWJjZDg2OTA5ZDMzNFwiLFwidGFyZ2V0XCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDMzODhfTEVGVFRPUklHSFRcIn19LHtcImRhdGFcIjp7XCJiZW5kUG9pbnRQb3NpdGlvbnNcIjpbXSxcImNhcmRpbmFsaXR5XCI6MCxcImNsYXNzXCI6XCJwcm9kdWN0aW9uXCIsXCJpZFwiOlwiT1VUX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQxMV9MRUZUVE9SSUdIVC0tVE8tLWh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1Byb3RlaW5fOWQ2NTZiM2U0MWIwYzY5ZmY0NWEzMDVmMDU4YjNjZWZcIixcInBvcnRTb3VyY2VcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQxMV9MRUZUVE9SSUdIVFwiLFwicG9ydFRhcmdldFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUHJvdGVpbl85ZDY1NmIzZTQxYjBjNjlmZjQ1YTMwNWYwNThiM2NlZlwiLFwic291cmNlXCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM0MTFfTEVGVFRPUklHSFRcIixcInRhcmdldFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUHJvdGVpbl85ZDY1NmIzZTQxYjBjNjlmZjQ1YTMwNWYwNThiM2NlZlwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcImNvbnN1bXB0aW9uXCIsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF9lNGM1NTQ3NzMxNGIzZDRiZmQ0YjhmNDdjZWZmM2UxNC0tVE8tLUlOUF9odHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM3MTlfTEVGVFRPUklHSFRcIixcInBvcnRTb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfZTRjNTU0NzczMTRiM2Q0YmZkNGI4ZjQ3Y2VmZjNlMTRcIixcInBvcnRUYXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzcxOV9MRUZUVE9SSUdIVFwiLFwic291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4X2U0YzU1NDc3MzE0YjNkNGJmZDRiOGY0N2NlZmYzZTE0XCIsXCJ0YXJnZXRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzcxOV9MRUZUVE9SSUdIVFwifX0se1wiZGF0YVwiOntcImJlbmRQb2ludFBvc2l0aW9uc1wiOltdLFwiY2FyZGluYWxpdHlcIjowLFwiY2xhc3NcIjpcInByb2R1Y3Rpb25cIixcImlkXCI6XCJPVVRfaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNDAzX0xFRlRUT1JJR0hULS1UTy0taHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF9lNWVhZGIyOWUxZmZhMWFmN2U0NzQzY2NhNTY4NDA0OVwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNDAzX0xFRlRUT1JJR0hUXCIsXCJwb3J0VGFyZ2V0XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4X2U1ZWFkYjI5ZTFmZmExYWY3ZTQ3NDNjY2E1Njg0MDQ5XCIsXCJzb3VyY2VcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQwM19MRUZUVE9SSUdIVFwiLFwidGFyZ2V0XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4X2U1ZWFkYjI5ZTFmZmExYWY3ZTQ3NDNjY2E1Njg0MDQ5XCJ9fSx7XCJkYXRhXCI6e1wiYmVuZFBvaW50UG9zaXRpb25zXCI6W10sXCJjYXJkaW5hbGl0eVwiOjAsXCJjbGFzc1wiOlwiY29uc3VtcHRpb25cIixcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzNiOWJkZTIxZThmMTMwODcwYjkxZjczYWMzMWRjYWJhLS1UTy0tSU5QX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzgwMV9MRUZUVE9SSUdIVFwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8zYjliZGUyMWU4ZjEzMDg3MGI5MWY3M2FjMzFkY2FiYVwiLFwicG9ydFRhcmdldFwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzODAxX0xFRlRUT1JJR0hUXCIsXCJzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfM2I5YmRlMjFlOGYxMzA4NzBiOTFmNzNhYzMxZGNhYmFcIixcInRhcmdldFwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzODAxX0xFRlRUT1JJR0hUXCJ9fSx7XCJkYXRhXCI6e1wiYmVuZFBvaW50UG9zaXRpb25zXCI6W10sXCJjYXJkaW5hbGl0eVwiOjAsXCJjbGFzc1wiOlwiY29uc3VtcHRpb25cIixcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluXzc0ODE2ZmZjOGFmOGUxZDQzYjE2YjEyMjZhNWMwZGIyLS1UTy0tSU5QX2h0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzcxOV9MRUZUVE9SSUdIVFwiLFwicG9ydFNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUHJvdGVpbl83NDgxNmZmYzhhZjhlMWQ0M2IxNmIxMjI2YTVjMGRiMlwiLFwicG9ydFRhcmdldFwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNzE5X0xFRlRUT1JJR0hUXCIsXCJzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1Byb3RlaW5fNzQ4MTZmZmM4YWY4ZTFkNDNiMTZiMTIyNmE1YzBkYjJcIixcInRhcmdldFwiOlwiaHR0cDovL2lkZW50aWZpZXJzLm9yZy9yZWFjdG9tZS9SLUhTQS02ODAzNzE5X0xFRlRUT1JJR0hUXCJ9fV0sXCJub2Rlc1wiOlt7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjoxNSxcIndcIjoxNSxcInhcIjo3LjUsXCJ5XCI6Ny41fSxcImNsYXNzXCI6XCJwcm9jZXNzXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQwM19MRUZUVE9SSUdIVFwiLFwibGFiZWxcIjpcIlwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIkVkaXRlZDogT3JsaWMtTWlsYWNpYywgTWFyaWphLCAyMDE1LTEwLTE0XCIsXCJQQ0JQNCBiaW5kcyB0aGUgMyctVVRSIG9mIHRoZSBDREtOMUEgKHAyMSkgbVJOQSBhbmQgcmVkdWNlcyBpdHMgc3RhYmlsaXR5IChTY291bWFubmUgZXQgYWwuIDIwMTEpLlwiLFwiUmV2aWV3ZWQ6IFphY2NhcmEsIFNhcmEsIDIwMTYtMDItMDRcIixcIkF1dGhvcmVkOiBPcmxpYy1NaWxhY2ljLCBNYXJpamEsIDIwMTUtMTAtMTRcIixcIlJldmlld2VkOiBJbmdhLCBBbGJlcnRvLCAyMDE2LTAyLTA0XCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJwdWJtZWRcIjpbXCIyMDgxNzY3N1wiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtNjgwMzQwM1wiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcIlBDQlA0IGJpbmRzIHRoZSBDREtOMUEgbVJOQVwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W10sXCJ0eXBlXCI6XCJCaW9jaGVtaWNhbFJlYWN0aW9uXCJ9LFwicGFyZW50XCI6XCJjeXRvc29sXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjoxNSxcIndcIjoxNSxcInhcIjo3LjUsXCJ5XCI6Ny41fSxcImNsYXNzXCI6XCJwcm9jZXNzXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzQxMV9MRUZUVE9SSUdIVFwiLFwibGFiZWxcIjpcIlwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJldmlld2VkOiBaYWNjYXJhLCBTYXJhLCAyMDE2LTAyLTA0XCIsXCJSZXZpZXdlZDogSW5nYSwgQWxiZXJ0bywgMjAxNi0wMi0wNFwiLFwiRWRpdGVkOiBPcmxpYy1NaWxhY2ljLCBNYXJpamEsIDIwMTUtMTAtMTRcIixcIkF1dGhvcmVkOiBPcmxpYy1NaWxhY2ljLCBNYXJpamEsIDIwMTUtMTAtMTRcIixcIlBDQlA0IGJpbmRpbmcgdG8gdGhlIDMnLVVUUiBvZiB0aGUgQ0RLTjFBIChwMjEpIG1STkEgcmVkdWNlcyBoYWxmLWxpZmUgb2YgdGhlIENES04xQSBtUk5BIGFuZCB0aGUgYW1vdW50IG9mIENES04xQSBwcm90ZWluLiBVcG9uIEROQSBkYW1hZ2UsIFRQNTMtbWVkaWF0ZWQgaW5kdWN0aW9uIG9mIENES04xQSBpcyByYXBpZCwgd2hpbGUgdGhlIGluZHVjdGlvbiBvZiBQQ0JQNCBpcyBtb3JlIGdyYWR1YWwuIEl0IGlzIGh5cG90aGVzaXplZCB0aGF0LCB1bmRlciBwcm9sb25nZWQgc3RyZXNzLCBQQ0JQNC1tZWRpYXRlZCBkb3duLXJlZ3VsYXRpb24gb2YgQ0RLTjFBIG1heSBzd2l0Y2ggZnJvbSBHMSBjZWxsIGN5Y2xlIGFycmVzdCB0byBHMiBhcnJlc3QsIHdoaWNoIG1heSBwcmVjZWRlIGFwb3B0b3NpcyAoU2NvdW1hbm5lIGV0IGFsLiAyMDExKS5cIl0sXCJkYXRhYmFzZUlkc1wiOntcInB1Ym1lZFwiOltcIjIwODE3Njc3XCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzNDExXCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwiUENCUDQgbW9kdWxhdGVzIENES04xQSB0cmFuc2xhdGlvblwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W10sXCJ0eXBlXCI6XCJCaW9jaGVtaWNhbFJlYWN0aW9uXCJ9LFwicGFyZW50XCI6XCJjeXRvc29sXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjozMCxcIndcIjo1MCxcInhcIjoyNSxcInlcIjoxNX0sXCJjbGFzc1wiOlwibnVjbGVpYyBhY2lkIGZlYXR1cmVcIixcImNsb25lbWFya2VyXCI6ZmFsc2UsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUm5hX2IwYzc5OTcxMGExOTJhYjFlZDY3OTRhNjMzMmUzYjBmXCIsXCJsYWJlbFwiOlwiQ0RLTjFBXCIsXCJtZXRhZGF0YVwiOntcImNvbW1lbnRzXCI6W1wiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I1JuYTk1XCIsXCJSZWFjdG9tZSBEQl9JRDogNjgwMzM4NlwiXSxcImRhdGFiYXNlSWRzXCI6e1wiZW5zZW1ibFwiOltcIkVOU1QwMDAwMDI0NDc0MVwiXSxcImhnbmMuc3ltYm9sXCI6W1wiQ0RLTjFBXCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzMzg2XCJdLFwidW5pcHJvdFwiOltcIlAzODkzNlwiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcInAyMSBtUk5BXCIsXCJzdGFuZGFyZE5hbWVcIjpcIlwiLFwic3lub255bXNcIjpbXCJDREtOMUEgbVJOQVwiLFwiRU5TRU1CTDpFTlNUMDAwMDAyNDQ3NDEgQ0RLTjFBXCJdLFwidHlwZVwiOlwiUm5hXCJ9LFwicGFyZW50XCI6XCJjeXRvc29sXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W3tcImNsYXNzXCI6XCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXCJpZFwiOm51bGwsXCJsYWJlbFwiOntcInRleHRcIjpcIm10OlJOQVwifX1dfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzQsXCJ3XCI6NTQsXCJ4XCI6MjUsXCJ5XCI6MTV9LFwiY2xhc3NcIjpcImNvbXBsZXhcIixcImNsb25lbWFya2VyXCI6ZmFsc2UsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF9lNWVhZGIyOWUxZmZhMWFmN2U0NzQzY2NhNTY4NDA0OVwiLFwibGFiZWxcIjpcIlBDQlA0OkNES04xQSBtUk5BXCIsXCJtZXRhZGF0YVwiOntcImNvbW1lbnRzXCI6W1wiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I0NvbXBsZXg0NjMyXCIsXCJSZWFjdG9tZSBEQl9JRDogNjgwMzQwNVwiXSxcImRhdGFiYXNlSWRzXCI6e1wicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzNDA1XCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwiUENCUDQ6Q0RLTjFBIG1STkFcIixcInN0YW5kYXJkTmFtZVwiOlwiXCIsXCJzeW5vbnltc1wiOltdLFwidHlwZVwiOlwiQ29tcGxleFwifSxcInBhcmVudFwiOlwiY3l0b3NvbFwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzAsXCJ3XCI6NTAsXCJ4XCI6MjUsXCJ5XCI6MTV9LFwiY2xhc3NcIjpcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1JuYV9iMGM3OTk3MTBhMTkyYWIxZWQ2Nzk0YTYzMzJlM2IwZl81MTc4NTY3YTQ3ZWNjMzg2YzljZDRjODYzMzFkYTIxOFwiLFwibGFiZWxcIjpcIkNES04xQVwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJFUExBQ0VEIGh0dHA6Ly93d3cucmVhY3RvbWUub3JnL2Jpb3BheC82NC80ODg4NyNSbmE5NVwiLFwiUmVhY3RvbWUgREJfSUQ6IDY4MDMzODZcIl0sXCJkYXRhYmFzZUlkc1wiOntcImVuc2VtYmxcIjpbXCJFTlNUMDAwMDAyNDQ3NDFcIl0sXCJoZ25jLnN5bWJvbFwiOltcIkNES04xQVwiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtNjgwMzM4NlwiXSxcInVuaXByb3RcIjpbXCJQMzg5MzZcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJwMjEgbVJOQVwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W1wiQ0RLTjFBIG1STkFcIixcIkVOU0VNQkw6RU5TVDAwMDAwMjQ0NzQxIENES04xQVwiXSxcInR5cGVcIjpcIlJuYVwifSxcInBhcmVudFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF9lNWVhZGIyOWUxZmZhMWFmN2U0NzQzY2NhNTY4NDA0OVwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOlt7XCJjbGFzc1wiOlwidW5pdCBvZiBpbmZvcm1hdGlvblwiLFwiaWRcIjpudWxsLFwibGFiZWxcIjp7XCJ0ZXh0XCI6XCJtdDpSTkFcIn19XX19LHtcImRhdGFcIjp7XCJiYm94XCI6e1wiaFwiOjMwLFwid1wiOjQ4LFwieFwiOjI0LFwieVwiOjE1fSxcImNsYXNzXCI6XCJtYWNyb21vbGVjdWxlXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1Byb3RlaW5fYzFmNWMwNjVlNmJjNzIxMjdjYTU2ZWUwYmYwMDU0OTRfNTE3ODU2N2E0N2VjYzM4NmM5Y2Q0Yzg2MzMxZGEyMThcIixcImxhYmVsXCI6XCJQQ0JQNFwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJlYWN0b21lIERCX0lEOiA2ODAzMzgyXCIsXCJSRVBMQUNFRCBodHRwOi8vd3d3LnJlYWN0b21lLm9yZy9iaW9wYXgvNjQvNDg4ODcjUHJvdGVpbjEwNDU4XCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJoZ25jLnN5bWJvbFwiOltcIlBDQlA0XCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzMzgyXCJdLFwidW5pcHJvdFwiOltcIlA1NzcyM1wiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcIlBDQlA0XCIsXCJzdGFuZGFyZE5hbWVcIjpcIlBvbHkockMpLWJpbmRpbmcgcHJvdGVpbiA0XCIsXCJzeW5vbnltc1wiOltcIkFscGhhLUNQNFwiLFwiUG9seShyQyktYmluZGluZyBwcm90ZWluIDRcIixcIk1DRzEwXCIsXCJQQ0JQNFwiXSxcInR5cGVcIjpcIlByb3RlaW5cIn0sXCJwYXJlbnRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfZTVlYWRiMjllMWZmYTFhZjdlNDc0M2NjYTU2ODQwNDlcIixcInN0YXRlVmFyaWFibGVzXCI6W3tcImNsYXNzXCI6XCJzdGF0ZSB2YXJpYWJsZVwiLFwiaWRcIjpudWxsLFwic3RhdGVcIjp7XCJ2YWx1ZVwiOlwieFsxIC0gNDAzXVwiLFwidmFyaWFibGVcIjpcIlwifX1dLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjozMCxcIndcIjo0OCxcInhcIjoyNCxcInlcIjoxNX0sXCJjbGFzc1wiOlwibWFjcm9tb2xlY3VsZVwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluX2MxZjVjMDY1ZTZiYzcyMTI3Y2E1NmVlMGJmMDA1NDk0XCIsXCJsYWJlbFwiOlwiUENCUDRcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJSZWFjdG9tZSBEQl9JRDogNjgwMzM4MlwiLFwiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I1Byb3RlaW4xMDQ1OFwiXSxcImRhdGFiYXNlSWRzXCI6e1wiaGduYy5zeW1ib2xcIjpbXCJQQ0JQNFwiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtNjgwMzM4MlwiXSxcInVuaXByb3RcIjpbXCJQNTc3MjNcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJQQ0JQNFwiLFwic3RhbmRhcmROYW1lXCI6XCJQb2x5KHJDKS1iaW5kaW5nIHByb3RlaW4gNFwiLFwic3lub255bXNcIjpbXCJBbHBoYS1DUDRcIixcIlBvbHkockMpLWJpbmRpbmcgcHJvdGVpbiA0XCIsXCJNQ0cxMFwiLFwiUENCUDRcIl0sXCJ0eXBlXCI6XCJQcm90ZWluXCJ9LFwicGFyZW50XCI6XCJjeXRvc29sXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOlt7XCJjbGFzc1wiOlwic3RhdGUgdmFyaWFibGVcIixcImlkXCI6bnVsbCxcInN0YXRlXCI6e1widmFsdWVcIjpcInhbMSAtIDQwM11cIixcInZhcmlhYmxlXCI6XCJcIn19XSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MTUsXCJ3XCI6MTUsXCJ4XCI6Ny41LFwieVwiOjcuNX0sXCJjbGFzc1wiOlwicHJvY2Vzc1wiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDM4MDFfTEVGVFRPUklHSFRcIixcImxhYmVsXCI6XCJcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJSZXZpZXdlZDogSW5nYSwgQWxiZXJ0bywgMjAxNi0wMi0wNFwiLFwiRWRpdGVkOiBPcmxpYy1NaWxhY2ljLCBNYXJpamEsIDIwMTUtMTAtMTRcIixcIlRQNTMgKHA1MykgYmluZHMgYXQgbGVhc3QgdHdvIHA1MyByZXNwb25zZSBlbGVtZW50cyBpbiB0aGUgcHJvbW90ZXIgb2YgdGhlIENES04xQSAocDIxLCBXQUYxKSBnZW5lIChFbC1EZWlyeSBldCBhbC4gMTk5MywgRXNwaW5vc2EgZXQgYWwuIDIwMDMpLiBGb3JtYXRpb24gb2YgdGhlIGNvbXBsZXggb2YgVFA1MyBhbmQgWk5GMzg1QSAoSFpGKSBmYWNpbGl0YXRlcyBiaW5kaW5nIG9mIFRQNTMgdG8gdGhlIENES04xQSBwcm9tb3RlciAoRGFzIGV0IGFsLiAyMDA3KS5cIixcIkF1dGhvcmVkOiBPcmxpYy1NaWxhY2ljLCBNLCAyMDEzLTA3LTE1XCIsXCJSZXZpZXdlZDogU2FtYXJhaml3YSwgU2hhbWl0aCwgMjAxMy0wOS0wM1wiLFwiUmV2aWV3ZWQ6IFphY2NhcmEsIFNhcmEsIDIwMTYtMDItMDRcIixcIkF1dGhvcmVkOiBPcmxpYy1NaWxhY2ljLCBNYXJpamEsIDIwMTUtMTAtMTRcIl0sXCJkYXRhYmFzZUlkc1wiOntcInB1Ym1lZFwiOltcIjE0NTgwMzUxXCIsXCI4MjQyNzUyXCIsXCIxNzcxOTU0MVwiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtNjgwMzgwMVwiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcIlRQNTMgaW4gY29tcGxleCB3aXRoIFpORjM4NUEgYmluZHMgdGhlIENES04xQSBwcm9tb3RlclwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W10sXCJ0eXBlXCI6XCJCaW9jaGVtaWNhbFJlYWN0aW9uXCJ9LFwicGFyZW50XCI6XCJudWNsZW9wbGFzbVwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MTUsXCJ3XCI6MTUsXCJ4XCI6Ny41LFwieVwiOjcuNX0sXCJjbGFzc1wiOlwicHJvY2Vzc1wiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vaWRlbnRpZmllcnMub3JnL3JlYWN0b21lL1ItSFNBLTY4MDMzODhfTEVGVFRPUklHSFRcIixcImxhYmVsXCI6XCJcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJBdXRob3JlZDogT3JsaWMtTWlsYWNpYywgTWFyaWphLCAyMDE1LTEwLTE0XCIsXCJFZGl0ZWQ6IE9ybGljLU1pbGFjaWMsIE1hcmlqYSwgMjAxNS0xMC0xNFwiLFwiUmV2aWV3ZWQ6IEluZ2EsIEFsYmVydG8sIDIwMTYtMDItMDRcIixcIlJldmlld2VkOiBDb3F1ZXJldCwgTywgMjAwNi0xMC0wNiAwODo1OTowNlwiLFwiQmluZGluZyBvZiBUUDUzIChwNTMpIHRvIGl0cyByZXNwb25zZSBlbGVtZW50cyBpbiB0aGUgcHJvbW90ZXIgb2YgdGhlIENES04xQSAocDIxKSBnZW5lIHN0aW11bGF0ZXMgQ0RLTjFBIHRyYW5zY3JpcHRpb24gKEVsLURlaXJ5IGV0IGFsLiAxOTkzKS4gQmluZGluZyBvZiBaTkYzODVBIChIWkYpIHRvIHRoZSBETkEgYmluZGluZyBkb21haW4gb2YgVFA1MyBmYWNpbGl0YXRlcyBDREtOMUEgaW5kdWN0aW9uIGFuZCB0aGUgY29uc2VxdWVudCBjZWxsIGN5Y2xlIGFycmVzdCAoRGFzIGV0IGFsLiAyMDA3KS5cIixcIlJldmlld2VkOiBaYWNjYXJhLCBTYXJhLCAyMDE2LTAyLTA0XCIsXCJBdXRob3JlZDogTWF0dGhld3MsIEwsIDIwMDYtMDktMjkgMTM6NTQ6MjZcIl0sXCJkYXRhYmFzZUlkc1wiOntcInB1Ym1lZFwiOltcIjE3NzE5NTQxXCIsXCI4MjQyNzUyXCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzMzg4XCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwiVFA1MyBzdGltdWxhdGVzIENES04xQSAocDIxKSB0cmFuc2NyaXB0aW9uXCIsXCJzdGFuZGFyZE5hbWVcIjpcIlwiLFwic3lub255bXNcIjpbXSxcInR5cGVcIjpcIkJpb2NoZW1pY2FsUmVhY3Rpb25cIn0sXCJwYXJlbnRcIjpcIm51Y2xlb3BsYXNtXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjoxNSxcIndcIjoxNSxcInhcIjo3LjUsXCJ5XCI6Ny41fSxcImNsYXNzXCI6XCJwcm9jZXNzXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjgwMzcxOV9MRUZUVE9SSUdIVFwiLFwibGFiZWxcIjpcIlwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJldmlld2VkOiBJbmdhLCBBbGJlcnRvLCAyMDE2LTAyLTA0XCIsXCJSZXZpZXdlZDogWmFjY2FyYSwgU2FyYSwgMjAxNi0wMi0wNFwiLFwiWk5GMzg1QSAoSFpGKSBmb3JtcyBhIGNvbXBsZXggd2l0aCBUUDUzIChwNTMpLCBpbnRlcmFjdGluZyB3aXRoIHRoZSBETkEgYmluZGluZyBkb21haW4gb2YgVFA1My4gVGhlIGNvbXBsZXggb2YgVFA1MyBhbmQgWk5GMzg1QSBhc3NvY2lhdGVzIHdpdGggcDUzIHJlc3BvbnNlIGVsZW1lbnRzIG9mIGNlbGwgY3ljbGUgYXJyZXN0IGdlbmVzLCBzdWNoIGFzIENES04xQSAocDIxKSBhbmQgc3RpbXVsYXRlcyB0aGVpciB0cmFuc2NyaXB0aW9uLiBVbmRlciBwcm9sb25nZWQgc3RyZXNzLCBaTkYzODVBIHVuZGVyZ29lcyB1YmlxdWl0aW5hdGlvbiBhbmQgcHJvdGVhc29tZS1tZWRpYXRlZCBkZWdyYWRhdGlvbiwgd2hpY2ggY29pbmNpZGVzIHdpdGggZXhwcmVzc2lvbiBvZiBUUDUzLXJlZ3VsYXRlZCBwcm8tYXBvcHRvdGljIGdlbmVzIChEYXMgZXQgYWwuIDIwMDcpLlwiLFwiQXV0aG9yZWQ6IE9ybGljLU1pbGFjaWMsIE1hcmlqYSwgMjAxNS0xMC0xNFwiLFwiRWRpdGVkOiBPcmxpYy1NaWxhY2ljLCBNYXJpamEsIDIwMTUtMTAtMTRcIl0sXCJkYXRhYmFzZUlkc1wiOntcInB1Ym1lZFwiOltcIjE3NzE5NTQxXCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzNzE5XCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwiVFA1MyBiaW5kcyBaTkYzODVBXCIsXCJzdGFuZGFyZE5hbWVcIjpcIlwiLFwic3lub255bXNcIjpbXSxcInR5cGVcIjpcIkJpb2NoZW1pY2FsUmVhY3Rpb25cIn0sXCJwYXJlbnRcIjpcIm51Y2xlb3BsYXNtXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjoyNSxcIndcIjo0OCxcInhcIjoyNCxcInlcIjoxMi41fSxcImNsYXNzXCI6XCJtYWNyb21vbGVjdWxlXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1Byb3RlaW5fNzQ4MTZmZmM4YWY4ZTFkNDNiMTZiMTIyNmE1YzBkYjJcIixcImxhYmVsXCI6XCJaTkYzODVBXCIsXCJtZXRhZGF0YVwiOntcImNvbW1lbnRzXCI6W1wiUmVhY3RvbWUgREJfSUQ6IDY4MDM0MjFcIixcIlJFUExBQ0VEIGh0dHA6Ly93d3cucmVhY3RvbWUub3JnL2Jpb3BheC82NC80ODg4NyNQcm90ZWluMTA0NTdcIl0sXCJkYXRhYmFzZUlkc1wiOntcImhnbmMuc3ltYm9sXCI6W1wiWk5GMzg1QVwiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtNjgwMzQyMVwiXSxcInVuaXByb3RcIjpbXCJROTZQTTlcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJIWkZcIixcInN0YW5kYXJkTmFtZVwiOlwiWmluYyBmaW5nZXIgcHJvdGVpbiAzODVBXCIsXCJzeW5vbnltc1wiOltcIlppbmMgZmluZ2VyIHByb3RlaW4gMzg1QVwiLFwiWk5GMzg1QVwiLFwiWk5GMzg1XCIsXCJSZXRpbmFsIHppbmMgZmluZ2VyIHByb3RlaW5cIixcIkhlbWF0b3BvaWV0aWMgemluYyBmaW5nZXIgcHJvdGVpblwiLFwiUlpGXCIsXCJIWkZcIl0sXCJ0eXBlXCI6XCJQcm90ZWluXCJ9LFwicGFyZW50XCI6XCJudWNsZW9wbGFzbVwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzQsXCJ3XCI6ODksXCJ4XCI6NDIuNSxcInlcIjoxNX0sXCJjbGFzc1wiOlwiY29tcGxleFwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4X2U0YzU1NDc3MzE0YjNkNGJmZDRiOGY0N2NlZmYzZTE0XCIsXCJsYWJlbFwiOlwicC1TMTUsUzIwLVRQNTMgVGV0cmFtZXJcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJSRVBMQUNFRCBodHRwOi8vd3d3LnJlYWN0b21lLm9yZy9iaW9wYXgvNjQvNDg4ODcjQ29tcGxleDQ2MjVcIixcIlJlYWN0b21lIERCX0lEOiAzMjIyMTcxXCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJyZWFjdG9tZVwiOltcIlItSFNBLTMyMjIxNzFcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJwLVMxNSxTMjAtVFA1MyBUZXRyYW1lclwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W10sXCJ0eXBlXCI6XCJDb21wbGV4XCJ9LFwicGFyZW50XCI6XCJudWNsZW9wbGFzbVwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzAsXCJ3XCI6ODUsXCJ4XCI6NDIuNSxcInlcIjoxNX0sXCJjbGFzc1wiOlwibWFjcm9tb2xlY3VsZVwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluXzFiZGEyZDgwZDdmMjZlNzlmMWVjNDZiNjllYTYyODE0XzExOGZlYWE2NzA2MjlmOWUyMzkzYjE4MWNlODdlZWMyXCIsXCJsYWJlbFwiOlwiVFA1M1wiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJFUExBQ0VEIGh0dHA6Ly93d3cucmVhY3RvbWUub3JnL2Jpb3BheC82NC80ODg4NyNQcm90ZWluMTA0NDlcIixcIlJlYWN0b21lIERCX0lEOiA2OTY4M1wiXSxcImRhdGFiYXNlSWRzXCI6e1wiaGduYy5zeW1ib2xcIjpbXCJUUDUzXCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02OTY4M1wiXSxcInVuaXByb3RcIjpbXCJQMDQ2MzdcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJwLVMxNSxTMjAtVFA1M1wiLFwic3RhbmRhcmROYW1lXCI6XCJDZWxsdWxhciB0dW1vciBhbnRpZ2VuIHA1M1wiLFwic3lub255bXNcIjpbXCJUdW1vciBzdXBwcmVzc29yIHA1M1wiLFwiVFA1M1wiLFwiQW50aWdlbiBOWS1DTy0xM1wiLFwiUGhvc3Bob3Byb3RlaW4gcDUzXCIsXCJQNTNcIl0sXCJ0eXBlXCI6XCJQcm90ZWluXCJ9LFwicGFyZW50XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4X2U0YzU1NDc3MzE0YjNkNGJmZDRiOGY0N2NlZmYzZTE0XCIsXCJzdGF0ZVZhcmlhYmxlc1wiOlt7XCJjbGFzc1wiOlwic3RhdGUgdmFyaWFibGVcIixcImlkXCI6bnVsbCxcInN0YXRlXCI6e1widmFsdWVcIjpcIm9wc2VyLTUxXCIsXCJ2YXJpYWJsZVwiOlwiMjBcIn19LHtcImNsYXNzXCI6XCJzdGF0ZSB2YXJpYWJsZVwiLFwiaWRcIjpudWxsLFwic3RhdGVcIjp7XCJ2YWx1ZVwiOlwib3BzZXItNTFcIixcInZhcmlhYmxlXCI6XCIxNVwifX0se1wiY2xhc3NcIjpcInN0YXRlIHZhcmlhYmxlXCIsXCJpZFwiOm51bGwsXCJzdGF0ZVwiOntcInZhbHVlXCI6XCJ4WzEgLSAzOTNdXCIsXCJ2YXJpYWJsZVwiOlwiXCJ9fV0sXCJ1bml0c09mSW5mb3JtYXRpb25cIjpbXX19LHtcImRhdGFcIjp7XCJiYm94XCI6e1wiaFwiOjMwLFwid1wiOjUwLFwieFwiOjI1LFwieVwiOjE1fSxcImNsYXNzXCI6XCJudWNsZWljIGFjaWQgZmVhdHVyZVwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9EbmFfOTFiMGJiNDlmZWZlMzY3M2JhMjNkNDZkZGFjZWZjNTZcIixcImxhYmVsXCI6XCJDREtOMUFcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJSZWFjdG9tZSBEQl9JRDogMzc4NjI1NlwiLFwiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I0RuYTUwXCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJlbnNlbWJsXCI6W1wiRU5TRzAwMDAwMTI0NzYyXCJdLFwiaGduYy5zeW1ib2xcIjpbXCJDREtOMUFcIl0sXCJyZWFjdG9tZVwiOltcIlItSFNBLTM3ODYyNTZcIl0sXCJ1bmlwcm90XCI6W1wiUDM4OTM2XCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwicDIxIGdlbmVcIixcInN0YW5kYXJkTmFtZVwiOlwiXCIsXCJzeW5vbnltc1wiOltcIldBRjEgZ2VuZVwiLFwiQ0lQMSBnZW5lXCIsXCJDREtOMUEgZ2VuZVwiLFwiUElDMVwiLFwiQ0FQMjBcIixcIkNES04xQVwiLFwiV0FGMVwiLFwiTURBNlwiLFwiQ0RLTjFcIixcIlNESTFcIixcIkVOU0VNQkw6RU5TRzAwMDAwMTI0NzYyIENES04xQVwiXSxcInR5cGVcIjpcIkRuYVwifSxcInBhcmVudFwiOlwibnVjbGVvcGxhc21cIixcInN0YXRlVmFyaWFibGVzXCI6W10sXCJ1bml0c09mSW5mb3JtYXRpb25cIjpbe1wiY2xhc3NcIjpcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcImlkXCI6bnVsbCxcImxhYmVsXCI6e1widGV4dFwiOlwibXQ6RE5BXCJ9fV19fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjozMCxcIndcIjo0OCxcInhcIjoyNCxcInlcIjoxNX0sXCJjbGFzc1wiOlwibWFjcm9tb2xlY3VsZVwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluXzlkNjU2YjNlNDFiMGM2OWZmNDVhMzA1ZjA1OGIzY2VmXCIsXCJsYWJlbFwiOlwiQ0RLTjFBXCIsXCJtZXRhZGF0YVwiOntcImNvbW1lbnRzXCI6W1wiUmVhY3RvbWUgREJfSUQ6IDE4MjU4NVwiLFwiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I1Byb3RlaW4xMzkzXCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJoZ25jLnN5bWJvbFwiOltcIkNES04xQVwiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtMTgyNTg1XCJdLFwidW5pcHJvdFwiOltcIlAzODkzNlwiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcInAyMVwiLFwic3RhbmRhcmROYW1lXCI6XCJDeWNsaW4tZGVwZW5kZW50IGtpbmFzZSBpbmhpYml0b3IgMVwiLFwic3lub255bXNcIjpbXCJDREtOMUFcIixcIkNBUDIwXCIsXCJXQUYxXCIsXCJDREtOMVwiLFwiUElDMVwiLFwicDIxXCIsXCJNREEtNlwiLFwiTURBNlwiLFwiTWVsYW5vbWEgZGlmZmVyZW50aWF0aW9uLWFzc29jaWF0ZWQgcHJvdGVpbiA2XCIsXCJTREkxXCIsXCJDREstaW50ZXJhY3RpbmcgcHJvdGVpbiAxXCIsXCJDSVAxXCJdLFwidHlwZVwiOlwiUHJvdGVpblwifSxcInBhcmVudFwiOlwibnVjbGVvcGxhc21cIixcInN0YXRlVmFyaWFibGVzXCI6W3tcImNsYXNzXCI6XCJzdGF0ZSB2YXJpYWJsZVwiLFwiaWRcIjpudWxsLFwic3RhdGVcIjp7XCJ2YWx1ZVwiOlwieFsyIC0gMTY0XVwiLFwidmFyaWFibGVcIjpcIlwifX1dLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjozNCxcIndcIjo4OSxcInhcIjo0Mi41LFwieVwiOjE1fSxcImNsYXNzXCI6XCJjb21wbGV4XCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfM2I5YmRlMjFlOGYxMzA4NzBiOTFmNzNhYzMxZGNhYmFcIixcImxhYmVsXCI6XCJwLVMxNSxTMjAtVFA1MyBUZXRyYW1lcjpaTkYzODVBXCIsXCJtZXRhZGF0YVwiOntcImNvbW1lbnRzXCI6W1wiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I0NvbXBsZXg0NjMwXCIsXCJSZWFjdG9tZSBEQl9JRDogNjgwMzcxOFwiXSxcImRhdGFiYXNlSWRzXCI6e1wicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzNzE4XCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwicC1TMTUsUzIwLVRQNTMgVGV0cmFtZXI6Wk5GMzg1QVwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W10sXCJ0eXBlXCI6XCJDb21wbGV4XCJ9LFwicGFyZW50XCI6XCJudWNsZW9wbGFzbVwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzAsXCJ3XCI6ODUsXCJ4XCI6NDIuNSxcInlcIjoxNX0sXCJjbGFzc1wiOlwibWFjcm9tb2xlY3VsZVwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluXzFiZGEyZDgwZDdmMjZlNzlmMWVjNDZiNjllYTYyODE0XzhmM2NlOWE1OTRhYzI0OWE2MjJhNDhiMGY1M2YwYjI5XCIsXCJsYWJlbFwiOlwiVFA1M1wiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJFUExBQ0VEIGh0dHA6Ly93d3cucmVhY3RvbWUub3JnL2Jpb3BheC82NC80ODg4NyNQcm90ZWluMTA0NDlcIixcIlJlYWN0b21lIERCX0lEOiA2OTY4M1wiXSxcImRhdGFiYXNlSWRzXCI6e1wiaGduYy5zeW1ib2xcIjpbXCJUUDUzXCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02OTY4M1wiXSxcInVuaXByb3RcIjpbXCJQMDQ2MzdcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJwLVMxNSxTMjAtVFA1M1wiLFwic3RhbmRhcmROYW1lXCI6XCJDZWxsdWxhciB0dW1vciBhbnRpZ2VuIHA1M1wiLFwic3lub255bXNcIjpbXCJUdW1vciBzdXBwcmVzc29yIHA1M1wiLFwiVFA1M1wiLFwiQW50aWdlbiBOWS1DTy0xM1wiLFwiUGhvc3Bob3Byb3RlaW4gcDUzXCIsXCJQNTNcIl0sXCJ0eXBlXCI6XCJQcm90ZWluXCJ9LFwicGFyZW50XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzNiOWJkZTIxZThmMTMwODcwYjkxZjczYWMzMWRjYWJhXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOlt7XCJjbGFzc1wiOlwic3RhdGUgdmFyaWFibGVcIixcImlkXCI6bnVsbCxcInN0YXRlXCI6e1widmFsdWVcIjpcIm9wc2VyLTUxXCIsXCJ2YXJpYWJsZVwiOlwiMjBcIn19LHtcImNsYXNzXCI6XCJzdGF0ZSB2YXJpYWJsZVwiLFwiaWRcIjpudWxsLFwic3RhdGVcIjp7XCJ2YWx1ZVwiOlwib3BzZXItNTFcIixcInZhcmlhYmxlXCI6XCIxNVwifX0se1wiY2xhc3NcIjpcInN0YXRlIHZhcmlhYmxlXCIsXCJpZFwiOm51bGwsXCJzdGF0ZVwiOntcInZhbHVlXCI6XCJ4WzEgLSAzOTNdXCIsXCJ2YXJpYWJsZVwiOlwiXCJ9fV0sXCJ1bml0c09mSW5mb3JtYXRpb25cIjpbXX19LHtcImRhdGFcIjp7XCJiYm94XCI6e1wiaFwiOjI1LFwid1wiOjQ4LFwieFwiOjI0LFwieVwiOjEyLjV9LFwiY2xhc3NcIjpcIm1hY3JvbW9sZWN1bGVcIixcImNsb25lbWFya2VyXCI6ZmFsc2UsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvUHJvdGVpbl83NDgxNmZmYzhhZjhlMWQ0M2IxNmIxMjI2YTVjMGRiMl84ZjNjZTlhNTk0YWMyNDlhNjIyYTQ4YjBmNTNmMGIyOVwiLFwibGFiZWxcIjpcIlpORjM4NUFcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJSZWFjdG9tZSBEQl9JRDogNjgwMzQyMVwiLFwiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I1Byb3RlaW4xMDQ1N1wiXSxcImRhdGFiYXNlSWRzXCI6e1wiaGduYy5zeW1ib2xcIjpbXCJaTkYzODVBXCJdLFwicmVhY3RvbWVcIjpbXCJSLUhTQS02ODAzNDIxXCJdLFwidW5pcHJvdFwiOltcIlE5NlBNOVwiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcIkhaRlwiLFwic3RhbmRhcmROYW1lXCI6XCJaaW5jIGZpbmdlciBwcm90ZWluIDM4NUFcIixcInN5bm9ueW1zXCI6W1wiWmluYyBmaW5nZXIgcHJvdGVpbiAzODVBXCIsXCJaTkYzODVBXCIsXCJaTkYzODVcIixcIlJldGluYWwgemluYyBmaW5nZXIgcHJvdGVpblwiLFwiSGVtYXRvcG9pZXRpYyB6aW5jIGZpbmdlciBwcm90ZWluXCIsXCJSWkZcIixcIkhaRlwiXSxcInR5cGVcIjpcIlByb3RlaW5cIn0sXCJwYXJlbnRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfM2I5YmRlMjFlOGYxMzA4NzBiOTFmNzNhYzMxZGNhYmFcIixcInN0YXRlVmFyaWFibGVzXCI6W10sXCJ1bml0c09mSW5mb3JtYXRpb25cIjpbXX19LHtcImRhdGFcIjp7XCJiYm94XCI6e1wiaFwiOjM0LFwid1wiOjg5LFwieFwiOjQyLjUsXCJ5XCI6MTV9LFwiY2xhc3NcIjpcImNvbXBsZXhcIixcImNsb25lbWFya2VyXCI6ZmFsc2UsXCJpZFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8yOTNkNjI3ZDhmOWYyMmI5ZTcyZWJjZDg2OTA5ZDMzNFwiLFwibGFiZWxcIjpcInAtUzE1LFMyMC1UUDUzIFRldHJhbWVyOlpORjM4NUE6Q0RLTjFBIEdlbmVcIixcIm1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJSRVBMQUNFRCBodHRwOi8vd3d3LnJlYWN0b21lLm9yZy9iaW9wYXgvNjQvNDg4ODcjQ29tcGxleDQ2MzFcIixcIlJlYWN0b21lIERCX0lEOiA2ODAzODAyXCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJyZWFjdG9tZVwiOltcIlItSFNBLTY4MDM4MDJcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJwLVMxNSxTMjAtVFA1MyBUZXRyYW1lcjpaTkYzODVBOkNES04xQSBHZW5lXCIsXCJzdGFuZGFyZE5hbWVcIjpcIlwiLFwic3lub255bXNcIjpbXSxcInR5cGVcIjpcIkNvbXBsZXhcIn0sXCJwYXJlbnRcIjpcIm51Y2xlb3BsYXNtXCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W119fSx7XCJkYXRhXCI6e1wiYmJveFwiOntcImhcIjozMCxcIndcIjo4NSxcInhcIjo0Mi41LFwieVwiOjE1fSxcImNsYXNzXCI6XCJtYWNyb21vbGVjdWxlXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL1Byb3RlaW5fMWJkYTJkODBkN2YyNmU3OWYxZWM0NmI2OWVhNjI4MTRfZTA4NGRiNDIxODk5NWM2NzEzMjY1ZmVjN2RlNjM5OGNcIixcImxhYmVsXCI6XCJUUDUzXCIsXCJtZXRhZGF0YVwiOntcImNvbW1lbnRzXCI6W1wiUkVQTEFDRUQgaHR0cDovL3d3dy5yZWFjdG9tZS5vcmcvYmlvcGF4LzY0LzQ4ODg3I1Byb3RlaW4xMDQ0OVwiLFwiUmVhY3RvbWUgREJfSUQ6IDY5NjgzXCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJoZ25jLnN5bWJvbFwiOltcIlRQNTNcIl0sXCJyZWFjdG9tZVwiOltcIlItSFNBLTY5NjgzXCJdLFwidW5pcHJvdFwiOltcIlAwNDYzN1wiXX0sXCJkYXRhc291cmNlXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9yZWFjdG9tZVwiLFwiZGlzcGxheU5hbWVcIjpcInAtUzE1LFMyMC1UUDUzXCIsXCJzdGFuZGFyZE5hbWVcIjpcIkNlbGx1bGFyIHR1bW9yIGFudGlnZW4gcDUzXCIsXCJzeW5vbnltc1wiOltcIlR1bW9yIHN1cHByZXNzb3IgcDUzXCIsXCJUUDUzXCIsXCJBbnRpZ2VuIE5ZLUNPLTEzXCIsXCJQaG9zcGhvcHJvdGVpbiBwNTNcIixcIlA1M1wiXSxcInR5cGVcIjpcIlByb3RlaW5cIn0sXCJwYXJlbnRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0NvbXBsZXhfMjkzZDYyN2Q4ZjlmMjJiOWU3MmViY2Q4NjkwOWQzMzRcIixcInN0YXRlVmFyaWFibGVzXCI6W3tcImNsYXNzXCI6XCJzdGF0ZSB2YXJpYWJsZVwiLFwiaWRcIjpudWxsLFwic3RhdGVcIjp7XCJ2YWx1ZVwiOlwib3BzZXItNTFcIixcInZhcmlhYmxlXCI6XCIyMFwifX0se1wiY2xhc3NcIjpcInN0YXRlIHZhcmlhYmxlXCIsXCJpZFwiOm51bGwsXCJzdGF0ZVwiOntcInZhbHVlXCI6XCJvcHNlci01MVwiLFwidmFyaWFibGVcIjpcIjE1XCJ9fSx7XCJjbGFzc1wiOlwic3RhdGUgdmFyaWFibGVcIixcImlkXCI6bnVsbCxcInN0YXRlXCI6e1widmFsdWVcIjpcInhbMSAtIDM5M11cIixcInZhcmlhYmxlXCI6XCJcIn19XSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzAsXCJ3XCI6NTAsXCJ4XCI6MjUsXCJ5XCI6MTV9LFwiY2xhc3NcIjpcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL0RuYV85MWIwYmI0OWZlZmUzNjczYmEyM2Q0NmRkYWNlZmM1Nl9lMDg0ZGI0MjE4OTk1YzY3MTMyNjVmZWM3ZGU2Mzk4Y1wiLFwibGFiZWxcIjpcIkNES04xQVwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJlYWN0b21lIERCX0lEOiAzNzg2MjU2XCIsXCJSRVBMQUNFRCBodHRwOi8vd3d3LnJlYWN0b21lLm9yZy9iaW9wYXgvNjQvNDg4ODcjRG5hNTBcIl0sXCJkYXRhYmFzZUlkc1wiOntcImVuc2VtYmxcIjpbXCJFTlNHMDAwMDAxMjQ3NjJcIl0sXCJoZ25jLnN5bWJvbFwiOltcIkNES04xQVwiXSxcInJlYWN0b21lXCI6W1wiUi1IU0EtMzc4NjI1NlwiXSxcInVuaXByb3RcIjpbXCJQMzg5MzZcIl19LFwiZGF0YXNvdXJjZVwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvcmVhY3RvbWVcIixcImRpc3BsYXlOYW1lXCI6XCJwMjEgZ2VuZVwiLFwic3RhbmRhcmROYW1lXCI6XCJcIixcInN5bm9ueW1zXCI6W1wiV0FGMSBnZW5lXCIsXCJDSVAxIGdlbmVcIixcIkNES04xQSBnZW5lXCIsXCJQSUMxXCIsXCJDQVAyMFwiLFwiQ0RLTjFBXCIsXCJXQUYxXCIsXCJNREE2XCIsXCJDREtOMVwiLFwiU0RJMVwiLFwiRU5TRU1CTDpFTlNHMDAwMDAxMjQ3NjIgQ0RLTjFBXCJdLFwidHlwZVwiOlwiRG5hXCJ9LFwicGFyZW50XCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Db21wbGV4XzI5M2Q2MjdkOGY5ZjIyYjllNzJlYmNkODY5MDlkMzM0XCIsXCJzdGF0ZVZhcmlhYmxlc1wiOltdLFwidW5pdHNPZkluZm9ybWF0aW9uXCI6W3tcImNsYXNzXCI6XCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXCJpZFwiOm51bGwsXCJsYWJlbFwiOntcInRleHRcIjpcIm10OkROQVwifX1dfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MjUsXCJ3XCI6NDgsXCJ4XCI6MjQsXCJ5XCI6MTIuNX0sXCJjbGFzc1wiOlwibWFjcm9tb2xlY3VsZVwiLFwiY2xvbmVtYXJrZXJcIjpmYWxzZSxcImlkXCI6XCJodHRwOi8vcGF0aHdheWNvbW1vbnMub3JnL3BjMi9Qcm90ZWluXzc0ODE2ZmZjOGFmOGUxZDQzYjE2YjEyMjZhNWMwZGIyX2UwODRkYjQyMTg5OTVjNjcxMzI2NWZlYzdkZTYzOThjXCIsXCJsYWJlbFwiOlwiWk5GMzg1QVwiLFwibWV0YWRhdGFcIjp7XCJjb21tZW50c1wiOltcIlJlYWN0b21lIERCX0lEOiA2ODAzNDIxXCIsXCJSRVBMQUNFRCBodHRwOi8vd3d3LnJlYWN0b21lLm9yZy9iaW9wYXgvNjQvNDg4ODcjUHJvdGVpbjEwNDU3XCJdLFwiZGF0YWJhc2VJZHNcIjp7XCJoZ25jLnN5bWJvbFwiOltcIlpORjM4NUFcIl0sXCJyZWFjdG9tZVwiOltcIlItSFNBLTY4MDM0MjFcIl0sXCJ1bmlwcm90XCI6W1wiUTk2UE05XCJdfSxcImRhdGFzb3VyY2VcIjpcImh0dHA6Ly9wYXRod2F5Y29tbW9ucy5vcmcvcGMyL3JlYWN0b21lXCIsXCJkaXNwbGF5TmFtZVwiOlwiSFpGXCIsXCJzdGFuZGFyZE5hbWVcIjpcIlppbmMgZmluZ2VyIHByb3RlaW4gMzg1QVwiLFwic3lub255bXNcIjpbXCJaaW5jIGZpbmdlciBwcm90ZWluIDM4NUFcIixcIlpORjM4NUFcIixcIlpORjM4NVwiLFwiUmV0aW5hbCB6aW5jIGZpbmdlciBwcm90ZWluXCIsXCJIZW1hdG9wb2lldGljIHppbmMgZmluZ2VyIHByb3RlaW5cIixcIlJaRlwiLFwiSFpGXCJdLFwidHlwZVwiOlwiUHJvdGVpblwifSxcInBhcmVudFwiOlwiaHR0cDovL3BhdGh3YXljb21tb25zLm9yZy9wYzIvQ29tcGxleF8yOTNkNjI3ZDhmOWYyMmI5ZTcyZWJjZDg2OTA5ZDMzNFwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX0se1wiZGF0YVwiOntcImJib3hcIjp7XCJoXCI6MzgsXCJ3XCI6NTgsXCJ4XCI6MjUsXCJ5XCI6MTV9LFwiY2xhc3NcIjpcImNvbXBhcnRtZW50XCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcImN5dG9zb2xcIixcImxhYmVsXCI6XCJjeXRvc29sXCIsXCJtZXRhZGF0YVwiOnt9LFwicGFyZW50XCI6XCJcIixcInN0YXRlVmFyaWFibGVzXCI6W10sXCJ1bml0c09mSW5mb3JtYXRpb25cIjpbXX19LHtcImRhdGFcIjp7XCJiYm94XCI6e1wiaFwiOjM4LFwid1wiOjkzLFwieFwiOjQyLjUsXCJ5XCI6MTV9LFwiY2xhc3NcIjpcImNvbXBhcnRtZW50XCIsXCJjbG9uZW1hcmtlclwiOmZhbHNlLFwiaWRcIjpcIm51Y2xlb3BsYXNtXCIsXCJsYWJlbFwiOlwibnVjbGVvcGxhc21cIixcIm1ldGFkYXRhXCI6e30sXCJwYXJlbnRcIjpcIlwiLFwic3RhdGVWYXJpYWJsZXNcIjpbXSxcInVuaXRzT2ZJbmZvcm1hdGlvblwiOltdfX1dLFwicGF0aHdheU1ldGFkYXRhXCI6e1wiY29tbWVudHNcIjpbXCJCb3RoIHA1My1pbmRlcGVuZGVudCBhbmQgcDUzLWRlcGVuZGVudCBtZWNoYW5pc21zIG9mIGluZHVjdGlvbiBvZiBwMjEgbVJOQSBoYXZlIGJlZW4gZGVtb25zdHJhdGVkLiBwMjEgaXMgdHJhbnNjcmlwdGlvbmFsbHkgYWN0aXZhdGVkIGJ5IHA1MyBhZnRlciBETkEgZGFtYWdlIChlbC1EZWlyeSBldCBhbC4sIDE5OTMpLlwiXSxcImRhdGFTb3VyY2VcIjpbXCJSZWFjdG9tZVwiXSxcIm9yZ2FuaXNtXCI6W1wiSG9tbyBzYXBpZW5zXCJdLFwidGl0bGVcIjpbXCJUcmFuc2NyaXB0aW9uYWwgYWN0aXZhdGlvbiBvZiBjZWxsIGN5Y2xlIGluaGliaXRvciBwMjFcIl0sXCJ1cmlcIjpcImh0dHA6Ly9pZGVudGlmaWVycy5vcmcvcmVhY3RvbWUvUi1IU0EtNjk4OTVcIn19fV1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGFpbnQvZGVtby1wYXRod2F5LXJlc3VsdHMuanNvblxuLy8gbW9kdWxlIGlkID0gNDkxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IExvYWRlciA9IHJlcXVpcmUoJ3JlYWN0LWxvYWRlcicpO1xyXG5jb25zdCBjbGFzc05hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xyXG5cclxuY29uc3QgQ3l0b3NjYXBlU2VydmljZSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jeS8nKTtcclxuY29uc3QgeyBTZXJ2ZXJBUEkgfSA9IHJlcXVpcmUoJy4uLy4uL3NlcnZpY2VzLycpO1xyXG5cclxuY29uc3QgUGF0aHdheXNUb29sYmFyID0gcmVxdWlyZSgnLi9wYXRod2F5cy10b29sYmFyJyk7XHJcbmNvbnN0IHsgUGNMb2dvTGluaywgQ3l0b3NjYXBlTmV0d29yayB9ID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2NvbXBvbmVudHMvJyk7XHJcblxyXG5jb25zdCBQYXRod2F5ID0gcmVxdWlyZSgnLi4vLi4vLi4vbW9kZWxzL3BhdGh3YXkvcGF0aHdheS1tb2RlbCcpO1xyXG5cclxuY29uc3QgeyBzdHlsZXNoZWV0LCBiaW5kQ3lFdmVudHMsIFBBVEhXQVlTX0xBWU9VVF9PUFRTIH0gPSByZXF1aXJlKCcuL2N5Jyk7XHJcblxyXG5jb25zdCB7IFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vdXRpbCcpO1xyXG5jb25zdCB7IEVycm9yTWVzc2FnZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2NvbXBvbmVudHMvZXJyb3ItbWVzc2FnZScpO1xyXG5jb25zdCB7IENvbnRyaWJ1dGUgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzL2NvbnRyaWJ1dGUnKTtcclxuY29uc3QgUGF0aHdheVRpdGxlID0gcmVxdWlyZSgnLi9wYXRod2F5LXRpdGxlJyk7XHJcblxyXG5jbGFzcyBQYXRod2F5cyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBjeVNydjogbmV3IEN5dG9zY2FwZVNlcnZpY2UoeyBzdHlsZTogc3R5bGVzaGVldCwgb25Nb3VudDogYmluZEN5RXZlbnRzIH0pLFxyXG4gICAgICBwYXRod2F5OiBuZXcgUGF0aHdheSgpLFxyXG4gICAgICBhY3RpdmVNZW51OiAnY2xvc2VNZW51JyxcclxuICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgbmV0d29ya0VtcHR5OiBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiggcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyApe1xyXG4gICAgICB0aGlzLnN0YXRlLmN5U3J2LmdldFByb21pc2UoKS50aGVuKGN5ID0+IHdpbmRvdy5jeSA9IGN5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIG9uTW91bnQgcHJvcCBwYXNzZWQgdG8gQ3l0b3NjYXBlTmV0d29ya1xyXG4gIC8vIGNhbGxlZCBhZnRlciBDeXRvc2NhcGVOZXR3b3JrIGhhcyBtb3VudGVkXHJcbiAgbG9hZFBhdGh3YXkoKXtcclxuICAgIGxldCB7IHBhdGh3YXksIGN5U3J2fSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgeyBhcGlPcHRzIH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIGxldCBpbml0aWFsaXplQ3l0b3NjYXBlID0gcGF0aHdheSA9PiB7XHJcblxyXG4gICAgICBsZXQgY3kgPSBjeVNydi5nZXQoKTtcclxuICAgICAgY3kucmVtb3ZlKCcqJyk7XHJcbiAgICAgIGN5LmFkZCggcGF0aHdheS5jeUpzb24oKSApO1xyXG5cclxuICAgICAgbGV0IGxheW91dCA9IGN5LmxheW91dChQQVRIV0FZU19MQVlPVVRfT1BUUyk7XHJcbiAgICAgIGxheW91dC5vbignbGF5b3V0c3RvcCcsICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgcGF0aHdheTogcGF0aHdheSxcclxuICAgICAgICAgIGVycm9yOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBsYXlvdXQucnVuKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIFNlcnZlckFQSS5nZXRBUElSZXNvdXJjZSggYXBpT3B0cyApLnRoZW4oIHBhdGh3YXlKU09OID0+IHtcclxuICAgICAgaWYoIHBhdGh3YXlKU09OLmdyYXBoLm5vZGVzLmxlbmd0aCA9PT0gMCApe1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICBuZXR3b3JrRW1wdHk6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgcGF0aHdheS5sb2FkKCBwYXRod2F5SlNPTiApO1xyXG4gICAgICBpbml0aWFsaXplQ3l0b3NjYXBlKCBwYXRod2F5ICk7XHJcbiAgICB9KVxyXG4gICAgLmNhdGNoKCBlID0+IHRoaXMuc2V0U3RhdGUoeyBlcnJvcjogZSB9KSk7XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgeyBsb2FkaW5nLCBwYXRod2F5LCBjeVNydiwgbmV0d29ya0VtcHR5LCBlcnJvciB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgZG93bmxvYWRPcHRzIH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIGxldCBlcnJvck1lc3NhZ2U7XHJcbiAgICBpZiggbmV0d29ya0VtcHR5ICkge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBoKEVycm9yTWVzc2FnZSwgeyB0aXRsZTogJ05vIHBhdGh3YXkgZGF0YSBhdmFpbGFibGUuIFBsZWFzZSB2aWV3IGFub3RoZXIgcmVzdWx0JywgZm9vdGVyOiBudWxsIH0gKTtcclxuICAgIH0gZWxzZSBpZiggZXJyb3IgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IgKSB7XHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IGgoIEVycm9yTWVzc2FnZSwgeyB0aXRsZTogJ1RoaXMgaXMgdGFraW5nIGxvbmdlciB0aGF0IHdlIGV4cGVjdGVkJywgYm9keTogJ1RyeSBhZ2FpbiBsYXRlci4nLCBsb2dvOiB0cnVlIH0gKTtcclxuICAgIH0gZWxzZSBpZiggZXJyb3IgKSB7XHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IGgoIEVycm9yTWVzc2FnZSwgeyBsb2dvOiB0cnVlIH0gKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYXBwQmFyID0gaCgnZGl2LmFwcC1iYXInLCBbXHJcbiAgICAgIGgoJ2Rpdi5hcHAtYmFyLWJyYW5kaW5nJywgW1xyXG4gICAgICAgIGgoUGNMb2dvTGluayksXHJcbiAgICAgICAgaChQYXRod2F5VGl0bGUsIHsgcGF0aHdheSB9KVxyXG4gICAgICBdKSxcclxuICAgICAgaChQYXRod2F5c1Rvb2xiYXIsIHsgY3lTcnYsIHBhdGh3YXksIGRvd25sb2FkT3B0cyB9KSxcclxuICAgICAgaChDb250cmlidXRlLCB7IHRleHQ6ICdBZGQgbXkgcGF0aHdheScgfSlcclxuICAgIF0pO1xyXG5cclxuICAgIGxldCBjb250ZW50ID0gIWVycm9yTWVzc2FnZSA/IFtcclxuICAgICAgaChMb2FkZXIsIHsgbG9hZGVkOiAhbG9hZGluZywgb3B0aW9uczogeyBsZWZ0OiAnNTAlJywgY29sb3I6ICcjMTZhMDg1JyB9fSwgWyBhcHBCYXIgXSksXHJcbiAgICAgIGgoQ3l0b3NjYXBlTmV0d29yaywge1xyXG4gICAgICAgIGN5U3J2LFxyXG4gICAgICAgIG9uTW91bnQ6ICgpID0+IHRoaXMubG9hZFBhdGh3YXkoKSxcclxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoe1xyXG4gICAgICAgICduZXR3b3JrLWxvYWRpbmcnOiBsb2FkaW5nXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgIF0gOiBbIGVycm9yTWVzc2FnZSBdO1xyXG5cclxuICAgIHJldHVybiBoKCdkaXYucGF0aHdheXMnLCBjb250ZW50KTtcclxuICB9XHJcblxyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXRod2F5cztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL2luZGV4LmpzIiwiXHJcbmNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgUmVhY3REb20gPSByZXF1aXJlKCdyZWFjdC1kb20nKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcblxyXG5jb25zdCBQb3BvdmVyID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2NvbXBvbmVudHMvcG9wb3ZlcicpO1xyXG5jb25zdCBJbmZvTWVudSA9IHJlcXVpcmUoJy4vbWVudXMvbmV0d29yay1pbmZvLW1lbnUnKTtcclxuY29uc3QgRmlsZURvd25sb2FkTWVudSA9IHJlcXVpcmUoJy4vbWVudXMvZmlsZS1kb3dubG9hZC1tZW51Jyk7XHJcbmNvbnN0IEljb25CdXR0b24gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy9pY29uLWJ1dHRvbicpO1xyXG5cclxuY29uc3QgeyBmaXQsIGV4cGFuZENvbGxhcHNlLCBsYXlvdXQsIHNlYXJjaE5vZGVzIH0gPSByZXF1aXJlKCcuL2N5Jyk7XHJcblxyXG5jbGFzcyBQYXRod2F5c1Rvb2xiYXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHNlYXJjaFZhbHVlOiAnJ1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU5vZGVTZWFyY2hDaGFuZ2Uoc2VhcmNoVmFsKXtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsIH0sICgpID0+IHNlYXJjaE5vZGVzKCB0aGlzLnByb3BzLmN5U3J2LmdldCgpLCBzZWFyY2hWYWwpKTtcclxuICB9XHJcblxyXG4gIGZvY3VzTm9kZVNlYXJjaCgpe1xyXG4gICAgUmVhY3REb20uZmluZERPTU5vZGUodGhpcykucXVlcnlTZWxlY3RvcignLmVsZW1lbnQtc2VhcmNoLWlucHV0JykuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHsgY3lTcnYsIHBhdGh3YXksIGRvd25sb2FkT3B0cyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCB7IHNlYXJjaFZhbHVlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IGN5ID0gY3lTcnYuZ2V0KCk7XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5hcHAtdG9vbGJhcicsIFtcclxuICAgICAgaChQb3BvdmVyLCB7XHJcbiAgICAgICAgdGlwcHk6IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcclxuICAgICAgICAgIGh0bWw6IGgoSW5mb01lbnUsIHsga2V5OiAnaW5mb01lbnUnLCBpbmZvTGlzdDogcGF0aHdheS5jb21tZW50cygpIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBbXHJcbiAgICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0V4dHJhIEluZm9ybWF0aW9uJyxcclxuICAgICAgICAgIGljb246ICdpbmZvJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgIF0pLFxyXG4gICAgICBoKFBvcG92ZXIsIHtcclxuICAgICAgICB0aXBweToge1xyXG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgaHRtbDogaChGaWxlRG93bmxvYWRNZW51LCB7IGtleTogJ2Rvd25sb2FkTWVudScsIGN5U3J2LCBmaWxlTmFtZTogcGF0aHdheS5uYW1lKCksIHVyaTogcGF0aHdheS51cmkoKSwgZG93bmxvYWRPcHRzIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBbXHJcbiAgICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Rvd25sb2FkcycsXHJcbiAgICAgICAgICBpY29uOiAnZmlsZV9kb3dubG9hZCdcclxuICAgICAgICB9KVxyXG4gICAgICBdKSxcclxuICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdFeHBhbmQvQ29sbGFwc2UgYWxsIGNvbXBsZXggbm9kZXMnLFxyXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IGV4cGFuZENvbGxhcHNlKCBjeSApLFxyXG4gICAgICAgIGljb246ICdzZWxlY3RfYWxsJ1xyXG4gICAgICB9KSxcclxuICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdGaXQgcGF0aHdheSB0byBzY3JlZW4nLFxyXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IGZpdCggY3kgKSxcclxuICAgICAgICBpY29uOiAnZnVsbHNjcmVlbidcclxuICAgICAgfSksXHJcbiAgICAgIGgoSWNvbkJ1dHRvbiwge1xyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmVzZXQgcGF0aHdheSBhcnJhbmdlbWVudCcsXHJcbiAgICAgICAgb25DbGljazogKCkgPT4gbGF5b3V0KCBjeSApLFxyXG4gICAgICAgIGljb246ICdyZXBsYXknXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKCdkaXYuZWxlbWVudC1zZWFyY2gnLCBbXHJcbiAgICAgICAgaCgnaW5wdXQuZWxlbWVudC1zZWFyY2gtaW5wdXQuaW5wdXQtcm91bmQuaW5wdXQtam9pbmVkJywge1xyXG4gICAgICAgICAgdmFsdWU6IHNlYXJjaFZhbHVlLFxyXG4gICAgICAgICAgb25DaGFuZ2U6IGUgPT4gdGhpcy5oYW5kbGVOb2RlU2VhcmNoQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKSxcclxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnU2VhcmNoJyxcclxuICAgICAgICB9KSxcclxuICAgICAgICBoKCdidXR0b24uZWxlbWVudC1zZWFyY2gtY2xlYXInLCB7XHJcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTm9kZVNlYXJjaENoYW5nZSgnJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNOb2RlU2VhcmNoKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgW1xyXG4gICAgICAgICAgaCgnaS5tYXRlcmlhbC1pY29ucycsICdjbG9zZScpXHJcbiAgICAgICAgXSlcclxuICAgICAgXSlcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXRod2F5c1Rvb2xiYXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9wYXRod2F5cy10b29sYmFyLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuXHJcblxyXG5jbGFzcyBOZXR3b3JrSW5mb01lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHsgaW5mb0xpc3QgfSA9IHRoaXMucHJvcHM7XHJcblxyXG4gICAgY29uc3Qgbm9JbmZvTWVzc2FnZSA9IFtcclxuICAgICAgaCgncCcsIHsga2V5OiAxIH0sICdObyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHdhcyBmb3VuZCBmb3IgdGhpcyBuZXR3b3JrIScpLFxyXG4gICAgICBoKCdwJywgeyBrZXk6IDIgfSwgJ0FkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5ldHdvcmsgaXMgbm9ybWFsbHkgZm91bmQgaGVyZSwgYnV0IHdlIGNvdWxkblxcJ3QgZmluZCBhbnkgZm9yIHRoaXMgb25lLicpXHJcbiAgICBdO1xyXG5cclxuICAgIGNvbnN0IGNvbW1lbnRzID0gaW5mb0xpc3QubWFwKCAoIGNvbW1lbnQsIGtleSApID0+IGgoJ3AnLCB7IGtleSB9LCBjb21tZW50LnJlcGxhY2UoLzxwPi9nLCAnICcpKSk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgaCgnZGl2LmluZm8tbWVudScsIFtcclxuICAgICAgICBjb21tZW50cy5sZW5ndGggPiAwID8gY29tbWVudHMgOiBub0luZm9NZXNzYWdlXHJcbiAgICAgIF0pXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBOZXR3b3JrSW5mb01lbnU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9tZW51cy9uZXR3b3JrLWluZm8tbWVudS5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IHNhdmVBcyA9IHJlcXVpcmUoJ2ZpbGUtc2F2ZXInKS5zYXZlQXM7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgTG9hZGVyID0gcmVxdWlyZSgncmVhY3QtbG9hZGVyJyk7XHJcblxyXG5jb25zdCB7IFNlcnZlckFQSSB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vc2VydmljZXMnKTtcclxuXHJcbmNvbnN0IHBjRG93bmxvYWRUeXBlcyA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbW1vbi9wYy1kb3dubG9hZC10eXBlcycpO1xyXG5cclxuXHJcbmNsYXNzIEZpbGVEb3dubG9hZE1lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBkb3dubG9hZFR5cGVzOiBwY0Rvd25sb2FkVHlwZXMsXHJcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICBlcnJvcjogbnVsbFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkRnJvbURpc3BsYXlOYW1lKGRpc3BsYXlOYW1lKSB7XHJcbiAgICBsZXQgeyBjeVNydiwgZmlsZU5hbWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgeyBkb3dubG9hZFR5cGVzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IG9wdGlvbiA9IF8uZmluZChkb3dubG9hZFR5cGVzLCBbJ2Rpc3BsYXlOYW1lJywgZGlzcGxheU5hbWVdKTtcclxuICAgIGxldCB7IHBjMk5hbWUsIGV4dCwgdHlwZSB9ID0gb3B0aW9uO1xyXG5cclxuICAgIGlmICh0eXBlID09PSAncG5nJykge1xyXG4gICAgICAvLyBUaGUgc2V0VGltZW91dCB0cmlnZ2VycyBhIHJlcmVuZGVyIHNvIHRoYXQgdGhlIGxvYWRlciBhcHBlYXJzIG9uIHNjcmVlblxyXG4gICAgICB0aGlzLnNldFN0YXRlKCB7IGxvYWRpbmc6IHRydWUgfSAsICgpID0+IHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHNhdmVBcyhjeVNydi5nZXQoKS5wbmcoe1xyXG4gICAgICAgICAgICBvdXRwdXQ6ICdibG9iJyxcclxuICAgICAgICAgICAgc2NhbGU6IDIsXHJcbiAgICAgICAgICAgIGJnOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBmdWxsOiB0cnVlXHJcbiAgICAgICAgICB9KSwgYCR7ZmlsZU5hbWV9LiR7ZXh0fWApO1xyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgIH0sIDEpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZG93bmxvYWRGaWxlRnJvbVBDKHBjMk5hbWUsIGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZEZpbGVGcm9tUEMoZm9ybWF0LCBmaWxlRXh0KSB7XHJcbiAgICBjb25zdCBGSUxFTkFNRV9DVVRPRkYgPSAyMDtcclxuICAgIGxldCB7IGZpbGVOYW1lLCB1cmkgfSAgPSAgdGhpcy5wcm9wcztcclxuICAgIGZpbGVOYW1lID0gZmlsZU5hbWUuc3Vic3RyKDAsIGZpbGVOYW1lLmxlbmd0aCA8IEZJTEVOQU1FX0NVVE9GRiA/IGZpbGVOYW1lLmxlbmd0aCA6IEZJTEVOQU1FX0NVVE9GRikucmVwbGFjZSgvIC9nLCAnXycpO1xyXG5cclxuICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlIH0sICgpID0+IHtcclxuICAgICAgU2VydmVyQVBJLmRvd25sb2FkRmlsZUZyb21QYXRod2F5Q29tbW9ucyh1cmksIGZvcm1hdCkudGhlbihyZXMgPT4gcmVzLnRleHQoKSlcclxuICAgICAgICAudGhlbihjb250ZW50ID0+IHtcclxuICAgICAgICAgIGNvbnRlbnQgPSB0eXBlb2YgY29udGVudCA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShjb250ZW50KSA6IGNvbnRlbnQ7XHJcbiAgICAgICAgICBsZXQgZmlsZUNvbnRlbnQgPSBuZXcgRmlsZShbY29udGVudF0sIGAke2ZpbGVOYW1lfS4ke2ZpbGVFeHR9YCwgeyB0eXBlOid0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgnIH0pO1xyXG4gICAgICAgICAgc2F2ZUFzKCBmaWxlQ29udGVudCApO1xyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVycm9yOiBudWxsLCBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaCggZSA9PiB0aGlzLnNldFN0YXRlKHsgZXJyb3I6IGUsIGxvYWRpbmc6IGZhbHNlIH0pICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHsgZG93bmxvYWRPcHRzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3Qgb3B0cyA9IF8uYXNzaWduKCB7IGRvd25sb2FkVHlwZXM6IFsgJ3BuZycgXSB9LCBkb3dubG9hZE9wdHMgKTtcclxuICAgIGxldCBtZW51Q29udGVudHMgPSB0aGlzLnN0YXRlLmRvd25sb2FkVHlwZXNcclxuICAgICAgLmZpbHRlciggZHQgPT4gb3B0cy5kb3dubG9hZFR5cGVzLmluZGV4T2YoIGR0LnR5cGUgKSA+PSAwIClcclxuICAgICAgLm1hcCggZHQgPT4ge1xyXG4gICAgICAgIGxldCBkbE9wdGlvbiA9IGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24nLCB7IG9uQ2xpY2s6ICgpID0+IHRoaXMuZG93bmxvYWRGcm9tRGlzcGxheU5hbWUoIGR0LmRpc3BsYXlOYW1lICkgfSwgW1xyXG4gICAgICAgICAgICBoKCdkaXYuZG93bmxvYWQtb3B0aW9uLWhlYWRlcicsIFtcclxuICAgICAgICAgICAgICBoKCdoMycsIGR0LmRpc3BsYXlOYW1lKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24tZGVzY3JpcHRpb24nLCBkdC5kZXNjcmlwdGlvbilcclxuICAgICAgICBdKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRsT3B0aW9uO1xyXG4gICAgICB9ICk7XHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gdGhpcy5zdGF0ZS5lcnJvciA/IGgoJ2Rpdi5maWxlLWRvd25sb2FkLWVycm9yJywgJ0FuIGVycm9yIG9jY3VycmVkIC0gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nKTogbnVsbDtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmZpbGUtZG93bmxvYWQtbWVudScsIFtcclxuICAgICAgaCgnaDInLCAnRG93bmxvYWQgQXMuLi4nKSxcclxuICAgICAgaCgnZGl2LmZpbGUtZG93bmxvYWQtY29udGVudCcsIFtcclxuICAgICAgICAuLi5tZW51Q29udGVudHMsXHJcbiAgICAgICAgaChMb2FkZXIsIHsgbG9hZGVkOiAhdGhpcy5zdGF0ZS5sb2FkaW5nIH0pXHJcbiAgICAgIF0pLFxyXG4gICAgICBlcnJvck1lc3NhZ2VcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBGaWxlRG93bmxvYWRNZW51O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGF0aHdheXMvbWVudXMvZmlsZS1kb3dubG9hZC1tZW51LmpzIiwiY29uc3QgY3l0b3NjYXBlID0gcmVxdWlyZSgnY3l0b3NjYXBlJyk7XHJcbmNvbnN0IHNiZ25TdHlsZVNoZWV0ID0gcmVxdWlyZSgnY3l0b3NjYXBlLXNiZ24tc3R5bGVzaGVldCcpO1xyXG5jb25zdCB7IE1BVENIRURfU0VBUkNIX0NMQVNTIH0gPSByZXF1aXJlKCcuL2FjdGlvbnMnKTtcclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHNiZ25TdHlsZVNoZWV0KGN5dG9zY2FwZSlcclxuLnNlbGVjdG9yKCdub2RlJylcclxuLmNzcyh7XHJcbiAgJ2JhY2tncm91bmQtb3BhY2l0eSc6ICcwLjQnXHJcbn0pXHJcbi5zZWxlY3Rvcignbm9kZTphY3RpdmUnKVxyXG4uY3NzKHtcclxuICAnYmFja2dyb3VuZC1vcGFjaXR5JzogJzAuNycsXHJcbn0pXHJcbi5zZWxlY3Rvcignbm9kZVtjbGFzcyE9XCJjb21wYXJ0bWVudFwiXScpXHJcbi5jc3Moe1xyXG4gICdmb250LXNpemUnOiAyMCxcclxuICAnY29sb3InOiAnYmxhY2snLFxyXG4gICd0ZXh0LW91dGxpbmUtY29sb3InOiAnd2hpdGUnLFxyXG4gICd0ZXh0LW91dGxpbmUtd2lkdGgnOiAyLFxyXG4gICd0ZXh0LW91dGxpbmUtb3BhY2l0eSc6IDAuNSxcclxuICAndGV4dC13cmFwJzogJ3dyYXAnLFxyXG4gICd0ZXh0LW1heC13aWR0aCc6IDE3NSxcclxuICAnbGFiZWwnOiBub2RlID0+IHtcclxuICAgIGNvbnN0IGxhYmVsID0gbm9kZS5kYXRhKCdsYWJlbCcpXHJcbiAgICAgIC5zcGxpdCgnKCcpLmpvaW4oJycpLnNwbGl0KCcpJykuam9pbignJylcclxuICAgICAgLnNwbGl0KCc6Jykuam9pbignICcpO1xyXG4gICAgcmV0dXJuIGxhYmVsO1xyXG4gIH1cclxufSlcclxuLnNlbGVjdG9yKCdub2RlW2NsYXNzPVwiY29tcGxleFwiXScpXHJcbi5jc3Moe1xyXG4gICd3aWR0aCc6IDQ1LFxyXG4gICdoZWlnaHQnOiA0NSxcclxuICAnbGFiZWwnOiBub2RlID0+IG5vZGUuaXNQYXJlbnQoKSA/ICcnIDogbm9kZS5kYXRhKCdsYWJlbCcpXHJcbn0pXHJcbi5zZWxlY3RvcignLmN5LWV4cGFuZC1jb2xsYXBzZS1jb2xsYXBzZWQtbm9kZScpXHJcbi5jc3Moe1xyXG4gICdmb250LXNpemUnOiAyMCxcclxuICAndGV4dC1tYXgtd2lkdGgnOiAxNzVcclxufSlcclxuLnNlbGVjdG9yKCcuY3ktZXhwYW5kLWNvbGxhcHNlLW1ldGEtZWRnZScpXHJcbi5jc3Moe1xyXG4gICdsaW5lLXN0eWxlJzogJ2Rhc2hlZCdcclxufSlcclxuLnNlbGVjdG9yKCdlZGdlJylcclxuLmNzcyh7XHJcbiAgJ29wYWNpdHknOiAwLjNcclxufSlcclxuLnNlbGVjdG9yKCdub2RlW2NsYXNzPVwiYW5kXCJdLG5vZGVbY2xhc3M9XCJvclwiXSxub2RlW2NsYXNzPVwibm90XCJdJylcclxuLmNzcyh7XHJcbiAgJ2xhYmVsJzpub2RlPT5ub2RlLmRhdGEoJ2NsYXNzJylcclxufSlcclxuLnNlbGVjdG9yKCcuaGlnaGxpZ2h0ZWQnKVxyXG4uY3NzKHtcclxuICAnb3BhY2l0eSc6MSxcclxufSlcclxuLnNlbGVjdG9yKCcudW5oaWdobGlnaHRlZCcpXHJcbi5jc3Moe1xyXG4gICdvcGFjaXR5JzowLjQsXHJcbn0pXHJcbi5zZWxlY3RvcignLmhpZGRlbicpXHJcbi5jc3Moe1xyXG4gICdkaXNwbGF5Jzonbm9uZScsXHJcbn0pXHJcbi5zZWxlY3RvcihgLiR7TUFUQ0hFRF9TRUFSQ0hfQ0xBU1N9YClcclxuLmNzcyh7XHJcbiAgJ292ZXJsYXktY29sb3InOiAneWVsbG93JyxcclxuICAnb3ZlcmxheS1wYWRkaW5nJzogMCxcclxuICAnb3ZlcmxheS1vcGFjaXR5JzogMC41XHJcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvcGF0aHdheXMvY3kvcGF0aHdheXMtc3R5bGVzaGVldC5qcyIsImNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcblxyXG5jb25zdCBQYXRod2F5Tm9kZU1ldGFkYXRhVmlldyA9IHJlcXVpcmUoJy4uL3BhdGh3YXktbm9kZS1tZXRhZGF0YScpO1xyXG5jb25zdCB7IFBBVEhXQVlTX0xBWU9VVF9PUFRTIH0gPSByZXF1aXJlKCcuL2xheW91dCcpO1xyXG5cclxuY29uc3QgQ3l0b3NjYXBlVG9vbHRpcCA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbW1vbi9jeS9jeXRvc2NhcGUtdG9vbHRpcCcpO1xyXG5cclxuY29uc3QgRVhQQU5EX0NPTExBUFNFX09QVFMgPSB7XHJcbiAgbGF5b3V0Qnk6IF8uYXNzaWduKHt9LCBQQVRIV0FZU19MQVlPVVRfT1BUUywgeyBmaXQ6IGZhbHNlIH0pLFxyXG4gIGZpc2hleWU6IHRydWUsXHJcbiAgYW5pbWF0ZTogdHJ1ZSxcclxuICB1bmRvYWJsZTogZmFsc2UsXHJcbiAgY3VlRW5hYmxlZDogZmFsc2VcclxufTtcclxuXHJcbmNvbnN0IFNIT1dfVE9PTFRJUFNfRVZFTlQgPSAnc2hvd3Rvb2x0aXAnO1xyXG5cclxubGV0IGJpbmRDeUV2ZW50cyA9IGN5ID0+IHtcclxuXHJcbiAgbGV0IGhpZGVUb29sdGlwcyA9ICgpID0+IHtcclxuICAgIGN5LmVsZW1lbnRzKCkuZm9yRWFjaChlbGUgPT4ge1xyXG4gICAgICBsZXQgdG9vbHRpcCA9IGVsZS5zY3JhdGNoKCdfdG9vbHRpcCcpO1xyXG4gICAgICBpZiAodG9vbHRpcCkge1xyXG4gICAgICAgIHRvb2x0aXAuaGlkZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBjeS5leHBhbmRDb2xsYXBzZShFWFBBTkRfQ09MTEFQU0VfT1BUUyk7XHJcbiAgY3kub24oU0hPV19UT09MVElQU19FVkVOVCwgJ25vZGVbY2xhc3MgIT0gXCJjb21wYXJ0bWVudFwiXScsIGZ1bmN0aW9uIChldnQpIHtcclxuICAgIGxldCBub2RlID0gZXZ0LnRhcmdldDtcclxuXHJcbiAgICBsZXQgdG9vbHRpcCA9IG5ldyBDeXRvc2NhcGVUb29sdGlwKCBub2RlLnBvcHBlclJlZigpLCB7XHJcbiAgICAgIGh0bWw6IGgoUGF0aHdheU5vZGVNZXRhZGF0YVZpZXcsIHsgbm9kZSB9KVxyXG4gICAgfSApO1xyXG4gICAgbm9kZS5zY3JhdGNoKCdfdG9vbHRpcCcsIHRvb2x0aXApO1xyXG4gICAgdG9vbHRpcC5zaG93KCk7XHJcbiAgfSk7XHJcblxyXG4gIGN5Lm9uKCd0YXAnLCBldnQgPT4ge1xyXG4gICAgY29uc3QgdGd0ID0gZXZ0LnRhcmdldDtcclxuXHJcbiAgICAvLyBpZiB3ZSBkaWRuJ3QgY2xpY2sgYSBub2RlLCBjbG9zZSBhbGwgdG9vbHRpcHNcclxuICAgIGlmKCBldnQudGFyZ2V0ID09PSBjeSB8fCBldnQudGFyZ2V0LmlzRWRnZSgpICl7XHJcbiAgICAgIGhpZGVUb29sdGlwcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gd2UgY2xpY2tlZCBhIG5vZGUgdGhhdCBoYXMgYSB0b29sdGlwIG9wZW4gLT4gY2xvc2UgaXRcclxuICAgIGlmKCB0Z3Quc2NyYXRjaCgnX3Rvb2x0aXAtb3BlbmVkJykgKXtcclxuICAgICAgaGlkZVRvb2x0aXBzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBvcGVuIHRoZSB0b29sdGlwIGZvciB0aGUgY2xpY2tlZCBub2RlXHJcbiAgICAgIGhpZGVUb29sdGlwcygpO1xyXG4gICAgICB0Z3QuZW1pdChTSE9XX1RPT0xUSVBTX0VWRU5UKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy9IaWRlIFRvb2x0aXBzIG9uIHZhcmlvdXMgZ3JhcGggbW92ZW1lbnRzXHJcbiAgY3kub24oJ2RyYWcnLCAoKSA9PiBoaWRlVG9vbHRpcHMoKSk7XHJcbiAgY3kub24oJ3BhbicsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuICBjeS5vbignem9vbScsICgpID0+IGhpZGVUb29sdGlwcygpKTtcclxuICBjeS5vbignbGF5b3V0c3RhcnQnLCAoKSA9PiBoaWRlVG9vbHRpcHMoKSk7XHJcblxyXG4gIGxldCBub2RlSG92ZXJNb3VzZU92ZXIgPSBfLmRlYm91bmNlKGV2dCA9PiB7XHJcbiAgICBsZXQgbm9kZSA9IGV2dC50YXJnZXQ7XHJcbiAgICBsZXQgZWxlc1RvSGlnaGxpZ2h0ID0gY3kuY29sbGVjdGlvbigpO1xyXG5cclxuICAgIC8vQ3JlYXRlIGEgbGlzdCBvZiB0aGUgaG92ZXJlZCBub2RlICYgaXRzIG5laWdoYm91cmhvb2RcclxuICAgIG5vZGUubmVpZ2hib3Job29kKCkubm9kZXMoKS51bmlvbihub2RlKS5mb3JFYWNoKG5vZGUgPT4ge1xyXG4gICAgICBlbGVzVG9IaWdobGlnaHQubWVyZ2Uobm9kZS5hbmNlc3RvcnMoKSk7XHJcbiAgICAgIGVsZXNUb0hpZ2hsaWdodC5tZXJnZShub2RlLmRlc2NlbmRhbnRzKCkpO1xyXG4gICAgICBlbGVzVG9IaWdobGlnaHQubWVyZ2Uobm9kZSk7XHJcbiAgICB9KTtcclxuICAgIGVsZXNUb0hpZ2hsaWdodC5tZXJnZShub2RlLm5laWdoYm9yaG9vZCgpLmVkZ2VzKCkpO1xyXG5cclxuICAgIC8vQWRkIGhpZ2hsaWdodGVkIGNsYXNzIHRvIG5vZGUgJiBpdHMgbmVpZ2hib3VyaG9vZCwgdW5oaWdobGlnaHRlZCB0byBldmVyeXRoaW5nIGVsc2VcclxuICAgIGN5LmVsZW1lbnRzKCkuYWRkQ2xhc3MoJ3VuaGlnaGxpZ2h0ZWQnKTtcclxuICAgIGVsZXNUb0hpZ2hsaWdodC5mb3JFYWNoKGVsZSA9PiB7XHJcbiAgICAgIGVsZS5yZW1vdmVDbGFzcygndW5oaWdobGlnaHRlZCcpO1xyXG4gICAgICBlbGUuYWRkQ2xhc3MoJ2hpZ2hsaWdodGVkJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgfSwgNzUwKTtcclxuXHJcbiAgLy9jYWxsIHN0eWxlLWFwcGx5aW5nIGFuZCBzdHlsZS1yZW1vdmluZyBmdW5jdGlvbnMgb24gJ21vdXNlb3ZlcicgYW5kICdtb3VzZW91dCcgZm9yIG5vbi1jb21wYXJ0bWVudCBub2Rlc1xyXG4gIGN5Lm9uKCdtb3VzZW92ZXInLCAnbm9kZVtjbGFzcyE9XCJjb21wYXJ0bWVudFwiXScsIG5vZGVIb3Zlck1vdXNlT3Zlcik7XHJcbiAgY3kub24oJ21vdXNlb3V0JywgJ25vZGVbY2xhc3MhPVwiY29tcGFydG1lbnRcIl0nLCAoKSA9PiB7XHJcbiAgICBub2RlSG92ZXJNb3VzZU92ZXIuY2FuY2VsKCk7XHJcbiAgICBjeS5lbGVtZW50cygpLnJlbW92ZUNsYXNzKCdoaWdobGlnaHRlZCB1bmhpZ2hsaWdodGVkJyk7XHJcbiAgfSk7XHJcblxyXG59O1xyXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmRDeUV2ZW50cztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL2N5L2V2ZW50cy5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuXHJcbmNvbnN0IHsgU2VydmVyQVBJIH0gPSByZXF1aXJlKCcuLi8uLi9zZXJ2aWNlcycpO1xyXG5jb25zdCB7IE5TX0NIRUJJLCBOU19FTlNFTUJMLCBOU19IR05DLCBOU19IR05DX1NZTUJPTCwgTlNfTkNCSV9HRU5FLCBOU19QVUJNRUQsIE5TX1JFQUNUT01FLCBOU19VTklQUk9UIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9jb25maWcnKTtcclxuXHJcbmNvbnN0IERFRkFVTFRfTlVNX05BTUVTID0gMztcclxuY29uc3QgU1VQUE9SVEVEX0NPTExFQ1RJT05TID0gbmV3IE1hcChbXHJcbiAgW05TX0NIRUJJLCAnQ2hFQkknXSxcclxuICBbTlNfRU5TRU1CTCwgJ0Vuc2VtYmwnXSxcclxuICBbTlNfSEdOQywgJ0hHTkMnXSxcclxuICBbTlNfSEdOQ19TWU1CT0wsICdIR05DJ10sXHJcbiAgW05TX05DQklfR0VORSwgJ05DQkkgR2VuZSddLFxyXG4gIFtOU19SRUFDVE9NRSwgJ1JlYWN0b21lJ10sXHJcbiAgW05TX1VOSVBST1QsICdVbmlQcm90J11cclxuXSk7XHJcblxyXG5jb25zdCBnZXRVcmlJZHMgPSB1cmlzID0+IHVyaXMubWFwKCB1cmkgPT4gXy5sYXN0KCB1cmkuc3BsaXQoICcvJyApICkgKTtcclxuXHJcbi8vIEEgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgYSBwYXRod2F5IG5vZGUncyBtZXRhZGF0YVxyXG4vLyBwcm9wczpcclxuLy8gLSBjeXRvc2NhcGUgbm9kZSlcclxuY2xhc3MgUGF0aHdheU5vZGVNZXRhZGF0YVZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBwdWJsaWNhdGlvbnM6IFtdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50RGlkTW91bnQoKXtcclxuICAgIGxldCB7IG5vZGUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgbWV0YWRhdGEgPSBub2RlLmRhdGEoJ21ldGFkYXRhJyk7XHJcbiAgICBsZXQgcHVibWVkVXJpcyA9IF8uZ2V0KG1ldGFkYXRhLCBgeHJlZkxpbmtzLiR7TlNfUFVCTUVEfWAsIG51bGwpO1xyXG5cclxuICAgIGlmKCBwdWJtZWRVcmlzICE9IG51bGwgKXtcclxuICAgICAgY29uc3QgcHVibWVkSWRzID0gZ2V0VXJpSWRzKCBwdWJtZWRVcmlzICk7XHJcbiAgICAgIFNlcnZlckFQSS5nZXRQdWJtZWRQdWJsaWNhdGlvbnMocHVibWVkSWRzKS50aGVuKCBwdWJsaWNhdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBwdWJsaWNhdGlvbnMgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBub2RlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IHsgcHVibGljYXRpb25zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3Qgbm9kZURhdGEgPSBub2RlLmRhdGEoKTtcclxuICAgIGNvbnN0IG5vZGVDbGFzcyA9IF8uZ2V0KCBub2RlRGF0YSwgWydjbGFzcyddICk7XHJcbiAgICBjb25zdCBub2RlTGFiZWwgPSBfLmdldCggbm9kZURhdGEsIFsnbGFiZWwnXSApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHROb2RlTWV0YSA9IHtcclxuICAgICAgc3lub255bXM6IFtdLFxyXG4gICAgICBkYXRhc291cmNlOicnLFxyXG4gICAgICB0eXBlOiBub2RlQ2xhc3MsXHJcbiAgICAgIHN0YW5kYXJkTmFtZTogJycsXHJcbiAgICAgIGRpc3BsYXlOYW1lOiBub2RlTGFiZWwsXHJcbiAgICAgIHhyZWZMaW5rczogW10gICAgXHJcbiAgICB9OyBcclxuICAgIGNvbnN0IG5vZGVNZXRhID0gXy5nZXQoIG5vZGVEYXRhLCBbJ21ldGFkYXRhJ10sIHt9ICk7XHJcbiAgICBjb25zdCBtZCA9IF8uYXNzaWduKCB7fSwgZGVmYXVsdE5vZGVNZXRhLCBub2RlTWV0YSApO1xyXG4gICAgXHJcbiAgICBsZXQgeyBzeW5vbnltcywgdHlwZSwgc3RhbmRhcmROYW1lLCBkaXNwbGF5TmFtZSwgeHJlZkxpbmtzIH0gPSBtZDtcclxuICAgIGxldCB0aXRsZSA9IG5vZGVMYWJlbCB8fCBkaXNwbGF5TmFtZTsgXHJcbiAgICBsZXQgc2VhcmNoTGlua1F1ZXJ5ID0gZGlzcGxheU5hbWU7XHJcbiAgXHJcbiAgICBsZXQgZGJMaW5rcyA9IF8ua2V5cyggeHJlZkxpbmtzICkubWFwKCBjb2xsZWN0aW9uID0+IHtcclxuICAgICAgbGV0IGxpbmsgPSBudWxsO1xyXG4gICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IFNVUFBPUlRFRF9DT0xMRUNUSU9OUy5nZXQoIGNvbGxlY3Rpb24gKTtcclxuICAgICAgY29uc3QgdXJpID0gXy5nZXQoIHhyZWZMaW5rcywgYCR7Y29sbGVjdGlvbn1bMF1gICk7XHJcbiAgICAgIGlmICggZGlzcGxheU5hbWUgJiYgdXJpICkgbGluayA9IGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogdXJpLCB0YXJnZXQ6ICdfYmxhbmsnIH0sIGRpc3BsYXlOYW1lICk7XHJcbiAgICAgIHJldHVybiBsaW5rO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHB1YmxpY2F0aW9uRWxlcyA9IHB1YmxpY2F0aW9ucy5tYXAocHVibGljYXRpb24gPT4ge1xyXG4gICAgICBsZXQgeyBpZCwgdGl0bGUsIGZpcnN0QXV0aG9yLCBkYXRlLCBzb3VyY2UgfSA9IHB1YmxpY2F0aW9uO1xyXG4gICAgICByZXR1cm4gaCgnZGl2LmN5LW92ZXJmbG93LWNvbnRlbnQnLCBbXHJcbiAgICAgICAgaCgnYS5wbGFpbi1saW5rJywgeyBocmVmOiAnaHR0cDovL2Jpb3JlZ2lzdHJ5LmlvL3B1Ym1lZDonICsgaWQsIHRhcmdldDogJ19ibGFuaycgIH0sIHRpdGxlKSxcclxuICAgICAgICBoKCdkaXYnLCBmaXJzdEF1dGhvciArICAnIGV0IGFsLiB8ICcgKyBzb3VyY2UgKyAnIC0gJyArIG5ldyBEYXRlKGRhdGUpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSlcclxuICAgICAgXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgc2hvd1RpdGxlID0gdGl0bGUgIT09ICcnO1xyXG4gICAgbGV0IHNob3dUeXBlID0gdHlwZSAhPT0gJyc7XHJcbiAgICBsZXQgc2hvd1N0ZE5hbWUgPSBzdGFuZGFyZE5hbWUgIT09ICcnO1xyXG4gICAgbGV0IHNob3dEaXNwTmFtZSA9IGRpc3BsYXlOYW1lICE9PSAnJyAmJiBkaXNwbGF5TmFtZSAhPT0gKCBub2RlTGFiZWwgfHwgdGl0bGUgKTtcclxuICAgIGxldCBzaG93U3lub255bXMgPSBzeW5vbnltcy5sZW5ndGggPiAwO1xyXG4gICAgbGV0IHNob3dQdWJzID0gcHVibGljYXRpb25FbGVzLmxlbmd0aCA+IDA7XHJcbiAgICBsZXQgc2hvd0xpbmtzID0gZGJMaW5rcy5sZW5ndGggPiAwO1xyXG4gICAgXHJcbiAgICBsZXQgc2hvd0hlYWRlciA9IHNob3dUaXRsZSB8fCBzaG93VHlwZTtcclxuICAgIGxldCBzaG93Qm9keSA9IHNob3dTdGROYW1lIHx8IHNob3dEaXNwTmFtZSB8fCBzaG93U3lub255bXMgfHwgc2hvd1B1YnM7XHJcbiAgICBsZXQgc2hvd0Zvb3RlciA9IHNob3dMaW5rcztcclxuICAgIGxldCBzaG93UGNTZWFyY2hMaW5rID0gc2VhcmNoTGlua1F1ZXJ5ICE9PSAnJztcclxuICAgIFxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5jeS10b29sdGlwJywgW1xyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1jb250ZW50JywgW1xyXG4gICAgICAgIHNob3dIZWFkZXIgPyBoKCdkaXYuY3ktdG9vbHRpcC1oZWFkZXInLCBbXHJcbiAgICAgICAgICBzaG93VGl0bGU/IGgoJ2gyLmN5LXRvb2x0aXAtdGl0bGUnLCAgdGl0bGUpOiBudWxsLFxyXG4gICAgICAgICAgc2hvd1R5cGUgPyBoKCdkaXYuY3ktdG9vbHRpcC10eXBlLWNoaXAnLCB0eXBlKSA6IG51bGwsXHJcbiAgICAgICAgXSk6IG51bGwsXHJcbiAgICAgICAgc2hvd0JvZHkgPyBoKCdkaXYuY3ktdG9vbHRpcC1ib2R5JywgW1xyXG4gICAgICAgICAgc2hvd1N0ZE5hbWUgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgJ05hbWUnKSxcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtdmFsdWUnLCBzdGFuZGFyZE5hbWUpXHJcbiAgICAgICAgICBdKSA6IG51bGwsXHJcbiAgICAgICAgICBzaG93RGlzcE5hbWUgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgJ0Rpc3BsYXkgTmFtZScpLFxyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC12YWx1ZScsIGRpc3BsYXlOYW1lKVxyXG4gICAgICAgICAgXSkgOiBudWxsLFxyXG4gICAgICAgICAgc2hvd1N5bm9ueW1zID8gaCgnZGl2LmN5LXRvb2x0aXAtc2VjdGlvbicsIFtcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsIFtcclxuICAgICAgICAgICAgICAnU3lub255bXMnLFxyXG4gICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtdmFsdWUnLCBzeW5vbnltcy5zbGljZSgwLCBERUZBVUxUX05VTV9OQU1FUykuam9pbignLCAnKSlcclxuICAgICAgICAgIF0pIDogbnVsbCxcclxuICAgICAgICAgIHNob3dQdWJzID8gaCgnZGl2LmN5LXRvb2x0aXAtc2VjdGlvbicsIFtcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsIFtcclxuICAgICAgICAgICAgICAnUHVibGljYXRpb25zJyxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIGgoJ2RpdicsIHB1YmxpY2F0aW9uRWxlcylcclxuICAgICAgICAgIF0pIDogbnVsbFxyXG4gICAgICAgIF0pOiBudWxsLFxyXG4gICAgICAgIHNob3dGb290ZXIgPyBoKCdkaXYuY3ktdG9vbHRpcC1mb290ZXInLCBbXHJcbiAgICAgICAgICBzaG93TGlua3MgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgW1xyXG4gICAgICAgICAgICAgICdMaW5rcycsXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1saW5rcycsIGRiTGlua3MpXHJcbiAgICAgICAgICBdKSA6IG51bGxcclxuICAgICAgICBdKTogbnVsbCxcclxuICAgICAgICBzaG93UGNTZWFyY2hMaW5rID8gaCgnZGl2LmN5LXRvb2x0aXAtY2FsbC10by1hY3Rpb24nLCBbXHJcbiAgICAgICAgICBoKCdhJywge1xyXG4gICAgICAgICAgICB0YXJnZXQ6ICdfYmxhbmsnLFxyXG4gICAgICAgICAgICBocmVmOiAnL3NlYXJjaD9xPScgKyBzZWFyY2hMaW5rUXVlcnlcclxuICAgICAgICAgIH0sIFtcclxuICAgICAgICAgICAgaCgnYnV0dG9uLmNhbGwtdG8tYWN0aW9uJywgJ0ZpbmQgUmVsYXRlZCBQYXRod2F5cycpXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIF0pIDogbnVsbFxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXRod2F5Tm9kZU1ldGFkYXRhVmlldztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3BhdGh3YXlzL3BhdGh3YXktbm9kZS1tZXRhZGF0YS5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuXHJcbmNvbnN0IHsgU2VydmVyQVBJIH0gPSByZXF1aXJlKCcuLi8uLi9zZXJ2aWNlcycpO1xyXG5cclxuY29uc3QgeyBET0lfQkFTRV9VUkwsIElERU5USUZJRVJTX1VSTCwgUFVCTUVEX0JBU0VfVVJMIH0gPSByZXF1aXJlKCAnLi4vLi4vLi4vY29uZmlnLmpzJyApO1xyXG5cclxuLy8gQSBjb21wb25lbnQgdGhhdCBkaXNwbGF5cyBhIHBhdGh3YXkgdGl0bGVcclxuLy8gcHJvcHM6XHJcbi8vIC0gcGF0aHdheTogTW9kZWwgaW5zdGFuY2VcclxuY2xhc3MgUGF0aHdheVRpdGxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICBjb25zdHJ1Y3Rvcihwcm9wcyl7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgcHVibGljYXRpb25zOiBbXVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1cHBvcnRzIFB1YmxpY2F0aW9uWHJlZnMgZnJvbSBQdWJNZWQ7IGluIHByaW5jaXBsZSwgY291bGQgYmUgYW55IHNvdXJjZSAoZS5nLiBiaW9SeGl2KS5cclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheT59IC0gQXJyYXkgb2YgcHVibGljYXRpb24gb2JqZWN0c1xyXG4gICAqL1xyXG4gIGFzeW5jIGxvYWRQdWJsaWNhdGlvbnMoKXtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZVB1Ym1lZFJlY29yZCA9IHJlY29yZCA9PiB7XHJcbiAgICAgIGNvbnN0IHsgc291cmNlOiBqb3VybmFsLCBkYXRlLCBmaXJzdEF1dGhvciwgZG9pLCBwdWJtZWQgIH0gPSByZWNvcmQ7XHJcbiAgICAgIHJldHVybiB7IGpvdXJuYWwsIGRhdGUsIGZpcnN0QXV0aG9yLCBkb2ksIHB1Ym1lZCB9O1xyXG4gICAgfTtcclxuICAgIGNvbnN0IE1BWF9QVUJTID0gMTA7XHJcbiAgICBjb25zdCBpc1B1Ym1lZFhyZWYgPSAoeyBkYiB9KSA9PiBkYiA9PT0gJ3B1Ym1lZCc7XHJcbiAgICBjb25zdCB7IHBhdGh3YXkgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBwdWJtZWRJZHMgPSBwYXRod2F5LnB1YmxpY2F0aW9uWHJlZnMoKS5zbGljZSggMCwgTUFYX1BVQlMgKS5maWx0ZXIoIGlzUHVibWVkWHJlZiApLm1hcCggKHsgaWQgfSkgPT4gaWQgKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBTZXJ2ZXJBUEkuZ2V0UHVibWVkUHVibGljYXRpb25zKCBwdWJtZWRJZHMgKS5tYXAoIG5vcm1hbGl6ZVB1Ym1lZFJlY29yZCApO1xyXG4gICAgfSBjYXRjaCggZXJyICl7XHJcbiAgICAgIC8vIFN3YWxsb3cgZXJyb3JcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbXBvbmVudERpZE1vdW50KCl7XHJcbiAgICBjb25zdCBwdWJsaWNhdGlvbnMgPSBhd2FpdCB0aGlzLmxvYWRQdWJsaWNhdGlvbnMoKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHRoaXMuc2V0U3RhdGUoeyBwdWJsaWNhdGlvbnMgfSwgKCkgPT4gcmVzb2x2ZSggcHVibGljYXRpb25zICkpKTtcclxuICB9XHJcblxyXG4gIC8vIEVuaGFuY2UgdGhlIG5hbWUgd2l0aCBhIGxpbmsgdG8gYSBzb3VyY2UgcGFnZSBpZiBwb3NzaWJsZVxyXG4gIGdldE5hbWUoKXtcclxuICAgIC8vIENyYXBzaG9vdCB3aGV0aGVyIGEgREIgaGFzIGEgcmVzb2x2YWJsZSBVUkwgb3Igbm90XHJcbiAgICBjb25zdCBEQl9QUkVGSVhfMl9VUkxfVEVNUExBVEUgPSBuZXcgTWFwKFtcclxuICAgICAgWydiaW9mYWN0b2lkJywgYCR7SURFTlRJRklFUlNfVVJMfS9iaW9mYWN0b2lkOmBdLFxyXG4gICAgICBbJ3BhbnRoZXIucGF0aHdheScsIGAke0lERU5USUZJRVJTX1VSTH0vcGFudGhlci5wYXRod2F5OmBdLFxyXG4gICAgICBbJ3NtcGRiJywgYCR7SURFTlRJRklFUlNfVVJMfS9zbXBkYjpgXSxcclxuICAgICAgWydyZWFjdG9tZScsIGAke0lERU5USUZJRVJTX1VSTH0vcmVhY3RvbWU6YF1cclxuICAgIF0pO1xyXG4gICAgY29uc3QgaXNTdXBwb3J0ZWREYiA9ICh7IGRiIH0pID0+IERCX1BSRUZJWF8yX1VSTF9URU1QTEFURS5oYXMoIGRiICk7XHJcbiAgICBjb25zdCB7IHBhdGh3YXkgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgbmFtZSA9IHBhdGh3YXkubmFtZSgpO1xyXG5cclxuICAgIGxldCB1bmlYcmVmcyA9IHBhdGh3YXkudW5pZmljYXRpb25YcmVmcygpO1xyXG4gICAgaWYoICFfLmlzRW1wdHkoIHVuaVhyZWZzICkgKXtcclxuICAgICAgdW5pWHJlZnMgPSB1bmlYcmVmcy5maWx0ZXIoIGlzU3VwcG9ydGVkRGIgKTtcclxuICAgICAgaWYoIHVuaVhyZWZzLmxlbmd0aCApe1xyXG4gICAgICAgIGNvbnN0IHsgZGIsIGlkIH0gPSBfLmZpcnN0KCB1bmlYcmVmcyApO1xyXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBEQl9QUkVGSVhfMl9VUkxfVEVNUExBVEUuZ2V0KCBkYiApO1xyXG4gICAgICAgIGNvbnN0IGhyZWYgPSBgJHtiYXNlVXJsfSR7aWR9YDtcclxuICAgICAgICBuYW1lID0gWyBoKCdhLmhpZ2hsaWdodC1saW5rJywgeyBocmVmLCB0YXJnZXQ6ICdfYmxhbmsnIH0sIG5hbWUpIF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmFtZTtcclxuICB9XHJcblxyXG4gIC8vIEFkZCBhbiBhcnRpY2xlIGxpbmsgd2hlbiBkaXJlY3RseSByZWxldmFudCB0byBwYXRod2F5IChpLmUuIEJpb2ZhY3RvaWQhKVxyXG4gIGdldFNvdXJjZSgpe1xyXG4gICAgY29uc3QgQVJUSUNMRV9TVVBQT1JURURfREFUQVNPVVJDRVMgPSBuZXcgU2V0KFsgJ0Jpb2ZhY3RvaWQnIF0pO1xyXG4gICAgY29uc3QgeyBwYXRod2F5IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyBwdWJsaWNhdGlvbnMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBkYXRhc291cmNlID0gcGF0aHdheS5kYXRhc291cmNlKCk7XHJcbiAgICBsZXQgc291cmNlID0gWyBoKCdhJywgeyBocmVmOiBwYXRod2F5LmRhdGFzb3VyY2VVcmwoKSwgdGFyZ2V0OiAnX2JsYW5rJyB9LCAnICcgKyBkYXRhc291cmNlICkgXTtcclxuXHJcbiAgICBpZiggQVJUSUNMRV9TVVBQT1JURURfREFUQVNPVVJDRVMuaGFzKCBkYXRhc291cmNlICkgJiYgcHVibGljYXRpb25zLmxlbmd0aCApe1xyXG4gICAgICBjb25zdCB7IGpvdXJuYWwsIGRhdGUsIGZpcnN0QXV0aG9yLCBkb2ksIHB1Ym1lZCB9ID0gXy5maXJzdCggcHVibGljYXRpb25zICk7XHJcbiAgICAgIGNvbnN0IGF1dGhvciA9IGgoJ3NwYW4nLCBgICR7Zmlyc3RBdXRob3J9IGV0IGFsLmApO1xyXG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBoKCBkb2kgPyAnYS5wbGFpbi1saW5rJyA6ICdzcGFuJywgZG9pID8geyBocmVmOiBgJHtET0lfQkFTRV9VUkx9JHtkb2l9YCwgdGFyZ2V0OiAnX2JsYW5rJyB9IDogbnVsbCwgYCR7am91cm5hbH0gJHtkYXRlfWAgKTtcclxuICAgICAgc291cmNlLnB1c2goIGgoJ3NwYW4nLCAnIHwgJyksIGF1dGhvciwgJyAnLCByZWZlcmVuY2UgKTtcclxuICAgICAgaWYoIHB1Ym1lZCApe1xyXG4gICAgICAgIGNvbnN0IHB1Ym1lZExpbmsgPSBoKCdhLnBsYWluLWxpbmsnLCB7IGhyZWY6IGAke1BVQk1FRF9CQVNFX1VSTH0ke3B1Ym1lZH1gLCB0YXJnZXQ6ICdfYmxhbmsnIH0sICdQdWJNZWQnICk7XHJcbiAgICAgICAgc291cmNlLnB1c2goICcgwrcgJywgcHVibWVkTGluayApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc291cmNlO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpO1xyXG4gICAgbGV0IHNvdXJjZSA9IHRoaXMuZ2V0U291cmNlKCk7XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5wYXRod2F5LXRpdGxlJywgW1xyXG4gICAgICBoKCdkaXYucGF0aHdheS10aXRsZS1uYW1lJywgbmFtZSApLFxyXG4gICAgICBoKCdkaXYucGF0aHdheS10aXRsZS1zb3VyY2UnLCBzb3VyY2UgKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBQYXRod2F5VGl0bGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9wYXRod2F5cy9wYXRod2F5LXRpdGxlLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgTGluayA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKS5MaW5rO1xyXG5jb25zdCBMb2FkZXIgPSByZXF1aXJlKCdyZWFjdC1sb2FkZXInKTtcclxuY29uc3QgY2xhc3NOYW1lcyA9IHJlcXVpcmUoJ2NsYXNzbmFtZXMnKTtcclxuY29uc3QgcXVlcnlTdHJpbmcgPSByZXF1aXJlKCdxdWVyeS1zdHJpbmcnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5cclxuY29uc3QgeyBGQUNUT0lEX1VSTCB9ID0gcmVxdWlyZSgnLi4vLi4vLi4vY29uZmlnJyk7XHJcbmNvbnN0IHsgU2VydmVyQVBJIH0gPSByZXF1aXJlKCcuLi8uLi9zZXJ2aWNlcycpO1xyXG5cclxuY29uc3QgUGNMb2dvTGluayA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzL3BjLWxvZ28tbGluaycpO1xyXG5cclxuY29uc3QgeyBQYXRod2F5UmVzdWx0c1ZpZXcgfSA9IHJlcXVpcmUoJy4vcGF0aHdheS1yZXN1bHRzLXZpZXcnKTtcclxuY29uc3QgeyBHZW5lUmVzdWx0c1ZpZXcgfSA9IHJlcXVpcmUoJy4vZ2VuZS1yZXN1bHRzLXZpZXcnKTtcclxuY29uc3QgeyBUaW1lb3V0RXJyb3IgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL3V0aWwnKTtcclxuY29uc3QgeyBFcnJvck1lc3NhZ2UgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzL2Vycm9yLW1lc3NhZ2UnKTtcclxuY29uc3QgeyBGZWF0dXJlVmlldyB9ID0gcmVxdWlyZSgnLi9mZWF0dXJlLXZpZXcnKTtcclxuY29uc3QgeyBDb250cmlidXRlIH0gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy9jb250cmlidXRlJyk7XHJcblxyXG5jbGFzcyBTZWFyY2ggZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgIGNvbnN0IHF1ZXJ5ID0gcXVlcnlTdHJpbmcucGFyc2UocHJvcHMubG9jYXRpb24uc2VhcmNoKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBxdWVyeTogXy5hc3NpZ24oe1xyXG4gICAgICAgIHE6ICcnLFxyXG4gICAgICAgIHR5cGU6ICdQYXRod2F5JyxcclxuICAgICAgICBkYXRhc291cmNlOiBbXVxyXG4gICAgICB9LCBxdWVyeSksXHJcbiAgICAgIGdlbmVSZXN1bHRzOiBudWxsLFxyXG4gICAgICBzZWFyY2hIaXRzOiBudWxsLFxyXG4gICAgICBmZWF0dXJlOiBudWxsLFxyXG4gICAgICBkYXRhU291cmNlczogW10sXHJcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICBlcnJvcjogbnVsbCxcclxuICAgICAgUENfVVJMOiBudWxsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoUmVzdWx0KCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgcXVlcnkgPSBzdGF0ZS5xdWVyeTtcclxuXHJcbiAgICBpZiAocXVlcnkucSAhPT0gJycpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgbG9hZGluZzogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICAgIFNlcnZlckFQSS5zZWFyY2goIHF1ZXJ5ICkudGhlbiggcmVzID0+IHtcclxuICAgICAgICBsZXQgeyBnZW5lcywgc2VhcmNoSGl0cywgZmVhdHVyZSwgZGF0YVNvdXJjZXMgfSA9IHJlcztcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIGdlbmVSZXN1bHRzOiBnZW5lcyxcclxuICAgICAgICAgIHNlYXJjaEhpdHMsXHJcbiAgICAgICAgICBmZWF0dXJlLFxyXG4gICAgICAgICAgZGF0YVNvdXJjZXMsXHJcbiAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgIGVycm9yOiBudWxsXHJcbiAgICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBudWxsOyAvLyBCbHVlYmlyZCB3YXJuaW5nXHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCggZSA9PiB0aGlzLnNldFN0YXRlKHsgZXJyb3I6IGUsIGxvYWRpbmc6IGZhbHNlIH0pKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgdGhpcy5nZXRTZWFyY2hSZXN1bHQoKTtcclxuICAgIHJldHVybiBTZXJ2ZXJBUEkuZ2V0UENVUkwoKVxyXG4gICAgICAudGhlbiggUENfVVJMID0+IHRoaXMuc2V0U3RhdGUoeyBQQ19VUkwgfSkgKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoVmFsdWVDaGFuZ2UoZSkge1xyXG4gICAgLy8gaWYgdGhlIHVzZXIgcHJlc3NlcyBlbnRlciwgc3VibWl0IHRoZSBxdWVyeVxyXG4gICAgaWYgKGUud2hpY2ggJiYgZS53aGljaCA9PT0gMTMpIHtcclxuICAgICAgdGhpcy5zdWJtaXRTZWFyY2hRdWVyeShlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IG5ld1F1ZXJ5U3RhdGUgPSBfLmFzc2lnbih7fSwgdGhpcy5zdGF0ZS5xdWVyeSk7XHJcbiAgICAgIG5ld1F1ZXJ5U3RhdGUucSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgcXVlcnk6IG5ld1F1ZXJ5U3RhdGUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRBbmRTdWJtaXRTZWFyY2hRdWVyeShxdWVyeSkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0YXRlO1xyXG4gICAgaWYgKCFzdGF0ZS5zZWFyY2hMb2FkaW5nKSB7XHJcbiAgICAgIGNvbnN0IG5ld1F1ZXJ5U3RhdGUgPSBfLmFzc2lnbih7fSwgc3RhdGUucXVlcnksIHF1ZXJ5KTtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHF1ZXJ5OiBuZXdRdWVyeVN0YXRlIH0sICgpID0+IHRoaXMuc3VibWl0U2VhcmNoUXVlcnkoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdWJtaXRTZWFyY2hRdWVyeSgpIHtcclxuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHF1ZXJ5ID0gc3RhdGUucXVlcnk7XHJcblxyXG4gICAgcHJvcHMuaGlzdG9yeS5wdXNoKHtcclxuICAgICAgcGF0aG5hbWU6ICcvc2VhcmNoJyxcclxuICAgICAgc2VhcmNoOiBxdWVyeVN0cmluZy5zdHJpbmdpZnkocXVlcnkpLFxyXG4gICAgICBzdGF0ZToge31cclxuICAgIH0pO1xyXG4gICAgdGhpcy5nZXRTZWFyY2hSZXN1bHQoKTtcclxuICB9XHJcblxyXG4gIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgKG5leHRQcm9wcykge1xyXG4gICAgY29uc3QgbmV4dFNlYXJjaCA9IG5leHRQcm9wcy5sb2NhdGlvbi5zZWFyY2g7XHJcbiAgICBpZiggdGhpcy5wcm9wcy5sb2NhdGlvbi5zZWFyY2ggIT09ICBuZXh0U2VhcmNoKXtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgcXVlcnk6IF8uYXNzaWduKHtcclxuICAgICAgICAgIHE6ICcnLFxyXG4gICAgICAgICAgdHlwZTogJ1BhdGh3YXknLFxyXG4gICAgICAgICAgZGF0YXNvdXJjZTogW11cclxuICAgICAgICAgIH0sIHF1ZXJ5U3RyaW5nLnBhcnNlKG5leHRTZWFyY2gpKX0gLCAoKT0+e1xyXG4gICAgICAgICAgICB0aGlzLmdldFNlYXJjaFJlc3VsdCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgeyBnZW5lUmVzdWx0cywgc2VhcmNoSGl0cywgZmVhdHVyZSwgcXVlcnksIGxvYWRpbmcsIGRhdGFTb3VyY2VzLCBQQ19VUkwgfSA9IHRoaXMuc3RhdGU7XHJcblxyXG4gICAgY29uc3Qgc2VhcmNoTGlzdGluZyA9IGgoTG9hZGVyLCB7IGxvYWRlZDogIWxvYWRpbmcsIG9wdGlvbnM6IHsgbGVmdDogJzUwJScsIGNvbG9yOiAnIzE2QTA4NScgfSB9LCBbXHJcbiAgICAgIGgoJ2Rpdi5zZWFyY2gtcmVzdWx0cy1oZWFkZXInLCBbXHJcbiAgICAgICAgaCgncC5zZWFyY2gtcmVzdWx0cy1oZWFkZXItdGl0bGUnLCB7XHJcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoe1xyXG4gICAgICAgICAgICAnaGlkZGVuJzogXy5pc0VtcHR5KGdlbmVSZXN1bHRzKSAmJiBfLmlzRW1wdHkoc2VhcmNoSGl0cylcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSwgJ0V4cGxvcmUgaG93IHlvdXIgcXVlcnkgaXMgY29ubmVjdGVkIHRvIG1pbGxpb25zIG9mIGN1cmF0ZWQgaW50ZXJhY3Rpb25zJyksXHJcbiAgICAgICAgaCgncC5zZWFyY2gtcmVzdWx0cy1oZWFkZXItc3VidGl0bGUnLCBbXHJcbiAgICAgICAgICAnUGF0aHdheSBDb21tb25zIGFjY2VwdHMgY29udHJpYnV0aW9ucyAtICcsXHJcbiAgICAgICAgICBoKCdhLnBsYWluLWxpbmsnLCB7XHJcbiAgICAgICAgICAgIGhyZWY6IGAke0ZBQ1RPSURfVVJMfWAsXHJcbiAgICAgICAgICAgIHRhcmdldDogJ19ibGFuaydcclxuICAgICAgICAgIH0sICdhZGQgaW50ZXJhY3Rpb25zIGZyb20geW91ciBwdWJsaWNhdGlvbicpXHJcbiAgICAgICAgXSksXHJcbiAgICAgIF0pLFxyXG4gICAgICBoKCdkaXYuc2VhcmNoLXJlc3VsdHMtY29udGVudCcsIFtcclxuICAgICAgICBoKEZlYXR1cmVWaWV3LCB7IGZlYXR1cmUgfSksXHJcbiAgICAgICAgaChHZW5lUmVzdWx0c1ZpZXcsIHsgZ2VuZVJlc3VsdHMgfSApLFxyXG4gICAgICAgIGgoUGF0aHdheVJlc3VsdHNWaWV3LCB7IHNlYXJjaEhpdHMsIHF1ZXJ5LCBjb250cm9sbGVyOiB0aGlzLCBkYXRhU291cmNlcywgaGFzRmVhdHVyZTogZmVhdHVyZSAhPSBudWxsIH0pXHJcbiAgICAgIF0pXHJcbiAgICBdKTtcclxuXHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlO1xyXG4gICAgaWYoIHRoaXMucHJvcHMubm90Rm91bmRFcnJvciApIHtcclxuICAgICAgZXJyb3JNZXNzYWdlID0gaCggRXJyb3JNZXNzYWdlLCB7IHRpdGxlOiAnV2UgY291bGRuXFwndCBmaW5kIHRoZSByZXNvdXJjZSB5b3UgYXJlIGxvb2tpbmcgZm9yJywgYm9keTogJ0NoZWNrIHRoZSBsb2NhdGlvbiBhbmQgdHJ5IGFnYWluLicgfSApO1xyXG4gICAgfSBlbHNlIGlmKCB0aGlzLnN0YXRlLmVycm9yIGluc3RhbmNlb2YgVGltZW91dEVycm9yICkge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBoKCBFcnJvck1lc3NhZ2UsIHsgdGl0bGU6ICdUaGlzIGlzIHRha2luZyBsb25nZXIgdGhhbiBleHBlY3RlZCcsIGJvZHk6ICdUcnkgYWdhaW4gbGF0ZXIuJyB9ICApO1xyXG4gICAgfSBlbHNlIGlmKCB0aGlzLnN0YXRlLmVycm9yICkge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBoKCBFcnJvck1lc3NhZ2UgKTtcclxuICAgIH1cclxuICAgIGxldCBzZWFyY2hCb2R5ID0gZXJyb3JNZXNzYWdlID8gZXJyb3JNZXNzYWdlIDogc2VhcmNoTGlzdGluZztcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LnNlYXJjaCcsIFtcclxuICAgICAgaCgnZGl2LnNlYXJjaC1uYXYtbGlua3MnLCBbXHJcbiAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgIGhyZWY6IFBDX1VSTCxcclxuICAgICAgICAgIHRhcmdldDogJ19ibGFuaydcclxuICAgICAgICB9LCAnQWJvdXQnKSxcclxuXHJcbiAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgIGhyZWY6IFBDX1VSTCArICcjZmFxJyxcclxuICAgICAgICAgIHRhcmdldDogJ19ibGFuaydcclxuICAgICAgICB9LCAnRkFRJyksXHJcblxyXG4gICAgICAgIGgoJ2EnLCB7XHJcbiAgICAgICAgICBocmVmOiBQQ19VUkwgKyAnI3RyYWluaW5nJyxcclxuICAgICAgICAgIHRhcmdldDogJ19ibGFuaydcclxuICAgICAgICB9LCAnVHJhaW5pbmcnKSxcclxuXHJcbiAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgIGhyZWY6IFBDX1VSTCArICcjZGF0YScsXHJcbiAgICAgICAgICB0YXJnZXQ6ICdfYmxhbmsnXHJcbiAgICAgICAgfSwgJ0RhdGEnKSxcclxuXHJcbiAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgIGhyZWY6IFBDX1VSTCArICcjY29udGFjdCcsXHJcbiAgICAgICAgICB0YXJnZXQ6ICdfYmxhbmsnXHJcbiAgICAgICAgfSwgJ0NvbnRhY3QnKSxcclxuXHJcbiAgICAgICAgaChDb250cmlidXRlLCB7dGV4dDogJ0NvbnRyaWJ1dGUnfSlcclxuICAgICAgXSksXHJcbiAgICAgIGgoJ2Rpdi5zZWFyY2gtaGVhZGVyJywgW1xyXG4gICAgICAgIGgoJ2Rpdi5zZWFyY2gtYnJhbmRpbmcnLCBbXHJcbiAgICAgICAgICBoKFBjTG9nb0xpbmssIHsgY2xhc3NOYW1lOiAnc2VhcmNoLWxvZ28nfSApLFxyXG4gICAgICAgICAgaCgnZGl2LnNlYXJjaC1icmFuZGluZy1kZXNjcmlwdG9yJywgW1xyXG4gICAgICAgICAgICBoKCdoMi5zZWFyY2gtc3VidGl0bGUnLCAnUGF0aHdheSBDb21tb25zJyksXHJcbiAgICAgICAgICAgIGgoJ2gxLnNlYXJjaC10aXRsZScsICdTZWFyY2gnKVxyXG4gICAgICAgICAgXSlcclxuICAgICAgICBdKSxcclxuICAgICAgICBoKCdkaXYuc2VhcmNoLXNlYXJjaGJhci1jb250YWluZXInLCB7XHJcbiAgICAgICAgICByZWY6IGRvbSA9PiB0aGlzLnNlYXJjaEJhciA9IGRvbVxyXG4gICAgICAgIH0sIFtcclxuICAgICAgICAgIGgoJ2Rpdi5zZWFyY2gtc2VhcmNoYmFyJywgW1xyXG4gICAgICAgICAgICBoKCdpbnB1dCcsIHtcclxuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdFbnRlciBwYXRod2F5IG5hbWUgb3IgZ2VuZSBuYW1lcycsXHJcbiAgICAgICAgICAgICAgdmFsdWU6IHF1ZXJ5LnEsXHJcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiAyNTAsIC8vIDI1MCBjaGFycyBtYXggb2YgdXNlciBpbnB1dFxyXG4gICAgICAgICAgICAgIG9uQ2hhbmdlOiBlID0+IHRoaXMub25TZWFyY2hWYWx1ZUNoYW5nZShlKSxcclxuICAgICAgICAgICAgICBvbktleVByZXNzOiBlID0+IHRoaXMub25TZWFyY2hWYWx1ZUNoYW5nZShlKVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgaChMaW5rLCB7IHRvOiB7IHBhdGhuYW1lOiAnL3NlYXJjaCcsIHNlYXJjaDogcXVlcnlTdHJpbmcuc3RyaW5naWZ5KHF1ZXJ5KX0sY2xhc3NOYW1lOlwic2VhcmNoLXNlYXJjaC1idXR0b25cIn0sIFtcclxuICAgICAgICAgICAgICBoKCdpLm1hdGVyaWFsLWljb25zJywgJ3NlYXJjaCcpXHJcbiAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICBdKSxcclxuICAgICAgICAgIGgoJ2Rpdi5zZWFyY2gtc3VnZ2VzdGlvbnMnLCBbXHJcbiAgICAgICAgICAgICdlLmcuICcsXHJcbiAgICAgICAgICAgIGgoTGluaywgeyB0bzogeyBwYXRobmFtZTogJy9zZWFyY2gnLCBzZWFyY2g6IHF1ZXJ5U3RyaW5nLnN0cmluZ2lmeShfLmFzc2lnbih7fSwgcXVlcnksIHtxOiAnY2VsbCBjeWNsZSd9KSkgfX0sICdjZWxsIGN5Y2xlLCAnKSxcclxuICAgICAgICAgICAgaChMaW5rLCB7IHRvOiB7IHBhdGhuYW1lOiAnL3NlYXJjaCcsIHNlYXJjaDogcXVlcnlTdHJpbmcuc3RyaW5naWZ5KF8uYXNzaWduKHt9LCBxdWVyeSwge3E6ICdTUkMgVExOMSBETEMxIFBYTiBWQ0wgS0FOSzEnfSkpIH19LCAnU1JDIFRMTjEgRExDMSBQWE4gVkNMIEtBTksxLCAnKSxcclxuICAgICAgICAgICAgaChMaW5rLCB7IHRvOiB7IHBhdGhuYW1lOiAnL3NlYXJjaCcsIHNlYXJjaDogcXVlcnlTdHJpbmcuc3RyaW5naWZ5KF8uYXNzaWduKHt9LCBxdWVyeSwge3E6ICd1bmlwcm90OlE5WTQ5MCd9KSkgfX0sICd1bmlwcm90OlE5WTQ5MCcpXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pLFxyXG4gICAgICBoKCdkaXYuc2VhcmNoLWJvZHknLCBbc2VhcmNoQm9keV0pXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gU2VhcmNoO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3NlYXJjaC9pbmRleC5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IExpbmsgPSByZXF1aXJlKCdyZWFjdC1yb3V0ZXItZG9tJykuTGluaztcclxuY29uc3QgcXVlcnlTdHJpbmcgPSByZXF1aXJlKCdxdWVyeS1zdHJpbmcnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCBjbGFzc05hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xyXG5cclxuY29uc3QgeyBFcnJvck1lc3NhZ2UgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzL2Vycm9yLW1lc3NhZ2UnKTtcclxuXHJcbmNsYXNzIFBhdGh3YXlSZXN1bHRzVmlldyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBzZWFyY2hIaXRzOiBwYXRod2F5UmVzdWx0cywgY29udHJvbGxlciwgcXVlcnkgLCBkYXRhU291cmNlcywgaGFzRmVhdHVyZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGN1ckRhdGFzb3VyY2UgPSBxdWVyeS5kYXRhc291cmNlO1xyXG4gICAgY29uc3Qgc291cmNlcyA9IGRhdGFTb3VyY2VzLmZpbHRlciggc291cmNlID0+IHF1ZXJ5LnR5cGUgPT09ICdQYXRod2F5JyA/IHNvdXJjZS5udW1QYXRod2F5cyA6IHNvdXJjZS5udW1JbnRlcmFjdGlvbnMgKTtcclxuICAgIGNvbnN0IG5vUGF0aHdheXNNc2cgPSBoKCBFcnJvck1lc3NhZ2UsIHsgdGl0bGU6ICdZb3VyIHNlYXJjaCBkaWRuXFwndCBtYXRjaCBhbnkgcGF0aHdheXMnLCBmb290ZXI6ICdUcnkgZGlmZmVyZW50IGtleXdvcmRzIG9yIGdlbmUgbmFtZXMuJ30gKTtcclxuXHJcbiAgICBpZiggcGF0aHdheVJlc3VsdHMgPT09IG51bGwgKXtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VhcmNoTGlzdCA9IHBhdGh3YXlSZXN1bHRzLm1hcCggKCByZXN1bHQsIGluZGV4ICkgPT4ge1xyXG4gICAgICBsZXQgZHNJbmZvID0gXy5nZXQoIHJlc3VsdCwgJ3NvdXJjZUluZm8nLCAnJyApO1xyXG4gICAgICBsZXQgaWNvblVybCA9IGRzSW5mby5pY29uVXJsIHx8ICcnO1xyXG4gICAgICBsZXQgbmFtZSA9IGRzSW5mby5uYW1lIHx8ICcnO1xyXG4gICAgICBjb25zdCBwYXRod2F5VGl0bGUgPSByZXN1bHQubmFtZTsgICAgICBcclxuICAgICAgY29uc3QgdG9wSGl0ID0gaW5kZXggPT09IDA7XHJcbiAgICAgIGNvbnN0IGhhc1ByZXZpZXcgPSByZXN1bHQucHJldmlld1VybDtcclxuICAgICAgY29uc3Qgc2hvd1ByZXZpZXcgPSB0b3BIaXQgJiYgaGFzUHJldmlldztcclxuICAgIFxyXG4gICAgICBsZXQgaXRlbTtcclxuICAgICAgY29uc3QgaXRlbUxpbmsgPSBjaGlsZHJlbiA9PiBoKExpbmssIHsgY2xhc3NOYW1lOiAncGxhaW4tbGluaycsIHRvOiB7IHBhdGhuYW1lOiAnL3BhdGh3YXlzJywgc2VhcmNoOiBxdWVyeVN0cmluZy5zdHJpbmdpZnkoeyB1cmk6IHJlc3VsdC51cmkgfSkgfSwgdGFyZ2V0OiAnX2JsYW5rJyB9LCBjaGlsZHJlbiB8fCAnTi9BJyk7XHJcbiAgICAgIGNvbnN0IGl0ZW1QcmV2aWV3ID0gaCgnaW1nLnNlYXJjaC1pdGVtLXByZXZpZXcnLCB7c3JjOiByZXN1bHQucHJldmlld1VybH0pO1xyXG4gICAgICBjb25zdCBpdGVtSW5mbyA9IHRpdGxlID0+IGgoJ2Rpdi5zZWFyY2gtaXRlbS1pbmZvJywgW1xyXG4gICAgICAgIGgoJ2Rpdi5zZWFyY2gtaXRlbS1pY29uJywgWyBcclxuICAgICAgICAgIGgoJ2ltZycsIHtzcmM6IGljb25Vcmx9KSBcclxuICAgICAgICBdKSxcclxuICAgICAgICBoKCdkaXYuc2VhcmNoLWl0ZW0tY29udGVudCcsIFtcclxuICAgICAgICAgIHRpdGxlLCAgICAgICAgIFxyXG4gICAgICAgICAgaCgncC5zZWFyY2gtaXRlbS1jb250ZW50LWRhdGFzb3VyY2UnLCBgICR7bmFtZX1gKSxcclxuICAgICAgICAgIGgoJ3Auc2VhcmNoLWl0ZW0tY29udGVudC1wYXJ0aWNpcGFudHMnLCBgJHtyZXN1bHQubnVtUGFydGljaXBhbnRzfSBQYXJ0aWNpcGFudHNgKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pO1xyXG4gICAgICBcclxuICAgICAgaWYoIHNob3dQcmV2aWV3ICl7IFxyXG4gICAgICAgIC8vIFdyYXAgdGhlIGVudGlyZSBpdGVtIGluIGEgbGluayBcclxuICAgICAgICBpdGVtID0gaXRlbUxpbmsoW1xyXG4gICAgICAgICAgaXRlbUluZm8oIHBhdGh3YXlUaXRsZSApLCBcclxuICAgICAgICAgIGl0ZW1QcmV2aWV3XHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBsaW5rIHdpdGggdGhlIGNvbnRlbnRcclxuICAgICAgICBpdGVtID0gaXRlbUluZm8oIGl0ZW1MaW5rKCBwYXRod2F5VGl0bGUgKSApO1xyXG4gICAgICB9IFxyXG4gICAgICBcclxuICAgICAgcmV0dXJuIGgoJ2Rpdi5zZWFyY2gtaXRlbScsIHtcclxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoeyAncHJldmlldyc6IHNob3dQcmV2aWV3IH0pXHJcbiAgICAgIH0sIGl0ZW0gKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNlYXJjaFJlc3VsdEZpbHRlciA9IGgoJ2Rpdi5zZWFyY2gtZmlsdGVycycsIFtcclxuICAgICAgaCgnc2VsZWN0LnNlYXJjaC1kYXRhc291cmNlLWZpbHRlcicsIHtcclxuICAgICAgICB2YWx1ZTogIUFycmF5LmlzQXJyYXkoY3VyRGF0YXNvdXJjZSkgPyBjdXJEYXRhc291cmNlIDogJycsXHJcbiAgICAgICAgbXVsdGlwbGU6IGZhbHNlLFxyXG4gICAgICAgIG9uQ2hhbmdlOiBlID0+IGNvbnRyb2xsZXIuc2V0QW5kU3VibWl0U2VhcmNoUXVlcnkoeyBkYXRhc291cmNlOiBlLnRhcmdldC52YWx1ZSB9KVxyXG4gICAgICB9LCBbXHJcbiAgICAgICAgaCgnb3B0aW9uJywgeyB2YWx1ZTogW10gfSwgJ0FueSBkYXRhc291cmNlJyldLmNvbmNhdChcclxuICAgICAgICAgIHNvdXJjZXMubWFwKCBkcyA9PiBoKCdvcHRpb24nLCB7IHZhbHVlOiBbZHMuaWRlbnRpZmllciBdIH0sIGRzLm5hbWUgKSlcclxuICAgICAgICAgICkpLFxyXG4gICAgXSk7XHJcblxyXG4gICAgY29uc3QgaGVhZGVyID0gaCgnaDMuc2VhcmNoLXBhdGh3YXlzLWhlYWRlcicsIHBhdGh3YXlSZXN1bHRzLmxlbmd0aCA/IGBQYXRod2F5cyAoJHtzZWFyY2hMaXN0Lmxlbmd0aH0pYDogbnVsbCk7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSBwYXRod2F5UmVzdWx0cy5sZW5ndGggfHwgY3VyRGF0YXNvdXJjZS5sZW5ndGggPyBzZWFyY2hSZXN1bHRGaWx0ZXI6IG51bGw7XHJcbiAgICBjb25zdCBsaXN0aW5nID0gcGF0aHdheVJlc3VsdHMubGVuZ3RoIHx8IGhhc0ZlYXR1cmUgPyBzZWFyY2hMaXN0OiBbbm9QYXRod2F5c01zZ107XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5zZWFyY2gtcGF0aHdheS1yZXN1bHRzJywgW1xyXG4gICAgICBoKCdkaXYuc2VhcmNoLXRvb2xzJywgWyBoZWFkZXIsIGZpbHRlciBdKSxcclxuICAgICAgLi4ubGlzdGluZ1xyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHsgUGF0aHdheVJlc3VsdHNWaWV3IH07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvc2VhcmNoL3BhdGh3YXktcmVzdWx0cy12aWV3LmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XG5jb25zdCBxdWVyeVN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5LXN0cmluZycpO1xuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xuXG5jb25zdCBNSU5fR0VORV9DT1VOVF9FTlJJQ0hNRU5UID0gNTtcbmNvbnN0IHsgTlNfSEdOQ19TWU1CT0wsIE5TX0dFTkVDQVJEUywgTlNfTkNCSV9HRU5FLCBOU19VTklQUk9UIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9jb25maWcnKTtcbmNvbnN0IHsgQXBwQ2FyZCB9ID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2NvbXBvbmVudHMnKTtcblxuY29uc3QgU1VQUE9SVEVEX0NPTExFQ1RJT05TID0gbmV3IE1hcChbXG4gIFtOU19HRU5FQ0FSRFMsICdHZW5lQ2FyZHMnXSxcbiAgW05TX0hHTkNfU1lNQk9MLCAnSEdOQyddLFxuICBbTlNfTkNCSV9HRU5FLCAnTkNCSSBHZW5lJ10sXG4gIFtOU19VTklQUk9ULCAnVW5pUHJvdCddXG5dKTtcblxuY2xhc3MgRW50aXR5U3VtbWFyeUJveCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICBsZXQgeyBnZW5lSW5mbyB9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgeyBnZW5lU3ltYm9sLCBzdW1tYXJ5IH0gPSBnZW5lSW5mbztcbiAgICBsZXQgeyBkaXNwbGF5TmFtZSwgeHJlZkxpbmtzIH0gPSBzdW1tYXJ5O1xuXG4gICAgLy8gc29tZXRpbWVzIGR1cGxpY2F0ZWQgbmFtZXNwYWNlL3VyaSBwYWlycyBhcmUgcmVjZWl2ZWQgZS5nLiB1bmlwcm90L3RwNTMgdHdpY2VcbiAgICBsZXQgc29ydGVkTGlua3MgPSBfLnVuaXFXaXRoKHhyZWZMaW5rcy5zb3J0KChwMSwgcDIpID0+IHAxLm5hbWVzcGFjZSA+IHAyLm5hbWVzcGFjZSA/IDEgOiAtMSksIChwMSwgcDIpID0+IHAxLm5hbWVzcGFjZSA9PT0gcDIubmFtZXNwYWNlKVxuICAgICAgLm1hcChsaW5rID0+IGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogbGluay51cmksIHRhcmdldDogJ19ibGFuaycgfSwgU1VQUE9SVEVEX0NPTExFQ1RJT05TLmdldChsaW5rLm5hbWVzcGFjZSkpKTtcblxuICAgIHJldHVybiBoKCdkaXYuZW50aXR5LXN1bW1hcnktYm94JywgW1xuICAgICAgaCgnaDUuZW50aXR5LXN1YnRpdGxlJywgZGlzcGxheU5hbWUpLFxuICAgICAgaCgnaDMuZW50aXR5LXRpdGxlJywgZ2VuZVN5bWJvbCksXG4gICAgICBoKCdkaXYuZW50aXR5LWxpbmtzLWNvbnRhaW5lcicsIFtcbiAgICAgICAgLi4uc29ydGVkTGlua3NcbiAgICAgIF0pXG4gICAgXSk7XG4gIH1cbn1cblxuY2xhc3MgR2VuZVJlc3VsdHNWaWV3IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHNob3dMZWZ0QnV0dG9uOiBmYWxzZSxcbiAgICAgIHNob3dSaWdodEJ1dHRvbjogZmFsc2VcbiAgICB9O1xuICAgIFxuICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XG4gICAgdGhpcy5pdGVtV2lkdGggPSAyMDsgLy8gaW4gZW0gdW5pdHNcbiAgICB0aGlzLnZpc2libGVJdGVtcyA9IDM7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmNoZWNrU2Nyb2xsKCk7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXJSZWYuY3VycmVudD8uYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5jaGVja1Njcm9sbCk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lclJlZi5jdXJyZW50Py5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmNoZWNrU2Nyb2xsKTtcbiAgfVxuXG4gIGNoZWNrU2Nyb2xsID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnNjcm9sbENvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCB7IHNjcm9sbExlZnQsIHNjcm9sbFdpZHRoLCBjbGllbnRXaWR0aCB9ID0gdGhpcy5zY3JvbGxDb250YWluZXJSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IHsgZ2VuZVJlc3VsdHMgfSA9IHRoaXMucHJvcHM7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc2hvd0xlZnRCdXR0b246IHNjcm9sbExlZnQgPiAwICYmIGdlbmVSZXN1bHRzLmxlbmd0aCA+IHRoaXMudmlzaWJsZUl0ZW1zLFxuICAgICAgICBzaG93UmlnaHRCdXR0b246IHNjcm9sbExlZnQgPCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoICYmIGdlbmVSZXN1bHRzLmxlbmd0aCA+IHRoaXMudmlzaWJsZUl0ZW1zXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGwgPSAoZGlyZWN0aW9uKSA9PiB7XG4gICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBjYXJkV2lkdGggPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLmNhcmQnKS5vZmZzZXRXaWR0aDtcbiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoO1xuICAgICAgY29uc3Qgc2Nyb2xsQW1vdW50ID0gTWF0aC5mbG9vcihjb250YWluZXJXaWR0aCAvIGNhcmRXaWR0aCkgKiBjYXJkV2lkdGg7XG4gICAgICBcbiAgICAgIGNvbnN0IG5ld1Njcm9sbExlZnQgPSBjb250YWluZXIuc2Nyb2xsTGVmdCArIChkaXJlY3Rpb24gPT09ICdsZWZ0JyA/IC1zY3JvbGxBbW91bnQgOiBzY3JvbGxBbW91bnQpO1xuICAgICAgY29udGFpbmVyLnNjcm9sbFRvKHtcbiAgICAgICAgbGVmdDogbmV3U2Nyb2xsTGVmdCxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRFbnJpY2htZW50QXBwSW5mbyhnZW5lUmVzdWx0cywgc2VhcmNoU3RyaW5nKSB7XG4gICAgbGV0IGVuYWJsZWQgPSBnZW5lUmVzdWx0cy5sZW5ndGggPj0gTUlOX0dFTkVfQ09VTlRfRU5SSUNITUVOVDtcbiAgICBsZXQgaGludCA9IGBSZXF1aXJlcyBhdCBsZWFzdCAke01JTl9HRU5FX0NPVU5UX0VOUklDSE1FTlR9IGdlbmVzLmA7XG4gICAgbGV0IGxpbmtQYXRoID0gJy9lbnJpY2htZW50JztcbiAgICBsZXQgdXJsID0gYCR7bGlua1BhdGh9Lz8ke3NlYXJjaFN0cmluZ31gO1xuICAgIGxldCBpbWFnZUNsYXNzID0gJ2VucmljaG1lbnQtbG9nbyc7XG4gICAgbGV0IHRpdGxlID0gJ0VucmljaG1lbnQnO1xuICAgIGxldCBib2R5ID0gJ0V4cGxvcmUgYSBuZXR3b3JrIG9mIHBhdGh3YXlzIHRoYXQgY29udGFpbiBnZW5lcyBpZGVudGlmaWVkIGluIHlvdXIgcXVlcnkuJztcblxuICAgIHJldHVybiB7IGVuYWJsZWQsIGhpbnQsIHVybCwgaW1hZ2VDbGFzcywgdGl0bGUsIGJvZHksIGxpbmtpZnlDb250ZW50OiB0cnVlIH07XG4gIH1cblxuICBnZXRJbnRlcmFjdGlvbnNBcHBJbmZvKGdlbmVSZXN1bHRzLCBzZWFyY2hTdHJpbmcpIHtcbiAgICBsZXQgZW5hYmxlZCA9IGdlbmVSZXN1bHRzLmxlbmd0aCA+IDA7XG4gICAgbGV0IGhpbnQgPSBgUmVxdWlyZXMgb25lIHJlY29nbml6ZWQgZ2VuZS5gO1xuICAgIGxldCBsaW5rUGF0aCA9ICcvaW50ZXJhY3Rpb25zJztcbiAgICBsZXQgdXJsID0gYCR7bGlua1BhdGh9Lz8ke3NlYXJjaFN0cmluZ31gO1xuICAgIGxldCBpbWFnZUNsYXNzID0gJ2ludGVyYWN0aW9ucy1sb2dvJztcbiAgICBsZXQgdGl0bGUgPSAnSW50ZXJhY3Rpb25zJztcbiAgICBsZXQgYm9keSA9ICdWaXN1YWxpemUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIGdlbmVzIGlkZW50aWZpZWQgaW4geW91ciBxdWVyeS4nO1xuXG4gICAgcmV0dXJuIHsgZW5hYmxlZCwgaGludCwgdXJsLCBpbWFnZUNsYXNzLCB0aXRsZSwgYm9keSwgbGlua2lmeUNvbnRlbnQ6IHRydWUgfTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBsZXQgeyBnZW5lUmVzdWx0cyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNob3dMZWZ0QnV0dG9uLCBzaG93UmlnaHRCdXR0b24gfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBpZiAoZ2VuZVJlc3VsdHMgPT09IG51bGwgfHwgZ2VuZVJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgc291cmNlcyA9IGdlbmVSZXN1bHRzLm1hcChnZW5lSW5mbyA9PiBnZW5lSW5mby5nZW5lU3ltYm9sKTtcbiAgICBsZXQgc2VhcmNoU3RyaW5nID0gcXVlcnlTdHJpbmcuc3RyaW5naWZ5KHsgc291cmNlOiBzb3VyY2VzLmpvaW4oJywnKSB9KTtcblxuICAgIGNvbnN0IGFwcHNJbmZvcyA9IFtcbiAgICAgIHRoaXMuZ2V0SW50ZXJhY3Rpb25zQXBwSW5mbyhnZW5lUmVzdWx0cywgc2VhcmNoU3RyaW5nKSxcbiAgICAgIHRoaXMuZ2V0RW5yaWNobWVudEFwcEluZm8oZ2VuZVJlc3VsdHMsIHNlYXJjaFN0cmluZylcbiAgICBdLm1hcChpbmZvID0+IGgoQXBwQ2FyZCwgaW5mbykpO1xuXG4gICAgcmV0dXJuIGgoJ2Rpdi5zZWFyY2gtZ2VuZXMtcmVzdWx0cycsIFtcbiAgICAgIGgoJ2gzLnNlYXJjaC1nZW5lcy1oZWFkZXInLCBgUmVjb2duaXplZCBnZW5lcyAoJHtnZW5lUmVzdWx0cy5sZW5ndGh9KWApLFxuICAgICAgaCgnZGl2LnNlYXJjaC1nZW5lcy1zY3JvbGwtY29udGFpbmVyJywgW1xuICAgICAgICBzaG93TGVmdEJ1dHRvbiAmJiBoKCdidXR0b24uc2Nyb2xsLWNhcmV0LWJ1dHRvbi5sZWZ0Jywge1xuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHRoaXMuc2Nyb2xsKCdsZWZ0JyksXG4gICAgICAgICAgZGlzYWJsZWQ6ICFzaG93TGVmdEJ1dHRvbixcbiAgICAgICAgICBjbGFzc05hbWU6IHNob3dMZWZ0QnV0dG9uID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnXG4gICAgICAgIH0sIFtcbiAgICAgICAgICBoKCdpLmljb24uaWNvbi1jaGV2cm9uLWxlZnQnKVxuICAgICAgICBdKSxcbiAgICAgICAgaCgnZGl2LnNlYXJjaC1nZW5lcy1saXN0Jywge1xuICAgICAgICAgIHJlZjogdGhpcy5zY3JvbGxDb250YWluZXJSZWYsXG4gICAgICAgICAgb25TY3JvbGw6IHRoaXMuY2hlY2tTY3JvbGxcbiAgICAgICAgfSwgW1xuICAgICAgICAgIC4uLmdlbmVSZXN1bHRzLm1hcChnZW5lSW5mbyA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaCgnZGl2LmNhcmQnLCBbXG4gICAgICAgICAgICAgIGgoRW50aXR5U3VtbWFyeUJveCwgeyBnZW5lSW5mbyB9KVxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgXSksXG4gICAgICAgIHNob3dSaWdodEJ1dHRvbiAmJiBoKCdidXR0b24uc2Nyb2xsLWNhcmV0LWJ1dHRvbi5yaWdodCcsIHtcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB0aGlzLnNjcm9sbCgncmlnaHQnKSxcbiAgICAgICAgICBkaXNhYmxlZDogIXNob3dSaWdodEJ1dHRvbixcbiAgICAgICAgICBjbGFzc05hbWU6IHNob3dSaWdodEJ1dHRvbiA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJ1xuICAgICAgICB9LCBbXG4gICAgICAgICAgaCgnaS5pY29uLmljb24tY2hldnJvbi1yaWdodCcpXG4gICAgICAgIF0pXG4gICAgICBdKSxcbiAgICAgIGgoJ2Rpdi5zZWFyY2gtYXBwLWNhcmRzJywgYXBwc0luZm9zKVxuICAgIF0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBHZW5lUmVzdWx0c1ZpZXcgfTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL3NlYXJjaC9nZW5lLXJlc3VsdHMtdmlldy5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IHsgQXBwQ2FyZCB9ID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2NvbXBvbmVudHMnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5cclxuY29uc3Qge1xyXG4gIE5TX0JJT0ZBQ1RPSUQsXHJcbiAgTlNfUEFUSFdBWUNPTU1PTlNcclxufSA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbmZpZycpO1xyXG5cclxuY2xhc3MgRmVhdHVyZVZpZXcgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG5cclxuICByZW5kZXIoKXtcclxuXHJcbiAgICBjb25zdCB7IGZlYXR1cmUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiggZmVhdHVyZSA9PSBudWxsICkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgTUFYX0FVVEhPUlMgPSA4O1xyXG5cclxuICAgIGNvbnN0IHsgYXJ0aWNsZSwgcGF0aHdheXMsIGF1dGhvcnMgfSA9IGZlYXR1cmU7XHJcbiAgICBjb25zdCBwY1BhdGh3YXkgPSBfLmZpbmQoIHBhdGh3YXlzLCBbJ2RiJywgTlNfUEFUSFdBWUNPTU1PTlNdICk7XHJcbiAgICBjb25zdCBiaW9mYWN0b2lkUGF0aHdheSA9IF8uZmluZCggcGF0aHdheXMsIFsnZGInLCBOU19CSU9GQUNUT0lEXSApO1xyXG5cclxuICAgIC8vIENhcmQgQ29udGVudFxyXG4gICAgY29uc3QgYm9keSA9IGJpb2ZhY3RvaWRQYXRod2F5LnRleHQ7XHJcblxyXG4gICAgLy8gQXV0aG9yc1xyXG4gICAgbGV0IGF1dGhvckxpc3QgPSBhdXRob3JzLm1hcCggKHsgdXJsOiBocmVmLCBsYWJlbCB9LCBrZXkpID0+IHtcclxuICAgICAgbGV0IGVsZW1lbnQgPSBudWxsO1xyXG4gICAgICBpZiggaHJlZiApe1xyXG4gICAgICAgIGVsZW1lbnQgPSBbXHJcbiAgICAgICAgICBoKCdhLnBsYWluLWxpbmsnLCB7IGhyZWYsIHRhcmdldDogJ19ibGFuaycgfSwgYCR7bGFiZWx9IGAgKSxcclxuICAgICAgICAgIGgoJ2kuaWNvbi5pY29uLW9yY2lkJylcclxuICAgICAgICBdO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVsZW1lbnQgPSBoKCAnc3BhbicsIGxhYmVsICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGgoJ2xpJywgeyBrZXkgfSwgZWxlbWVudCApO1xyXG4gICAgfSk7XHJcbiAgICBpZiAoIGF1dGhvckxpc3QubGVuZ3RoID4gTUFYX0FVVEhPUlMgKXsgLy8gQWJicmV2aWF0ZSB3aGVuIG5lY2Vzc2FyeVxyXG4gICAgICBjb25zdCBudW1Gcm9tU3RhcnQgPSBNYXRoLmZsb29yKCBNQVhfQVVUSE9SUyAvIDIgKTtcclxuICAgICAgY29uc3QgbnVtRnJvbUVuZCA9IE1hdGguY2VpbCggTUFYX0FVVEhPUlMgLyAyICk7XHJcbiAgICAgIGF1dGhvckxpc3QgPSBfLmNvbmNhdChcclxuICAgICAgICBfLnRha2UoIGF1dGhvckxpc3QsIG51bUZyb21TdGFydCApLFxyXG4gICAgICAgIGgoJ2xpJywgJy4uLicpLFxyXG4gICAgICAgIF8udGFrZVJpZ2h0KCBhdXRob3JMaXN0LCBudW1Gcm9tRW5kIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gKFxyXG4gICAgICBoKCdkaXYuZmVhdHVyZS1jb250YWluZXInLCBbXHJcbiAgICAgICAgaCgnZGl2LmZlYXR1cmUtYXJlYS5wYXRod2F5JywgW1xyXG4gICAgICAgICAgaCgnZGl2LmZlYXR1cmUtaXRlbScsIFtcclxuICAgICAgICAgICAgaChBcHBDYXJkLCB7XHJcbiAgICAgICAgICAgICAgdXJsOiBiaW9mYWN0b2lkUGF0aHdheS51cmwsXHJcbiAgICAgICAgICAgICAgaW1hZ2U6IGgoJ2ltZycsIHsgc3JjOiBiaW9mYWN0b2lkUGF0aHdheS5pbWFnZVNyYyB9KSxcclxuICAgICAgICAgICAgICB0aXRsZTogaCgnZGl2JywgW1xyXG4gICAgICAgICAgICAgICAgaCgnaS5pY29uLmxvZ28tYmlvZmFjdG9pZCcpLFxyXG4gICAgICAgICAgICAgICAgYmlvZmFjdG9pZFBhdGh3YXkub3JnYW5pc20gPyBoKCdzcGFuJywgYmlvZmFjdG9pZFBhdGh3YXkub3JnYW5pc20gKSA6IG51bGxcclxuICAgICAgICAgICAgICBdKSxcclxuICAgICAgICAgICAgICBib2R5XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBoKCdhLnBsYWluLWxpbmsnLCB7XHJcbiAgICAgICAgICAgICAgaHJlZjogYC9wYXRod2F5cz91cmk9JHtwY1BhdGh3YXkudXJsfWAsXHJcbiAgICAgICAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJ1xyXG4gICAgICAgICAgICB9LCAnRGV0YWlsZWQgcGF0aHdheSB2aWV3IChTQkdOKScpXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIGgoJ2Rpdi5mZWF0dXJlLWFyZWEuYXJ0aWNsZScsIFtcclxuICAgICAgICAgIGgoJ2Rpdi5mZWF0dXJlLWl0ZW0nLCBbXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5oZWFkbGluZScsIGFydGljbGUudGl0bGUgKSxcclxuICAgICAgICAgICAgaCgndWwuaG9yaXpvbnRhbC1saXN0LmZlYXR1cmUtZGV0YWlsJywgYXV0aG9yTGlzdCApLFxyXG4gICAgICAgICAgICBoKCdkaXYuaG9yaXpvbnRhbC1saXN0LmZlYXR1cmUtZGV0YWlsLmZlYXR1cmUtZGV0YWlsLWxpbmtzJyxcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYuZmVhdHVyZS1kZXRhaWwtbGluaycsIFtcclxuICAgICAgICAgICAgICAgICAgYXJ0aWNsZS5kb2lVcmwgP1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogYXJ0aWNsZS5kb2lVcmwsIHRhcmdldDogJ19ibGFuaycgfSwgYXJ0aWNsZS5yZWZlcmVuY2UgKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgaCggJ3NwYW4nLCBhcnRpY2xlLnJlZmVyZW5jZSApLFxyXG4gICAgICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgICAgICBoKCdkaXYuZmVhdHVyZS1kZXRhaWwtbGluaycsIFtcclxuICAgICAgICAgICAgICAgICAgYXJ0aWNsZS5wdWJtZWRVcmwgP1xyXG4gICAgICAgICAgICAgICAgICAgIGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogYXJ0aWNsZS5wdWJtZWRVcmwsIHRhcmdldDogJ19ibGFuaycgfSwgJ1B1Yk1lZCcgKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgaCgnZGl2LmZlYXR1cmUtYXJlYS5mb290ZXInLCBbIGgoJ2hyJykgXSApXHJcbiAgICAgIF0pXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IEZlYXR1cmVWaWV3IH07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9zZWFyY2gvZmVhdHVyZS12aWV3LmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCBxdWVyeVN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5LXN0cmluZycpO1xyXG5jb25zdCBMb2FkZXIgPSByZXF1aXJlKCdyZWFjdC1sb2FkZXInKTtcclxuY29uc3QgY2xhc3NOYW1lcyA9IHJlcXVpcmUoJ2NsYXNzbmFtZXMnKTtcclxuXHJcbmNvbnN0IGNvbmZpZyA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbmZpZycpO1xyXG5jb25zdCBDeXRvc2NhcGVTZXJ2aWNlID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2N5LycpO1xyXG5jb25zdCB7IFNlcnZlckFQSSB9ID0gcmVxdWlyZSgnLi4vLi4vc2VydmljZXMvJyk7XHJcblxyXG5jb25zdCBJbnRlcmFjdGlvbnNUb29sYmFyID0gcmVxdWlyZSgnLi9pbnRlcmFjdGlvbnMtdG9vbGJhcicpO1xyXG5jb25zdCB7IFBvcG92ZXIsIFBjTG9nb0xpbmssIEN5dG9zY2FwZU5ldHdvcmsgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzLycpO1xyXG5cclxuY29uc3QgeyBpbnRlcmFjdGlvbnNTdHlsZXNoZWV0LCBpbnRlcmFjdGlvbnNMYXlvdXRPcHRzLCBiaW5kRXZlbnRzIH0gPSByZXF1aXJlKCcuL2N5Jyk7XHJcbmNvbnN0IHsgVGltZW91dEVycm9yIH0gPSByZXF1aXJlKCcuLi8uLi8uLi91dGlsJyk7XHJcbmNvbnN0IHsgRXJyb3JNZXNzYWdlIH0gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy9lcnJvci1tZXNzYWdlJyk7XHJcblxyXG5jb25zdCBNQVhfRUxFTUVOVFNfQ1VUT0ZGID0gMztcclxuY29uc3QgTElTVF9FTEVNRU5UU19TSE9XTiA9IE1BWF9FTEVNRU5UU19DVVRPRkYgLSAxO1xyXG5cclxuY29uc3QgSW50ZXJhY3Rpb25zTWVudSA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb25zLW1lbnUnKTtcclxuY29uc3QgeyBDb250cmlidXRlIH0gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy9jb250cmlidXRlJyk7XHJcblxyXG5jbGFzcyBJbnRlcmFjdGlvbnMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgY3lTcnY6IG5ldyBDeXRvc2NhcGVTZXJ2aWNlKHsgc3R5bGU6IGludGVyYWN0aW9uc1N0eWxlc2hlZXQsIG9uTW91bnQ6IGJpbmRFdmVudHMgfSksXHJcbiAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgIHNvdXJjZXM6IF8udW5pcShxdWVyeVN0cmluZy5wYXJzZShwcm9wcy5sb2NhdGlvbi5zZWFyY2gpLnNvdXJjZS5zcGxpdCgnLCcpKSxcclxuICAgICAgbmV0d29ya0VtcHR5OiBmYWxzZVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiggcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyApe1xyXG4gICAgICB0aGlzLnN0YXRlLmN5U3J2LmdldFByb21pc2UoKS50aGVuKGN5ID0+IHdpbmRvdy5jeSA9IGN5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRJbnRlcmFjdGlvbnNOZXR3b3JrKCl7XHJcbiAgICBsZXQgeyBjeVNydiwgc291cmNlcyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCBpbml0aWFsaXplQ3l0b3NjYXBlID0gbmV0d29yayA9PiB7XHJcblxyXG4gICAgICBsZXQgY3kgPSBjeVNydi5nZXQoKTtcclxuICAgICAgY3kucmVtb3ZlKCcqJyk7XHJcbiAgICAgIGN5LmFkZCggbmV0d29yayApO1xyXG5cclxuICAgICAgaWYoIG5ldHdvcmsubm9kZXMubGVuZ3RoID09PSAwICl7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICBuZXR3b3JrRW1wdHk6IHRydWUsXHJcbiAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgIGVycm9yOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjeS5sYXlvdXQoXy5hc3NpZ24oe30sIGludGVyYWN0aW9uc0xheW91dE9wdHMoIGN5ICksIHtcclxuICAgICAgICBzdG9wOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIGVycm9yOiBudWxsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pKS5ydW4oKTtcclxuICAgIH07XHJcblxyXG4gICAgU2VydmVyQVBJLmdldEludGVyYWN0aW9uR3JhcGgoeyBzb3VyY2VzOiBzb3VyY2VzIH0pXHJcbiAgICAudGhlbiggcmVzdWx0ID0+IHtcclxuICAgICAgaW5pdGlhbGl6ZUN5dG9zY2FwZSggXy5nZXQocmVzdWx0LCAnbmV0d29yaycsIHsgbm9kZXM6IFtdLCBlZGdlczogW10gfSApKTtcclxuICAgICAgcmV0dXJuIG51bGw7IC8vaHR0cDovL2JsdWViaXJkanMuY29tL2RvY3Mvd2FybmluZy1leHBsYW5hdGlvbnMuaHRtbCN3YXJuaW5nLWEtcHJvbWlzZS13YXMtY3JlYXRlZC1pbi1hLWhhbmRsZXItYnV0LXdhcy1ub3QtcmV0dXJuZWQtZnJvbS1pdFxyXG4gICAgfSlcclxuICAgIC5jYXRjaCggZSA9PiB0aGlzLnNldFN0YXRlKHsgZXJyb3I6IGUgfSkpO1xyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgIHRoaXMuc3RhdGUuY3lTcnYuZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCkge1xyXG4gICAgbGV0IHsgbG9hZGluZywgY3lTcnYsIGFjdGl2ZU1lbnUsIHNvdXJjZXMsIG5ldHdvcmtFbXB0eSwgZXJyb3IgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlO1xyXG4gICAgaWYoIG5ldHdvcmtFbXB0eSApIHtcclxuICAgICAgZXJyb3JNZXNzYWdlID0gaChFcnJvck1lc3NhZ2UsIHsgdGl0bGU6ICdObyBpbnRlcmFjdGlvbnMgdG8gZGlzcGxheS4nLCBib2R5OiAnVHJ5IGRpZmZlcmVudCBnZW5lcyBpbiB5b3VyIHNlYXJjaC4nICwgZm9vdGVyOiBudWxsLCBsb2dvOiB0cnVlIH0gKTtcclxuICAgIH0gZWxzZSBpZiggZXJyb3IgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IgKSB7XHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IGgoIEVycm9yTWVzc2FnZSwgeyB0aXRsZTogJ1RoaXMgaXMgdGFraW5nIGxvbmdlciB0aGFuIGV4cGVjdGVkJywgYm9keTogJ1RyeSBhZ2FpbiBsYXRlci4nLCBsb2dvOiB0cnVlIH0gKTtcclxuICAgIH0gZWxzZSBpZiggZXJyb3IgKSB7XHJcbiAgICAgIGVycm9yTWVzc2FnZSA9IGgoIEVycm9yTWVzc2FnZSwgeyBsb2dvOiB0cnVlIH0gKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdGl0bGVDb250ZW50ID0gW107XHJcbiAgICBpZiggc291cmNlcy5sZW5ndGggPT09IDEgKXtcclxuICAgICAgdGl0bGVDb250ZW50LnB1c2goaCgnc3BhbicsIGBJbnRlcmFjdGlvbnMgYmV0d2VlbiAke3NvdXJjZXNbMF19IGFuZCAke2NvbmZpZy5NQVhfU0lGX05PREVTfSBvdGhlciBnZW5lc2ApKTtcclxuICAgIH1cclxuICAgIGlmKCAxIDwgc291cmNlcy5sZW5ndGggJiYgc291cmNlcy5sZW5ndGggPD0gTUFYX0VMRU1FTlRTX0NVVE9GRiApe1xyXG4gICAgICB0aXRsZUNvbnRlbnQucHVzaChoKCdzcGFuJywgYEludGVyYWN0aW9ucyBiZXR3ZWVuICR7IHNvdXJjZXMuc2xpY2UoMCwgc291cmNlcy5sZW5ndGggLSAxKS5qb2luKCcsICcpfSBhbmQgJHtzb3VyY2VzLnNsaWNlKC0xKX1gKSk7XHJcbiAgICB9XHJcbiAgICBpZiggc291cmNlcy5sZW5ndGggPiBNQVhfRUxFTUVOVFNfQ1VUT0ZGICl7XHJcbiAgICAgIHRpdGxlQ29udGVudC5wdXNoKGgoJ3NwYW4nLCBgSW50ZXJhY3Rpb25zIGJldHdlZW4gJHsgc291cmNlcy5zbGljZSgwLCBMSVNUX0VMRU1FTlRTX1NIT1dOKS5qb2luKCcsICcpfSBhbmQgYCkpO1xyXG4gICAgICB0aXRsZUNvbnRlbnQucHVzaChoKFBvcG92ZXIsIHtcclxuICAgICAgICB0aXBweToge1xyXG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgaHRtbDogaCgnZGl2LmVucmljaG1lbnQtc291cmNlcy1wb3BvdmVyJywgc291cmNlcy5zbGljZShMSVNUX0VMRU1FTlRTX1NIT1dOKS5zb3J0KCkubWFwKCBzID0+IGgoJ2RpdicsIHMpICkgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sIFsgaCgnYS5wbGFpbi1saW5rLmVucmljaG1lbnQtcG9wb3Zlci1saW5rJywgYCR7c291cmNlcy5sZW5ndGggLSBMSVNUX0VMRU1FTlRTX1NIT1dOfSBvdGhlciBnZW5lKHMpYCkgXVxyXG4gICAgICApKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYXBwQmFyID0gaCgnZGl2LmFwcC1iYXIuaW50ZXJhY3Rpb25zLWJhcicsIFtcclxuICAgICAgaCgnZGl2LmFwcC1iYXItYnJhbmRpbmcnLCBbXHJcbiAgICAgICAgaChQY0xvZ29MaW5rKSxcclxuICAgICAgICBoKCdkaXYuYXBwLWJhci10aXRsZScsIHRpdGxlQ29udGVudClcclxuICAgICAgXSksXHJcbiAgICAgIGgoSW50ZXJhY3Rpb25zVG9vbGJhciwgeyBjeVNydiwgYWN0aXZlTWVudSwgc291cmNlczogdGhpcy5zdGF0ZS5zb3VyY2VzLCBjb250cm9sbGVyOiB0aGlzIH0pLFxyXG4gICAgICBoKENvbnRyaWJ1dGUsIHsgdGV4dDogJ0FkZCBteSBpbnRlcmFjdGlvbnMnIH0pXHJcbiAgICBdKTtcclxuXHJcbiAgICBsZXQgaW50ZXJhY3Rpb25zTGVnZW5kID0gaCgnZGl2LmludGVyYWN0aW9ucy1sZWdlbmQnLCBbXHJcbiAgICAgIGgoSW50ZXJhY3Rpb25zTWVudSwgeyBjeVNydiB9IClcclxuICAgIF0pO1xyXG5cclxuICAgIGxldCBjb250ZW50ID0gIWVycm9yTWVzc2FnZSA/IFtcclxuICAgICAgaChMb2FkZXIsIHsgbG9hZGVkOiAhbG9hZGluZywgb3B0aW9uczogeyBsZWZ0OiAnNTAlJywgY29sb3I6ICcjMTZhMDg1JyB9fSwgW1xyXG4gICAgICAgIGFwcEJhcixcclxuICAgICAgICBpbnRlcmFjdGlvbnNMZWdlbmRcclxuICAgICAgXSksXHJcbiAgICAgIGgoQ3l0b3NjYXBlTmV0d29yaywge1xyXG4gICAgICAgIGN5U3J2LFxyXG4gICAgICAgIG9uTW91bnQ6ICgpID0+IHRoaXMubG9hZEludGVyYWN0aW9uc05ldHdvcmsoKSxcclxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoe1xyXG4gICAgICAgICduZXR3b3JrLWxvYWRpbmcnOiBsb2FkaW5nXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgIF0gOiBbIGVycm9yTWVzc2FnZSBdO1xyXG5cclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmludGVyYWN0aW9ucycsIGNvbnRlbnQpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9ucztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2ludGVyYWN0aW9ucy9pbmRleC5qcyIsIlxyXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IFJlYWN0RG9tID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5cclxuY29uc3QgUG9wb3ZlciA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzL3BvcG92ZXInKTtcclxuY29uc3QgSWNvbkJ1dHRvbiA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzL2ljb24tYnV0dG9uJyk7XHJcblxyXG5jb25zdCB7IGludGVyYWN0aW9uc0xheW91dE9wdHMsIHNlYXJjaEludGVyYWN0aW9uTm9kZXMgfSA9IHJlcXVpcmUoJy4vY3knKTtcclxuXHJcbmNvbnN0IEludGVyYWN0aW9uc0Rvd25sb2FkTWVudSA9IHJlcXVpcmUoJy4vaW50ZXJhY3Rpb25zLWRvd25sb2FkLW1lbnUnKTtcclxuXHJcbmNsYXNzIEludGVyYWN0aW9uc1Rvb2xiYXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHNlYXJjaFZhbHVlOiAnJ1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU5vZGVTZWFyY2hDaGFuZ2Uoc2VhcmNoVmFsKXtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsIH0sICgpID0+IHNlYXJjaEludGVyYWN0aW9uTm9kZXMoIHRoaXMucHJvcHMuY3lTcnYuZ2V0KCksIHNlYXJjaFZhbCkpO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNOb2RlU2VhcmNoKCl7XHJcbiAgICBSZWFjdERvbS5maW5kRE9NTm9kZSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcuZWxlbWVudC1zZWFyY2gtaW5wdXQnKS5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBjeVNydiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCB7IHNlYXJjaFZhbHVlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IGN5ID0gY3lTcnYuZ2V0KCk7XHJcbiAgICBsZXQgc291cmNlcyA9IHRoaXMucHJvcHMuc291cmNlcyB8fCBbJ2Rvd25sb2FkJ107XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5hcHAtdG9vbGJhcicsIFtcclxuICAgICAgaChQb3BvdmVyLCB7XHJcbiAgICAgICAgdGlwcHk6IHtcclxuICAgICAgICAgIHBvc2l0aW9uOiAnYm90dG9tJyxcclxuICAgICAgICAgIGh0bWw6IGgoSW50ZXJhY3Rpb25zRG93bmxvYWRNZW51LCB7IGN5U3J2LCBzb3VyY2VzIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBbXHJcbiAgICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Rvd25sb2FkcycsXHJcbiAgICAgICAgICBpY29uOiAnZmlsZV9kb3dubG9hZCdcclxuICAgICAgICB9KVxyXG4gICAgICBdKSxcclxuICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdGaXQgdG8gc2NyZWVuJyxcclxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBjeS5hbmltYXRlKHtcclxuICAgICAgICAgIGZpdDoge1xyXG4gICAgICAgICAgICBlbGVzOiBjeS5ub2RlcygpLmZpbHRlciggbiA9PiAhbi5oYXNDbGFzcygndHlwZS1oaWRkZW4nKSAmJiAhbi5oYXNDbGFzcygnbWV0cmljLWhpZGRlbicpKSxcclxuICAgICAgICAgICAgcGFkZGluZzogMjVcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlYXNpbmc6ICdlYXNlLWluLW91dCdcclxuICAgICAgICB9KSxcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaWNvbjogJ2Z1bGxzY3JlZW4nXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKEljb25CdXR0b24sIHtcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1Jlc2V0IGFycmFuZ2VtZW50JyxcclxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBjeS5sYXlvdXQoaW50ZXJhY3Rpb25zTGF5b3V0T3B0cyggY3kgKSkucnVuKCksXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGljb246ICdyZXBsYXknXHJcbiAgICAgIH0pLFxyXG4gICAgICBoKCdkaXYuZWxlbWVudC1zZWFyY2gnLCBbXHJcbiAgICAgICAgaCgnaW5wdXQuZWxlbWVudC1zZWFyY2gtaW5wdXQuaW5wdXQtcm91bmQuaW5wdXQtam9pbmVkJywge1xyXG4gICAgICAgICAgdmFsdWU6IHNlYXJjaFZhbHVlLFxyXG4gICAgICAgICAgb25DaGFuZ2U6IGUgPT4gdGhpcy5oYW5kbGVOb2RlU2VhcmNoQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKSxcclxuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnU2VhcmNoJyxcclxuICAgICAgICB9KSxcclxuICAgICAgICBoKCdidXR0b24uZWxlbWVudC1zZWFyY2gtY2xlYXInLCB7XHJcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTm9kZVNlYXJjaENoYW5nZSgnJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNOb2RlU2VhcmNoKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgW1xyXG4gICAgICAgICAgaCgnaS5tYXRlcmlhbC1pY29ucycsICdjbG9zZScpXHJcbiAgICAgICAgXSlcclxuICAgICAgXSlcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmFjdGlvbnNUb29sYmFyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvaW50ZXJhY3Rpb25zL2ludGVyYWN0aW9ucy10b29sYmFyLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5cclxuY29uc3QgeyBOU19HRU5FQ0FSRFMsIE5TX05DQklfR0VORSwgTlNfSEdOQ19TWU1CT0wsIE5TX1VOSVBST1QgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbmZpZycpO1xyXG5cclxuY2xhc3MgSW50ZXJhY3Rpb25zTm9kZVRvb2x0aXAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHsgbm9kZSwgZ2VuZU1ldGFkYXRhIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IHhyZWZMaW5rcyA9IF8uZ2V0KGdlbmVNZXRhZGF0YSwgJ3N1bW1hcnkueHJlZkxpbmtzJywgW10pO1xyXG4gICAgbGV0IGRlc2NyaXB0aW9uID0gXy5nZXQoZ2VuZU1ldGFkYXRhLCAnc3VtbWFyeS5kZXNjcmlwdGlvbicsICcnKTtcclxuICAgIGxldCBhbGlhc2VzID0gXy5nZXQoZ2VuZU1ldGFkYXRhLCAnc3VtbWFyeS5hbGlhc2VzJywgW10pO1xyXG5cclxuICAgIGxldCB0aXRsZSA9IG5vZGUuZGF0YSgnaWQnKTtcclxuICAgIGxldCBsaW5rcyA9IFtdO1xyXG5cclxuICAgIHhyZWZMaW5rcy5mb3JFYWNoKCBsaW5rID0+IHtcclxuICAgICAgbGV0IG5hbWU7XHJcbiAgICAgIGNvbnN0IHVybCA9IGxpbmsudXJpO1xyXG4gICAgICBzd2l0Y2ggKCBsaW5rLm5hbWVzcGFjZSApIHtcclxuICAgICAgICBjYXNlIE5TX0hHTkNfU1lNQk9MOlxyXG4gICAgICAgICAgbmFtZSA9ICdIR05DJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgTlNfVU5JUFJPVDpcclxuICAgICAgICAgIG5hbWUgPSAnVW5pUHJvdCc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIE5TX05DQklfR0VORTpcclxuICAgICAgICAgIG5hbWUgPSAnTkNCSSBHZW5lJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgTlNfR0VORUNBUkRTOlxyXG4gICAgICAgICAgbmFtZSA9ICdHZW5lQ2FyZHMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIG5hbWUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGxpbmtzLnB1c2goeyBuYW1lLCB1cmwgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmN5LXRvb2x0aXAnLCBbXHJcbiAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWhlYWRlcicsIFtcclxuICAgICAgICBoKCdoMi5jeS10b29sdGlwLXRpdGxlJywgdGl0bGUgKVxyXG4gICAgICBdKSxcclxuICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtYm9keScsIFtcclxuICAgICAgICBhbGlhc2VzLmxlbmd0aCA+IDAgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsICdPdGhlciBuYW1lcycpLFxyXG4gICAgICAgICAgLi4uYWxpYXNlcy5zbGljZSgwLCAzKS5tYXAoIGFsaWFzID0+IGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLXZhbHVlJywgYWxpYXMpIClcclxuICAgICAgICBdKSA6IG51bGwsXHJcbiAgICAgICAgZGVzY3JpcHRpb24gIT0gJycgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsICdEZXNjcmlwdGlvbicpLFxyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtdmFsdWUnLCBkZXNjcmlwdGlvbilcclxuICAgICAgICBdKSA6IG51bGxcclxuICAgICAgXSksXHJcbiAgICAgIGxpbmtzLmxlbmd0aCA+IDAgPyBoKCdkaXYuY3ktdG9vbHRpcC1mb290ZXInLCBbXHJcbiAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtc2VjdGlvbicsIFtcclxuICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLW5hbWUnLCBbXHJcbiAgICAgICAgICAgICdMaW5rcydcclxuICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtbGlua3MnLCBsaW5rcy5tYXAobGluayA9PiB7XHJcbiAgICAgICAgICAgIGxldCB7IG5hbWUsIHVybCB9ID0gbGluaztcclxuICAgICAgICAgICAgcmV0dXJuIGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogdXJsLCB0YXJnZXQ6ICdfYmxhbmsnICB9LCBuYW1lKTtcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pIDogbnVsbCxcclxuICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtY2FsbC10by1hY3Rpb24nLCBbXHJcbiAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgIHRhcmdldDogJ19ibGFuaycsXHJcbiAgICAgICAgICBocmVmOiAnL3NlYXJjaD9xPScgKyB0aXRsZVxyXG4gICAgICAgIH0sIFtcclxuICAgICAgICAgIGgoJ2J1dHRvbi5jYWxsLXRvLWFjdGlvbicsIGBGaW5kIFJlbGF0ZWQgUGF0aHdheXNgKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25zTm9kZVRvb2x0aXA7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvaW50ZXJhY3Rpb25zLW5vZGUtdG9vbHRpcC5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IHF1ZXJ5U3RyaW5nID0gcmVxdWlyZSgncXVlcnktc3RyaW5nJyk7XHJcblxyXG5jb25zdCB7IFNlcnZlckFQSSB9ID0gcmVxdWlyZSgnLi4vLi4vc2VydmljZXMvJyk7XHJcbmNvbnN0IElOVEVSQUNUSU9OX1RZUEVTID0gcmVxdWlyZSgnLi90eXBlcycpO1xyXG5cclxuY2xhc3MgSW50ZXJhY3Rpb25zRWRnZVRvb2x0aXAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICBjb25zdCBlZGdlcyA9IHByb3BzLmVkZ2UucGFyYWxsZWxFZGdlcygpO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHB1YmxpY2F0aW9uczogW10sXHJcbiAgICAgIHB1YmxpY2F0aW9uc0xvYWRlZDogZmFsc2UsXHJcbiAgICAgIHBhcmFsbGVsRWRnZXM6IGVkZ2VzLFxyXG4gICAgICBzZWxlY3RlZEVkZ2U6IGVkZ2VzLmxlbmd0aCA9PT0gMSA/IGVkZ2VzWzBdOiBudWxsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBpZiggdGhpcy5zdGF0ZS5zZWxlY3RlZEVkZ2UgKXtcclxuICAgICAgdGhpcy5nZXRQdWJsaWNhdGlvbnMoIHRoaXMuc3RhdGUuc2VsZWN0ZWRFZGdlICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQdWJsaWNhdGlvbnMoZWRnZSl7XHJcbiAgICBsZXQgcHVibWVkSWRzID0gZWRnZS5kYXRhKCdwdWJtZWRJZHMnKTtcclxuXHJcbiAgICB0aGlzLnNldFN0YXRlKHsgcHVibGljYXRpb25zTG9hZGVkOiBmYWxzZSB9LCAoKSA9PiB7XHJcbiAgICAgIFNlcnZlckFQSS5nZXRQdWJtZWRQdWJsaWNhdGlvbnMocHVibWVkSWRzKS50aGVuKCBwdWJsaWNhdGlvbnMgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3B1YmxpY2F0aW9ucywgcHVibGljYXRpb25zTG9hZGVkOiB0cnVlfSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCggKCkgPT4gdGhpcy5zZXRTdGF0ZSh7IHB1YmxpY2F0aW9uc0xvYWRlZDogdHJ1ZSB9KSApOyAvLyBzd2FsbG93O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RFZGdlKGVkZ2Upe1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHNlbGVjdGVkRWRnZTogZWRnZSB9KTtcclxuXHJcbiAgICB0aGlzLmdldFB1YmxpY2F0aW9ucyhlZGdlKTtcclxuICB9XHJcblxyXG4gIGRlc2VsZWN0RWRnZSgpe1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHNlbGVjdGVkRWRnZTogbnVsbCB9KTtcclxuICB9XHJcblxyXG4gIHJlbmRlckVkZ2UoKXtcclxuICAgIGxldCB7IHNlbGVjdGVkRWRnZTogZWRnZSwgcGFyYWxsZWxFZGdlcywgcHVibGljYXRpb25zTG9hZGVkLCBwdWJsaWNhdGlvbnMgfSA9IHRoaXMuc3RhdGU7XHJcblxyXG4gICAgbGV0IHRpdGxlID0gZWRnZS5kYXRhKCdpZCcpO1xyXG4gICAgbGV0IGRhdGFzb3VyY2VzID0gZWRnZS5kYXRhKCdkYXRhc291cmNlcycpO1xyXG4gICAgbGV0IHBjSWRzID0gZWRnZS5kYXRhKCdwY0lkcycpO1xyXG5cclxuICAgIGlmKCAhcHVibGljYXRpb25zTG9hZGVkICl7XHJcbiAgICAgIHJldHVybiBoKCdkaXYuY3ktdG9vbHRpcCcsIFtcclxuICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1jb250ZW50JywgW1xyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtaGVhZGVyJyxbXHJcbiAgICAgICAgICAgIGgoJ2gyLmN5LXRvb2x0aXAtdGl0bGUnLCAnTG9hZGluZy4uLicpXHJcbiAgICAgICAgICBdKSxcclxuICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWJvZHknLCBbXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWxvYWRpbmctc2VjdGlvbicsIFtcclxuICAgICAgICAgICAgICBoKCdpLmljb24uaWNvbi1zcGlubmVyJylcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgXSlcclxuICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHByb3ZpZGVyc0xpc3QgPSBkYXRhc291cmNlcy5tYXAoIGRzID0+IGgoJ2RpdicsIGRzKSk7XHJcblxyXG4gICAgbGV0IHB1YmxpY2F0aW9uTGlzdCA9IHB1YmxpY2F0aW9ucy5tYXAoIHB1YmxpY2F0aW9uID0+IHtcclxuICAgICAgbGV0IHsgaWQsIHRpdGxlLCBmaXJzdEF1dGhvciwgZGF0ZSwgc291cmNlIH0gPSBwdWJsaWNhdGlvbjtcclxuICAgICAgcmV0dXJuIGgoJ2Rpdi5jeS1vdmVyZmxvdy1jb250ZW50JywgW1xyXG4gICAgICAgIGgoJ2EucGxhaW4tbGluaycsIHsgaHJlZjogJ2h0dHA6Ly9iaW9yZWdpc3RyeS5pby9wdWJtZWQ6JyArIGlkLCB0YXJnZXQ6ICdfYmxhbmsnIH0sIHRpdGxlKSxcclxuICAgICAgICBoKCdkaXYnLCBmaXJzdEF1dGhvciArICAnIGV0IGFsLiB8ICcgKyBzb3VyY2UgKyAnIC0gJyArIG5ldyBEYXRlKGRhdGUpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSlcclxuICAgICAgXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgZGV0YWlsZWRWaWV3c0xpc3QgPSBwY0lkcy5tYXAoIChwY0lkLCBpbmRleCkgID0+IHtcclxuICAgICAgcmV0dXJuIGgoJ2EucGxhaW4tbGluay5jeS10b29sdGlwLW51bWJlci1saW5rJywgeyBocmVmOiAnL3BhdGh3YXlzPycgKyBxdWVyeVN0cmluZy5zdHJpbmdpZnkoeyB1cmk6IHBjSWQgfSksIHRhcmdldDogJ19ibGFuaycgfSwgYCAke2luZGV4ICsgMX0gYCk7XHJcbiAgICB9ICk7XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5jeS10b29sdGlwJywgW1xyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1oZWFkZXInLCBbXHJcbiAgICAgICAgcGFyYWxsZWxFZGdlcy5sZW5ndGggPiAxID8gaCgnYnV0dG9uLnBsYWluLWJ1dHRvbi5jeS10b29sdGlwLWJhY2snLCB7XHJcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB0aGlzLmRlc2VsZWN0RWRnZSgpXHJcbiAgICAgICAgfSwgW1xyXG4gICAgICAgICAgLy8gIGgoJ2kubWF0ZXJpYWwtaWNvbnMnLCAnYXJyb3dfYmFjaycpIC8vIGRvZXMgbm90IHdvcmsgZm9yIHNvbWUgcmVhc29uXHJcbiAgICAgICAgICBoKCdzcGFuJywgJzwnKVxyXG4gICAgICAgIF0pIDogbnVsbCxcclxuICAgICAgICBoKCdoMi5jeS10b29sdGlwLXRpdGxlJywgdGl0bGUpXHJcbiAgICAgIF0uZmlsdGVyKGVsID0+IGVsICE9IG51bGwpKSxcclxuICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtYm9keScsIFtcclxuICAgICAgICBwcm92aWRlcnNMaXN0Lmxlbmd0aCA+IDAgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsICdEYXRhIFNvdXJjZXMnKSxcclxuICAgICAgICAgIGgoJ2RpdicsIHByb3ZpZGVyc0xpc3QpXHJcbiAgICAgICAgXSkgOiBudWxsLFxyXG4gICAgICAgIHB1YmxpY2F0aW9uTGlzdC5sZW5ndGggPiAwID8gaCgnZGl2LmN5LXRvb2x0aXAtc2VjdGlvbicsIFtcclxuICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLW5hbWUnLCAnUHVibGljYXRpb25zJyksXHJcbiAgICAgICAgICBoKCdkaXYnLCBwdWJsaWNhdGlvbkxpc3QpXHJcbiAgICAgICAgXSkgOiBudWxsLFxyXG4gICAgICAgIGRldGFpbGVkVmlld3NMaXN0Lmxlbmd0aCA+IDAgPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsICdPcGVuIGEgZGV0YWlsZWQgdmlldyBvZiB0aGlzIGludGVyYWN0aW9uJyksXHJcbiAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1saW5rcycsIGRldGFpbGVkVmlld3NMaXN0KVxyXG4gICAgICAgIF0pIDogbnVsbCxcclxuICAgICAgICAvLyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgIC8vICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtbmFtZScsICdSZWFjdG9tZSBMaW5rcycpLFxyXG4gICAgICAgIC8vICAgaCgnZGl2LmN5LXRvb2x0aXAtZmllbGQtdmFsdWUnLCByZWFjdG9tZUlkcylcclxuICAgICAgICAvLyBdKVxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJFZGdlQ2hvaWNlKCl7XHJcbiAgICBjb25zdCB7IHBhcmFsbGVsRWRnZXM6IGVkZ2VzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IGludGVyYWN0aW9uVHlwZVZhbHVlcyA9IE9iamVjdC5rZXlzKElOVEVSQUNUSU9OX1RZUEVTKS5tYXAoayA9PiBJTlRFUkFDVElPTl9UWVBFU1trXSk7XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5jeS10b29sdGlwJywgW1xyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1oZWFkZXInLFtcclxuICAgICAgICBoKCdoMi5jeS10b29sdGlwLXRpdGxlJywgJ0Nob29zZSBhbiBpbnRlcmFjdGlvbicpXHJcbiAgICAgIF0pLFxyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1ib2R5JywgW1xyXG4gICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWVkZ2UtZW50cmllcycsIGVkZ2VzLm1hcChlZGdlID0+IGgoJ2Rpdi5jeS10b29sdGlwLWVkZ2UtZW50cnknLCBbXHJcbiAgICAgICAgICBoKCdhLnBsYWluLWxpbmsuY3ktdG9vbHRpcC1lZGdlLWxpbmsnLCB7XHJcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHRoaXMuc2VsZWN0RWRnZShlZGdlKVxyXG4gICAgICAgICAgfSwgW1xyXG4gICAgICAgICAgICBoKCdzcGFuLmN5LXRvb2x0aXAtZWRnZS1jb2xvcicsIHtcclxuICAgICAgICAgICAgICBjbGFzc05hbWU6ICdpbnRlcmFjdGlvbnMtY29sb3ItJyArIGludGVyYWN0aW9uVHlwZVZhbHVlcy5maW5kKHR5cGUgPT4gZWRnZS5oYXNDbGFzcyh0eXBlKSkudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgaCgnc3Bhbi5jeS10b29sdGlwLWVkZ2UtbmFtZScsIGVkZ2UuaWQoKSlcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgXSkpKVxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKXtcclxuICAgIGxldCB7IHNlbGVjdGVkRWRnZSB9ID0gdGhpcy5zdGF0ZTtcclxuXHJcbiAgICBpZiggc2VsZWN0ZWRFZGdlICl7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckVkZ2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckVkZ2VDaG9pY2UoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gSW50ZXJhY3Rpb25zRWRnZVRvb2x0aXA7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvaW50ZXJhY3Rpb25zLWVkZ2UtdG9vbHRpcC5qcyIsImNvbnN0IGN5dG9zY2FwZSA9IHJlcXVpcmUoJ2N5dG9zY2FwZScpO1xyXG5jb25zdCBpU3R5bGVzaGVldD1jeXRvc2NhcGUuc3R5bGVzaGVldCgpXHJcbi5zZWxlY3RvcignZWRnZScpXHJcbiAgLmNzcyh7XHJcbiAgICAnb3BhY2l0eSc6IDAuNCxcclxuICAgICdsaW5lLWNvbG9yJzogJyM1NTUnLFxyXG4gICAgJ3dpZHRoJzogNCxcclxuICAgICdjdXJ2ZS1zdHlsZSc6ICdoYXlzdGFjaycsXHJcbiAgICAnaGF5c3RhY2stcmFkaXVzJzogMC4yNVxyXG4gIH0pXHJcbi5zZWxlY3RvcignLk1vZGlmaWNhdGlvbicpXHJcbiAgLmNzcyh7XHJcbiAgICAnbGluZS1jb2xvcic6ICcjZmZjMjhiJ1xyXG4gIH0pXHJcbi5zZWxlY3RvcignLkJpbmRpbmcnKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2xpbmUtY29sb3InOiAnIzhiZDhkZCdcclxuICB9KVxyXG4uc2VsZWN0b3IoJy5FeHByZXNzaW9uJylcclxuICAuY3NzKHtcclxuICAgICdsaW5lLWNvbG9yJzogJyNmNGEyYTMnXHJcbiAgfSlcclxuLnNlbGVjdG9yKCcuT3RoZXInKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2xpbmUtY29sb3InOiAnIzk0OTQ5NCdcclxuICB9KVxyXG4uc2VsZWN0b3IoJ25vZGVbY2xhc3NAPVwiYmFsbFwiXScpXHJcbiAgLmNzcyh7XHJcbiAgICAnZm9udC1zaXplJzogMjAsXHJcbiAgICAnY29sb3InOiAnI2ZmZicsXHJcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6ICcjNTU1JyxcclxuICAgICd0ZXh0LW91dGxpbmUtY29sb3InOiAnIzU1NScsXHJcbiAgICAndGV4dC1vdXRsaW5lLXdpZHRoJzogNCxcclxuICAgICd3aWR0aCc6IDUwLFxyXG4gICAgJ2hlaWdodCc6IDUwLFxyXG4gICAgJ2xhYmVsJzogJ2RhdGEoaWQpJyxcclxuICAgICd0ZXh0LWhhbGlnbic6ICdjZW50ZXInLFxyXG4gICAgJ3RleHQtdmFsaWduJzogJ2NlbnRlcicsXHJcbiAgfSlcclxuLnNlbGVjdG9yKCcuaGlnaGxpZ2h0ZWQnKVxyXG4gIC5jc3Moe1xyXG4gICAgJ29wYWNpdHknOjEsXHJcbiAgfSlcclxuLnNlbGVjdG9yKCcudW5oaWdobGlnaHRlZCcpXHJcbiAgLmNzcyh7XHJcbiAgICAnb3BhY2l0eSc6MC4yLFxyXG4gIH0pXHJcbi5zZWxlY3RvcignLm1ldHJpYy1oaWRkZW4nKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2Rpc3BsYXknOidub25lJyxcclxuICB9KVxyXG4uc2VsZWN0b3IoJy50eXBlLWhpZGRlbicpXHJcbiAgLmNzcyh7XHJcbiAgICAnZGlzcGxheSc6ICdub25lJ1xyXG4gIH0pXHJcbi5zZWxlY3RvcihgLm1hdGNoZWRgKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2JvcmRlci1jb2xvcic6ICd5ZWxsb3cnLFxyXG4gICAgJ2JvcmRlci13aWR0aCc6IDEwLFxyXG4gICAgJ2JhY2tncm91bmQtY29sb3InOiAnIzYwNjAwMCcsXHJcbiAgICAndGV4dC1vdXRsaW5lLWNvbG9yJzogJyM2MDYwMDAnXHJcbiAgfSlcclxuLnNlbGVjdG9yKCdub2RlW1tkZWdyZWUgPSAwXV0nKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2Rpc3BsYXknOiAnbm9uZSdcclxuICB9KVxyXG4uc2VsZWN0b3IoJ25vZGVbP3F1ZXJpZWRdJylcclxuICAuY3NzKHtcclxuICAgICdkaXNwbGF5JzogJ2VsZW1lbnQnLFxyXG4gICAgJ3dpZHRoJzogNzUsXHJcbiAgICAnaGVpZ2h0JzogNzVcclxuICB9KVxyXG4uc2VsZWN0b3IoJ25vZGU6c2VsZWN0ZWQnKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2JhY2tncm91bmQtY29sb3InOiAnIzAxNjlkOScsXHJcbiAgICAndGV4dC1vdXRsaW5lLWNvbG9yJzogJyMwMTY5ZDknXHJcbiAgfSlcclxuLnNlbGVjdG9yKCdlZGdlOnNlbGVjdGVkJylcclxuICAuY3NzKHtcclxuICAgICd6LWluZGV4JzogOTk5LFxyXG4gICAgJ29wYWNpdHknOiAxXHJcbiAgfSk7XHJcbm1vZHVsZS5leHBvcnRzID0gaVN0eWxlc2hlZXQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvY3kvaW50ZXJhY3Rpb25zLXN0eWxlc2hlZXQuanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBzYXZlQXMgPSByZXF1aXJlKCdmaWxlLXNhdmVyJykuc2F2ZUFzO1xyXG5jb25zdCBMb2FkZXIgPSByZXF1aXJlKCdyZWFjdC1sb2FkZXInKTtcclxuXHJcblxyXG5jbGFzcyBJbnRlcmFjdGlvbnNEb3dubG9hZE1lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBsb2FkaW5nOiBmYWxzZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkUG5nKCl7XHJcbiAgICBsZXQgeyBjeVNydiwgc291cmNlcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBjeSA9IGN5U3J2LmdldCgpO1xyXG5cclxuICAgIGxldCBzYXZlQ3lQbmcgPSAoKSA9PntcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgc2F2ZUFzKGN5LnBuZyh7XHJcbiAgICAgICAgICBvdXRwdXQ6ICdibG9iJyxcclxuICAgICAgICAgIHNjYWxlOiAyLFxyXG4gICAgICAgICAgYmc6ICd3aGl0ZScsXHJcbiAgICAgICAgICBmdWxsOiB0cnVlXHJcbiAgICAgICAgfSksIGAke3NvdXJjZXMuam9pbignXycpfV9pbnRlcmFjdGlvbnMucG5nYCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICB9LCAxKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IHRydWUgfSwgKCkgPT4gc2F2ZUN5UG5nKCkgKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkU2lmKCl7XHJcbiAgICBsZXQgeyBjeVNydiwgc291cmNlcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBlZGdlSWRzID0gY3lTcnYuZ2V0KCkuZWRnZXMoKS5tYXAoIGVkZ2UgPT4gZWRnZS5kYXRhKCdpZCcpICkuc29ydCgpLmpvaW4oJ1xcbicpO1xyXG5cclxuICAgIHNhdmVBcyhuZXcgRmlsZShbZWRnZUlkc10sIGAke3NvdXJjZXMuam9pbignXycpfV9pbnRlcmFjdGlvbnMuc2lmYCAsIHsgdHlwZTogJ3RleHQvcGxhaW47Y2hhcnNldD11dGYtOCcgfSkpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCkge1xyXG4gICAgcmV0dXJuIGgoJ2Rpdi5maWxlLWRvd25sb2FkLW1lbnUuaW50ZXJhY3Rpb25zLWRvd25sb2FkLW1lbnUnLCBbXHJcbiAgICAgIGgoJ2gyJywgJ0Rvd25sb2FkIEFzLi4uJyksXHJcbiAgICAgIGgoJ2Rpdi5maWxlLWRvd25sb2FkLWNvbnRlbnQnLCBbXHJcbiAgICAgICAgaCgnZGl2LmRvd25sb2FkLW9wdGlvbicsIHsgb25DbGljazogKCkgPT4gdGhpcy5kb3dubG9hZFBuZygpIH0sIFtcclxuICAgICAgICAgIGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24taGVhZGVyJywgW1xyXG4gICAgICAgICAgICBoKCdoMycsICdJbWFnZSAoUE5HKScpLFxyXG4gICAgICAgICAgXSksXHJcbiAgICAgICAgICBoKCdkaXYuZG93bmxvYWQtb3B0aW9uLWRlc2NyaXB0aW9uJywgJ0Rvd25sb2FkIGFuIGltYWdlIG9mIHRoZSBlbnRpcmUgdmlldycpXHJcbiAgICAgICAgXSksXHJcbiAgICAgICAgaCgnZGl2LmRvd25sb2FkLW9wdGlvbicsIHsgb25DbGljazogKCkgPT4gdGhpcy5kb3dubG9hZFNpZigpIH0sIFtcclxuICAgICAgICAgIGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24taGVhZGVyJywgW1xyXG4gICAgICAgICAgICBoKCdoMycsICdTSUYnKSxcclxuICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgaCgnZGl2LmRvd25sb2FkLW9wdGlvbi1kZXNjcmlwdGlvbicsICdMaXN0IG9mIGludGVyYWN0aW9uIHBhaXJzIHRvIGJlIHVzZWQgd2l0aCBDeXRvc2NhcGUgZGVza3RvcCwgYW5hbHlzaXMsIGFuZCBncmFwaCBhbGdvcml0aG1zLicpXHJcbiAgICAgICAgXSksXHJcblxyXG4gICAgICAgIGgoTG9hZGVyLCB7IGxvYWRlZDogIXRoaXMuc3RhdGUubG9hZGluZyB9KVxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uc0Rvd25sb2FkTWVudTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2ludGVyYWN0aW9ucy9pbnRlcmFjdGlvbnMtZG93bmxvYWQtbWVudS5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IGNsYXNzTmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XHJcblxyXG5jb25zdCBJTlRFUkFDVElPTl9UWVBFUyA9IHJlcXVpcmUoJy4vdHlwZXMnKTtcclxuXHJcbmNsYXNzIEludGVyYWN0aW9uc01lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIGxldCB7IEJJTkRJTkcsIE1PRElGSUNBVElPTiwgRVhQUkVTU0lPTiwgT1RIRVIgfSA9IElOVEVSQUNUSU9OX1RZUEVTO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIFtCSU5ESU5HXTogdHJ1ZSxcclxuICAgICAgW01PRElGSUNBVElPTl06IHRydWUsXHJcbiAgICAgIFtFWFBSRVNTSU9OXTogdHJ1ZSxcclxuICAgICAgW09USEVSXTogdHJ1ZVxyXG4gICAgfTtcclxuXHJcbiAgfVxyXG5cclxuICB0b2dnbGVJbnRuVHlwZSh0eXBlKXtcclxuICAgIGxldCB7IGN5U3J2IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IGN5ID0gY3lTcnYuZ2V0KCk7XHJcbiAgICBsZXQgZWRnZXMgPSBjeS5lZGdlcyhgLiR7dHlwZX1gKTtcclxuICAgIGxldCBub2RlcyA9IGVkZ2VzLmNvbm5lY3RlZE5vZGVzKCk7XHJcblxyXG4gICAgbGV0IG5vZGVIYXNOb1Zpc2libGVFZGdlcyA9IG5vZGUgPT4gbm9kZS5jb25uZWN0ZWRFZGdlcygpLmV2ZXJ5KCBlZGdlID0+IGVkZ2UuaGFzQ2xhc3MoJ3R5cGUtaGlkZGVuJykgfHwgZWRnZS5oYXNDbGFzcygnbWV0cmljLWhpZGRlbicpKTtcclxuXHJcbiAgICBpZiggdGhpcy5zdGF0ZVt0eXBlXSApe1xyXG4gICAgICBlZGdlcy5hZGRDbGFzcygndHlwZS1oaWRkZW4nKTtcclxuICAgICAgbm9kZXMuZmlsdGVyKCBub2RlSGFzTm9WaXNpYmxlRWRnZXMgKS5hZGRDbGFzcygndHlwZS1oaWRkZW4nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5vZGVzLnJlbW92ZUNsYXNzKCd0eXBlLWhpZGRlbicpO1xyXG4gICAgICBlZGdlcy5yZW1vdmVDbGFzcygndHlwZS1oaWRkZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjeS5lbWl0KCdoaWRlLXR5cGUnKTtcclxuXHJcbiAgICB0aGlzLnNldFN0YXRlKHtbdHlwZV06ICF0aGlzLnN0YXRlW3R5cGVdIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBjeVNydiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCB7IEJpbmRpbmcsIEV4cHJlc3Npb24sIE1vZGlmaWNhdGlvbiwgT3RoZXIgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgY3kgPSBjeVNydi5nZXQoKTtcclxuXHJcbiAgICBsZXQgaGFzVHlwZSA9IChjeSwgdHlwZSkgPT4gY3kuZWRnZXMoYC4ke3R5cGV9YCkubGVuZ3RoID4gMDtcclxuICAgIGxldCB7IEJJTkRJTkcsIE1PRElGSUNBVElPTiwgRVhQUkVTU0lPTiwgT1RIRVIgfSA9IElOVEVSQUNUSU9OX1RZUEVTO1xyXG5cclxuICAgIGxldCBoYXNNb2RpZmljYXRpb25zID0gaGFzVHlwZShjeSwgTU9ESUZJQ0FUSU9OKTtcclxuICAgIGxldCBoYXNFeHByZXNzaW9ucyA9IGhhc1R5cGUoY3ksIEVYUFJFU1NJT04pO1xyXG4gICAgbGV0IGhhc0JpbmRpbmdzID0gaGFzVHlwZShjeSwgQklORElORyk7XHJcbiAgICBsZXQgaGFzT3RoZXIgPSBoYXNUeXBlKGN5LCBPVEhFUik7XHJcblxyXG4gICAgbGV0IEludGVyYWN0aW9uVG9nZ2xlQnV0dG9uID0gcHJvcHMgPT4ge1xyXG4gICAgICBsZXQgeyB0eXBlLCBhY3RpdmUgfSA9IHByb3BzO1xyXG4gICAgICBsZXQgbGVnZW5kQ2xhc3MgPSBgaW50ZXJhY3Rpb25zLWNvbG9yLSR7dHlwZS50b0xvd2VyQ2FzZSgpfWA7XHJcblxyXG4gICAgICByZXR1cm4gaCgnZGl2Jywge1xyXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+ICB0aGlzLnRvZ2dsZUludG5UeXBlKHR5cGUpLFxyXG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyh7XHJcbiAgICAgICAgICAnaW50ZXJhY3Rpb25zLWZpbHRlci1idXR0b24nOiB0cnVlLFxyXG4gICAgICAgICAgJ2ludGVyYWN0aW9ucy1maWx0ZXItYnV0dG9uLWFjdGl2ZSc6IGFjdGl2ZVxyXG4gICAgICAgIH0pLFxyXG5cclxuICAgICAgfSwgW1xyXG4gICAgICAgIGgoJ2RpdicsIHtcclxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lcyh7XHJcbiAgICAgICAgICAgIFtsZWdlbmRDbGFzc106IHRydWUsXHJcbiAgICAgICAgICAgICdpbnRlcmFjdGlvbnMtY29sb3InOiB0cnVlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gKSxcclxuICAgICAgICBoKCdkaXYuaW50ZXJhY3Rpb25zLWZpbHRlci1sYWJlbCcsIHR5cGUpLFxyXG4gICAgICAgIGgoJ2Rpdi5pbnRlcmFjdGlvbnMtZmlsdGVyLWNoZWNrJywgW1xyXG4gICAgICAgICAgaCgnaS5tYXRlcmlhbC1pY29ucycsIChhY3RpdmUgPyAnY2hlY2tfYm94JyA6ICdjaGVja19ib3hfb3V0bGluZV9ibGFuaycpKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmludGVyYWN0aW9ucy1zaWRlYmFyJywgW1xyXG4gICAgICBoYXNCaW5kaW5ncyA/IGgoSW50ZXJhY3Rpb25Ub2dnbGVCdXR0b24sIHsgdHlwZTogQklORElORywgYWN0aXZlOiBCaW5kaW5nIH0pIDogbnVsbCxcclxuICAgICAgaGFzRXhwcmVzc2lvbnMgPyBoKEludGVyYWN0aW9uVG9nZ2xlQnV0dG9uLCB7IHR5cGU6IEVYUFJFU1NJT04sIGFjdGl2ZTogRXhwcmVzc2lvbiB9KSA6IG51bGwsXHJcbiAgICAgIGhhc01vZGlmaWNhdGlvbnMgPyBoKEludGVyYWN0aW9uVG9nZ2xlQnV0dG9uLCB7IHR5cGU6IE1PRElGSUNBVElPTiwgYWN0aXZlOiBNb2RpZmljYXRpb24gfSkgOiBudWxsLFxyXG4gICAgICBoYXNPdGhlciA/IGgoSW50ZXJhY3Rpb25Ub2dnbGVCdXR0b24sIHsgdHlwZTogT1RIRVIsIGFjdGl2ZTogT3RoZXIgfSkgOiBudWxsLFxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyYWN0aW9uc01lbnU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9pbnRlcmFjdGlvbnMvaW50ZXJhY3Rpb25zLW1lbnUuanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcbmNvbnN0IExvYWRlciA9IHJlcXVpcmUoJ3JlYWN0LWxvYWRlcicpO1xyXG5jb25zdCBjbGFzc05hbWVzID0gcmVxdWlyZSgnY2xhc3NuYW1lcycpO1xyXG5jb25zdCBxdWVyeVN0cmluZyA9IHJlcXVpcmUoJ3F1ZXJ5LXN0cmluZycpO1xyXG5cclxuY29uc3QgRW5yaWNobWVudFRvb2xiYXIgPSByZXF1aXJlKCcuL2VucmljaG1lbnQtdG9vbGJhcicpO1xyXG5jb25zdCB7IFBjTG9nb0xpbmssIEN5dG9zY2FwZU5ldHdvcmssIFBvcG92ZXIgfSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jb21wb25lbnRzLycpO1xyXG5cclxuY29uc3QgQ3l0b3NjYXBlU2VydmljZSA9IHJlcXVpcmUoJy4uLy4uL2NvbW1vbi9jeS8nKTtcclxuY29uc3QgeyBTZXJ2ZXJBUEkgfSA9IHJlcXVpcmUoJy4uLy4uL3NlcnZpY2VzJyk7XHJcblxyXG5jb25zdCB7IGVucmljaG1lbnRMYXlvdXQsIGVucmljaG1lbnRTdHlsZXNoZWV0LCBiaW5kRXZlbnRzIH0gPSByZXF1aXJlKCcuL2N5Jyk7XHJcbmNvbnN0IHsgVGltZW91dEVycm9yIH0gPSByZXF1aXJlKCcuLi8uLi8uLi91dGlsJyk7XHJcbmNvbnN0IHsgRXJyb3JNZXNzYWdlIH0gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy9lcnJvci1tZXNzYWdlJyk7XHJcbmNvbnN0IHsgQ29udHJpYnV0ZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29tbW9uL2NvbXBvbmVudHMvY29udHJpYnV0ZScpO1xyXG5cclxuY29uc3QgTUFYX0VMRU1FTlRTX0NVVE9GRiA9IDM7XHJcbmNvbnN0IExJU1RfRUxFTUVOVFNfU0hPV04gPSBNQVhfRUxFTUVOVFNfQ1VUT0ZGIC0gMTtcclxuXHJcbmNsYXNzIEVucmljaG1lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBjeVNydjogbmV3IEN5dG9zY2FwZVNlcnZpY2UoeyBzdHlsZTogZW5yaWNobWVudFN0eWxlc2hlZXQsIG9uTW91bnQ6IGJpbmRFdmVudHMgfSksXHJcbiAgICAgIHNvdXJjZXM6IF8udW5pcShxdWVyeVN0cmluZy5wYXJzZShwcm9wcy5sb2NhdGlvbi5zZWFyY2gpLnNvdXJjZS5zcGxpdCgnLCcpKSxcclxuICAgICAgZXJyb3I6IG51bGwsXHJcbiAgICAgIGxvYWRpbmc6IHRydWUsXHJcbiAgICAgIG5ldHdvcmtFbXB0eTogZmFsc2VcclxuICAgIH07XHJcblxyXG4gICAgaWYoIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgKXtcclxuICAgICAgdGhpcy5zdGF0ZS5jeVNydi5nZXRQcm9taXNlKCkudGhlbihjeSA9PiB3aW5kb3cuY3kgPSBjeSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb21wb25lbnREaWRNb3VudCgpe1xyXG4gICAgdGhpcy5sb2FkRW5yaWNobWVudCgpO1xyXG4gIH1cclxuXHJcbiAgbG9hZEVucmljaG1lbnQoKXtcclxuICAgIGxldCB7IHNvdXJjZXMsIGN5U3J2IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IGN5ID0gY3lTcnYuZ2V0KCk7XHJcblxyXG4gICAgbGV0IGdldE5ldHdvcmtKc29uID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCB7IHBhdGh3YXlzIH0gPSBhd2FpdCBTZXJ2ZXJBUEkuZW5yaWNobWVudEFQSSh7IHF1ZXJ5OiBzb3VyY2VzfSwgJ2FuYWx5c2lzJyk7XHJcbiAgICAgICAgbGV0IGVucmljaG1lbnROZXR3b3JrID0gYXdhaXQgU2VydmVyQVBJLmVucmljaG1lbnRBUEkoeyBwYXRod2F5cyB9LCAndmlzdWFsaXphdGlvbicpO1xyXG4gICAgICAgIGxldCBuZXR3b3JrSGFzWmVyb05vZGVzID0gZW5yaWNobWVudE5ldHdvcmsuZ3JhcGguZWxlbWVudHMubm9kZXMubGVuZ3RoID09PSAwO1xyXG4gICAgICAgIGVucmljaG1lbnROZXR3b3JrLmdyYXBoLmVsZW1lbnRzLm5vZGVzLmZvckVhY2goIG5vZGUgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uID0gXy5pbnRlcnNlY3Rpb24oIG5vZGUuZGF0YS5nZW5lU2V0LCBzb3VyY2VzICk7XHJcbiAgICAgICAgICBfLmFzc2lnbiggbm9kZS5kYXRhLCB7IGludGVyc2VjdGlvbiB9ICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGN5LnJlbW92ZSgnKicpO1xyXG4gICAgICAgIGN5LmFkZCh7XHJcbiAgICAgICAgICBlZGdlczogZW5yaWNobWVudE5ldHdvcmsuZ3JhcGguZWxlbWVudHMuZWRnZXMsXHJcbiAgICAgICAgICBub2RlczogZW5yaWNobWVudE5ldHdvcmsuZ3JhcGguZWxlbWVudHMubm9kZXNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZW5yaWNobWVudExheW91dCggY3kgKS50aGVuICggKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICBuZXR3b3JrRW1wdHk6IG5ldHdvcmtIYXNaZXJvTm9kZXMsXHJcbiAgICAgICAgICAgIGVycm9yOiBudWxsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCggZSApe1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgZXJyb3I6IGUsXHJcbiAgICAgICAgICBsb2FkaW5nOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlLCBuZXR3b3JrRW1wdHk6IGZhbHNlIH0sICgpID0+IGdldE5ldHdvcmtKc29uKCkpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBsb2FkaW5nLCBjeVNydiwgbmV0d29ya0VtcHR5LCBzb3VyY2VzLCBlcnJvciB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCB0aXRsZUNvbnRlbnQgPSBbXTtcclxuXHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlO1xyXG4gICAgaWYoIG5ldHdvcmtFbXB0eSApIHtcclxuICAgICAgZXJyb3JNZXNzYWdlID0gaChFcnJvck1lc3NhZ2UsIHsgdGl0bGU6ICdObyByZXN1bHRzIHRvIGRpc3BsYXkuJywgYm9keTogJ1RyeSBkaWZmZXJlbnQgZ2VuZXMgaW4geW91ciBzZWFyY2guJyAsIGZvb3RlcjogbnVsbCwgbG9nbzogdHJ1ZSB9ICk7XHJcbiAgICB9IGVsc2UgaWYoIGVycm9yIGluc3RhbmNlb2YgVGltZW91dEVycm9yICkge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBoKCBFcnJvck1lc3NhZ2UsIHsgdGl0bGU6ICdUaGlzIGlzIHRha2luZyBsb25nZXIgdGhhbiBleHBlY3RlZCcsIGJvZHk6ICdUcnkgYWdhaW4gbGF0ZXIuJywgbG9nbzogdHJ1ZSB9ICk7XHJcbiAgICB9IGVsc2UgaWYoIGVycm9yICkge1xyXG4gICAgICBlcnJvck1lc3NhZ2UgPSBoKCBFcnJvck1lc3NhZ2UsIHsgbG9nbzogdHJ1ZSB9ICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIHNvdXJjZXMubGVuZ3RoID09PSAxICl7XHJcbiAgICAgIHRpdGxlQ29udGVudC5wdXNoKGgoJ3NwYW4nLCBgUGF0aHdheXMgZW5yaWNoZWQgZm9yICR7c291cmNlc1swXX1gKSk7XHJcbiAgICB9XHJcbiAgICBpZiggMSA8IHNvdXJjZXMubGVuZ3RoICYmIHNvdXJjZXMubGVuZ3RoIDw9IE1BWF9FTEVNRU5UU19DVVRPRkYgKXtcclxuICAgICAgdGl0bGVDb250ZW50LnB1c2goaCgnc3BhbicsIGBQYXRod2F5cyBlbnJpY2hlZCBmb3IgJHsgc291cmNlcy5zbGljZSgwLCBzb3VyY2VzLmxlbmd0aCAtIDEpLmpvaW4oJywgJyl9IGFuZCAke3NvdXJjZXMuc2xpY2UoLTEpfWApKTtcclxuICAgIH1cclxuICAgIGlmKCBzb3VyY2VzLmxlbmd0aCA+IE1BWF9FTEVNRU5UU19DVVRPRkYgKXtcclxuICAgICAgdGl0bGVDb250ZW50LnB1c2goaCgnc3BhbicsIGBQYXRod2F5cyBlbnJpY2hlZCBmb3IgJHsgc291cmNlcy5zbGljZSgwLCBMSVNUX0VMRU1FTlRTX1NIT1dOKS5qb2luKCcsICcpfSBhbmQgYCkpO1xyXG4gICAgICB0aXRsZUNvbnRlbnQucHVzaChoKFBvcG92ZXIsIHtcclxuICAgICAgICB0aXBweToge1xyXG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgaHRtbDogaCgnZGl2LmVucmljaG1lbnQtc291cmNlcy1wb3BvdmVyJywgc291cmNlcy5zbGljZShMSVNUX0VMRU1FTlRTX1NIT1dOKS5zb3J0KCkubWFwKCBzID0+IGgoJ2RpdicsIHMpICkgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sIFsgaCgnYS5wbGFpbi1saW5rLmVucmljaG1lbnQtcG9wb3Zlci1saW5rJywgYCR7c291cmNlcy5sZW5ndGggLSBMSVNUX0VMRU1FTlRTX1NIT1dOfSBvdGhlciBnZW5lKHMpYCkgXVxyXG4gICAgICApKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYXBwQmFyID0gaCgnZGl2LmFwcC1iYXIuaW50ZXJhY3Rpb25zLWJhcicsIFtcclxuICAgICAgaCgnZGl2LmFwcC1iYXItYnJhbmRpbmcnLCBbXHJcbiAgICAgICAgaChQY0xvZ29MaW5rKSxcclxuICAgICAgICBoKCdkaXYuYXBwLWJhci10aXRsZScsIHRpdGxlQ29udGVudClcclxuICAgICAgXSksXHJcbiAgICAgIGgoRW5yaWNobWVudFRvb2xiYXIsIHsgY3lTcnYsIHNvdXJjZXM6IHRoaXMuc3RhdGUuc291cmNlcywgY29udHJvbGxlcjogdGhpcyB9KSxcclxuICAgICAgaChDb250cmlidXRlLCB7IHRleHQ6ICdBZGQgbXkgcGF0aHdheScgfSlcclxuICAgIF0pO1xyXG5cclxuICAgIHJldHVybiAhZXJyb3JNZXNzYWdlID8gaCgnZGl2LmVucmljaG1lbnQnLCBbXHJcbiAgICAgIGgoTG9hZGVyLCB7IGxvYWRlZDogIWxvYWRpbmcsIG9wdGlvbnM6IHsgbGVmdDogJzUwJScsIGNvbG9yOiAnIzE2YTA4NScgfX0sIFtcclxuICAgICAgICBhcHBCYXJcclxuICAgICAgIF0pLFxyXG4gICAgICBoKEN5dG9zY2FwZU5ldHdvcmssIHtcclxuICAgICAgICBjeVNydixcclxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoeyduZXR3b3JrLWxvYWRpbmcnOiBsb2FkaW5nfSlcclxuICAgICAgfSlcclxuICAgIF0pIDogZXJyb3JNZXNzYWdlO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFbnJpY2htZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9pbmRleC5qcyIsIlxyXG5jb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IFJlYWN0RG9tID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5cclxuY29uc3QgeyBQb3BvdmVyLCBJY29uQnV0dG9uIH0gPSByZXF1aXJlKCcuLi8uLi9jb21tb24vY29tcG9uZW50cy8nKTtcclxuY29uc3QgRW5yaWNobWVudERvd25sb2FkTWVudSA9IHJlcXVpcmUoJy4vZW5yaWNobWVudC1kb3dubG9hZC1tZW51Jyk7XHJcblxyXG5jb25zdCB7IGVucmljaG1lbnRMYXlvdXQsIHNlYXJjaEVucmljaG1lbnROb2RlcyB9ID0gcmVxdWlyZSgnLi9jeScpO1xyXG5cclxuY2xhc3MgRW5yaWNobWVudFRvb2xiYXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKXtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHNlYXJjaFZhbHVlOiAnJ1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU5vZGVTZWFyY2hDaGFuZ2Uoc2VhcmNoVmFsKXtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBzZWFyY2hWYWx1ZTogc2VhcmNoVmFsIH0sICgpID0+IHNlYXJjaEVucmljaG1lbnROb2RlcyggdGhpcy5wcm9wcy5jeVNydi5nZXQoKSwgc2VhcmNoVmFsKSk7XHJcbiAgfVxyXG5cclxuICBmb2N1c05vZGVTZWFyY2goKXtcclxuICAgIFJlYWN0RG9tLmZpbmRET01Ob2RlKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJy5lbGVtZW50LXNlYXJjaC1pbnB1dCcpLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKXtcclxuICAgIGxldCB7IGN5U3J2IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IHsgc2VhcmNoVmFsdWUgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgY3kgPSBjeVNydi5nZXQoKTtcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmFwcC10b29sYmFyJywgW1xyXG4gICAgICBoKFBvcG92ZXIsIHtcclxuICAgICAgICB0aXBweToge1xyXG4gICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgaHRtbDogaChFbnJpY2htZW50RG93bmxvYWRNZW51LCB7IGN5U3J2IH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBbXHJcbiAgICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Rvd25sb2FkcycsXHJcbiAgICAgICAgICBpY29uOiAnZmlsZV9kb3dubG9hZCdcclxuICAgICAgICB9KVxyXG4gICAgICBdKSxcclxuICAgICAgaChJY29uQnV0dG9uLCB7XHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdGaXQgdG8gc2NyZWVuJyxcclxuICAgICAgICBvbkNsaWNrOiAoKSA9PiBjeS5hbmltYXRlKHtcclxuICAgICAgICAgIGZpdDoge1xyXG4gICAgICAgICAgICBwYWRkaW5nOiAyNVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVhc2luZzogJ2Vhc2UtaW4tb3V0J1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpY29uOiAnZnVsbHNjcmVlbidcclxuICAgICAgfSksXHJcbiAgICAgIGgoSWNvbkJ1dHRvbiwge1xyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnUmVzZXQgYXJyYW5nZW1lbnQnLFxyXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IGVucmljaG1lbnRMYXlvdXQoIGN5ICksXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGljb246ICdyZXBsYXknXHJcbiAgICAgIH0pLFxyXG5cclxuICAgICAgaCgnZGl2LmVsZW1lbnQtc2VhcmNoJywgW1xyXG4gICAgICAgIGgoJ2lucHV0LmVsZW1lbnQtc2VhcmNoLWlucHV0LmlucHV0LXJvdW5kLmlucHV0LWpvaW5lZCcsIHtcclxuICAgICAgICAgIHZhbHVlOiBzZWFyY2hWYWx1ZSxcclxuICAgICAgICAgIG9uQ2hhbmdlOiBlID0+IHRoaXMuaGFuZGxlTm9kZVNlYXJjaENoYW5nZShlLnRhcmdldC52YWx1ZSksXHJcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcjogJ1NlYXJjaCcsXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgaCgnYnV0dG9uLmVsZW1lbnQtc2VhcmNoLWNsZWFyJywge1xyXG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZU5vZGVTZWFyY2hDaGFuZ2UoJycpO1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzTm9kZVNlYXJjaCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIFtcclxuICAgICAgICAgIGgoJ2kubWF0ZXJpYWwtaWNvbnMnLCAnY2xvc2UnKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pXHJcbiAgICBdKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRW5yaWNobWVudFRvb2xiYXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9lbnJpY2htZW50L2VucmljaG1lbnQtdG9vbGJhci5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IHNhdmVBcyA9IHJlcXVpcmUoJ2ZpbGUtc2F2ZXInKS5zYXZlQXM7XHJcbmNvbnN0IExvYWRlciA9IHJlcXVpcmUoJ3JlYWN0LWxvYWRlcicpO1xyXG5cclxuXHJcbmNsYXNzIEVucmljaG1lbnREb3dubG9hZE1lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBsb2FkaW5nOiBmYWxzZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkUG5nKCl7XHJcbiAgICBsZXQgeyBjeVNydiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBjeSA9IGN5U3J2LmdldCgpO1xyXG5cclxuICAgIGxldCBzYXZlQ3lQbmcgPSAoKSA9PntcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgc2F2ZUFzKGN5LnBuZyh7XHJcbiAgICAgICAgICBvdXRwdXQ6ICdibG9iJyxcclxuICAgICAgICAgIHNjYWxlOiAyLFxyXG4gICAgICAgICAgYmc6ICd3aGl0ZScsXHJcbiAgICAgICAgICBmdWxsOiB0cnVlXHJcbiAgICAgICAgfSksIGBlbnJpY2htZW50LW5ldHdvcmsucG5nYCk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICB9LCAxKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IHRydWUgfSwgKCkgPT4gc2F2ZUN5UG5nKCkgKTtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkSnNvbigpe1xyXG4gICAgbGV0IHsgY3lTcnYgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgY3kgPSBjeVNydi5nZXQoKTtcclxuICAgIGxldCBzYXZlQ3lKc29uID0gKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBzYXZlQXMobmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGN5Lmpzb24oKSwgbnVsbCwgMildLCB7IHR5cGU6ICd0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgnIH0pLCBgZW5yaWNobWVudC1uZXR3b3JrLmpzb25gKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogZmFsc2UgfSk7XHJcbiAgICAgIH0sIDEpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogdHJ1ZSB9LCAoKSA9PiBzYXZlQ3lKc29uKCkgKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIHJldHVybiBoKCdkaXYuZmlsZS1kb3dubG9hZC1tZW51JywgW1xyXG4gICAgICBoKCdoMicsICdOZXR3b3JrIERvd25sb2FkcycpLFxyXG4gICAgICBoKCdkaXYuZmlsZS1kb3dubG9hZC1jb250ZW50JywgW1xyXG4gICAgICAgIGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24nLCB7IG9uQ2xpY2s6ICgpID0+IHRoaXMuZG93bmxvYWRQbmcoKSB9LCBbXHJcbiAgICAgICAgICBoKCdkaXYuZG93bmxvYWQtb3B0aW9uLWhlYWRlcicsIFtcclxuICAgICAgICAgICAgaCgnaDMnLCAnSW1hZ2UgKFBORyknKSxcclxuICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgaCgnZGl2LmRvd25sb2FkLW9wdGlvbi1kZXNjcmlwdGlvbicsICdEb3dubG9hZCBhbiBpbWFnZSBvZiB0aGUgZW50aXJlIHZpZXcnKVxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24nLCB7IG9uQ2xpY2s6ICgpID0+IHRoaXMuZG93bmxvYWRKc29uKCkgfSwgW1xyXG4gICAgICAgICAgaCgnZGl2LmRvd25sb2FkLW9wdGlvbi1oZWFkZXInLCBbXHJcbiAgICAgICAgICAgIGgoJ2gzJywgJ0N5dG9zY2FwZSBKU09OJyksXHJcbiAgICAgICAgICBdKSxcclxuICAgICAgICAgIGgoJ2Rpdi5kb3dubG9hZC1vcHRpb24tZGVzY3JpcHRpb24nLCAnRG93bmxvYWQgYSBDeXRvc2NhcGUgSlNPTiBmaWxlLCBjb21wYXRpYmxlIHdpdGggQ3l0b3NjYXBlIGFuZCBDeXRvc2NhcGUuanMnKVxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIGgoTG9hZGVyLCB7IGxvYWRlZDogIXRoaXMuc3RhdGUubG9hZGluZyB9KVxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVucmljaG1lbnREb3dubG9hZE1lbnU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9mZWF0dXJlcy9lbnJpY2htZW50L2VucmljaG1lbnQtZG93bmxvYWQtbWVudS5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IF8gPSByZXF1aXJlKCdsb2Rhc2gnKTtcclxuXHJcbmNvbnN0IHsgTlNfR0VORV9PTlRPTE9HWSwgTlNfUkVBQ1RPTUUgfSA9IHJlcXVpcmUoJy4uLy4uLy4uL2NvbmZpZycpO1xyXG5jb25zdCB7IFNlcnZlckFQSSB9ID0gcmVxdWlyZSgnLi4vLi4vc2VydmljZXMnKTtcclxuXHJcblxyXG5jbGFzcyBFbnJpY2htZW50VG9vbHRpcCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIG5hbWU6ICcnLFxyXG4gICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgIGRlc2NyaXB0aW9uTG9hZGVkOiBmYWxzZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbXBvbmVudERpZE1vdW50KCl7XHJcbiAgICBsZXQgeyBub2RlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IGlkID0gbm9kZS5kYXRhKCdpZCcpO1xyXG4gICAgY29uc3QgbmFtZXNwYWNlID0gbm9kZS5kYXRhKCduYW1lc3BhY2UnKTtcclxuICAgIGNvbnN0IGRlc2NyaXB0aW9uT25GYWlsID0gJ05vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZSc7XHJcblxyXG4gICAgaWYoIG5hbWVzcGFjZSA9PT0gTlNfR0VORV9PTlRPTE9HWSApe1xyXG4gICAgICBTZXJ2ZXJBUEkuZ2V0R29JbmZvcm1hdGlvbiggaWQucmVwbGFjZSgnR086JywgJycpIClcclxuICAgICAgLnRoZW4oIHJlcyA9PiB7XHJcbiAgICAgICAgbGV0IGRlc2NyaXB0aW9uID0gXy5nZXQocmVzLCAncmVzdWx0c1swXS5kZWZpbml0aW9uLnRleHQnLCBkZXNjcmlwdGlvbk9uRmFpbCk7XHJcbiAgICAgICAgbGV0IHVwZGF0ZSA9ICgpID0+IHRoaXMuc2V0U3RhdGUoeyBuYW1lOiBOU19HRU5FX09OVE9MT0dZLnRvVXBwZXJDYXNlKCksIGRlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbkxvYWRlZDogdHJ1ZSB9KTtcclxuXHJcbiAgICAgICAgdXBkYXRlKCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCggKCkgPT4gdGhpcy5zZXRTdGF0ZSh7IG5hbWU6IE5TX0dFTkVfT05UT0xPR1kudG9VcHBlckNhc2UoKSwgZGVzY3JpcHRpb25Mb2FkZWQ6IHRydWUgfSkgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiggbmFtZXNwYWNlID09PSBOU19SRUFDVE9NRSApe1xyXG4gICAgICBTZXJ2ZXJBUEkuZ2V0UmVhY3RvbWVJbmZvcm1hdGlvbiggaWQucmVwbGFjZSgnUkVBQzonLCAnJykgKVxyXG4gICAgICAudGhlbiggcmVzID0+IHtcclxuICAgICAgICBsZXQgZGVzY3JpcHRpb24gPSBfLmdldChyZXMsICdzdW1tYXRpb25bMF0udGV4dCcsIGRlc2NyaXB0aW9uT25GYWlsKTtcclxuICAgICAgICBsZXQgdXBkYXRlID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7IG5hbWU6IE5TX1JFQUNUT01FLnRvVXBwZXJDYXNlKCksIGRlc2NyaXB0aW9uLCBkZXNjcmlwdGlvbkxvYWRlZDogdHJ1ZSB9KTtcclxuXHJcbiAgICAgICAgdXBkYXRlKCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCggKCkgPT4gdGhpcy5zZXRTdGF0ZSh7IG5hbWU6IE5TX1JFQUNUT01FLnRvVXBwZXJDYXNlKCksIGRlc2NyaXB0aW9uTG9hZGVkOiB0cnVlIH0pICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHtub2RlfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgeyBkZXNjcmlwdGlvbiwgbmFtZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCB0aXRsZSA9IG5vZGUuZGF0YSgnbmFtZScpO1xyXG4gICAgbGV0IHNoYXJlZEdlbmVMaXN0ID0gbm9kZS5kYXRhKCdpbnRlcnNlY3Rpb24nKS5zb3J0KCk7XHJcbiAgICBsZXQgc2hhcmVkR2VuZUNvdW50ID0gc2hhcmVkR2VuZUxpc3QubGVuZ3RoO1xyXG4gICAgbGV0IHVybCA9IG5vZGUuZGF0YSgndXJpJyk7XHJcblxyXG4gICAgaWYoICF0aGlzLnN0YXRlLmRlc2NyaXB0aW9uTG9hZGVkICl7XHJcbiAgICAgIHJldHVybiBoKCdkaXYuY3ktdG9vbHRpcCcsIFtcclxuICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1jb250ZW50JywgW1xyXG4gICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtaGVhZGVyJyxbXHJcbiAgICAgICAgICAgIGgoJ2gyLmN5LXRvb2x0aXAtdGl0bGUnLCAnTG9hZGluZy4uLicpXHJcbiAgICAgICAgICBdKSxcclxuICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWJvZHknLCBbXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWxvYWRpbmctc2VjdGlvbicsIFtcclxuICAgICAgICAgICAgICBoKCdpLmljb24uaWNvbi1zcGlubmVyJylcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgXSlcclxuICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGVzY3JpcHRpb25TZWN0aW9uID0gZGVzY3JpcHRpb24gPyBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgJ0Rlc2NyaXB0aW9uJyksXHJcbiAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLXZhbHVlJywgZGVzY3JpcHRpb24pXHJcbiAgICBdKSA6IG51bGw7XHJcblxyXG4gICAgcmV0dXJuIGgoJ2Rpdi5jeS10b29sdGlwJywgW1xyXG4gICAgICBoKCdkaXYuY3ktdG9vbHRpcC1jb250ZW50JywgW1xyXG4gICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWhlYWRlcicsW1xyXG4gICAgICAgICAgaCgnaDIuY3ktdG9vbHRpcC10aXRsZScsIFtcclxuICAgICAgICAgICAgaCgnYS5wbGFpbi1saW5rJywgeyBocmVmOiB1cmwsIHRhcmdldDogJ19ibGFuaycsIH0sIHRpdGxlWzBdLnRvVXBwZXJDYXNlKCkgKyB0aXRsZS5zdWJzdHIoMSkgKSxcclxuICAgICAgICAgICAgaCgnZGl2LmN5LXRvb2x0aXAtdHlwZS1jaGlwJywgbmFtZSApXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWJvZHknLCBbXHJcbiAgICAgICAgICBkZXNjcmlwdGlvblNlY3Rpb24sXHJcbiAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1zZWN0aW9uJywgW1xyXG4gICAgICAgICAgICBoKCdkaXYuY3ktdG9vbHRpcC1maWVsZC1uYW1lJywgJ0dlbmVzIFNoYXJlZCB3aXRoIEVudGVyZWQgTGlzdCAoJyArIHNoYXJlZEdlbmVDb3VudCArICcpJyksXHJcbiAgICAgICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWZpZWxkLXZhbHVlJywgc2hhcmVkR2VuZUxpc3Quam9pbignLCAnKSksXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIGgoJ2Rpdi5jeS10b29sdGlwLWNhbGwtdG8tYWN0aW9uJywgW1xyXG4gICAgICAgICAgaCgnYScsIHtcclxuICAgICAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJyxcclxuICAgICAgICAgICAgaHJlZjogJy9zZWFyY2g/cT0nICsgdGl0bGVcclxuICAgICAgICAgICAgfSwgW1xyXG4gICAgICAgICAgICAgIGgoJ2J1dHRvbi5jYWxsLXRvLWFjdGlvbicsICdGaW5kIFJlbGF0ZWQgUGF0aHdheXMnKVxyXG4gICAgICAgICAgXSlcclxuICAgICAgICBdKVxyXG4gICAgICBdKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVucmljaG1lbnRUb29sdGlwO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvZW5yaWNobWVudC9lbnJpY2htZW50LXRvb2x0aXAuanMiLCJjb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcblxyXG5jb25zdCB7IHN0ZW1tZXIgfSA9IHJlcXVpcmUoJ3BvcnRlci1zdGVtbWVyJyk7XHJcbmNvbnN0IHN0b3BXb3JkcyA9IHJlcXVpcmUoJy4vc3RvcHdvcmRzLmpzb24nKTtcclxuY29uc3QgZmxhZ2dlZFdvcmRzID0gcmVxdWlyZSgnLi9mbGFnZ2Vkd29yZHMuanNvbicpO1xyXG5cclxuXHJcblxyXG4vLyBUaGlzIG1vZHVsZSBzdW1tYXJpemVzIHRleHQgZm9yIGEgZW5yaWNobWVudCBjbHVzdGVyLlxyXG4vLyBIZXJlIGlzIHRoZSBnZW5lcmFsIGFsZ29yaXRobTpcclxuLy8gICBJbnB1dCBTYW5pdGl6YXRpb25cclxuLy8gICAgIDEuIHRva2VuaXplIGJ5IGEgbGlzdCBvZiBkZWxpbWl0ZXJzIGUuZy4gdGFicywgc3BhY2VzLCBuZXdsaW5lcywgc3BlY2lhbCBjaGFyYWN0ZXJzXHJcbi8vICAgICAyLiBmaWx0ZXIgdGhlIHRva2VucyBmb3Igc3RvcCB3b3JkcyBvciBmbGFnZ2VkIHdvcmRzXHJcbi8vICAgUHJlcHJvY2Vzc2luZ1xyXG4vLyAgICAgMy4gY29tcHV0ZSB0aGUgb2NjdXJlbmNlcyBvZiBlYWNoIHRva2VuXHJcbi8vICAgICA0LiBjb21wdXRlIHRoZSB3b3JkIHN0ZW0gb2YgdGhlIHRva2VuIHVzaW5nIHRoZSBQb3J0ZXIgU3RlbW1lciBBbGdvcml0aG1cclxuLy8gICAgIDUuIGFzc29jaWF0ZSBlYWNoIHN0ZW0gd2l0aCB0aGUgb3JpZ2luYWwgdG9rZW5cclxuLy8gICBTZWxlY3Rpb25cclxuLy8gICAgIDYuIGZvciBlYWNoIHN0ZW0sIGdldCB0aGUgdG9rZW4gYXNzb2NpYXRlZCB3aXRoIHRoZSBtb3N0IG9jY3VyZW5jZXNcclxuXHJcbi8vIEZvciBtb3JlIGNvbnRleHQvaW5mb3JtYXRpb246XHJcbi8vICAgIGh0dHBzOi8vdGFnY3Jvd2QuY29tL2ZhcS5odG1sI2hvd3RvXHJcbi8vICAgIGh0dHA6Ly93b3JkY2xvdWQuY3MuYXJpem9uYS5lZHUvZmFxLmh0bWwjcS1ob3ctaXQtd29ya3NcclxuLy8gICAgaHR0cDovL3Nub3diYWxsLnRhcnRhcnVzLm9yZy9hbGdvcml0aG1zL3BvcnRlci9zdGVtbWVyLmh0bWxcclxuXHJcblxyXG4vLyBJbnB1dDogIFN0cmluZyAtLSAgcmVwcmVzZW50aW5nIHRleHQgbGFiZWxzIG9mIHBhdGh3YXkgbmFtZXMgb2YgYSBnaXZlbiBjb21wb25lbnRcclxuLy8gT3V0cHV0OiBBcnJheSBvZiBzdHJpbmdzIC0tIHJlcHJlc2VudGluZyB0aGUgbW9zdCBjb21tb24gd29yZHMgdGhhdCBhcmUgbm90IHN0b3Agd29yZHMgb3IgZmxhZ2dlZCB3b3Jkc1xyXG5sZXQgZ2VuZXJhdGVDbHVzdGVyTGFiZWxzID0gdGV4dCA9PiB7XHJcbiAgbGV0IGRlbGltaXRlclJlZ2V4ID0gL1tcXHQgXFxuXFxyXFxmIVxcXFwjJCUmKCkqKywuPD0+P0BbXlxcXFxcXF1gX3t8fX5cXFxcJ1wiXS87XHJcbiAgbGV0IGZpbHRlcldvcmRzID0gbmV3IFNldChbLi4uc3RvcFdvcmRzLCBmbGFnZ2VkV29yZHNdKTtcclxuICBsZXQgd29yZE9jY3VyZW5jZU1hcCA9IG5ldyBNYXAoKTtcclxuICBsZXQgc3RlbVRvV29yZHNNYXAgPSBuZXcgTWFwKCk7XHJcblxyXG4gIGxldCBpbmNyS2V5ID0gKCBtLCBrICkgPT4ge1xyXG4gICAgaWYoIG0uaGFzKCBrICkgKXtcclxuICAgICAgbS5zZXQoaywgbS5nZXQoaykgKyAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG0uc2V0KCBrLCAxICk7XHJcbiAgICB9XHJcbiAgfTtcclxuICBsZXQgYXBwZW5kS2V5ID0gKCBtLCBrLCB2ICkgPT4ge1xyXG4gICAgaWYoIG0uaGFzKCBrICkgKXtcclxuICAgICAgbS5zZXQoaywgbS5nZXQoaykuYWRkKHYpICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBtLnNldCggaywgbmV3IFNldChbdl0pICk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gaW5wdXQgc2FuaXRpemF0aW9uXHJcbiAgbGV0IHRva2VucyA9IHRleHQuc3BsaXQoZGVsaW1pdGVyUmVnZXgpLmZpbHRlciggd29yZCA9PiAhZmlsdGVyV29yZHMuaGFzKHdvcmQpICYmIHdvcmQgIT09ICcnICk7XHJcblxyXG4gIC8vIHByZXByb2Nlc3MgdGhlIHRva2VucyAtLSBjb21wdXRlIHdvcmQgb2NjdXJlbmNlcywgY29tcHV0ZSB3b3JkIHN0ZW1zXHJcbiAgbGV0IHdvcmRTdGVtcyA9IF8udW5pcSh0b2tlbnMubWFwKCB0b2tlbiA9PiB7XHJcbiAgICBpbmNyS2V5KCB3b3JkT2NjdXJlbmNlTWFwLCB0b2tlbiApO1xyXG4gICAgbGV0IHdvcmRTdGVtID0gc3RlbW1lciggdG9rZW4udG9Mb3dlckNhc2UoKSApO1xyXG4gICAgYXBwZW5kS2V5KCBzdGVtVG9Xb3Jkc01hcCwgd29yZFN0ZW0sIHRva2VuICk7XHJcbiAgICByZXR1cm4gd29yZFN0ZW07XHJcbiAgIH0gKSApO1xyXG5cclxuICAvLyBmb3IgZWFjaCBzdGVtLCBnZXQgaXRzIGFzc29jaWF0ZWQgdG9rZW5zIGFuZCByZXR1cm4gdGhlIHRva2VuIHdpdGggdGhlIG1vc3Qgb2NjdXJlbmNlc1xyXG4gIGxldCB3b3JkcyA9IHdvcmRTdGVtcy5tYXAoIHdzID0+IHtcclxuICAgIGxldCBhc3NvY2lhdGVkV29yZHMgPSBbLi4uc3RlbVRvV29yZHNNYXAuZ2V0KCB3cyApXS5zb3J0KCAodzAsIHcxICkgPT4ge1xyXG4gICAgICByZXR1cm4gd29yZE9jY3VyZW5jZU1hcC5nZXQodzEpID4gd29yZE9jY3VyZW5jZU1hcC5nZXQodzApO1xyXG4gICAgfSApO1xyXG5cclxuICAgIHJldHVybiBhc3NvY2lhdGVkV29yZHNbMF07XHJcbiAgfSk7XHJcblxyXG4gIC8vIHJldHVybiBhbGwgd29yZHMgdGhhdCBhcHBlYXIgYXQgbGVhc3Qgb25jZVxyXG4gIHJldHVybiB3b3Jkcy5maWx0ZXIoIHdvcmQgPT4gd29yZE9jY3VyZW5jZU1hcC5nZXQod29yZCkgPiAxICk7XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IHtcclxuICBnZW5lcmF0ZUNsdXN0ZXJMYWJlbHNcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2VucmljaG1lbnQvY3kvY2x1c3Rlci1sYWJlbC1jYXRlZ29yaXphdGlvbi9pbmRleC5qcyIsIm1vZHVsZS5leHBvcnRzID0gW1wiYVwiLFwiYSdzXCIsXCJhYmxlXCIsXCJhYm91dFwiLFwiYWJvdmVcIixcImFjY29yZGluZ1wiLFwiYWNjb3JkaW5nbHlcIixcImFjcm9zc1wiLFwiYWN0dWFsbHlcIixcImFmdGVyXCIsXCJhZnRlcndhcmRzXCIsXCJhZ2FpblwiLFwiYWdhaW5zdFwiLFwiYWluJ3RcIixcImFsbFwiLFwiYWxsb3dcIixcImFsbG93c1wiLFwiYWxtb3N0XCIsXCJhbG9uZVwiLFwiYWxvbmdcIixcImFscmVhZHlcIixcImFsc29cIixcImFsdGhvdWdoXCIsXCJhbHdheXNcIixcImFtXCIsXCJhbW9uZ1wiLFwiYW1vbmdzdFwiLFwiYW5cIixcImFuZFwiLFwiYW5vdGhlclwiLFwiYW55XCIsXCJhbnlib2R5XCIsXCJhbnlob3dcIixcImFueW9uZVwiLFwiYW55dGhpbmdcIixcImFueXdheVwiLFwiYW55d2F5c1wiLFwiYW55d2hlcmVcIixcImFwYXJ0XCIsXCJhcHBlYXJcIixcImFwcHJlY2lhdGVcIixcImFwcHJvcHJpYXRlXCIsXCJhcmVcIixcImFyZW4ndFwiLFwiYXJvdW5kXCIsXCJhc1wiLFwiYXNpZGVcIixcImFza1wiLFwiYXNraW5nXCIsXCJhc3NvY2lhdGVkXCIsXCJhdFwiLFwiYXZhaWxhYmxlXCIsXCJhd2F5XCIsXCJhd2Z1bGx5XCIsXCJiXCIsXCJiZVwiLFwiYmVjYW1lXCIsXCJiZWNhdXNlXCIsXCJiZWNvbWVcIixcImJlY29tZXNcIixcImJlY29taW5nXCIsXCJiZWVuXCIsXCJiZWZvcmVcIixcImJlZm9yZWhhbmRcIixcImJlaGluZFwiLFwiYmVpbmdcIixcImJlbGlldmVcIixcImJlbG93XCIsXCJiZXNpZGVcIixcImJlc2lkZXNcIixcImJlc3RcIixcImJldHRlclwiLFwiYmV0d2VlblwiLFwiYmV5b25kXCIsXCJib3RoXCIsXCJicmllZlwiLFwiYnV0XCIsXCJieVwiLFwiY1wiLFwiYydtb25cIixcImMnc1wiLFwiY2FtZVwiLFwiY2FuXCIsXCJjYW4ndFwiLFwiY2Fubm90XCIsXCJjYW50XCIsXCJjYXVzZVwiLFwiY2F1c2VzXCIsXCJjZXJ0YWluXCIsXCJjZXJ0YWlubHlcIixcImNoYW5nZXNcIixcImNsZWFybHlcIixcImNvXCIsXCJjb21cIixcImNvbWVcIixcImNvbWVzXCIsXCJjb25jZXJuaW5nXCIsXCJjb25zZXF1ZW50bHlcIixcImNvbnNpZGVyXCIsXCJjb25zaWRlcmluZ1wiLFwiY29udGFpblwiLFwiY29udGFpbmluZ1wiLFwiY29udGFpbnNcIixcImNvcnJlc3BvbmRpbmdcIixcImNvdWxkXCIsXCJjb3VsZG4ndFwiLFwiY291cnNlXCIsXCJjdXJyZW50bHlcIixcImRcIixcImRlZmluaXRlbHlcIixcImRlc2NyaWJlZFwiLFwiZGVzcGl0ZVwiLFwiZGlkXCIsXCJkaWRuJ3RcIixcImRpZmZlcmVudFwiLFwiZG9cIixcImRvZXNcIixcImRvZXNuJ3RcIixcImRvaW5nXCIsXCJkb24ndFwiLFwiZG9uZVwiLFwiZG93blwiLFwiZG93bndhcmRzXCIsXCJkdXJpbmdcIixcImVcIixcImVhY2hcIixcImVkdVwiLFwiZWdcIixcImVpZ2h0XCIsXCJlaXRoZXJcIixcImVsc2VcIixcImVsc2V3aGVyZVwiLFwiZW5vdWdoXCIsXCJlbnRpcmVseVwiLFwiZXNwZWNpYWxseVwiLFwiZXRcIixcImV0Y1wiLFwiZXZlblwiLFwiZXZlclwiLFwiZXZlcnlcIixcImV2ZXJ5Ym9keVwiLFwiZXZlcnlvbmVcIixcImV2ZXJ5dGhpbmdcIixcImV2ZXJ5d2hlcmVcIixcImV4XCIsXCJleGFjdGx5XCIsXCJleGFtcGxlXCIsXCJleGNlcHRcIixcImZcIixcImZhclwiLFwiZmV3XCIsXCJmaWZ0aFwiLFwiZmlyc3RcIixcImZpdmVcIixcImZvbGxvd2VkXCIsXCJmb2xsb3dpbmdcIixcImZvbGxvd3NcIixcImZvclwiLFwiZm9ybWVyXCIsXCJmb3JtZXJseVwiLFwiZm9ydGhcIixcImZvdXJcIixcImZyb21cIixcImZ1cnRoZXJcIixcImZ1cnRoZXJtb3JlXCIsXCJnXCIsXCJnZXRcIixcImdldHNcIixcImdldHRpbmdcIixcImdpdmVuXCIsXCJnaXZlc1wiLFwiZ29cIixcImdvZXNcIixcImdvaW5nXCIsXCJnb25lXCIsXCJnb3RcIixcImdvdHRlblwiLFwiZ3JlZXRpbmdzXCIsXCJoXCIsXCJoYWRcIixcImhhZG4ndFwiLFwiaGFwcGVuc1wiLFwiaGFyZGx5XCIsXCJoYXNcIixcImhhc24ndFwiLFwiaGF2ZVwiLFwiaGF2ZW4ndFwiLFwiaGF2aW5nXCIsXCJoZVwiLFwiaGUnc1wiLFwiaGVsbG9cIixcImhlbHBcIixcImhlbmNlXCIsXCJoZXJcIixcImhlcmVcIixcImhlcmUnc1wiLFwiaGVyZWFmdGVyXCIsXCJoZXJlYnlcIixcImhlcmVpblwiLFwiaGVyZXVwb25cIixcImhlcnNcIixcImhlcnNlbGZcIixcImhpXCIsXCJoaW1cIixcImhpbXNlbGZcIixcImhpc1wiLFwiaGl0aGVyXCIsXCJob3BlZnVsbHlcIixcImhvd1wiLFwiaG93YmVpdFwiLFwiaG93ZXZlclwiLFwiaVwiLFwiaSdkXCIsXCJpJ2xsXCIsXCJpJ21cIixcImkndmVcIixcImllXCIsXCJpZlwiLFwiaWdub3JlZFwiLFwiaW1tZWRpYXRlXCIsXCJpblwiLFwiaW5hc211Y2hcIixcImluY1wiLFwiaW5kZWVkXCIsXCJpbmRpY2F0ZVwiLFwiaW5kaWNhdGVkXCIsXCJpbmRpY2F0ZXNcIixcImlubmVyXCIsXCJpbnNvZmFyXCIsXCJpbnN0ZWFkXCIsXCJpbnRvXCIsXCJpbndhcmRcIixcImlzXCIsXCJpc24ndFwiLFwiaXRcIixcIml0J2RcIixcIml0J2xsXCIsXCJpdCdzXCIsXCJpdHNcIixcIml0c2VsZlwiLFwialwiLFwianVzdFwiLFwia1wiLFwia2VlcFwiLFwia2VlcHNcIixcImtlcHRcIixcImtub3dcIixcImtub3dzXCIsXCJrbm93blwiLFwibFwiLFwibGFzdFwiLFwibGF0ZWx5XCIsXCJsYXRlclwiLFwibGF0dGVyXCIsXCJsYXR0ZXJseVwiLFwibGVhc3RcIixcImxlc3NcIixcImxlc3RcIixcImxldFwiLFwibGV0J3NcIixcImxpa2VcIixcImxpa2VkXCIsXCJsaWtlbHlcIixcImxpdHRsZVwiLFwibG9va1wiLFwibG9va2luZ1wiLFwibG9va3NcIixcImx0ZFwiLFwibVwiLFwibWFpbmx5XCIsXCJtYW55XCIsXCJtYXlcIixcIm1heWJlXCIsXCJtZVwiLFwibWVhblwiLFwibWVhbndoaWxlXCIsXCJtZXJlbHlcIixcIm1pZ2h0XCIsXCJtb3JlXCIsXCJtb3Jlb3ZlclwiLFwibW9zdFwiLFwibW9zdGx5XCIsXCJtdWNoXCIsXCJtdXN0XCIsXCJteVwiLFwibXlzZWxmXCIsXCJuXCIsXCJuYW1lXCIsXCJuYW1lbHlcIixcIm5kXCIsXCJuZWFyXCIsXCJuZWFybHlcIixcIm5lY2Vzc2FyeVwiLFwibmVlZFwiLFwibmVlZHNcIixcIm5laXRoZXJcIixcIm5ldmVyXCIsXCJuZXZlcnRoZWxlc3NcIixcIm5ld1wiLFwibmV4dFwiLFwibmluZVwiLFwibm9cIixcIm5vYm9keVwiLFwibm9uXCIsXCJub25lXCIsXCJub29uZVwiLFwibm9yXCIsXCJub3JtYWxseVwiLFwibm90XCIsXCJub3RoaW5nXCIsXCJub3ZlbFwiLFwibm93XCIsXCJub3doZXJlXCIsXCJvXCIsXCJvYnZpb3VzbHlcIixcIm9mXCIsXCJvZmZcIixcIm9mdGVuXCIsXCJvaFwiLFwib2tcIixcIm9rYXlcIixcIm9sZFwiLFwib25cIixcIm9uY2VcIixcIm9uZVwiLFwib25lc1wiLFwib25seVwiLFwib250b1wiLFwib3JcIixcIm90aGVyXCIsXCJvdGhlcnNcIixcIm90aGVyd2lzZVwiLFwib3VnaHRcIixcIm91clwiLFwib3Vyc1wiLFwib3Vyc2VsdmVzXCIsXCJvdXRcIixcIm91dHNpZGVcIixcIm92ZXJcIixcIm92ZXJhbGxcIixcIm93blwiLFwicFwiLFwicGFydGljdWxhclwiLFwicGFydGljdWxhcmx5XCIsXCJwZXJcIixcInBlcmhhcHNcIixcInBsYWNlZFwiLFwicGxlYXNlXCIsXCJwbHVzXCIsXCJwb3NzaWJsZVwiLFwicHJlc3VtYWJseVwiLFwicHJvYmFibHlcIixcInByb3ZpZGVzXCIsXCJxXCIsXCJxdWVcIixcInF1aXRlXCIsXCJxdlwiLFwiclwiLFwicmF0aGVyXCIsXCJyZFwiLFwicmVcIixcInJlYWxseVwiLFwicmVhc29uYWJseVwiLFwicmVnYXJkaW5nXCIsXCJyZWdhcmRsZXNzXCIsXCJyZWdhcmRzXCIsXCJyZWxhdGl2ZWx5XCIsXCJyZXNwZWN0aXZlbHlcIixcInJpZ2h0XCIsXCJzXCIsXCJzYWlkXCIsXCJzYW1lXCIsXCJzYXdcIixcInNheVwiLFwic2F5aW5nXCIsXCJzYXlzXCIsXCJzZWNvbmRcIixcInNlY29uZGx5XCIsXCJzZWVcIixcInNlZWluZ1wiLFwic2VlbVwiLFwic2VlbWVkXCIsXCJzZWVtaW5nXCIsXCJzZWVtc1wiLFwic2VlblwiLFwic2VsZlwiLFwic2VsdmVzXCIsXCJzZW5zaWJsZVwiLFwic2VudFwiLFwic2VyaW91c1wiLFwic2VyaW91c2x5XCIsXCJzZXZlblwiLFwic2V2ZXJhbFwiLFwic2hhbGxcIixcInNoZVwiLFwic2hvdWxkXCIsXCJzaG91bGRuJ3RcIixcInNpbmNlXCIsXCJzaXhcIixcInNvXCIsXCJzb21lXCIsXCJzb21lYm9keVwiLFwic29tZWhvd1wiLFwic29tZW9uZVwiLFwic29tZXRoaW5nXCIsXCJzb21ldGltZVwiLFwic29tZXRpbWVzXCIsXCJzb21ld2hhdFwiLFwic29tZXdoZXJlXCIsXCJzb29uXCIsXCJzb3JyeVwiLFwic3BlY2lmaWVkXCIsXCJzcGVjaWZ5XCIsXCJzcGVjaWZ5aW5nXCIsXCJzdGlsbFwiLFwic3ViXCIsXCJzdWNoXCIsXCJzdXBcIixcInN1cmVcIixcInRcIixcInQnc1wiLFwidGFrZVwiLFwidGFrZW5cIixcInRlbGxcIixcInRlbmRzXCIsXCJ0aFwiLFwidGhhblwiLFwidGhhbmtcIixcInRoYW5rc1wiLFwidGhhbnhcIixcInRoYXRcIixcInRoYXQnc1wiLFwidGhhdHNcIixcInRoZVwiLFwidGhlaXJcIixcInRoZWlyc1wiLFwidGhlbVwiLFwidGhlbXNlbHZlc1wiLFwidGhlblwiLFwidGhlbmNlXCIsXCJ0aGVyZVwiLFwidGhlcmUnc1wiLFwidGhlcmVhZnRlclwiLFwidGhlcmVieVwiLFwidGhlcmVmb3JlXCIsXCJ0aGVyZWluXCIsXCJ0aGVyZXNcIixcInRoZXJldXBvblwiLFwidGhlc2VcIixcInRoZXlcIixcInRoZXknZFwiLFwidGhleSdsbFwiLFwidGhleSdyZVwiLFwidGhleSd2ZVwiLFwidGhpbmtcIixcInRoaXJkXCIsXCJ0aGlzXCIsXCJ0aG9yb3VnaFwiLFwidGhvcm91Z2hseVwiLFwidGhvc2VcIixcInRob3VnaFwiLFwidGhyZWVcIixcInRocm91Z2hcIixcInRocm91Z2hvdXRcIixcInRocnVcIixcInRodXNcIixcInRvXCIsXCJ0b2dldGhlclwiLFwidG9vXCIsXCJ0b29rXCIsXCJ0b3dhcmRcIixcInRvd2FyZHNcIixcInRyaWVkXCIsXCJ0cmllc1wiLFwidHJ1bHlcIixcInRyeVwiLFwidHJ5aW5nXCIsXCJ0d2ljZVwiLFwidHdvXCIsXCJ1XCIsXCJ1blwiLFwidW5kZXJcIixcInVuZm9ydHVuYXRlbHlcIixcInVubGVzc1wiLFwidW5saWtlbHlcIixcInVudGlsXCIsXCJ1bnRvXCIsXCJ1cFwiLFwidXBvblwiLFwidXNcIixcInVzZVwiLFwidXNlZFwiLFwidXNlZnVsXCIsXCJ1c2VzXCIsXCJ1c2luZ1wiLFwidXN1YWxseVwiLFwidXVjcFwiLFwidlwiLFwidmFsdWVcIixcInZhcmlvdXNcIixcInZlcnlcIixcInZpYVwiLFwidml6XCIsXCJ2c1wiLFwid1wiLFwid2FudFwiLFwid2FudHNcIixcIndhc1wiLFwid2Fzbid0XCIsXCJ3YXlcIixcIndlXCIsXCJ3ZSdkXCIsXCJ3ZSdsbFwiLFwid2UncmVcIixcIndlJ3ZlXCIsXCJ3ZWxjb21lXCIsXCJ3ZWxsXCIsXCJ3ZW50XCIsXCJ3ZXJlXCIsXCJ3ZXJlbid0XCIsXCJ3aGF0XCIsXCJ3aGF0J3NcIixcIndoYXRldmVyXCIsXCJ3aGVuXCIsXCJ3aGVuY2VcIixcIndoZW5ldmVyXCIsXCJ3aGVyZVwiLFwid2hlcmUnc1wiLFwid2hlcmVhZnRlclwiLFwid2hlcmVhc1wiLFwid2hlcmVieVwiLFwid2hlcmVpblwiLFwid2hlcmV1cG9uXCIsXCJ3aGVyZXZlclwiLFwid2hldGhlclwiLFwid2hpY2hcIixcIndoaWxlXCIsXCJ3aGl0aGVyXCIsXCJ3aG9cIixcIndobydzXCIsXCJ3aG9ldmVyXCIsXCJ3aG9sZVwiLFwid2hvbVwiLFwid2hvc2VcIixcIndoeVwiLFwid2lsbFwiLFwid2lsbGluZ1wiLFwid2lzaFwiLFwid2l0aFwiLFwid2l0aGluXCIsXCJ3aXRob3V0XCIsXCJ3b24ndFwiLFwid29uZGVyXCIsXCJ3b3VsZFwiLFwid291bGRcIixcIndvdWxkbid0XCIsXCJ4XCIsXCJ5XCIsXCJ5ZXNcIixcInlldFwiLFwieW91XCIsXCJ5b3UnZFwiLFwieW91J2xsXCIsXCJ5b3UncmVcIixcInlvdSd2ZVwiLFwieW91clwiLFwieW91cnNcIixcInlvdXJzZWxmXCIsXCJ5b3Vyc2VsdmVzXCIsXCJ6XCIsXCJ6ZXJvXCJdXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2VucmljaG1lbnQvY3kvY2x1c3Rlci1sYWJlbC1jYXRlZ29yaXphdGlvbi9zdG9wd29yZHMuanNvblxuLy8gbW9kdWxlIGlkID0gNTE3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gW1wia2VnZ1wiLFwicmVhY3RvbWVcIixcInJlYWN0XCIsXCJiaW9jYXJ0YVwiLFwiZ29cIixcIm5jaVwiLFwibXNpZ2RiXCJdXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2VucmljaG1lbnQvY3kvY2x1c3Rlci1sYWJlbC1jYXRlZ29yaXphdGlvbi9mbGFnZ2Vkd29yZHMuanNvblxuLy8gbW9kdWxlIGlkID0gNTE4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImNvbnN0IGN5dG9zY2FwZSA9IHJlcXVpcmUoJ2N5dG9zY2FwZScpO1xyXG5cclxuY29uc3QgREVGQVVMVF9OT0RFX1NJWkUgPSAzMDtcclxuXHJcbmxldCAgZ2V0Tm9kZVNpemUgPSBub2RlID0+IHtcclxuICBsZXQgZ2VuZUNvdW50ID0gbm9kZS5kYXRhKCdnZW5lQ291bnQnKSB8fCBERUZBVUxUX05PREVfU0laRTtcclxuXHJcbiAgcmV0dXJuIE1hdGgubWluKCBNYXRoLm1heChERUZBVUxUX05PREVfU0laRSwgZ2VuZUNvdW50KSwgMTAwICk7XHJcbn07XHJcblxyXG5jb25zdCBlbnJpY2htZW50U3R5bGVzaGVldD1jeXRvc2NhcGUuc3R5bGVzaGVldCgpXHJcbi5zZWxlY3RvcignZWRnZScpXHJcbiAgLmNzcyh7XHJcbiAgICAnb3BhY2l0eSc6IDAuMyxcclxuICAgICdjdXJ2ZS1zdHlsZSc6ICdoYXlzdGFjaycsXHJcbiAgICAnaGF5c3RhY2stcmFkaXVzJzogMCxcclxuICAgICdsaW5lLWNvbG9yJzogJyM1NTUnLFxyXG4gICAgJ3dpZHRoJzogZWRnZSA9PiB7XHJcbiAgICAgIGxldCBzaW1pbGFyaXR5ID0gZWRnZS5kYXRhKCdzaW1pbGFyaXR5Jyk7XHJcblxyXG4gICAgICBpZiggc2ltaWxhcml0eSA8PSAwLjMgKXtcclxuICAgICAgICByZXR1cm4gMjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoIHNpbWlsYXJpdHkgPD0gMC43NSApe1xyXG4gICAgICAgIHJldHVybiA0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gMTI7XHJcbiAgICB9XHJcbiAgfSlcclxuLnNlbGVjdG9yKCdub2RlJylcclxuICAuY3NzKHtcclxuICAgICdmb250LXNpemUnOiAxNCxcclxuICAgICdjb2xvcic6ICcjZmZmJyxcclxuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyMzMzMnLFxyXG4gICAgJ3RleHQtb3V0bGluZS1jb2xvcic6ICcjMzMzJyxcclxuICAgICd0ZXh0LW91dGxpbmUtd2lkdGgnOiA0LFxyXG4gICAgJ3RleHQtd3JhcCc6ICd3cmFwJyxcclxuICAgICd0ZXh0LW1heC13aWR0aCc6IDE3NSxcclxuICAgICd3aWR0aCc6IG5vZGUgPT4gZ2V0Tm9kZVNpemUobm9kZSksXHJcbiAgICAnaGVpZ2h0Jzogbm9kZSA9PiBnZXROb2RlU2l6ZShub2RlKSxcclxuICAgICdsYWJlbCc6IG5vZGUgPT4gbm9kZS5kYXRhKCduYW1lJyksXHJcbiAgICAnbWluLXpvb21lZC1mb250LXNpemUnOiA1LFxyXG4gICAgJ3RleHQtaGFsaWduJzogJ2NlbnRlcicsXHJcbiAgICAndGV4dC12YWxpZ24nOiAnY2VudGVyJyxcclxuICAgICd0ZXh0LWV2ZW50cyc6ICd5ZXMnXHJcbiAgfSlcclxuLnNlbGVjdG9yKCckbm9kZSA+IG5vZGUnKVxyXG4gIC5jc3Moe1xyXG4gICAgJ3RleHQtb3V0bGluZS13aWR0aCc6IDAsXHJcbiAgICAnbGFiZWwnOiBub2RlID0+IG5vZGUuZGF0YSgndGFncycpICE9ICcnID8gYFRhZ3M6ICR7bm9kZS5kYXRhKCd0YWdzJyl9YCA6ICcnLFxyXG4gICAgJ2JvcmRlci13aWR0aCc6IDUsXHJcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6ICd3aGl0ZScsXHJcbiAgICAnY29sb3InOiAnIzMzMycsXHJcbiAgICAndGV4dC12YWxpZ24nOiAnYm90dG9tJyxcclxuICAgICd0ZXh0LW1heC13aWR0aCc6IDEwMDAsXHJcbiAgICAnZm9udC1zaXplJzogNDAsXHJcbiAgICAndGV4dC1ldmVudHMnOiAnbm8nXHJcbiAgfSlcclxuLnNlbGVjdG9yKCdub2RlWz9xdWVyaWVkXScpXHJcbiAgLmNzcyh7XHJcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdibHVlJyxcclxuICAgICdvcGFjaXR5JzogMSxcclxuICAgICd6LWNvbXBvdW5kLWRlcHRoJzogJ3RvcCcsXHJcbiAgICAnY29sb3InOiAnd2hpdGUnLFxyXG4gICAgJ3RleHQtb3V0bGluZS1jb2xvcic6ICdibGFjaydcclxuICB9KVxyXG4uc2VsZWN0b3IoJ25vZGU6c2VsZWN0ZWQnKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2JhY2tncm91bmQtY29sb3InOiAnIzAxNjlkOScsXHJcbiAgICAndGV4dC1vdXRsaW5lLWNvbG9yJzogJyMwMTY5ZDknXHJcbiAgfSlcclxuLnNlbGVjdG9yKCdlZGdlOnNlbGVjdGVkJylcclxuICAuY3NzKHtcclxuICAgICd6LWluZGV4JzogOTk5LFxyXG4gICAgJ29wYWNpdHknOiAxLFxyXG4gICAgJ2xpbmUtY29sb3InOiAnIzAxNjlkOSdcclxuICB9KVxyXG4uc2VsZWN0b3IoJy5oaWRkZW4nKVxyXG4gIC5jc3Moe1xyXG4gICAgJ2Rpc3BsYXknOidub25lJyxcclxuICB9KVxyXG4uc2VsZWN0b3IoJy5oaWdobGlnaHRlZCcpXHJcbiAgLmNzcyh7XHJcbiAgICAnb3BhY2l0eSc6IDEsXHJcbiAgfSlcclxuLnNlbGVjdG9yKCcudW5oaWdobGlnaHRlZCcpXHJcbiAgLmNzcyh7XHJcbiAgICAnb3BhY2l0eSc6IDAuMSxcclxuICB9KVxyXG4uc2VsZWN0b3IoYC5tYXRjaGVkYClcclxuICAuY3NzKHtcclxuICAgICdib3JkZXItY29sb3InOiAneWVsbG93JyxcclxuICAgICdib3JkZXItd2lkdGgnOiAxMCxcclxuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyM2MDYwMDAnLFxyXG4gICAgJ3RleHQtb3V0bGluZS1jb2xvcic6ICcjNjA2MDAwJ1xyXG4gIH0pO1xyXG5tb2R1bGUuZXhwb3J0cyA9IGVucmljaG1lbnRTdHlsZXNoZWV0O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2ZlYXR1cmVzL2VucmljaG1lbnQvY3kvZW5yaWNobWVudC1zdHlsZXNoZWV0LmpzIiwiY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IHsgQ29tcG9uZW50IH0gPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCB7IExpbmsgfSA9IHJlcXVpcmUoJ3JlYWN0LXJvdXRlci1kb20nKTtcclxuXHJcbmNvbnN0IHsgU2VydmVyQVBJIH0gPSByZXF1aXJlKCcuLi8uLi9zZXJ2aWNlcycpO1xyXG5cclxuY2xhc3MgQmlvZmFjdG9pZCBleHRlbmRzIENvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IocHJvcHMpe1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIGRvY3M6IFtdXHJcbiAgICB9O1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpe1xyXG4gICAgU2VydmVyQVBJLmdldEFsbERvY3MoKS50aGVuKCByZXMgPT4gdGhpcy5zZXRTdGF0ZSh7ZG9jczogcmVzfSkpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCl7XHJcbiAgICBsZXQgeyBkb2NzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgcmV0dXJuIGgoJ2Rpdi5iaW9mYWN0b2lkJywgZG9jcy5tYXAoIGYgPT4ge1xyXG4gICAgICByZXR1cm4gaChMaW5rLCB7IGNsYXNzTmFtZTogJ3BsYWluLWxpbmsnLCB0bzogeyBwYXRobmFtZTogYC9iaW9mYWN0b2lkLyR7Zi5pZH1gfSwgdGFyZ2V0OiAnX2JsYW5rJyB9LCBmLmlkKTtcclxuICAgIH0pKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBCaW9mYWN0b2lkO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvZmVhdHVyZXMvYmlvZmFjdG9pZC9pbmRleC5qcyIsImNvbnN0IGN5dG9zY2FwZSA9IHJlcXVpcmUoJ2N5dG9zY2FwZScpO1xyXG5cclxuLy9MYXlvdXRzXHJcbmNvbnN0IGNvc2VCaWxrZW50ID0gcmVxdWlyZSgnY3l0b3NjYXBlLWNvc2UtYmlsa2VudCcpO1xyXG5jb25zdCBjb2xhID0gcmVxdWlyZSgnY3l0b3NjYXBlLWNvbGEnKTtcclxuXHJcbmNvbnN0IGV4cGFuZENvbGxhcHNlID0gcmVxdWlyZSgnY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZScpO1xyXG5cclxuLy9Ub29sdGlwc1xyXG5jb25zdCBwb3BwZXIgPSByZXF1aXJlKCdjeXRvc2NhcGUtcG9wcGVyJyk7XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9ICgpID0+IHtcclxuICBjeXRvc2NhcGUudXNlKGNvbGEpO1xyXG4gIGN5dG9zY2FwZS51c2UoY29zZUJpbGtlbnQpO1xyXG4gIGN5dG9zY2FwZS51c2UoZXhwYW5kQ29sbGFwc2UpO1xyXG4gIGN5dG9zY2FwZS51c2UocG9wcGVyKTtcclxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2N5dG9zY2FwZS1leHRlbnNpb25zLmpzIiwiY29uc3QgRHJvcGRvd24gPSByZXF1aXJlKCcuL2Ryb3Bkb3duJyk7XHJcbmNvbnN0IFBvcG92ZXIgPSByZXF1aXJlKCcuL3BvcG92ZXInKTtcclxuY29uc3QgVG9vbHRpcCA9IHJlcXVpcmUoJy4vdG9vbHRpcCcpO1xyXG5jb25zdCBJY29uQnV0dG9uID0gcmVxdWlyZSgnLi9pY29uLWJ1dHRvbicpO1xyXG5jb25zdCB7IENhcmQsIENhcmRHcmlkIH0gPSByZXF1aXJlKCcuL2NhcmQnKTtcclxuY29uc3QgeyBBcHBDYXJkIH0gPSByZXF1aXJlKCcuL2FwcC1jYXJkJyk7XHJcbmNvbnN0IFBjTG9nb0xpbmsgPSByZXF1aXJlKCcuL3BjLWxvZ28tbGluaycpO1xyXG5jb25zdCBFbXB0eU5ldHdvcmsgPSByZXF1aXJlKCcuL2VtcHR5LW5ldHdvcmsnKTtcclxuY29uc3QgU2lkZWJhciA9IHJlcXVpcmUoJy4vc2lkZWJhcicpO1xyXG5jb25zdCBDeXRvc2NhcGVOZXR3b3JrID0gcmVxdWlyZSgnLi9jeXRvc2NhcGUtbmV0d29yaycpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgRHJvcGRvd24sXHJcbiAgUG9wb3ZlcixcclxuICBUb29sdGlwLFxyXG4gIEljb25CdXR0b24sXHJcbiAgQ2FyZCxcclxuICBDYXJkR3JpZCxcclxuICBBcHBDYXJkLFxyXG4gIFBjTG9nb0xpbmssXHJcbiAgRW1wdHlOZXR3b3JrLFxyXG4gIFNpZGViYXIsXHJcbiAgQ3l0b3NjYXBlTmV0d29ya1xyXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvaW5kZXguanMiLCJjb25zdCB7IHNhZmVGZXRjaDogZmV0Y2gsIFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi9mZXRjaCcpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IGZldGNoLCBUaW1lb3V0RXJyb3IgfTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdXRpbC9pbmRleC5qcyIsImNvbnN0IFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcclxuY29uc3QgaCA9IHJlcXVpcmUoJ3JlYWN0LWh5cGVyc2NyaXB0Jyk7XHJcblxyXG5jb25zdCBUb29sdGlwID0gcmVxdWlyZSgnLi90b29sdGlwJyk7XHJcbmNvbnN0IGNsYXNzTmFtZXMgPSByZXF1aXJlKCdjbGFzc25hbWVzJyk7XHJcblxyXG5jbGFzcyBJY29uQnV0dG9uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICByZW5kZXIoKXtcclxuICAgIGxldCB7IGRlc2NyaXB0aW9uLCBvbkNsaWNrLCBpc0FjdGl2ZSwgaWNvbiB9ID0gdGhpcy5wcm9wcztcclxuXHJcbiAgICBvbkNsaWNrID0gb25DbGljayB8fCAoZnVuY3Rpb24oKXt9KTtcclxuXHJcbiAgICByZXR1cm4gaCgnYnV0dG9uLmljb24tYnV0dG9uLmJ1dHRvbi10b2dnbGUucGxhaW4tYnV0dG9uJywge1xyXG4gICAgICAgIG9uQ2xpY2s6IGUgPT4gb25DbGljayhlKSxcclxuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZXMoeyAnYnV0dG9uLXRvZ2dsZS1vbic6IGlzQWN0aXZlIH0pXHJcbiAgICAgIH0sIFtcclxuICAgICAgICBoKFRvb2x0aXAsIHsgZGVzY3JpcHRpb24gfSwgW1xyXG4gICAgICAgICAgaCgnc3BhbicsIFtcclxuICAgICAgICAgICAgaCgnaS5tYXRlcmlhbC1pY29ucycsIGljb24pXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBJY29uQnV0dG9uO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvaWNvbi1idXR0b24uanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IFJlYWN0RG9tID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBoaCA9IHJlcXVpcmUoJ2h5cGVyc2NyaXB0Jyk7XHJcbmNvbnN0IFRpcHB5ID0gcmVxdWlyZSgndGlwcHkuanMnKTtcclxuY29uc3QgXyA9IHJlcXVpcmUoJ2xvZGFzaCcpO1xyXG5jb25zdCBNb3VzZXRyYXAgPSByZXF1aXJlKCdtb3VzZXRyYXAnKTtcclxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRlbWl0dGVyMycpO1xyXG5cclxuY29uc3QgdGlwcHlFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5jb25zdCB0aXBweURlZmF1bHRzID0gcmVxdWlyZSgnLi4vdGlwcHktZGVmYXVsdHMnKTtcclxuXHJcbk1vdXNldHJhcC5iaW5kKCdlc2NhcGUnLCAoKSA9PiB0aXBweUVtaXR0ZXIuZW1pdCgnZXNjJykpO1xyXG5cclxuY2xhc3MgUG9wb3ZlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcbiAgY29uc3RydWN0b3IoIHByb3BzICl7XHJcbiAgICBzdXBlciggcHJvcHMgKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpe1xyXG4gICAgbGV0IHAgPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIHJldHVybiBoKCAnc3Bhbi5wb3BvdmVyLXRhcmdldCcsIHtcclxuICAgICAgcmVmOiBlbCA9PiB0aGlzLnRhcmdldCA9IGVsLFxyXG4gICAgICBvbkNsaWNrOiBwLm9uQ2xpY2tcclxuICAgIH0sIHAuY2hpbGRyZW4gKTtcclxuICB9XHJcblxyXG4gIHJlbmRlclRpcENvbnRlbnQoKXtcclxuICAgIGxldCBlbCA9IHRoaXMucHJvcHMudGlwcHkuaHRtbDtcclxuXHJcbiAgICBpZiggXy5pc0Z1bmN0aW9uKGVsKSApe1xyXG4gICAgICBlbCA9IGgoZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIFJlYWN0RG9tLnJlbmRlciggZWwsIHRoaXMuY29udGVudCApO1xyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50RGlkTW91bnQoKXtcclxuICAgIGxldCBwID0gdGhpcy5wcm9wcztcclxuICAgIGxldCB0YXJnZXQgPSBwLnRhcmdldCB8fCB0aGlzLnRhcmdldDtcclxuICAgIGxldCBvcHRpb25zID0gcC50aXBweTtcclxuICAgIGxldCBjb250ZW50ID0gdGhpcy5jb250ZW50ID0gaGgoJ2RpdicsIHtcclxuICAgICAgY2xhc3NOYW1lOiAoIHRoaXMucHJvcHMuY2xhc3NOYW1lIHx8ICcnICkgKyAnIHBvcG92ZXItY29udGVudCdcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCByYXdUaXBweU9wdGlvbnMgPSBfLmFzc2lnbigge30sIHRpcHB5RGVmYXVsdHMsIG9wdGlvbnMgKTtcclxuXHJcbiAgICBsZXQgdGlwcHlPcHRpb25zID0gXy5hc3NpZ24oIHt9LCByYXdUaXBweU9wdGlvbnMsIHtcclxuICAgICAgaHRtbDogY29udGVudCxcclxuICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlXHJcbiAgICB9ICk7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJUaXBDb250ZW50KCk7XHJcblxyXG4gICAgbGV0IHRpcHB5ID0gVGlwcHkoIHRhcmdldCwgdGlwcHlPcHRpb25zICkudG9vbHRpcHNbMF07XHJcblxyXG4gICAgbGV0IHNob3cgPSAoKSA9PiB0aXBweS5zaG93KCk7XHJcbiAgICBsZXQgaGlkZSA9ICgpID0+IHRpcHB5LmhpZGUoKTtcclxuXHJcbiAgICBpZiggcC5zaG93ICl7IHAuc2hvdyggc2hvdyApOyB9XHJcbiAgICBpZiggcC5oaWRlICl7IHAuaGlkZSggaGlkZSApOyB9XHJcblxyXG4gICAgdGhpcy5zaG93VGlwcHkgPSAoKSA9PiB0aXBweS5zaG93KCk7XHJcbiAgICB0aGlzLmhpZGVUaXBweSA9ICgpID0+IHRpcHB5LmhpZGUoKTtcclxuICAgIHRoaXMuZGVzdHJveVRpcHB5ID0gKCkgPT4gdGlwcHkuZGVzdHJveSgpO1xyXG5cclxuICAgIHRpcHB5RW1pdHRlci5vbignZXNjJywgdGhpcy5oaWRlVGlwcHkpO1xyXG5cclxuICAgIC8vIHRoZSB0aXBweSBoaWRlIG9uIGNsaWNrIGRvZXNuJ3Qgd29yayB3aXRoIGFuZCBuZXN0ZWQgdGlwcGllcyBvdGhlcndpc2VcclxuICAgIGlmKCByYXdUaXBweU9wdGlvbnMuaGlkZU9uQ2xpY2sgKXtcclxuICAgICAgdGhpcy5vbkJvZHlDbGljayA9IChlKSA9PiB7XHJcbiAgICAgICAgbGV0IHBhcmVudCA9IGUudGFyZ2V0O1xyXG4gICAgICAgIGxldCBoaWRlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgd2hpbGUoIHBhcmVudCAhPT0gZG9jdW1lbnQuYm9keSApe1xyXG4gICAgICAgICAgaWYoIHBhcmVudCA9PT0gY29udGVudCB8fCBwYXJlbnQgPT09IHRhcmdldCApe1xyXG4gICAgICAgICAgICBoaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoIGhpZGUgKXtcclxuICAgICAgICAgIHRoaXMuaGlkZVRpcHB5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25Cb2R5Q2xpY2spO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKXtcclxuICAgIHRpcHB5RW1pdHRlci5yZW1vdmVMaXN0ZW5lcignZXNjJywgdGhpcy5oaWRlVGlwcHkpO1xyXG5cclxuICAgIFJlYWN0RG9tLnVubW91bnRDb21wb25lbnRBdE5vZGUoIHRoaXMuY29udGVudCApO1xyXG5cclxuICAgIGlmKCB0aGlzLm9uQm9keUNsaWNrICl7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQm9keUNsaWNrKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRlc3Ryb3lUaXBweSgpO1xyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKCl7XHJcbiAgICB0aGlzLnJlbmRlclRpcENvbnRlbnQoKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gUG9wb3ZlcjtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9jb21tb24vY29tcG9uZW50cy9wb3BvdmVyLmpzIiwiY29uc3QgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xyXG5jb25zdCBoID0gcmVxdWlyZSgncmVhY3QtaHlwZXJzY3JpcHQnKTtcclxuXHJcbmNvbnN0IHsgTGluayB9ID0gcmVxdWlyZSgncmVhY3Qtcm91dGVyLWRvbScpO1xyXG5cclxuY2xhc3MgRXJyb3JNZXNzYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICByZW5kZXIoKXtcclxuICAgIGNvbnN0IGxvZ28gPSB0aGlzLnByb3BzLmxvZ29cclxuICAgICAgPyBoKCBMaW5rLCB7IHRvOiB7IHBhdGhuYW1lOiBgL2B9LCB0YXJnZXQ6ICdfYmxhbmsnIH0sIFtcclxuICAgICAgICAgIGgoJ2Rpdi5lcnJvci1icmFuZGluZycsIFtcclxuICAgICAgICAgICAgaCgnZGl2LnBjLWxvZ28nKSxcclxuICAgICAgICAgICAgaCgnZGl2LmVycm9yLWJyYW5kaW5nLWRlc2NyaXB0b3InLCBbXHJcbiAgICAgICAgICAgICAgaCgnaDIuZXJyb3Itc3VidGl0bGUnLCAnUGF0aHdheSBDb21tb25zJyksXHJcbiAgICAgICAgICAgICAgaCgnaDEuZXJyb3ItdGl0bGUnLCAnU2VhcmNoJylcclxuICAgICAgICAgICAgXSlcclxuICAgICAgICAgIF0pXHJcbiAgICAgIF0pXHJcbiAgICAgIDogbnVsbDtcclxuXHJcbiAgICBjb25zdCB0aXRsZSA9IGgoJ2gxLmVycm9yLW1lc3NhZ2UtdGl0bGUnLFxyXG4gICAgICB0aGlzLnByb3BzLnRpdGxlICE9PSB1bmRlZmluZWQgPyB0aGlzLnByb3BzLnRpdGxlIDogJ0FuIGVycm9yIG9jY3VycmVkJyApO1xyXG5cclxuICAgIGNvbnN0IGJvZHkgPSB0aGlzLnByb3BzLmJvZHkgP1xyXG4gICAgICBoKCdwLmVycm9yLW1lc3NhZ2UtYm9keScsIFtcclxuICAgICAgICBoKCdzcGFuJywgdGhpcy5wcm9wcy5ib2R5IClcclxuICAgICAgXSkgOiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGZvb3RlciA9IGgoJ3AuZXJyb3ItbWVzc2FnZS1mb290ZXInLCB0aGlzLnByb3BzLmZvb3RlciAhPT0gdW5kZWZpbmVkID8gdGhpcy5wcm9wcy5mb290ZXI6IFtcclxuICAgICAgaCgnc3BhbicsICdJZiBkaWZmaWN1bHRpZXMgcGVyc2lzdCwgcGxlYXNlIHJlcG9ydCB0aGlzIHRvIG91ciAnKSxcclxuICAgICAgaCgnYS5wbGFpbi1saW5rJywgeyBocmVmOiAnbWFpbHRvOiBwYXRod2F5LWNvbW1vbnMtaGVscEBnb29nbGVncm91cHMuY29tJyB9LCAnaGVscCBmb3J1bS4nKVxyXG4gICAgXSk7XHJcblxyXG4gICAgcmV0dXJuICBoKCdkaXYuZXJyb3ItbWVzc2FnZS1jb250YWluZXInLCBbXHJcbiAgICAgIGgoJ2Rpdi5lcnJvci1tZXNzYWdlJywgW1xyXG4gICAgICAgIGxvZ28sXHJcbiAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgYm9keSxcclxuICAgICAgICBmb290ZXJcclxuICAgICAgXSlcclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IEVycm9yTWVzc2FnZSB9O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jbGllbnQvY29tbW9uL2NvbXBvbmVudHMvZXJyb3ItbWVzc2FnZS5qcyIsImNvbnN0IGN5dG9zY2FwZSA9IHJlcXVpcmUoJ2N5dG9zY2FwZScpO1xyXG5jb25zdCBQcm9taXNlID0gcmVxdWlyZSgnYmx1ZWJpcmQnKTtcclxuXHJcbi8qKlxyXG4gKiBBIHNlcnZpY2UgdG8gY3JlYXRlIEN5dG9zY2FwZSBpbnN0YW5jZXMuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZVxyXG4gKiBDeXRvc2NhcGUgaW5zdGFuY2VzIHRoYXQgYXJlIHBhc3NlZCB0byBtdWx0aXBsZSBjb21wb25lbnRzLCB3aXRoIGRlbGF5ZWRcclxuICogbW91bnRpbmcuXHJcbiAqL1xyXG5jbGFzcyBDeXRvc2NhcGVTZXJ2aWNlIHtcclxuICAvKipcclxuICAgKiBDcmVhdGVzIHRoZSBzZXJ2aWNlLCBzdG9yaW5nIHRoZSBzcGVjaWZpZWQgb3B0aW9ucyBmb3IgbGF0ZXIgaW5pdGlhbGlzYXRpb24gb2ZcclxuICAgKiB0aGUgQ3l0b3NjYXBlIGluc3RhbmNlLlxyXG4gICAqIEBwYXJhbSBvcHRpb25zIEFuIG9wdGlvbnMgb2JqZWN0IHRoYXQgY29udGFpbnMgQ3l0b3NjYXBlIG9wdGlvbnMgYW5kIGNvbW1vbiBhcHBcclxuICAgKiBiaW5kaW5nIG9wdGlvbnMuXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3Iob3B0aW9ucyl7XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcclxuICAgICAgb25Nb3VudDogKCkgPT4ge30sXHJcbiAgICAgIG1pblpvb206IDAuMDgsXHJcbiAgICAgIG1heFpvb206IDQsXHJcbiAgICAgIHpvb21pbmdFbmFibGVkOiB0cnVlLFxyXG4gICAgICBsYXlvdXQ6IHtcclxuICAgICAgICBuYW1lOiAnbnVsbCdcclxuICAgICAgfVxyXG4gICAgfSwgb3B0aW9ucyk7XHJcblxyXG4gICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5tb3VudFByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgdGhpcy5yZXNvbHZlTW91bnQgPSByZXNvbHZlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sb2FkZWRQcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIHRoaXMucmVzb2x2ZUxvYWQgPSByZXNvbHZlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTeW5jaHJvbm91c2x5IGdldHMgdGhlIEN5dG9zY2FwZSBpbnN0YW5jZS4gIFRoaXMgbWF5IHJldHVybiBgdW5kZWZpbmVkYCwgYXMgdGhlXHJcbiAgICogaW5zdGFuY2UgbWlnaHQgbm90IGJlIGluaXRpYWxpc2VkIHlldC5cclxuICAgKiBAcmV0dXJucyBUaGUgQ3l0b3NjYXBlIGluc3RhbmNlIChgY3lgKVxyXG4gICAqL1xyXG4gIGdldCgpe1xyXG4gICAgcmV0dXJuIHRoaXMuY3k7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBc3luY2hyb25vdXNseSBnZXRzIHRoZSBDeXRvc2NhcGUgaW5zdGFuY2UgYnkgcmVzb2x2aW5nIGEgcHJvbWlzZSB3aXRoIHRoZSBpbnN0YW5jZVxyXG4gICAqIChgY3lgKS4gIFVzaW5nIHRoaXMgZ3VhcmFudGVlcyB0aGF0IHlvdSB3b24ndCBnZXQgbnVsbCBleGNlcHRpb25zIG9uIGBjeWAuXHJcbiAgICovXHJcbiAgZ2V0UHJvbWlzZSgpe1xyXG4gICAgcmV0dXJuIHRoaXMubW91bnRQcm9taXNlO1xyXG4gIH1cclxuXHJcbiAgbG9hZFByb21pc2UoKXtcclxuICAgIHJldHVybiB0aGlzLmxvYWRlZFByb21pc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXNlIHRoZSBDeXRvc2NhcGUgaW5zdGFuY2UuXHJcbiAgICogQHBhcmFtIGNvbnRhaW5lciBUaGUgY29udGFpbmVyIGluIHdoaWNoIHRvIG1vdW50LiAgSWYgdW5zcGVjaWZpZWQsIEN5dG9zY2FwZSBpc1xyXG4gICAqIG1vdW50ZWQgaW4gYG9wdGlvbnMuY29udGFpbmVyYC5cclxuICAgKi9cclxuICBtb3VudChjb250YWluZXIpe1xyXG4gICAgaWYodGhpcy5tb3VudGVkKXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IG1vdW50IGFuIGFscmVhZHkgbW91bnRlZCBDeXRvc2NhcGVTZXJ2aWNlYCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcclxuXHJcbiAgICBsZXQgb3B0aW9ucyA9IGNvbnRhaW5lciA9PSBudWxsID8gdGhpcy5vcHRpb25zIDogT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLCB7IGNvbnRhaW5lciB9KTtcclxuICAgIGxldCBjeSA9IHRoaXMuY3kgPSBjeXRvc2NhcGUob3B0aW9ucyk7XHJcblxyXG4gICAgb3B0aW9ucy5vbk1vdW50KGN5KTtcclxuXHJcbiAgICB0aGlzLnJlc29sdmVNb3VudChjeSk7XHJcbiAgfVxyXG5cclxuICBsb2FkKCl7XHJcbiAgICBpZighdGhpcy5tb3VudGVkKXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW4gbm90IGluZGljYXRlIGxvYWRlZCBmb3IgYW4gdW5tb3VudGVkIEN5dG9zY2FwZVNlcnZpY2VgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZighdGhpcy5jeSl7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCBpbmRpY2F0ZSBsb2FkZWQgd2l0aCBubyBjeSByZWZgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc29sdmVMb2FkKHRoaXMuY3kpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVzdHJveSB0aGUgQ3l0b3NjYXBlIGluc3RhbmNlLCB1bm1vdW50aW5nIGl0IGFuZCBjbGVhbmluZyB1cCBhbnkgbGlzdGVuZXJzIGV0Yy5cclxuICAgKi9cclxuICBkZXN0cm95KCl7XHJcbiAgICBpZih0aGlzLmN5ID09IG51bGwpe1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgZGVzdHJveSBhIG5vbi1tb3VudGVkIEN5dG9zY2FwZVNlcnZpY2VgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN5LmRlc3Ryb3koKTtcclxuICB9XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gQ3l0b3NjYXBlU2VydmljZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jeS9pbmRleC5qcyIsImNvbnN0IFJlYWN0RG9tID0gcmVxdWlyZSgncmVhY3QtZG9tJyk7XHJcbmNvbnN0IGhoID0gcmVxdWlyZSgnaHlwZXJzY3JpcHQnKTtcclxuY29uc3QgdGlwcHkgPSByZXF1aXJlKCd0aXBweS5qcycpO1xyXG5jb25zdCBfID0gcmVxdWlyZSgnbG9kYXNoJyk7XHJcblxyXG5jbGFzcyBDeXRvc2NhcGVUb29sdGlwIHtcclxuICBjb25zdHJ1Y3Rvcih0aXBweVJlZiwgdGlwcHlPcHRzKSB7XHJcbiAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xyXG4gICAgdGhpcy5vcHRzID0gdGlwcHlPcHRzO1xyXG4gICAgdGhpcy50aXBweVJlZiA9IHRpcHB5UmVmO1xyXG5cclxuXHJcbiAgICB0aGlzLm9uQm9keUNsaWNrID0gKCBlICkgPT4ge1xyXG4gICAgICBsZXQgcGFyZW50ID0gZS50YXJnZXQ7XHJcbiAgICAgIGxldCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3knKTtcclxuICAgICAgbGV0IGhpZGUgPSB0cnVlO1xyXG5cclxuICAgICAgd2hpbGUoIHBhcmVudCAhPT0gZG9jdW1lbnQuYm9keSApe1xyXG4gICAgICAgIGlmKCBwYXJlbnQgPT09IHRoaXMuY29udGFpbmVyIHx8IHBhcmVudCA9PT0gdGFyZ2V0ICl7XHJcbiAgICAgICAgICBoaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiggaGlkZSApe1xyXG4gICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQm9keUNsaWNrKTtcclxuICB9XHJcblxyXG4gIGlzU21hbGxTY3JlZW4oKXtcclxuICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8PSA2MDA7XHJcbiAgfVxyXG5cclxuICByZWFjdFJlbmRlcihodG1sKXtcclxuICAgIGxldCBkaXYgPSBoaCgnZGl2Jyk7XHJcbiAgICBSZWFjdERvbS5yZW5kZXIoIGh0bWwsIGRpdiApO1xyXG5cclxuICAgIHRoaXMuY29udGFpbmVyID0gZGl2O1xyXG5cclxuICAgIHJldHVybiBkaXY7XHJcbiAgfVxyXG5cclxuICBzaG93KCkge1xyXG4gICAgbGV0IHsgdG9vbHRpcCwgdGlwcHlSZWYsIG9wdHMgfSA9IHRoaXM7XHJcbiAgICBsZXQgeyBodG1sIH0gPSBvcHRzO1xyXG5cclxuICAgIGxldCBpc1NtYWxsU2NyZWVuID0gdGhpcy5pc1NtYWxsU2NyZWVuKCk7XHJcblxyXG4gICAgaWYoIHRvb2x0aXAgIT0gbnVsbCApe1xyXG4gICAgICB0b29sdGlwLmRlc3Ryb3koKTtcclxuICAgICAgdG9vbHRpcCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGlzU21hbGxTY3JlZW4gKXtcclxuICAgICAgdGlwcHlSZWYgPSB7XHJcbiAgICAgICAgY2xpZW50V2lkdGg6IDEsXHJcbiAgICAgICAgY2xpZW50SGVpZ2h0OiAxLFxyXG4gICAgICAgIGZvY3VzOiAoKSA9PiB7fSwgLy8gVE9ETyBmaWxlIGJ1ZyB3aXRoIHRpcHB5IGV4cGVjdGluZyBmb2N1cyBtZXRob2Qgb24gcmVmIG9ialxyXG4gICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdDogKCkgPT4ge1xyXG4gICAgICAgICAgbGV0IHcgPSB3aW5kb3cuaW5uZXJXaWR0aDtcclxuICAgICAgICAgIGxldCBoID0gd2luZG93LmlubmVySGVpZ2h0O1xyXG5cclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRvcDogaCxcclxuICAgICAgICAgICAgYm90dG9tOiAwLFxyXG4gICAgICAgICAgICBsZWZ0OiB3IC8gMixcclxuICAgICAgICAgICAgcmlnaHQ6IHcgLyAyLFxyXG4gICAgICAgICAgICB3aWR0aDogMSxcclxuICAgICAgICAgICAgaGVpZ2h0OiAxXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdG9vbHRpcCA9IHRpcHB5KHRpcHB5UmVmLCBfLmFzc2lnbih7fSwge1xyXG4gICAgICB0aGVtZTogJ2xpZ2h0JyxcclxuICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXHJcbiAgICAgIHRyaWdnZXI6ICdtYW51YWwnLFxyXG4gICAgICBhbmltYXRpb246ICdmYWRlJyxcclxuICAgICAgYW5pbWF0ZUZpbGw6IGZhbHNlLFxyXG4gICAgICBkdXJhdGlvbjogWyAyNTAsIDAgXSxcclxuICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxyXG4gICAgICBhcnJvdzogIWlzU21hbGxTY3JlZW4sXHJcbiAgICAgIHBsYWNlbWVudDogaXNTbWFsbFNjcmVlbiA/ICd0b3AnIDogJ3JpZ2h0JyxcclxuICAgICAgZmxpcDogaXNTbWFsbFNjcmVlbiA/IGZhbHNlIDogdHJ1ZSxcclxuICAgICAgZGlzdGFuY2U6IDEwXHJcbiAgICAgIH0sXHJcbiAgICAgIG9wdHMsIHsgaHRtbDogdGhpcy5yZWFjdFJlbmRlcihodG1sKSB9XHJcbiAgICApKS50b29sdGlwc1swXTtcclxuXHJcbiAgICB0aGlzLnRvb2x0aXAgPSB0b29sdGlwO1xyXG4gICAgdG9vbHRpcC5zaG93KCk7XHJcbiAgfVxyXG5cclxuICBoaWRlKCkge1xyXG4gICAgaWYgKHRoaXMudG9vbHRpcCkge1xyXG4gICAgICB0aGlzLnRvb2x0aXAuaGlkZSgpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkJvZHlDbGljayk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEN5dG9zY2FwZVRvb2x0aXA7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NsaWVudC9jb21tb24vY3kvY3l0b3NjYXBlLXRvb2x0aXAuanMiLCJjb25zdCBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XHJcbmNvbnN0IGggPSByZXF1aXJlKCdyZWFjdC1oeXBlcnNjcmlwdCcpO1xyXG5jb25zdCBQb3BvdmVyID0gcmVxdWlyZSgnLi9wb3BvdmVyJyk7XHJcblxyXG5jb25zdCB7IEZBQ1RPSURfVVJMIH0gPSByZXF1aXJlKCcuLi8uLi8uLi9jb25maWcnKTtcclxuXHJcbmNsYXNzIENvbnRyaWJ1dGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gIGNvbnN0cnVjdG9yKCBwcm9wcyApe1xyXG4gICAgc3VwZXIoIHByb3BzICk7XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKXtcclxuICAgIGNvbnN0IHsgdGV4dCwgaW5mbyB9ID0gdGhpcy5wcm9wcztcclxuXHJcbiAgICByZXR1cm4gaCgnZGl2LmNvbnRyaWJ1dGUnLCB7fSwgW1xyXG4gICAgICBoKCdhLmNvbnRyaWJ1dGUtcG9wb3Zlci1saW5rJywge1xyXG4gICAgICAgIGhyZWY6IGAke0ZBQ1RPSURfVVJMfWAsXHJcbiAgICAgICAgdGFyZ2V0OiAnX2JsYW5rJ1xyXG4gICAgICB9LCB0ZXh0KSxcclxuICAgICAgaChQb3BvdmVyICwge1xyXG4gICAgICAgICAgdGlwcHk6IHtcclxuICAgICAgICAgICAgcG9zaXRpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgICBodG1sOiBoKCdkaXYuY29udHJpYnV0ZS1wb3BvdmVyJywgW2luZm9dIClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBbIGgoJ2kubWF0ZXJpYWwtaWNvbnMnLCAnaW5mbycpIF1cclxuICAgICAgKVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBTcGVjaWZpZXMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBwcm9wczpcclxuQ29udHJpYnV0ZS5kZWZhdWx0UHJvcHMgPSB7XHJcbiAgdGV4dDogJ0FkZCBteSBkYXRhJyxcclxuICBpbmZvOiBoKCdkaXYuY29udHJpYnV0ZS1wb3BvdmVyLWluZm8nLCB7XHJcbiAgfSwgW1xyXG4gICAgYEF1dGhvcnMgb2YgcHJpbWFyeSByZXNlYXJjaCBhcnRpY2xlcyB3aXRoIHBhdGh3YXkgYW5kIGludGVyYWN0aW9uIGluZm9ybWF0aW9uIChlLmcuIGJpbmRpbmcsIHRyYW5zY3JpcHRpb24pIGNhbiBjb250cmlidXRlIHRoZXNlIGZpbmRpbmdzIHRvIFBhdGh3YXkgQ29tbW9ucyB0aHJvdWdoIEJpb2ZhY3RvaWQuIExlYXJuIG1vcmUgYXQgYCxcclxuICAgIGgoJ2EucGxhaW4tbGluaycsIHtcclxuICAgICAgaHJlZjogYCR7RkFDVE9JRF9VUkx9YCxcclxuICAgICAgdGFyZ2V0OiAnX2JsYW5rJ1xyXG4gICAgfSwgJ2Jpb2ZhY3RvaWQub3JnJyksICcuJ1xyXG4gIF0pLFxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSB7IENvbnRyaWJ1dGUgfTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY2xpZW50L2NvbW1vbi9jb21wb25lbnRzL2NvbnRyaWJ1dGUuanMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/public/deps.css b/public/deps.css index 0d24d26f..ab251311 120000 --- a/public/deps.css +++ b/public/deps.css @@ -1 +1,824 @@ -../build/deps.css \ No newline at end of file +/* css entry point for dependencies bundle */ + +/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ + +/** + * 1. Change the default font family in all browsers (opinionated). + * 2. Correct the line height in all browsers. + * 3. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. + */ + +/* Document + ========================================================================== */ + +html { + font-family: sans-serif; /* 1 */ + line-height: 1.15; /* 2 */ + -ms-text-size-adjust: 100%; /* 3 */ + -webkit-text-size-adjust: 100%; /* 3 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers (opinionated). + */ + +body { + margin: 0; +} + +/** + * Add the correct display in IE 9-. + */ + +article, aside, footer, header, nav, section { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + * 1. Add the correct display in IE. + */ + +figcaption, figure, main { /* 1 */ + display: block; +} + +/** + * Add the correct margin in IE 8. + */ + +figure { + margin: 1em 40px; +} + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + -webkit-box-sizing: content-box; + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + */ + +a { + background-color: transparent; /* 1 */ + -webkit-text-decoration-skip: objects; /* 2 */ +} + +/** + * Remove the outline on focused links when they are also active or hovered + * in all browsers (opinionated). + */ + +a:active, a:hover { + outline-width: 0; +} + +/** + * 1. Remove the bottom border in Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; /* 2 */ +} + +/** + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. + */ + +b, strong { + font-weight: inherit; +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, kbd, samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font style in Android 4.3-. + */ + +dfn { + font-style: italic; +} + +/** + * Add the correct background and color in IE 9-. + */ + +mark { + background-color: #ff0; + color: #000; +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + */ + +audio, video { + display: inline-block; +} + +/** + * Add the correct display in iOS 4-7. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Remove the border on images inside links in IE 10-. + */ + +img { + border-style: none; +} + +/** + * Hide the overflow in IE. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari. + */ + +button, input, optgroup, select, textarea { + font-family: sans-serif; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, select { /* 1 */ + text-transform: none; +} + +/** + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. + */ + +button, html [type="button"], [type="reset"], [type="submit"] { + -webkit-appearance: button; /* 2 */ +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Change the border, margin, and padding in all browsers (opinionated). + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + -webkit-box-sizing: border-box; + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * 1. Add the correct display in IE 9-. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Remove the default vertical scrollbar in IE. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ + +[type="checkbox"], [type="radio"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in IE 9-. + * 1. Add the correct display in Edge, IE, and Firefox. + */ + +details, menu { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Scripting + ========================================================================== */ + +/** + * Add the correct display in IE 9-. + */ + +canvas { + display: inline-block; +} + +/** + * Add the correct display in IE. + */ + +template { + display: none; +} + +/* Hidden + ========================================================================== */ + +/** + * Add the correct display in IE 10-. + */ + +[hidden] { + display: none; +} + +:root { + /* Pathway commons colors */ + + /* Colours used by other modules */ +} + +/* Viewport scaling sizes */ + +/* +- WOFF3 disabled to save file size until browsers universally support it +*/ + +@font-face { + font-family: 'Material Icons'; + font-style: normal; + font-weight: 400; + src: + local('Material Icons'), + local('MaterialIcons-Regular'), + + url('data:application/font-woff;base64,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') format('woff'); +} + +.material-icons { + font: normal normal normal 24px/1 'Material Icons'; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + line-height: inherit; + vertical-align: bottom; + + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + + /* Support for Safari and Chrome. */ + text-rendering: optimizeLegibility; + + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + + /* Support for IE. */ + -webkit-font-feature-settings: 'liga'; + font-feature-settings: 'liga'; + + display: inline-block; +} + +input[type="radio"], input[type="checkbox"] { + position: absolute; + opacity: 0.00001; + pointer-events: none; +} + +input[type="radio"] + label:before, input[type="checkbox"] + label::before { + font: normal normal normal 24px/1 'Material Icons'; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + line-height: inherit; + vertical-align: bottom; + + /* Support for all WebKit browsers. */ + -webkit-font-smoothing: antialiased; + + /* Support for Safari and Chrome. */ + text-rendering: optimizeLegibility; + + /* Support for Firefox. */ + -moz-osx-font-smoothing: grayscale; + + /* Support for IE. */ + -webkit-font-feature-settings: 'liga'; + font-feature-settings: 'liga'; + + display: inline-block; + width: 1.28571429em; + text-align: center; + color: #d3d8da; + + cursor: pointer; +} + +input + label, input + label { + cursor: pointer; +} + +input[type="checkbox"] + label::before { + content: '\e835'; +} + +input[type="checkbox"]:checked + label::before { + content: '\e834'; + color: inherit; +} + +input[type="radio"] + label::before { + content: '\e836'; +} + +input[type="radio"]:checked + label::before { + content: '\e837'; + color: inherit; +} + +/* fonts */ + +/* @import "./vendor/fonts/roboto.css"; */ + +/* @import "./vendor/fonts/open-sans.css"; */ + +/* Generated by Font Squirrel (https://www.fontsquirrel.com) */ + +/* Disabled WOFF2 as there isn't universal browser support */ + +/* Only regular weight and bold weight enabled for now, since using light and semibold adds 200KB */ + +/* Light */ + +@font-face { + font-family: 'Open Sans'; + src: + /* url('./open-sans-latin-greek/opensans-lightitalic-webfont.woff2') format('woff2'), */ + /*url('./open-sans-latin-greek/opensans-lightitalic-webfont.woff') format('woff')*/ + ; + font-weight: 300; + font-style: italic; + +} + +@font-face { + font-family: 'Open Sans'; + src: + /* url('./open-sans-latin-greek/opensans-light-webfont.woff2') format('woff2'), */ + /*url('./open-sans-latin-greek/opensans-light-webfont.woff') format('woff')*/ + ; + font-weight: 300; + font-style: normal; + +} + +/* Regular */ + +@font-face { + font-family: 'Open Sans'; + src: + /* url('./open-sans-latin-greek/opensans-regular-webfont.woff2') format('woff2'), */ + url('data:application/font-woff;base64,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') format('woff'); + font-weight: 400; + font-style: normal; + +} + +@font-face { + font-family: 'Open Sans'; + src: + /* /* url('./open-sans-latin-greek/opensans-italic-webfont.woff2') format('woff2'), */ */ + url('data:application/font-woff;base64,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') format('woff'); + font-weight: 400; + font-style: italic; + +} + +/* Semi-bold */ + +@font-face { + font-family: 'Open Sans'; + src: + /* url('./open-sans-latin-greek/opensans-semibolditalic-webfont.woff2') format('woff2'), */ + /*url('./open-sans-latin-greek/opensans-semibolditalic-webfont.woff') format('woff')*/ + ; + font-weight: 600; + font-style: italic; + +} + +@font-face { + font-family: 'Open Sans'; + src: + /* url('./open-sans-latin-greek/opensans-semibold-webfont.woff2') format('woff2'), */ + /*url('./open-sans-latin-greek/opensans-semibold-webfont.woff') format('woff')*/ + ; + font-weight: 600; + font-style: normal; + +} + +/* Bold */ + +@font-face { + font-family: 'Open Sans'; + src: + /* url('./open-sans-latin-greek/opensans-bolditalic-webfont.woff2') format('woff2'), */ + url('data:application/font-woff;base64,d09GRgABAAAAAJFwABMAAAAA8jgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAACRTAAAABwAAAAcc4Lq90dERUYAAIDYAAAAHgAAAB4AJwJdR1BPUwAAgZgAAA+zAAAfiPJawftHU1VCAACA+AAAAJ4AAADgDPf5Jk9TLzIAAAIkAAAAXgAAAGCiYpOZY21hcAAABtwAAALcAAAD/p2IvZljdnQgAAAPYAAAAGYAAACwE6seemZwZ20AAAm4AAAEtAAAB+C7c6R1Z2FzcAAAgNAAAAAIAAAACAAAABBnbHlmAAAUPAAAYPMAAJ1cj+ecX2hlYWQAAAGoAAAANgAAADYD7rbdaGhlYQAAAeAAAAAjAAAAJA3/CANobXR4AAAChAAABFYAAAlOWQBuQ2xvY2EAAA/IAAAEdAAABLAh8EsMbWF4cAAAAgQAAAAgAAAAIAPZASVuYW1lAAB1MAAAAvsAAAZ+Xthr1HBvc3QAAHgsAAAIogAAD/njllY3cHJlcAAADmwAAAD0AAABAeKvEwV3ZWJmAACRaAAAAAYAAAAGWJ9Z1QABAAAAARmaL3Iy+l8PPPUAHwgAAAAAAMljSR4AAAAA1fsJHvvl/agJdQhiAAMACAACAAAAAAAAeNpjYGRg4Oj9u4KBgXPf76d/X3KWMqQwiDIgAaYAAL0MCBIAAAEAAAJXAE8ABwBOAAQAAgAQAC8AXAAAAQcAVgADAAF42mNgZuli2sPAysDCOovVmIGBUR5CM19kSGNiYGBg4uZgY2ZlYWJiecDA9N6BQSEaKKgBxAyGjsHODIoMvL9Z2OT/iTC0cPQyRSgwMM4HybHEsW4DUgoMzACUYA4lAAB42q1WUUhcRxQ9b968t1YkX0IqoZSGPkRsKUW2qYhZCCFdJPgVlhBEtkFEFkTKIiKLBAmSD5F8+BMklbYsyyJWShFZQlgQP4KEUPohIkUkSMhPEBtKCGbd6bnzds12cTEf3eVwZubNvJm595x5o17hKvjTrYAS9KHN/QmbXic69Ai6/B2kvSVcVc3YVGvoU2tmVA9gmc9GVbdZUPPoUHGOGTQ5tl0h1vSI+YN8jvySfIG4SfQTl4iE9FdxsyDvqMJdRo5zDXi+mdFvENUvkPFS5AQRQ9SbYX0BUc4XVblyUb9ke4BopBlRn/C2kdHZCu/xWS/XH0Peu4c5XUAh0o6C3jGz+i4e6T6zoXLmL3cQu+QJ3Y1Wt8tc02NOSa/jlt5A4O6SpTyOW6pkAn3DzOktBCopKL/Vs2E50otA2vWKjDOPZQzfG7ibOO/GMchnY7oNw34/pnTMPNTtJu1mzZ9q27zVI84T8kMbSxt7w9ghy7j9Q06HcXOeuPto5drm/DymXI0H+g7idgxjL20a5sgdlXGMYxN6iAH239fPzWOvF/OM910na75m+7R6jV84HpEWfF/BjLvMfoz7aYh0MB/Mhc1DDWweasBcBdU81IPrmiYPSS5qYXMhObtWDuN+CvwjxnM3zEMtwjxYfC6sFxmTah7qIRpbQafNRS2YC5szstUd56tn2budvwFbja5bDmx/ic/42Sx6Fk01ZGpd9lNlG+fkaWwKKmlWq3Wv264nEI9Qp0fWJ9SqRRD2Cdn8WFt3J8nt1OAiIHmUOevZS8M5KUteGdt6jkSRiZzjPulB8UHI5ueTOn0p3mjIMczRNwnxrvVPDDnyp1YvzNmHsvjdek40Jnmu+F68V89q1zTTc8/9L6nXgJrroj5/Q0riZ3Wwxn3RB6JF0bHV0vv13uH6vrWxHnMuEZM67kyTV1TSuaIXVauTMzdY7yHOqyWzABxngdJtPaaibEtYrzXjIue/6Abkflz2HpGHcFkd4ruTM9Ents1TqyGuXbThHSIjubd5fka/Vs5D3Wm2rP/us0yP6ZtmS2IqcfDvMVc8C8m/e095Fsp4ic8O83YB7VZvh0jqA0zYtjemyDOsR6/y/OZzd5VtodeGbD/R1rzJynmjhzHM5wNWEwXmb8MUbf/X9HGZdb7T/4T1VLnkT7B8n16uziVePQjbvFmM6wWe29MYrHpR9ibnbTW39dzIw/8Xf6i3G3GNZ/+m//YaeegsPtHpGVzviaquz+L/eOY05n2hSe4MFVZLBNlJsG2S5TjLVDmewf7sHaECdxsdkZUQ/OZ+4RSQJlJylyDvuRNIEyn3iPeDFhT1Z+hR+xjxl9Dm/Ap8VERa7iJyR1EPECegp/gMx6/UxwC/cV/xvId8Q3mf6GbevmG9wytzXzlcF/94B1j3WhjLIdz28vz+XZf+7+8iFkv4QScBL24CQRNCaDgH3HeGvEUP59+9KOVL+WMt/1L5X6Fkh64AAHjavdNrTNZVHMDx7/n9CUQjNS4S6N/DXx4EFUEslIugiIpiZomiUmmGc1q0TOdtamaAZmCmpq2sgVjkpcBpV62VL2z5wi3XhQzH83+e986NaEt4nr9n4HpTm+8827m9OOdzzvn9DmAxUEeiTIv6y8xU/zxCdZj+FabzADnEsFO9qg6qZtWubilPkmWK/Cg/yQ3ptqKtMVa9tc9qsJqtq9Y16zdb2cV2nf2PHqLjta0dnaaz9WSdrwt1qV6hN+oTulWfSXEccSKdoc5wJ8mxnfFOmbPSWe274uvrjfA8Y8egaTJmk2oz5m1JNOZlY3bcNWutvcbcb7VYPxsTu8jeZTdp9DA9QmtjZukcnfev2WLM0/9rVvebyvO8Hi/oXfLavRbviFfpLfByveRwY7ghvDO8NlwRLgj9Gboe+iPUEfo99GvoWvBksCaYGYwNxASiA4MCUYEIt8/tdf92e9yb7i/u9+5B94Db6Cb68/y5/on+TL/P7/gTum53Bbv8nds7y6PmDLz5fS6RMrg/0vxHV8jdkdxjj4GVFhEmNyKJYhDRDGYID5qYPcRQhjGch4kljngSGEEij5BEssmqUdiMNnFNwWEMqfhIYyzpZDCO8Uwgk4lkkc0kk3OTeZTHyGUKU8kjnwIKmUYRxSYnZ1DCTEqZxWzmUMZc5lHOfB5nAU+wkCd5ikVUsJglVLKUZSyniqd5hmdZwUqeM+evZw9v8CaHeJcPaeE4J/iYj2jlJKc5xRk+pY3PaOcs5/ic83zBV3zJRS7wLd/JWPM7qlnNWslgC828zAuSzybWyUz28p5MZ4OUyizWsFkKpEimqaMygxfZrnbxCd/wGs/zkhSrEimRQmrYIeNYxW7qOKriVLyMlFGSKj7RksLXMpsfVL7kSJ5kSbaUyVxJZ6s4kiYTqKWB12lkH29xgLfZzzscMTc8zDE+4H261SK1nPVqiapUS9mmqtQyVXEHAsvaw3jajVXPTxtHFJ5ZDBgwZJ2mEeoeMtuJXRB2SZW0BUphansdu25ajEGaJT3sgkGmp5xyiFrJPRUN9H95m1xMTrn20P8hh/ZWjsk1fW/WJiRSpa7Wu/O+93Pe+3as7j/cC/XuTme7vfXD9w++a33bbNyvB7Vq5Ru1ufH1+ldrqytffvH5Z3eWPy2XFj4pFm7Lj/1b8zfy7rW52ZnpqezkxHhmzOGsJIBHAYwVRL4ey0DGjXJJBPO9WrkUyHoEIhaAr0xRNhoWkjGISEARX/EVOAKFlkfvWarUUl1acless3VKIQX8WZNiwPfaGte/12Qo4MKuH9h1pmiFWRR8Hz1sVVStCKD+uGeCCGvkycx0VVYPp8sllkzP4HIGV7AgHyV8YYPbhbMQrCUOy85SWtxpEHdhq62Dmuf7YbnUhDlZsypWtSFhogqTNqQ4ptLZqUhKL8zZwGX70VKuK7vxjxrGYvQ1Y4Exv0F+CRZlDRaf/DWPOz+EkqwFsERRW9uXeVpvU3IYL7hSmFcMtyMv/nkXiYfIRMF9xWgJThX4tvbp8urYa2PqUtRNZOLBm/6+FK40SS5nHgXYbralMcTgzfNTD+pnIbhRj6+Fw63Xt1vwQfuhBqdQF70YEbw3pb/i+flLm63/UjNsCzYHO+z71IbTgWL7KEC/rVNZsH3vKVPLSyE4EWlejDQf7pKmP9JcukcSZ9vqaAOZQrMrA+z4aQz9fWTXTzQY6cLca8+X5nperC6H1lZgVc3usYDxIjYJva46IG/IxbhWmHudvi48TFDMXxerEsNQnEAG0fB+3JvHAAIb3VhKibCjQdVwoeLhxILkzjJ6xBEO7LhmhwnL8hHckJXL6VJZwXFHW5ehG9yoAosOhl6wHNjvSgSGmPZ/R9nHUf56FvbWMI1s63N2983L5J7wnt1l91hYo8A3q8jIYmB09whuRV4Xv9EjoT0fVIghQqkPQ6IodnPxpWeJFFpe7ehWR7bae3plWHSqoHCZQvBeGKm9NAySFbKFrNCONxaioYuAqONCVtbxCZOFLP5cHI5FieSVdaG5x0bWWAYsiuCwNrQj+Z2g40S9amMUbYJEjFNteH7op1e55KBaDBOjR5YG0Bip8EhDRRa5XG1YiPo+T10VWh7KUPYEqC1Ne6P22IkMm2HnM5zrzjvSlWZhm5iP6pFAzYT6kne1uXDfypdi4z11c6QWJitbHUPB5TAgw8qbwIjuaiXv2XODGCPxnBYucsYyxiRKEVuIHMLIZtfIjl631nj2/OI9oVzXWYu3dirlEh6DlUTyk3ai+ElnT5+7jImTHf3U4U41qoTJbdTpc8GYsqhDKIEkCBIo0jYKWWvvnSvG+labsYCVDwacWSw7wjg7GDgp5qaJijaRYg5qMqlGjawziGVTrG8xeyWMWqamx1VWTamcM+t4CSfoKSLPOWNTnD3L8VnuJei1beEB7ydTykst+mih0gpPdt+m3t3Tz3IM3ewTE1XoQrrM93DY+BcUiC4R5eewZ6KQPjZ2E0eDNwcuN3BMcgMLmcjBtDyswIysEL5J+GaKTxA+iRTlNzm693H2W8CJAQ+1j5+k+OgPz7gXNKkQDyDj/l3+FyMjMr942nOYxKnooRCqwMgcKu/BHCrH/F8+wEdM3t83Rd7PJ0VezUQgVNVYJVRS+L88O8t/eTagvK+PnHyKD6OPG6+8sLFQKCtQK4sxUDszIz+zPfN6ZmY2b7fTbrfdmJWNlUL9lRhljKVDxYxFQwUZ+UMFjPlD1/Of52cy4GdkYmQIZTRmCM1nqGdYz/CegUWAgbFBjJGVcQfjhI0hwdra3jvY/wd5b+AMiN7A2LFBNRhEOgRGbWDr2MAQGhUdsZGRsS+ytbeXwUnWe4NRcMQGBdlI7w0pQIaA7EYxBqfI4mJtbRAGktrFccUlIBaYgAOJOACRSEF4eNpjE2EQZ/Bj3QYkS1m3sZ5lQAEscQyiDNUMDP/fgHgI8p8IiATqEv0z5f/rf/n/n//b//8lg8y/PQxkAQ4I9ZThGyMDozbDZYbjjExANhAzvGW4z7CJgYEx5F8YgwurIAAzZCQ5AAB42nXLb0gaCwAAcGfOzJyZleX577zzTr27eXr+yfT+n5nZFTJiRERIhMSIiIgYERERI2TE8MMYESMixogRETJiPGKERESMiIgY4yFDRowYY0SMeMjbh/f18fv8UygUxH+GFLOK03v0vbdKg9KlTCpzyhXlB+WZslKjqDHVZGqmarZVKhWvWlJdqm7up++v3z9TK9SgWlSPqou1kdontXu1vzQezaBmQXOkuanT1PnqsnVzdcW6italHdBuaMv1nvpU/Wz9Rv13nUlH68Z0S7pXuqLuVFfRVR8kHrx4cKhv1o/otxrAhsGGxYa9hu8NVUOfYdHwoVHV+KhxrvGgsWoMGQeN68aTJmUT0TTTtNx01vwnNbPNz5o/tbhaxluWWyomvSlvKrVqWj2t/tat1sPWahvWlm3baiuZVWbCHDGPmJfMO+bfgB5wATEgD6wB28BH4AyoALeWpOWRZdQyY1m2rFreWfYtp5avVsLKWjPWEeu09Zn1lfXA1mbDbLStz5a1Tdm27CY7ao/Yk/bH9jH7rEPtMDogB+UQHf2OnOOpI+9YAxWgAQRBP8iDGXAEfAveObVOwIk5aafsXHW+c+47PznLzp/OfyANBEAYREMyNAxNQotQAdqEdqA9GIJDcAJ+DOfgp3AefglvwEW4BF/A3+DfLo0LcBGuqCvlGnSNu4qIBgEQAmGRDDKCTCMLyHPkNbKL7CPHyBfkB3KHqtEQmkQH0FF0El1EV9BV9A166Va5TW7UTblZd8addY+7t903HrXH5PF4op60Z8jzwRvxprwD3lHvpHfRW/BueoveQ++lt+L9iSkxI2bHMIzGUtgcdox9wa6xKq7HQdyPi3g/nsOf4kv4C3wDL+KH+AV+hd8RWsJK+AieyBBLxMlD8OHEw6JP7WvzzZNa0kr6SJ7MkEPkGDlNLpCb5BF5TVb9Lj/rn/AX/Ef+XwEwkAqMBGYD7wPHgXLgltJRIBWhZCpLjVGTVJ4qUKvUBrVFVYPqoD7oD0aDfHAmOB98HXwTvAyWg1chMZQOFUJ/h36GlWFjGApT4UT4cbgYMUT4SCHytd3fnmvfbf/c/jVKRWPRbLQUPenQdmQ6XnZcxLSxWCwfu4xb4+Px+fiL+Hp8J35AR+kJ+oS+pCv0LaNhAAZjaKaPyTJTzDyTZ9aYbeYjc8ZUmFtWwwIswbJsPzvGzrLP2dfsDnvAnrPf2N+cnoM4HxfjZG6Ym+QWuAK3yb3njrjP3DVX5Q08ysd4mR/mn/Az/CK/wq/zu3yJv+Cv+DtBJ9gFvyAKA8K4MC+sCOvCjnAgnAvfhFtRKepFQETFqJgWh8RxcV5cEdfFXbEknotl8VqsSgbJKnmkmCRLw9LE/5qT8tIraUv6SypJ3xPKBJCgEnJiKrGaOEjcdCY7c50znTNJbdKYBJJ0ciw5ncz/sd+l6Mp1nXeVU4nUcuq0W9Ft7U5257pL3T/S/elCej991dPcA/X4emI9x3JaHpUX5DX5rFfTK/du95b7DH2P+rb/BX8aeDJ42ox9CVyUVdf4vc82K7PDsMgyDDAiAsIwjLjAiMgmICIig6hoZoYpGq4ZqZm7Zu6mZaZmZmZKhlpmmVvmQr5m5memVra8r1lZ+Zoyl/+993lmGLC+7/9TZJznzrn3nnv2e84ZwIAcAJjR/GDAAhlI2gtBcq9GGVfxc+pegf+qVyPL4JdgL0ve5snbjTJhSEuvRkjet+st+liL3pLDRKEYuB6N5QfffzOHOwswSBDSepNZwDdhuFoQ7TJoYSRkFCyEAQwbICt3BwSBrAQQnGXISB4xfFhKN2g1WmBauj01KNAkWKPj4ILfXoblnpXjRuaUTXAXlMGb7Pn7H1Q9UdRvyBP9CfxT7Hb2PQpfBgL2CYyMZUGW/WwqBsViWPiHiV1/LI/Zue5kId/k+ZXRkR9A1xYPAO/Anw0DkaCnK0LOqVSdoCYSaLUhgYZuBpeB0Rg0BqXZyApKA4aaZTdkZCQnD9Pb7XY9/Ut+8Ewyi4zMZCU/TosT/xjtrJ38yHi708qp+0HGiC5N/mrKx/WXJt02wMDcFgO0TLs85eTkS5N/MXiE4/2OsSU/nkNjCf7g+nM/nofr0OPk5/yPPwK8O3vrIq5GMIEIEAsSQF9XbEKYOpYTAuNCA0MHuA2BkSpBVermXTpTPi+wQiD+09UEQBZdsd6uO5uQoAd4ufRfgzkDr9okaKHVGWfTB5mNSdCRlp4F7bIgsyzOxkYwMBO/g19pYKDJzCkf3LEt7Xp+5YlzeVtfQtesSyzb59Q+NyFr7uxslJ9VkmI1ZPYrhb8euKQ/eUpdCJXjlDC7976n37qoXbcuKOfHPgp00T5yDvIo8jOTemqY3rKcXgOi8BnwoL71trCcPw0UwIzPwQYcINEV3KmbHdrtYXyWBmo0oWFCaDAIlEV3DaFnkEWIZZhdT/7Bu4hmAk32VIMjzWxiCMU40gyEfGKhFRqjyertqWQr7Z8yQtaI7n2G3514+Kkly+vem7loDXP1wfFfOVeGLT/JGZ+f/OcTh2a8sKL28NOL1nD3UeuaGii8UDN+O7q+8vUX34DhL2xech+TU0vLxGMjR044ObJm9OvoyuqXX9gLratfBuS8clpv8Wv5s3hPMaAbcLrCmTAuJjA6OLaT0sRxwVpo0CYUu7UcF13k5owiE4iMoDdn6PGp4b8p3eKhTVx1upP8Q9hCxxszodPCyCDZXJA91cnSo7JGC/i/fCLakv/2d+evvXy06D8n3/gYrTrataAL7Dpvr+eDytyhefW1YycN7tU5uyB41NSj+1c0j3x29tEbrz2PflyJ/sqYMx6dPABL7eNK+lT0ZCb1HNsrwz6sIKkaAEj4jImlfKZoZAiPnRU5jHKXyFiAjCtEh9h8PE4FlO+wrNIGsrJSuhl1mNqVUK8zWpnCPyELhdY/p/x7DQyBg5gsqEL/9uxFH6Az6BuoxDBax6NDTC2GocQw5CwnwoA6hrUAvY61G5jae63oPvx98k9r2Cq00/Mh+ouxMAugHUaie3gNu5hsboEQCzR4rYIGSGuNlcUaZSpoS4RO3shOmQTnGtDuzXerjjdDI3qvApZZ+DvolXCUgPYUwIHo39vuVf+8G07C8MaDe1wstwfvKdYVrFIAgdOykWwWyyazr7AfstfYX1gei8Zhk7BASCWSx+Kw6LFUDLTorfAKWgknXIF1aMUVZvQVOAktv4JWE/kDWzege3AOuA0EoGzkZgOQHIoXGmsWZNZ0I5whn/rCjcLpt82t11+HAyhu4+EOppbZgs9Avhf/NxmTv9FpkcU7GLUD7rh/n4zB8hbOhBl4rep3FWy5W0EEbEo3p59MDfEK03qfHIWt2zHR3qXnS86NMVCcK6AFsndbLqHLbDzfRCieys3s1ltcBaZtFQgBZpdaqR7gVspY4wA3GyIRMjkuYMGEqzPE2KP4aIGhpJqO2TSOq0Bvo89OnN0Boz6Ay1FF6ZIaZ+7AJcN6s3+gLp5zf/wO4+H13+5/hibvrJ/yOZz/Yd0YvC88M3uT0oSuiZNBhQCDAZEElEmM6U4NlNmgndmDmvdZ4xWP/2sek/4X23v9AnnJ3EuwWsR3MwBcIZY1oSDCpWVgiE5R4tbJYEiJmwCjC9cbAIXohF6mktkyIUUdnoEPtLArWjIT4NV9i8r6ZS8Zs/K5X589/HXZ1oPod6b7RbjjlQ/L+w/oO/j0xBHHXh136NC6rwk9Aw3GVymeF0s3VyfWHBxsHuhWB8MANjhYZYmNHOCOlan0A9yqEL9FBBN9KC0HS2pZYATmdoGzRtv0EXg96Y40i9VJf+NFSmvkSj94fe6C1ejWB7+sLj82bNNOhBYnFbz+UUXJ/BdnPX158eEvuYaXPg/nQl+dMe9fUwZAVap91qRdV5+e0Ldw9JmBfd7FZ9v6A8ZRKcWzEVO7QcfKIG/kS92CwmhkZQIrYj3ZLikSsjorazFanNDC2i1OLJqsggxy3M4sdCXL09iNZaDz6E6U0kPdXSNYR6KTMBmdh8n/Zl9uefxej8+tWVPRUoKjMIyjsXjeTiDOZQLGUjcAMrM5tMSN2SFggFvWHjeEwCg5Y4QQBdaGCKzyLWw6U7f/8+Xo9pEpp3vvbtywu378mLqxzczvTmSuzGc3nDvw+v0FSVYY8MjzM4cPt5QwV9F9dEVLabsSr2MOpu0QEIc1kTnArNNFlbp1OjPPKwe4eZkZa1tzh8WIp2RMC4Ux9lSsPwnV2EV+o0qHl1ZHBXblUxdh1+aGUfbycR//ks3VH3v5zed/2fT5l/C9Rxr69us1PrsUXvwUzoVhL4TdDfny5+0f73kDXXseyQ49nzc4b/rooWMpLYMSfE5HML4EoN8PglmmxM0K4qpSsPLEByKDJcwNz5LubHO8R8c1Qu7jB2rM3U68vzF4f2ZgBYkgyqULjg8AIGagG8gCIga6A/y3Rg43ldKdjNI/0US6WKyIMqFRUj5kY0aieczkFXN+5sGRr669POs/L33xJ6x+bfJX8slPjh48bHxBp6KqmQcH8GfL14+afzJt2fWnjtR+shN2mf3c69PeH9vSlPj00IEjxg0umMK8MqzguX75a3JK8FlU4LXm0LOwec/CQs6CM9NTkHGKAW7ub88CKwvKKkFE+WOKbNP8fLS0csrfXM4J1HR79sS6yTPequ/C1R3Y+s7Ku1tPX0B9+jzq7J/T67HeeexP6Eck/CcKi99R7+zY1Ny0HZoX3WXKXxg4xF0wa0R5LfDZuSlcPZaJZiITWUW5m9UFasvdgUE+mWj0E8Ks3+vmuuE5A8dX5Q9q8kpmdlf1uOJ+FU8UeFRtti7RF3QOARhAoEvBzuaVunK3UkcnSA49h5UH1R0Wf+BwDtUjMHynd5ZLVKMwh6UpRHoaD05zsTzAsAP3cyymJQbyoHcy0WjYasSQoQMGKiAX25LPHvA0MHNPw6bl8Ndf0VH0A9n/eLgF60hA7fAwlw5ALpKHyfws/hr/C8/xVDuewLrR6LAEQvwznj1AILG2y5fRzCtXOqwh1KUEggCxocFzUFyGnv7BABRkJXA8M9fTQGDA97AZ0ftXpFuOCvE6trfeZG9TGR8HYlxGLTbtsb+BKVyh5WIiyt0x0nHYfR4HkVmEGKisT/eKeg02sPyxyGmM46c+3Xde6qQV1d9f2nsu44mFrj6dDWjzhBE5AydUFmLPpOSx1QPLKxzTonKuNrz98qB5k4Ym9OpXiJ4fOo6cYJFIJ9WtucJxzLfdsceV6gqRqzIMv+hgqItzqX5VQYPKoOpsSWc7J2Ht7udu6O34XypsRYlis4rcSGnazLaZuVjKcFjXAsyZzkA8MoYhKtgSBXx0b3TGCcdnf7uscpJOSH2mfNbzC35dffD5WpWuR/bkfv+9dRod3A/Vd6acnfb9fy6jwzt/gx9AI1aGtZ6IslkFKYnL8jNi2Py30Jfbi3OLc19Zuwqy65youmufqJzZX4y7eOMQ2vHV7+jnzknvVb0Ju5+GZrjvv+jg3cfedPcphBqiD5nWeVh2LeEPYUrBx+PSqllOC4vcWi0nYw0cNi3p4Xg5GctzIs5UMK43FLB3V4hsu9BHDIJTVqFLtlBl1z6HYDXaxh+6n8PUwOFzn4qZPh/Noja4A8/zLca1FvNkJNG9QqROF1nsVuuw7tXpNFqtGU/LaoKL3BrDP+leSgGi+uXiITRSmZcAWe9v081/b39x9DR0Dt3x3IWO/WtmzNi5/tN9U+btf41v2rpl7dEoIXTZhJv3sI38wcihi1ryJz+2BdP6TOwfOKlsw9LCCIrcRk4tK3KrjW0WlNdqcurxQWLLF5tSqdg9S4LsoucuzF60duVHJ08h9P1nsPqbho/rptYu5k5vQcfffX1LMWophgnQAAV48GZir/s940Taw/jgEzA+FFi341kFQ5FbYHljkZs3+NltWHJijEcBKJpreIt8wjG0rAX1xoy3FHsdtpYrq796esXC+k/ZZVg2PvIl34S+aRm7HtoOb3i1JV+UJwT3L1E/IMkVIijwzgSMdMLTDF/kZlioLHLDh5FObC9IvGn6w45paYYONjUdgb7wqhNZSxmAJ0MfIrRAmmM93U+4S0vmEAQGGkT4vrBCO5BwDCIAk9IRNwBe7o5sBNoCj3Qe4/F5hFP7I7wI2x+8Wo0xpOb4EIwh40P2hwWznTVKOhdyLFbfgRktzB3GvmX+zdnIg77/Aj6H/uej+sLVQ178bdGKtUXDs9GfrMMjJFlgHOYtNdz7n0cedO62HZ3du+vVYJjgxR+/jeIvwqWTs0XuIjmUy3mlwELeG4tIFvFlpCxCjDCuDp2bj+Lnk03C1Bnw0gyYwkzzLMK0d5Tp7YXLbJLsfMgC0c7HBgP+QHeYgj4hZj4ehw6jMqYRjwvA9gWWnxin2GCQ7As22uYguh/bfJgcFgwfVln0yMxOMBZ//nzaf1FZmMc0Yy4/+v6kP6+324saWF06NcOwKpXA4s349oKdXiLdyS+yIVZGN0TAc1PQ7gsN48UNrd8EX4SPe3Yzpbke7Kt4ss/C3zw5PnpjCb3xeL14XxhhwOBnD2FwDgKiFbNBOt/0oLAV+D4nM+HPGUGIS62SG1kd1LNKTkfWRZBMIiXEDbJgH8OKoVgFhgokNpexwdfRafTjCkca7zmJfujNqdI3o5/xLKtz4CSu3/1CZt9/P36wihtfib7xKPCk74vzCWQ+HdXgKrlWwUK5L7hEadUqEygCoD3dgM/0GtqJXhK4qOgVFPijsJxTp78IDVxZ1Jc7PdhWf3C6CIYyzSKPEzpej+k4AIQRHldpitwqjgv0CzJIPC5RbhSIbeed8etPoB3XWwG6cQJWfwdaYbDnsxmf1s+bMePkxGfZnegm6vMdtGHJooAf3EbXI/ajj95ftXY3zDzx/EZJxnDb8f5kGP2YK9VYsqnVWo1BKyOi1p8roSRBeROwWMl+U4MYZffntx4tZFzoLfRFhXjqZXfuscLiyft2/YZ+9mApelHaJxb5ZJ86EAEsLh0v0+ixFOdYmQxLcxnZK/ZPaEhFd4LuWEaCgf+46T8/R+jFxtB/3vcxZBmFpsH8/2vvu/De5SAISxGjUaEGimIsSNSBKoNajhHBttkeXvUimtAJUAUpBoiuwVTGGErmrhwxpnDRNIqDx36+vf0lyKN9zWzik1PKyjwzPM1805njm751elYxKTQ2QH3y05hJsU2vimCDgsKK3EEci6dljR1sepPXNsZTJ0Ebif0R/1H0XDBWzBGQbURfeq4uOPLaxGfCUh9ZPPHpm2su7xv/0nODarPrZ0yHe87/XgUNTwwuTOjTvfCRjyfOOT3pkZ8Kqwp7D+1feoTy1Q6Mi/OUDoJcSmiQsRxmSaLcxXMR5RaRXExP1IzQZid7x4le4fZBBiHy+WWYjjfgz5uAyaUwKVlO10bCJOzHMjS+kIZlLSsQ6yfdaeQ3nMrAggt9/rv2GEz5WP/BzBeiPuabWkrQXXTn24/zs9mNLY8X2htfXM+uIXMcwHJpEpVxuqYAAUsdwSAaHxg+FW5EqAYFCjLGXBIF98BeHhNqnAVtdo7hYMLVTHYiDQK+kFj5WLIET/YDhhdBZIkywshyZi3PhnIie4uyBNLztRjxOdux4YkliQn7iuJktjQnezupHzqEdifCSEEuCEFVWjgJagIVQkIlLIQOzwy0PYjh2PsrX/Sk4Km/SbvjcP0Uztpb1q18Zs5XbCcsdM4vqcwV4x1L8P5mUB0S7FLLVTzDcQosc6X10OVgYUtiPBYjkbWj0bu70GS0k3Hdhq4X4ThY6bnGRHpuMC3Me577jOBJEGXmexhuFqVzs0uJXQXAQxnLS7ijEXGFCBSfbj2cCis8a6eh89Nuwe7sGKa0ZYbnPJPMLhDXeBTTyR6qw2NcBhnH8xxWtiwjh1AuGQhU4/pHZqhza2HXtyTEsQrPDQe7I77lDlN+iv0Zgk9bTCLcK+gQm0LpT/Muz7ACtNFNE72NjQErtMN9yAYb4OXES+jqJXRIuH/h/i68t6uYkY90jIMRFQtvXEd/XpaiYLB1GjrEnJbgY9oGMi98mR1anXiO6ovQeikRXkZzUfwkvvzCXwLFnYmRczb+MPZxAvbxgCOGytlUEj3AK7Ky2LwftwoGXtuNJjBytqmlkJnhWUD3k4vn29Caj9el3scACCEQw98Wp4WZ2XI6gk1Hh5bi91u4y+x2wYLPRtkozIZiTBFaMZs7LEFmdvuBvAUx0BkzgLvc741+gaup3KrCsmMT9isNAAtGl1Gl16q1stA8t0wHjHluEKQNxFhoC1Dj1fI+f9psd9pZK3axbV7/g/oZcO2qN17499KRy2zyjB9v39Rw8/v2m11SnJUzs6Cv6eJHJ+Bjx8tLlz/YsuK13+ffXJE37IVbkysryVpiSRxIwFwPLCDBFaTUK/UyzKDqQBCIl6KTdcLLCmoLl2fpqY8k2enEN7JZZURPU/aS+Tv7bOLKNxbefuHjMnmPHzAvJWbGJ8hL5iTmPF1a2KfvU/25+i8PH0Yvf7Z1uWBC15umjMr/49kfFpTWLP5tyh58bhhH7B2MI2qvywIockwEOT6tKuLEZwt6AyTYDYP3T11aAzVvNa2sTh+bPXhR8dCBRc/2W2+6dOxzOPSD/Jvm6NnXZteMTLbeHQC853Ef4yAIS3Oby6QyAZkWyCLonGYyp8H/QPQPnwiWhRZMhdhJdPqfCjmU5f9eVjbNIWcEYxFMRE34ZPI2WrIbivr3wUdj+uLIMfjoycKqThMGwzF/3VoxpOT3Rd/NLa3Bx7MH+NaWjfEgx+eDLXvW3B+rdagWWFah04FCt06n6JQrRp07WvaQhMWIzoFeTOEj4yxWmQ9RzIHKl4ITN76Ffv/Xj6/B0Ma9J1Aj+tTOPFYz5PlHd7EbNtePHDSipeybc81w8Dtbn3//dKBp6ONx3b6tEHk+FpnYK0Iklr9dXEFqZacQHaYZHQjBCwrRAh5jLqyNcrza0GfMGq1ZTJsa1EK7zMoyiWNze6f3rjae2Rqx3xB/dM/csaX9XBm5avWVlK8uFSNTyJ3A0ir2+Iry8sNvp1yPLO2TebNFg5aR9bCty5CJ24Jx1RmkgUyQ5uok69HfLZN11oTFxzn6u+N0nZlCd2dtYFJ/d6D/ykBwst0uGUlaKEYgbEQxR0LqhlraboSc9OIOLxqKMQBiTNhoQI6+5rZYd+vufNazc3mvnou2rkGfoK8/+2nRykL3mD6ZD74cNAhV1I7/eN2GPo8vKB7xWP9hXPX2+LTso98qw+zREXJD4KzpF66ve27Mqm7JFXmPJac8U3XyJ/ODTZqK7PqqMlsXDfvJi/XTXpwyhci1WCzHx2OaDQGdXBqdymQS8twmnRpAVSARjG3y25guhlqIxaeBhEspHcjY8+jCIt0T1WsTRqELhD9tXfrIM9ePXrzOzCzLsc/87gxKEUzvfvx58bDXNxaMo7IC/7MMz6kEGmDEmkhR4GZBgFZNuIPauW0BHGJrwOwRQwqKKqvX6dCFn2EiP3qIO7NH6SMPzNxwStvoHjIxmPuxvgwCoS6NNrDArQXydpRDwEoUQ3iM8QvpVWFScSyK8cAk9N/iSmkqSiE7uZ0P4tEyWak4IfDi61c8lxbbCgEaAetmuQIALScX0aWntoIF61HJGSIEya6HlUgDw9Ge/dMLRSStlgd24rjhSO7ZALflo22CyVMYXzQGeOdgXsJzEF2GdUYg1WXEGYZl4qcFk3eccBHTaRyJ+MeywBxgCTR0AljUCkAXrcUfSxWtNrvoo8BUc9uxWdoO1O+VHRs1bNGVBCHn4OMLl5vnoQuLdaOq13StIYc8Sjzkn78PFFZy9d9NmLpzfdFYz1x6zNfPoWTfeXPDm7/z0hZeXxChLY1Kr8e0pdeptf8LbdEF/A1h0TnP+9MUmYMSlCjbymkMl0p5M5PnNut0cixD2qQ8TLP6bpVjTSTK7JVlbOzy/tP6r+0/vS9MXobu7j/603KoeffYd8yB40/dajg488qcC+i9d/5z9CIs3n+L0FvrISwfxuL5iK7Dcl6n1YYpDTIg6Tiq7/wt92BqivhuFWxWykRko+aOem7R7eWDptvl6sh8fNAV3+sVi3vkzCqW9NylIx+iV5oL3a8sRLuEwp0f/rHgxkJJz2Ec4DVtoriOkXSPPECrC5Nj7SOXtE8H7Ut0D5FCPnMAWkjMvYPuCYILKhcWY5OgYl4PbBJgn/ZCcloPef7zvV2zCqjyKTCNaJpNDIP+7uV/Nf3PLweHF/2+9Ov5VPkQ24DSAbsTr01LfIIAJQ90ykAVIc+sVL1IlmycP/0V9ozNTnROfju2Vjz4VVy9Cn2t2/8mUlPKIjDNWK9vxjCjid+kDmcDA0Nz3YE6VpHrZoM6+k0U7Q7p2sPmFb3+blPvv74e90q/l7eUjikcPqPm6tlTWx5ZOjUj11U5cwKcdOhUhPVeVZ/uCTlpOQuqd74/4lK5PcHWMzFLvA8Gw/Fa6vgiEIwxb9TqXSqTRq835br1Wh7kuXnfckgeR2iwjlwWp9IoL/WDsPqy00QUvBaG6TOybuPaZer69eHHnvs4BYalou/rhWvWG45nnkvNZMJWld+6fdNzM8JciOetw3TfiIVgEAhzBWj1SqClHBYU4DUzRJeozdGyUItPnBe7w4kSe8FEguUV/1q8Mpgb7qmnDAabH2xp/va1l4ZNF/eIRRO3HM+lwj6XCvtcWiHw73wueNIZC+NhX8829MFiaEuUwcQXc5myB1sw4KZ5o0RYDVhuNWFY1N8CRgXLh3GBwVpe6xe7ITFjAhKLz0wGr1yP3S3RPrKw2N2qzOz9EzpkhyEcJ+MEXQX7A8xXCp0Kgq5Au+c2ahKUbHXjMs+3WMTqX3/TlPA9xwR7fnx+Y+lnqfCXB1sY+caDou3xEt7XNrov7GspBMByKg5q5aKEkpbCWsLwBokvYYEzb8A+9X/AUSjxD/ReA1Y9W5jejAU1whJPswfzLNopwq3H/LiCnk2wS8UFKYA2wJDnDpDUkZ3mABCEic4kZCySOZMFx0Bbd41gwmKRg3meyr3oXFVGTrfyWemhGIf3n3rTvmgwE/qAQfuMvwbUPJqC5zqP+esknqvNF8t181rqi+W6ifr4G1/MSXwx5lbLTSuThertzO0Ez6dw/z7myE+feAZhmPewHzYa+0k2TFtqhjUaI9VqJRsRKbpLeslfNKZZnYSwMmFPKMNWAStF3LWQMJY9kJJaFkw/dT7xqWVBvePe21ueUjVQm534w+BB2hhZ3x6O19/S2LQwa+nNQSNh+M4lN5g+hehSc7g8dFJJ136Nnczpnb+ZNSMj50A/7COdxCpmi6ChuSwskPJD7HorPHnliqC5Z6Hnif2tG3jdcWTdSkVYmCE2Dq/egNett/v8XBglrdEuI3JHAxOgAx8EydBxiCsmAtAJASzHyyOLD8yMfX9v4rBKbXbI0rod2lihoCCeb7rXPedgP/2Sm+Uj0Xc7l37D9imA8XUTNAr79oR+70QEpne+Qe/HGBsXyzYAM+iMLW+1waAFkQLUCpFCljBCmCUsF94WZIKUiNKQTBeIl+WggplmDYjSAksuWJHekP7oRldthWt4N/tTvR97sefoke4iZnO284fxnWLCOvXu9cN4c+c4A9FTTWgZE4vpguTwWVx6gNUSvVMLEFP4tOL9o/dCzWjHWskkpS3hmZvubEK7mDpy+/hEVcEgZnhLMp9TPa4od/D4QpGPt2H505M/Te12rdpQ6laoXUpZRPAANxNxoPWjd3XG/AgYgo8pIZUQfejZVOJuWZ2i1pGy1ojPxfg8CRmTdShl/uKGH9ZbDlmnjqt2jM2et72qrP+z/RZuNf0r5pNNR2DOKfOmTRr79+Zo9M2RmhrsfeUpRJ77A/PyZf4s6ERundVmkq6hCA7GqOAHuIHMoC1xG4Lb+Tc0GYIqIMl3wGJYJpArBydentVpd2ZCduzR3ZOW1fSvMSXDhER00dDldWa5syUy5Vi3oI8SP0qJv8OfrfgxZ8Cwm1+VH+2PWu52+3LsV/893ox1cj1AnJXbSfPjklxRZqMulFEreLksMDBSpo2NjM2KHRE7K/bt2ObYX2LlsSQycCJVTPIzpjltTjPRUk4zucSXmWUko8wmsznjnCZf3oRwOH3OqllDax8fOmvtHIejYeWsEY/WlzesmJXePL50YN2kASV1zIUxI2atmuVwzlk+xz1hXHXDiga7feaKhmFji+smlJROmCieJVbUvBLzTRDIdEUJBqOhzA1YyGqNUMEatUqNVlPmlmm1ahgoqIOlqz6KvmDdMUw+eNkZIjJJCAm7YDLyQ1Iq7eSHtTA1sB46kXDa1tKpJbYlGV1Nxr/CW2zHPoLx7FimxBPYuLjx6lX8D/MfwPjxugzom1iO5WSE45OlqAHmer3E+YT3W86jWS3niW9hwjTJCfGgC3AQXyAlwWhO6SyEaxQwOjyoTaYb/VwwcvbEDCBoplkT1mh/Y0HM1zMTm2jtiHFduv/72K5dZasWvDBwyJ0jcWktV848t+utR4ZmD58yG462Zw4ZneJg7rlX50Q/mrHmzcoj5bUJ2bba44fqrY/2ePVg/+uP52bY+iZlrIaOkKHp6YOTIkd0G4/XDZdx97hcgcMy3AQ0+wJY1igHyXZ6c07dIbqs2DavBS4bXDyvpGwBXFle0idnwMAF/JiS0icKhuAj7Z5WMITeoza03hKqMX8GYWmYDvJcqQAYIDDoDBMNsw0vGK4bfjXIDIYwAZ+qVh2pnqVern5F/Yu6VS1Tq632MC7BavTdWE2iiZuTRNHkY1evsMA4hNSa5gyB1LiOYZwmA2dPjTE40pgYcrnNbqsbWzc2YW7PuXOPff2fz55/vv+TLc98Aod/ehIOO30cbTvXjLYcXbYVhm99HYa++iq6uX0b+nYLe2flsvmLIzt9mPHnFzda8nf3QD+Rz5xAr5w6ibadaYZVJ7ah77dthyFbt8KQ7a+h7zENrGd+ZcfzJ4EeS4Jgl1KplWkMQBUsi8S7OfZ56jHRGYqOk8Ln7SNh1CaEkx57snrD6Om9BNuGTRvkTGlKYomjsuBR5tels6d8Pf2xKk929dh1g14uqv1oWh2Nr+SDKm4WJyfxQdDbFREgYBsJACXLMiqOU3fjIc9DjYJh5FFSDFC8OBNfUK3kS5SAZmiUsbHir3y44kP004K7n8If4MrD6KeFd08zGbB5I2pEWx6DZw1tL735IPewrskCPIh0BWL+5SK5LI5N5l7hPuSucb9wPEf1zDFsg1r1FoeFi73isbIH7sEnrgDQ2urNVTRgDxLD43w0FCBRUYYrkpXJNBolr9AqIhVMkBIodUpGoVQo25OMmAFB0x+SRTI2CTKSao0515Ia5LtA+b/ohrtYWXEcLe77PUx76yAqsueX5Q10eKr/b8qZWzHLgtbDeHSJrV2Abmf27tkT/fF/EQ/VI/cFE2cXrmIOCnHpGS1MhlmwDs6Cb8NfoMwvgMsJD/5I5NSC6ZQYY9vGhrCVGFdaLPGDXCrjRDUcoYbqECy6MOENG0bSaCjJESlDEkGSoL8s3zZsy9Bhr1ZXbx4+bPOww0P7ZFcN7dNnKDcJvzd8c/WwzUOrNg/PGlqdmTV8hDgfFhxcLHcb265a7PcqAtQqBYQCxwAx74Yame1yWkkOj19eK1rJHmC2SLmtq9Bpms6DaagnU8gm4H2EkLtOJhgqdZHBMMpr+NG9x2Yy/hmMZDtYezJHPdOtUF/XK9xurRgzunDbhJmrutYsmwOHMoXbrwzN7N6pS+eyTRm9nhmZW/vomBFkrmomg03kT2Ef0eYys0FBWnOk+UNzs/mamTebFRHWSK3C4hNCUioNNjKl9B6fnE6AfkmVREiyiWPqN3zR2H9ZasOcolFpmbOiq8pHpiVWjCl7/s1nX+TuDpkSwVmWz30pMuSj/N49Yu2bu2d07py9troO25nfcpc5nRSLZ2fLpVh8utMSiE1cK/x2wHI4IOnLivPcncpL+u5HMgnNkJjAYWxrhRJ/1KDWyMzaoDANm+fWBCm97ph0VQxF6dnmjZGsIDFYBHdkdatakUg8spsGYcoae7FJkIf1Q5/BCpi4QAere/W5eBFefLBlzzFbp+yV6KBQ6JmZS/C4CrVwjTQuZdwvl2t4yJIEakwCGG/kIkFP/lB5rTPYLVzjlu2vZpZ/eebSLaYatQilf+1h7Yb7D7DBywAqB+Yy8fAm26DD2hfUMjmUL1KQCZLbED22rVU6XUCAQiMoFCz2aTC1YTvSkPE0nov3KVCiP53YyIPC9nUV2VmZYzIH1By0Lbs/+RnzDnNZdKJiQz69A53DFDLXpBxhARuoESwmtiw9xRUWzcZ0JzbNbIyu+b275cGROtfcMXxTy2q4bPwobeLA10Re2IJlfjyW+WospwL2GbgAJZX2JKtbyoBME9MIvSFWNn7kjonzF3721pxF6IZrSGlWObdz9vnH1y48/scq/TsT6t58isYqAcjnnOxdKtf7uWxtcp0jwhxCXkPku5YfwNfxy/m3+Wb+F17G+wn4h+S7Atog6zTy4i/Oieo+hGYs4FEImnAYmomAN6OUjbAEDn8M2Q1tL+m5jMS+cyHfpLMxqcxxbNHHgZnXgV7GpLHhnv1A8Q7LGAwgy+Hwjn2JjAWT2Ume/b6x9JNA1gjIPZ1DPO95eOwC/hSBy2LzHv9OY6s8+/UCmBIPMFwGykS4NP41g+UorcfRrJtQbNcq2NBQbQzN1NMqtNGEZdsuEUipDcnNE0PdTrNoN9D8vSzo73Mw2zXG+olP9aPpelev7z2XMWH+sFydHNbQJEg3cUNKHl9bNKjCOVVM1yubV+/OdGdaYD1xTSqeKGxtFfPUZPWGOBCDiVUG+oJIWAbk7zB6Pg4kOMh+yRhe7TdmKmgRxwS3G8NdaBsDB4F6cUxQeziCrMY3pgrME8eEtIfzgazCN1ctmIbHKPexjJUOcvjWrJTGCLDSUUlPM5YVsS7l38nqaF6cEeS7bMqAIrdaCQNYpRIKRrbIrTQqjVDgDQqDmCIGNf65WiQQLN66dcjbEvOQvLlb0GiFQkZLcyGquIIOsBu4Um8WV/QABnhCZ5Wi1TRxT8rngjVMpWcHpaGZyERy4/Ae4jAFycBTjEizNKeM4rGzeB6t31EcwQAfjh4aMxU0iGNM/zgGn0eGOMbQcUyFD04ttmgIrhkY6cW1mEtF4XQV14P+FOHw7eCwp/3GTG19Xxyjbj/mjbYxcFBrgThG2X7MOroeEU5t60BpPWZxPeJ9CM3vI7k/2HMNlcllRW4zyRpTBuFTZfkwv1S/9p4rzfozYg/L2C7zj9yBebP/GpY5l8xtnwDY/2fn7TwpCZApR8zotjxAtAGhXeK6BROl6xSJru+Jewtt2xvNWaL7T5X4bJpI++H/PGYqXgcdE/OPY/C5HhLHRHccU+MbUwXOimNiO46p8M1VS+EQPkuWcI11DVRzOm4DtpkMLmUyGAFmgWvYzAUhycOIaHYqoFkBZURG70IX18NEmPIiaoaJa1AzurCWuQATN6CLMGEt/u95/BQPwVbi6NadfCP23QJBBKZ8rP87RVmDtEG0TMzql8HljUeLSe7ElXeISYjExxczm8wwzmiDNL9JzOja9/QTG2aMIrlNTTMfXzdlqOfcM+eelDPl/Xbznnd6Dn/6zCQpuStvUf26xVdoilPR3Ckr5rv3o8MfRvVj7iSg86WeTrGNsDfBEc3PobjuLp1ZjniubTLtoTFToUEcE/6PY/CZbRPHhHUcU+GDUwt2SLTf2ceLNCeFwukl8f1MEY5XVkv5WdNoHqIJezV6Dss9hQnjVcEpBCn5R5Rr5J7Hm5Ums3udjATITUNvoi8rMsV0xFTrnXue0c4lrx8tZG2/o9/QFb7p5kVkmzdtH7V/UQuWYyYhEvQAXV3BcYpQ1hwP4vPc2Hs257oNQd0cee5uHW6kzW0px2K44G8CCeTa11edRJJQvfeR6TFsyWd3R80pSOqaMa7/f794f8LsZx8d7igbnls1Jbt4wOCa6SEo4bO3qnJ7p8+LRclQI0TuW/vkS4VdHJ3MjoRBCwbt/KT3ryXZjs65mfmTc8qfyo4tycgseGz6g94n3g25E9jI7b9+hpwHzRcRLBjXOUTHgL4fAspleoLpv3k+tZ4+j2//PMr7HJ95K3lua/9c43teZaCf79L+OeeDT0owCHem6UXubFtjow9G5Z/imBjvGMxveIxwkqvHErUHpt9yVzdTMCtwSn1mdH+3NhOqhcxMEBakDetZ6A7T6dPIpSOw5bqBUpmY51YG8dQex/LT7+KeaEZv9rhZTMuwyWgmhrVdyoxMcnfapT/Etr8w86ZLcE3jlyXrDmmEvHXVK7cu+un5mjmpQsYhQ9cXq19+Bzvtp9OYurHZu4readmQ/3Rhdr+c6bl92EliJoUpvdfwFZXF//P+J3DE6eIhy6tSMl9f/P5po7HmsaTO31b8vvCnWaU1i39qKK9m3qfZFRR3yERyXTDuckX9Cxf4cJpNzzVfPPc36blY/c/F//nUxIfPrbjtORz0M33euf3nOd/na6+LZ+bwO1dyp92Xwvhd0rmk3pboXL1PXpB7wlK/MVNbXeIYddsYbB2xxW1j4CD0szhG2R6Ok65HhFOLfqOUhnWu3qtz8/Ga5wk2LLG7AqcrIgJ04uUyITxcCNUGBcXlurEnSrLPtJG5bq10gXciVS/lf9JiX8zw2L0JosJbil60UQqmHpuxHVkwtdFVU+eP+rnoo4GuJeiPD778Zs6PawYtShJMI3+onJA9qU9xbsGTWSV8eHTSe71L5q6vHdcK1v2FVpz86txrULc+M+viyLmrWix1740uHlq7b9zAocC7V24X5bmBIs8lUGxE+Z9NOcVXmXj2r9OzC/N/Ptbv+dTKh2XC4LbncNCf9Hk7+LPp/OLzqtaHaaucnoUIv1bi50Q/fh4PrnKx3El6TxEG7K6YkFeM0BgAZKWyGtlEGScDpP1AFmST4SvwQ3gN/gJ5KIaxhqUeGyZVJ/F+ZT96v9fj2QOedYXZ2QWFffr0L8zum09+M6OvXPmlqH9JQW5ZCcv1Lx6YlzuwhKwloXUDN4ZbhXV5OMYt1uWh0RFYl2Mq0HERuW7uobvlNl2e5qfLNTAcwjg21dAbwgjIlZPEgpljxi+blk+SC+bW5K4oz0bZA2f1g+Otu57chDaoUpgDJM/AseCJ1ePWkFyD7pUTHh+X3vDFM2p4PNhTCpUHdShHrsU4pfe+9Ewq/c4UBntx3vH51Fn0eeQ/PIeDzPR5ePvnnO/ztRqRe7q08bN4v0lhVItzaPzm8OZICCaMR5oLpzSSoiFNGAii2YDhf5MN2C4XUJCyZzomScSxiWtfW/zNosZhUpLEOzAxO9wunxuYN7Wgb36/6f37c/UXj55Eqw9tJXkScoDOzl2z849nf8Hy8tmf51RW+tbO+dZe+8bD+5tH+Qr5/LrBYJVobxrb7Buqq/hdPl012EppP0bCI4VxSdbgg1EBqkUYhg4whAQfjIpf2vFP6zy81iX8IRGGTgbdrBNIsp7ke4ifI+8zm302sJPaU3Ht/FoY3X7OBHp2ueLZhdGz8/F8BxhYz+8SYUS1hxHXBgMOOtFe7ogwxvhgDIHHRRjWdjDYO4JJgoHHgPOiLLfq29n0/mspB4tEODHt1zLMby3l71Mo3nMQ66coDJsEQzqHiHYwhF10LXkEn0wRa/PKV+KbGQSw0ptHyU/CdB0OEkChK54zmYFOrpD3dwcoFKTRADETdSAKsOSi1aAC5og8t7kt8bPNyvA6cT7SN9uxfWghf8jdGetvfHTQJOWVDYlyVTC6HA9tVpho3RD/UstNDVe8avD63Uu/GZgzuahPQd5TeUWco19p2BPzTr766skH5Suq+n9+9F1Y8nbLzmnXn8ivfOrTOpKd4/OZKa13lmi9QsSxtj2OsymtizbAYCWl01g/HGO/u8EHo0KKuUBNexiPUFoXYVT82I5fJBgFPhhDsPvlIDACO6yDnlO+RDP3Kc0wCW0048C88RI+MwqH8oZB4pnOJAdW/Cx5Hx4BJmneZr+4QjlIfMgnIvOu8bOByn+ns3b1p/fxFEaXdj6sH53SvNLtFEahyDO5BAbbrz2MBh+MCvBSR74Tc1MpDkUYFQyF0ac9jDE+GEPgSRGGrSMMkwSDjLFSHLL5fnyHepK6OhEO5odiGOL3Wd8emJJp9JN9/XltG8VDgoSHAw/FaIjNslu2E4/pL40pgYvoPhl/n09IpPVdZmwRhOkAG8SpVGq1WWOWFbmLzNBsVhg0LK/wK6qTuEpM2iE8RAtVSHQE8xTmK4h/8TMb4/fd8JbbfbM3/p3OMDUeXoqHKagiFsXHcn+cfHCBFN9xiSc//vhjz9F9+7x5n6SPTxTo5bKYVWGBAZqA/m6DRhOmCxNInqkuLCqMDQtT6byps/5L8jVdaJfrKC1MZhHap9M26GqHrUuoQBfQloTNmMEtMCEBXYzrIs9cM3rpmiCmNMc+84dPUR23i7D2toaS6h0vDhjj42X2MxonEWNSVa0DHoq1Efv4aWqziTZ0FXogyt0Afbu41TNUJohwBrc+KsKRtYcTTGWCCGcwahXhyNrDeZvStAinojVNhCO0hzOI0rQIpwJ9KcIRfHBaDyATqX8U4egE6B5N99u6D7+/jNJykfh+jQ8PzE3KB10lOVHZHg9Snm0WzY9RvsNofXm2Rppn+zNMpPnFVJ6U8f34Jp04twwkMqvEdWNe+EUw6cS5ZaCYqSHvkxpM9l3KA4lSXHBwx1gmuo99tRzCR7BM8mO+E/ds9JdjPUn9JYaTJPIg2CfN25PkIOP3S8iemeKZoC03GS9aQ3LZxNxkoPCmJkts4U1NNloYTHUdMpPxnvOiAvzzkvHLI9O7SOd4hO4pWfLN9j4k38k5viUj9DBAGvMyXEL9N8Z/T6wom5PFtWeL5/gy6klynsXPkr22Rvt003Z+v3depghaWrcCWSOUs767C7LvEr/PFoFTvs8yvrmInJvimSitczc9twHS+xZPd4w/4oxsonFYG7k755QyhSBnGIUc8CxQtVWm0rJXik67EVv+WMg4zTxrYTMe6zHm6kqYPO75WnQKC+Z0eCPi02lMIxJKTr+OxrYCcQ7mMs1Vj3DpBDm2EvA5yCDklYDGJQhs8aSwI4GPicJnkl21PyxGlx7pNebaThjP7og93eCZCS9YTs9gI3z0Lpjo+aRIMbsp4vmEtJe7c6nsHugX32nzC/DZkBpXEQaV+YyP3sZTvTlQPLP6v50T680/HooBkjl3tM0JywU6p8U7J8YIr6J3VAPBJgrdso7W96IyWm8bQjoNyPWaQC1Lsjj86pm9lbdQrIl0+tXfGkieqMAxl6bnDi66lI6Gt5XhFsIGIT5yLjSg00nov6gsGLLmnb6S3BYb5BYxRfcLL10i/IT5m+SvRwGryxAUbAgMDshzB+uMHSoLKEXQdUgFKX+bza6BjJVUGvQeZtjwUFb7pvhTtOJgoJu53CG/3aP5aL83tk3lcapko90WbdjI9jZKOZXHoi8+mPpkTLi/bbCeyuJUyb7Y83d2MDeEymIRRsVXFEYnfxjIL1Y/FGZLMfZEX0yX2Mid/GIGQ2tEnz/B5/PTemfZTP4s9g8tINsVqzMWeds7QDU0kXsrtZZU3irDitxKjg3yK4f1LwRqu8US2mr6fXdZfKrTGCeV9wu5HvmwId5C4aX92HgHAjne7gQtjsrcjzNrSeWwyVcqbBZvuHRR7GqbWDMMfPHHK5gurKAbyAD9XfFaFgSkBfd3a9OgWkhLAwH6lEK3XhcQk+cO0AkJeW4hCITntkvB/5umFVLY0Wv1k52kPxRs1EDo9YfJXU+sL9i4e/KBpKwdM9+/uhgKjefHbviTFmGdtjNjSBHWsIOesXkT+xUUjF9ayCys3BiSuHGXqTgnp/jfn3wJC/Zt3uxXlZXUmV0x48dnho6CAZ/WPBr+8lQSXvTK00Z69g7Jt9zyEA0S2XqPnv1gUcb82D42gWUMqbUWYVCdtofK/1exXthJZcxgSf7H+eb8rm1OLGOyxTkt7WVM17Y5YfliOmeod05SYz2dwkiX1j1WlFNd22CQeoIfKYwKcd1fUhgJ/jBGt8HANisnwujSHsbnPhhE708WdXp8m06PxzKlgj8twqEx2tHiZ7E9sJnuv0J6P1kcj+dd5Tdveetv4rxJ7eblotvWDstn01kTvWsnNvt5inOnBLuafq4Cz1nHF+H3h0jvx9L3aQ04ndMp4dz0kA0/HM+5QOjs/SzWywwwYZm5Xaof14IYl56VyYBcruYNWpVaJdXR03toKS/CZ6bTC0xaVX77P85/N6DmhhvOa0Xe6nK2DHl2MeUIjhKrzIl+iJRqLqJAhiu8kzpA3d8dEhDAGwNdWiyoA4Nz3YH/UH3hTVz1r8IQk329lRg0d9W/GsMyL35evF9FRvxP8f+J9FVlrD5xhJZlHDmxOsJc6Lv3qvHdjXnvKqGfnBVjbBpfDK4qpX38hMKg8r67JO8vizCCO8Cg8l6EMTijPd2L62jwwaiQ+FW6evZbR4IPRoUYxwtpB0PO+WBUgs3SHV6wT96LMBp9MCqlaHuoX/yfwHngd184FGZJcOL84fBlvrgkHgPWSpDEqwaJlkl/AREO9e3Hi/vANN7IDRc/S98XbWVa20/n7SHyJFwu4sDv3pjWo9B5qyTePiXybWwb33a4p8RjIjvGSDrGROGgN9rHVUUYFb67zlpglXDQyZcHQuvq6Ty9JVlV25H3SL0Hp6DzDBNl1V90HoM3ZijCGOOFge1bnQjD2A4Ge5LazMMk/2heR/+j41qwHFB29GPoWlLb1gLLX6BQTCIU2KrEMuaIEIn1POlqostzq0C7it62skzYVsQrg0w+KeBdGAN1XY6+PWccKd7tp0G3iqW6TPTRW7Rq9/5/xJpd2HoD434efxqEg2RXsFwVFhwclusODtYCrSnPrW0/p1/LOZIK7r2G/bs64uXiMt7bEf5BxzLiY9Ji2ElrSv2qiEeRFYn2jeCLfxu1KpcpgFOpgmhbl/COSQFYLp3r0N/FnO60mDXQmxjw931eYOriiVEwWZn8/jrj/9LvpbnwTPAr53uUn23f+cQbz7zMC9g0iSbr5IFLSTrChpAwvS7Sr4TSf52pZtLKlq6u7eIrxr/Ektl1pT6nPAjalN0O7tT4yiphkrfWkqtfGbZ4dvC+473sJW31laifVHMJpF4ishoaa41yaRUQBnCucCMbEFLkDvB2FAk9R8Q5yS+jKxI42d83GLEVlZswnnqh25/M+LteIweCG+YEn7kR4Pn4H3qO1GKbbxHPYX3jcHXSRrmCQ6OwE6dTMQoWn6oiShuKKSw0KMiv9I4YdiTqE0px1laEJ8tkpKW2VeMZGbuvGC/YnpNAFtsD/XpmNy3MW7Q+fJZfZd7EgMyRtcGnvtG1NJMSvZwVTLUvprDYL6ZQjn4Uedos8TTgaL5avGwn0NHsvSSS4dBFKHJ36SJTMDa2JgbGhGhMmgjAycTA2hl9xrlhZnrzSW67ZLRPpwVK+XqxBOs0K9bo7WSM98jS2r04G9e7eCO6FIESdqKPmCvBC+smvICOxszrAit6HCu/tNnZpUt6t25dnJsTHLth31AlzzdNzLmPYCFq4rO7ZU+Y/ezJsBnJypSJcehKot2eiH/Q3bpatBM6Br9GelATX+U83ouCehFpIBsMdCXLjUbS5fdDlsVWeQjUsSEBkS6lNj8y3pVoj45P0sb3ynPH66Idee7ooJSODRlCdV8lpH6ND+4MOTvi1fl26J+nKPPbLfy/emowO2zz48Q9w55Ln5y4YMHECS+87N09Kv3njhvCD5FPdaEIOD5u3pzxT8x5dhxFRFra/YZ/asYh3jvJ6qjcXijqEEbKSezU/r7jJJXbO6R4gXj3wha16Tya10ThbGiXu8Umt8Gh96UUznuiLsqnUJJ8djO299vsXYEpDgOSvdvTz97F7/8mvj8Lj2+zVfH7nPh+dzy+zVbF738g5upgmmdyuOFATfqdtXPM/VtEWCBTKXWEQDAR/dfbAUIs8MdwoJO7zNUIFqABmn2sarZA2jSH0nb01jibILOS8kBLBDRzNSeyHnl81uWsfWmwLGhsKnfZUV9ZGpKxLzt9bz6GMwPD2YLhBGA4PJzNKn1w7EFYpNsDBZklCQvmGRhM/ZTLnw9CuzEUweKoH14YcuJxAoTsC87BcEL4XWLPaBaIqfwyC9zNjEv0rOF3XcBjduMxM4UEvGbDflkdFlKzVQydjlyJk5JSIlnsouPIzXSi3S++KewuGFjyiF5IQLtXPhPXqU+v9DxxvmzuJ6kng3wvqxDn86s28rZg8DZfILqDMXGXOKXQSHunGl0KLS0IUQSS1Z6hS/gHjuGUS5+csHhRnR8X8CfHzZtVN362j8CJTi9HJnCH5pur3hFUmHCSSaMeu7d/urf8yHlnWn5Up649ykvHTBsxvWZsaqdIw56QcZVli4vFvfXE65wjaIiUcOl0gFfhFavqTLNMjGk23mromWFis33qkEQnMcQCsRrsqREMwZydYUel9Hf1tESmaPb2/DqlOLtHZHS3oF3Z3GWLzdLdDh0WW5TdiU4TnGACucwdorUDekwBKna2Xu6jAG8FQayvlMD85BSYknClphEu877i7sx+W+/4oF+I+Iv2j/XsgMtb51I8697VKhTBFMeS5vsnsbT8YVGzvoMUAdCzjTvaWiZsAwYMmVepsAUCkk+dSSUBLdZEvmdAkmRiNeru46YmTUmfqEh7YcGjT83nb23vlbdK4+waHB64LYTUc2Dzp8yzu7WB0pGC7UhHLaNqhuQOqKxej85WVPXuVUoKwiHj4C6zPwjDgYzQngwke6st8CkwjqJC2Gn6/H3cvfXngk+8TuIvsIK7h33PfRjHRhABDE1yzqxWhxvEerkzPqGNP+6XE+JXO8fMCywIgVzV6mXofHFOr955hTMYm/SCX9DlQH/T8m2yktIMOy2nI7+ALydgCf+n7z5/BApsXQcC9jOGVIOB5zNBgp7m3Udj5ZTM/6mzgc5glTjS8zMdCTWpGg3DiCOBNFZw0rEJfzdWENqPZUW4XcGK9mOFVEGA0G9sJpbvWjw2DqROE9eqENcakRoRoVL5r1WYSmH2gs72MFWpKpVM5g8Tj7WRsXC2qBF8UKE11Wo1GPzG5mH/fLqwD9siL9CRNTQHS/0uy0BRN/jlWZD8BoHgVIr3fEvv22N9/UjXe/tDtusR6u0PCknfGdoblPQYJTAxJ3KjCEymV9v9NoXZuc2vof/v7X1O71kEcmeJhS2Jce7hz+JXehBJuyUxJHgBA1iWlWu1hiK3lpNjK1Ru/LtuSTKLM/Z/adTI6Rwox8FWv4de+wH9gS6cgiO+gzIY7Tn+3OnJKxsWnqhdwo5ByILuoIpvoR2qoRY23kBnU3agI0eef+0N2P3486+33XFtouvu2mEfSdQnIrgt4w9huaF5VwZZjtxfpGZh/rCSXmxsnEOGPa2ZzC1YsQRd7qkIT+6Cykk/XjZn0o0Bs4a0LBdhkj6bGGa3tpg//X8K7ZV0Ec8xVvoeF9ozlrTwVAOMK+y5c5yMNA9Uqorcyr/rGUuOz0iOkDSyE5iXunseHcU6HS2nmFWOlpl2dhpie6OWfHpL4I1f82fx3Km+/qQbaC83k0sBeYPAkqoHX69B2jEH/+FGo2YIkB07Tc3QwXXj9j0o4pt8d0tkL3aKL7KXTbTvXhdXICMHrEzaAFQAoJDuf/xaKdDrB6tTQe6V6b1aQgoTiQ6nsIvTPedhJlIz5Y478D688RNCkSi+1Rdbo3M62+IK9P+9vLQn5GM/1gBCxLvmUHmIShVS7AYqbMuqXArOqI+CMKrYXQprIAOxCMw6O8zbaCb0rH8w2ZnEOHQgFq8uAgZivSczil8OYxFTlJnElFWXp8HJ0B0LO8X+2ILmod0po/ccnDoRfbvjo6l1pmuqyZdWwBCYFbBvn+nBBXQDvc/dgJ+pT24fP4tTfvzGxNkc5SepXyHeQ096Lo2YRi7QfoqxLiPkjFyx2zzACI1GNsykYlnacFCs55OqGGgI0M9pC+pJilKkIjmGPRlYjb4dof36L/NwaHtUUzdRvw122qZftS56DIyvGw8bUQlsbD7gfgIeQJaclFFlrLzl3uKN8FvPfcSIvQr5ZZifo7D+NxhAkdvABcs6sUqFssgdRhMI8DrMdql7s4gcckNK+xQQDsZOLrlOMMbo0+LY8rq9dUUDeno2OeCUR6e9B/MvQQCtX56CTzg903rCufO508/8tezF5v7oFuSy/lx3DT76Hrr1x120bhRqgaZv4RsrNoD/v9qQ/7+YEfWDLgvDsaxdSGMwI3LonY3Ta4Pb8PNk+nyp+NxDvUKfjU7vuejz58Xn2fR5hPd5TestppU+F2X5iNZg4BfVp3uZRuLUVN6/RGHUqCVpn+KV9mKfpstcPfbVkkGCywxM5ghWGxGf547Q6dX5bnN0nltvJkX6Ce175BF1bqfdRYgLTe0+W/vMbKnyRXK42GnGnkEocVhoX6F3THjWmFOJwsAV1Ss2z7+z1t1gR68UT+7r6pM3I78PezJ+iHnQb9PRRxHmPurbEa+NyL340edw6NGS4Z7gZTCgorRm4Y3pj1RjG+wwxlEzjWMlgG6uECEmNjYmzx0bGwAMYlIjCAjP830tljejvH0zcm/Zb5wNe9CZ0EzuCCNghwJW1nrm+sHXG5bPub5uwMKiJ9Fn0J3k+WzQmNDdYWPTJz37+CPJ9p4Tni4UIt/btudEJ/OueWt+mWbp4rkqPHLl7O3pT7dcD7Oue6a6+s7Cp3P6k1pevG7St0ePfQQ5awjgtDCM8J/YBsVicLKWUNLNjcGSUmBgAzpsf24ptIWEMrw2MRFGwb6ey6NqkQnCv7hSdALteS3+8RFMZov6XXSbxI/I91IQvHQCNtJ9xoDtCTPPq3LdPDCHk9Q3P7EvzinZqt72S9inCgoUv3QmzWAkKLCJXrNh3a9nJh5/ZNrLz/YtNSWN/Ql9gn7+9Od7Nx5dMOaZrcXspmc2bf/Q0evSGFf3iG6pg9+/j35DH11oOgOtnobDq1cNTPhi7uBh4l0BpX/aJy3RZTbC2FhYSE4uJCQy1x2iC5Dltp1b+2+jsHZodaCLdfiaRiRJT3tC5v7q6YurKqpfH775zrnbML+04u7VPzdVVy/JHzl25OgF8GpxTvfe8Sl3B2xcAlmHEDkpb9Puiq+TYly907rR9VWheVyDQLqJxbtM+sjIaG0INLIhSk4ml+PFyQHwdhIjelPqEpAWCmOFBKJ6OCB2sWIIjVlEEZ8EqxruQlPJmNuprNqGfkBfLKyorh2ZMuQRdHxacfeBGxfDppegAar/FXCt6Rt06e7TReO6pA4YlT30leppUxKj02JzT4o5JdIdOO3hptWrAmGYt42bt6pZLAn/+1vvsejCnYduuzHIGR27uAFaR3WLW4L9WbHvf5zLFGrKdYeGAuzw5LoVEOj8rlB9/dxpA81QKOZP6Rhgw6dlIS0colkL4Sd466NPek3f0Lzk8JGd6Oqhoc92R2si4WNvPgEf7+Qw/fjVEjgUDj33xK2r6L+e19Dtqz/8+vrU97h5yLGpobRGpB8i/5ZhHtJhG1TV7lapfScvqrvgrewRdRtXLze/CBM3qskdUcO8tMeZC56wnub8tnyVX7nhWF/ep3YH6aPjxD5jFEh1hQZr1Ax2dRkNq+OiAhVcPt55oC6/7ftIqGgxZ3jLiUkfaG/Ru9lIxIm4oGRIrpLxcTBypaJ3VteMmCGPb3k7dIzWnhJlLZhSP8MUrpKZU6P+RAe42OrK/IC75rcPe5j6Icp/Rz239FTB9m4NvZBoo0u17Xi903y9wGbQmIuuiVPLgNi5kfZyoz2tSPtzBsgsY6AtUznvrSxo74O++gtd4oZ71o+c9zJcBmPQRs9P39D6f0z7GZj2u5F7PFlgYEoY6NYNFLq7ddNqMRNobZbYmNiYXHdseyaQRKuEAm8ft/Yc4GNXp8gnknboCdnS3HfO5D4xfUgiYYdJA3oWrl8Cx9WM27jjYA9HCvNbYvD8i7VT6scwR+bU5wxO61U0IhOzxaSnkuLs0bnvzYG9hwvmJ0snru4ScO1frumDSsu9uRdcPcZRmbcnHH8V4ygERLv0msBAtc6Aydfw0J2kvT0RpYsZi1mk1zGhJm5tn+zRq+cuVT2Jbh9C5z78NfwYtyn51yfkVyyXnbNnhOUy9pYF7IxVZTc933bW54t1woel/oR6bIHh2QVOqwzTGvJICUNwXlsJg6ijvN9NYiM9CIyZjFgkL2N9X7Uz9tlfN2wdoYjKRxe/S5r/xctHv0IlQ2qjnSmj+00pymaO/Avt2/902R60m+vx5dd132te3oruVc65N75ylCTbaP9dYnvpWL3eolXhY1UFh5NMGrEBlU+mwb85Q6kzL1XtcEnJaEmGTRqQmffywq1Q/cYb66qfGVW+cAD8obQ2UZJg+Kg6O6PyTqw+DPvvyr+ZMfEj311HT6oLw4k0M2jV2ly3WssHtz8S2jKA8SZhYNM+AsZKFxvYyLBxhUPWNM899dNmmNLM9ElG38U60JrHN5atnbwynikZf2fH0FufXYA9d1xLfPnT6RefOwuFo3VjvDTBkX5cgWR2vVqjznVrHiKIDiIlC3pbA84jl9Grl6vr0c3ww8ytFNQoNgZsmEcbA5ZJbQHxPNQWw/MYiV+kEbRA3db+0S5JTO/1SJTeolNizW869bluDkyYo1kGHTCxdONvphNNuaVMjWd9714vsQ3oXTQStS6Q7oyQiT/KLQByYAWdXSZdmCIsTMh1h+nMShAdDUhg3cesdFLSyp92DMGCCtLvrDQ4zaKdbZQSXxlOxrI5Y9YOHO7u7Lny+AfXdh35aN6U8pwJyWfePnDuDXS8ueZb3dKrcxv3PLDDb0LunTgNB2zes+DenPHT9Qz3r0Pff3IeHTqoQHFi/SZ3C9NcJF5dEGeWmbggXhsUBsLyyaWWKt+t86vezDJItZuRxF30E6A22mFdEq7Q/vSs4FDogkWejwsV3VISe4wc9cxcczyahQ4wsxwBXbpE29Ie5eqXbt0Pz7fcRyk9empvW5ZshiGeQ2wDLCnuo71to2eDTEK4YBD7hIQCzqBVhcEQdUieW6EOEj0RO+kUQr/FL92AT4dgxkKR5vWOzJBbhb479i5MfAkdfvAIuj7q/BXx8IYOgRj4/eNRcC9sQjUo8U4QSoHNgSd2es+yuJLns8S+2IID00gsydOw8lotCOO1gSqALTcLoRVv51hsxOqlNtU6o0VgvJdYUi8HwhAW0X7DAgQ2bW+6C5OnL52UW94pC4bHx4/On14QCcMj0Leo9X8ysreYLhyGVXDBHtSwfdfU56Dtg6NJ9S9D25Z1CxuWoHEo4dPxw0QdiXUuO4DU6Ig+B/aNFFIuQIwvF0D0OTivzwFqOXGErUM9aTnxXaRctBGR1Dfy5R+KMIb7/JYRYh6Gf32c4KDPN4u+DzQBv+wayg9TsFzZJ8QDJfbp8102Vp4e3y3d6dR2C8d2CwjXhXcLZxVseLi2Wzd5rrsb1Ma1FRV2yAEj6esZklQOMkuNgaASinesTmpjiaFYbF1Rd8hgxF4+MUkN4diOlzG3Fj4t5Gdl92EM6e+h3/e+cy4yOCMhcfL4MXXW0Kef2tNz689P/3rmzBfMmhRus/tRNrXnjFnVyIC+QW+/smF+v2HFERkhlxIfHVowdVDXMVABTfLxTU++fwXdvRdrvSl990I+fxQYSF5mgA4ArZ7VGjhFsZvjgNceFA19p8HbXU0mqCD9VoFJfV8+/9ygAd0j43q6Fv53ivfLBWbC/1fa1YA1daXpe+5vAklICCSEvxhiCJQKmBgjghBBLVpESJUKFYquHZVHqy7aahkLjmst41qoM7bq1J+Z8Wkdd4axVK21TiutndaptuswPl2Wca111faZVvvrWCWHPefcn9wbcXb36eMjgZt73/Pd73zn3HPv/d7vdb6ddtVUsx9WRwZljQEaz5fCfhSjdnTPNTaUkqx3uym9IU3Qo0WxPiHXSaH1e6IqWMn1FDkvRQlZNM+QGdStFN9FQYoiVgxj/I3oQzr3xSP10+H1jJP8koJvLd2fP7v06czyX9Gf8hFd14qpD2SiGHYmLvznp1D8dgDrEjTbzl3+R/i7381fsqyRSZpeCK8O/nb55s7OOb5WkEeea0b2a3hb80CTGI9ou5q3NQ+Uy88ChCRhNdpeKL1rOw5m4zhL1+S58efIu7YaaZ8zYiwWRO/DY/JdqArguYO7pc134amKVm3uUSzGY+CjWA5JbM4M2qdYtMUba0udgtMC1knPLnzKswsRh1VwWqjj0jj3WZTaKDCs8WUT+5nE5wlrfNnEDkSfKQs3lOf0jVya+P4zKZZ3t0/i3aF92KOUitEk4/AZwlkZh55FcHAma4Ym13U33y7j0LPYFyRWe75FXdvldaFfwakZGQfZs17BqWF7R8LhXtPNUHBqFZx8jT1V/E0Fp5btkXDKNPZc0y1QcMIKTkBrj2BWcMLsAQlnmqZflPo4Zq9YH8ci9Q/2pZq3hftKri1gzgYPfE9ZpB5T1xAgtp3VWRXbHuAMkm3WGF/1KbY9QPpOVSVAwvmrCmc2Z/9fcWazR0bEOaubq+DMuZs9Aq/gzGEPjYhzVeXzurviRH1ep/TdaI3PFU4p8jnhlKp9nhjr8zzF53W8xufuaE5uWMOXa2L3Kser+XJN2M8KT++GwpdrZM+J84M5lqe3T+HpNbI7xVazNdwg9kOSJ5kj5UlWizgxfL9Okicp8u4adCq2n/TO4yoZoznS+LsszTEOzZh4lozRSmmfLsmvBRZVTSB0Tv0KTs3IOOic1is4NSPjcBvIGM2Rxp+Mc4/GnjFkjFZK+8g4IY09R0m85EjjT8YZq7FnAYmXSmkfGee+KA7uW5nbSMZokRQveyXOlzZepskcRzxGr4jxcjQ2XiiKKSb9L3KrGpnPxH7Taa5V6Oq5T+F0NTLPie3povPrVzCs4nShlpgusv0C2h7ldOHt6yROYpi8/yHcA7ydq1Hsnk3iNCzF6VlVPaAbClehkWsXrwMxPObZxM6wFKeinXSmhoPMt5AY80nXgcXS2M3V9OleEmNhKcZ2S33hVfpCtKdfwakZGQfZs17BqRkZh+dJjPmk64CMM1FjTwmJsbAUYzLOBK09JMZ80nVAxpmssWclibGwFGO7Y68nYr/InBASY8fFGMP9E5Orj/tKqSeBY+w7McbE7CPaqeKZCDzGBBXaulH3avqOGyD5blNUuUfRuSEWQ6lP5bk7RsUeLSdZxLghY0RjKCcWY5+EoYohryaGBFInTsJR6leNicUxybaAhu9izgeGcU6piKGNf5zDKR6niv8taLs6V7qJGyvlSoc1udJN7CVVvaYbSo52I9d8B4dMzPXep+RoN7LHKdUdk4wjNBO/T9XWj8qO4pB8SuJ3qQbBShVTYgQMpU6V8+4YUh2MLC3GDRkjej5ZsRj7JAzV+Xhiz6dZwWmg3r5jPSzimGRb5Hx+V5SDEca5rCKGqi9aYBjnlYrHqfoiti5WhVx/Lu5u+eZ4n5l3vJc7hmKgjMRAiYS/OXosiYF5kj0XVe3eUPLcG9meWP6w1O4+uV20T+UdMSDiNCs4DaQOnzaPXcQxKfnyDYdV9yFYG1GsRUwxFGUNuoTcAG0IgP23blE/6LtDTA+9U8yrAyQ/iewzlpk9Fhy6ckXaR9g40j5CnrgPqZNM9knk6QxyLvdCH/3qcL/ZS5VTGdRm1Bvlw1eGH6MKewFFHx0+8cq4QCX5zC8gnyGDJ7fy32lAgxM8QOuyxoClMS9PrFHXyvTRDUQjPv4VqoNhqDJcgNbqHR/080ybbtGeiw8tYvpsl4bOwY9JbjLaPyztz3bgDAisKQ7sRFScnoEO+KS+hTuCDvgAeCmA9cjBeuoa2j+ul+2gxPq2HnF3sBbjz225Zr809CHaG+NfYPoAJLqB8a9wHTrJHiyfYHfT3iC4ycadrYg3ckcWL37+GWD8sw3Xvmf6WAexyUglHKaEDiYOHSclwoln4hI/6CJs4PwFEY/qzC7Ba/L50fj8WDPBMiGseLbDxBOsD3zKWbrwRylQzpYexGD2gnXyaaOfgVWgipL02Jlycv442xPjIR/4iGkeBY7BcLI36PP6hb++mOJbK7nFfh7CojZ864798wZaqxkIp9cbSowTAJYkoTgunucZHcWI5emkOrDyGwsP4wJckLO6GA8zAE9th1cABT8YB7xZIG0LqGD2Zg6VM8fTv0oHe+D8dPweF7XhInyCqSEXpWd4TE0WBLScMiXFm+KNVoMh0ahD/7gEilMq4llUrVpiLBCQDVZkQ5lsiOBJpueCKePgqVR4aSM8Pg4E2Qb4Bz8IpoH0jWCKH75HF2R8nQE7wePo41I/Nu8x+FP00U/8sBj00EfYXJyLG9LHlbHt7B6WwfXGz8iFr6WSTIvn/GLJmnWv7lq9ke5pOTj/qR+//N5TaEw5hi9z50GROZvCWhVeykITHjJlYXGeoEC1Dl/Tr+bep/SUnUqjsqlxVIiqpopCmemBgK+wClRVpXFlJmAypabxqSlUspBVXJw31YFVZbD2B+mGRlLHXiKfZdHSQ327+HRISifwALceRJ/4a7/ksqKq7dpvaL7s4QmTm26seOOJzV3Lj7V1bqPP337nSzbEOL3T84PlTTeWv76m+9mWN37c+dztv3kr84O5lQXfLT2+Vty2jb0Fh7c1A767edmL8OOtL+34Dcjo3ruZaJUOrXivcT7+auFL8D9/tqu7F7i27Rq34uT8+Y++Ox9vHPz5ru6Xgfvnu5AfTzEvoiUOzseJI3Mx+ps5Rv7mSD9VUg30dlKr3hEysKQ2vUDLdemJj5Qq9Er5eXXReZHHXknXkLrIY0JpPMUwLE0DILAjVUImFeAVhVFS9piuGanYsRgD7DFSa4Elfc/SJDcr8jm657DH6nvqgRsw9tsnr7NlksAneW5YQM9gxnDHcT1prHuCTk+fYHaaabNZYEYZhUy5OocUBW7BHXQFgYvxu8oAfmWqe3zUNRfc7ASDgF37OHxhos1Ycpi++PzzPfSYyJmrM5KqzlISlx/biqK1GFfF1wnhenQBA0askW0yWarrcZn8lDhjdX0cH1VQVh74ytlPhKosUiAltfMLQDca/j0A+4Ndnq4BZkwAUpXgvyZANzjaC28BvpeBEB6Eas0TN1UXKjRnubPC9cYEt9Nd4N7jZvWM2+1kkzKdmeF6i9PpYFn9rHpWSLU5HLbqekeKNp0tWqdEY15QTYoi5UpwwRKskYLlwoi+B2hNzf3mTaKTUvlPSSkgzws/coBcDzyXt4N+FoulPLLMccJzwtHnZY5s+OMHdZ9OmfnwyoOtvdunwqEbrkfn9bYeRD1bhNZQfeQ6Y6XyqWmh0Z7skDt7VG52bm19dnaC2UhV1xuN5oQUs6663synJtXWpzoolcJpgZK/EZXaUvJrVHrVICpeIelv+cXXrTYw5N+yu7lpCp0HX4UXwsvhRTABTPr4O5CXHcpb3PaTrYmly20vtP3W/3X+V+V8PsP/7F/ur9kG4SUscf2X25/ZrP2B9lUFdcDR0nrxi7PwTKpjdA4eg+PhcVw3Cq11+klcl1NfUrL+83nUf9nUjFAOn5aeFq5nEtKd6bSeSbeH4m12W7heZ7dbR42iZtWPEqym6nqr485SwOhcT2MZFqnPsniplwQXSZW38O5RFtRX43GHjadI+k0+YDbM3z0BzPPC7fEmkOeBn9Yv2vjck6dh+XZPu964zrvpQXBf/8LddesenMue2/bTg1m1vWvayiAsA9/1VhQeHAJp+UUXxmaQMddCX+aGSC5mClUYstni4swmozFJBwDrsJhM+O0eVpGWqqCLhdFJ7StxCFrcAVcyGsxuOxZ2SSP6LkE3Az7a/w497l069KLA7bu558CX+1m+h75Ml2zbFjlJW5bDJvospAGMFIDtayPXkR1VyJ+t6BphRyPCHorLjI9nE5KFFNYmlwmSqybL07advOGz4BcowJcYlCVg2dYDcPDNd//c9bfnOmfHL1/UuWnHq//998iGxfu8SbWBaa3Tme3we1h+9S8fHgDB3RVb1jYAOgw/GfIB3ZWc8Uv/Y8V28V28lIuMZl4DlRky8SzF0JweDcSqejYx+pZUyqER0DxEhKaz6dWgeYv3dreboc33wE6aq9Jxx2993XOI+ST44NAt+oaUm9IHg9wC4nfjIVzthKFEcTFgcZF/rCcyAN9mfwmD/LrvNwjtN9eLx7Wh42aTXNf0kIHWsUCvpxhBIH2EvZQoZrdaA3qsGoGzW5Pb6LLIWfaZiAF8EbnFVMLgAaac/uLFocjyiIFofy8Y/por4s+j8Zt4hGFZoCMsmgLR6ZwboD62Aj997gj85iCYdgZ8NmiiL56LnOKWinUVNoI2rop1U0lUJpWD51RzIsfYXS6n280kt+uATmfKdSYmOspMD5vaTYxJI6Ny0kcuMdhuiRThjdb9J4UUgC8o0SNAliCV5eWqjjx9sG3S1pnPHDq85eWV6/b/a+/QxrnV9zdOrJhKL3mwtqZhYkUlfeaZkwdrGo7u7D7Rc+AovLxpU3VxyXSg29hZO6FY0sKiYBJTRbR/Da8YBAqTEQoksRxLVBCB1KW0J2fTPf6Sk0eX1T1U8ehbry+rq+eSKiffZl8/kQu9z7A3X+vLgdlY3wPMYz1sOYrlfKo05E4bnZubnZLJd4gSYgmihNjv+Q/56zzHhwwJlTxVkKeIiOEpwefz/WM9MUazXSUz5n+iZOELxQvnizJjP9qJfq0OF/jXir9On1O49MlFO0ItddVhZuGk4qtL7TlYe+xT9OmywZUlk/BvTsdaLErmshFdmi7WwznQzO4PpRvi482CYIxDKwa0crA4eVDAt/MX0HmwkgwaWaye9Pksfh+ZIBhvEEVP0IUiyC74k9G8lkyPbT9Vfw4U18DV4PqGU/MG4FuzwBbwK/jF7DcHDwwAR93bAwcGZZ0ULzcJrx3QesDEc3q9Lk4n4PR0gFf+BUShRl6h+FG8W0EAJOvBMuYoPVTJHI2sozcMDgIdONINrl+HbxFepaS/IuE6Q0a9juNYno2L4yVYv2rdg1H1NELFoEOV9IbIOvyJUG+CFFB6HVq64QyEuZLk0/eh+UJPZYRMFL6HEHR6NGkINNbdIplfko4EWqX6rfHAyi6Gpa2wFLzVeuybb7+lL0Rc9AX6k0gm2Al/BBdRylqlmW3G98R4XmCbb+/F/8m9qwcmcat4J1pzTSfXpir6qrJ9g2r7LLydYvB23RjeSU1A9/b3oeu0NzRten2ImpjsTsbKzZlmSn/PeMf4afXFXgPjSPBxmJY3BvPypBe1dr+U+iSnO+T9Az1nV/AOVrZLUfJlaEJliHJ77ir8DDaLf86aOrloqtEwOHbwo5nwNZHefQau+mgmN0AKYMFmwnTbPpJGtFYsmpC/38G/gc/ZJsBLzDia+KdY8k9ZyFU8gmcM3pH84o/1yw9xC3D9MF+A6cgZ/y8nEFliCoBr7BlmI/oDPy/QdaCIK9MK6Fx7IBekZW4MHWKv9rYlFR2eSq5HxXTi8AYU9XG9+g5WfCZhVci3bY5aK0h1rZt6CNb5+4qSSn8jcfvOsQPMMt6lPQ6v4l2YselnliU9mAgvO9dXHOb5nD8VJxf34AmbHtrPDgCabye6Vo5QvMVmo9vjQFwHJz4KaPQVERqayP0MItNt9mRvABM4ETa8fH91Q/v75V0VoLSkZWLhqpuOvfexA+XzqsL2sqfnbNpmfzux8JdxmZtxfi99+zI7MLyXXy+3ZR2hrdOxbXnygTfgR79o2xq6Wbww6VP7JE1j74x/PMf08CqzdF7Ubv4muvPJRHNdAo3ufUwsa21PBakdNovEDkXt+cjCy0oofqqsEq0Ru3ea2kztwXtzCqbVPgTvUxvCL17jDqzip3lMayyzYKHKGkr273A/1r2nPNT9Id9zBrCDAqyhK3FPIlaoSUgQlgvtQpfAdgl7hOvCsMAKO5CNlAt0o8jtSE/Bpp5vXOlrPIl++MjdWmOjeCFzk0cJdjIs/NIVy4rrtYt2O0FyZNCTFb/Jura2dKXl3jFuj3lD4IBn8vhJud+syT37/uSuElA6uulefnmBe+2asfoU75hvzGkZcbClObfTXtI+M/xEiZ2iIyw6h3f4PsqEziLp1QRDoknXYcCcxtS/+j7AKSaMtMJAUYGJCZwcH8VZZ/ds3cV2H/i3cnis7JEBFB183r6erZ3OlMTtB6qtZVvjpdhQtWH7P7UhZIthoWriiycD/ekT1A20LkhoWWKJ4gv4SZcLX6MSk5OTkgypTlUrp32WIguJhpimvEm8TACVw0PVaqBiinGxYbx/zD2j7imprFE13zT+flPeozqnM8P4iGkqigWIbBhEsZCA7nLKQrmbDM8bXjIw1jSXK9PcZdtjo/GP39sYW8ieWmlL6Nbt1dGyfecbfafzxAhAAaC2USCZaJ6sEcNhStbpX2z9NdsFeucudcMTpclP2VbXBmb7JnjcXsP6wP7c0oCnkKe7d/zksTSbcdWE6W1VK5alp2bm51ywpFpNyHX/A2r1rTkAeNqdVMtOFEEUPT0zCISHiQoxxkWtjCFMz2MlLEx4SUgIJkJYsSm6i56Cme6xuiZk+AKX/oA7XbBx49bExLX+gGs/wE/wdE0NDAImOp2qPnX71jl3bp1uAI+C5wgw+C3BehxgEl89LmEKPz0uYyF44XEFc8E7j8cwHXz3+A7ul0oej+NV6bPHE3hQXvJ4Co/LbzyeRlgpezxD/NbjWSyMzVExqExyZZx6gQPcw0ePS5jHN4/L2MMvjyus87XHY3gYfPL4Dp4EPzwex/vSvMcTeFq+6/EUnpV3PJ7GQfmDxzM4qDQ9nsVe5QvWoZFwWI4zKMQQHJJrSRQhQxd9Vl5ktRgVOOdooo4GR9WjBhYZ3WR2xrw2eQTWiA13F7N0/BlShMC6TrTVZyoWsbRSRFm3b3TSsuJcNOuNepVTY1FsZlnSVmItM93MSKuzlFtfkk+RRWCXnClyhroqFbsyJVylQtv9gy1Xf5uaEcNZOxZbVrY1FyvcEzmOmLNhbpXjOq+4ha2I94gGT4oe1EmaRyqNlRFVcVGOGJEVqz3NRaNexz9I4UYuYN8VnvuGFkWErhDsK5OzT6IRNkaEhjLVC5lrIoVGtdAYStxUpHZz4QrrTrToX4d3gxPGMhxdc4B0XRYuq8/7oYsazoljs+6PDDynnVrkIkV1g/Uxe21cbuyqHbooL3x02R6dCymskbHqSHMisqOhe2Qai47si0MljEp0bpWh7XQqImWs5P24Z3Qe66jwVx7eZI+bbXx55CMGhXtDLJOXUeN16q6Q266SRp4ydKjDTLSs7S7Xaqenp6H0zBGJwyjr1P6f1rLtXddg5fySMHfgndBxdnhQf5W2/a6KVa6TlNYKW7bD/G13EsqdwuDseiPtsiQuTnmFwpJ5g9XVPcW34k8TN1kSTbutWUHOM+q55tqWEitdGfHmnyyKocubYf32zlyKh64rCZ+2rxSRM7LNV2ENG9ihzTfcx8wVMdoRJx5mJqm1BwXkte2ttY2d3Y1qUcBveGtJfAB42m2WBXQbVxaG//9aEFPTtCkzc2tJxrJglDjkNLHrJMWxNJGUyBpXECdpu2Vm5m4Zt8y8W2bYMjPDdnfLuKOZq1jtWZ2j+e6bee999743oxEE+P0b4NenMR//5yODAIUNaIAPfgQQxDg0ognNaEErlsN4LI8JWAErYiJWwspYBatiNayONbAm1sLaWAfrYj2sjw2wITbCxtgEm2IzbI4tsCW2wtbYBm0IIYwI2tGBTnShGz3YFtthe+yAHbETdkYUMcSRgIEkJmEyejEFUzEN0zEDfZiJXTALs9GPAeyKQczBXMzDbtgde2BP7IW9YdKHi3EoDsM9OB2f4HAcj2NwHq7EJfTjaLyGQ3AKAwziOJyBI/EA3uI4nI+r8C2+wXe4CNfgMTyCazGEFE5EGk/AwqN4HM/gSTyFp/Gps3rP41k8h+uQwdc4CS/hBbyILD7HlzgKC5DDQgwjjwIugI19MIIiSqigjEUYxWdYjKVYgn2xP/bD7bgQB+AvOBAH4Qt8hTvZyCY2s4WtXA6/4jeO5/KcwBXwO8EVOZErkVyZq3BVrsbVuQbX5Fpcm+twXa6HH/Aj1+cG3JAbcWNuwk25GTfnFtySW3FrbsM2hvATXmaYEbazg53sYjd7uC234/bcgTtyJ+6M9/A+o4wxzgQNJjmJk9nLKZzKaZzOGezD9biBM7kLZ3E2+znAXTnIOZyLn/ELPsCHnMfduDv34J7ci3vT5BBTTNPifGaYZY4LuJB5DrNAG3dxhPuwyBI+wscs4zJWuIijXMwlXMp9uR/35194AA/kQTyYh/BQvIJ3eRhexxt4E+/gVbzNw3kEj+RRPJrH8Fgex+N5Ak/kSTyZp/BUnsbTeQbP5Fk8m+fwXJ7H8/lXXsALeREv5iW8lJfxcl7BK3kVr+bfeA2v5XW8njfwRt7Em3kLb+VtvJ138E7exbt5D+/lffw7zuE/eD8f4IN8iA/zET7Kx/g4n+CTfIpP8xk+y+f4Tz7PF/giX+LLfIWv8jW+zjf4Jt/i23yH7/I9vs8P+CE/4sf8hJ/yM37OL/glv+K/+DX/zf/wv/yG3/I7fs8f+CN/4s/8hb/yN/4uEIpIg/jELwEJyjhplCZplhZpleVkvCwvE2QFWVEmykqysqwiq8pqsrqsIWvKWrK2rCPrynqyvmwgG8pGsrFsIpvKZrK5bCFbylaytWwjbRKSsESkXTqkU7qkW3pkW9lOtpcdZEfZSXaWqMQkLgnciJvEkCRuxW14UCbhZtyCh3Aw7scRuFom42HplSm4F/fJVNwt02Q6vpcZ0iczZRccizNxBc7GWbgUJ+NcXI4TcCpOwx0yS2ZLvwzIrjIoc2SuzJPdZHfZQ/aUvWRvMQOZ/JKRbChYKeTa2toSHqNtSm3HwsqIsicYHTZTRbsQND0GokNFa5EVMF0Eo3bGLlgLg6bH5ngqV0xVhufnrcXNqbG4KZ62y2YqZRXKTallYSCRMqtTpj0knPnNctBQoaVCwxNaLpqMsYmsZWHQ0DQsjwHDm9Fy0TypLqlMXVKTxubKjM1VLTwUDisjzZPrRmfHYt/kIbPoyzqHQG85l09bgZyLYK/mn9P8e738c96C9WqmOY/SO0VyC5qn1DkWjMVeDpFOZVfLwkzRsgp5s5DOpQLTzFSlbAXyLrRLTBkPTPOWIO/CN82pz5d3DoEZ3qhC3aj2DmVnYIY3quAtXMEcsUvloj2StRqMQqbBKmSCfVqereX1eeXZLlr7spVCxixWhvNmpdxq17cCszxzsc7coaV1dAVmeeaih9le35KL5tl1y1P68/J06lZ1RgL93uCyV3N/dYPK1Q0a8Dao4m3QgFZQ0QoGvAoqLvwDxVwh469Uj60Df6imUt8KDuhGVvTOH6zLcbQunlsXLxmLA/O8Cpe6aJo3disuXRb683YhU/L3Ze1iwW+7xwH3WKkevaqTbU3Raq7eNOayMBg1PJqWt4Z9pbxZynqxPRa7s4RD3coeZVTp3U/hSJfHuF5PRlqztr3QHLIXWSl7eKjFyXnIytuj1Ya/bBfsUms6ZxWtUq7ktpqi+ZGs6YYtxkgp51TmNsYZZe9sY6+tUUvfcK66L15joK5zU9+wlfE6Tcg53f9g8LsGX8wqm/5J5vCw6WYa6WkPqs83z7nU4Pj8/Vkn8lWF/qnmyIjpPEnDQ2lTpldkRkXm5IKagczMNczK2v7Zucyw2dBvVoKaTcPMbK4h7nxnlnKeJtrT0luX0XjtWGs3mWPlW/XlW7Xyc7XyJ1b+ONQrzh3vG6oWl6kW509b+bIZ1Ll8S6ulVS+W3dKqk/kXuqXl3dK8JGNxKVRkcc55dt36GopZO1CqFhfyu2goOzWqv2HEqS/lfJ2m364ufEv9mo//U5otdv2uVep3zV62awE3vdA4XZ1QwL3kvpNCRlubUtsRQ5kMDGaKpvOEjnoY9J6cUReNg7UMGkdrkTcuqvNFdb5oWBlRtis7lJ3KLmW3skcZVcaUcWVCqflGkx5j6o+pP6b+mPpj6o+pP6b+mPpj6o+pP6b+mPpj6o+pP6b+mPrj6o+rP67+uPrj6o+rP67+uPrj6o+rP67+uPrj6o+rP67+uPoT6k+oP6H+hPoT6k+oP6H+hPoT6k+oP6H+hPoT6k+oP6H+hPoN9RvqN9RvqN9Qv6F+Q/2G+g31G+o31G+o31C/oX5D/Yb6k+pPhgJzvRt3iQs9q/ak2pNqT6o9qfakaw+3eU+Hw5AyrIwo25Udyk5ll7JbWZsvqox5DOn8oVDT/FymUrTSzhtCT3W0Vgppq1hK2c7poXzrPhW7bFVflsWSlfb6hJOB4VzBfWU7L4RCutFanHJ+epze3vWOpMeudl8+VzQDI1ap+kOVdl5wPqNStN2rHUl3SZMxr0iHYWVE2T7O/Rfb0R2pBcvOdNSCzlrQVQu6a0GPBj1ttSBUC8K1IPI/G6a4hAAAAAEAAf//AA8AAQAAAAwAAAAWAAAAAgABAAECVgABAAQAAAACAAAAAHjabY09CsJAEIW/WYNIihDEQqwixDa1BxAxunFRvECIEsRFIdjYePU4LCkt5r15P8wgQMyVL9Fmay8smk/nydvu9qDw9fvJmkg79L3Cvy3FVM5mzM+uUgyuDKlREoy/tzWJfzWeWXAkIJqPSQaVhptCpm5CJJksJZeVKpGjnEJW6Ey0FzNlQWYOjChxZh/YmlLbzuwUbfhS/gACzx0OAAB42q2YC5BWZRnHn+e4yy5LgWu7LbsLTTCwJikVmlxEYqZ1RbREtCL7arDGLZFh/KAZJ/E2wFGilNyU6JWLKUKaHCUR8X75EBTveHnzFjcZb2+bGZGV8fV7zp5v+eJmzDRn/vucPec97/c+z/v/P89zjqiI1MhZ8n2paG077Sxp+sFPpk+Vlh9OP/d8GTb1nB9PkzFSwRgpFsXG/i/nev6506dJtZ2lqJAotdWi/bbZSG2KxkRjKisqa3pMAtOqJlcPBeuqN1YP7Tm2anLNRVWTe0nvIb0X9V5UPbR2et2kyoq6znqpbwOTOJtS15n+L58eXd/W0NHQUT+loaOyose0PQezDQXpUTW5/GDe9KidXnORzVM6bL7yo2Et6DD0mFbXWQKzpkfV5IaNtuZ62Rs2pn5K/ZSeY+3oW2F/6zq7frt63adH29ELX7pQWk16LGroqJ1uqJtkR98xfeemv7nO4lHf1ndTY0Xj+MbXG9Zy1tlU13dT0/rGiqYX7XrTu011jeOb+za92Hx24+uczanrbJ7XPKd5WfO9nO1sntevR79Bzcv6fZ/jYnB1w1r+Ptc43n7BfrmEcm//F+wvBuWomlxC6cCv7Og9pO/c0tHl+R70mGRHypQag6ySQcW8DJejZCQYBUZLnbQWE2krxnIyGAfGFwsyAZwBJvL/mdizsN/AfhNMArOYZzaYA2JwBbgSLGW+Gxl7E3MuAzeD5WAF+C24hXu3gt+B28BKsBrcBdaAu8FacC+4j9+5HzwAHgSPMn+BOdZhH8Oux27APsHYJ8HT4FnwPHgBvAQ8eAW8Bt4Am5lnK9gOdoB/FgvaA1SDT4I+xVhrwadAPWjgWiPoDwaAQXKUtoDPc34M+AL4EjgWfBkcz70RUqejQCvPt3FtXDGvpxQTPRV8jWunc20C487h+nlgKpgBZnN/TtFrDOZy/jPG/Zzzq8DV4BrwS7CAewu592usA4sB8dZbmONW7G3cW8n8t4NV4E6ur+b6Xdg12Luxa7H3YO8D93P+APZB7EPYh7GPYB/FFrDrsI9h12M3YB/HPoHdiH0Kf54Bz4FN4GXwB/Aq2AK2gTfB2+BdEEAneB98AHaCXeBD1mx78RHYXSxEAiJQASqlLqoCPUEv+KVyjKyVM6Wl6GQIGAaOA8Phw4iil5Hs8ygwGvyU69eC68AC8CuwEDhwPWMXgcVgCVjK+Me5vhE8BZ4BfwRbwDbwZtFpb3A4OALUAfSkLWAI+3I0GAq+CIaB48Dx+DYCsB79KuNP4tpp2Ak8cwHxuxDM5Pxi7l/C9cuws8B8xq3Aog+9HawCm7m/FWwHO8Bb4B3wHvgT+DP4C/gr+Bv4O3P8A/wL/BsUiz5ScBioLMZRFegJeuF3JdFL8CbBm4TV2aoSskMlMa0BLcQHH+UYrSHennj7NN4jGTXKRqax9sTaE2tPrD2x9sTaE+tSbD2x9cTWE1tPbD2x9cTWE1tPbD2x9cTWE1vfHdvjWc2eGFr8fBq/lVy/HawCm7m2FWwHO8Bb4B3wHvgT+DP4C/gr+Nu+/kcDivloMP4cK33wphYMSj0s4GHAwyAn8P9o7IlgFuezAWol+3mynyf7mZeBLOXJUJ7sZB4U8ICsUAx4EPAg6AmAOfQrYFzqSQHlerwJeBPwJqBYj1o9SvWo1KNSj0I96vQo06NKjyI9avQo0bwJeBPwJuBNiAYWk4h9lMHd+1bas4Pt0aHuT2kvDjH2qX5nSn8iHRPpWAZShyzaB4pqeUQtYhatQ43QQPa4hd/6OozOwejcPpEZDtgj9tuz37bXhYNG63rGLgKLwRKwlPGHznAPPzzZI5A9AtkjkD0C2SOQPQK88fCmAG8KabRP4loX+40vHr54+HLIO0BmCGSGQGYIZIZAZghkhkBmCHCpAJcKcKkAlwooI4cycjJA+uzeJbVgELnQ1NClBMeeOfbMsWeOPXPsmWPPHHvm2DO3F+Md++fYP8f+OfbPsX+O/XPsn2P/HPvn2D/H/jn2z7F/Lhq4e1fUwm9vTFlzeKrREnPy++4l11tZcxv3TgZUYLqaPF2No6txdDV5uhpHV5Onq3F0NTFdjZNv8+zZ4DsgB77L7xyo0zkYN27k/k38/jJwM1gOVoDfAqo0HVCeDihPB5SnA8rTAeXpgPJ0QHk6oDwdUJ4OKE8H5OiAHB2QowNy8lCqBuuCclkXlMu6oFzKPapyyr8nscbBp7HGw2exz4MXwEvAg1fAa+ANYDzdjDWubsUaX7dj4SxdUp4uydElObokR5fkUh73IQMbl2uxxudPYY3T9dgGxjSC/mTsAWBP1+Tomhxdk6NrcnRNjq7JKdrT0WTxMWAsMK63Mk8b97q6pxzdUy7l/tf4/3TmtA6qq+PJ0fE4Tbh3R5oZrNvJZd1OLut2cmXdTi7rdnJZt5PLup1c1u3ksm4nl3U7uazbydHt5Ol28nQ7ebqdPN1Onm4nT7eTTzW4BWs63IY1Lb6JLenxbc5Nk+9iTZcBa9rsxJo+38eaRj/Amk53Yk2ru7Af4p/twUdgN2oQEIEKUE1260e+7w8+A0qZrh9K8ajEoxDTaYDFARYHWBxgcYDFVq0CTAqwyLQZiKhVn0D0ApELRC0QtUDEAtEKRCoQpUCEAtEJRMaqjY9MgXfxi45fdJkuE3QZ0GVAlwFdBjTp0aRHkx5NejQZ0GRAkwFNejQZ0KRHkwFNBjRpK09YecLKE1aesPKElSfoL6C/gP4C+gvoL6C/gP4C+vPoz6M/j/48+vPoz6M/j/48+vPoz6M/j/48+mP1YA2goqA/j/48+gvoL6C/gP4sWgnas2qUoD2rSAnas8oZ0J7l/oD2LP8HtGc1IKA9j/Y82vNoz6M9j/Y82vNoz2pEQHsB7QW0F9BeQHsB7QW0F9BeQHsB7QW0F9BeQHtWRwLas1oS0J7Vk4D2PNoLaC+gvYD2ApoLaC6guYDmApoLaC6gsYDGPBqznU/QmEdjVtEDGvNozNiQoC+PvowVCbqyqpugK6u8Cbqy6pvAkARdWQVO0JVV4QRdWSVO0JVV4wRdWUVOdH1alRN0ZZU5QVceXXl05dGVR1ceXXl05dGV1baArqy+BXRlNS7om2mdC+gqoCurdQFdWb0L6MpqXkBXVvcCurLaF9CV1b+ArqwGBnTl0VVQi+9HYDdMFhCBipTVLrI3jHv26lPifapNK6PIVLDawWoHq33Z+7PL3p9d9v6cpO/P3037nRhmxzA7htkxzI5hdvwxlcXBbAezHcx2MNvBbAezHcx2MNvBbAezHcx2MNvBbAezHcx2MNvBbLefd+sYZlvNjmG21e0YZrusqrisqrisqrisqjiY7WC2g9kOZjuY7WC2g9kuqyo+qyo+qyo+qyp+n3fvrqrisqrisqrisqriyt7FE5idHPAdfDTjx4CxWY/K/mTv4TEsd7DcZZXEwXJ7b45huUvfm+/kfHXam8Sw3PqTGJZbjxLD8hiWW58Sw3LrVWJYbv1KDMutZ4lhufUtsa5Pe5cYllv/EsNyB8sdLHew3MFyB8sdLHew3GXVw2XVw2XVw5VVD5dVD5dVD5dVD5dVD5dVD5dVD5dVD3fQd+tStRi8T64+WH61fGe5zvKc5bg/ZvlrW1feSnOU5SfLTXVZrrG8Ylo2HZuGS/o17ZpuTbOmV9Oq6RSNSgXdeqBbD3ShgS40SG3pyn56tWD9UdZLBBgQYEAo9QVpnSzNwrxouUaOigaAwZzblZlcmcmVmVyZKcf9V6Wy6nRWqr9DqyBPpLrxaTX4mEqQZvXalPM+zeStKUcPnh23pHzxaUZ8O+WHTzNgZ8oJn2a9nSkPqKr4OBEfJ+63Dpd7+P+onVYnrUZuOLQopLVwa1YDd2S1bu+olGqVRcfqk9Ulq0lWj6wOWQ2y+mO1x+qO1RyrNxv/f9GEJxPhyUTp2R3V0peDgSmvJqZv4YxI38SNyR7eGgc9HPTSu/u5T8h8nlkmY7EnyYlyKvg6OB1M5tpb2HdSZnb94t5Pzv+YJ+d3P3mEnMLfb4FvS7ucDb4DcuAhaVdG6JFgOOdnYBPsHdIeVYNxzMCz0XhwajZTOzO1H2CmdmZqz2Zq32umdmZqZ6Z2ZmrHh+wbk15AZC8Ee76Heb2M/Gzfw1aUfaOpLUVaz2HEeWAqmAZXZmAvws4k012MvTSdITBD0A6wouzbyKBSXWeWmFliZonTNczA2jouYZbLeYr3W6X71Jj/rwBXgrlc6/o+m+jV2F+Aa8AvwQLuLQS/Bg4s4tpi7FLsDeBGQA3XZdiby3JwBev26bpnda0Vbu3PU/Py0vSbRpcnR5e/EzMyx8gcI3N4U2B0Dm8K6dfFy7G8y+KNwxuHNwneOLzJ6zxm7fLI4ZHDowSPHB45vTb96pzPvMrjVR6vHF7ldQn3lnJ+A6A7wbM8njk8c7r8AO8mh7GywKqCxVgqu3feIk6dUfu20qv0vQGPHB45PHLZLrt0ZzssBtl3gcNL7x57caJQxomE2BZ40uJbyPhQ6O7zasr4kDBDwgxJus4Z6Xfa0L161Q4qRg94m8DbpLRi+IneuVbZvWsdZXzrLfbdeHb6bd8ibRH1POuJqCeinjk8EfVE0KLmiJojao7ckb3Jdb9pVXXPs6Ds+exZ6cPKYlYWMyowKqR727WHIfvFwBMh+8XAU7b6mNXHqV9phS09VVY1+1gFTn0KkfULFvUCftnqCvv4tte68Mnjk8cn86TADIV0zoI93X1FtYkI1tj+M38tOqU3kSPlc8R8qHxBhsmx1ObhMkJGyig5QUaT48ZIK/mvTcaRlU4lA04Q8pecScX7FvnpbHJTTr4ns2S2zBH6bLlS5spPZZ78TH4uV0mHXCvXyQL5lSwUJ9fLIlksS2Sp3CA3yk3k5ZtluayQW+V3cpuslN/Lat5018hauZdc97A8Io9KQdbJY7JeNsjjslGekmfkOXleNsmL8pK8LF7+IK/Iq/KavC5vkJM/lH/IP+Vf8m8pKu7qYVqtvfVwPULrtEEbtVkH6WBt0SP1czpEj9ah+kUdpsfp8TpcR+hIHaUn6In6FW3VNh2np+h4PU0n6Bl6jp6r7fpD/ZGep1P0fJ2q0/QCna4z9EL9ic7Ui/USvVQv08t1ls7WWK/QuTpPr9Krdb7+Qq/RDr1WF+hCRde6RH+jN+lyXaG36K26UhO9Xe/QVfp7vVNX6126Ru/WtXqP3qv36f36gD6oD+nD+og+qgVdp4/pet2gj+sTulGf1Kf0aX1Gn9Xn9HndpC/oi/qSvqxUXX1FX9XNukW36jbdrjv0LX1H39NOfV8/0J26S/+uH+nuSKIoqogqox5RVVQd9Yxqol7RJ6J+Uf/oM9FnowHRwGhQ1PIf1ytbtAAAAAABAAAAANQkmLoAAAAAyWNJHgAAAADV+wkeAAFZ1VieAAA=') format('woff'); + font-weight: 700; + font-style: italic; + +} + +@font-face { + font-family: 'Open Sans'; + src: + /* url('./open-sans-latin-greek/opensans-bold-webfont.woff2') format('woff2'), */ + url('data:application/font-woff;base64,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') format('woff'); + font-weight: 700; + font-style: normal; + +} + +/* @import "./vendor/fonts/inconsolata.css"; */ + +/* Generated by Font Squirrel (https://www.fontsquirrel.com) */ + +/* +- Disabled WOFF2 until universal browser support exists +*/ + +@font-face { + font-family: 'Inconsolata'; + src: + /*url('./inconsolata-ascii/inconsolata-webfont.woff2') format('woff2'),*/ + url('data:application/font-woff;base64,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') format('woff'); + font-weight: normal; + font-style: normal; + +} + +/* @import "./vendor/fonts/font-awesome.css"; */ + +/* @import "./vendor/fonts/font-awesome-form.css"; */ + +/* @import "./vendor/fonts/font-awesome-custom.css"; */ + +/* @import "./vendor/fonts/material-form.css"; */ + +/* tippy theme overrides */ + +.tippy-popper .tippy-tooltip { + padding: 0; + text-align: inherit; +} + +.tippy-popper[x-placement^=top] .tippy-tooltip .tippy-arrow { + border-top: 7px solid #fff; + border-right: 7px solid transparent; + border-left: 7px solid transparent; + bottom: -7px; + margin: 0 7px; +} + +.tippy-popper[x-placement^=bottom] .tippy-tooltip .tippy-arrow { + border-bottom: 7px solid #fff; + border-right: 7px solid transparent; + border-left: 7px solid transparent; + top: -7px; + margin: 0 7px; +} + +.tippy-popper[x-placement^=left] .tippy-tooltip .tippy-arrow { + border-left: 7px solid #fff; + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; + right: -7px; + margin: 4px 0; +} + +.tippy-popper[x-placement^=right] .tippy-tooltip .tippy-arrow { + border-right: 7px solid #fff; + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; + left: -7px; + margin: 4px 0; +} + +.tippy-popper .tippy-tooltip.light-theme { + color: inherit; + background-color: #fff; +} + +.tippy-popper[x-placement^=top] .tippy-tooltip.light-theme .tippy-arrow { + border-top-color: #fff; +} + +.tippy-popper[x-placement^=bottom] .tippy-tooltip.light-theme .tippy-arrow { + border-bottom-color: #fff; +} + +.tippy-popper[x-placement^=left] .tippy-tooltip.light-theme .tippy-arrow { + border-left-color: #fff; +} + +.tippy-popper[x-placement^=right] .tippy-tooltip.light-theme .tippy-arrow { + border-right-color: #fff; +} + +.tippy-popper .tippy-tooltip.dark-theme { + color: #fff; + background-color: #333; +} + +.tippy-popper[x-placement^=top] .tippy-tooltip.dark-theme .tippy-arrow { + border-top-color: #333; +} + +.tippy-popper[x-placement^=bottom] .tippy-tooltip.dark-theme .tippy-arrow { + border-bottom-color: #333; +} + +.tippy-popper[x-placement^=left] .tippy-tooltip.dark-theme .tippy-arrow { + border-left-color: #333; +} + +.tippy-popper[x-placement^=right] .tippy-tooltip.dark-theme .tippy-arrow { + border-right-color: #333; +} + +.tippy, .tippy-popper, .tippy-tooltip { + font-size: inherit; +} + +.tippy-popper .tippy-tooltip { + -webkit-box-shadow: 0 4px 20px 4px rgba(0, 20, 60, .2), 0 4px 80px -8px rgba(0, 20, 60, .3); + box-shadow: 0 4px 20px 4px rgba(0, 20, 60, .2), 0 4px 80px -8px rgba(0, 20, 60, .3); +} + +.tippy-popper { + /* + commented out to allow tooltips to be configured using custom zindex values + z-index: 999999 !important; + + commented out to allow tooltips to be more easily aligned outside of full-screen views + position: fixed !important; + */ +} + +.react-tabs__tab-list { + border-bottom: 1px solid #aaa; + margin: 0 0 10px; + padding: 0; +} + +.react-tabs__tab { + display: inline-block; + border: 1px solid transparent; + border-bottom: none; + bottom: -1px; + position: relative; + list-style: none; + padding: 6px 12px; + cursor: pointer; +} + +.react-tabs__tab--selected { + background: #fff; + border-color: #aaa; + color: black; + border-radius: 5px 5px 0 0; +} + +.react-tabs__tab--disabled { + color: GrayText; + cursor: default; +} + +.react-tabs__tab:focus { + -webkit-box-shadow: 0 0 5px hsl(208, 99%, 50%); + box-shadow: 0 0 5px hsl(208, 99%, 50%); + border-color: hsl(208, 99%, 50%); + outline: none; +} + +.react-tabs__tab:focus:after { + content: ""; + position: absolute; + height: 5px; + left: -4px; + right: -4px; + bottom: -5px; + background: #fff; +} + +.react-tabs__tab-panel { + display: none; +} + +.react-tabs__tab-panel--selected { + display: block; +} diff --git a/public/deps.js b/public/deps.js index 7dd53df8..99b0fe7f 120000 --- a/public/deps.js +++ b/public/deps.js @@ -1 +1,116242 @@ -../build/deps.js \ No newline at end of file +/******/ (function(modules) { // webpackBootstrap +/******/ // install a JSONP callback for chunk loading +/******/ var parentJsonpFunction = window["webpackJsonp"]; +/******/ window["webpackJsonp"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) { +/******/ // add "moreModules" to the modules object, +/******/ // then flag all "chunkIds" as loaded and fire callback +/******/ var moduleId, chunkId, i = 0, resolves = [], result; +/******/ for(;i < chunkIds.length; i++) { +/******/ chunkId = chunkIds[i]; +/******/ if(installedChunks[chunkId]) { +/******/ resolves.push(installedChunks[chunkId][0]); +/******/ } +/******/ installedChunks[chunkId] = 0; +/******/ } +/******/ for(moduleId in moreModules) { +/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { +/******/ modules[moduleId] = moreModules[moduleId]; +/******/ } +/******/ } +/******/ if(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules); +/******/ while(resolves.length) { +/******/ resolves.shift()(); +/******/ } +/******/ if(executeModules) { +/******/ for(i=0; i < executeModules.length; i++) { +/******/ result = __webpack_require__(__webpack_require__.s = executeModules[i]); +/******/ } +/******/ } +/******/ return result; +/******/ }; +/******/ +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // objects to store loaded and loading chunks +/******/ var installedChunks = { +/******/ 1: 0 +/******/ }; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // on error function for async loading +/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(4); +var core = __webpack_require__(25); +var hide = __webpack_require__(17); +var redefine = __webpack_require__(18); +var ctx = __webpack_require__(26); +var PROTOTYPE = 'prototype'; + +var $export = function (type, name, source) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]; + var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); + var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); + var key, own, out, exp; + if (IS_GLOBAL) source = name; + for (key in source) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + // export native or passed + out = (own ? target : source)[key]; + // bind timers to global for call from export context + exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // extend global + if (target) redefine(target, key, out, type & $export.U); + // export + if (exports[key] != out) hide(exports, key, exp); + if (IS_PROTO && expProto[key] != out) expProto[key] = out; + } +}; +global.core = core; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +if (false) { + module.exports = require('./cjs/react.production.min.js'); +} else { + module.exports = __webpack_require__(417); +} + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var React = __webpack_require__(1); + +var parseTag = __webpack_require__(418); + +module.exports = h; + +function h(componentOrTag, properties, children) { + // if only one argument which is an array, wrap items with React.Fragment + if (arguments.length === 1 && Array.isArray(componentOrTag)) { + return h(React.Fragment, null, componentOrTag); + } else if (!children && isChildren(properties)) { + // If a child array or text node are passed as the second argument, shift them + children = properties; + properties = {}; + } else if (arguments.length === 2) { + // If no children were passed, we don't want to pass "undefined" + // and potentially overwrite the `children` prop + children = []; + } + + properties = properties ? Object.assign({}, properties) : {}; + + // Supported nested dataset attributes + if (properties.dataset) { + Object.keys(properties.dataset).forEach(function unnest(attrName) { + var dashedAttr = attrName.replace(/([a-z])([A-Z])/, function dash(match) { + return match[0] + '-' + match[1].toLowerCase(); + }); + properties['data-' + dashedAttr] = properties.dataset[attrName]; + }); + + properties.dataset = undefined; + } + + // Support nested attributes + if (properties.attributes) { + Object.keys(properties.attributes).forEach(function unnest(attrName) { + properties[attrName] = properties.attributes[attrName]; + }); + + properties.attributes = undefined; + } + + // When a selector, parse the tag name and fill out the properties object + if (typeof componentOrTag === 'string') { + componentOrTag = parseTag(componentOrTag, properties); + } + + // Create the element + var args = [componentOrTag, properties].concat(children); + return React.createElement.apply(React, args); +} + +function isChildren(x) { + return typeof x === 'string' || typeof x === 'number' || Array.isArray(x); +} + + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(7); +module.exports = function (it) { + if (!isObject(it)) throw TypeError(it + ' is not an object!'); + return it; +}; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); +if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef + + +/***/ }), +/* 5 */ +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (e) { + return true; + } +}; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_RESULT__;/** + * @license + * Lodash + * Copyright JS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.5'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Error message constants. */ + var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', + FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] + ]; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + domExcTag = '[object DOMException]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reUnescapedHtml = /[&<>"']/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g, + reTrimStart = /^\s+/, + reTrimEnd = /\s+$/; + + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, + reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; + + /** Used to match words composed of alphanumeric characters. */ + var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to match Latin Unicode letters (excluding mathematical operators). */ + var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + + /** Used to compose unicode capture groups. */ + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match apostrophes. */ + var reApos = RegExp(rsApos, 'g'); + + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** Used to match complex or compound words. */ + var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji + ].join('|'), 'g'); + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', + '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = + cloneableTags[boolTag] = cloneableTags[dateTag] = + cloneableTags[float32Tag] = cloneableTags[float64Tag] = + cloneableTags[int8Tag] = cloneableTags[int16Tag] = + cloneableTags[int32Tag] = cloneableTags[mapTag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[setTag] = + cloneableTags[stringTag] = cloneableTags[symbolTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map Latin Unicode letters to basic Latin letters. */ + var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, + nodeIsDate = nodeUtil && nodeUtil.isDate, + nodeIsMap = nodeUtil && nodeUtil.isMap, + nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, + nodeIsSet = nodeUtil && nodeUtil.isSet, + nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /*--------------------------------------------------------------------------*/ + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + var asciiSize = baseProperty('length'); + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function asciiWords(string) { + return string.match(reAsciiWord) || []; + } + + /** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + /** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ + function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; + } + + /** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + var deburrLetter = basePropertyOf(deburredLetters); + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ + function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } + + /** + * Gets the value at `key`, unless `key` is "__proto__". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function safeGet(object, key) { + return key == '__proto__' + ? undefined + : object[key]; + } + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + /** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ + function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; + } + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + /** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; + } + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function unicodeWords(string) { + return string.match(reUnicodeWord) || []; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + var runInContext = (function runInContext(context) { + context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); + + /** Built-in constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = context['__core-js_shared__']; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, + symIterator = Symbol ? Symbol.iterator : undefined, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** Mocked built-ins. */ + var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, + ctxNow = Date && Date.now !== root.Date.now && Date.now, + ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = Date.now, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(context, 'DataView'), + Map = getNative(context, 'Map'), + Promise = getNative(context, 'Promise'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; + } + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB) as well as ES2015 template strings. Change the + * following template settings to use alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash + } + }; + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + // Ensure `LazyWrapper` is an instance of `baseLodash`. + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ + function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; + } + + /** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + + /** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + + return result; + } + + if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + + return result; + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; + } + + /** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ + function baseConforms(source) { + var props = keys(source); + return function(object) { + return baseConformsTo(object, source, props); + }; + } + + /** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ + function baseConformsTo(object, source, props) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in object)) || !predicate(value)) { + return false; + } + } + return true; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + /** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ + function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); + } + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + path = castPath(path, object); + object = parent(object, path); + var func = object == null ? object : object[toKey(last(path))]; + return func == null ? undefined : apply(func, object, args); + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + /** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ + function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; + } + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + if (isObject(srcValue)) { + stack || (stack = new Stack); + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); + } + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } + + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + var index = -1; + iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, paths) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ + function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); + + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ + function baseSample(collection) { + return arraySample(values(collection)); + } + + /** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values(collection)); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array == null ? 0 : array.length, + valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + /** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ + function baseToNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + return +value; + } + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + /** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); + } + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + /** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + var castRest = baseRest; + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** + * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). + * + * @private + * @param {number|Object} id The timer id or timeout object of the timer to clear. + */ + var clearTimeout = ctxClearTimeout || function(id) { + return root.clearTimeout(id); + }; + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; + } + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, getIteratee(iteratee, 2), accumulator); + }; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = getIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return flatRest(function(funcs) { + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) + ? wrapper[funcName]() + : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value)) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); + } + + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG, + isBind = bitmask & WRAP_BIND_FLAG, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG, + isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), + isFlip = bitmask & WRAP_FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } + + /** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ + function createMathOperation(operator, defaultValue) { + return function(value, other) { + var result; + if (value === undefined && other === undefined) { + return defaultValue; + } + if (value !== undefined) { + result = value; + } + if (other !== undefined) { + if (result === undefined) { + return other; + } + if (typeof value == 'string' || typeof other == 'string') { + value = baseToString(value); + other = baseToString(other); + } else { + value = baseToNumber(value); + other = baseToNumber(other); + } + result = operator(value, other); + } + return result; + }; + } + + /** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ + function createOver(arrayFunc) { + return flatRest(function(iteratees) { + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + return baseRest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); + } + + /** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ + function createPadding(length, chars) { + chars = chars === undefined ? ' ' : baseToString(chars); + + var charsLength = chars.length; + if (charsLength < 2) { + return charsLength ? baseRepeat(chars, length) : chars; + } + var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); + return hasUnicode(chars) + ? castSlice(stringToArray(result), 0, length).join('') + : result.slice(0, length); + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ + function createRelationalOperation(operator) { + return function(value, other) { + if (!(typeof value == 'string' && typeof other == 'string')) { + value = toNumber(value); + other = toNumber(other); + } + return operator(value, other); + }; + } + + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); + } + + /** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); + if (precision) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; + } + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; + + /** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ + function createToPairs(keysFunc) { + return function(object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; + } + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); + } + + /** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ + function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; + } + + /** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ + function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getHolder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } + + /** + * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, + * this function returns the custom method, otherwise it returns `baseIteratee`. + * If arguments are provided, the chosen function is invoked with them and + * its result is returned. + * + * @private + * @param {*} [value] The value to convert to an iteratee. + * @param {number} [arity] The arity of the created iteratee. + * @returns {Function} Returns the chosen function or its result. + */ + function getIteratee() { + var result = lodash.iteratee || iteratee; + result = result === iteratee ? baseIteratee : result; + return arguments.length ? result(arguments[0], arguments[1]) : result; + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + /** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; + }; + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ + function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } + } + + /** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ + function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ + var isMaskable = coreJsData ? isFunction : stubFalse; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = shortOut(baseSetData); + + /** + * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @returns {number|Object} Returns the timer id or timeout object. + */ + var setTimeout = ctxSetTimeout || function(func, wait) { + return root.setTimeout(func, wait); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ + function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); + } + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ + function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, getIteratee(predicate, 3), index); + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, getIteratee(predicate, 3), index, true); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, getIteratee(iteratee, 2)) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); + } + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); + } + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, getIteratee(iteratee, 2)) + : []; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined; + return (array && array.length) ? baseUniq(array, undefined, comparator) : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + */ + var wrapperAt = flatRest(function(paths) { + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function(object) { return baseAt(object, paths); }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); + } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined + }); + return new LodashWrapper(value, this.__chain__).thru(function(array) { + if (length && !array.length) { + array.push(undefined); + } + return array; + }); + }); + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ + function wrapperNext() { + if (this.__values__ === undefined) { + this.__values__ = toArray(this.value()); + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; + } + + /** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ + function wrapperToIterator() { + return this; + } + + /** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); + } + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + var findLast = createFind(findLastIndex); + + /** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ + function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); + } + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ + function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } + }); + + /** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); + } + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invokeMap = baseRest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); + }); + return result; + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ + var keyBy = createAggregator(function(result, value, key) { + baseAssignValue(result, key, value); + }); + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ + function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseOrderBy(collection, iteratees, orders); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduce + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); + } + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, negate(getIteratee(predicate, 3))); + } + + /** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ + function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); + } + + /** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ + function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + if (isArrayLike(collection)) { + return isString(collection) ? stringSize(collection) : collection.length; + } + var tag = getTag(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return baseKeys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] + */ + var sortBy = baseRest(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = ctxNow || function() { + return root.Date.now(); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(func, bitmask, thisArg, partials, holders); + }); + + /** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = baseRest(function(object, key, partials) { + var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; + } + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; + } + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ + function flip(func) { + return createWrap(func, WRAP_FLIP_FLAG); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + switch (args.length) { + case 0: return !predicate.call(this); + case 1: return !predicate.call(this, args[0]); + case 2: return !predicate.call(this, args[0], args[1]); + case 3: return !predicate.call(this, args[0], args[1], args[2]); + } + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with its arguments transformed. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms=[_.identity]] + * The argument transforms. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, [square, doubled]); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */ + var overArgs = castRest(function(func, transforms) { + transforms = (transforms.length == 1 && isArray(transforms[0])) + ? arrayMap(transforms[0], baseUnary(getIteratee())) + : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); + + var funcsLength = transforms.length; + return baseRest(function(args) { + var index = -1, + length = nativeMin(args.length, funcsLength); + + while (++index < length) { + args[index] = transforms[index].call(this, args[index]); + } + return apply(func, this, args); + }); + }); + + /** + * Creates a function that invokes `func` with `partials` prepended to the + * arguments it receives. This method is like `_.bind` except it does **not** + * alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 0.2.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partial)); + return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); + }); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to the arguments it receives. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partialRight)); + return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); + }); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ + var rearg = flatRest(function(func, indexes) { + return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. + * + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined ? start : toInteger(start); + return baseRest(func, start); + } + + /** + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). + * + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start == null ? 0 : nativeMax(toInteger(start), 0); + return baseRest(function(args) { + var array = args[start], + otherArgs = castSlice(args, 0, start); + + if (array) { + arrayPush(otherArgs, array); + } + return apply(func, this, otherArgs); + }); + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */ + function unary(func) { + return ary(func, 1); + } + + /** + * Creates a function that provides `value` to `wrapper` as its first + * argument. Any additional arguments provided to the function are appended + * to those provided to the `wrapper`. The wrapper is invoked with the `this` + * binding of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

' + func(text) + '

'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

fred, barney, & pebbles

' + */ + function wrap(value, wrapper) { + return partial(castFunction(wrapper), value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ + function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; + } + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ + function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ + function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ + function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + var gt = createRelationalOperation(baseGt); + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + var gte = createRelationalOperation(function(value, other) { + return value >= other; + }); + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ + var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + + /** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); + } + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ + function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + if (!isObjectLike(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ + function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + + /** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ + function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); + } + + /** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ + function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (isMaskable(value)) { + throw new Error(CORE_ERROR_TEXT); + } + return baseIsNative(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ + function isNil(value) { + return value == null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ + function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ + function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; + } + + /** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ + function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + var lt = createRelationalOperation(baseLt); + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + * `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + var lte = createRelationalOperation(function(value, other) { + return value <= other; + }); + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (symIterator && value[symIterator]) { + return iteratorToArray(value[symIterator]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); + } + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + + /** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3.2); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3.2'); + * // => 3 + */ + function toSafeInteger(value) { + return value + ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) + : (value === 0 ? value : 0); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); + }); + + /** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer); + }); + + /** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */ + var at = flatRest(baseAt); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ + var defaultsDeep = baseRest(function(args) { + args.push(undefined, customDefaultsMerge); + return apply(mergeWith, undefined, args); + }); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ + function findKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); + } + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + function findLastKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); + } + + /** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ + function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ + function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forOwn(object, iteratee) { + return object && baseForOwn(object, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ + function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, getIteratee(iteratee, 3)); + } + + /** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ + function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); + } + + /** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ + function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasPath(object, path, baseHas); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + result[value] = key; + }, constant(identity)); + + /** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ + var invertBy = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + }, getIteratee); + + /** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ + var invoke = baseRest(baseInvoke); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + function mapKeys(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, iteratee(value, key, object), value); + }); + return result; + } + + /** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + function mapValues(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, key, iteratee(value, key, object)); + }); + return result; + } + + /** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ + var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); + + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ + var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = flatRest(function(object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function(path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; + }); + + /** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ + function omitBy(object, predicate) { + return pickBy(object, negate(getIteratee(predicate))); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ + function pickBy(object, predicate) { + if (object == null) { + return {}; + } + var props = arrayMap(getAllKeysIn(object), function(prop) { + return [prop]; + }); + predicate = getIteratee(predicate); + return basePickBy(object, props, function(value, path) { + return predicate(value, path[0]); + }); + } + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + path = castPath(path, object); + + var index = -1, + length = path.length; + + // Ensure the loop is entered when path is empty. + if (!length) { + length = 1; + object = undefined; + } + while (++index < length) { + var value = object == null ? undefined : object[toKey(path[index])]; + if (value === undefined) { + index = length; + value = defaultValue; + } + object = isFunction(value) ? value.call(object) : value; + } + return object; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */ + function setWith(object, path, value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseSet(object, path, value, customizer); + } + + /** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ + var toPairs = createToPairs(keys); + + /** + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) + */ + var toPairsIn = createToPairs(keysIn); + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function transform(object, iteratee, accumulator) { + var isArr = isArray(object), + isArrLike = isArr || isBuffer(object) || isTypedArray(object); + + iteratee = getIteratee(iteratee, 4); + if (accumulator == null) { + var Ctor = object && object.constructor; + if (isArrLike) { + accumulator = isArr ? new Ctor : []; + } + else if (isObject(object)) { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; + } + else { + accumulator = {}; + } + } + (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, ['a', '0', 'b', 'c']); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ + function unset(object, path) { + return object == null ? true : baseUnset(object, path); + } + + /** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */ + function update(object, path, updater) { + return object == null ? object : baseUpdate(object, path, castFunction(updater)); + } + + /** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */ + function updateWith(object, path, updater, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /** + * Creates an array of the own and inherited enumerable string keyed property + * values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return object == null ? [] : baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); + } + + /** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ + function inRange(number, start, end) { + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + number = toNumber(number); + return baseInRange(number, start, end); + } + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); + }); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; + } + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ + function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; + } + + /** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar--'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */ + var lowerCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase(); + }); + + /** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */ + var lowerFirst = createCaseFirst('toLowerCase'); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + if (!length || strLength >= length) { + return string; + } + var mid = (length - strLength) / 2; + return ( + createPadding(nativeFloor(mid), chars) + + string + + createPadding(nativeCeil(mid), chars) + ); + } + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */ + function padEnd(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (string + createPadding(length - strLength, chars)) + : string; + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */ + function padStart(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (createPadding(length - strLength, chars) + string) + : string; + } + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a + * hexadecimal, in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the + * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + if (guard || radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=1] The number of times to repeat the string. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n, guard) { + if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + return baseRepeat(toString(string), n); + } + + /** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on + * [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */ + function replace() { + var args = arguments, + string = toString(args[0]); + + return args.length < 3 ? string : string.replace(args[1], args[2]); + } + + /** + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Splits `string` by `separator`. + * + * **Note:** This method is based on + * [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ + function split(string, separator, limit) { + if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { + separator = limit = undefined; + } + limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; + if (!limit) { + return []; + } + string = toString(string); + if (string && ( + typeof separator == 'string' || + (separator != null && !isRegExp(separator)) + )) { + separator = baseToString(separator); + if (!separator && hasUnicode(string)) { + return castSlice(stringToArray(string), 0, limit); + } + } + return string.split(separator, limit); + } + + /** + * Converts `string` to + * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @since 3.1.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar--'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + upperFirst(word); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, + * else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = toString(string); + position = position == null + ? 0 + : baseClamp(toInteger(position), 0, string.length); + + target = baseToString(target); + return string.slice(position, position + target.length) == target; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + * The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + * The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + * An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + * The "interpolate" delimiter. + * @param {string} [options.sourceURL='lodash.templateSources[n]'] + * The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + * The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': '