verdaccio 5.8.0 β†’ 5.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,46 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [5.10.1](https://github.com/verdaccio/verdaccio/compare/v5.10.0...v5.10.1) (2022-05-05)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * duplicated groups on use jwt tokens ([#3151](https://github.com/verdaccio/verdaccio/issues/3151)) ([51803c3](https://github.com/verdaccio/verdaccio/commit/51803c34776ca1e868399ede4f17a087c9a39bc5))
11
+
12
+ ## [5.10.0](https://github.com/verdaccio/verdaccio/compare/v5.9.0...v5.10.0) (2022-04-26)
13
+
14
+
15
+ ### Features
16
+
17
+ * **deps:** update dependency @verdaccio/ui-theme to v6.0.0-6-next.24 (5.x) ([#3130](https://github.com/verdaccio/verdaccio/issues/3130)) ([da01a14](https://github.com/verdaccio/verdaccio/commit/da01a14e70de722aab0c99bb81997886fae35727))
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * **deps:** update dependency @verdaccio/local-storage to v10.2.1 ([#3118](https://github.com/verdaccio/verdaccio/issues/3118)) ([0f9d6ec](https://github.com/verdaccio/verdaccio/commit/0f9d6eca34476505df95e67acd2f77fbce3a1c96))
23
+ * **deps:** update dependency @verdaccio/readme to v10.3.3 ([#3119](https://github.com/verdaccio/verdaccio/issues/3119)) ([78b9c8b](https://github.com/verdaccio/verdaccio/commit/78b9c8b33ee1c1894d654b69b8c88631c5139cc9))
24
+ * **deps:** update dependency body-parser to v1.20.0 ([#3123](https://github.com/verdaccio/verdaccio/issues/3123)) ([954886d](https://github.com/verdaccio/verdaccio/commit/954886d2db32088ea246dd3b5748c25ac56c30b0))
25
+ * **deps:** update dependency dayjs to v1.11.1 ([#3131](https://github.com/verdaccio/verdaccio/issues/3131)) ([27035f9](https://github.com/verdaccio/verdaccio/commit/27035f9403261b342d9d3a3826e6b92c45de1954))
26
+ * **deps:** update dependency lru-cache to v7 ([#3124](https://github.com/verdaccio/verdaccio/issues/3124)) ([7ceaa17](https://github.com/verdaccio/verdaccio/commit/7ceaa1799c80a6cde23255affbfe076f6e44cb9d))
27
+ * **deps:** update dependency marked to v4.0.14 ([#3120](https://github.com/verdaccio/verdaccio/issues/3120)) ([8a60050](https://github.com/verdaccio/verdaccio/commit/8a60050b8b4594aae0d3c942b23aaf33f857ebcf))
28
+ * **deps:** update dependency semver to v7.3.7 ([#3121](https://github.com/verdaccio/verdaccio/issues/3121)) ([157d5c5](https://github.com/verdaccio/verdaccio/commit/157d5c5ce415d81500bdc71435ccf30b19631aef))
29
+ * **deps:** update dependency verdaccio-audit to v10.2.1 ([#3122](https://github.com/verdaccio/verdaccio/issues/3122)) ([decd7f1](https://github.com/verdaccio/verdaccio/commit/decd7f1e5cfc48bbf159f1ac42ecaa7861e6a5f9))
30
+
31
+ ## [5.9.0](https://github.com/verdaccio/verdaccio/compare/v5.8.0...v5.9.0) (2022-04-12)
32
+
33
+
34
+ ### Features
35
+
36
+ * **web:** add a config item to web,let the developer can select whether enable the html cache ([#3110](https://github.com/verdaccio/verdaccio/issues/3110)) ([b30ba81](https://github.com/verdaccio/verdaccio/commit/b30ba81b86d3fa11a18bdb32a7adf162f16794e0))
37
+
38
+
39
+ ### Bug Fixes
40
+
41
+ * **deps:** update dependency @verdaccio/ui-theme to v6.0.0-6-next.23 ([#3106](https://github.com/verdaccio/verdaccio/issues/3106)) ([b963f7d](https://github.com/verdaccio/verdaccio/commit/b963f7db2a2273983c0d5b4792a84601be732823))
42
+ * **deps:** update dependency body-parser to v1.19.2 ([#3087](https://github.com/verdaccio/verdaccio/issues/3087)) ([8cee85f](https://github.com/verdaccio/verdaccio/commit/8cee85f811effe5ba95458f18381beddaa2850dc))
43
+ * **deps:** update dependency dayjs to v1.11.0 ([#3094](https://github.com/verdaccio/verdaccio/issues/3094)) ([4cc1877](https://github.com/verdaccio/verdaccio/commit/4cc18773b73e387ef362de6438965ca198114bcb))
44
+
5
45
  ## [5.8.0](https://github.com/verdaccio/verdaccio/compare/v5.7.1...v5.8.0) (2022-03-12)
6
46
 
7
47
 
package/README.md CHANGED
@@ -39,9 +39,9 @@ Are you still using **Verdaccio 4**?. Check the [migration guide](https://verdac
39
39
 
40
40
  ## Donations
41
41
 
42
- Verdaccio is run by **volunteers**; nobody is working full-time on it. If you find this project to be useful and would like to support its development, consider making a donation - **your logo might end up in this readme.** πŸ˜‰
42
+ Verdaccio is run by **volunteers**; nobody is working full-time on it. If you find this project to be useful and would like to support its development and maintenance.
43
43
 
44
- **[Donate](https://github.com/sponsors/verdaccio)** πŸ’΅πŸ‘πŸ» starting from _$1/month_ or just one single contribution.
44
+ You can donate **[GitHub Sponsors](https://github.com/sponsors/verdaccio)** or **[Open Collective](https://opencollective.com/verdaccio)** πŸ’΅πŸ‘πŸ» starting from _$1/month_ or just one single contribution.
45
45
 
46
46
  ## What does Verdaccio do for me?
47
47
 
@@ -67,14 +67,22 @@ If you want to use a modified version of some 3rd-party package (for example, yo
67
67
  Verdaccio has proved to be a lightweight registry that can be
68
68
  booted in a couple of seconds, fast enough for any CI. Many open source projects use verdaccio for end to end testing, to mention some examples, **create-react-app**, **mozilla neutrino**, **pnpm**, **storybook**, **alfresco** or **eclipse theia**. You can read more in dedicated article to E2E in our blog.
69
69
 
70
- ## Talks
70
+ ## Next talks
71
71
 
72
- ### **Using Docker and Verdaccio to make Integration Testing Easy - Docker All Hands #4 December - 2021**.
72
+ - [**Deep dive into Verdaccio, a lightweight Node.js registry - June 29th 2022**](https://www.nodetlv.com/)
73
+ - [**How to improve your workflows with Verdaccio, your private Node.js registry - Global Summit for Node.js - May 18th 2022**](https://events.geekle.us/nodejs/)
73
74
 
74
- [![docker](https://cdn.verdaccio.dev/readme/docker-all-hands-jpicado-talk.jpg)](https://www.youtube.com/watch?v=zRI0skF1f8I)
75
+ ## The latest talk
76
+
77
+ <div>
78
+ <a href="https://portal.gitnation.org/contents/five-ways-of-taking-advantage-of-verdaccio-your-private-and-proxy-nodejs-registry">
79
+ <img src="https://cdn.verdaccio.dev/readme/nodejscongress2022.jpg" alt="nodejs" width="300"/>
80
+ </a>
81
+ </div>
75
82
 
76
83
  You might want to check out as well our previous talks:
77
84
 
85
+ - [Using Docker and Verdaccio to make Integration Testing Easy - Docker All Hands #4 December - **Juan Picado** - 2021](https://www.youtube.com/watch?v=zRI0skF1f8I)
78
86
  - [**Juan Picado** – Testing the integrity of React components by publishing in a private registry](https://www.youtube.com/watch?v=bRKZbrlQqLY&t=16s&ab_channel=ReactFinland)
79
87
  - [BeerJS Cba Meetup No. 53 May 2021 - **Juan Picado** React Finland - 2021](https://www.youtube.com/watch?v=6SyjqBmS49Y&ab_channel=BeerJSCba)
80
88
  - [Node.js Dependency Confusion Attacks - April 2021 - **Juan Picado**](https://www.youtube.com/watch?v=qTRADSp3Hpo)
@@ -68,7 +68,7 @@ function resolveLogo(config, req) {
68
68
  }
69
69
 
70
70
  function renderHTML(config, manifest, manifestFiles, req, res) {
71
- var _config$i18n$web, _config$i18n, _config$web$darkMode, _config$web6, _config$web$title, _config$web7, _config$web$scope, _config$web8, _config$web$pkgManage, _config$web9, _validatePrimaryColor, _config$web10;
71
+ var _config$i18n$web, _config$i18n, _config$web6, _config$web$darkMode, _config$web7, _config$web$title, _config$web8, _config$web$scope, _config$web9, _config$web$pkgManage, _config$web10, _validatePrimaryColor, _config$web11;
72
72
 
73
73
  const {
74
74
  url_prefix
@@ -76,24 +76,37 @@ function renderHTML(config, manifest, manifestFiles, req, res) {
76
76
  const base = (0, _utils.getPublicUrl)(config === null || config === void 0 ? void 0 : config.url_prefix, req);
77
77
  const basename = new _url.URL(base).pathname;
78
78
  const language = (_config$i18n$web = config === null || config === void 0 ? void 0 : (_config$i18n = config.i18n) === null || _config$i18n === void 0 ? void 0 : _config$i18n.web) !== null && _config$i18n$web !== void 0 ? _config$i18n$web : DEFAULT_LANGUAGE;
79
- const darkMode = (_config$web$darkMode = config === null || config === void 0 ? void 0 : (_config$web6 = config.web) === null || _config$web6 === void 0 ? void 0 : _config$web6.darkMode) !== null && _config$web$darkMode !== void 0 ? _config$web$darkMode : false;
80
- const title = (_config$web$title = config === null || config === void 0 ? void 0 : (_config$web7 = config.web) === null || _config$web7 === void 0 ? void 0 : _config$web7.title) !== null && _config$web$title !== void 0 ? _config$web$title : _constants.WEB_TITLE;
81
- const scope = (_config$web$scope = config === null || config === void 0 ? void 0 : (_config$web8 = config.web) === null || _config$web8 === void 0 ? void 0 : _config$web8.scope) !== null && _config$web$scope !== void 0 ? _config$web$scope : '';
79
+ const needHtmlCache = [undefined, null].includes(config === null || config === void 0 ? void 0 : (_config$web6 = config.web) === null || _config$web6 === void 0 ? void 0 : _config$web6.html_cache) ? true : config.web.html_cache;
80
+ const darkMode = (_config$web$darkMode = config === null || config === void 0 ? void 0 : (_config$web7 = config.web) === null || _config$web7 === void 0 ? void 0 : _config$web7.darkMode) !== null && _config$web$darkMode !== void 0 ? _config$web$darkMode : false;
81
+ const title = (_config$web$title = config === null || config === void 0 ? void 0 : (_config$web8 = config.web) === null || _config$web8 === void 0 ? void 0 : _config$web8.title) !== null && _config$web$title !== void 0 ? _config$web$title : _constants.WEB_TITLE;
82
+ const scope = (_config$web$scope = config === null || config === void 0 ? void 0 : (_config$web9 = config.web) === null || _config$web9 === void 0 ? void 0 : _config$web9.scope) !== null && _config$web$scope !== void 0 ? _config$web$scope : '';
82
83
  const login = (0, _utils.hasLogin)(config);
83
84
  const logoURI = resolveLogo(config, req);
84
- const pkgManagers = (_config$web$pkgManage = config === null || config === void 0 ? void 0 : (_config$web9 = config.web) === null || _config$web9 === void 0 ? void 0 : _config$web9.pkgManagers) !== null && _config$web$pkgManage !== void 0 ? _config$web$pkgManage : ['yarn', 'pnpm', 'npm'];
85
+ const pkgManagers = (_config$web$pkgManage = config === null || config === void 0 ? void 0 : (_config$web10 = config.web) === null || _config$web10 === void 0 ? void 0 : _config$web10.pkgManagers) !== null && _config$web$pkgManage !== void 0 ? _config$web$pkgManage : ['yarn', 'pnpm', 'npm'];
85
86
  const version = pkgJSON.version;
86
- const primaryColor = (_validatePrimaryColor = validatePrimaryColor(config === null || config === void 0 ? void 0 : (_config$web10 = config.web) === null || _config$web10 === void 0 ? void 0 : _config$web10.primary_color)) !== null && _validatePrimaryColor !== void 0 ? _validatePrimaryColor : '#4b5e40';
87
+ const primaryColor = (_validatePrimaryColor = validatePrimaryColor(config === null || config === void 0 ? void 0 : (_config$web11 = config.web) === null || _config$web11 === void 0 ? void 0 : _config$web11.primary_color)) !== null && _validatePrimaryColor !== void 0 ? _validatePrimaryColor : '#4b5e40';
87
88
  const {
88
89
  scriptsBodyAfter,
89
90
  metaScripts,
90
- scriptsbodyBefore
91
+ scriptsbodyBefore,
92
+ showInfo,
93
+ showSettings,
94
+ showThemeSwitch,
95
+ showFooter,
96
+ showSearch,
97
+ showDownloadTarball
91
98
  } = Object.assign({}, {
92
99
  scriptsBodyAfter: [],
93
100
  bodyBefore: [],
94
101
  metaScripts: []
95
102
  }, config === null || config === void 0 ? void 0 : config.web);
96
103
  const options = {
104
+ showInfo,
105
+ showSettings,
106
+ showThemeSwitch,
107
+ showFooter,
108
+ showSearch,
109
+ showDownloadTarball,
97
110
  darkMode,
98
111
  url_prefix,
99
112
  basename,
@@ -123,8 +136,11 @@ function renderHTML(config, manifest, manifestFiles, req, res) {
123
136
  scriptsbodyBefore
124
137
  }, manifest);
125
138
  debug('template :: %o', webPage);
126
- cache.set('template', webPage);
127
- debug('set template cache');
139
+
140
+ if (needHtmlCache) {
141
+ cache.set('template', webPage);
142
+ debug('set template cache');
143
+ }
128
144
  } else {
129
145
  debug('reuse template cache');
130
146
  }
@@ -136,4 +152,4 @@ function renderHTML(config, manifest, manifestFiles, req, res) {
136
152
  res.send(webPage);
137
153
  debug('render web');
138
154
  }
139
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvd2ViL2h0bWwvcmVuZGVySFRNTC50cyJdLCJuYW1lcyI6WyJwa2dKU09OIiwicmVxdWlyZSIsIkRFRkFVTFRfTEFOR1VBR0UiLCJjYWNoZSIsIkxSVSIsIm1heCIsIm1heEFnZSIsImRlYnVnIiwiZGVmYXVsdE1hbmlmZXN0RmlsZXMiLCJqcyIsImljbyIsInZhbGlkYXRlUHJpbWFyeUNvbG9yIiwicHJpbWFyeUNvbG9yIiwiaXNIZXgiLCJ0ZXN0IiwicmVzb2x2ZUxvZ28iLCJjb25maWciLCJyZXEiLCJpc0xvY2FsRmlsZSIsIndlYiIsImxvZ28iLCJ1cmxfcHJlZml4IiwicGF0aCIsImJhc2VuYW1lIiwicmVuZGVySFRNTCIsIm1hbmlmZXN0IiwibWFuaWZlc3RGaWxlcyIsInJlcyIsImJhc2UiLCJVUkwiLCJwYXRobmFtZSIsImxhbmd1YWdlIiwiaTE4biIsImRhcmtNb2RlIiwidGl0bGUiLCJXRUJfVElUTEUiLCJzY29wZSIsImxvZ2luIiwibG9nb1VSSSIsInBrZ01hbmFnZXJzIiwidmVyc2lvbiIsInByaW1hcnlfY29sb3IiLCJzY3JpcHRzQm9keUFmdGVyIiwibWV0YVNjcmlwdHMiLCJzY3JpcHRzYm9keUJlZm9yZSIsIk9iamVjdCIsImFzc2lnbiIsImJvZHlCZWZvcmUiLCJvcHRpb25zIiwid2ViUGFnZSIsImdldCIsInNldCIsImVycm9yIiwiRXJyb3IiLCJzdGFjayIsInNldEhlYWRlciIsIkhFQURFUlMiLCJURVhUX0hUTUwiLCJzZW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLE9BQU8sR0FBR0MsT0FBTyxDQUFDLDBCQUFELENBQXZCOztBQUNBLE1BQU1DLGdCQUFnQixHQUFHLE9BQXpCO0FBQ0EsTUFBTUMsS0FBSyxHQUFHLElBQUlDLGlCQUFKLENBQVE7QUFBRUMsRUFBQUEsR0FBRyxFQUFF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O0FBQ1oxQyxNQUFBQSxLQUFLLENBQUMsZ0JBQUQsRUFBbUJ5QyxPQUFuQixDQUFMO0FBQ0F6QyxNQUFBQSxLQUFLLENBQUMsc0JBQUQsRUFBeUJtQixhQUF6QixDQUFMO0FBQ0F1QixNQUFBQSxPQUFPLEdBQUcsdUJBQ1I7QUFDRXhCLFFBQUFBLFFBQVEsRUFBRUMsYUFBRixhQUFFQSxhQUFGLGNBQUVBLGFBQUYsR0FBbUJsQixvQkFEN0I7QUFFRXdDLFFBQUFBLE9BRkY7QUFHRU4sUUFBQUEsZ0JBSEY7QUFJRUMsUUFBQUEsV0FKRjtBQUtFQyxRQUFBQTtBQUxGLE9BRFEsRUFRUm5CLFFBUlEsQ0FBVjtBQVVBbEIsTUFBQUEsS0FBSyxDQUFDLGdCQUFELEVBQW1CMEMsT0FBbkIsQ0FBTDtBQUNBOUMsTUFBQUEsS0FBSyxDQUFDZ0QsR0FBTixDQUFVLFVBQVYsRUFBc0JGLE9BQXRCO0FBQ0ExQyxNQUFBQSxLQUFLLENBQUMsb0JBQUQsQ0FBTDtBQUNELEtBaEJELE1BZ0JPO0FBQ0xBLE1BQUFBLEtBQUssQ0FBQyxzQkFBRCxDQUFMO0FBQ0Q7QUFDRixHQXRCRCxDQXNCRSxPQUFPNkMsS0FBUCxFQUFjO0FBQ2QsVUFBTSxJQUFJQyxLQUFKLENBQVcsa0NBQWlDRCxLQUFLLENBQUNFLEtBQU0sRUFBeEQsQ0FBTjtBQUNEOztBQUNEM0IsRUFBQUEsR0FBRyxDQUFDNEIsU0FBSixDQUFjLGNBQWQsRUFBOEJDLG9CQUFRQyxTQUF0QztBQUNBOUIsRUFBQUEsR0FBRyxDQUFDK0IsSUFBSixDQUFTVCxPQUFUO0FBQ0ExQyxFQUFBQSxLQUFLLENBQUMsWUFBRCxDQUFMO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7IEhFQURFUlMgfSBmcm9tICdAdmVyZGFjY2lvL2NvbW1vbnMtYXBpJztcblxuaW1wb3J0IHsgV0VCX1RJVExFIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRQdWJsaWNVcmwsIGhhc0xvZ2luLCBpc0hUVFBQcm90b2NvbCB9IGZyb20gJy4uLy4uLy4uL2xpYi91dGlscyc7XG5pbXBvcnQgcmVuZGVyVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZSc7XG5cbmNvbnN0IHBrZ0pTT04gPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9wYWNrYWdlLmpzb24nKTtcbmNvbnN0IERFRkFVTFRfTEFOR1VBR0UgPSAnZXMtVVMnO1xuY29uc3QgY2FjaGUgPSBuZXcgTFJVKHsgbWF4OiA1MDAsIG1heEFnZTogMTAwMCAqIDYwICogNjAgfSk7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygndmVyZGFjY2lvJyk7XG5cbmNvbnN0IGRlZmF1bHRNYW5pZmVzdEZpbGVzID0ge1xuICBqczogWydydW50aW1lLmpzJywgJ3ZlbmRvcnMuanMnLCAnbWFpbi5qcyddLFxuICBpY286ICdmYXZpY29uLmljbycsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQcmltYXJ5Q29sb3IocHJpbWFyeUNvbG9yKSB7XG4gIGNvbnN0IGlzSGV4ID0gL14jKyhbYS1mQS1GMC05XXs2fXxbYS1mQS1GMC05XXszfSkkL2kudGVzdChwcmltYXJ5Q29sb3IpO1xuICBpZiAoIWlzSGV4KSB7XG4gICAgZGVidWcoJ2ludmFsaWQgcHJpbWFyeSBjb2xvciAlbycsIHByaW1hcnlDb2xvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHByaW1hcnlDb2xvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMb2dvKGNvbmZpZywgcmVxKSB7XG4gIGNvbnN0IGlzTG9jYWxGaWxlID0gY29uZmlnPy53ZWI/LmxvZ28gJiYgIWlzSFRUUFByb3RvY29sKGNvbmZpZz8ud2ViPy5sb2dvKTtcblxuICBpZiAoaXNMb2NhbEZpbGUpIHtcbiAgICByZXR1cm4gYCR7Z2V0UHVibGljVXJsKGNvbmZpZz8udXJsX3ByZWZpeCwgcmVxKX0tL3N0YXRpYy8ke3BhdGguYmFzZW5hbWUoY29uZmlnPy53ZWI/LmxvZ28pfWA7XG4gIH0gZWxzZSBpZiAoaXNIVFRQUHJvdG9jb2woY29uZmlnPy53ZWI/LmxvZ28pKSB7XG4gICAgcmV0dXJuIGNvbmZpZz8ud2ViPy5sb2dvO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5kZXJIVE1MKGNvbmZpZywgbWFuaWZlc3QsIG1hbmlmZXN0RmlsZXMsIHJlcSwgcmVzKSB7XG4gIGNvbnN0IHsgdXJsX3ByZWZpeCB9ID0gY29uZmlnO1xuICBjb25zdCBiYXNlID0gZ2V0UHVibGljVXJsKGNvbmZpZz8udXJsX3ByZWZpeCwgcmVxKTtcbiAgY29uc3QgYmFzZW5hbWUgPSBuZXcgVVJMKGJhc2UpLnBhdGhuYW1lO1xuICBjb25zdCBsYW5ndWFnZSA9IGNvbmZpZz8uaTE4bj8ud2ViID8/IERFRkFVTFRfTEFOR1VBR0U7XG4gIGNvbnN0IGRhcmtNb2RlID0gY29uZmlnPy53ZWI/LmRhcmtNb2RlID8/IGZhbHNlO1xuICBjb25zdCB0aXRsZSA9IGNvbmZpZz8ud2ViPy50aXRsZSA/PyBXRUJfVElUTEU7XG4gIGNvbnN0IHNjb3BlID0gY29uZmlnPy53ZWI/LnNjb3BlID8/ICcnO1xuICBjb25zdCBsb2dpbiA9IGhhc0xvZ2luKGNvbmZpZyk7XG4gIGNvbnN0IGxvZ29VUkkgPSByZXNvbHZlTG9nbyhjb25maWcsIHJlcSk7XG4gIGNvbnN0IHBrZ01hbmFnZXJzID0gY29uZmlnPy53ZWI/LnBrZ01hbmFnZXJzID8/IFsneWFybicsICdwbnBtJywgJ25wbSddO1xuICBjb25zdCB2ZXJzaW9uID0gcGtnSlNPTi52ZXJzaW9uO1xuICBjb25zdCBwcmltYXJ5Q29sb3IgPSB2YWxpZGF0ZVByaW1hcnlDb2xvcihjb25maWc/LndlYj8ucHJpbWFyeV9jb2xvcikgPz8gJyM0YjVlNDAnO1xuICBjb25zdCB7IHNjcmlwdHNCb2R5QWZ0ZXIsIG1ldGFTY3JpcHRzLCBzY3JpcHRzYm9keUJlZm9yZSB9ID0gT2JqZWN0LmFzc2lnbihcbiAgICB7fSxcbiAgICB7XG4gICAgICBzY3JpcHRzQm9keUFmdGVyOiBbXSxcbiAgICAgIGJvZHlCZWZvcmU6IFtdLFxuICAgICAgbWV0YVNjcmlwdHM6IFtdLFxuICAgIH0sXG4gICAgY29uZmlnPy53ZWJcbiAgKTtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBkYXJrTW9kZSxcbiAgICB1cmxfcHJlZml4LFxuICAgIGJhc2VuYW1lLFxuICAgIGJhc2UsXG4gICAgcHJpbWFyeUNvbG9yLFxuICAgIHZlcnNpb24sXG4gICAgcGtnTWFuYWdlcnMsXG4gICAgbG9naW4sXG4gICAgbG9nbzogbG9nb1VSSSxcbiAgICB0aXRsZSxcbiAgICBzY29wZSxcbiAgICBsYW5ndWFnZSxcbiAgfTtcblxuICBsZXQgd2ViUGFnZTtcblxuICB0cnkge1xuICAgIHdlYlBhZ2UgPSBjYWNoZS5nZXQoJ3RlbXBsYXRlJyk7XG5cbiAgICBpZiAoIXdlYlBhZ2UpIHtcbiAgICAgIGRlYnVnKCd3ZWIgb3B0aW9ucyAlbycsIG9wdGlvbnMpO1xuICAgICAgZGVidWcoJ3dlYiBtYW5pZmVzdEZpbGVzICVvJywgbWFuaWZlc3RGaWxlcyk7XG4gICAgICB3ZWJQYWdlID0gcmVuZGVyVGVtcGxhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBtYW5pZmVzdDogbWFuaWZlc3RGaWxlcyA/PyBkZWZhdWx0TWFuaWZlc3RGaWxlcyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHNjcmlwdHNCb2R5QWZ0ZXIsXG4gICAgICAgICAgbWV0YVNjcmlwdHMsXG4gICAgICAgICAgc2NyaXB0c2JvZHlCZWZvcmUsXG4gICAgICAgIH0sXG4gICAgICAgIG1hbmlmZXN0XG4gICAgICApO1xuICAgICAgZGVidWcoJ3RlbXBsYXRlIDo6ICVvJywgd2ViUGFnZSk7XG4gICAgICBjYWNoZS5zZXQoJ3RlbXBsYXRlJywgd2ViUGFnZSk7XG4gICAgICBkZWJ1Zygnc2V0IHRlbXBsYXRlIGNhY2hlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdyZXVzZSB0ZW1wbGF0ZSBjYWNoZScpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHRoZW1lIGNvdWxkIG5vdCBiZSBsb2FkLCBzdGFjayAke2Vycm9yLnN0YWNrfWApO1xuICB9XG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsIEhFQURFUlMuVEVYVF9IVE1MKTtcbiAgcmVzLnNlbmQod2ViUGFnZSk7XG4gIGRlYnVnKCdyZW5kZXIgd2ViJyk7XG59XG4iXX0=
155
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvd2ViL2h0bWwvcmVuZGVySFRNTC50cyJdLCJuYW1lcyI6WyJwa2dKU09OIiwicmVxdWlyZSIsIkRFRkFVTFRfTEFOR1VBR0UiLCJjYWNoZSIsIkxSVSIsIm1heCIsIm1heEFnZSIsImRlYnVnIiwiZGVmYXVsdE1hbmlmZXN0RmlsZXMiLCJqcyIsImljbyIsInZhbGlkYXRlUHJpbWFyeUNvbG9yIiwicHJpbWFyeUNvbG9yIiwiaXNIZXgiLCJ0ZXN0IiwicmVzb2x2ZUxvZ28iLCJjb25maWciLCJyZXEiLCJpc0xvY2FsRmlsZSIsIndlYiIsImxvZ28iLCJ1cmxfcHJlZml4IiwicGF0aCIsImJhc2VuYW1lIiwicmVuZGVySFRNTCIsIm1hbmlmZXN0IiwibWFuaWZlc3RGaWxlcyIsInJlcyIsImJhc2UiLCJVUkwiLCJwYXRobmFtZSIsImxhbmd1YWdlIiwiaTE4biIsIm5lZWRIdG1sQ2FjaGUiLCJ1bmRlZmluZWQiLCJpbmNsdWRlcyIsImh0bWxfY2FjaGUiLCJkYXJrTW9kZSIsInRpdGxlIiwiV0VCX1RJVExFIiwic2NvcGUiLCJsb2dpbiIsImxvZ29VUkkiLCJwa2dNYW5hZ2VycyIsInZlcnNpb24iLCJwcmltYXJ5X2NvbG9yIiwic2NyaXB0c0JvZHlBZnRlciIsIm1ldGFTY3JpcHRzIiwic2NyaXB0c2JvZHlCZWZvcmUiLCJzaG93SW5mbyIsInNob3dTZXR0aW5ncyIsInNob3dUaGVtZVN3aXRjaCIsInNob3dGb290ZXIiLCJzaG93U2VhcmNoIiwic2hvd0Rvd25sb2FkVGFyYmFsbCIsIk9iamVjdCIsImFzc2lnbiIsImJvZHlCZWZvcmUiLCJvcHRpb25zIiwid2ViUGFnZSIsImdldCIsInNldCIsImVycm9yIiwiRXJyb3IiLCJzdGFjayIsInNldEhlYWRlciIsIkhFQURFUlMiLCJURVhUX0hUTUwiLCJzZW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFD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QUFtQjtBQUNqQjlCLFFBQUFBLEtBQUssQ0FBQzBELEdBQU4sQ0FBVSxVQUFWLEVBQXNCRixPQUF0QjtBQUNBcEQsUUFBQUEsS0FBSyxDQUFDLG9CQUFELENBQUw7QUFDRDtBQUNGLEtBbEJELE1Ba0JPO0FBQ0xBLE1BQUFBLEtBQUssQ0FBQyxzQkFBRCxDQUFMO0FBQ0Q7QUFDRixHQXZCRCxDQXVCRSxPQUFPdUQsS0FBUCxFQUFjO0FBQ2QsVUFBTSxJQUFJQyxLQUFKLENBQVcsa0NBQWlDRCxLQUFLLENBQUNFLEtBQU0sRUFBeEQsQ0FBTjtBQUNEOztBQUNEckMsRUFBQUEsR0FBRyxDQUFDc0MsU0FBSixDQUFjLGNBQWQsRUFBOEJDLG9CQUFRQyxTQUF0QztBQUNBeEMsRUFBQUEsR0FBRyxDQUFDeUMsSUFBSixDQUFTVCxPQUFUO0FBQ0FwRCxFQUFBQSxLQUFLLENBQUMsWUFBRCxDQUFMO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7IEhFQURFUlMgfSBmcm9tICdAdmVyZGFjY2lvL2NvbW1vbnMtYXBpJztcblxuaW1wb3J0IHsgV0VCX1RJVExFIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRQdWJsaWNVcmwsIGhhc0xvZ2luLCBpc0hUVFBQcm90b2NvbCB9IGZyb20gJy4uLy4uLy4uL2xpYi91dGlscyc7XG5pbXBvcnQgcmVuZGVyVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZSc7XG5cbmNvbnN0IHBrZ0pTT04gPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9wYWNrYWdlLmpzb24nKTtcbmNvbnN0IERFRkFVTFRfTEFOR1VBR0UgPSAnZXMtVVMnO1xuY29uc3QgY2FjaGUgPSBuZXcgTFJVKHsgbWF4OiA1MDAsIG1heEFnZTogMTAwMCAqIDYwICogNjAgfSk7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygndmVyZGFjY2lvJyk7XG5cbmNvbnN0IGRlZmF1bHRNYW5pZmVzdEZpbGVzID0ge1xuICBqczogWydydW50aW1lLmpzJywgJ3ZlbmRvcnMuanMnLCAnbWFpbi5qcyddLFxuICBpY286ICdmYXZpY29uLmljbycsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQcmltYXJ5Q29sb3IocHJpbWFyeUNvbG9yKSB7XG4gIGNvbnN0IGlzSGV4ID0gL14jKyhbYS1mQS1GMC05XXs2fXxbYS1mQS1GMC05XXszfSkkL2kudGVzdChwcmltYXJ5Q29sb3IpO1xuICBpZiAoIWlzSGV4KSB7XG4gICAgZGVidWcoJ2ludmFsaWQgcHJpbWFyeSBjb2xvciAlbycsIHByaW1hcnlDb2xvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHByaW1hcnlDb2xvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMb2dvKGNvbmZpZywgcmVxKSB7XG4gIGNvbnN0IGlzTG9jYWxGaWxlID0gY29uZmlnPy53ZWI/LmxvZ28gJiYgIWlzSFRUUFByb3RvY29sKGNvbmZpZz8ud2ViPy5sb2dvKTtcblxuICBpZiAoaXNMb2NhbEZpbGUpIHtcbiAgICByZXR1cm4gYCR7Z2V0UHVibGljVXJsKGNvbmZpZz8udXJsX3ByZWZpeCwgcmVxKX0tL3N0YXRpYy8ke3BhdGguYmFzZW5hbWUoY29uZmlnPy53ZWI/LmxvZ28pfWA7XG4gIH0gZWxzZSBpZiAoaXNIVFRQUHJvdG9jb2woY29uZmlnPy53ZWI/LmxvZ28pKSB7XG4gICAgcmV0dXJuIGNvbmZpZz8ud2ViPy5sb2dvO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5kZXJIVE1MKGNvbmZpZywgbWFuaWZlc3QsIG1hbmlmZXN0RmlsZXMsIHJlcSwgcmVzKSB7XG4gIGNvbnN0IHsgdXJsX3ByZWZpeCB9ID0gY29uZmlnO1xuICBjb25zdCBiYXNlID0gZ2V0UHVibGljVXJsKGNvbmZpZz8udXJsX3ByZWZpeCwgcmVxKTtcbiAgY29uc3QgYmFzZW5hbWUgPSBuZXcgVVJMKGJhc2UpLnBhdGhuYW1lO1xuICBjb25zdCBsYW5ndWFnZSA9IGNvbmZpZz8uaTE4bj8ud2ViID8/IERFRkFVTFRfTEFOR1VBR0U7XG4gIGNvbnN0IG5lZWRIdG1sQ2FjaGUgPSBbdW5kZWZpbmVkLCBudWxsXS5pbmNsdWRlcyhjb25maWc/LndlYj8uaHRtbF9jYWNoZSkgPyB0cnVlIDogY29uZmlnLndlYi5odG1sX2NhY2hlO1xuICBjb25zdCBkYXJrTW9kZSA9IGNvbmZpZz8ud2ViPy5kYXJrTW9kZSA/PyBmYWxzZTtcbiAgY29uc3QgdGl0bGUgPSBjb25maWc/LndlYj8udGl0bGUgPz8gV0VCX1RJVExFO1xuICBjb25zdCBzY29wZSA9IGNvbmZpZz8ud2ViPy5zY29wZSA/PyAnJztcbiAgY29uc3QgbG9naW4gPSBoYXNMb2dpbihjb25maWcpO1xuICBjb25zdCBsb2dvVVJJID0gcmVzb2x2ZUxvZ28oY29uZmlnLCByZXEpO1xuICBjb25zdCBwa2dNYW5hZ2VycyA9IGNvbmZpZz8ud2ViPy5wa2dNYW5hZ2VycyA/PyBbJ3lhcm4nLCAncG5wbScsICducG0nXTtcbiAgY29uc3QgdmVyc2lvbiA9IHBrZ0pTT04udmVyc2lvbjtcbiAgY29uc3QgcHJpbWFyeUNvbG9yID0gdmFsaWRhdGVQcmltYXJ5Q29sb3IoY29uZmlnPy53ZWI/LnByaW1hcnlfY29sb3IpID8/ICcjNGI1ZTQwJztcbiAgY29uc3QgeyBzY3JpcHRzQm9keUFmdGVyLCBtZXRhU2NyaXB0cywgc2NyaXB0c2JvZHlCZWZvcmUsIHNob3dJbmZvLCBzaG93U2V0dGluZ3MsIHNob3dUaGVtZVN3aXRjaCwgc2hvd0Zvb3Rlciwgc2hvd1NlYXJjaCwgc2hvd0Rvd25sb2FkVGFyYmFsbCB9ID0gT2JqZWN0LmFzc2lnbihcbiAgICB7fSxcbiAgICB7XG4gICAgICBzY3JpcHRzQm9keUFmdGVyOiBbXSxcbiAgICAgIGJvZHlCZWZvcmU6IFtdLFxuICAgICAgbWV0YVNjcmlwdHM6IFtdLFxuICAgIH0sXG4gICAgY29uZmlnPy53ZWJcbiAgKTtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBzaG93SW5mbyxcbiAgICBzaG93U2V0dGluZ3MsXG4gICAgc2hvd1RoZW1lU3dpdGNoLFxuICAgIHNob3dGb290ZXIsXG4gICAgc2hvd1NlYXJjaCxcbiAgICBzaG93RG93bmxvYWRUYXJiYWxsLFxuICAgIGRhcmtNb2RlLFxuICAgIHVybF9wcmVmaXgsXG4gICAgYmFzZW5hbWUsXG4gICAgYmFzZSxcbiAgICBwcmltYXJ5Q29sb3IsXG4gICAgdmVyc2lvbixcbiAgICBwa2dNYW5hZ2VycyxcbiAgICBsb2dpbixcbiAgICBsb2dvOiBsb2dvVVJJLFxuICAgIHRpdGxlLFxuICAgIHNjb3BlLFxuICAgIGxhbmd1YWdlLFxuICB9O1xuXG4gIGxldCB3ZWJQYWdlO1xuXG4gIHRyeSB7XG4gICAgd2ViUGFnZSA9IGNhY2hlLmdldCgndGVtcGxhdGUnKTtcbiAgICBpZiAoIXdlYlBhZ2UpIHtcbiAgICAgIGRlYnVnKCd3ZWIgb3B0aW9ucyAlbycsIG9wdGlvbnMpO1xuICAgICAgZGVidWcoJ3dlYiBtYW5pZmVzdEZpbGVzICVvJywgbWFuaWZlc3RGaWxlcyk7XG4gICAgICB3ZWJQYWdlID0gcmVuZGVyVGVtcGxhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBtYW5pZmVzdDogbWFuaWZlc3RGaWxlcyA/PyBkZWZhdWx0TWFuaWZlc3RGaWxlcyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHNjcmlwdHNCb2R5QWZ0ZXIsXG4gICAgICAgICAgbWV0YVNjcmlwdHMsXG4gICAgICAgICAgc2NyaXB0c2JvZHlCZWZvcmUsXG4gICAgICAgIH0sXG4gICAgICAgIG1hbmlmZXN0XG4gICAgICApO1xuICAgICAgZGVidWcoJ3RlbXBsYXRlIDo6ICVvJywgd2ViUGFnZSk7XG4gICAgICBpZiAobmVlZEh0bWxDYWNoZSkge1xuICAgICAgICBjYWNoZS5zZXQoJ3RlbXBsYXRlJywgd2ViUGFnZSk7XG4gICAgICAgIGRlYnVnKCdzZXQgdGVtcGxhdGUgY2FjaGUnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ3JldXNlIHRlbXBsYXRlIGNhY2hlJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgdGhlbWUgY291bGQgbm90IGJlIGxvYWQsIHN0YWNrICR7ZXJyb3Iuc3RhY2t9YCk7XG4gIH1cbiAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgSEVBREVSUy5URVhUX0hUTUwpO1xuICByZXMuc2VuZCh3ZWJQYWdlKTtcbiAgZGVidWcoJ3JlbmRlciB3ZWInKTtcbn1cbiJdfQ==
@@ -51,7 +51,7 @@ minLength = _constants.DEFAULT_MIN_LIMIT_PASSWORD) {
51
51
 
52
52
  function createRemoteUser(name, pluginGroups) {
53
53
  const isGroupValid = Array.isArray(pluginGroups);
54
- const groups = (isGroupValid ? pluginGroups : []).concat([_constants.ROLES.$ALL, _constants.ROLES.$AUTH, _constants.ROLES.DEPRECATED_ALL, _constants.ROLES.DEPRECATED_AUTH, _constants.ROLES.ALL]);
54
+ const groups = Array.from(new Set((isGroupValid ? pluginGroups : []).concat([_constants.ROLES.$ALL, _constants.ROLES.$AUTH, _constants.ROLES.DEPRECATED_ALL, _constants.ROLES.DEPRECATED_AUTH, _constants.ROLES.ALL])));
55
55
  return {
56
56
  name,
57
57
  groups,
@@ -312,4 +312,4 @@ function getMiddlewareCredentials(security, secret, authorizationHeader) {
312
312
  return verifyJWTPayload(token, secret);
313
313
  }
314
314
  }
315
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC11dGlscy50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsInZhbGlkYXRlUGFzc3dvcmQiLCJwYXNzd29yZCIsIm1pbkxlbmd0aCIsIkRFRkFVTFRfTUlOX0xJTUlUX1BBU1NXT1JEIiwibGVuZ3RoIiwiY3JlYXRlUmVtb3RlVXNlciIsIm5hbWUiLCJwbHVnaW5Hcm91cHMiLCJpc0dyb3VwVmFsaWQiLCJBcnJheSIsImlzQXJyYXkiLCJncm91cHMiLCJjb25jYXQiLCJST0xFUyIsIiRBTEwiLCIkQVVUSCIsIkRFUFJFQ0FURURfQUxMIiwiREVQUkVDQVRFRF9BVVRIIiwiQUxMIiwicmVhbF9ncm91cHMiLCJjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyIiwidW5kZWZpbmVkIiwiJEFOT05ZTU9VUyIsIkRFUFJFQ0FURURfQU5PTllNT1VTIiwiYWxsb3dfYWN0aW9uIiwiYWN0aW9uIiwidXNlciIsInBrZyIsImNhbGxiYWNrIiwiZ3JvdXBBY2Nlc3MiLCJoYXNQZXJtaXNzaW9uIiwic29tZSIsImdyb3VwIiwiaW5jbHVkZXMiLCJsb2dnZXIiLCJpbmZvIiwicmVtb3RlIiwiRXJyb3JDb2RlIiwiZ2V0Rm9yYmlkZGVuIiwiZ2V0VW5hdXRob3JpemVkIiwiaGFuZGxlU3BlY2lhbFVucHVibGlzaCIsImlzVW5wdWJsaXNoTWlzc2luZyIsIl8iLCJpc05pbCIsImhhc0dyb3VwcyIsImdldERlZmF1bHRQbHVnaW5zIiwiYXV0aGVudGljYXRlIiwiX3VzZXIiLCJfcGFzc3dvcmQiLCJjYiIsIkFQSV9FUlJPUiIsIkJBRF9VU0VSTkFNRV9QQVNTV09SRCIsImFkZF91c2VyIiwiZ2V0Q29uZmxpY3QiLCJhbGxvd19hY2Nlc3MiLCJhbGxvd19wdWJsaXNoIiwiYWxsb3dfdW5wdWJsaXNoIiwiY3JlYXRlU2Vzc2lvblRva2VuIiwidGVuSG91cnNUaW1lIiwiZXhwaXJlcyIsIkRhdGUiLCJub3ciLCJkZWZhdWx0V2ViVG9rZW5PcHRpb25zIiwic2lnbiIsImV4cGlyZXNJbiIsIlRJTUVfRVhQSVJBVElPTl8xSCIsInZlcmlmeSIsImRlZmF1bHRBcGlUb2tlbkNvbmYiLCJsZWdhY3kiLCJkZWZhdWx0VXNlclJhdGVMaW1pdGluZyIsIndpbmRvd01zIiwibWF4IiwiZGVmYXVsdFNlY3VyaXR5Iiwid2ViIiwiYXBpIiwiZ2V0U2VjdXJpdHkiLCJjb25maWciLCJzZWN1cml0eSIsIm1lcmdlIiwiZ2V0QXV0aGVudGljYXRlZE1lc3NhZ2UiLCJidWlsZFVzZXJCdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiaXNBRVNMZWdhY3kiLCJqd3QiLCJnZXRBcGlUb2tlbiIsImF1dGgiLCJyZW1vdGVVc2VyIiwiYWVzUGFzc3dvcmQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFlc0VuY3J5cHQiLCJ0b1N0cmluZyIsImp3dEVuY3J5cHQiLCJwYXJzZUF1dGhUb2tlbkhlYWRlciIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJwYXJ0cyIsInNwbGl0Iiwic2NoZW1lIiwidG9rZW4iLCJwYXJzZUJhc2ljUGF5bG9hZCIsImNyZWRlbnRpYWxzIiwiaW5kZXgiLCJpbmRleE9mIiwic2xpY2UiLCJwYXJzZUFFU0NyZWRlbnRpYWxzIiwic2VjcmV0IiwidG9VcHBlckNhc2UiLCJUT0tFTl9CQVNJQyIsIlRPS0VOX0JFQVJFUiIsInRva2VuQXNCdWZmZXIiLCJleHBpcmVSZWFzb25zIiwidmVyaWZ5SldUUGF5bG9hZCIsInBheWxvYWQiLCJlcnJvciIsImdldENvZGUiLCJIVFRQX1NUQVRVUyIsIlVOQVVUSE9SSVpFRCIsIm1lc3NhZ2UiLCJpc0F1dGhIZWFkZXJWYWxpZCIsImF1dGhvcml6YXRpb24iLCJnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMiLCJwYXJzZWRDcmVkZW50aWFscyIsImlzU3RyaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUcsb0JB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LENBQTJCQyxhQUEzQixFQUEyRDtBQUNoRSxTQUFPQSxhQUFhLENBQUN2QixLQUFkLENBQW9CLEdBQXBCLEVBQXlCN0YsTUFBekIsS0FBb0MsQ0FBM0M7QUFDRDs7QUFFTSxTQUFTcUgsd0JBQVQsQ0FBa0M1QyxRQUFsQyxFQUFzRDZCLE1BQXRELEVBQXNFWCxtQkFBdEUsRUFBMEg7QUFDL0gsTUFBSVosV0FBVyxDQUFDTixRQUFELENBQWYsRUFBMkI7QUFDekIsVUFBTXdCLFdBQVcsR0FBR0ksbUJBQW1CLENBQUNWLG1CQUFELEVBQXNCVyxNQUF0QixDQUF2Qzs7QUFDQSxRQUFJLENBQUNMLFdBQUwsRUFBa0I7QUFDaEI7QUFDRDs7QUFFRCxVQUFNcUIsaUJBQWlCLEdBQUd0QixpQkFBaUIsQ0FBQ0MsV0FBRCxDQUEzQzs7QUFDQSxRQUFJLENBQUNxQixpQkFBTCxFQUF3QjtBQUN0QjtBQUNEOztBQUVELFdBQU9BLGlCQUFQO0FBQ0Q7O0FBQ0QsUUFBTTtBQUFFeEIsSUFBQUEsTUFBRjtBQUFVQyxJQUFBQTtBQUFWLE1BQW9CTCxvQkFBb0IsQ0FBQ0MsbUJBQUQsQ0FBOUM7O0FBRUEsTUFBSXJELGdCQUFFaUYsUUFBRixDQUFXeEIsS0FBWCxLQUFxQkQsTUFBTSxDQUFDUyxXQUFQLE9BQXlCRSx3QkFBYUYsV0FBYixFQUFsRCxFQUE4RTtBQUM1RSxXQUFPSyxnQkFBZ0IsQ0FBQ2IsS0FBRCxFQUFRTyxNQUFSLENBQXZCO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IEFQSVRva2VuT3B0aW9ucywgQ2FsbGJhY2ssIENvbmZpZywgSVBsdWdpbkF1dGgsIEpXVE9wdGlvbnMsIFBhY2thZ2UsIFJlbW90ZVVzZXIsIFNlY3VyaXR5IH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7IEF1dGhNaWRkbGV3YXJlUGF5bG9hZCwgQXV0aFRva2VuSGVhZGVyLCBCYXNpY1BheWxvYWQsIENvb2tpZVNlc3Npb25Ub2tlbiwgSUF1dGhXZWJVSSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2xpYi9sb2dnZXInO1xuaW1wb3J0IHsgQVBJX0VSUk9SLCBERUZBVUxUX01JTl9MSU1JVF9QQVNTV09SRCwgSFRUUF9TVEFUVVMsIFJPTEVTLCBUSU1FX0VYUElSQVRJT05fMUgsIFRPS0VOX0JBU0lDLCBUT0tFTl9CRUFSRVIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhZXNEZWNyeXB0LCB2ZXJpZnlQYXlsb2FkIH0gZnJvbSAnLi9jcnlwdG8tdXRpbHMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlLCBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0IH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygndmVyZGFjY2lvJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBhc3N3b3JkKFxuICBwYXNzd29yZDogc3RyaW5nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgbWluTGVuZ3RoOiBudW1iZXIgPSBERUZBVUxUX01JTl9MSU1JVF9QQVNTV09SRFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgcGFzc3dvcmQgPT09ICdzdHJpbmcnICYmIHBhc3N3b3JkLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgUmVtb3RlVXNlciBvYmplY3RcbiAqIEByZXR1cm4ge09iamVjdH0geyBuYW1lOiB4eCwgcGx1Z2luR3JvdXBzOiBbXSwgcmVhbF9ncm91cHM6IFtdIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbW90ZVVzZXIobmFtZTogc3RyaW5nLCBwbHVnaW5Hcm91cHM6IHN0cmluZ1tdKTogUmVtb3RlVXNlciB7XG4gIGNvbnN0IGlzR3JvdXBWYWxpZDogYm9vbGVhbiA9IEFycmF5LmlzQXJyYXkocGx1Z2luR3JvdXBzKTtcbiAgY29uc3QgZ3JvdXBzID0gKGlzR3JvdXBWYWxpZCA/IHBsdWdpbkdyb3VwcyA6IFtdKS5jb25jYXQoW1JPTEVTLiRBTEwsIFJPTEVTLiRBVVRILCBST0xFUy5ERVBSRUNBVEVEX0FMTCwgUk9MRVMuREVQUkVDQVRFRF9BVVRILCBST0xFUy5BTExdKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgZ3JvdXBzLFxuICAgIHJlYWxfZ3JvdXBzOiBwbHVnaW5Hcm91cHMsXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGRzIGFuIGFub255bW91cyByZW1vdGUgdXNlciBpbiBjYXNlIG5vbmUgaXMgbG9nZ2VkIGluLlxuICogQHJldHVybiB7T2JqZWN0fSB7IG5hbWU6IHh4LCBncm91cHM6IFtdLCByZWFsX2dyb3VwczogW10gfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpOiBSZW1vdGVVc2VyIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgLy8gZ3JvdXBzIHdpdGhvdXQgJyQnIGFyZSBnb2luZyB0byBiZSBkZXByZWNhdGVkIGV2ZW50dWFsbHlcbiAgICBncm91cHM6IFtST0xFUy4kQUxMLCBST0xFUy4kQU5PTllNT1VTLCBST0xFUy5ERVBSRUNBVEVEX0FMTCwgUk9MRVMuREVQUkVDQVRFRF9BTk9OWU1PVVNdLFxuICAgIHJlYWxfZ3JvdXBzOiBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93X2FjdGlvbihhY3Rpb246IHN0cmluZyk6IEZ1bmN0aW9uIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh1c2VyOiBSZW1vdGVVc2VyLCBwa2c6IFBhY2thZ2UsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGRlYnVnKCdbYXV0aC9hbGxvd19hY3Rpb25dOiB1c2VyOiAlbycsIHVzZXI/Lm5hbWUpO1xuICAgIGNvbnN0IHsgbmFtZSwgZ3JvdXBzIH0gPSB1c2VyO1xuICAgIGNvbnN0IGdyb3VwQWNjZXNzID0gcGtnW2FjdGlvbl07XG4gICAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGdyb3VwQWNjZXNzLnNvbWUoKGdyb3VwKSA9PiBuYW1lID09PSBncm91cCB8fCBncm91cHMuaW5jbHVkZXMoZ3JvdXApKTtcbiAgICBkZWJ1ZygnW2F1dGgvYWxsb3dfYWN0aW9uXTogaGFzUGVybWlzc2lvbj8gJW99IGZvciB1c2VyOiAlbycsIGhhc1Blcm1pc3Npb24sIHVzZXI/Lm5hbWUpO1xuXG4gICAgaWYgKGhhc1Blcm1pc3Npb24pIHtcbiAgICAgIGxvZ2dlci5pbmZvKHsgcmVtb3RlOiB1c2VyLm5hbWUgfSwgYGF1dGgvYWxsb3dfYWN0aW9uOiBhY2Nlc3MgZ3JhbnRlZCB0bzogQHt1c2VyfWApO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBjYWxsYmFjayhFcnJvckNvZGUuZ2V0Rm9yYmlkZGVuKGB1c2VyICR7bmFtZX0gaXMgbm90IGFsbG93ZWQgdG8gJHthY3Rpb259IHBhY2thZ2UgJHtwa2cubmFtZX1gKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKEVycm9yQ29kZS5nZXRVbmF1dGhvcml6ZWQoYGF1dGhvcml6YXRpb24gcmVxdWlyZWQgdG8gJHthY3Rpb259IHBhY2thZ2UgJHtwa2cubmFtZX1gKSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVTcGVjaWFsVW5wdWJsaXNoKCk6IGFueSB7XG4gIHJldHVybiBmdW5jdGlvbiAodXNlcjogUmVtb3RlVXNlciwgcGtnOiBQYWNrYWdlLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBhY3Rpb24gPSAndW5wdWJsaXNoJztcbiAgICAvLyB2ZXJpZnkgd2hldGhlciB0aGUgdW5wdWJsaXNoIHByb3AgaGFzIGJlZW4gZGVmaW5lZFxuICAgIGNvbnN0IGlzVW5wdWJsaXNoTWlzc2luZzogYm9vbGVhbiA9IF8uaXNOaWwocGtnW2FjdGlvbl0pO1xuICAgIGNvbnN0IGhhc0dyb3VwczogYm9vbGVhbiA9IGlzVW5wdWJsaXNoTWlzc2luZyA/IGZhbHNlIDogcGtnW2FjdGlvbl0ubGVuZ3RoID4gMDtcbiAgICBkZWJ1ZygnZmFsbGJhY2sgdW5wdWJsaXNoIGZvciBAe25hbWV9IGhhcyBncm91cHM6ICVvIGZvciAlbycsIGhhc0dyb3VwcywgdXNlcj8ubmFtZSk7XG4gICAgaWYgKGlzVW5wdWJsaXNoTWlzc2luZyB8fCBoYXNHcm91cHMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgZGVidWcoJ2FsbG93X2FjdGlvbiBmb3IgJW8gZm9yICVvIGhhcyBncm91cHM6ICVvIGZvciAlbycsIGFjdGlvbiwgdXNlcj8ubmFtZSwgaGFzR3JvdXBzLCB1c2VyKTtcbiAgICByZXR1cm4gYWxsb3dfYWN0aW9uKGFjdGlvbikodXNlciwgcGtnLCBjYWxsYmFjayk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0UGx1Z2lucyhsb2dnZXI6IGFueSk6IElQbHVnaW5BdXRoPENvbmZpZz4ge1xuICByZXR1cm4ge1xuICAgIGF1dGhlbnRpY2F0ZShfdXNlcjogc3RyaW5nLCBfcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgICAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICAgIGNiKEVycm9yQ29kZS5nZXRGb3JiaWRkZW4oQVBJX0VSUk9SLkJBRF9VU0VSTkFNRV9QQVNTV09SRCkpO1xuICAgIH0sXG5cbiAgICBhZGRfdXNlcihfdXNlcjogc3RyaW5nLCBfcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgICAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICAgIHJldHVybiBjYihFcnJvckNvZGUuZ2V0Q29uZmxpY3QoQVBJX0VSUk9SLkJBRF9VU0VSTkFNRV9QQVNTV09SRCkpO1xuICAgIH0sXG5cbiAgICAvLyBGSVhNRTogYWxsb3dfYWN0aW9uIGFuZCBhbGxvd19wdWJsaXNoIHNob3VsZCBiZSBpbiB0aGUgQHZlcmRhY2Npby90eXBlc1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBhbGxvd19hY2Nlc3M6IGFsbG93X2FjdGlvbignYWNjZXNzJywgbG9nZ2VyKSxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgYWxsb3dfcHVibGlzaDogYWxsb3dfYWN0aW9uKCdwdWJsaXNoJywgbG9nZ2VyKSxcbiAgICBhbGxvd191bnB1Ymxpc2g6IGhhbmRsZVNwZWNpYWxVbnB1Ymxpc2goKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlc3Npb25Ub2tlbigpOiBDb29raWVTZXNzaW9uVG9rZW4ge1xuICBjb25zdCB0ZW5Ib3Vyc1RpbWUgPSAxMCAqIDYwICogNjAgKiAxMDAwO1xuXG4gIHJldHVybiB7XG4gICAgLy8gbnBtanMub3JnIHNldHMgMTBoIGV4cGlyZVxuICAgIGV4cGlyZXM6IG5ldyBEYXRlKERhdGUubm93KCkgKyB0ZW5Ib3Vyc1RpbWUpLFxuICB9O1xufVxuXG5jb25zdCBkZWZhdWx0V2ViVG9rZW5PcHRpb25zOiBKV1RPcHRpb25zID0ge1xuICBzaWduOiB7XG4gICAgLy8gVGhlIGV4cGlyYXRpb24gdG9rZW4gZm9yIHRoZSB3ZWJzaXRlIGlzIDEgaG91clxuICAgIGV4cGlyZXNJbjogVElNRV9FWFBJUkFUSU9OXzFILFxuICB9LFxuICB2ZXJpZnk6IHt9LFxufTtcblxuY29uc3QgZGVmYXVsdEFwaVRva2VuQ29uZjogQVBJVG9rZW5PcHRpb25zID0ge1xuICBsZWdhY3k6IHRydWUsXG59O1xuXG4vLyB3ZSBsaW1pdCBtYXggMTAwMCByZXF1ZXN0IHBlciAxNSBtaW51dGVzIG9uIHVzZXIgZW5kcG9pbnRzXG5leHBvcnQgY29uc3QgZGVmYXVsdFVzZXJSYXRlTGltaXRpbmcgPSB7XG4gIHdpbmRvd01zOiAxNSAqIDYwICogMTAwMCwgLy8gMTUgbWludXRlc1xuICBtYXg6IDEwMDAsXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFNlY3VyaXR5OiBTZWN1cml0eSA9IHtcbiAgd2ViOiBkZWZhdWx0V2ViVG9rZW5PcHRpb25zLFxuICBhcGk6IGRlZmF1bHRBcGlUb2tlbkNvbmYsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdXJpdHkoY29uZmlnOiBDb25maWcpOiBTZWN1cml0eSB7XG4gIGlmIChfLmlzTmlsKGNvbmZpZy5zZWN1cml0eSkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIF8ubWVyZ2UoZGVmYXVsdFNlY3VyaXR5LCBjb25maWcuc2VjdXJpdHkpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRTZWN1cml0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEF1dGhlbnRpY2F0ZWRNZXNzYWdlKHVzZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgeW91IGFyZSBhdXRoZW50aWNhdGVkIGFzICcke3VzZXJ9J2A7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVzZXJCdWZmZXIobmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogQnVmZmVyIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGAke25hbWV9OiR7cGFzc3dvcmR9YCwgJ3V0ZjgnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQUVTTGVnYWN5KHNlY3VyaXR5OiBTZWN1cml0eSk6IGJvb2xlYW4ge1xuICBjb25zdCB7IGxlZ2FjeSwgand0IH0gPSBzZWN1cml0eS5hcGk7XG5cbiAgcmV0dXJuIF8uaXNOaWwobGVnYWN5KSA9PT0gZmFsc2UgJiYgXy5pc05pbChqd3QpICYmIGxlZ2FjeSA9PT0gdHJ1ZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFwaVRva2VuKGF1dGg6IElBdXRoV2ViVUksIGNvbmZpZzogQ29uZmlnLCByZW1vdGVVc2VyOiBSZW1vdGVVc2VyLCBhZXNQYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2VjdXJpdHk6IFNlY3VyaXR5ID0gZ2V0U2VjdXJpdHkoY29uZmlnKTtcbiAgaWYgKGlzQUVTTGVnYWN5KHNlY3VyaXR5KSkge1xuICAgIC8vIGZhbGxiYWNrIGFsbCBnb2VzIHRvIEFFUyBlbmNyeXB0aW9uXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICByZXNvbHZlKGF1dGguYWVzRW5jcnlwdChidWlsZFVzZXJCdWZmZXIocmVtb3RlVXNlci5uYW1lIGFzIHN0cmluZywgYWVzUGFzc3dvcmQpKS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgIH0pO1xuICB9XG4gIC8vIGkgYW0gd2lsaW5nIHRvIHVzZSBoZXJlIF8uaXNOaWwgYnV0IGZsb3cgZG9lcyBub3QgbGlrZSBpdCB5ZXQuXG4gIGNvbnN0IHsgand0IH0gPSBzZWN1cml0eS5hcGk7XG5cbiAgaWYgKGp3dCAmJiBqd3Quc2lnbikge1xuICAgIHJldHVybiBhd2FpdCBhdXRoLmp3dEVuY3J5cHQocmVtb3RlVXNlciwgand0LnNpZ24pO1xuICB9XG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIHJlc29sdmUoYXV0aC5hZXNFbmNyeXB0KGJ1aWxkVXNlckJ1ZmZlcihyZW1vdGVVc2VyLm5hbWUgYXMgc3RyaW5nLCBhZXNQYXNzd29yZCkpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBdXRoVG9rZW5IZWFkZXIoYXV0aG9yaXphdGlvbkhlYWRlcjogc3RyaW5nKTogQXV0aFRva2VuSGVhZGVyIHtcbiAgY29uc3QgcGFydHMgPSBhdXRob3JpemF0aW9uSGVhZGVyLnNwbGl0KCcgJyk7XG4gIGNvbnN0IFtzY2hlbWUsIHRva2VuXSA9IHBhcnRzO1xuXG4gIHJldHVybiB7IHNjaGVtZSwgdG9rZW4gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQmFzaWNQYXlsb2FkKGNyZWRlbnRpYWxzOiBzdHJpbmcpOiBCYXNpY1BheWxvYWQge1xuICBjb25zdCBpbmRleCA9IGNyZWRlbnRpYWxzLmluZGV4T2YoJzonKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHVzZXI6IHN0cmluZyA9IGNyZWRlbnRpYWxzLnNsaWNlKDAsIGluZGV4KTtcbiAgY29uc3QgcGFzc3dvcmQ6IHN0cmluZyA9IGNyZWRlbnRpYWxzLnNsaWNlKGluZGV4ICsgMSk7XG5cbiAgcmV0dXJuIHsgdXNlciwgcGFzc3dvcmQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQUVTQ3JlZGVudGlhbHMoYXV0aG9yaXphdGlvbkhlYWRlcjogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZykge1xuICBjb25zdCB7IHNjaGVtZSwgdG9rZW4gfSA9IHBhcnNlQXV0aFRva2VuSGVhZGVyKGF1dGhvcml6YXRpb25IZWFkZXIpO1xuXG4gIC8vIGJhc2ljIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgZW5mb3JjZWRcbiAgaWYgKHNjaGVtZS50b1VwcGVyQ2FzZSgpID09PSBUT0tFTl9CQVNJQy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0KHRva2VuKS50b1N0cmluZygpO1xuXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzO1xuICB9IGVsc2UgaWYgKHNjaGVtZS50b1VwcGVyQ2FzZSgpID09PSBUT0tFTl9CRUFSRVIudG9VcHBlckNhc2UoKSkge1xuICAgIGNvbnN0IHRva2VuQXNCdWZmZXIgPSBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0KHRva2VuKTtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IGFlc0RlY3J5cHQodG9rZW5Bc0J1ZmZlciwgc2VjcmV0KS50b1N0cmluZygndXRmOCcpO1xuXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBleHBpcmVSZWFzb25zOiBzdHJpbmdbXSA9IFsnSnNvbldlYlRva2VuRXJyb3InLCAnVG9rZW5FeHBpcmVkRXJyb3InXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeUpXVFBheWxvYWQodG9rZW46IHN0cmluZywgc2VjcmV0OiBzdHJpbmcpOiBSZW1vdGVVc2VyIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkOiBSZW1vdGVVc2VyID0gdmVyaWZ5UGF5bG9hZCh0b2tlbiwgc2VjcmV0KTtcblxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vICMxNjggdGhpcyBjaGVjayBzaG91bGQgYmUgcmVtb3ZlZCBhcyBzb29uIEFFUyBlbmNyeXB0IGlzIHJlbW92ZWQuXG4gICAgaWYgKGV4cGlyZVJlYXNvbnMuaW5jbHVkZXMoZXJyb3IubmFtZSkpIHtcbiAgICAgIC8vIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRoZSBqd3QgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIGFuZFxuICAgICAgLy8gb2xkIHRva2VucyBmYWlscyBzdGlsbCByZW1haW5zIGluIHVzYWdlLCB0aHVzXG4gICAgICAvLyB3ZSByZXR1cm4gYW4gYW5vbnltb3VzIHVzZXIgdG8gZm9yY2UgbG9nIGluLlxuICAgICAgcmV0dXJuIGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIoKTtcbiAgICB9XG4gICAgdGhyb3cgRXJyb3JDb2RlLmdldENvZGUoSFRUUF9TVEFUVVMuVU5BVVRIT1JJWkVELCBlcnJvci5tZXNzYWdlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBdXRoSGVhZGVyVmFsaWQoYXV0aG9yaXphdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBhdXRob3JpemF0aW9uLnNwbGl0KCcgJykubGVuZ3RoID09PSAyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlkZGxld2FyZUNyZWRlbnRpYWxzKHNlY3VyaXR5OiBTZWN1cml0eSwgc2VjcmV0OiBzdHJpbmcsIGF1dGhvcml6YXRpb25IZWFkZXI6IHN0cmluZyk6IEF1dGhNaWRkbGV3YXJlUGF5bG9hZCB7XG4gIGlmIChpc0FFU0xlZ2FjeShzZWN1cml0eSkpIHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHBhcnNlQUVTQ3JlZGVudGlhbHMoYXV0aG9yaXphdGlvbkhlYWRlciwgc2VjcmV0KTtcbiAgICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkQ3JlZGVudGlhbHMgPSBwYXJzZUJhc2ljUGF5bG9hZChjcmVkZW50aWFscyk7XG4gICAgaWYgKCFwYXJzZWRDcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWRDcmVkZW50aWFscztcbiAgfVxuICBjb25zdCB7IHNjaGVtZSwgdG9rZW4gfSA9IHBhcnNlQXV0aFRva2VuSGVhZGVyKGF1dGhvcml6YXRpb25IZWFkZXIpO1xuXG4gIGlmIChfLmlzU3RyaW5nKHRva2VuKSAmJiBzY2hlbWUudG9VcHBlckNhc2UoKSA9PT0gVE9LRU5fQkVBUkVSLnRvVXBwZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gdmVyaWZ5SldUUGF5bG9hZCh0b2tlbiwgc2VjcmV0KTtcbiAgfVxufVxuIl19
315
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC11dGlscy50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsInZhbGlkYXRlUGFzc3dvcmQiLCJwYXNzd29yZCIsIm1pbkxlbmd0aCIsIkRFRkFVTFRfTUlOX0xJTUlUX1BBU1NXT1JEIiwibGVuZ3RoIiwiY3JlYXRlUmVtb3RlVXNlciIsIm5hbWUiLCJwbHVnaW5Hcm91cHMiLCJpc0dyb3VwVmFsaWQiLCJBcnJheSIsImlzQXJyYXkiLCJncm91cHMiLCJmcm9tIiwiU2V0IiwiY29uY2F0IiwiUk9MRVMiLCIkQUxMIiwiJEFVVEgiLCJERVBSRUNBVEVEX0FMTCIsIkRFUFJFQ0FURURfQVVUSCIsIkFMTCIsInJlYWxfZ3JvdXBzIiwiY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlciIsInVuZGVmaW5lZCIsIiRBTk9OWU1PVVMiLCJERVBSRUNBVEVEX0FOT05ZTU9VUyIsImFsbG93X2FjdGlvbiIsImFjdGlvbiIsInVzZXIiLCJwa2ciLCJjYWxsYmFjayIsImdyb3VwQWNjZXNzIiwiaGFzUGVybWlzc2lvbiIsInNvbWUiLCJncm91cCIsImluY2x1ZGVzIiwibG9nZ2VyIiwiaW5mbyIsInJlbW90ZSIsIkVycm9yQ29kZSIsImdldEZvcmJpZGRlbiIsImdldFVuYXV0aG9yaXplZCIsImhhbmRsZVNwZWNpYWxVbnB1Ymxpc2giLCJpc1VucHVibGlzaE1pc3NpbmciLCJfIiwiaXNOaWwiLCJoYXNHcm91cHMiLCJnZXREZWZhdWx0UGx1Z2lucyIsImF1dGhlbnRpY2F0ZSIsIl91c2VyIiwiX3Bhc3N3b3JkIiwiY2IiLCJBUElfRVJST1IiLCJCQURfVVNFUk5BTUVfUEFTU1dPUkQiLCJhZGRfdXNlciIsImdldENvbmZsaWN0IiwiYWxsb3dfYWNjZXNzIiwiYWxsb3dfcHVibGlzaCIsImFsbG93X3VucHVibGlzaCIsImNyZWF0ZVNlc3Npb25Ub2tlbiIsInRlbkhvdXJzVGltZSIsImV4cGlyZXMiLCJEYXRlIiwibm93IiwiZGVmYXVsdFdlYlRva2VuT3B0aW9ucyIsInNpZ24iLCJleHBpcmVzSW4iLCJUSU1FX0VYUElSQVRJT05fMUgiLCJ2ZXJpZnkiLCJkZWZhdWx0QXBpVG9rZW5Db25mIiwibGVnYWN5IiwiZGVmYXVsdFVzZXJSYXRlTGltaXRpbmciLCJ3aW5kb3dNcyIsIm1heCIsImRlZmF1bHRTZWN1cml0eSIsIndlYiIsImFwaSIsImdldFNlY3VyaXR5IiwiY29uZmlnIiwic2VjdXJpdHkiLCJtZXJnZSIsImdldEF1dGhlbnRpY2F0ZWRNZXNzYWdlIiwiYnVpbGRVc2VyQnVmZmVyIiwiQnVmZmVyIiwiaXNBRVNMZWdhY3kiLCJqd3QiLCJnZXRBcGlUb2tlbiIsImF1dGgiLCJyZW1vdGVVc2VyIiwiYWVzUGFzc3dvcmQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFlc0VuY3J5cHQiLCJ0b1N0cmluZyIsImp3dEVuY3J5cHQiLCJwYXJzZUF1dGhUb2tlbkhlYWRlciIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJwYXJ0cyIsInNwbGl0Iiwic2NoZW1lIiwidG9rZW4iLCJwYXJzZUJhc2ljUGF5bG9hZCIsImNyZWRlbnRpYWxzIiwiaW5kZXgiLCJpbmRleE9mIiwic2xpY2UiLCJwYXJzZUFFU0NyZWRlbnRpYWxzIiwic2VjcmV0IiwidG9VcHBlckNhc2UiLCJUT0tFTl9CQVNJQyIsIlRPS0VOX0JFQVJFUiIsInRva2VuQXNCdWZmZXIiLCJleHBpcmVSZWFzb25zIiwidmVyaWZ5SldUUGF5bG9hZCIsInBheWxvYWQiLCJlcnJvciIsImdldENvZGUiLCJIVFRQX1NUQVRVUyIsIlVOQVVUSE9SSVpFRCIsIm1lc3NhZ2UiLCJpc0F1dGhIZWFkZXJWYWxpZCIsImF1dGhvcml6YXRpb24iLCJnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMiLCJwYXJzZWRDcmVkZW50aWFscyIsImlzU3RyaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxLQUFLLEdB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RUFBNENILEtBQUssQ0FBQ0ksT0FBbEQsQ0FBTjtBQUNEO0FBQ0Y7O0FBRU0sU0FBU0MsaUJBQVQsQ0FBMkJDLGFBQTNCLEVBQTJEO0FBQ2hFLFNBQU9BLGFBQWEsQ0FBQ3ZCLEtBQWQsQ0FBb0IsR0FBcEIsRUFBeUI5RixNQUF6QixLQUFvQyxDQUEzQztBQUNEOztBQUVNLFNBQVNzSCx3QkFBVCxDQUFrQzNDLFFBQWxDLEVBQXNENEIsTUFBdEQsRUFBc0VYLG1CQUF0RSxFQUEwSDtBQUMvSCxNQUFJWixXQUFXLENBQUNMLFFBQUQsQ0FBZixFQUEyQjtBQUN6QixVQUFNdUIsV0FBVyxHQUFHSSxtQkFBbUIsQ0FBQ1YsbUJBQUQsRUFBc0JXLE1BQXRCLENBQXZDOztBQUNBLFFBQUksQ0FBQ0wsV0FBTCxFQUFrQjtBQUNoQjtBQUNEOztBQUVELFVBQU1xQixpQkFBaUIsR0FBR3RCLGlCQUFpQixDQUFDQyxXQUFELENBQTNDOztBQUNBLFFBQUksQ0FBQ3FCLGlCQUFMLEVBQXdCO0FBQ3RCO0FBQ0Q7O0FBRUQsV0FBT0EsaUJBQVA7QUFDRDs7QUFDRCxRQUFNO0FBQUV4QixJQUFBQSxNQUFGO0FBQVVDLElBQUFBO0FBQVYsTUFBb0JMLG9CQUFvQixDQUFDQyxtQkFBRCxDQUE5Qzs7QUFFQSxNQUFJcEQsZ0JBQUVnRixRQUFGLENBQVd4QixLQUFYLEtBQXFCRCxNQUFNLENBQUNTLFdBQVAsT0FBeUJFLHdCQUFhRixXQUFiLEVBQWxELEVBQThFO0FBQzVFLFdBQU9LLGdCQUFnQixDQUFDYixLQUFELEVBQVFPLE1BQVIsQ0FBdkI7QUFDRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJ1aWxkRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgQVBJVG9rZW5PcHRpb25zLCBDYWxsYmFjaywgQ29uZmlnLCBJUGx1Z2luQXV0aCwgSldUT3B0aW9ucywgUGFja2FnZSwgUmVtb3RlVXNlciwgU2VjdXJpdHkgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxuaW1wb3J0IHsgQXV0aE1pZGRsZXdhcmVQYXlsb2FkLCBBdXRoVG9rZW5IZWFkZXIsIEJhc2ljUGF5bG9hZCwgQ29va2llU2Vzc2lvblRva2VuLCBJQXV0aFdlYlVJIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vbGliL2xvZ2dlcic7XG5pbXBvcnQgeyBBUElfRVJST1IsIERFRkFVTFRfTUlOX0xJTUlUX1BBU1NXT1JELCBIVFRQX1NUQVRVUywgUk9MRVMsIFRJTUVfRVhQSVJBVElPTl8xSCwgVE9LRU5fQkFTSUMsIFRPS0VOX0JFQVJFUiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFlc0RlY3J5cHQsIHZlcmlmeVBheWxvYWQgfSBmcm9tICcuL2NyeXB0by11dGlscyc7XG5pbXBvcnQgeyBFcnJvckNvZGUsIGNvbnZlcnRQYXlsb2FkVG9CYXNlNjQgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgZGVidWcgPSBidWlsZERlYnVnKCd2ZXJkYWNjaW8nKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGFzc3dvcmQoXG4gIHBhc3N3b3JkOiBzdHJpbmcsIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICBtaW5MZW5ndGg6IG51bWJlciA9IERFRkFVTFRfTUlOX0xJTUlUX1BBU1NXT1JEXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBwYXNzd29yZCA9PT0gJ3N0cmluZycgJiYgcGFzc3dvcmQubGVuZ3RoID49IG1pbkxlbmd0aDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBSZW1vdGVVc2VyIG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSB7IG5hbWU6IHh4LCBwbHVnaW5Hcm91cHM6IFtdLCByZWFsX2dyb3VwczogW10gfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVtb3RlVXNlcihuYW1lOiBzdHJpbmcsIHBsdWdpbkdyb3Vwczogc3RyaW5nW10pOiBSZW1vdGVVc2VyIHtcbiAgY29uc3QgaXNHcm91cFZhbGlkOiBib29sZWFuID0gQXJyYXkuaXNBcnJheShwbHVnaW5Hcm91cHMpO1xuICBjb25zdCBncm91cHMgPSBBcnJheS5mcm9tKG5ldyBTZXQoKGlzR3JvdXBWYWxpZCA/IHBsdWdpbkdyb3VwcyA6IFtdKS5jb25jYXQoW1JPTEVTLiRBTEwsIFJPTEVTLiRBVVRILCBST0xFUy5ERVBSRUNBVEVEX0FMTCwgUk9MRVMuREVQUkVDQVRFRF9BVVRILCBST0xFUy5BTExdKSkpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZSxcbiAgICBncm91cHMsXG4gICAgcmVhbF9ncm91cHM6IHBsdWdpbkdyb3VwcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW4gYW5vbnltb3VzIHJlbW90ZSB1c2VyIGluIGNhc2Ugbm9uZSBpcyBsb2dnZWQgaW4uXG4gKiBAcmV0dXJuIHtPYmplY3R9IHsgbmFtZTogeHgsIGdyb3VwczogW10sIHJlYWxfZ3JvdXBzOiBbXSB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk6IFJlbW90ZVVzZXIge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAvLyBncm91cHMgd2l0aG91dCAnJCcgYXJlIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQgZXZlbnR1YWxseVxuICAgIGdyb3VwczogW1JPTEVTLiRBTEwsIFJPTEVTLiRBTk9OWU1PVVMsIFJPTEVTLkRFUFJFQ0FURURfQUxMLCBST0xFUy5ERVBSRUNBVEVEX0FOT05ZTU9VU10sXG4gICAgcmVhbF9ncm91cHM6IFtdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dfYWN0aW9uKGFjdGlvbjogc3RyaW5nKTogRnVuY3Rpb24ge1xuICByZXR1cm4gZnVuY3Rpb24gKHVzZXI6IFJlbW90ZVVzZXIsIHBrZzogUGFja2FnZSwgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgZGVidWcoJ1thdXRoL2FsbG93X2FjdGlvbl06IHVzZXI6ICVvJywgdXNlcj8ubmFtZSk7XG4gICAgY29uc3QgeyBuYW1lLCBncm91cHMgfSA9IHVzZXI7XG4gICAgY29uc3QgZ3JvdXBBY2Nlc3MgPSBwa2dbYWN0aW9uXTtcbiAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gZ3JvdXBBY2Nlc3Muc29tZSgoZ3JvdXApID0+IG5hbWUgPT09IGdyb3VwIHx8IGdyb3Vwcy5pbmNsdWRlcyhncm91cCkpO1xuICAgIGRlYnVnKCdbYXV0aC9hbGxvd19hY3Rpb25dOiBoYXNQZXJtaXNzaW9uPyAlb30gZm9yIHVzZXI6ICVvJywgaGFzUGVybWlzc2lvbiwgdXNlcj8ubmFtZSk7XG5cbiAgICBpZiAoaGFzUGVybWlzc2lvbikge1xuICAgICAgbG9nZ2VyLmluZm8oeyByZW1vdGU6IHVzZXIubmFtZSB9LCBgYXV0aC9hbGxvd19hY3Rpb246IGFjY2VzcyBncmFudGVkIHRvOiBAe3VzZXJ9YCk7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGNhbGxiYWNrKEVycm9yQ29kZS5nZXRGb3JiaWRkZW4oYHVzZXIgJHtuYW1lfSBpcyBub3QgYWxsb3dlZCB0byAke2FjdGlvbn0gcGFja2FnZSAke3BrZy5uYW1lfWApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soRXJyb3JDb2RlLmdldFVuYXV0aG9yaXplZChgYXV0aG9yaXphdGlvbiByZXF1aXJlZCB0byAke2FjdGlvbn0gcGFja2FnZSAke3BrZy5uYW1lfWApKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVNwZWNpYWxVbnB1Ymxpc2goKTogYW55IHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh1c2VyOiBSZW1vdGVVc2VyLCBwa2c6IFBhY2thZ2UsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGlvbiA9ICd1bnB1Ymxpc2gnO1xuICAgIC8vIHZlcmlmeSB3aGV0aGVyIHRoZSB1bnB1Ymxpc2ggcHJvcCBoYXMgYmVlbiBkZWZpbmVkXG4gICAgY29uc3QgaXNVbnB1Ymxpc2hNaXNzaW5nOiBib29sZWFuID0gXy5pc05pbChwa2dbYWN0aW9uXSk7XG4gICAgY29uc3QgaGFzR3JvdXBzOiBib29sZWFuID0gaXNVbnB1Ymxpc2hNaXNzaW5nID8gZmFsc2UgOiBwa2dbYWN0aW9uXS5sZW5ndGggPiAwO1xuICAgIGRlYnVnKCdmYWxsYmFjayB1bnB1Ymxpc2ggZm9yIEB7bmFtZX0gaGFzIGdyb3VwczogJW8gZm9yICVvJywgaGFzR3JvdXBzLCB1c2VyPy5uYW1lKTtcbiAgICBpZiAoaXNVbnB1Ymxpc2hNaXNzaW5nIHx8IGhhc0dyb3VwcyA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBkZWJ1ZygnYWxsb3dfYWN0aW9uIGZvciAlbyBmb3IgJW8gaGFzIGdyb3VwczogJW8gZm9yICVvJywgYWN0aW9uLCB1c2VyPy5uYW1lLCBoYXNHcm91cHMsIHVzZXIpO1xuICAgIHJldHVybiBhbGxvd19hY3Rpb24oYWN0aW9uKSh1c2VyLCBwa2csIGNhbGxiYWNrKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRQbHVnaW5zKGxvZ2dlcjogYW55KTogSVBsdWdpbkF1dGg8Q29uZmlnPiB7XG4gIHJldHVybiB7XG4gICAgYXV0aGVudGljYXRlKF91c2VyOiBzdHJpbmcsIF9wYXNzd29yZDogc3RyaW5nLCBjYjogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAgIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICAgICAgY2IoRXJyb3JDb2RlLmdldEZvcmJpZGRlbihBUElfRVJST1IuQkFEX1VTRVJOQU1FX1BBU1NXT1JEKSk7XG4gICAgfSxcblxuICAgIGFkZF91c2VyKF91c2VyOiBzdHJpbmcsIF9wYXNzd29yZDogc3RyaW5nLCBjYjogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAgIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICAgICAgcmV0dXJuIGNiKEVycm9yQ29kZS5nZXRDb25mbGljdChBUElfRVJST1IuQkFEX1VTRVJOQU1FX1BBU1NXT1JEKSk7XG4gICAgfSxcblxuICAgIC8vIEZJWE1FOiBhbGxvd19hY3Rpb24gYW5kIGFsbG93X3B1Ymxpc2ggc2hvdWxkIGJlIGluIHRoZSBAdmVyZGFjY2lvL3R5cGVzXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGFsbG93X2FjY2VzczogYWxsb3dfYWN0aW9uKCdhY2Nlc3MnLCBsb2dnZXIpLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBhbGxvd19wdWJsaXNoOiBhbGxvd19hY3Rpb24oJ3B1Ymxpc2gnLCBsb2dnZXIpLFxuICAgIGFsbG93X3VucHVibGlzaDogaGFuZGxlU3BlY2lhbFVucHVibGlzaCgpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2Vzc2lvblRva2VuKCk6IENvb2tpZVNlc3Npb25Ub2tlbiB7XG4gIGNvbnN0IHRlbkhvdXJzVGltZSA9IDEwICogNjAgKiA2MCAqIDEwMDA7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBucG1qcy5vcmcgc2V0cyAxMGggZXhwaXJlXG4gICAgZXhwaXJlczogbmV3IERhdGUoRGF0ZS5ub3coKSArIHRlbkhvdXJzVGltZSksXG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRXZWJUb2tlbk9wdGlvbnM6IEpXVE9wdGlvbnMgPSB7XG4gIHNpZ246IHtcbiAgICAvLyBUaGUgZXhwaXJhdGlvbiB0b2tlbiBmb3IgdGhlIHdlYnNpdGUgaXMgMSBob3VyXG4gICAgZXhwaXJlc0luOiBUSU1FX0VYUElSQVRJT05fMUgsXG4gIH0sXG4gIHZlcmlmeToge30sXG59O1xuXG5jb25zdCBkZWZhdWx0QXBpVG9rZW5Db25mOiBBUElUb2tlbk9wdGlvbnMgPSB7XG4gIGxlZ2FjeTogdHJ1ZSxcbn07XG5cbi8vIHdlIGxpbWl0IG1heCAxMDAwIHJlcXVlc3QgcGVyIDE1IG1pbnV0ZXMgb24gdXNlciBlbmRwb2ludHNcbmV4cG9ydCBjb25zdCBkZWZhdWx0VXNlclJhdGVMaW1pdGluZyA9IHtcbiAgd2luZG93TXM6IDE1ICogNjAgKiAxMDAwLCAvLyAxNSBtaW51dGVzXG4gIG1heDogMTAwMCxcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2VjdXJpdHk6IFNlY3VyaXR5ID0ge1xuICB3ZWI6IGRlZmF1bHRXZWJUb2tlbk9wdGlvbnMsXG4gIGFwaTogZGVmYXVsdEFwaVRva2VuQ29uZixcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWN1cml0eShjb25maWc6IENvbmZpZyk6IFNlY3VyaXR5IHtcbiAgaWYgKF8uaXNOaWwoY29uZmlnLnNlY3VyaXR5KSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gXy5tZXJnZShkZWZhdWx0U2VjdXJpdHksIGNvbmZpZy5zZWN1cml0eSk7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFNlY3VyaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXV0aGVudGljYXRlZE1lc3NhZ2UodXNlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB5b3UgYXJlIGF1dGhlbnRpY2F0ZWQgYXMgJyR7dXNlcn0nYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVXNlckJ1ZmZlcihuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBCdWZmZXIge1xuICByZXR1cm4gQnVmZmVyLmZyb20oYCR7bmFtZX06JHtwYXNzd29yZH1gLCAndXRmOCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBRVNMZWdhY3koc2VjdXJpdHk6IFNlY3VyaXR5KTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgbGVnYWN5LCBqd3QgfSA9IHNlY3VyaXR5LmFwaTtcblxuICByZXR1cm4gXy5pc05pbChsZWdhY3kpID09PSBmYWxzZSAmJiBfLmlzTmlsKGp3dCkgJiYgbGVnYWN5ID09PSB0cnVlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXBpVG9rZW4oYXV0aDogSUF1dGhXZWJVSSwgY29uZmlnOiBDb25maWcsIHJlbW90ZVVzZXI6IFJlbW90ZVVzZXIsIGFlc1Bhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBzZWN1cml0eTogU2VjdXJpdHkgPSBnZXRTZWN1cml0eShjb25maWcpO1xuICBpZiAoaXNBRVNMZWdhY3koc2VjdXJpdHkpKSB7XG4gICAgLy8gZmFsbGJhY2sgYWxsIGdvZXMgdG8gQUVTIGVuY3J5cHRpb25cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICAgIHJlc29sdmUoYXV0aC5hZXNFbmNyeXB0KGJ1aWxkVXNlckJ1ZmZlcihyZW1vdGVVc2VyLm5hbWUgYXMgc3RyaW5nLCBhZXNQYXNzd29yZCkpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgfSk7XG4gIH1cbiAgLy8gaSBhbSB3aWxpbmcgdG8gdXNlIGhlcmUgXy5pc05pbCBidXQgZmxvdyBkb2VzIG5vdCBsaWtlIGl0IHlldC5cbiAgY29uc3QgeyBqd3QgfSA9IHNlY3VyaXR5LmFwaTtcblxuICBpZiAoand0ICYmIGp3dC5zaWduKSB7XG4gICAgcmV0dXJuIGF3YWl0IGF1dGguand0RW5jcnlwdChyZW1vdGVVc2VyLCBqd3Quc2lnbik7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgcmVzb2x2ZShhdXRoLmFlc0VuY3J5cHQoYnVpbGRVc2VyQnVmZmVyKHJlbW90ZVVzZXIubmFtZSBhcyBzdHJpbmcsIGFlc1Bhc3N3b3JkKSkudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUF1dGhUb2tlbkhlYWRlcihhdXRob3JpemF0aW9uSGVhZGVyOiBzdHJpbmcpOiBBdXRoVG9rZW5IZWFkZXIge1xuICBjb25zdCBwYXJ0cyA9IGF1dGhvcml6YXRpb25IZWFkZXIuc3BsaXQoJyAnKTtcbiAgY29uc3QgW3NjaGVtZSwgdG9rZW5dID0gcGFydHM7XG5cbiAgcmV0dXJuIHsgc2NoZW1lLCB0b2tlbiB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCYXNpY1BheWxvYWQoY3JlZGVudGlhbHM6IHN0cmluZyk6IEJhc2ljUGF5bG9hZCB7XG4gIGNvbnN0IGluZGV4ID0gY3JlZGVudGlhbHMuaW5kZXhPZignOicpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdXNlcjogc3RyaW5nID0gY3JlZGVudGlhbHMuc2xpY2UoMCwgaW5kZXgpO1xuICBjb25zdCBwYXNzd29yZDogc3RyaW5nID0gY3JlZGVudGlhbHMuc2xpY2UoaW5kZXggKyAxKTtcblxuICByZXR1cm4geyB1c2VyLCBwYXNzd29yZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBRVNDcmVkZW50aWFscyhhdXRob3JpemF0aW9uSGVhZGVyOiBzdHJpbmcsIHNlY3JldDogc3RyaW5nKSB7XG4gIGNvbnN0IHsgc2NoZW1lLCB0b2tlbiB9ID0gcGFyc2VBdXRoVG9rZW5IZWFkZXIoYXV0aG9yaXphdGlvbkhlYWRlcik7XG5cbiAgLy8gYmFzaWMgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSBlbmZvcmNlZFxuICBpZiAoc2NoZW1lLnRvVXBwZXJDYXNlKCkgPT09IFRPS0VOX0JBU0lDLnRvVXBwZXJDYXNlKCkpIHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IGNvbnZlcnRQYXlsb2FkVG9CYXNlNjQodG9rZW4pLnRvU3RyaW5nKCk7XG5cbiAgICByZXR1cm4gY3JlZGVudGlhbHM7XG4gIH0gZWxzZSBpZiAoc2NoZW1lLnRvVXBwZXJDYXNlKCkgPT09IFRPS0VOX0JFQVJFUi50b1VwcGVyQ2FzZSgpKSB7XG4gICAgY29uc3QgdG9rZW5Bc0J1ZmZlciA9IGNvbnZlcnRQYXlsb2FkVG9CYXNlNjQodG9rZW4pO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYWVzRGVjcnlwdCh0b2tlbkFzQnVmZmVyLCBzZWNyZXQpLnRvU3RyaW5nKCd1dGY4Jyk7XG5cbiAgICByZXR1cm4gY3JlZGVudGlhbHM7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGV4cGlyZVJlYXNvbnM6IHN0cmluZ1tdID0gWydKc29uV2ViVG9rZW5FcnJvcicsICdUb2tlbkV4cGlyZWRFcnJvciddO1xuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5SldUUGF5bG9hZCh0b2tlbjogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZyk6IFJlbW90ZVVzZXIge1xuICB0cnkge1xuICAgIGNvbnN0IHBheWxvYWQ6IFJlbW90ZVVzZXIgPSB2ZXJpZnlQYXlsb2FkKHRva2VuLCBzZWNyZXQpO1xuXG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gIzE2OCB0aGlzIGNoZWNrIHNob3VsZCBiZSByZW1vdmVkIGFzIHNvb24gQUVTIGVuY3J5cHQgaXMgcmVtb3ZlZC5cbiAgICBpZiAoZXhwaXJlUmVhc29ucy5pbmNsdWRlcyhlcnJvci5uYW1lKSkge1xuICAgICAgLy8gaXQgbWlnaHQgYmUgcG9zc2libGUgdGhlIGp3dCBjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQgYW5kXG4gICAgICAvLyBvbGQgdG9rZW5zIGZhaWxzIHN0aWxsIHJlbWFpbnMgaW4gdXNhZ2UsIHRodXNcbiAgICAgIC8vIHdlIHJldHVybiBhbiBhbm9ueW1vdXMgdXNlciB0byBmb3JjZSBsb2cgaW4uXG4gICAgICByZXR1cm4gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpO1xuICAgIH1cbiAgICB0aHJvdyBFcnJvckNvZGUuZ2V0Q29kZShIVFRQX1NUQVRVUy5VTkFVVEhPUklaRUQsIGVycm9yLm1lc3NhZ2UpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0F1dGhIZWFkZXJWYWxpZChhdXRob3JpemF0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGF1dGhvcml6YXRpb24uc3BsaXQoJyAnKS5sZW5ndGggPT09IDI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMoc2VjdXJpdHk6IFNlY3VyaXR5LCBzZWNyZXQ6IHN0cmluZywgYXV0aG9yaXphdGlvbkhlYWRlcjogc3RyaW5nKTogQXV0aE1pZGRsZXdhcmVQYXlsb2FkIHtcbiAgaWYgKGlzQUVTTGVnYWN5KHNlY3VyaXR5KSkge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gcGFyc2VBRVNDcmVkZW50aWFscyhhdXRob3JpemF0aW9uSGVhZGVyLCBzZWNyZXQpO1xuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRDcmVkZW50aWFscyA9IHBhcnNlQmFzaWNQYXlsb2FkKGNyZWRlbnRpYWxzKTtcbiAgICBpZiAoIXBhcnNlZENyZWRlbnRpYWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZENyZWRlbnRpYWxzO1xuICB9XG4gIGNvbnN0IHsgc2NoZW1lLCB0b2tlbiB9ID0gcGFyc2VBdXRoVG9rZW5IZWFkZXIoYXV0aG9yaXphdGlvbkhlYWRlcik7XG5cbiAgaWYgKF8uaXNTdHJpbmcodG9rZW4pICYmIHNjaGVtZS50b1VwcGVyQ2FzZSgpID09PSBUT0tFTl9CRUFSRVIudG9VcHBlckNhc2UoKSkge1xuICAgIHJldHVybiB2ZXJpZnlKV1RQYXlsb2FkKHRva2VuLCBzZWNyZXQpO1xuICB9XG59XG4iXX0=
package/build/lib/auth.js CHANGED
@@ -516,7 +516,7 @@ class Auth {
516
516
  groups
517
517
  } = user;
518
518
  const realGroupsValidated = _lodash.default.isNil(real_groups) ? [] : real_groups;
519
- const groupedGroups = _lodash.default.isNil(groups) ? real_groups : groups.concat(realGroupsValidated);
519
+ const groupedGroups = _lodash.default.isNil(groups) ? real_groups : Array.from(new Set([...groups.concat(realGroupsValidated)]));
520
520
  const payload = {
521
521
  real_groups: realGroupsValidated,
522
522
  name,
@@ -538,4 +538,4 @@ class Auth {
538
538
 
539
539
  var _default = Auth;
540
540
  exports.default = _default;
541
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsIkF1dGgiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImxvZ2dlciIsInNlY3JldCIsInBsdWdpbnMiLCJfbG9hZFBsdWdpbiIsIl9hcHBseURlZmF1bHRQbHVnaW5zIiwicGx1Z2luT3B0aW9ucyIsImF1dGgiLCJwbHVnaW4iLCJhdXRoZW50aWNhdGUiLCJhbGxvd19hY2Nlc3MiLCJhbGxvd19wdWJsaXNoIiwicHVzaCIsImNoYW5nZVBhc3N3b3JkIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIm5ld1Bhc3N3b3JkIiwiY2IiLCJ2YWxpZFBsdWdpbnMiLCJfIiwiZmlsdGVyIiwiaXNGdW5jdGlvbiIsImlzRW1wdHkiLCJFcnJvckNvZGUiLCJnZXRJbnRlcm5hbEVycm9yIiwiU1VQUE9SVF9FUlJPUlMiLCJQTFVHSU5fTUlTU0lOR19JTlRFUkZBQ0UiLCJpc05pbCIsImVyciIsInByb2ZpbGUiLCJlcnJvciIsImluZm8iLCJzbGljZSIsInNlbGYiLCJuZXh0Iiwic2hpZnQiLCJncm91cHMiLCJsZW5ndGgiLCJpc1N0cmluZyIsIlR5cGVFcnJvciIsImlzR3JvdXBWYWxpZCIsImlzQXJyYXkiLCJBUElfRVJST1IiLCJCQURfRk9STUFUX1VTRVJfR1JPVVAiLCJhZGRfdXNlciIsInVzZXIiLCJtZXRob2QiLCJ3YXJuIiwib2siLCJtZXNzYWdlIiwicGFja2FnZU5hbWUiLCJwYWNrYWdlVmVyc2lvbiIsImNhbGxiYWNrIiwicGtnQWxsb3dBY2NlcyIsIm5hbWUiLCJ2ZXJzaW9uIiwicGtnIiwiT2JqZWN0IiwiYXNzaWduIiwicGFja2FnZXMiLCJhbGxvd191bnB1Ymxpc2giLCJhcmd1bWVudHMiLCJpc0Vycm9yIiwiYXBpSldUbWlkZGxld2FyZSIsImhlbHBlcnMiLCJjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyIiwiY3JlYXRlUmVtb3RlVXNlciIsInJlcSIsInJlcyIsIl9uZXh0IiwicGF1c2UiLCJyZXN1bWUiLCJyZW1vdGVfdXNlciIsIl9pc1JlbW90ZVVzZXJWYWxpZCIsImF1dGhvcml6YXRpb24iLCJoZWFkZXJzIiwiZ2V0QmFkUmVxdWVzdCIsIkJBRF9BVVRIX0hFQURFUiIsInNlY3VyaXR5IiwiX2hhbmRsZUFFU01pZGRsZXdhcmUiLCJfaGFuZGxlSldUQVBJTWlkZGxld2FyZSIsInNjaGVtZSIsInRva2VuIiwidG9VcHBlckNhc2UiLCJUT0tFTl9CQVNJQyIsImNyZWRlbnRpYWxzIiwidG9TdHJpbmciLCJnZXRGb3JiaWRkZW4iLCJCQURfVVNFUk5BTUVfUEFTU1dPUkQiLCJpc1VuZGVmaW5lZCIsIndlYlVJSldUbWlkZGxld2FyZSIsInN0YXR1cyIsInN0YXR1c0NvZGUiLCJzZW5kIiwicmVwbGFjZSIsIlRPS0VOX0JFQVJFUiIsImp3dEVuY3J5cHQiLCJzaWduT3B0aW9ucyIsInJlYWxfZ3JvdXBzIiwicmVhbEdyb3Vwc1ZhbGlkYXRlZCIsImdyb3VwZWRHcm91cHMiLCJjb25jYXQiLCJwYXlsb2FkIiwiYWVzRW5jcnlwdCIsImJ1ZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOztBQU1BOztBQUNBOztBQVlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsS0FBSyxHQUFHLG9CQUFXLGdCQUFYLENBQWQ7O0FBRUEsTUFBTUMsSUFBTixDQUE0QjtBQUdIO0FBR2hCQyxFQUFBQSxXQUFXLENBQUNDLE1BQUQsRUFBaUI7QUFDakMsU0FBS0EsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0MsTUFBTCxHQUFjQSxjQUFkO0FBQ0EsU0FBS0MsTUFBTCxHQUFjRixNQUFNLENBQUNFLE1BQXJCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtDLFdBQUwsQ0FBaUJKLE1BQWpCLENBQWY7O0FBQ0EsU0FBS0ssb0JBQUw7QUFDRDs7QUFFT0QsRUFBQUEsV0FBVyxDQUFDSixNQUFELEVBQXdDO0FBQ3pELFVBQU1NLGFBQWEsR0FBRztBQUNwQk4sTUFBQUEsTUFE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OUNEO0FBK0NEOztBQUVzQixRQUFWOEQsVUFBVSxDQUFDbkQsSUFBRCxFQUFtQm9ELFdBQW5CLEVBQWlFO0FBQ3RGLFVBQU07QUFBRUMsTUFBQUEsV0FBRjtBQUFlNUMsTUFBQUEsSUFBZjtBQUFxQmxCLE1BQUFBO0FBQXJCLFFBQWdDUyxJQUF0QztBQUNBLFVBQU1zRCxtQkFBbUIsR0FBR2hGLGdCQUFFUSxLQUFGLENBQVF1RSxXQUFSLElBQXVCLEVBQXZCLEdBQTRCQSxXQUF4RDtBQUNBLFVBQU1FLGFBQWEsR0FBR2pGLGdCQUFFUSxLQUFGLENBQVFTLE1BQVIsSUFBa0I4RCxXQUFsQixHQUFnQzlELE1BQU0sQ0FBQ2lFLE1BQVAsQ0FBY0YsbUJBQWQsQ0FBdEQ7QUFDQSxVQUFNRyxPQUFtQixHQUFHO0FBQzFCSixNQUFBQSxXQUFXLEVBQUVDLG1CQURhO0FBRTFCN0MsTUFBQUEsSUFGMEI7QUFHMUJsQixNQUFBQSxNQUFNLEVBQUVnRTtBQUhrQixLQUE1QjtBQU1BLFVBQU1sQixLQUFhLEdBQUcsTUFBTSw4QkFBWW9CLE9BQVosRUFBcUIsS0FBS3BHLE1BQTFCLEVBQWtDK0YsV0FBbEMsQ0FBNUI7QUFFQSxXQUFPZixLQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7OztBQUNTcUIsRUFBQUEsVUFBVSxDQUFDQyxHQUFELEVBQXNCO0FBQ3JDLFdBQU8sNkJBQVdBLEdBQVgsRUFBZ0IsS0FBS3RHLE1BQXJCLENBQVA7QUFDRDs7QUExWnlCOztlQTZaYkosSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgVmVyZGFjY2lvRXJyb3IgfSBmcm9tICdAdmVyZGFjY2lvL2NvbW1vbnMtYXBpJztcbmltcG9ydCB7IEFsbG93QWNjZXNzLCBBdXRoUGx1Z2luUGFja2FnZSwgQ2FsbGJhY2ssIENvbmZpZywgSVBsdWdpbkF1dGgsIEpXVFNpZ25PcHRpb25zLCBMb2dnZXIsIFBhY2thZ2VBY2Nlc3MsIFJlbW90ZVVzZXIsIFNlY3VyaXR5IH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7ICRSZXF1ZXN0RXh0ZW5kLCAkUmVzcG9uc2VFeHRlbmQsIEFFU1BheWxvYWQsIElBdXRoIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IGxvYWRQbHVnaW4gZnJvbSAnLi4vbGliL3BsdWdpbi1sb2FkZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcixcbiAgY3JlYXRlUmVtb3RlVXNlcixcbiAgZ2V0RGVmYXVsdFBsdWdpbnMsXG4gIGdldE1pZGRsZXdhcmVDcmVkZW50aWFscyxcbiAgZ2V0U2VjdXJpdHksXG4gIGlzQUVTTGVnYWN5LFxuICBpc0F1dGhIZWFkZXJWYWxpZCxcbiAgcGFyc2VBdXRoVG9rZW5IZWFkZXIsXG4gIHBhcnNlQmFzaWNQYXlsb2FkLFxuICB2ZXJpZnlKV1RQYXlsb2FkLFxufSBmcm9tICcuL2F1dGgtdXRpbHMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyB9IGZyb20gJy4vY29uZmlnLXV0aWxzJztcbmltcG9ydCB7IEFQSV9FUlJPUiwgU1VQUE9SVF9FUlJPUlMsIFRPS0VOX0JBU0lDLCBUT0tFTl9CRUFSRVIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhZXNFbmNyeXB0LCBzaWduUGF5bG9hZCB9IGZyb20gJy4vY3J5cHRvLXV0aWxzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IEVycm9yQ29kZSwgY29udmVydFBheWxvYWRUb0Jhc2U2NCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2NpbzphdXRoJyk7XG5cbmNsYXNzIEF1dGggaW1wbGVtZW50cyBJQXV0aCB7XG4gIHB1YmxpYyBjb25maWc6IENvbmZpZztcbiAgcHVibGljIGxvZ2dlcjogTG9nZ2VyO1xuICBwdWJsaWMgc2VjcmV0OiBzdHJpbmc7IC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICBwdWJsaWMgcGx1Z2luczogSVBsdWdpbkF1dGg8Q29uZmlnPltdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb25maWc6IENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIHRoaXMuc2VjcmV0ID0gY29uZmlnLnNlY3JldDtcbiAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLl9sb2FkUGx1Z2luKGNvbmZpZyk7XG4gICAgdGhpcy5fYXBwbHlEZWZhdWx0UGx1Z2lucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZFBsdWdpbihjb25maWc6IENvbmZpZyk6IElQbHVnaW5BdXRoPENvbmZpZz5bXSB7XG4gICAgY29uc3QgcGx1Z2luT3B0aW9ucyA9IHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgfTtcblxuICAgIHJldHVybiBsb2FkUGx1Z2luPElQbHVnaW5BdXRoPENvbmZpZz4+KGNvbmZpZywgY29uZmlnLmF1dGgsIHBsdWdpbk9wdGlvbnMsIChwbHVnaW46IElQbHVnaW5BdXRoPENvbmZpZz4pOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgYXV0aGVudGljYXRlLCBhbGxvd19hY2Nlc3MsIGFsbG93X3B1Ymxpc2ggfSA9IHBsdWdpbjtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBhdXRoZW50aWNhdGUgfHwgYWxsb3dfYWNjZXNzIHx8IGFsbG93X3B1Ymxpc2g7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseURlZmF1bHRQbHVnaW5zKCk6IHZvaWQge1xuICAgIHRoaXMucGx1Z2lucy5wdXNoKGdldERlZmF1bHRQbHVnaW5zKHRoaXMubG9nZ2VyKSk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlUGFzc3dvcmQoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICBwYXNzd29yZDogc3RyaW5nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICBuZXdQYXNzd29yZDogc3RyaW5nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICBjYjogQ2FsbGJhY2tcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWRQbHVnaW5zID0gXy5maWx0ZXIodGhpcy5wbHVnaW5zLCAocGx1Z2luKSA9PiBfLmlzRnVuY3Rpb24ocGx1Z2luLmNoYW5nZVBhc3N3b3JkKSk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KHZhbGlkUGx1Z2lucykpIHtcbiAgICAgIHJldHVybiBjYihFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihTVVBQT1JUX0VSUk9SUy5QTFVHSU5fTUlTU0lOR19JTlRFUkZBQ0UpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB2YWxpZFBsdWdpbnMpIHtcbiAgICAgIGlmIChfLmlzTmlsKHBsdWdpbikgfHwgXy5pc0Z1bmN0aW9uKHBsdWdpbi5jaGFuZ2VQYXNzd29yZCkgPT09IGZhbHNlKSB7XG4gICAgICAgIGRlYnVnKCdhdXRoIHBsdWdpbiBkb2VzIG5vdCBpbXBsZW1lbnQgY2hhbmdlUGFzc3dvcmQsIHRyeWluZyBuZXh0IG9uZScpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYnVnKCd1cGRhdGluZyBwYXNzd29yZCBmb3IgJW8nLCB1c2VybmFtZSk7XG4gICAgICAgIHBsdWdpbi5jaGFuZ2VQYXNzd29yZCEodXNlcm5hbWUsIHBhc3N3b3JkLCBuZXdQYXNzd29yZCwgKGVyciwgcHJvZmlsZSk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICB7IHVzZXJuYW1lLCBlcnIgfSxcbiAgICAgICAgICAgICAgYEFuIGVycm9yIGhhcyBiZWVuIHByb2R1Y2VkXG4gICAgICAgICAgICB1cGRhdGluZyB0aGUgcGFzc3dvcmQgZm9yIEB7dXNlcm5hbWV9LiBFcnJvcjogQHtlcnIubWVzc2FnZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oeyB1c2VybmFtZSB9LCAndXBkYXRlZCBwYXNzd29yZCBmb3IgQHt1c2VybmFtZX0gd2FzIHN1Y2Nlc3NmdWwnKTtcbiAgICAgICAgICByZXR1cm4gY2IobnVsbCwgcHJvZmlsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhdXRoZW50aWNhdGUodXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAoZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuc2hpZnQoKSBhcyBJUGx1Z2luQXV0aDxDb25maWc+O1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihwbHVnaW4uYXV0aGVudGljYXRlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGRlYnVnKCdhdXRoZW50aWNhdGluZyAlbycsIHVzZXJuYW1lKTtcbiAgICAgIHBsdWdpbi5hdXRoZW50aWNhdGUodXNlcm5hbWUsIHBhc3N3b3JkLCBmdW5jdGlvbiAoZXJyLCBncm91cHMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgdXNlcm5hbWUsIGVyciB9LCAnYXV0aGVudGljYXRpbmcgZm9yIHVzZXIgQHt1c2VybmFtZX0gZmFpbGVkLiBFcnJvcjogQHtlcnIubWVzc2FnZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4cGVjdDogU0tJUCBpZiBncm91cHMgaXMgZmFsc2V5IGFuZCBub3QgYW4gYXJyYXlcbiAgICAgICAgLy8gICAgICAgICB3aXRoIGF0IGxlYXN0IG9uZSBpdGVtICh0cnV0aHkgbGVuZ3RoKVxuICAgICAgICAvLyBFeHBlY3Q6IENPTlRJTlVFIG90aGVyd2lzZSAod2lsbCBlcnJvciBpZiBncm91cHMgaXMgbm90XG4gICAgICAgIC8vICAgICAgICAgYW4gYXJyYXksIGJ1dCB0aGlzIGlzIGN1cnJlbnQgYmVoYXZpb3IpXG4gICAgICAgIC8vIENhdmVhdDogU1RSSU5HIChpZiB2YWxpZCkgd2lsbCBwYXNzIHN1Y2Nlc3NmdWxseVxuICAgICAgICAvLyAgICAgICAgIGJ1ZyBnaXZlIHVuZXhwZWN0ZWQgcmVzdWx0c1xuICAgICAgICAvLyBJbmZvOiBDYW5ub3QgdXNlIGA9PSBmYWxzZSB0byBjaGVjayBmYWxzZXkgdmFsdWVzYFxuICAgICAgICBpZiAoISFncm91cHMgJiYgZ3JvdXBzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIC8vIFRPRE86IGNyZWF0ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGV4cGVjdGF0aW9uc1xuICAgICAgICAgIGlmIChfLmlzU3RyaW5nKGdyb3VwcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbiBncm91cCBlcnJvcjogaW52YWxpZCB0eXBlIGZvciBmdW5jdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0dyb3VwVmFsaWQ6IGJvb2xlYW4gPSBfLmlzQXJyYXkoZ3JvdXBzKTtcbiAgICAgICAgICBpZiAoIWlzR3JvdXBWYWxpZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihBUElfRVJST1IuQkFEX0ZPUk1BVF9VU0VSX0dST1VQKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVidWcoJ2F1dGhlbnRpY2F0aW9uIGZvciB1c2VyICVvIHdhcyBzdWNjZXNzZnVsbHkuIEdyb3VwczogJW8nLCB1c2VybmFtZSwgZ3JvdXBzKTtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyLCBjcmVhdGVSZW1vdGVVc2VyKHVzZXJuYW1lLCBncm91cHMpKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGFkZF91c2VyKHVzZXI6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBkZWJ1ZygnYWRkIHVzZXIgJW8nLCB1c2VyKTtcbiAgICAoZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuc2hpZnQoKSBhcyBJUGx1Z2luQXV0aDxDb25maWc+O1xuICAgICAgbGV0IG1ldGhvZCA9ICdhZGR1c2VyJztcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luW21ldGhvZF0pID09PSBmYWxzZSkge1xuICAgICAgICBtZXRob2QgPSAnYWRkX3VzZXInO1xuICAgICAgICBzZWxmLmxvZ2dlci53YXJuKCd0aGUgcGx1Z2luIG1ldGhvZCBhZGRfdXNlciBpbiB0aGUgYXV0aCBwbHVnaW4gaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIG5leHQgbWFqb3IgcmVsZWFzZSwgbm90aWZ5IHRvIHRoZSBwbHVnaW4gYXV0aG9yJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luW21ldGhvZF0pID09PSBmYWxzZSkge1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwLmFkZF91c2VyKCkgZXhlY3V0aW9uXG4gICAgICAgIHBsdWdpblttZXRob2RdKHVzZXIsIHBhc3N3b3JkLCBmdW5jdGlvbiAoZXJyLCBvayk6IHZvaWQge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgdXNlciwgZXJyOiBlcnIubWVzc2FnZSB9LCAndGhlIHVzZXIgQHt1c2VyfSBjb3VsZCBub3QgYmVpbmcgYWRkZWQuIEVycm9yOiBAe2Vycn0nKTtcbiAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oeyB1c2VyIH0sICd0aGUgdXNlciBAe3VzZXJ9IGhhcyBiZWVuIGFkZGVkJyk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5hdXRoZW50aWNhdGUodXNlciwgcGFzc3dvcmQsIGNiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHVzZXIgdG8gYWNjZXNzIGEgcGFja2FnZS5cbiAgICovXG4gIHB1YmxpYyBhbGxvd19hY2Nlc3MoeyBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfTogQXV0aFBsdWdpblBhY2thZ2UsIHVzZXI6IFJlbW90ZVVzZXIsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGtnQWxsb3dBY2NlczogQWxsb3dBY2Nlc3MgPSB7IG5hbWU6IHBhY2thZ2VOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9O1xuICAgIGNvbnN0IHBrZyA9IE9iamVjdC5hc3NpZ24oe30sIHBrZ0FsbG93QWNjZXMsIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMocGFja2FnZU5hbWUsIHRoaXMuY29uZmlnLnBhY2thZ2VzKSkgYXMgQWxsb3dBY2Nlc3MgJiBQYWNrYWdlQWNjZXNzO1xuICAgIGRlYnVnKCdhbGxvdyBhY2Nlc3MgZm9yICVvJywgcGFja2FnZU5hbWUpO1xuXG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW46IElQbHVnaW5BdXRoPENvbmZpZz4gPSBwbHVnaW5zLnNoaWZ0KCkgYXMgSVBsdWdpbkF1dGg8Q29uZmlnPjtcblxuICAgICAgaWYgKF8uaXNOaWwocGx1Z2luKSB8fCBfLmlzRnVuY3Rpb24ocGx1Z2luLmFsbG93X2FjY2VzcykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIHBsdWdpbi5hbGxvd19hY2Nlc3MhKHVzZXIsIHBrZywgZnVuY3Rpb24gKGVyciwgb2s6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgcGFja2FnZU5hbWUsIGVyciB9LCAnZm9yYmlkZGVuIGFjY2VzcyBmb3IgQHtwYWNrYWdlTmFtZX0uIEVycm9yOiBAe2Vyci5tZXNzYWdlfScpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lIH0sICdhbGxvd2VkIGFjY2VzcyBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgb2spO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpOyAvLyBjYihudWxsLCBmYWxzZSkgY2F1c2VzIG5leHQgcGx1Z2luIHRvIHJvbGxcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH1cblxuICBwdWJsaWMgYWxsb3dfdW5wdWJsaXNoKHsgcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uIH06IEF1dGhQbHVnaW5QYWNrYWdlLCB1c2VyOiBSZW1vdGVVc2VyLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBwa2cgPSBPYmplY3QuYXNzaWduKHsgbmFtZTogcGFja2FnZU5hbWUsIHZlcnNpb246IHBhY2thZ2VWZXJzaW9uIH0sIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMocGFja2FnZU5hbWUsIHRoaXMuY29uZmlnLnBhY2thZ2VzKSk7XG4gICAgZGVidWcoJ2FsbG93IHVucHVibGlzaCBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgZm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy5wbHVnaW5zKSB7XG4gICAgICBpZiAoXy5pc05pbChwbHVnaW4pIHx8IF8uaXNGdW5jdGlvbihwbHVnaW4uYWxsb3dfdW5wdWJsaXNoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVidWcoJ2FsbG93IHVucHVibGlzaCBmb3IgJW8gcGx1Z2luIGRvZXMgbm90IGltcGxlbWVudCBhbGxvd191bnB1Ymxpc2gnLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGx1Z2luLmFsbG93X3VucHVibGlzaCEodXNlciwgcGtnLCAoZXJyLCBvazogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKHsgcGFja2FnZU5hbWUsIHVzZXI6IHVzZXI/Lm5hbWUgfSwgJ0B7dXNlcn0gZm9yYmlkZGVuIHB1Ymxpc2ggZm9yIEB7cGFja2FnZU5hbWV9LCBpdCB3aWxsIGZhbGxiYWNrIG9uIHVucHVibGlzaCBwZXJtaXNzaW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF8uaXNOaWwob2spID09PSB0cnVlKSB7XG4gICAgICAgICAgICBkZWJ1Zygnd2UgYnlwYXNzIHVucHVibGlzaCBmb3IgJW8sIHB1Ymxpc2ggd2lsbCBoYW5kbGUgdGhlIGFjY2VzcycsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dfcHVibGlzaCguLi5hcmd1bWVudHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGFsbG93ZWQgdW5wdWJsaXNoIGZvciBAe3BhY2thZ2VOYW1lfScpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG9rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB1c2VyIHRvIHB1Ymxpc2ggYSBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIGFsbG93X3B1Ymxpc2goeyBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfTogQXV0aFBsdWdpblBhY2thZ2UsIHVzZXI6IFJlbW90ZVVzZXIsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGtnID0gT2JqZWN0LmFzc2lnbih7IG5hbWU6IHBhY2thZ2VOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9LCBnZXRNYXRjaGVkUGFja2FnZXNTcGVjKHBhY2thZ2VOYW1lLCB0aGlzLmNvbmZpZy5wYWNrYWdlcykpO1xuICAgIGRlYnVnKCdhbGxvdyBwdWJsaXNoIGZvciAlbyBpbml0IHwgcGx1Z2luczogJW8nLCBwYWNrYWdlTmFtZSwgcGx1Z2lucyk7XG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLnNoaWZ0KCk7XG5cbiAgICAgIGlmIChfLmlzTmlsKHBsdWdpbikgfHwgXy5pc0Z1bmN0aW9uKHBsdWdpbi5hbGxvd19wdWJsaXNoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVidWcoJ2FsbG93IHB1Ymxpc2ggZm9yICVvIHBsdWdpbiBkb2VzIG5vdCBpbXBsZW1lbnQgYWxsb3dfcHVibGlzaCcsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcGx1Z2luLmFsbG93X3B1Ymxpc2godXNlciwgcGtnLCAoZXJyOiBWZXJkYWNjaW9FcnJvciwgb2s6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSA9PT0gZmFsc2UgJiYgXy5pc0Vycm9yKGVycikpIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcih7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGlzIGZvcmJpZGRlbiBwdWJsaXNoIGZvciBAe3BhY2thZ2VOYW1lfScpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGlzIGFsbG93ZWQgcHVibGlzaCBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgb2spO1xuICAgICAgICB9XG4gICAgICAgIGRlYnVnKCdhbGxvdyBwdWJsaXNoIHNraXAgdmFsaWRhdGlvbiBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIG5leHQoKTsgLy8gY2IobnVsbCwgZmFsc2UpIGNhdXNlcyBuZXh0IHBsdWdpbiB0byByb2xsXG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGFwaUpXVG1pZGRsZXdhcmUoKTogRnVuY3Rpb24ge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3QgaGVscGVycyA9IHsgY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlciwgY3JlYXRlUmVtb3RlVXNlciB9O1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgIGlmIChwbHVnaW4uYXBpSldUbWlkZGxld2FyZSkge1xuICAgICAgICByZXR1cm4gcGx1Z2luLmFwaUpXVG1pZGRsZXdhcmUoaGVscGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgX25leHQ6IE5leHRGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgICAgcmVxLnBhdXNlKCk7XG5cbiAgICAgIGNvbnN0IG5leHQgPSBmdW5jdGlvbiAoZXJyOiBWZXJkYWNjaW9FcnJvciB8IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgICAvLyB1bmNvbW1lbnQgdGhpcyB0byByZWplY3QgdXNlcnMgd2l0aCBiYWQgYXV0aCBoZWFkZXJzXG4gICAgICAgIC8vIHJldHVybiBfbmV4dC5hcHBseShudWxsLCBhcmd1bWVudHMpXG4gICAgICAgIC8vIHN3YWxsb3cgZXJyb3IsIHVzZXIgcmVtYWlucyB1bmF1dGhvcml6ZWRcbiAgICAgICAgLy8gc2V0IHJlbW90ZVVzZXJFcnJvciB0byBpbmRpY2F0ZSB0aGF0IHVzZXIgd2FzIGF0dGVtcHRpbmcgYXV0aGVudGljYXRpb25cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlci5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfbmV4dCgpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuX2lzUmVtb3RlVXNlclZhbGlkKHJlcS5yZW1vdGVfdXNlcikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gaW4gY2FzZSBhdXRoIGhlYWRlciBkb2VzIG5vdCBleGlzdCB3ZSByZXR1cm4gYW5vbnltb3VzIGZ1bmN0aW9uXG4gICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG5cbiAgICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvbiB9ID0gcmVxLmhlYWRlcnM7XG4gICAgICBpZiAoXy5pc05pbChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQXV0aEhlYWRlclZhbGlkKGF1dGhvcml6YXRpb24pKSB7XG4gICAgICAgIGRlYnVnKCdhcGkgbWlkZGxld2FyZSBhdXRoIGhlYXRoZXIgaXMgbm90IHZhbGlkJyk7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRCYWRSZXF1ZXN0KEFQSV9FUlJPUi5CQURfQVVUSF9IRUFERVIpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VjdXJpdHk6IFNlY3VyaXR5ID0gZ2V0U2VjdXJpdHkodGhpcy5jb25maWcpO1xuICAgICAgY29uc3QgeyBzZWNyZXQgfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgICBpZiAoaXNBRVNMZWdhY3koc2VjdXJpdHkpKSB7XG4gICAgICAgIGRlYnVnKCdhcGkgbWlkZGxld2FyZSB1c2luZyBsZWdhY3kgYXV0aCB0b2tlbicpO1xuICAgICAgICB0aGlzLl9oYW5kbGVBRVNNaWRkbGV3YXJlKHJlcSwgc2VjdXJpdHksIHNlY3JldCwgYXV0aG9yaXphdGlvbiwgbmV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygnYXBpIG1pZGRsZXdhcmUgdXNpbmcgSldUIGF1dGggdG9rZW4nKTtcbiAgICAgICAgdGhpcy5faGFuZGxlSldUQVBJTWlkZGxld2FyZShyZXEsIHNlY3VyaXR5LCBzZWNyZXQsIGF1dGhvcml6YXRpb24sIG5leHQpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVKV1RBUElNaWRkbGV3YXJlKHJlcTogJFJlcXVlc3RFeHRlbmQsIHNlY3VyaXR5OiBTZWN1cml0eSwgc2VjcmV0OiBzdHJpbmcsIGF1dGhvcml6YXRpb246IHN0cmluZywgbmV4dDogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCB7IHNjaGVtZSwgdG9rZW4gfSA9IHBhcnNlQXV0aFRva2VuSGVhZGVyKGF1dGhvcml6YXRpb24pO1xuICAgIGlmIChzY2hlbWUudG9VcHBlckNhc2UoKSA9PT0gVE9LRU5fQkFTSUMudG9VcHBlckNhc2UoKSkge1xuICAgICAgLy8gdGhpcyBzaG91bGQgaGFwcGVuIHdoZW4gY2xpZW50IHRyaWVzIHRvIGxvZ2luIHdpdGggYW4gZXhpc3RpbmcgdXNlclxuICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0KHRva2VuKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgeyB1c2VyLCBwYXNzd29yZCB9ID0gcGFyc2VCYXNpY1BheWxvYWQoY3JlZGVudGlhbHMpIGFzIEFFU1BheWxvYWQ7XG4gICAgICB0aGlzLmF1dGhlbnRpY2F0ZSh1c2VyLCBwYXNzd29yZCwgKGVyciwgdXNlcik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IHVzZXI7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIoKTtcbiAgICAgICAgICBuZXh0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBqd3QgaGFuZGxlclxuICAgICAgY29uc3QgY3JlZGVudGlhbHM6IGFueSA9IGdldE1pZGRsZXdhcmVDcmVkZW50aWFscyhzZWN1cml0eSwgc2VjcmV0LCBhdXRob3JpemF0aW9uKTtcbiAgICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgICAvLyBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkIHdlIHJlbHkgb24gaXRcbiAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlZGVudGlhbHM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdpdGggSldUIHRocm93IDQwMVxuICAgICAgICBuZXh0KEVycm9yQ29kZS5nZXRGb3JiaWRkZW4oQVBJX0VSUk9SLkJBRF9VU0VSTkFNRV9QQVNTV09SRCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUFFU01pZGRsZXdhcmUocmVxOiAkUmVxdWVzdEV4dGVuZCwgc2VjdXJpdHk6IFNlY3VyaXR5LCBzZWNyZXQ6IHN0cmluZywgYXV0aG9yaXphdGlvbjogc3RyaW5nLCBuZXh0OiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBhbnkgPSBnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMoc2VjdXJpdHksIHNlY3JldCwgYXV0aG9yaXphdGlvbik7XG4gICAgaWYgKGNyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCB7IHVzZXIsIHBhc3N3b3JkIH0gPSBjcmVkZW50aWFscztcbiAgICAgIHRoaXMuYXV0aGVudGljYXRlKHVzZXIsIHBhc3N3b3JkLCAoZXJyLCB1c2VyKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gdXNlcjtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpO1xuICAgICAgICAgIG5leHQoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHdlIGZvcmNlIG5wbSBjbGllbnQgdG8gYXNrIGFnYWluIHdpdGggYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRCYWRSZXF1ZXN0KEFQSV9FUlJPUi5CQURfQVVUSF9IRUFERVIpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1JlbW90ZVVzZXJWYWxpZChyZW1vdGVfdXNlcjogUmVtb3RlVXNlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBfLmlzVW5kZWZpbmVkKHJlbW90ZV91c2VyKSA9PT0gZmFsc2UgJiYgXy5pc1VuZGVmaW5lZChyZW1vdGVfdXNlci5uYW1lKSA9PT0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSldUIG1pZGRsZXdhcmUgZm9yIFdlYlVJXG4gICAqL1xuICBwdWJsaWMgd2ViVUlKV1RtaWRkbGV3YXJlKCk6IEZ1bmN0aW9uIHtcbiAgICByZXR1cm4gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBfbmV4dDogTmV4dEZ1bmN0aW9uKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5faXNSZW1vdGVVc2VyVmFsaWQocmVxLnJlbW90ZV91c2VyKSkge1xuICAgICAgICByZXR1cm4gX25leHQoKTtcbiAgICAgIH1cblxuICAgICAgcmVxLnBhdXNlKCk7XG4gICAgICBjb25zdCBuZXh0ID0gKGVycjogVmVyZGFjY2lvRXJyb3IgfCB2b2lkKTogdm9pZCA9PiB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIHJlcS5yZW1vdGVfdXNlci5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1c0NvZGUpLnNlbmQoZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9uZXh0KCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7IGF1dGhvcml6YXRpb24gfSA9IHJlcS5oZWFkZXJzO1xuICAgICAgaWYgKF8uaXNOaWwoYXV0aG9yaXphdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0F1dGhIZWFkZXJWYWxpZChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0QmFkUmVxdWVzdChBUElfRVJST1IuQkFEX0FVVEhfSEVBREVSKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuID0gKGF1dGhvcml6YXRpb24gfHwgJycpLnJlcGxhY2UoYCR7VE9LRU5fQkVBUkVSfSBgLCAnJyk7XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBjcmVkZW50aWFscztcbiAgICAgIHRyeSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gdmVyaWZ5SldUUGF5bG9hZCh0b2tlbiwgdGhpcy5jb25maWcuc2VjcmV0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBGSVhNRTogaW50ZW5kZWQgYmVoYXZpb3VyLCBkbyB3ZSB3YW50IGl0P1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNSZW1vdGVVc2VyVmFsaWQoY3JlZGVudGlhbHMpKSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZ3JvdXBzIH0gPSBjcmVkZW50aWFscztcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVSZW1vdGVVc2VyKG5hbWUsIGdyb3Vwcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGp3dEVuY3J5cHQodXNlcjogUmVtb3RlVXNlciwgc2lnbk9wdGlvbnM6IEpXVFNpZ25PcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHJlYWxfZ3JvdXBzLCBuYW1lLCBncm91cHMgfSA9IHVzZXI7XG4gICAgY29uc3QgcmVhbEdyb3Vwc1ZhbGlkYXRlZCA9IF8uaXNOaWwocmVhbF9ncm91cHMpID8gW10gOiByZWFsX2dyb3VwcztcbiAgICBjb25zdCBncm91cGVkR3JvdXBzID0gXy5pc05pbChncm91cHMpID8gcmVhbF9ncm91cHMgOiBncm91cHMuY29uY2F0KHJlYWxHcm91cHNWYWxpZGF0ZWQpO1xuICAgIGNvbnN0IHBheWxvYWQ6IFJlbW90ZVVzZXIgPSB7XG4gICAgICByZWFsX2dyb3VwczogcmVhbEdyb3Vwc1ZhbGlkYXRlZCxcbiAgICAgIG5hbWUsXG4gICAgICBncm91cHM6IGdyb3VwZWRHcm91cHMsXG4gICAgfTtcblxuICAgIGNvbnN0IHRva2VuOiBzdHJpbmcgPSBhd2FpdCBzaWduUGF5bG9hZChwYXlsb2FkLCB0aGlzLnNlY3JldCwgc2lnbk9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY3J5cHQgYSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgYWVzRW5jcnlwdChidWY6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIGFlc0VuY3J5cHQoYnVmLCB0aGlzLnNlY3JldCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXV0aDtcbiJdfQ==
541
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsIkF1dGgiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImxvZ2dlciIsInNlY3JldCIsInBsdWdpbnMiLCJfbG9hZFBsdWdpbiIsIl9hcHBseURlZmF1bHRQbHVnaW5zIiwicGx1Z2luT3B0aW9ucyIsImF1dGgiLCJwbHVnaW4iLCJhdXRoZW50aWNhdGUiLCJhbGxvd19hY2Nlc3MiLCJhbGxvd19wdWJsaXNoIiwicHVzaCIsImNoYW5nZVBhc3N3b3JkIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIm5ld1Bhc3N3b3JkIiwiY2IiLCJ2YWxpZFBsdWdpbnMiLCJfIiwiZmlsdGVyIiwiaXNGdW5jdGlvbiIsImlzRW1wdHkiLCJFcnJvckNvZGUiLCJnZXRJbnRlcm5hbEVycm9yIiwiU1VQUE9SVF9FUlJPUlMiLCJQTFVHSU5fTUlTU0lOR19JTlRFUkZBQ0UiLCJpc05pbCIsImVyciIsInByb2ZpbGUiLCJlcnJvciIsImluZm8iLCJzbGljZSIsInNlbGYiLCJuZXh0Iiwic2hpZnQiLCJncm91cHMiLCJsZW5ndGgiLCJpc1N0cmluZyIsIlR5cGVFcnJvciIsImlzR3JvdXBWYWxpZCIsImlzQXJyYXkiLCJBUElfRVJST1IiLCJCQURfRk9STUFUX1VTRVJfR1JPVVAiLCJhZGRfdXNlciIsInVzZXIiLCJtZXRob2QiLCJ3YXJuIiwib2siLCJtZXNzYWdlIiwicGFja2FnZU5hbWUiLCJwYWNrYWdlVmVyc2lvbiIsImNhbGxiYWNrIiwicGtnQWxsb3dBY2NlcyIsIm5hbWUiLCJ2ZXJzaW9uIiwicGtnIiwiT2JqZWN0IiwiYXNzaWduIiwicGFja2FnZXMiLCJhbGxvd191bnB1Ymxpc2giLCJhcmd1bWVudHMiLCJpc0Vycm9yIiwiYXBpSldUbWlkZGxld2FyZSIsImhlbHBlcnMiLCJjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyIiwiY3JlYXRlUmVtb3RlVXNlciIsInJlcSIsInJlcyIsIl9uZXh0IiwicGF1c2UiLCJyZXN1bWUiLCJyZW1vdGVfdXNlciIsIl9pc1JlbW90ZVVzZXJWYWxpZCIsImF1dGhvcml6YXRpb24iLCJoZWFkZXJzIiwiZ2V0QmFkUmVxdWVzdCIsIkJBRF9BVVRIX0hFQURFUiIsInNlY3VyaXR5IiwiX2hhbmRsZUFFU01pZGRsZXdhcmUiLCJfaGFuZGxlSldUQVBJTWlkZGxld2FyZSIsInNjaGVtZSIsInRva2VuIiwidG9VcHBlckNhc2UiLCJUT0tFTl9CQVNJQyIsImNyZWRlbnRpYWxzIiwidG9TdHJpbmciLCJnZXRGb3JiaWRkZW4iLCJCQURfVVNFUk5BTUVfUEFTU1dPUkQiLCJpc1VuZGVmaW5lZCIsIndlYlVJSldUbWlkZGxld2FyZSIsInN0YXR1cyIsInN0YXR1c0NvZGUiLCJzZW5kIiwicmVwbGFjZSIsIlRPS0VOX0JFQVJFUiIsImp3dEVuY3J5cHQiLCJzaWduT3B0aW9ucyIsInJlYWxfZ3JvdXBzIiwicmVhbEdyb3Vwc1ZhbGlkYXRlZCIsImdyb3VwZWRHcm91cHMiLCJBcnJheSIsImZyb20iLCJTZXQiLCJjb25jYXQiLCJwYXlsb2FkIiwiYWVzRW5jcnlwdCIsImJ1ZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOztBQU1BOztBQUNBOztBQVlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsS0FBSyxHQUFHLG9CQUFXLGdCQUFYLENBQWQ7O0FBRUEsTUFBTUMsSUFBTixDQUE0QjtBQUdIO0FBR2hCQyxFQUFBQSxXQUFXLENBQUNDLE1BQUQsRUFBaUI7QUFDakMsU0FBS0EsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0MsTUFBTCxHQUFjQSxjQUFkO0FBQ0EsU0FBS0MsTUFBTCxHQUFjRixNQUFNLENBQUNFLE1BQXJCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtDLFdBQUwsQ0FBaUJKLE1BQWpCLENBQWY7O0FBQ0EsU0FBS0ssb0JBQUw7QUFDRDs7QUFFT0QsRUFBQUEsV0FBVyxDQUFDSixNQUFELEVBQXdDO0FBQ3pELFVBQU1NLGFBQWEs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dEMsTUFBQUEsSUFBSTtBQUNMLEtBOUNEO0FBK0NEOztBQUVzQixRQUFWOEQsVUFBVSxDQUFDbkQsSUFBRCxFQUFtQm9ELFdBQW5CLEVBQWlFO0FBQ3RGLFVBQU07QUFBRUMsTUFBQUEsV0FBRjtBQUFlNUMsTUFBQUEsSUFBZjtBQUFxQmxCLE1BQUFBO0FBQXJCLFFBQWdDUyxJQUF0QztBQUNBLFVBQU1zRCxtQkFBbUIsR0FBR2hGLGdCQUFFUSxLQUFGLENBQVF1RSxXQUFSLElBQXVCLEVBQXZCLEdBQTRCQSxXQUF4RDtBQUNBLFVBQU1FLGFBQWEsR0FBR2pGLGdCQUFFUSxLQUFGLENBQVFTLE1BQVIsSUFBa0I4RCxXQUFsQixHQUFnQ0csS0FBSyxDQUFDQyxJQUFOLENBQVcsSUFBSUMsR0FBSixDQUFRLENBQUMsR0FBR25FLE1BQU0sQ0FBQ29FLE1BQVAsQ0FBY0wsbUJBQWQsQ0FBSixDQUFSLENBQVgsQ0FBdEQ7QUFDQSxVQUFNTSxPQUFtQixHQUFHO0FBQzFCUCxNQUFBQSxXQUFXLEVBQUVDLG1CQURhO0FBRTFCN0MsTUFBQUEsSUFGMEI7QUFHMUJsQixNQUFBQSxNQUFNLEVBQUVnRTtBQUhrQixLQUE1QjtBQU1BLFVBQU1sQixLQUFhLEdBQUcsTUFBTSw4QkFBWXVCLE9BQVosRUFBcUIsS0FBS3ZHLE1BQTFCLEVBQWtDK0YsV0FBbEMsQ0FBNUI7QUFFQSxXQUFPZixLQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7OztBQUNTd0IsRUFBQUEsVUFBVSxDQUFDQyxHQUFELEVBQXNCO0FBQ3JDLFdBQU8sNkJBQVdBLEdBQVgsRUFBZ0IsS0FBS3pHLE1BQXJCLENBQVA7QUFDRDs7QUExWnlCOztlQTZaYkosSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgVmVyZGFjY2lvRXJyb3IgfSBmcm9tICdAdmVyZGFjY2lvL2NvbW1vbnMtYXBpJztcbmltcG9ydCB7IEFsbG93QWNjZXNzLCBBdXRoUGx1Z2luUGFja2FnZSwgQ2FsbGJhY2ssIENvbmZpZywgSVBsdWdpbkF1dGgsIEpXVFNpZ25PcHRpb25zLCBMb2dnZXIsIFBhY2thZ2VBY2Nlc3MsIFJlbW90ZVVzZXIsIFNlY3VyaXR5IH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7ICRSZXF1ZXN0RXh0ZW5kLCAkUmVzcG9uc2VFeHRlbmQsIEFFU1BheWxvYWQsIElBdXRoIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IGxvYWRQbHVnaW4gZnJvbSAnLi4vbGliL3BsdWdpbi1sb2FkZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcixcbiAgY3JlYXRlUmVtb3RlVXNlcixcbiAgZ2V0RGVmYXVsdFBsdWdpbnMsXG4gIGdldE1pZGRsZXdhcmVDcmVkZW50aWFscyxcbiAgZ2V0U2VjdXJpdHksXG4gIGlzQUVTTGVnYWN5LFxuICBpc0F1dGhIZWFkZXJWYWxpZCxcbiAgcGFyc2VBdXRoVG9rZW5IZWFkZXIsXG4gIHBhcnNlQmFzaWNQYXlsb2FkLFxuICB2ZXJpZnlKV1RQYXlsb2FkLFxufSBmcm9tICcuL2F1dGgtdXRpbHMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyB9IGZyb20gJy4vY29uZmlnLXV0aWxzJztcbmltcG9ydCB7IEFQSV9FUlJPUiwgU1VQUE9SVF9FUlJPUlMsIFRPS0VOX0JBU0lDLCBUT0tFTl9CRUFSRVIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhZXNFbmNyeXB0LCBzaWduUGF5bG9hZCB9IGZyb20gJy4vY3J5cHRvLXV0aWxzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IEVycm9yQ29kZSwgY29udmVydFBheWxvYWRUb0Jhc2U2NCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2NpbzphdXRoJyk7XG5cbmNsYXNzIEF1dGggaW1wbGVtZW50cyBJQXV0aCB7XG4gIHB1YmxpYyBjb25maWc6IENvbmZpZztcbiAgcHVibGljIGxvZ2dlcjogTG9nZ2VyO1xuICBwdWJsaWMgc2VjcmV0OiBzdHJpbmc7IC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICBwdWJsaWMgcGx1Z2luczogSVBsdWdpbkF1dGg8Q29uZmlnPltdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb25maWc6IENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIHRoaXMuc2VjcmV0ID0gY29uZmlnLnNlY3JldDtcbiAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLl9sb2FkUGx1Z2luKGNvbmZpZyk7XG4gICAgdGhpcy5fYXBwbHlEZWZhdWx0UGx1Z2lucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZFBsdWdpbihjb25maWc6IENvbmZpZyk6IElQbHVnaW5BdXRoPENvbmZpZz5bXSB7XG4gICAgY29uc3QgcGx1Z2luT3B0aW9ucyA9IHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgfTtcblxuICAgIHJldHVybiBsb2FkUGx1Z2luPElQbHVnaW5BdXRoPENvbmZpZz4+KGNvbmZpZywgY29uZmlnLmF1dGgsIHBsdWdpbk9wdGlvbnMsIChwbHVnaW46IElQbHVnaW5BdXRoPENvbmZpZz4pOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgYXV0aGVudGljYXRlLCBhbGxvd19hY2Nlc3MsIGFsbG93X3B1Ymxpc2ggfSA9IHBsdWdpbjtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBhdXRoZW50aWNhdGUgfHwgYWxsb3dfYWNjZXNzIHx8IGFsbG93X3B1Ymxpc2g7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseURlZmF1bHRQbHVnaW5zKCk6IHZvaWQge1xuICAgIHRoaXMucGx1Z2lucy5wdXNoKGdldERlZmF1bHRQbHVnaW5zKHRoaXMubG9nZ2VyKSk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlUGFzc3dvcmQoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICBwYXNzd29yZDogc3RyaW5nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICBuZXdQYXNzd29yZDogc3RyaW5nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICBjYjogQ2FsbGJhY2tcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWRQbHVnaW5zID0gXy5maWx0ZXIodGhpcy5wbHVnaW5zLCAocGx1Z2luKSA9PiBfLmlzRnVuY3Rpb24ocGx1Z2luLmNoYW5nZVBhc3N3b3JkKSk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KHZhbGlkUGx1Z2lucykpIHtcbiAgICAgIHJldHVybiBjYihFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihTVVBQT1JUX0VSUk9SUy5QTFVHSU5fTUlTU0lOR19JTlRFUkZBQ0UpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB2YWxpZFBsdWdpbnMpIHtcbiAgICAgIGlmIChfLmlzTmlsKHBsdWdpbikgfHwgXy5pc0Z1bmN0aW9uKHBsdWdpbi5jaGFuZ2VQYXNzd29yZCkgPT09IGZhbHNlKSB7XG4gICAgICAgIGRlYnVnKCdhdXRoIHBsdWdpbiBkb2VzIG5vdCBpbXBsZW1lbnQgY2hhbmdlUGFzc3dvcmQsIHRyeWluZyBuZXh0IG9uZScpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYnVnKCd1cGRhdGluZyBwYXNzd29yZCBmb3IgJW8nLCB1c2VybmFtZSk7XG4gICAgICAgIHBsdWdpbi5jaGFuZ2VQYXNzd29yZCEodXNlcm5hbWUsIHBhc3N3b3JkLCBuZXdQYXNzd29yZCwgKGVyciwgcHJvZmlsZSk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICB7IHVzZXJuYW1lLCBlcnIgfSxcbiAgICAgICAgICAgICAgYEFuIGVycm9yIGhhcyBiZWVuIHByb2R1Y2VkXG4gICAgICAgICAgICB1cGRhdGluZyB0aGUgcGFzc3dvcmQgZm9yIEB7dXNlcm5hbWV9LiBFcnJvcjogQHtlcnIubWVzc2FnZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oeyB1c2VybmFtZSB9LCAndXBkYXRlZCBwYXNzd29yZCBmb3IgQHt1c2VybmFtZX0gd2FzIHN1Y2Nlc3NmdWwnKTtcbiAgICAgICAgICByZXR1cm4gY2IobnVsbCwgcHJvZmlsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhdXRoZW50aWNhdGUodXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAoZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuc2hpZnQoKSBhcyBJUGx1Z2luQXV0aDxDb25maWc+O1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihwbHVnaW4uYXV0aGVudGljYXRlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGRlYnVnKCdhdXRoZW50aWNhdGluZyAlbycsIHVzZXJuYW1lKTtcbiAgICAgIHBsdWdpbi5hdXRoZW50aWNhdGUodXNlcm5hbWUsIHBhc3N3b3JkLCBmdW5jdGlvbiAoZXJyLCBncm91cHMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgdXNlcm5hbWUsIGVyciB9LCAnYXV0aGVudGljYXRpbmcgZm9yIHVzZXIgQHt1c2VybmFtZX0gZmFpbGVkLiBFcnJvcjogQHtlcnIubWVzc2FnZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4cGVjdDogU0tJUCBpZiBncm91cHMgaXMgZmFsc2V5IGFuZCBub3QgYW4gYXJyYXlcbiAgICAgICAgLy8gICAgICAgICB3aXRoIGF0IGxlYXN0IG9uZSBpdGVtICh0cnV0aHkgbGVuZ3RoKVxuICAgICAgICAvLyBFeHBlY3Q6IENPTlRJTlVFIG90aGVyd2lzZSAod2lsbCBlcnJvciBpZiBncm91cHMgaXMgbm90XG4gICAgICAgIC8vICAgICAgICAgYW4gYXJyYXksIGJ1dCB0aGlzIGlzIGN1cnJlbnQgYmVoYXZpb3IpXG4gICAgICAgIC8vIENhdmVhdDogU1RSSU5HIChpZiB2YWxpZCkgd2lsbCBwYXNzIHN1Y2Nlc3NmdWxseVxuICAgICAgICAvLyAgICAgICAgIGJ1ZyBnaXZlIHVuZXhwZWN0ZWQgcmVzdWx0c1xuICAgICAgICAvLyBJbmZvOiBDYW5ub3QgdXNlIGA9PSBmYWxzZSB0byBjaGVjayBmYWxzZXkgdmFsdWVzYFxuICAgICAgICBpZiAoISFncm91cHMgJiYgZ3JvdXBzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIC8vIFRPRE86IGNyZWF0ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGV4cGVjdGF0aW9uc1xuICAgICAgICAgIGlmIChfLmlzU3RyaW5nKGdyb3VwcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbiBncm91cCBlcnJvcjogaW52YWxpZCB0eXBlIGZvciBmdW5jdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0dyb3VwVmFsaWQ6IGJvb2xlYW4gPSBfLmlzQXJyYXkoZ3JvdXBzKTtcbiAgICAgICAgICBpZiAoIWlzR3JvdXBWYWxpZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihBUElfRVJST1IuQkFEX0ZPUk1BVF9VU0VSX0dST1VQKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVidWcoJ2F1dGhlbnRpY2F0aW9uIGZvciB1c2VyICVvIHdhcyBzdWNjZXNzZnVsbHkuIEdyb3VwczogJW8nLCB1c2VybmFtZSwgZ3JvdXBzKTtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyLCBjcmVhdGVSZW1vdGVVc2VyKHVzZXJuYW1lLCBncm91cHMpKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGFkZF91c2VyKHVzZXI6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBkZWJ1ZygnYWRkIHVzZXIgJW8nLCB1c2VyKTtcbiAgICAoZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuc2hpZnQoKSBhcyBJUGx1Z2luQXV0aDxDb25maWc+O1xuICAgICAgbGV0IG1ldGhvZCA9ICdhZGR1c2VyJztcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luW21ldGhvZF0pID09PSBmYWxzZSkge1xuICAgICAgICBtZXRob2QgPSAnYWRkX3VzZXInO1xuICAgICAgICBzZWxmLmxvZ2dlci53YXJuKCd0aGUgcGx1Z2luIG1ldGhvZCBhZGRfdXNlciBpbiB0aGUgYXV0aCBwbHVnaW4gaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIG5leHQgbWFqb3IgcmVsZWFzZSwgbm90aWZ5IHRvIHRoZSBwbHVnaW4gYXV0aG9yJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luW21ldGhvZF0pID09PSBmYWxzZSkge1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwLmFkZF91c2VyKCkgZXhlY3V0aW9uXG4gICAgICAgIHBsdWdpblttZXRob2RdKHVzZXIsIHBhc3N3b3JkLCBmdW5jdGlvbiAoZXJyLCBvayk6IHZvaWQge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgdXNlciwgZXJyOiBlcnIubWVzc2FnZSB9LCAndGhlIHVzZXIgQHt1c2VyfSBjb3VsZCBub3QgYmVpbmcgYWRkZWQuIEVycm9yOiBAe2Vycn0nKTtcbiAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oeyB1c2VyIH0sICd0aGUgdXNlciBAe3VzZXJ9IGhhcyBiZWVuIGFkZGVkJyk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5hdXRoZW50aWNhdGUodXNlciwgcGFzc3dvcmQsIGNiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHVzZXIgdG8gYWNjZXNzIGEgcGFja2FnZS5cbiAgICovXG4gIHB1YmxpYyBhbGxvd19hY2Nlc3MoeyBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfTogQXV0aFBsdWdpblBhY2thZ2UsIHVzZXI6IFJlbW90ZVVzZXIsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGtnQWxsb3dBY2NlczogQWxsb3dBY2Nlc3MgPSB7IG5hbWU6IHBhY2thZ2VOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9O1xuICAgIGNvbnN0IHBrZyA9IE9iamVjdC5hc3NpZ24oe30sIHBrZ0FsbG93QWNjZXMsIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMocGFja2FnZU5hbWUsIHRoaXMuY29uZmlnLnBhY2thZ2VzKSkgYXMgQWxsb3dBY2Nlc3MgJiBQYWNrYWdlQWNjZXNzO1xuICAgIGRlYnVnKCdhbGxvdyBhY2Nlc3MgZm9yICVvJywgcGFja2FnZU5hbWUpO1xuXG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW46IElQbHVnaW5BdXRoPENvbmZpZz4gPSBwbHVnaW5zLnNoaWZ0KCkgYXMgSVBsdWdpbkF1dGg8Q29uZmlnPjtcblxuICAgICAgaWYgKF8uaXNOaWwocGx1Z2luKSB8fCBfLmlzRnVuY3Rpb24ocGx1Z2luLmFsbG93X2FjY2VzcykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIHBsdWdpbi5hbGxvd19hY2Nlc3MhKHVzZXIsIHBrZywgZnVuY3Rpb24gKGVyciwgb2s6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgcGFja2FnZU5hbWUsIGVyciB9LCAnZm9yYmlkZGVuIGFjY2VzcyBmb3IgQHtwYWNrYWdlTmFtZX0uIEVycm9yOiBAe2Vyci5tZXNzYWdlfScpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lIH0sICdhbGxvd2VkIGFjY2VzcyBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgb2spO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpOyAvLyBjYihudWxsLCBmYWxzZSkgY2F1c2VzIG5leHQgcGx1Z2luIHRvIHJvbGxcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH1cblxuICBwdWJsaWMgYWxsb3dfdW5wdWJsaXNoKHsgcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uIH06IEF1dGhQbHVnaW5QYWNrYWdlLCB1c2VyOiBSZW1vdGVVc2VyLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBwa2cgPSBPYmplY3QuYXNzaWduKHsgbmFtZTogcGFja2FnZU5hbWUsIHZlcnNpb246IHBhY2thZ2VWZXJzaW9uIH0sIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMocGFja2FnZU5hbWUsIHRoaXMuY29uZmlnLnBhY2thZ2VzKSk7XG4gICAgZGVidWcoJ2FsbG93IHVucHVibGlzaCBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgZm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy5wbHVnaW5zKSB7XG4gICAgICBpZiAoXy5pc05pbChwbHVnaW4pIHx8IF8uaXNGdW5jdGlvbihwbHVnaW4uYWxsb3dfdW5wdWJsaXNoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVidWcoJ2FsbG93IHVucHVibGlzaCBmb3IgJW8gcGx1Z2luIGRvZXMgbm90IGltcGxlbWVudCBhbGxvd191bnB1Ymxpc2gnLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGx1Z2luLmFsbG93X3VucHVibGlzaCEodXNlciwgcGtnLCAoZXJyLCBvazogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKHsgcGFja2FnZU5hbWUsIHVzZXI6IHVzZXI/Lm5hbWUgfSwgJ0B7dXNlcn0gZm9yYmlkZGVuIHB1Ymxpc2ggZm9yIEB7cGFja2FnZU5hbWV9LCBpdCB3aWxsIGZhbGxiYWNrIG9uIHVucHVibGlzaCBwZXJtaXNzaW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF8uaXNOaWwob2spID09PSB0cnVlKSB7XG4gICAgICAgICAgICBkZWJ1Zygnd2UgYnlwYXNzIHVucHVibGlzaCBmb3IgJW8sIHB1Ymxpc2ggd2lsbCBoYW5kbGUgdGhlIGFjY2VzcycsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dfcHVibGlzaCguLi5hcmd1bWVudHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGFsbG93ZWQgdW5wdWJsaXNoIGZvciBAe3BhY2thZ2VOYW1lfScpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG9rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB1c2VyIHRvIHB1Ymxpc2ggYSBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIGFsbG93X3B1Ymxpc2goeyBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfTogQXV0aFBsdWdpblBhY2thZ2UsIHVzZXI6IFJlbW90ZVVzZXIsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGtnID0gT2JqZWN0LmFzc2lnbih7IG5hbWU6IHBhY2thZ2VOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9LCBnZXRNYXRjaGVkUGFja2FnZXNTcGVjKHBhY2thZ2VOYW1lLCB0aGlzLmNvbmZpZy5wYWNrYWdlcykpO1xuICAgIGRlYnVnKCdhbGxvdyBwdWJsaXNoIGZvciAlbyBpbml0IHwgcGx1Z2luczogJW8nLCBwYWNrYWdlTmFtZSwgcGx1Z2lucyk7XG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLnNoaWZ0KCk7XG5cbiAgICAgIGlmIChfLmlzTmlsKHBsdWdpbikgfHwgXy5pc0Z1bmN0aW9uKHBsdWdpbi5hbGxvd19wdWJsaXNoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVidWcoJ2FsbG93IHB1Ymxpc2ggZm9yICVvIHBsdWdpbiBkb2VzIG5vdCBpbXBsZW1lbnQgYWxsb3dfcHVibGlzaCcsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcGx1Z2luLmFsbG93X3B1Ymxpc2godXNlciwgcGtnLCAoZXJyOiBWZXJkYWNjaW9FcnJvciwgb2s6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSA9PT0gZmFsc2UgJiYgXy5pc0Vycm9yKGVycikpIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcih7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGlzIGZvcmJpZGRlbiBwdWJsaXNoIGZvciBAe3BhY2thZ2VOYW1lfScpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGlzIGFsbG93ZWQgcHVibGlzaCBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgb2spO1xuICAgICAgICB9XG4gICAgICAgIGRlYnVnKCdhbGxvdyBwdWJsaXNoIHNraXAgdmFsaWRhdGlvbiBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIG5leHQoKTsgLy8gY2IobnVsbCwgZmFsc2UpIGNhdXNlcyBuZXh0IHBsdWdpbiB0byByb2xsXG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGFwaUpXVG1pZGRsZXdhcmUoKTogRnVuY3Rpb24ge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3QgaGVscGVycyA9IHsgY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlciwgY3JlYXRlUmVtb3RlVXNlciB9O1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgIGlmIChwbHVnaW4uYXBpSldUbWlkZGxld2FyZSkge1xuICAgICAgICByZXR1cm4gcGx1Z2luLmFwaUpXVG1pZGRsZXdhcmUoaGVscGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgX25leHQ6IE5leHRGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgICAgcmVxLnBhdXNlKCk7XG5cbiAgICAgIGNvbnN0IG5leHQgPSBmdW5jdGlvbiAoZXJyOiBWZXJkYWNjaW9FcnJvciB8IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgICAvLyB1bmNvbW1lbnQgdGhpcyB0byByZWplY3QgdXNlcnMgd2l0aCBiYWQgYXV0aCBoZWFkZXJzXG4gICAgICAgIC8vIHJldHVybiBfbmV4dC5hcHBseShudWxsLCBhcmd1bWVudHMpXG4gICAgICAgIC8vIHN3YWxsb3cgZXJyb3IsIHVzZXIgcmVtYWlucyB1bmF1dGhvcml6ZWRcbiAgICAgICAgLy8gc2V0IHJlbW90ZVVzZXJFcnJvciB0byBpbmRpY2F0ZSB0aGF0IHVzZXIgd2FzIGF0dGVtcHRpbmcgYXV0aGVudGljYXRpb25cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlci5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfbmV4dCgpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuX2lzUmVtb3RlVXNlclZhbGlkKHJlcS5yZW1vdGVfdXNlcikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gaW4gY2FzZSBhdXRoIGhlYWRlciBkb2VzIG5vdCBleGlzdCB3ZSByZXR1cm4gYW5vbnltb3VzIGZ1bmN0aW9uXG4gICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG5cbiAgICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvbiB9ID0gcmVxLmhlYWRlcnM7XG4gICAgICBpZiAoXy5pc05pbChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQXV0aEhlYWRlclZhbGlkKGF1dGhvcml6YXRpb24pKSB7XG4gICAgICAgIGRlYnVnKCdhcGkgbWlkZGxld2FyZSBhdXRoIGhlYXRoZXIgaXMgbm90IHZhbGlkJyk7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRCYWRSZXF1ZXN0KEFQSV9FUlJPUi5CQURfQVVUSF9IRUFERVIpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VjdXJpdHk6IFNlY3VyaXR5ID0gZ2V0U2VjdXJpdHkodGhpcy5jb25maWcpO1xuICAgICAgY29uc3QgeyBzZWNyZXQgfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgICBpZiAoaXNBRVNMZWdhY3koc2VjdXJpdHkpKSB7XG4gICAgICAgIGRlYnVnKCdhcGkgbWlkZGxld2FyZSB1c2luZyBsZWdhY3kgYXV0aCB0b2tlbicpO1xuICAgICAgICB0aGlzLl9oYW5kbGVBRVNNaWRkbGV3YXJlKHJlcSwgc2VjdXJpdHksIHNlY3JldCwgYXV0aG9yaXphdGlvbiwgbmV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygnYXBpIG1pZGRsZXdhcmUgdXNpbmcgSldUIGF1dGggdG9rZW4nKTtcbiAgICAgICAgdGhpcy5faGFuZGxlSldUQVBJTWlkZGxld2FyZShyZXEsIHNlY3VyaXR5LCBzZWNyZXQsIGF1dGhvcml6YXRpb24sIG5leHQpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVKV1RBUElNaWRkbGV3YXJlKHJlcTogJFJlcXVlc3RFeHRlbmQsIHNlY3VyaXR5OiBTZWN1cml0eSwgc2VjcmV0OiBzdHJpbmcsIGF1dGhvcml6YXRpb246IHN0cmluZywgbmV4dDogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCB7IHNjaGVtZSwgdG9rZW4gfSA9IHBhcnNlQXV0aFRva2VuSGVhZGVyKGF1dGhvcml6YXRpb24pO1xuICAgIGlmIChzY2hlbWUudG9VcHBlckNhc2UoKSA9PT0gVE9LRU5fQkFTSUMudG9VcHBlckNhc2UoKSkge1xuICAgICAgLy8gdGhpcyBzaG91bGQgaGFwcGVuIHdoZW4gY2xpZW50IHRyaWVzIHRvIGxvZ2luIHdpdGggYW4gZXhpc3RpbmcgdXNlclxuICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0KHRva2VuKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgeyB1c2VyLCBwYXNzd29yZCB9ID0gcGFyc2VCYXNpY1BheWxvYWQoY3JlZGVudGlhbHMpIGFzIEFFU1BheWxvYWQ7XG4gICAgICB0aGlzLmF1dGhlbnRpY2F0ZSh1c2VyLCBwYXNzd29yZCwgKGVyciwgdXNlcik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IHVzZXI7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIoKTtcbiAgICAgICAgICBuZXh0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBqd3QgaGFuZGxlclxuICAgICAgY29uc3QgY3JlZGVudGlhbHM6IGFueSA9IGdldE1pZGRsZXdhcmVDcmVkZW50aWFscyhzZWN1cml0eSwgc2VjcmV0LCBhdXRob3JpemF0aW9uKTtcbiAgICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgICAvLyBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkIHdlIHJlbHkgb24gaXRcbiAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlZGVudGlhbHM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdpdGggSldUIHRocm93IDQwMVxuICAgICAgICBuZXh0KEVycm9yQ29kZS5nZXRGb3JiaWRkZW4oQVBJX0VSUk9SLkJBRF9VU0VSTkFNRV9QQVNTV09SRCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUFFU01pZGRsZXdhcmUocmVxOiAkUmVxdWVzdEV4dGVuZCwgc2VjdXJpdHk6IFNlY3VyaXR5LCBzZWNyZXQ6IHN0cmluZywgYXV0aG9yaXphdGlvbjogc3RyaW5nLCBuZXh0OiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBhbnkgPSBnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMoc2VjdXJpdHksIHNlY3JldCwgYXV0aG9yaXphdGlvbik7XG4gICAgaWYgKGNyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCB7IHVzZXIsIHBhc3N3b3JkIH0gPSBjcmVkZW50aWFscztcbiAgICAgIHRoaXMuYXV0aGVudGljYXRlKHVzZXIsIHBhc3N3b3JkLCAoZXJyLCB1c2VyKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gdXNlcjtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpO1xuICAgICAgICAgIG5leHQoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHdlIGZvcmNlIG5wbSBjbGllbnQgdG8gYXNrIGFnYWluIHdpdGggYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRCYWRSZXF1ZXN0KEFQSV9FUlJPUi5CQURfQVVUSF9IRUFERVIpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1JlbW90ZVVzZXJWYWxpZChyZW1vdGVfdXNlcjogUmVtb3RlVXNlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBfLmlzVW5kZWZpbmVkKHJlbW90ZV91c2VyKSA9PT0gZmFsc2UgJiYgXy5pc1VuZGVmaW5lZChyZW1vdGVfdXNlci5uYW1lKSA9PT0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSldUIG1pZGRsZXdhcmUgZm9yIFdlYlVJXG4gICAqL1xuICBwdWJsaWMgd2ViVUlKV1RtaWRkbGV3YXJlKCk6IEZ1bmN0aW9uIHtcbiAgICByZXR1cm4gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBfbmV4dDogTmV4dEZ1bmN0aW9uKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5faXNSZW1vdGVVc2VyVmFsaWQocmVxLnJlbW90ZV91c2VyKSkge1xuICAgICAgICByZXR1cm4gX25leHQoKTtcbiAgICAgIH1cblxuICAgICAgcmVxLnBhdXNlKCk7XG4gICAgICBjb25zdCBuZXh0ID0gKGVycjogVmVyZGFjY2lvRXJyb3IgfCB2b2lkKTogdm9pZCA9PiB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIHJlcS5yZW1vdGVfdXNlci5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1c0NvZGUpLnNlbmQoZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9uZXh0KCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7IGF1dGhvcml6YXRpb24gfSA9IHJlcS5oZWFkZXJzO1xuICAgICAgaWYgKF8uaXNOaWwoYXV0aG9yaXphdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0F1dGhIZWFkZXJWYWxpZChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0QmFkUmVxdWVzdChBUElfRVJST1IuQkFEX0FVVEhfSEVBREVSKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuID0gKGF1dGhvcml6YXRpb24gfHwgJycpLnJlcGxhY2UoYCR7VE9LRU5fQkVBUkVSfSBgLCAnJyk7XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBjcmVkZW50aWFscztcbiAgICAgIHRyeSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gdmVyaWZ5SldUUGF5bG9hZCh0b2tlbiwgdGhpcy5jb25maWcuc2VjcmV0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBGSVhNRTogaW50ZW5kZWQgYmVoYXZpb3VyLCBkbyB3ZSB3YW50IGl0P1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNSZW1vdGVVc2VyVmFsaWQoY3JlZGVudGlhbHMpKSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZ3JvdXBzIH0gPSBjcmVkZW50aWFscztcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVSZW1vdGVVc2VyKG5hbWUsIGdyb3Vwcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGp3dEVuY3J5cHQodXNlcjogUmVtb3RlVXNlciwgc2lnbk9wdGlvbnM6IEpXVFNpZ25PcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHJlYWxfZ3JvdXBzLCBuYW1lLCBncm91cHMgfSA9IHVzZXI7XG4gICAgY29uc3QgcmVhbEdyb3Vwc1ZhbGlkYXRlZCA9IF8uaXNOaWwocmVhbF9ncm91cHMpID8gW10gOiByZWFsX2dyb3VwcztcbiAgICBjb25zdCBncm91cGVkR3JvdXBzID0gXy5pc05pbChncm91cHMpID8gcmVhbF9ncm91cHMgOiBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLmdyb3Vwcy5jb25jYXQocmVhbEdyb3Vwc1ZhbGlkYXRlZCldKSk7XG4gICAgY29uc3QgcGF5bG9hZDogUmVtb3RlVXNlciA9IHtcbiAgICAgIHJlYWxfZ3JvdXBzOiByZWFsR3JvdXBzVmFsaWRhdGVkLFxuICAgICAgbmFtZSxcbiAgICAgIGdyb3VwczogZ3JvdXBlZEdyb3VwcyxcbiAgICB9O1xuXG4gICAgY29uc3QgdG9rZW46IHN0cmluZyA9IGF3YWl0IHNpZ25QYXlsb2FkKHBheWxvYWQsIHRoaXMuc2VjcmV0LCBzaWduT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICAvKipcbiAgICogRW5jcnlwdCBhIHN0cmluZy5cbiAgICovXG4gIHB1YmxpYyBhZXNFbmNyeXB0KGJ1ZjogQnVmZmVyKTogQnVmZmVyIHtcbiAgICByZXR1cm4gYWVzRW5jcnlwdChidWYsIHRoaXMuc2VjcmV0KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdXRoO1xuIl19
package/conf/default.yaml CHANGED
@@ -1,16 +1,20 @@
1
1
  #
2
- # This is the default config file. It allows all users to do anything,
3
- # so don't use it on production systems.
2
+ # This is the default configuration file. It allows all users to do anything,
3
+ # please read carefully the documentation and best practices to
4
+ # improve security.
4
5
  #
5
6
  # Look here for more config file examples:
6
- # https://github.com/verdaccio/verdaccio/tree/master/conf
7
+ # https://github.com/verdaccio/verdaccio/tree/5.x/conf
7
8
  #
9
+ # Read about the best practices
10
+ # https://verdaccio.org/docs/best
8
11
 
9
12
  # path to a directory with all packages
10
13
  storage: ./storage
11
14
  # path to a directory with plugins to include
12
15
  plugins: ./plugins
13
16
 
17
+ # https://verdaccio.org/docs/webui
14
18
  web:
15
19
  title: Verdaccio
16
20
  # comment out to disable gravatar support
@@ -19,17 +23,32 @@ web:
19
23
  # sort_packages: asc
20
24
  # convert your UI to the dark side
21
25
  # darkMode: true
22
- # logo: http://somedomain/somelogo.png
23
- # favicon: http://somedomain/favicon.ico | /path/favicon.ico
24
- # rateLimit:
25
- # windowMs: 1000
26
- # max: 10000
27
-
28
- # translate your registry, api i18n not available yet
29
- # i18n:
30
- # list of the available translations https://github.com/verdaccio/ui/tree/master/i18n/translations
31
- # web: en-US
26
+ # html_cache: true
27
+ # by default all features are displayed
28
+ # login: true
29
+ # showInfo: true
30
+ # showSettings: true
31
+ # In combination with darkMode you can force specific theme
32
+ # showThemeSwitch: true
33
+ # showFooter: true
34
+ # showSearch: true
35
+ # showRaw: true
36
+ # showDownloadTarball: true
37
+ # HTML tags injected after manifest <scripts/>
38
+ # scriptsBodyAfter:
39
+ # - '<script type="text/javascript" src="https://my.company.com/customJS.min.js"></script>'
40
+ # HTML tags injected before ends </head>
41
+ # metaScripts:
42
+ # - '<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>'
43
+ # - '<script type="text/javascript" src="https://browser.sentry-cdn.com/5.15.5/bundle.min.js"></script>'
44
+ # - '<meta name="robots" content="noindex" />'
45
+ # HTML tags injected first child at <body/>
46
+ # bodyBefore:
47
+ # - '<div id="myId">html before webpack scripts</div>'
48
+ # Public path for template manifest scripts (only manifest)
49
+ # publicPath: http://somedomain.org/
32
50
 
51
+ # https://verdaccio.org/docs/configuration#authentication
33
52
  auth:
34
53
  htpasswd:
35
54
  file: ./htpasswd
@@ -37,11 +56,15 @@ auth:
37
56
  # You can set this to -1 to disable registration.
38
57
  # max_users: 1000
39
58
 
59
+ # https://verdaccio.org/docs/configuration#uplinks
40
60
  # a list of other known repositories we can talk to
41
61
  uplinks:
42
62
  npmjs:
43
63
  url: https://registry.npmjs.org/
44
64
 
65
+ # Learn how to protect your packages
66
+ # https://verdaccio.org/docs/protect-your-dependencies/
67
+ # https://verdaccio.org/docs/configuration#packages
45
68
  packages:
46
69
  '@*/*':
47
70
  # scoped packages
@@ -66,16 +89,88 @@ packages:
66
89
  # if package is not available locally, proxy requests to 'npmjs' registry
67
90
  proxy: npmjs
68
91
 
92
+ # To improve your security configuration and avoid dependency confusion
93
+ # consider removing the proxy property for private packages
94
+ # https://verdaccio.org/docs/best#remove-proxy-to-increase-security-at-private-packages
95
+
96
+ # https://verdaccio.org/docs/configuration#server
69
97
  # You can specify HTTP/1.1 server keep alive timeout in seconds for incoming connections.
70
98
  # A value of 0 makes the http server behave similarly to Node.js versions prior to 8.0.0, which did not have a keep-alive timeout.
71
99
  # WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enough.
72
100
  server:
73
101
  keepAliveTimeout: 60
74
102
 
103
+ # https://verdaccio.org/docs/configuration#offline-publish
104
+ # publish:
105
+ # allow_offline: false
106
+
107
+ # https://verdaccio.org/docs/configuration#url-prefix
108
+ # url_prefix: /verdaccio/
109
+ # VERDACCIO_PUBLIC_URL='https://somedomain.org';
110
+ # url_prefix: '/my_prefix'
111
+ # // url -> https://somedomain.org/my_prefix/
112
+ # VERDACCIO_PUBLIC_URL='https://somedomain.org';
113
+ # url_prefix: '/'
114
+ # // url -> https://somedomain.org/
115
+ # VERDACCIO_PUBLIC_URL='https://somedomain.org/first_prefix';
116
+ # url_prefix: '/second_prefix'
117
+ # // url -> https://somedomain.org/second_prefix/'
118
+
119
+ # https://verdaccio.org/docs/configuration#security
120
+ # security:
121
+ # api:
122
+ # legacy: true
123
+ # jwt:
124
+ # sign:
125
+ # expiresIn: 29d
126
+ # verify:
127
+ # someProp: [value]
128
+ # web:
129
+ # sign:
130
+ # expiresIn: 1h # 1 hour by default
131
+ # verify:
132
+ # someProp: [value]
133
+
134
+ # https://verdaccio.org/docs/configuration#user-rate-limit
135
+ # userRateLimit:
136
+ # windowMs: 50000
137
+ # max: 1000
138
+
139
+ # https://verdaccio.org/docs/configuration#max-body-size
140
+ # max_body_size: 10mb
141
+
142
+ # https://verdaccio.org/docs/configuration#listen-port
143
+ # listen:
144
+ # - localhost:4873 # default value
145
+ # - http://localhost:4873 # same thing
146
+ # - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY)
147
+ # - https://example.org:4873 # if you want to use https
148
+ # - "[::1]:4873" # ipv6
149
+ # - unix:/tmp/verdaccio.sock # unix socket
150
+
151
+ # The HTTPS configuration is useful if you do not consider use a HTTP Proxy
152
+ # https://verdaccio.org/docs/configuration#https
153
+ # https:
154
+ # key: ./path/verdaccio-key.pem
155
+ # cert: ./path/verdaccio-cert.pem
156
+ # ca: ./path/verdaccio-csr.pem
157
+
158
+ # https://verdaccio.org/docs/configuration#proxy
159
+ # http_proxy: http://something.local/
160
+ # https_proxy: https://something.local/
161
+
162
+ # https://verdaccio.org/docs/configuration#notifications
163
+ # notify:
164
+ # method: POST
165
+ # headers: [{ "Content-Type": "application/json" }]
166
+ # endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
167
+ # content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'
168
+
75
169
  middlewares:
76
170
  audit:
77
171
  enabled: true
78
172
 
173
+ # https://verdaccio.org/docs/logger
79
174
  # log settings
80
175
  logs: { type: stdout, format: pretty, level: http }
81
176
  #experiments:
@@ -91,6 +186,7 @@ logs: { type: stdout, format: pretty, level: http }
91
186
  # return signedUrl;
92
187
  # }
93
188
 
94
- # This affect the web and api (not developed yet)
95
- #i18n:
96
- #web: en-US
189
+ # translate your registry, api i18n not available yet
190
+ # i18n:
191
+ # list of the available translations https://github.com/verdaccio/verdaccio/blob/master/packages/plugins/ui-theme/src/i18n/ABOUT_TRANSLATIONS.md
192
+ # web: en-US
package/conf/docker.yaml CHANGED
@@ -1,40 +1,58 @@
1
1
  #
2
- # This is the config file used for the docker images.
3
- # It allows all users to do anything, so don't use it on production systems.
2
+ # This is the default configuration file. It allows all users to do anything,
3
+ # please read carefully the documentation and best practices to
4
+ # improve security.
4
5
  #
5
6
  # Do not configure host and port under `listen` in this file
6
7
  # as it will be ignored when using docker.
7
8
  # see https://verdaccio.org/docs/en/docker#docker-and-custom-port-configuration
8
9
  #
9
10
  # Look here for more config file examples:
10
- # https://github.com/verdaccio/verdaccio/tree/master/conf
11
+ # https://github.com/verdaccio/verdaccio/tree/5.x/conf
11
12
  #
13
+ # Read about the best practices
14
+ # https://verdaccio.org/docs/best
12
15
 
13
16
  # path to a directory with all packages
14
17
  storage: /verdaccio/storage/data
15
18
  # path to a directory with plugins to include
16
19
  plugins: /verdaccio/plugins
17
20
 
21
+ # https://verdaccio.org/docs/webui
18
22
  web:
19
- # WebUI is enabled as default, if you want disable it, just uncomment this line
20
- #enable: false
21
23
  title: Verdaccio
22
24
  # comment out to disable gravatar support
23
25
  # gravatar: false
24
26
  # by default packages are ordercer ascendant (asc|desc)
25
27
  # sort_packages: asc
28
+ # convert your UI to the dark side
26
29
  # darkMode: true
27
- # logo: http://somedomain/somelogo.png
28
- # favicon: http://somedomain/favicon.ico | /path/favicon.ico
29
- # rateLimit:
30
- # windowMs: 1000
31
- # max: 10000
32
-
33
- # translate your registry, api i18n not available yet
34
- # i18n:
35
- # list of the available translations https://github.com/verdaccio/ui/tree/master/i18n/translations
36
- # web: en-US
30
+ # html_cache: true
31
+ # by default all features are displayed
32
+ # login: true
33
+ # showInfo: true
34
+ # showSettings: true
35
+ # In combination with darkMode you can force specific theme
36
+ # showThemeSwitch: true
37
+ # showFooter: true
38
+ # showSearch: true
39
+ # showRaw: true
40
+ # showDownloadTarball: true
41
+ # HTML tags injected after manifest <scripts/>
42
+ # scriptsBodyAfter:
43
+ # - '<script type="text/javascript" src="https://my.company.com/customJS.min.js"></script>'
44
+ # HTML tags injected before ends </head>
45
+ # metaScripts:
46
+ # - '<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>'
47
+ # - '<script type="text/javascript" src="https://browser.sentry-cdn.com/5.15.5/bundle.min.js"></script>'
48
+ # - '<meta name="robots" content="noindex" />'
49
+ # HTML tags injected first child at <body/>
50
+ # bodyBefore:
51
+ # - '<div id="myId">html before webpack scripts</div>'
52
+ # Public path for template manifest scripts (only manifest)
53
+ # publicPath: http://somedomain.org/
37
54
 
55
+ # https://verdaccio.org/docs/configuration#authentication
38
56
  auth:
39
57
  htpasswd:
40
58
  file: /verdaccio/storage/htpasswd
@@ -42,11 +60,15 @@ auth:
42
60
  # You can set this to -1 to disable registration.
43
61
  # max_users: 1000
44
62
 
63
+ # https://verdaccio.org/docs/configuration#uplinks
45
64
  # a list of other known repositories we can talk to
46
65
  uplinks:
47
66
  npmjs:
48
67
  url: https://registry.npmjs.org/
49
68
 
69
+ # Learn how to protect your packages
70
+ # https://verdaccio.org/docs/protect-your-dependencies/
71
+ # https://verdaccio.org/docs/configuration#packages
50
72
  packages:
51
73
  '@*/*':
52
74
  # scoped packages
@@ -71,16 +93,88 @@ packages:
71
93
  # if package is not available locally, proxy requests to 'npmjs' registry
72
94
  proxy: npmjs
73
95
 
96
+ # To improve your security configuration and avoid dependency confusion
97
+ # consider removing the proxy property for private packages
98
+ # https://verdaccio.org/docs/best#remove-proxy-to-increase-security-at-private-packages
99
+
100
+ # https://verdaccio.org/docs/configuration#server
74
101
  # You can specify HTTP/1.1 server keep alive timeout in seconds for incoming connections.
75
102
  # A value of 0 makes the http server behave similarly to Node.js versions prior to 8.0.0, which did not have a keep-alive timeout.
76
103
  # WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enough.
77
104
  server:
78
105
  keepAliveTimeout: 60
79
106
 
107
+ # https://verdaccio.org/docs/configuration#offline-publish
108
+ # publish:
109
+ # allow_offline: false
110
+
111
+ # https://verdaccio.org/docs/configuration#url-prefix
112
+ # url_prefix: /verdaccio/
113
+ # VERDACCIO_PUBLIC_URL='https://somedomain.org';
114
+ # url_prefix: '/my_prefix'
115
+ # // url -> https://somedomain.org/my_prefix/
116
+ # VERDACCIO_PUBLIC_URL='https://somedomain.org';
117
+ # url_prefix: '/'
118
+ # // url -> https://somedomain.org/
119
+ # VERDACCIO_PUBLIC_URL='https://somedomain.org/first_prefix';
120
+ # url_prefix: '/second_prefix'
121
+ # // url -> https://somedomain.org/second_prefix/'
122
+
123
+ # https://verdaccio.org/docs/configuration#security
124
+ # security:
125
+ # api:
126
+ # legacy: true
127
+ # jwt:
128
+ # sign:
129
+ # expiresIn: 29d
130
+ # verify:
131
+ # someProp: [value]
132
+ # web:
133
+ # sign:
134
+ # expiresIn: 1h # 1 hour by default
135
+ # verify:
136
+ # someProp: [value]
137
+
138
+ # https://verdaccio.org/docs/configuration#user-rate-limit
139
+ # userRateLimit:
140
+ # windowMs: 50000
141
+ # max: 1000
142
+
143
+ # https://verdaccio.org/docs/configuration#max-body-size
144
+ # max_body_size: 10mb
145
+
146
+ # https://verdaccio.org/docs/configuration#listen-port
147
+ # listen:
148
+ # - localhost:4873 # default value
149
+ # - http://localhost:4873 # same thing
150
+ # - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY)
151
+ # - https://example.org:4873 # if you want to use https
152
+ # - "[::1]:4873" # ipv6
153
+ # - unix:/tmp/verdaccio.sock # unix socket
154
+
155
+ # The HTTPS configuration is useful if you do not consider use a HTTP Proxy
156
+ # https://verdaccio.org/docs/configuration#https
157
+ # https:
158
+ # key: ./path/verdaccio-key.pem
159
+ # cert: ./path/verdaccio-cert.pem
160
+ # ca: ./path/verdaccio-csr.pem
161
+
162
+ # https://verdaccio.org/docs/configuration#proxy
163
+ # http_proxy: http://something.local/
164
+ # https_proxy: https://something.local/
165
+
166
+ # https://verdaccio.org/docs/configuration#notifications
167
+ # notify:
168
+ # method: POST
169
+ # headers: [{ "Content-Type": "application/json" }]
170
+ # endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
171
+ # content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'
172
+
80
173
  middlewares:
81
174
  audit:
82
175
  enabled: true
83
176
 
177
+ # https://verdaccio.org/docs/logger
84
178
  # log settings
85
179
  logs: { type: stdout, format: pretty, level: http }
86
180
  #experiments:
@@ -94,6 +188,7 @@ logs: { type: stdout, format: pretty, level: http }
94
188
  # return signedUrl;
95
189
  # }
96
190
 
97
- # This affect the web and api (not developed yet)
98
- #i18n:
99
- #web: en-US
191
+ # translate your registry, api i18n not available yet
192
+ # i18n:
193
+ # list of the available translations https://github.com/verdaccio/verdaccio/blob/master/packages/plugins/ui-theme/src/i18n/ABOUT_TRANSLATIONS.md
194
+ # web: en-US
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "verdaccio",
3
- "version": "5.8.0",
3
+ "version": "5.10.1",
4
4
  "description": "A lightweight private npm proxy registry",
5
5
  "author": {
6
6
  "name": "Verdaccio Maintainers",
@@ -19,18 +19,18 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "@verdaccio/commons-api": "10.2.0",
22
- "@verdaccio/local-storage": "10.2.0",
23
- "@verdaccio/readme": "10.3.2",
22
+ "@verdaccio/local-storage": "10.2.1",
23
+ "@verdaccio/readme": "10.3.3",
24
24
  "@verdaccio/streams": "10.2.0",
25
- "@verdaccio/ui-theme": "6.0.0-6-next.22",
25
+ "@verdaccio/ui-theme": "6.0.0-6-next.24",
26
26
  "JSONStream": "1.3.5",
27
27
  "async": "3.2.3",
28
- "body-parser": "1.19.1",
28
+ "body-parser": "1.20.0",
29
29
  "clipanion": "3.1.0",
30
30
  "compression": "1.7.4",
31
31
  "cookies": "0.8.0",
32
32
  "cors": "2.8.5",
33
- "dayjs": "1.10.8",
33
+ "dayjs": "1.11.1",
34
34
  "debug": "^4.3.3",
35
35
  "envinfo": "7.8.1",
36
36
  "eslint-import-resolver-node": "0.3.6",
@@ -43,9 +43,9 @@
43
43
  "jsonwebtoken": "8.5.1",
44
44
  "kleur": "4.1.4",
45
45
  "lodash": "4.17.21",
46
- "lru-cache": "6.0.0",
46
+ "lru-cache": "7.8.1",
47
47
  "lunr-mutable-indexes": "2.3.2",
48
- "marked": "4.0.12",
48
+ "marked": "4.0.14",
49
49
  "memoizee": "0.4.15",
50
50
  "mime": "3.0.0",
51
51
  "minimatch": "5.0.1",
@@ -56,35 +56,35 @@
56
56
  "prettier-bytes": "^1.0.4",
57
57
  "pretty-ms": "^7.0.1",
58
58
  "request": "2.88.0",
59
- "semver": "7.3.5",
59
+ "semver": "7.3.7",
60
60
  "validator": "13.7.0",
61
- "verdaccio-audit": "10.2.0",
61
+ "verdaccio-audit": "10.2.1",
62
62
  "verdaccio-htpasswd": "10.3.0"
63
63
  },
64
64
  "devDependencies": {
65
- "@babel/cli": "7.16.8",
66
- "@babel/core": "7.16.10",
65
+ "@babel/cli": "7.17.6",
66
+ "@babel/core": "7.17.8",
67
67
  "@babel/node": "7.16.8",
68
68
  "@babel/plugin-proposal-class-properties": "7.16.7",
69
- "@babel/plugin-proposal-decorators": "7.16.7",
69
+ "@babel/plugin-proposal-decorators": "7.17.8",
70
70
  "@babel/plugin-proposal-export-namespace-from": "7.16.7",
71
71
  "@babel/plugin-proposal-function-sent": "7.16.7",
72
72
  "@babel/plugin-proposal-json-strings": "7.16.7",
73
73
  "@babel/plugin-proposal-nullish-coalescing-operator": "7.16.7",
74
74
  "@babel/plugin-proposal-numeric-separator": "7.16.7",
75
- "@babel/plugin-proposal-object-rest-spread": "7.16.7",
75
+ "@babel/plugin-proposal-object-rest-spread": "7.17.3",
76
76
  "@babel/plugin-proposal-optional-chaining": "7.16.7",
77
77
  "@babel/plugin-proposal-throw-expressions": "7.16.7",
78
78
  "@babel/plugin-syntax-dynamic-import": "7.8.3",
79
79
  "@babel/plugin-syntax-import-meta": "7.10.4",
80
80
  "@babel/plugin-transform-async-to-generator": "7.16.8",
81
81
  "@babel/plugin-transform-classes": "7.16.7",
82
- "@babel/plugin-transform-runtime": "7.16.10",
82
+ "@babel/plugin-transform-runtime": "7.17.0",
83
83
  "@babel/polyfill": "^7.12.1",
84
84
  "@babel/preset-env": "7.16.11",
85
85
  "@babel/preset-typescript": "7.16.7",
86
- "@babel/register": "7.16.9",
87
- "@babel/runtime": "7.16.7",
86
+ "@babel/register": "7.17.7",
87
+ "@babel/runtime": "7.17.8",
88
88
  "@commitlint/cli": "12.1.4",
89
89
  "@commitlint/config-conventional": "12.1.4",
90
90
  "@octokit/rest": "18.12.0",
@@ -95,7 +95,7 @@
95
95
  "@types/express-serve-static-core": "4.17.28",
96
96
  "@types/http-errors": "1.8.2",
97
97
  "@types/jest": "26.0.24",
98
- "@types/lodash": "4.14.178",
98
+ "@types/lodash": "4.14.182",
99
99
  "@types/mime": "2.0.3",
100
100
  "@types/minimatch": "3.0.5",
101
101
  "@types/node": "14.14.37",
@@ -121,7 +121,7 @@
121
121
  "eslint-plugin-jest": "24.7.0",
122
122
  "eslint-plugin-simple-import-sort": "7.0.0",
123
123
  "eslint-plugin-verdaccio": "9.6.1",
124
- "fs-extra": "10.0.0",
124
+ "fs-extra": "10.1.0",
125
125
  "husky": "6.0.0",
126
126
  "jest": "26.6.3",
127
127
  "jest-config": "26.6.3",
@@ -138,7 +138,7 @@
138
138
  "selfsigned": "1.10.14",
139
139
  "standard-version": "9.3.2",
140
140
  "supertest": "6.2.2",
141
- "ts-node": "10.4.0",
141
+ "ts-node": "10.7.0",
142
142
  "typescript": "4.1.3",
143
143
  "verdaccio-auth-memory": "10.2.0",
144
144
  "verdaccio-memory": "10.2.0"