@kontur.candy/tools 2.160.0-linux-compat.1 → 2.161.0

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.
Files changed (44) hide show
  1. package/CHANGELOG.md +2 -15
  2. package/distr/Common/AutoValidationUtils.js +9 -0
  3. package/distr/Common/CandyApiClient/CandyApiClient.js +29 -14
  4. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithCache.js +8 -20
  5. package/distr/Common/CandyApiClient/DigestApiClient/Decorators/DigestApiClientWithDebouncedBatching.js +4 -9
  6. package/distr/Common/CandyApiClient/DigestApiClient/DigestApiClient.js +8 -27
  7. package/distr/Common/CandyApiClient/DigestApiClient/Fakes/FakeDigestApiClient.js +8 -10
  8. package/distr/Common/CandyApiClient/DigestApiClient/IDigestApiClient.js +1 -1
  9. package/distr/Common/CandyApiClient/DigestApiClient/TestDigestApiClient.js +4 -8
  10. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +18 -14
  11. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
  12. package/distr/Common/CandyApiClient/Types/ChangeSet/ServerChangeSet.js +1 -1
  13. package/distr/Common/CandyApiClient/Types/DraftActions/FileProperties.js +1 -1
  14. package/distr/Common/EndPoints.js +4 -2
  15. package/distr/Common/FSPrinterClient/FSPrinterClient.js +136 -0
  16. package/distr/Common/FSPrinterClient/FakeFSPrinterClient.js +19 -0
  17. package/distr/Common/FSPrinterClient/IFSPrinterClient.js +44 -0
  18. package/distr/Common/ModelPath/AbsoluteModelFieldPath.js +53 -0
  19. package/distr/Common/ModelPath/BuildIterationSequence.js +20 -1
  20. package/distr/Common/ModelPath/Map/Map2.js +14 -1
  21. package/distr/Common/ModelPath/ModelPath.js +41 -69
  22. package/distr/Common/ModelPath/ModelPathHelper.js +23 -1
  23. package/distr/Common/ModelPath/Set/Set2.js +7 -2
  24. package/distr/Common/PicklistApiClient/IPicklistApiClient.js +6 -0
  25. package/distr/Common/PicklistApiClient/PicklistApiClient.js +30 -0
  26. package/distr/Common/PicklistApiClient/PicklistRequestV2Builder.js +34 -0
  27. package/distr/Common/PicklistApiClient/Serializers/DigestFilterColumnSerializer.js +53 -0
  28. package/distr/Common/PicklistApiClient/Serializers/DigestLogicalFilterSerializer.js +37 -0
  29. package/distr/Common/PicklistApiClient/Types/PicklistRequestV2.js +6 -0
  30. package/distr/Common/PicklistApiClient/Types/PicklistResultV2.js +6 -0
  31. package/distr/Common/StringArrayKey.js +4 -2
  32. package/distr/Common/getRngSchemaFilename.js +10 -4
  33. package/distr/Tools/src/BuildTasks/Engine/AcquirePublishedEngineTask.js +2 -2
  34. package/distr/Tools/src/BuildTasks/ProcessUtils/ProcessUtils.js +1 -8
  35. package/distr/Tools/src/BuildTasks/PublishedVersionUtils.js +2 -3
  36. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  37. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  38. package/distr/Tools/src/SelfUpdate.js +3 -3
  39. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +182 -171
  40. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
  41. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +192 -192
  42. package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
  43. package/package.json +7 -7
  44. package/distr/Common/CandyApiClient/DigestApiClient/Types/DigestResponse.js +0 -6
package/CHANGELOG.md CHANGED
@@ -1,18 +1,5 @@
1
- <a name="2.160.0-linux-compat.1"></a>
2
- # [2.160.0-linux-compat.1](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.160.0-linux-compat.0...release/tools/v2.160.0-linux-compat.1) (2023-09-19)
3
-
4
- <a name="2.160.0-linux-compat.0"></a>
5
- # [2.160.0-linux-compat.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.158.0...release/tools/v2.160.0-linux-compat.0) (2023-09-19)
6
-
7
-
8
- ### Bug Fixes
9
-
10
- * **Tools:** Прибрана команда init-form, добавлена опция копирования схемы rng из hl ([c6b073c](https://git.skbkontur.ru/ke/candy-utils/commit/c6b073c)), see [#7230](https://yt.skbkontur.ru/issue/fs-7230)
11
-
12
-
13
- ### Features
14
-
15
- * **Tools:** Утилита candy теперь запускается под linux ([9223945](https://git.skbkontur.ru/ke/candy-utils/commit/9223945))
1
+ <a name="2.161.0"></a>
2
+ # [2.161.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.159.0...release/tools/v2.161.0) (2023-12-26)
16
3
 
17
4
  <a name="2.159.0"></a>
18
5
  # [2.159.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.158.0...release/tools/v2.159.0) (2023-08-03)
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AutoValidationMessage = void 0;
7
+ const AutoValidationMessage = "Значение не равно вычисленному по формуле";
8
+ exports.AutoValidationMessage = AutoValidationMessage;
9
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBdXRvVmFsaWRhdGlvbk1lc3NhZ2UiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vQ29tbW9uL0F1dG9WYWxpZGF0aW9uVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQXV0b1ZhbGlkYXRpb25MZXZlbHMgPSBcImVycm9yXCIgfCBcIndhcm5pbmdcIjtcbmV4cG9ydCBjb25zdCBBdXRvVmFsaWRhdGlvbk1lc3NhZ2UgPSBcItCX0L3QsNGH0LXQvdC40LUg0L3QtSDRgNCw0LLQvdC+INCy0YvRh9C40YHQu9C10L3QvdC+0LzRgyDQv9C+INGE0L7RgNC80YPQu9C1XCI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNPLE1BQU1BLHFCQUFxQixHQUFHLDJDQUEyQztBQUFDQyxPQUFBLENBQUFELHFCQUFBLEdBQUFBLHFCQUFBIn0=
@@ -11,7 +11,6 @@ var _ModelPath = require("../ModelPath/ModelPath");
11
11
  var _FocusTypes = require("./Types/Focus/FocusTypes");
12
12
  var _DraftPresentationType = require("./Types/Presentations/DraftPresentationType");
13
13
  var _IsBuffer = require("./IsBuffer");
14
- var _DigestApiClient = require("./DigestApiClient/DigestApiClient");
15
14
  var _FufSizeTooLargeError = require("./Types/DraftActions/FufSizeTooLargeError");
16
15
  const strangeOptions = {
17
16
  src: "changeSet",
@@ -37,9 +36,6 @@ class CandyApiClient {
37
36
  forDraft(draftFullId) {
38
37
  return new CandyApiDraftClient(this.httpClient, draftFullId);
39
38
  }
40
- createDigestApiClient(draftFullId) {
41
- return new _DigestApiClient.DigestApiClient(this.httpClient, draftFullId);
42
- }
43
39
  async getInfoByInns(draftFullId, inns) {
44
40
  const paths = inns.map(inn => `@focus/${inn}`);
45
41
  const response = await this.httpClient.post(this.getDraftUrl(draftFullId, "get-inner")).withJsonBody(paths).json();
@@ -154,6 +150,14 @@ class CandyApiDraftClient {
154
150
  const tasks = await this.httpClient.post(this.getDraftUrl("get-inner")).withJsonBody([`@task/*`]).json();
155
151
  return (_tasks = tasks[`@task/${taskId}`]) === null || _tasks === void 0 ? void 0 : _tasks.value;
156
152
  }
153
+ async getFufWithAttachments() {
154
+ const response = await this.httpClient.get(this.getDraftUrl("get-fuf-with-attachments")).json();
155
+ return response;
156
+ }
157
+ async getPartialFuf(rules) {
158
+ const response = await this.httpClient.post(this.getDraftUrl("get-partial-fuf")).withJsonBody(rules).json();
159
+ return response;
160
+ }
157
161
  async getAllTasks() {
158
162
  const tasks = await this.httpClient.post(this.getDraftUrl("get-inner")).withJsonBody([`@task/*`]).json();
159
163
  return Object.values(tasks).map(x => x.value);
@@ -211,7 +215,14 @@ class CandyApiDraftClient {
211
215
  };
212
216
  return result.status == 200 ? await getSuccessResult() : result.status;
213
217
  }
214
- sendChangeSetSync(data, currentDataVersion) {
218
+ async sendChangeWithNormalizationSet(data, currentDataVersion, normalizerId) {
219
+ const result = await this.httpClient.post(this.getDraftUrl("inner/patch-with-normalization")).withQueryParams({
220
+ dataVersion: currentDataVersion,
221
+ normalizerId: normalizerId
222
+ }).withJsonBody(data).acceptCode(409);
223
+ return result.status == 200 ? await result.json() : result.status;
224
+ }
225
+ sendChangeSetSync(data, currentDataVersion, normalizerId) {
215
226
  const result = this.httpClient.postSync(this.getDraftUrl("inner"), {
216
227
  dataVersion: currentDataVersion
217
228
  }, data);
@@ -429,15 +440,25 @@ class CandyApiDraftClient {
429
440
  return undefined;
430
441
  }
431
442
  }
432
- async multipleCombineFufByDriveUri(driveUris, combineMethod) {
443
+ async multipleCombineFufByDriveUri(driveUris, combineMethod, args) {
433
444
  const response = await this.httpClient.post(this.getDraftUrl("transfer/combine-with-fufs")).withQueryParams({
434
445
  combineMethod: combineMethod
435
- }).withJsonBody(driveUris);
446
+ }).withJsonBody({
447
+ driveUris: driveUris,
448
+ arguments: args
449
+ });
436
450
  if (response.status === 400) {
437
451
  return undefined;
438
452
  }
439
453
  return await response.json();
440
454
  }
455
+ async setDraftSettings(settings) {
456
+ await this.httpClient.patch(this.getDraftUrl("external/set-settings")).withJsonBody(settings);
457
+ }
458
+ async getDraftSettings() {
459
+ const response = await this.httpClient.get(this.getDraftUrl("external/get-settings"));
460
+ return response.json();
461
+ }
441
462
  async normalizeByRules(rules) {
442
463
  await this.httpClient.post(this.getDraftUrl("test-normalize")).withJsonBody(rules);
443
464
  }
@@ -450,12 +471,6 @@ class CandyApiDraftClient {
450
471
  getDraftPresentationUrl(presentationType) {
451
472
  return this.getDraftUrl(`presentations/${presentationType.toString()}`);
452
473
  }
453
- async setAllCheckboxesFor113103(enabled) {
454
- const uri = this.getDraftUrl("inner/check-all");
455
- await this.httpClient.patch(uri).withQueryParams({
456
- setEnabled: enabled
457
- });
458
- }
459
474
  async setMultipleWithNormalization(rules) {
460
475
  const uri = this.getDraftUrl("inner/set-multiple-with-normalization");
461
476
  const finalRules = rules.map(x => ({
@@ -516,4 +531,4 @@ class CandyApiDraftClient {
516
531
  }
517
532
  }
518
533
  exports.CandyApiDraftClient = CandyApiDraftClient;
519
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVHlwaW5nVXRpbHMiLCJyZXF1aXJlIiwiX0h0dHBDbGllbnQiLCJfQXV0aGVudGljYXRpb25Nb2RlIiwiX01vZGVsUGF0aCIsIl9Gb2N1c1R5cGVzIiwiX0RyYWZ0UHJlc2VudGF0aW9uVHlwZSIsIl9Jc0J1ZmZlciIsIl9EaWdlc3RBcGlDbGllbnQiLCJfRnVmU2l6ZVRvb0xhcmdlRXJyb3IiLCJzdHJhbmdlT3B0aW9ucyIsInNyYyIsImRhdGFWZXJzaW9uIiwiU2VydmVyRXJyb3JzIiwiZXhwb3J0cyIsImNvbnZlcnRQYXRoTG9hZFNwZWNpZmljYXRpb25Ub1N0cmluZyIsInNwZWMiLCJza2lwIiwicGF0aE9yUGF0aFByZWZpeCIsInRvTGVnYWN5UGF0aCIsIkNhbmR5QXBpQ2xpZW50IiwiY29uc3RydWN0b3IiLCJmZXRjaEltcGwiLCJiYXNlVXJsIiwicmVzb3VyY2Vab25lIiwiYXV0aGVudGljYXRpb24iLCJodHRwQ2xpZW50IiwiSHR0cENsaWVudCIsImNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIiLCJmb3JEcmFmdCIsImRyYWZ0RnVsbElkIiwiQ2FuZHlBcGlEcmFmdENsaWVudCIsImNyZWF0ZURpZ2VzdEFwaUNsaWVudCIsIkRpZ2VzdEFwaUNsaWVudCIsImdldEluZm9CeUlubnMiLCJpbm5zIiwicGF0aHMiLCJtYXAiLCJpbm4iLCJyZXNwb25zZSIsInBvc3QiLCJnZXREcmFmdFVybCIsIndpdGhKc29uQm9keSIsImpzb24iLCJyZXN1bHQiLCJfcmVzcG9uc2UiLCJpbm5TZXJ2ZXJWYWx1ZSIsInZhbHVlIiwidW5kZWZpbmVkIiwiZXJyb3IiLCJlcnJvckNvZGUiLCJGb2N1c1NlcnZlckVycm9yQ29kZSIsIk5vSW5uRXJyb3IiLCJfaW5uU2VydmVyVmFsdWUkdmFsdWUiLCJfaW5uU2VydmVyVmFsdWUkZXJyb3IiLCJfaW5uU2VydmVyVmFsdWUkZXJyb3IyIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiYm9keSIsImdldCIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwibnMiLCJmdWZEcml2ZVVyaSIsIndpdGhRdWVyeVBhcmFtcyIsIndpdGhBYm9ydFNpZ25hbCIsImNyZWF0ZUVtcHR5RHJhZnQiLCJnZnYiLCJjcmVhdGVEcmFmdCIsImZ1ZkNvbnRlbnQiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiRXJyb3IiLCJjaGVja0FsaXZlIiwiZHJhZnRSZWxhdGVkVXJsIiwiZHJhZnRJZCIsImdldEZlYXR1cmVGbGFncyIsInNldFRlc3RDbGFzc2lmaWNhdGlvbiIsInRlc3RDbGFzc2lmaWNhdGlvbiIsIndpdGhSYXdCb2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXR1cyIsImdldEhyZWZUb0lubmVyRWRpdG9yIiwidXJsIiwiZ2V0SHJlZkRvd25sb2FkRnVmIiwiZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nIiwiZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZiIsImdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uIiwiRHJhZnRQcmVzZW50YXRpb25UeXBlIiwiaW5uZXJGdWYiLCJnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8iLCJjbGllbnRJbmZvIiwiZ2V0SHJlZlRvRG93bmxvYWRGb3Jtc0NsaWVudEluZm8iLCJmb3Jtc0NsaWVudEluZm8iLCJnZXRIcmVmRG93bmxvYWRJbm5lciIsImlubmVyIiwiZ2V0RXJyb3JMb2ciLCJnZXREcmFmdFByZXNlbnRhdGlvblVybCIsImVycm9yTG9nIiwiZ2V0RXJyb3JMb2dXaXRoQ2hlY2tTY2VuYXJpb3MiLCJjaGVja1NjZW5hcmlvcyIsImdldFRhc2tCeUlkIiwidGFza0lkIiwiX3Rhc2tzIiwidGFza3MiLCJnZXRBbGxUYXNrcyIsIk9iamVjdCIsInZhbHVlcyIsIngiLCJlbnF1ZXVlVGFzayIsInRhc2tJbmZvIiwiYWRkZWQiLCJjaGFuZ2VkIiwiaWQiLCJyZW1vdmVkIiwiY2FuY2VsVGFzayIsImdldEV4cGVydEVycm9yTG9nIiwiZXJyb3Jsb2dFeHBlcnQiLCJnZXRIcmVmVG9FcnJvckxvZ1BkZiIsImVycm9yTG9nTmFtZSIsInByb3BzTmFtZSIsInByb3BzRHJpdmVOYW1lIiwiY2xlYXJEcmFmdCIsImNvbnZlcnREcmFmdEZyb21QcmV2R2Z2IiwicHJldkdmdkRyYWZ0SWQiLCJzZW5kQ2hhbmdlU2V0IiwiZGF0YSIsImN1cnJlbnREYXRhVmVyc2lvbiIsImFjY2VwdENvZGUiLCJnZXRTdWNjZXNzUmVzdWx0IiwiX2RhdGFSZXN1bHQkZGF0YVZlcnNpIiwiZGF0YVJlc3VsdCIsInJlamVjdCIsInNlbmRDaGFuZ2VTZXRTeW5jIiwicG9zdFN5bmMiLCJnZXRTdWNjZXNzUmVzdWx0U3luYyIsIl9kYXRhUmVzdWx0JGRhdGFWZXJzaTIiLCJnZXRSZXF1aXNpdGVzIiwicmVxdWlzaXRlTGlzdCIsImdldElubmVyIiwiZ2V0UGFydGlhbElubmVyIiwicnVsZXMiLCJtYXhJbnN0YW5jZUNvdW50IiwiY29udmVydGVkUnVsZXMiLCJ0b1N0cmluZyIsImxlbmd0aCIsImdldFBhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJmb3JtYXQiLCJnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlIiwiZ2V0RGF0YVZlcnNpb24iLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJleHBsYW5hdG9yeU5vdGUiLCJnZXRBdHRhY2htZW50QnlJZCIsImF0dGFjaG1lbnRJZCIsIl9yZXN1bHQkdmFsdWUiLCJfcmVzdWx0IiwiZ2V0QWxsQXR0YWNobWVudHMiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJhdHRhY2htZW50IiwiY29udGVudFVyaSIsIm1ldGEiLCJzZXRQcmVzZW50YXRpb24iLCJwcmVzZW50YXRpb25UeXBlIiwiY29udGVudCIsInJlcXVlc3QiLCJwdXQiLCJpc0J1ZmZlciIsInBhdGNoUHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uQ29udGVudCIsInBhdGNoIiwiZ2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaSIsInByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyIsImVycm9yRGF0YSIsIkZ1ZlNpemVUb29MYXJnZUVycm9yIiwibWVzc2FnZSIsIkh0dHBFcnJvciIsInVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzIiwiZHJpdmVVcmlzIiwic2VydmVyRXJyb3IiLCJpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXMiLCJzb3VyY2VzVG90YWxDb3VudCIsImUiLCJVbmtub3duRXJyb3IiLCJhY2NlcHRUcmFuc2ZlclR5cGUiLCJ0cmFuc2ZlclR5cGUiLCJ0eXBlSWQiLCJhY2NlcHRNdWx0aXBsZVRyYW5zZmVyVHlwZSIsImZpbGVzIiwic2V0RnVmQnlEcml2ZVVyaSIsImNvbWJpbmVGdWZCeURyaXZlVXJpIiwiY29tYmluZU1ldGhvZCIsImV4Y2Vsc1RvUGFydGlhbEZ1ZnMiLCJwYXRoVG9UYWJsZSIsImltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aCIsImNvbWJpbmF0b3JUeXBlIiwibXVsdGlwbGVDb21iaW5lRnVmQnlEcml2ZVVyaSIsIm5vcm1hbGl6ZUJ5UnVsZXMiLCJzZXRBbGxDaGVja2JveGVzRm9yMTEzMTAzIiwiZW5hYmxlZCIsInVyaSIsInNldEVuYWJsZWQiLCJzZXRNdWx0aXBsZVdpdGhOb3JtYWxpemF0aW9uIiwiZmluYWxSdWxlcyIsInBhdGgiLCJjb252ZXJ0VG9MZWdhY3lQYXRoIiwic2VhcmNoSW5zdGFuY2VzQnlUZXh0IiwidGV4dCIsInBhdGhzUHJlZml4IiwicGF0aHNUb1NlYXJjaCIsIm1heEluc3RhbmNlQ291bnRQYXJhbXMiLCJwYXJhbXMiLCJzZWFyY2hTdHJpbmciLCJjdXN0b21Ob3JtYWxpemUiLCJub3JtYWxpemVySWQiLCJwYXRoUHJlZml4ZXMiLCJpbXBvcnRFbXBsb3llZXMiLCJkZWxldGVJbnN0YW5jZXMiLCJkZWxldGluZ1J1bGVzIiwicnVuTWFzc0FjdGlvbiIsImFjdGlvbklkIiwicGFyYW1ldGVycyIsInF1ZXJ5UGFyYW1zIiwicHJpbnQiLCJ0eXBlIiwicHJpbnRFeGNlbCIsInRhYmxlRXhjZWwiLCJjaGVja0J5UG9wZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IEZldGNoIH0gZnJvbSBcIi4uL0h0dHBDbGllbnQvRmV0Y2hJbXBsZW1lbnRhdGlvbi9GZXRjaFwiO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yIH0gZnJvbSBcIi4uL0h0dHBDbGllbnQvSHR0cENsaWVudFwiO1xuaW1wb3J0IHsgSUh0dHBDbGllbnQgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9JSHR0cENsaWVudFwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25Nb2RlLCBjcmVhdGVBdXRoZW50aWNhdGlvblByb3ZpZGVyIH0gZnJvbSBcIi4uL0h0dHBDbGllbnQvQXV0aGVudGljYXRpb25Nb2RlXCI7XG5pbXBvcnQgeyBJQ29tYmluZUJ5VHJhbnNmZXJzIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9zcmMvRW5naW5lL0NvcmUvTW9kYWxNYW5hZ2VyL01vZGFscy9VcGxvYWRTZWN0aW9uL1R5cGVzXCI7XG5pbXBvcnQgeyBjb252ZXJ0VG9MZWdhY3lQYXRoIH0gZnJvbSBcIi4uL01vZGVsUGF0aC9Nb2RlbFBhdGhcIjtcblxuaW1wb3J0IHtcbiAgICBDaGVja1NjZW5hcmlvVHlwZSxcbiAgICBJQ2FuZHlBcGlDbGllbnQsXG4gICAgSUNhbmR5QXBpRHJhZnRDbGllbnQsXG4gICAgSVNlbmRDaGFuZ2VTZXRSZXN1bHQsXG4gICAgUGF0aExvYWRTcGVjaWZpY2F0aW9uLFxufSBmcm9tIFwiLi9JQ2FuZHlBcGlDbGllbnRcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB7IFNlcnZlcklubmVyUmVzcG9uc2UsIFNlcnZlckpzb25SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlcklubmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7XG4gICAgRXhjZWxzVG9QYXJ0aWFsRnVmc1Jlc3BvbnNlLFxuICAgIEZpbGVQcm9wZXJ0aWVzLFxuICAgIEltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aFJlc3BvbnNlLFxuICAgIFNlcnZlckVycm9yUmVzcG9uc2UsXG4gICAgVXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZSxcbn0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0ZpbGVQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgeyBDcmVhdGVEcmFmdFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQ3JlYXRlRHJhZnQvQ3JlYXRlRHJhZnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9FeHBsYW5hdG9yeU5vdGUvQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2VcIjtcbmltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcbmltcG9ydCB7IFNlcnZlckNoYW5nZVNldCB9IGZyb20gXCIuL1R5cGVzL0NoYW5nZVNldC9TZXJ2ZXJDaGFuZ2VTZXRcIjtcbmltcG9ydCB7IFNlcnZlclRhc2ssIFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvIH0gZnJvbSBcIi4vVHlwZXMvVGFza3MvVGFza3NcIjtcbmltcG9ydCB7IEZvY3VzU2VydmVyRXJyb3JDb2RlLCBHZXRCeUlublJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNUeXBlc1wiO1xuaW1wb3J0IHsgQXR0YWNoSW5mbyB9IGZyb20gXCIuL1R5cGVzL0F0dGFjaG1lbnRzL0F0dGFjbWVudHNcIjtcbmltcG9ydCB7IERyYWZ0UHJlc2VudGF0aW9uVHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvRHJhZnRQcmVzZW50YXRpb25UeXBlXCI7XG5pbXBvcnQgeyBQcmVzZW50YXRpb25Db250ZW50IH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9QcmVzZW50YXRpb25Db250ZW50XCI7XG5pbXBvcnQgeyBDb252ZXJ0RHJhZnRSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbnZlcnREcmFmdFJlcXVlc3RcIjtcbmltcG9ydCB7IEdldEF0dGFjaG1lbnRzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9HZXRBdHRhY2htZW50c1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNTZXJ2ZXJSZXNwb25zZVwiO1xuaW1wb3J0IHsgR2V0VGFza3NTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL0dldFRhc2tzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJlcXVpc2l0ZXNSZXNwb25zZVwiO1xuaW1wb3J0IHsgaXNCdWZmZXIgfSBmcm9tIFwiLi9Jc0J1ZmZlclwiO1xuaW1wb3J0IHsgQ29tYmluYXRvclR5cGUsIENvbWJpbmVGdWZSZXN1bHQsIEZ1ZkNvbWJpbmVNZXRob2QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9GZWF0dXJlRmxhZ3MvRmVhdHVyZUZsYWdzUmVzcG9uc2VcIjtcbmltcG9ydCB7IERpZ2VzdEFwaUNsaWVudCB9IGZyb20gXCIuL0RpZ2VzdEFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnRcIjtcbmltcG9ydCB7IElEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi9EaWdlc3RBcGlDbGllbnQvSURpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgRnVmU2l6ZVRvb0xhcmdlRXJyb3IgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvRnVmU2l6ZVRvb0xhcmdlRXJyb3JcIjtcbmltcG9ydCB7IEltcG9ydEVtcGxveWVlc1JlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9TdGFmZi9JbXBvcnRFbXBsb3llZXNSZXF1ZXN0XCI7XG5pbXBvcnQgeyBNYXNzQWN0aW9uUGFyYW1ldGVycyB9IGZyb20gXCIuL1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFR5cGVcIjtcbmltcG9ydCB7IFByaW50UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBTZXJ2ZXJSYXdSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJhd1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBUZXN0Q2xhc3NpZmljYXRpb24gfSBmcm9tIFwiLi9UeXBlcy9UZXN0Q2xhc3NpZmljYXRpb25cIjtcbmltcG9ydCB7IENhbmR5UG9wZFByb3RvY29sIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvQ2FuZHlQb3BkUHJvdG9jb2xcIjtcbmltcG9ydCB7IEluc3RhbmNlc0RlbGV0aW5nUnVsZSB9IGZyb20gXCIuL1R5cGVzL0luc3RhbmNlc0RlbGV0aW5nL0luc3RhbmNlc0RlbGV0aW5nUnVsZVwiO1xuaW1wb3J0IHsgVmFsdWVGb3JJbnN0YW5jZXNTZXR0aW5nUnVsZSB9IGZyb20gXCIuL1R5cGVzL01hc3NBY3Rpb25zL1ZhbHVlRm9ySW5zdGFuY2VzU2V0dGluZ1J1bGVcIjtcblxuY29uc3Qgc3RyYW5nZU9wdGlvbnMgPSB7IHNyYzogXCJjaGFuZ2VTZXRcIiwgZGF0YVZlcnNpb246IFwiMFwiIH07XG5cbmV4cG9ydCBlbnVtIFNlcnZlckVycm9ycyB7XG4gICAgRnVmU2l6ZVRvb0xhcmdlID0gXCJGdWZTaXplVG9vTGFyZ2VcIixcbiAgICBCYWRSZXF1ZXN0ID0gXCJCYWRSZXF1ZXN0XCIsXG4gICAgVW5rbm93bkVycm9yID0gXCJVbmtub3duRXJyb3JcIixcbn1cblxuZnVuY3Rpb24gY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nKHNwZWM6IFBhdGhMb2FkU3BlY2lmaWNhdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKHNwZWMuc2tpcCA/IFwiLVwiIDogXCJcIikgK1xuICAgICAgICAoc3BlYy5wYXRoT3JQYXRoUHJlZml4ID09PSBcIipcIiA/IHNwZWMucGF0aE9yUGF0aFByZWZpeCA6IHNwZWMucGF0aE9yUGF0aFByZWZpeC50b0xlZ2FjeVBhdGgoKSlcbiAgICApO1xufVxuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSUh0dHBDbGllbnQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGZldGNoSW1wbDogRmV0Y2gsXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICAgICAgcmVzb3VyY2Vab25lOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uOiB1bmRlZmluZWQgfCBBdXRoZW50aWNhdGlvbk1vZGVcbiAgICApIHtcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoZmV0Y2hJbXBsLCBiYXNlVXJsLCBjcmVhdGVBdXRoZW50aWNhdGlvblByb3ZpZGVyKGF1dGhlbnRpY2F0aW9uKSwge1xuICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JEcmFmdChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpOiBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FuZHlBcGlEcmFmdENsaWVudCh0aGlzLmh0dHBDbGllbnQsIGRyYWZ0RnVsbElkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRGlnZXN0QXBpQ2xpZW50KGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCk6IElEaWdlc3RBcGlDbGllbnQge1xuICAgICAgICByZXR1cm4gbmV3IERpZ2VzdEFwaUNsaWVudCh0aGlzLmh0dHBDbGllbnQsIGRyYWZ0RnVsbElkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5mb0J5SW5ucyhkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGlubnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxHZXRCeUlublJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHBhdGhzID0gaW5ucy5tYXAoaW5uID0+IGBAZm9jdXMvJHtpbm59YCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKGRyYWZ0RnVsbElkLCBcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aHMpXG4gICAgICAgICAgICAuanNvbjxGb2N1c1NlcnZlclJlc3BvbnNlPigpO1xuICAgICAgICBjb25zdCByZXN1bHQ6IEdldEJ5SW5uUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBpbm4gb2YgaW5ucykge1xuICAgICAgICAgICAgY29uc3QgaW5uU2VydmVyVmFsdWUgPSByZXNwb25zZVtgQGZvY3VzLyR7aW5ufWBdPy52YWx1ZTtcbiAgICAgICAgICAgIGlmIChpbm5TZXJ2ZXJWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbaW5uXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiU2VydmVyIGRvZXMgbm90IHJldHVybiBpbm4gaW5mb1wiLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGU6IEZvY3VzU2VydmVyRXJyb3JDb2RlLk5vSW5uRXJyb3IsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lubl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpbm5TZXJ2ZXJWYWx1ZS52YWx1ZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZTogaW5uU2VydmVyVmFsdWUuZXJyb3JDb2RlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGlublNlcnZlclZhbHVlLmVycm9yID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbEdmdnMoYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudC5nZXQoYGJ1aWxkLXNlcnZlci9nZnZzYCkuanNvbjxzdHJpbmdbXT4oKTtcbiAgICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZURyYWZ0RnJvbURyaXZlKFxuICAgICAgICBuczogc3RyaW5nLFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnQtZnJvbS1kcml2ZWApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHtcbiAgICAgICAgICAgICAgICBuczogbnMsXG4gICAgICAgICAgICAgICAgZnVmRHJpdmVVcmk6IGZ1ZkRyaXZlVXJpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVFbXB0eURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBjcmVhdGVEcmFmdChuczogc3RyaW5nLCBnZnY6IHVuZGVmaW5lZCwgZnVmQ29udGVudDogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQgfCBzdHJpbmcsIGZ1ZkNvbnRlbnQ/OiBCdWZmZXIpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgaWYgKGdmdiA9PSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihmdWZDb250ZW50KVxuICAgICAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdmdiAhPSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYgfSlcbiAgICAgICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihCdWZmZXIuZnJvbShbXSkpXG4gICAgICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2Z2ID09IHVuZGVmaW5lZCAmJiBmdWZDb250ZW50ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBkcmFmdDogbm8gZ2Z2IGFuZCBubyBmdWYgc3BlY2lmaWVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAud2l0aEJvZHlGcm9tQnVmZmVyKGZ1ZkNvbnRlbnQpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjaGVja0FsaXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KGBfc3RhdHVzL3BpbmdgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0VXJsKGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCwgZHJhZnRSZWxhdGVkVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHYxL25zLyR7ZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke2RyYWZ0RnVsbElkLmRyYWZ0SWR9LyR7ZHJhZnRSZWxhdGVkVXJsfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZlYXR1cmVGbGFncygpOiBQcm9taXNlPEZlYXR1cmVGbGFnc1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KFwidjEvZmVhdHVyZXMvZmxhZ3NcIikuanNvbjxGZWF0dXJlRmxhZ3NSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0VGVzdENsYXNzaWZpY2F0aW9uKHRlc3RDbGFzc2lmaWNhdGlvbjogVGVzdENsYXNzaWZpY2F0aW9uKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChcIi90ZXN0b25seS9tb2NrLWNsYXNzaWZpY2F0aW9uXCIpXG4gICAgICAgICAgICAud2l0aFJhd0JvZHkoSlNPTi5zdHJpbmdpZnkodGVzdENsYXNzaWZpY2F0aW9uKSk7XG4gICAgICAgIGlmICghKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgcmVzcG9uc2UuIENvZGUgaXMgJHtyZXNwb25zZS5zdGF0dXN9LmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbmR5QXBpRHJhZnRDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBJSHR0cENsaWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihodHRwQ2xpZW50OiBJSHR0cENsaWVudCwgZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKSB7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IGh0dHBDbGllbnQ7XG4gICAgICAgIHRoaXMuZHJhZnRGdWxsSWQgPSBkcmFmdEZ1bGxJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvSW5uZXJFZGl0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwoYGlubmVyLWVkaXRvci9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtZnVmXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJzaW9uXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXJGdWYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmNsaWVudEluZm8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuZm9ybXNDbGllbnRJbmZvKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkSW5uZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvckxvZykpLmpzb248U2VydmVyRXJyb3JMb2c+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEVycm9yTG9nV2l0aENoZWNrU2NlbmFyaW9zKGNoZWNrU2NlbmFyaW9zOiBDaGVja1NjZW5hcmlvVHlwZVtdKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXJyb3Jsb2dcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHsgY2hlY2tTY2VuYXJpb3M6IGNoZWNrU2NlbmFyaW9zIH0pXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VGFza0J5SWQodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPFNlcnZlclRhc2sgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgdGFza3MgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQHRhc2svKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0VGFza3NTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHRhc2tzW2BAdGFzay8ke3Rhc2tJZH1gXT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFRhc2tzKCk6IFByb21pc2U8U2VydmVyVGFza1tdPiB7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEB0YXNrLypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldFRhc2tzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRhc2tzKS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgICAgICAgICBbYEB0YXNrLyR7dGFza0lkfWBdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50YXNrSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0YXNrSWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbYEB0YXNrLyR7dGFza0lkfWBdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEV4cGVydEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvcmxvZ0V4cGVydCkpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRXJyb3JMb2dQZGYoZXJyb3JMb2dOYW1lOiBzdHJpbmcsIHByb3BzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcInByZXNlbnRhdGlvbnMvZXJyb3JMb2cvcHJpbnRcIiksIHtcbiAgICAgICAgICAgIGVycm9yTG9nTmFtZTogZXJyb3JMb2dOYW1lLFxuICAgICAgICAgICAgcHJvcHNEcml2ZU5hbWU6IHByb3BzTmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNsZWFyRHJhZnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjbGVhclwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbnZlcnREcmFmdEZyb21QcmV2R2Z2KHsgcHJldkdmdkRyYWZ0SWQsIGdmdiB9OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJ0XCIpKS53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgaWQ6IHByZXZHZnZEcmFmdElkLFxuICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCwgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPElTZW5kQ2hhbmdlU2V0UmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGRhdGFWZXJzaW9uOiBjdXJyZW50RGF0YVZlcnNpb24gfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZGF0YSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwOSk7XG5cbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFSZXN1bHQgPSBhd2FpdCByZXN1bHQuanNvbjx7IGRhdGFWZXJzaW9uPzogbnVtYmVyIH0+KCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGFWZXJzaW9uOiBkYXRhUmVzdWx0Py5kYXRhVmVyc2lvbiA/PyByZWplY3QoXCJJbnZhbGlkIGRhdGFWZXJzaW9uIGFmdGVyIGFwcGx5aW5nIGNoYW5nZSBzZXQuXCIpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyA9PSAyMDAgPyBhd2FpdCBnZXRTdWNjZXNzUmVzdWx0KCkgOiByZXN1bHQuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZW5kQ2hhbmdlU2V0U3luYyhkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQsIGN1cnJlbnREYXRhVmVyc2lvbjogbnVtYmVyKTogSVNlbmRDaGFuZ2VTZXRSZXN1bHQge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmh0dHBDbGllbnQucG9zdFN5bmModGhpcy5nZXREcmFmdFVybChcImlubmVyXCIpLCB7IGRhdGFWZXJzaW9uOiBjdXJyZW50RGF0YVZlcnNpb24gfSwgZGF0YSk7XG5cbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdFN5bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzdWx0ID0gcmVzdWx0Lmpzb248eyBkYXRhVmVyc2lvbj86IG51bWJlciB9PigpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhVmVyc2lvbjogZGF0YVJlc3VsdD8uZGF0YVZlcnNpb24gPz8gcmVqZWN0KFwiSW52YWxpZCBkYXRhVmVyc2lvbiBhZnRlciBhcHBseWluZyBjaGFuZ2Ugc2V0LlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzID09IDIwMCA/IGdldFN1Y2Nlc3NSZXN1bHRTeW5jKCkgOiByZXN1bHQuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRSZXF1aXNpdGVzKHJlcXVpc2l0ZUxpc3Q6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWlzaXRlTGlzdClcbiAgICAgICAgICAgIC5qc29uPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5uZXIocGF0aHM6IHVuZGVmaW5lZCB8IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248U2VydmVySW5uZXJSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyKHJ1bGVzOiBQYXRoTG9hZFNwZWNpZmljYXRpb25bXSwgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlcik6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGNvbnZlcnRlZFJ1bGVzLmxlbmd0aCA+IDAgPyBjb252ZXJ0ZWRSdWxlcyA6IFtcIipcIl0pXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJJbm5lclJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXJ0aWFsSW5uZXJBc0pzb25UcmVlKFxuICAgICAgICBydWxlczogUGF0aExvYWRTcGVjaWZpY2F0aW9uW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPFNlcnZlckpzb25SZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZm9ybWF0OiBcIkpzb25UcmVlXCIgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoY29udmVydGVkUnVsZXMubGVuZ3RoID4gMCA/IGNvbnZlcnRlZFJ1bGVzIDogW1wiKlwiXSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckpzb25SZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmF3UGFydGlhbElubmVyQXNKc29uVHJlZShcbiAgICAgICAgcnVsZXM6IHJlYWRvbmx5IFBhdGhMb2FkU3BlY2lmaWNhdGlvbltdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxTZXJ2ZXJSYXdSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXIyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShjb252ZXJ0ZWRSdWxlcy5sZW5ndGggPiAwID8gY29udmVydGVkUnVsZXMgOiBbXCIqXCJdKVxuICAgICAgICAgICAgLmpzb248U2VydmVyUmF3UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGFWZXJzaW9uKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9nZXQtZGF0YS12ZXJzaW9uXCIpKS5qc29uPG51bWJlcj4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXhwbGFuYXRvcnlOb3RlKCk6IFByb21pc2U8Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5leHBsYW5hdG9yeU5vdGUpKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEF0dGFjaG1lbnRCeUlkKGF0dGFjaG1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2hJbmZvPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnRJZH1gXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiByZXN1bHRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudElkfWBdPy52YWx1ZSA/PyByZWplY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsQXR0YWNobWVudHMoKTogUHJvbWlzZTxBdHRhY2hJbmZvW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEBhdHRhY2htZW50LypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlc3VsdCkubWFwKHggPT4geC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBhdHRhY2htZW50SWRzLm1hcChpZCA9PiBgQGF0dGFjaG1lbnQvJHtpZH1gKSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzOiByZWFkb25seSBBdHRhY2hJbmZvW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICAgICAgICAgIGNoYW5nZWRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudC5pZH1gXSA9IHtcbiAgICAgICAgICAgICAgICBjb250ZW50VXJpOiBhdHRhY2htZW50LmNvbnRlbnRVcmksXG4gICAgICAgICAgICAgICAgaWQ6IGF0dGFjaG1lbnQuaWQsXG4gICAgICAgICAgICAgICAgbWV0YTogYXR0YWNobWVudC5tZXRhLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDogY2hhbmdlZCxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRQcmVzZW50YXRpb24ocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlLCBjb250ZW50OiBzdHJpbmcgfCB1bmtub3duKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5odHRwQ2xpZW50LnB1dCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC53aXRoUmF3Qm9keShjb250ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0J1ZmZlcihjb250ZW50KSkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aFJhd0JvZHkoY29udGVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC53aXRoSnNvbkJvZHkoY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcmVxdWVzdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcGF0Y2hQcmVzZW50YXRpb24oXG4gICAgICAgIHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSxcbiAgICAgICAgcHJlc2VudGF0aW9uQ29udGVudDogUHJlc2VudGF0aW9uQ29udGVudFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSkud2l0aEpzb25Cb2R5KHByZXNlbnRhdGlvbkNvbnRlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTxGaWxlUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldChgdjEvZmlsZXMvZ2V0LXByb3BlcnRpZXNgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGRyaXZlVXJpOiBkcml2ZVVyaSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPEZpbGVQcm9wZXJ0aWVzPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMoZHJpdmVVcmk6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9wcmVwYXJlLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYsIGRyaXZlVXJpOiBkcml2ZVVyaSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3JDb2RlID09PSBcIkZ1ZlNpemVUb29MYXJnZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1ZlNpemVUb29MYXJnZUVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RmlsZVByb3BlcnRpZXM+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvZmlsZXMvdXBsb2FkLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhKc29uQm9keShkcml2ZVVyaXMpXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSwgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLCBzb3VyY2VzVG90YWxDb3VudDogMCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4oKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlcnZlckVycm9yOiBTZXJ2ZXJFcnJvcnMuVW5rbm93bkVycm9yLFxuICAgICAgICAgICAgICAgIGludmFsaWRTb3VyY2VEcml2ZUNvbnRlbnROYW1lczogXCJcIixcbiAgICAgICAgICAgICAgICBzb3VyY2VzVG90YWxDb3VudDogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWNjZXB0VHJhbnNmZXJUeXBlKFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICB0cmFuc2ZlclR5cGU6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8U2VydmVyRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L3RyYW5zZmVyL2NvbWJpbmVgKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBmdWZEcml2ZVVyaTogZnVmRHJpdmVVcmksIHR5cGVJZDogdHJhbnNmZXJUeXBlIH0pXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhY2NlcHRNdWx0aXBsZVRyYW5zZmVyVHlwZShcbiAgICAgICAgZmlsZXM6IElDb21iaW5lQnlUcmFuc2ZlcnNbXSxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8U2VydmVyRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L3RyYW5zZmVyL2NvbWJpbmUtbXVsdGlwbGVgKVxuICAgICAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZmlsZXMpXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRGdWZCeURyaXZlVXJpKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnB1dCh0aGlzLmdldERyYWZ0VXJsKFwic2V0LWZ1ZlwiKSkud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb21iaW5lRnVmQnlEcml2ZVVyaShcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZCxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZnVmRHJpdmVVcmk6IGRyaXZlVXJpLCBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4Y2Vsc1RvUGFydGlhbEZ1ZnMoXG4gICAgICAgIGdmdjogc3RyaW5nLFxuICAgICAgICBwYXRoVG9UYWJsZTogc3RyaW5nLFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTxFeGNlbHNUb1BhcnRpYWxGdWZzUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoXCJ2MS9maWxlcy9leGNlbHMtdG8tcGFydGlhbC1mdWZzXCIpXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2LCBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUgfSlcbiAgICAgICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpcyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxFeGNlbHNUb1BhcnRpYWxGdWZzUmVzcG9uc2U+KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aChcbiAgICAgICAgcGF0aFRvVGFibGU6IHN0cmluZyxcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZ1tdLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBzdHJpbmcsXG4gICAgICAgIGNvbWJpbmF0b3JUeXBlOiBDb21iaW5hdG9yVHlwZVxuICAgICk6IFByb21pc2U8SW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2ltcG9ydC1mcm9tLXBhcnRpYWwtZnVmcy1ieS1wYXRoXCIpKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgICAgICAgICBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0b3JUeXBlOiBjb21iaW5hdG9yVHlwZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZHJpdmVVcmkpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248SW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoUmVzcG9uc2U+KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG11bHRpcGxlQ29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2RcbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9jb21iaW5lLXdpdGgtZnVmc1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpcyk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxDb21iaW5lRnVmUmVzdWx0PigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBub3JtYWxpemVCeVJ1bGVzKHJ1bGVzOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcInRlc3Qtbm9ybWFsaXplXCIpKS53aXRoSnNvbkJvZHkocnVsZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24ocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdFJlbGF0ZWRVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9LyR7ZHJhZnRSZWxhdGVkVXJsfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy8ke3ByZXNlbnRhdGlvblR5cGUudG9TdHJpbmcoKX1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0QWxsQ2hlY2tib3hlc0ZvcjExMzEwMyhlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9jaGVjay1hbGxcIik7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh1cmkpLndpdGhRdWVyeVBhcmFtcyh7IHNldEVuYWJsZWQ6IGVuYWJsZWQgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldE11bHRpcGxlV2l0aE5vcm1hbGl6YXRpb24ocnVsZXM6IFZhbHVlRm9ySW5zdGFuY2VzU2V0dGluZ1J1bGVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB1cmkgPSB0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvc2V0LW11bHRpcGxlLXdpdGgtbm9ybWFsaXphdGlvblwiKTtcbiAgICAgICAgY29uc3QgZmluYWxSdWxlcyA9IHJ1bGVzLm1hcCh4ID0+ICh7IC4uLngsIHBhdGg6IGNvbnZlcnRUb0xlZ2FjeVBhdGgoeC5wYXRoKSB9KSk7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh1cmkpLndpdGhKc29uQm9keShmaW5hbFJ1bGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoSW5zdGFuY2VzQnlUZXh0KFxuICAgICAgICB0ZXh0OiBzdHJpbmcsXG4gICAgICAgIHBhdGhzUHJlZml4OiBzdHJpbmcsXG4gICAgICAgIHBhdGhzVG9TZWFyY2g6IHN0cmluZ1tdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCBtYXhJbnN0YW5jZUNvdW50UGFyYW1zID0gbWF4SW5zdGFuY2VDb3VudCAhPSB1bmRlZmluZWQgPyB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQgfSA6IHt9O1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IHNlYXJjaFN0cmluZzogdGV4dCwgcGF0aHNQcmVmaXg6IHBhdGhzUHJlZml4LCAuLi5tYXhJbnN0YW5jZUNvdW50UGFyYW1zIH07XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9zZWFyY2gtYnktc3RyaW5nXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhwYXJhbXMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzVG9TZWFyY2gpXG4gICAgICAgICAgICAuanNvbjxzdHJpbmdbXT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3VzdG9tTm9ybWFsaXplKFxuICAgICAgICBub3JtYWxpemVySWQ6IHN0cmluZyxcbiAgICAgICAgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IG5vcm1hbGl6ZXJJZDogbm9ybWFsaXplcklkIH07XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL2N1c3RvbS1ub3JtYWxpemVcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHBhcmFtcylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aFByZWZpeGVzKVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEVtcGxveWVlcyhyZXF1ZXN0OiBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh0aGlzLmdldERyYWZ0VXJsKFwic3RhZmZcIikpLndpdGhKc29uQm9keShyZXF1ZXN0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZGVsZXRlSW5zdGFuY2VzKGRlbGV0aW5nUnVsZXM6IEluc3RhbmNlc0RlbGV0aW5nUnVsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9kZWxldGUtaW5zdGFuY2VzXCIpKS53aXRoSnNvbkJvZHkoZGVsZXRpbmdSdWxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJ1bk1hc3NBY3Rpb24oYWN0aW9uSWQ6IHN0cmluZywgcGFyYW1ldGVycz86IE1hc3NBY3Rpb25QYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyBhY3Rpb25JZDogYWN0aW9uSWQgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvbWFzcy1hY3Rpb25cIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnQodHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPFByaW50UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy9pbm5lci9wcmludC8ke3R5cGV9YCkpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGJvZHkpXG4gICAgICAgICAgICAuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmludEV4Y2VsKHBhdGhUb1RhYmxlOiBzdHJpbmcpOiBQcm9taXNlPFByaW50UmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy90YWJsZS9wcmludGApKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUgfSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZUV4Y2VsID0gcmVzcG9uc2UuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZUV4Y2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjaGVja0J5UG9wZCgpOiBQcm9taXNlPENhbmR5UG9wZFByb3RvY29sPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChcbiAgICAgICAgICAgIGB2MS9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH0vY2hlY2tCeVBvcGRgXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb248Q2FuZHlQb3BkUHJvdG9jb2w+KCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdz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
534
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVHlwaW5nVXRpbHMiLCJyZXF1aXJlIiwiX0h0dHBDbGllbnQiLCJfQXV0aGVudGljYXRpb25Nb2RlIiwiX01vZGVsUGF0aCIsIl9Gb2N1c1R5cGVzIiwiX0RyYWZ0UHJlc2VudGF0aW9uVHlwZSIsIl9Jc0J1ZmZlciIsIl9GdWZTaXplVG9vTGFyZ2VFcnJvciIsInN0cmFuZ2VPcHRpb25zIiwic3JjIiwiZGF0YVZlcnNpb24iLCJTZXJ2ZXJFcnJvcnMiLCJleHBvcnRzIiwiY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nIiwic3BlYyIsInNraXAiLCJwYXRoT3JQYXRoUHJlZml4IiwidG9MZWdhY3lQYXRoIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiY3JlYXRlQXV0aGVudGljYXRpb25Qcm92aWRlciIsImZvckRyYWZ0IiwiZHJhZnRGdWxsSWQiLCJDYW5keUFwaURyYWZ0Q2xpZW50IiwiZ2V0SW5mb0J5SW5ucyIsImlubnMiLCJwYXRocyIsIm1hcCIsImlubiIsInJlc3BvbnNlIiwicG9zdCIsImdldERyYWZ0VXJsIiwid2l0aEpzb25Cb2R5IiwianNvbiIsInJlc3VsdCIsIl9yZXNwb25zZSIsImlublNlcnZlclZhbHVlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJlcnJvciIsImVycm9yQ29kZSIsIkZvY3VzU2VydmVyRXJyb3JDb2RlIiwiTm9Jbm5FcnJvciIsIl9pbm5TZXJ2ZXJWYWx1ZSR2YWx1ZSIsIl9pbm5TZXJ2ZXJWYWx1ZSRlcnJvciIsIl9pbm5TZXJ2ZXJWYWx1ZSRlcnJvcjIiLCJnZXRBbGxHZnZzIiwiYWJvcnRTaWduYWwiLCJib2R5IiwiZ2V0IiwiY3JlYXRlRHJhZnRGcm9tRHJpdmUiLCJucyIsImZ1ZkRyaXZlVXJpIiwid2l0aFF1ZXJ5UGFyYW1zIiwid2l0aEFib3J0U2lnbmFsIiwiY3JlYXRlRW1wdHlEcmFmdCIsImdmdiIsImNyZWF0ZURyYWZ0IiwiZnVmQ29udGVudCIsIndpdGhDb250ZW50VHlwZSIsIndpdGhCb2R5RnJvbUJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJFcnJvciIsImNoZWNrQWxpdmUiLCJkcmFmdFJlbGF0ZWRVcmwiLCJkcmFmdElkIiwiZ2V0RmVhdHVyZUZsYWdzIiwic2V0VGVzdENsYXNzaWZpY2F0aW9uIiwidGVzdENsYXNzaWZpY2F0aW9uIiwid2l0aFJhd0JvZHkiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhdHVzIiwiZ2V0SHJlZlRvSW5uZXJFZGl0b3IiLCJ1cmwiLCJnZXRIcmVmRG93bmxvYWRGdWYiLCJnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2ciLCJnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmIiwiZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24iLCJEcmFmdFByZXNlbnRhdGlvblR5cGUiLCJpbm5lckZ1ZiIsImdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbyIsImNsaWVudEluZm8iLCJnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbyIsImZvcm1zQ2xpZW50SW5mbyIsImdldEhyZWZEb3dubG9hZElubmVyIiwiaW5uZXIiLCJnZXRFcnJvckxvZyIsImdldERyYWZ0UHJlc2VudGF0aW9uVXJsIiwiZXJyb3JMb2ciLCJnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyIsImNoZWNrU2NlbmFyaW9zIiwiZ2V0VGFza0J5SWQiLCJ0YXNrSWQiLCJfdGFza3MiLCJ0YXNrcyIsImdldEZ1ZldpdGhBdHRhY2htZW50cyIsImdldFBhcnRpYWxGdWYiLCJydWxlcyIsImdldEFsbFRhc2tzIiwiT2JqZWN0IiwidmFsdWVzIiwieCIsImVucXVldWVUYXNrIiwidGFza0luZm8iLCJhZGRlZCIsImNoYW5nZWQiLCJpZCIsInJlbW92ZWQiLCJjYW5jZWxUYXNrIiwiZ2V0RXhwZXJ0RXJyb3JMb2ciLCJlcnJvcmxvZ0V4cGVydCIsImdldEhyZWZUb0Vycm9yTG9nUGRmIiwiZXJyb3JMb2dOYW1lIiwicHJvcHNOYW1lIiwicHJvcHNEcml2ZU5hbWUiLCJjbGVhckRyYWZ0IiwiY29udmVydERyYWZ0RnJvbVByZXZHZnYiLCJwcmV2R2Z2RHJhZnRJZCIsInNlbmRDaGFuZ2VTZXQiLCJkYXRhIiwiY3VycmVudERhdGFWZXJzaW9uIiwiYWNjZXB0Q29kZSIsImdldFN1Y2Nlc3NSZXN1bHQiLCJfZGF0YVJlc3VsdCRkYXRhVmVyc2kiLCJkYXRhUmVzdWx0IiwicmVqZWN0Iiwic2VuZENoYW5nZVdpdGhOb3JtYWxpemF0aW9uU2V0Iiwibm9ybWFsaXplcklkIiwic2VuZENoYW5nZVNldFN5bmMiLCJwb3N0U3luYyIsImdldFN1Y2Nlc3NSZXN1bHRTeW5jIiwiX2RhdGFSZXN1bHQkZGF0YVZlcnNpMiIsImdldFJlcXVpc2l0ZXMiLCJyZXF1aXNpdGVMaXN0IiwiZ2V0SW5uZXIiLCJnZXRQYXJ0aWFsSW5uZXIiLCJtYXhJbnN0YW5jZUNvdW50IiwiY29udmVydGVkUnVsZXMiLCJ0b1N0cmluZyIsImxlbmd0aCIsImdldFBhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJmb3JtYXQiLCJnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlIiwiZ2V0RGF0YVZlcnNpb24iLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJleHBsYW5hdG9yeU5vdGUiLCJnZXRBdHRhY2htZW50QnlJZCIsImF0dGFjaG1lbnRJZCIsIl9yZXN1bHQkdmFsdWUiLCJfcmVzdWx0IiwiZ2V0QWxsQXR0YWNobWVudHMiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJhdHRhY2htZW50IiwiY29udGVudFVyaSIsIm1ldGEiLCJzZXRQcmVzZW50YXRpb24iLCJwcmVzZW50YXRpb25UeXBlIiwiY29udGVudCIsInJlcXVlc3QiLCJwdXQiLCJpc0J1ZmZlciIsInBhdGNoUHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uQ29udGVudCIsInBhdGNoIiwiZ2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaSIsInByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyIsImVycm9yRGF0YSIsIkZ1ZlNpemVUb29MYXJnZUVycm9yIiwibWVzc2FnZSIsIkh0dHBFcnJvciIsInVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzIiwiZHJpdmVVcmlzIiwic2VydmVyRXJyb3IiLCJpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXMiLCJzb3VyY2VzVG90YWxDb3VudCIsImUiLCJVbmtub3duRXJyb3IiLCJhY2NlcHRUcmFuc2ZlclR5cGUiLCJ0cmFuc2ZlclR5cGUiLCJ0eXBlSWQiLCJhY2NlcHRNdWx0aXBsZVRyYW5zZmVyVHlwZSIsImZpbGVzIiwic2V0RnVmQnlEcml2ZVVyaSIsImNvbWJpbmVGdWZCeURyaXZlVXJpIiwiY29tYmluZU1ldGhvZCIsImV4Y2Vsc1RvUGFydGlhbEZ1ZnMiLCJwYXRoVG9UYWJsZSIsImltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aCIsImNvbWJpbmF0b3JUeXBlIiwibXVsdGlwbGVDb21iaW5lRnVmQnlEcml2ZVVyaSIsImFyZ3MiLCJhcmd1bWVudHMiLCJzZXREcmFmdFNldHRpbmdzIiwic2V0dGluZ3MiLCJnZXREcmFmdFNldHRpbmdzIiwibm9ybWFsaXplQnlSdWxlcyIsInNldE11bHRpcGxlV2l0aE5vcm1hbGl6YXRpb24iLCJ1cmkiLCJmaW5hbFJ1bGVzIiwicGF0aCIsImNvbnZlcnRUb0xlZ2FjeVBhdGgiLCJzZWFyY2hJbnN0YW5jZXNCeVRleHQiLCJ0ZXh0IiwicGF0aHNQcmVmaXgiLCJwYXRoc1RvU2VhcmNoIiwibWF4SW5zdGFuY2VDb3VudFBhcmFtcyIsInBhcmFtcyIsInNlYXJjaFN0cmluZyIsImN1c3RvbU5vcm1hbGl6ZSIsInBhdGhQcmVmaXhlcyIsImltcG9ydEVtcGxveWVlcyIsImRlbGV0ZUluc3RhbmNlcyIsImRlbGV0aW5nUnVsZXMiLCJydW5NYXNzQWN0aW9uIiwiYWN0aW9uSWQiLCJwYXJhbWV0ZXJzIiwicXVlcnlQYXJhbXMiLCJwcmludCIsInR5cGUiLCJwcmludEV4Y2VsIiwidGFibGVFeGNlbCIsImNoZWNrQnlQb3BkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0NhbmR5QXBpQ2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi4vSHR0cENsaWVudC9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3IgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9IdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBJSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0lIdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGUsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9BdXRoZW50aWNhdGlvbk1vZGVcIjtcbmltcG9ydCB7IElDb21iaW5lQnlUcmFuc2ZlcnMgfSBmcm9tIFwiLi4vLi4vRW5naW5lL3NyYy9FbmdpbmUvQ29yZS9Nb2RhbE1hbmFnZXIvTW9kYWxzL1VwbG9hZFNlY3Rpb24vVHlwZXNcIjtcbmltcG9ydCB7IGNvbnZlcnRUb0xlZ2FjeVBhdGggfSBmcm9tIFwiLi4vTW9kZWxQYXRoL01vZGVsUGF0aFwiO1xuXG5pbXBvcnQge1xuICAgIENoZWNrU2NlbmFyaW9UeXBlLFxuICAgIEZ1ZldpdGhBdHRhY2htZW50c1Jlc3BvbnNlLFxuICAgIElDYW5keUFwaUNsaWVudCxcbiAgICBJQ2FuZHlBcGlEcmFmdENsaWVudCxcbiAgICBJU2VuZENoYW5nZVNldFJlc3VsdCxcbiAgICBJU2VuZENoYW5nZVNldFN1Y2Nlc3NSZXN1bHQsXG4gICAgUGF0aExvYWRTcGVjaWZpY2F0aW9uLFxuICAgIERyYWZ0U2V0dGluZ3MsXG4gICAgQmFzZUdldEZ1ZlJlc3BvbnNlLFxufSBmcm9tIFwiLi9JQ2FuZHlBcGlDbGllbnRcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB7IFNlcnZlcklubmVyUmVzcG9uc2UsIFNlcnZlckpzb25SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlcklubmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7XG4gICAgRXhjZWxzVG9QYXJ0aWFsRnVmc1Jlc3BvbnNlLFxuICAgIEZpbGVQcm9wZXJ0aWVzLFxuICAgIEltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aFJlc3BvbnNlLFxuICAgIFNlcnZlckVycm9yUmVzcG9uc2UsXG4gICAgVXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZSxcbn0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0ZpbGVQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgeyBDcmVhdGVEcmFmdFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQ3JlYXRlRHJhZnQvQ3JlYXRlRHJhZnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9FeHBsYW5hdG9yeU5vdGUvQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2VcIjtcbmltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcbmltcG9ydCB7IFNlcnZlckNoYW5nZVNldCB9IGZyb20gXCIuL1R5cGVzL0NoYW5nZVNldC9TZXJ2ZXJDaGFuZ2VTZXRcIjtcbmltcG9ydCB7IFNlcnZlclRhc2ssIFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvIH0gZnJvbSBcIi4vVHlwZXMvVGFza3MvVGFza3NcIjtcbmltcG9ydCB7IEZvY3VzU2VydmVyRXJyb3JDb2RlLCBHZXRCeUlublJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNUeXBlc1wiO1xuaW1wb3J0IHsgQXR0YWNoSW5mbyB9IGZyb20gXCIuL1R5cGVzL0F0dGFjaG1lbnRzL0F0dGFjbWVudHNcIjtcbmltcG9ydCB7IERyYWZ0UHJlc2VudGF0aW9uVHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvRHJhZnRQcmVzZW50YXRpb25UeXBlXCI7XG5pbXBvcnQgeyBQcmVzZW50YXRpb25Db250ZW50IH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9QcmVzZW50YXRpb25Db250ZW50XCI7XG5pbXBvcnQgeyBDb252ZXJ0RHJhZnRSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbnZlcnREcmFmdFJlcXVlc3RcIjtcbmltcG9ydCB7IEdldEF0dGFjaG1lbnRzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9HZXRBdHRhY2htZW50c1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNTZXJ2ZXJSZXNwb25zZVwiO1xuaW1wb3J0IHsgR2V0VGFza3NTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL0dldFRhc2tzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJlcXVpc2l0ZXNSZXNwb25zZVwiO1xuaW1wb3J0IHsgaXNCdWZmZXIgfSBmcm9tIFwiLi9Jc0J1ZmZlclwiO1xuaW1wb3J0IHsgQ29tYmluYXRvclR5cGUsIENvbWJpbmVGdWZSZXN1bHQsIEZ1ZkNvbWJpbmVNZXRob2QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9GZWF0dXJlRmxhZ3MvRmVhdHVyZUZsYWdzUmVzcG9uc2VcIjtcbmltcG9ydCB7IEZ1ZlNpemVUb29MYXJnZUVycm9yIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0Z1ZlNpemVUb29MYXJnZUVycm9yXCI7XG5pbXBvcnQgeyBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvU3RhZmYvSW1wb3J0RW1wbG95ZWVzUmVxdWVzdFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi9UeXBlcy9NYXNzQWN0aW9ucy9NYXNzQWN0aW9uUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgUHJpbnRUeXBlIH0gZnJvbSBcIi4vVHlwZXMvUHJpbnQvUHJpbnRUeXBlXCI7XG5pbXBvcnQgeyBQcmludFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvUHJpbnQvUHJpbnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgU2VydmVyUmF3UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSYXdSZXNwb25zZVwiO1xuaW1wb3J0IHsgVGVzdENsYXNzaWZpY2F0aW9uIH0gZnJvbSBcIi4vVHlwZXMvVGVzdENsYXNzaWZpY2F0aW9uXCI7XG5pbXBvcnQgeyBDYW5keVBvcGRQcm90b2NvbCB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL0NhbmR5UG9wZFByb3RvY29sXCI7XG5pbXBvcnQgeyBJbnN0YW5jZXNEZWxldGluZ1J1bGUgfSBmcm9tIFwiLi9UeXBlcy9JbnN0YW5jZXNEZWxldGluZy9JbnN0YW5jZXNEZWxldGluZ1J1bGVcIjtcbmltcG9ydCB7IFZhbHVlRm9ySW5zdGFuY2VzU2V0dGluZ1J1bGUgfSBmcm9tIFwiLi9UeXBlcy9NYXNzQWN0aW9ucy9WYWx1ZUZvckluc3RhbmNlc1NldHRpbmdSdWxlXCI7XG5cbmNvbnN0IHN0cmFuZ2VPcHRpb25zID0geyBzcmM6IFwiY2hhbmdlU2V0XCIsIGRhdGFWZXJzaW9uOiBcIjBcIiB9O1xuXG5leHBvcnQgZW51bSBTZXJ2ZXJFcnJvcnMge1xuICAgIEZ1ZlNpemVUb29MYXJnZSA9IFwiRnVmU2l6ZVRvb0xhcmdlXCIsXG4gICAgQmFkUmVxdWVzdCA9IFwiQmFkUmVxdWVzdFwiLFxuICAgIFVua25vd25FcnJvciA9IFwiVW5rbm93bkVycm9yXCIsXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRQYXRoTG9hZFNwZWNpZmljYXRpb25Ub1N0cmluZyhzcGVjOiBQYXRoTG9hZFNwZWNpZmljYXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICAgIChzcGVjLnNraXAgPyBcIi1cIiA6IFwiXCIpICtcbiAgICAgICAgKHNwZWMucGF0aE9yUGF0aFByZWZpeCA9PT0gXCIqXCIgPyBzcGVjLnBhdGhPclBhdGhQcmVmaXggOiBzcGVjLnBhdGhPclBhdGhQcmVmaXgudG9MZWdhY3lQYXRoKCkpXG4gICAgKTtcbn1cblxuZXhwb3J0IGNsYXNzIENhbmR5QXBpQ2xpZW50IGltcGxlbWVudHMgSUNhbmR5QXBpQ2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBmZXRjaEltcGw6IEZldGNoLFxuICAgICAgICBiYXNlVXJsOiBzdHJpbmcsXG4gICAgICAgIHJlc291cmNlWm9uZTogdW5kZWZpbmVkIHwgc3RyaW5nLFxuICAgICAgICBhdXRoZW50aWNhdGlvbjogdW5kZWZpbmVkIHwgQXV0aGVudGljYXRpb25Nb2RlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IG5ldyBIdHRwQ2xpZW50KGZldGNoSW1wbCwgYmFzZVVybCwgY3JlYXRlQXV0aGVudGljYXRpb25Qcm92aWRlcihhdXRoZW50aWNhdGlvbiksIHtcbiAgICAgICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRHJhZnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgICAgICByZXR1cm4gbmV3IENhbmR5QXBpRHJhZnRDbGllbnQodGhpcy5odHRwQ2xpZW50LCBkcmFmdEZ1bGxJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEluZm9CeUlubnMoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkLCBpbm5zOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8R2V0QnlJbm5SZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBwYXRocyA9IGlubnMubWFwKGlubiA9PiBgQGZvY3VzLyR7aW5ufWApO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChkcmFmdEZ1bGxJZCwgXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248Rm9jdXNTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBHZXRCeUlublJlc3BvbnNlID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaW5uIG9mIGlubnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlublNlcnZlclZhbHVlID0gcmVzcG9uc2VbYEBmb2N1cy8ke2lubn1gXT8udmFsdWU7XG4gICAgICAgICAgICBpZiAoaW5uU2VydmVyVmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lubl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIlNlcnZlciBkb2VzIG5vdCByZXR1cm4gaW5uIGluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlOiBGb2N1c1NlcnZlckVycm9yQ29kZS5Ob0lubkVycm9yLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpbm5dID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaW5uU2VydmVyVmFsdWUudmFsdWUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGU6IGlublNlcnZlclZhbHVlLmVycm9yQ29kZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBpbm5TZXJ2ZXJWYWx1ZS5lcnJvciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxHZnZzKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KGBidWlsZC1zZXJ2ZXIvZ2Z2c2ApLmpzb248c3RyaW5nW10+KCk7XG4gICAgICAgIHJldHVybiBib2R5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdEZyb21Ecml2ZShcbiAgICAgICAgbnM6IHN0cmluZyxcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0LWZyb20tZHJpdmVgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7XG4gICAgICAgICAgICAgICAgbnM6IG5zLFxuICAgICAgICAgICAgICAgIGZ1ZkRyaXZlVXJpOiBmdWZEcml2ZVVyaSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRW1wdHlEcmFmdChuczogc3RyaW5nLCBnZnY6IHN0cmluZywgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQsIGZ1ZkNvbnRlbnQ6IEJ1ZmZlcik6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT47XG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogdW5kZWZpbmVkIHwgc3RyaW5nLCBmdWZDb250ZW50PzogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIGlmIChnZnYgPT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoZnVmQ29udGVudClcbiAgICAgICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZnYgIT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoQnVmZmVyLmZyb20oW10pKVxuICAgICAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdmdiA9PSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgZHJhZnQ6IG5vIGdmdiBhbmQgbm8gZnVmIHNwZWNpZmllZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihmdWZDb250ZW50KVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2hlY2tBbGl2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChgX3N0YXR1cy9waW5nYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGRyYWZ0UmVsYXRlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHtkcmFmdEZ1bGxJZC5kcmFmdElkfS8ke2RyYWZ0UmVsYXRlZFVybH1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGZWF0dXJlRmxhZ3MoKTogUHJvbWlzZTxGZWF0dXJlRmxhZ3NSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChcInYxL2ZlYXR1cmVzL2ZsYWdzXCIpLmpzb248RmVhdHVyZUZsYWdzUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldFRlc3RDbGFzc2lmaWNhdGlvbih0ZXN0Q2xhc3NpZmljYXRpb246IFRlc3RDbGFzc2lmaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QoXCIvdGVzdG9ubHkvbW9jay1jbGFzc2lmaWNhdGlvblwiKVxuICAgICAgICAgICAgLndpdGhSYXdCb2R5KEpTT04uc3RyaW5naWZ5KHRlc3RDbGFzc2lmaWNhdGlvbikpO1xuICAgICAgICBpZiAoIShyZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQmFkIHJlc3BvbnNlLiBDb2RlIGlzICR7cmVzcG9uc2Uuc3RhdHVzfS5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5keUFwaURyYWZ0Q2xpZW50IGltcGxlbWVudHMgSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSUh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaHR0cENsaWVudDogSUh0dHBDbGllbnQsIGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCkge1xuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBodHRwQ2xpZW50O1xuICAgICAgICB0aGlzLmRyYWZ0RnVsbElkID0gZHJhZnRGdWxsSWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0lubmVyRWRpdG9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKGBpbm5lci1lZGl0b3IvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZEb3dubG9hZEZ1ZigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWZ1ZlwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0NvbnZlcnRhdGlvbkxvZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0VXJsKFwiY29udmVyc2lvblwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkSW5uZXJGdWYoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyRnVmKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5jbGllbnRJbmZvKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRGb3Jtc0NsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmZvcm1zQ2xpZW50SW5mbyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZEb3dubG9hZElubmVyKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuZXJyb3JMb2cpKS5qc29uPFNlcnZlckVycm9yTG9nPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyhjaGVja1NjZW5hcmlvczogQ2hlY2tTY2VuYXJpb1R5cGVbXSk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImVycm9ybG9nXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7IGNoZWNrU2NlbmFyaW9zOiBjaGVja1NjZW5hcmlvcyB9KVxuICAgICAgICAgICAgLmpzb248U2VydmVyRXJyb3JMb2c+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFRhc2tCeUlkKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTxTZXJ2ZXJUYXNrIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEB0YXNrLypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldFRhc2tzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiB0YXNrc1tgQHRhc2svJHt0YXNrSWR9YF0/LnZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGdWZXaXRoQXR0YWNobWVudHMoKTogUHJvbWlzZTxGdWZXaXRoQXR0YWNobWVudHNSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWZ1Zi13aXRoLWF0dGFjaG1lbnRzXCIpKVxuICAgICAgICAgICAgLmpzb248RnVmV2l0aEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UGFydGlhbEZ1ZihydWxlczogc3RyaW5nW10pOiBQcm9taXNlPEJhc2VHZXRGdWZSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWZ1ZlwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocnVsZXMpXG4gICAgICAgICAgICAuanNvbjxCYXNlR2V0RnVmUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsVGFza3MoKTogUHJvbWlzZTxTZXJ2ZXJUYXNrW10+IHtcbiAgICAgICAgY29uc3QgdGFza3MgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQHRhc2svKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0VGFza3NTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGFza3MpLm1hcCh4ID0+IHgudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBlbnF1ZXVlVGFzayh0YXNrSWQ6IHN0cmluZywgdGFza0luZm86IFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7XG4gICAgICAgICAgICAgICAgICAgIFtgQHRhc2svJHt0YXNrSWR9YF06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRhc2tJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHRhc2tJZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNhbmNlbFRhc2sodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHN0cmFuZ2VPcHRpb25zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7XG4gICAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICAgIGNoYW5nZWQ6IHt9LFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IFtgQHRhc2svJHt0YXNrSWR9YF0sXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXhwZXJ0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmVycm9ybG9nRXhwZXJ0KSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckVycm9yTG9nPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9FcnJvckxvZ1BkZihlcnJvckxvZ05hbWU6IHN0cmluZywgcHJvcHNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0VXJsKFwicHJlc2VudGF0aW9ucy9lcnJvckxvZy9wcmludFwiKSwge1xuICAgICAgICAgICAgZXJyb3JMb2dOYW1lOiBlcnJvckxvZ05hbWUsXG4gICAgICAgICAgICBwcm9wc0RyaXZlTmFtZTogcHJvcHNOYW1lLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2xlYXJEcmFmdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcImNsZWFyXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY29udmVydERyYWZ0RnJvbVByZXZHZnYoeyBwcmV2R2Z2RHJhZnRJZCwgZ2Z2IH06IENvbnZlcnREcmFmdFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcImNvbnZlcnRcIikpLndpdGhRdWVyeVBhcmFtcyh7XG4gICAgICAgICAgICBpZDogcHJldkdmdkRyYWZ0SWQsXG4gICAgICAgICAgICBnZnY6IGdmdixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlbmRDaGFuZ2VTZXQoZGF0YTogU2VydmVyQ2hhbmdlU2V0LCBjdXJyZW50RGF0YVZlcnNpb246IG51bWJlcik6IFByb21pc2U8SVNlbmRDaGFuZ2VTZXRSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZGF0YVZlcnNpb246IGN1cnJlbnREYXRhVmVyc2lvbiB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShkYXRhKVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDA5KTtcblxuICAgICAgICBjb25zdCBnZXRTdWNjZXNzUmVzdWx0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVJlc3VsdCA9IGF3YWl0IHJlc3VsdC5qc29uPHsgZGF0YVZlcnNpb24/OiBudW1iZXIgfT4oKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YVZlcnNpb246IGRhdGFSZXN1bHQ/LmRhdGFWZXJzaW9uID8/IHJlamVjdChcIkludmFsaWQgZGF0YVZlcnNpb24gYWZ0ZXIgYXBwbHlpbmcgY2hhbmdlIHNldC5cIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzID09IDIwMCA/IGF3YWl0IGdldFN1Y2Nlc3NSZXN1bHQoKSA6IHJlc3VsdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlbmRDaGFuZ2VXaXRoTm9ybWFsaXphdGlvblNldChcbiAgICAgICAgZGF0YTogU2VydmVyQ2hhbmdlU2V0LFxuICAgICAgICBjdXJyZW50RGF0YVZlcnNpb246IG51bWJlcixcbiAgICAgICAgbm9ybWFsaXplcklkPzogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxJU2VuZENoYW5nZVNldFJlc3VsdD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9wYXRjaC13aXRoLW5vcm1hbGl6YXRpb25cIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZGF0YVZlcnNpb246IGN1cnJlbnREYXRhVmVyc2lvbiwgbm9ybWFsaXplcklkOiBub3JtYWxpemVySWQgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZGF0YSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwOSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgcmVzdWx0Lmpzb248SVNlbmRDaGFuZ2VTZXRTdWNjZXNzUmVzdWx0PigpIDogcmVzdWx0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VuZENoYW5nZVNldFN5bmMoXG4gICAgICAgIGRhdGE6IFNlcnZlckNoYW5nZVNldCxcbiAgICAgICAgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIsXG4gICAgICAgIG5vcm1hbGl6ZXJJZD86IHN0cmluZ1xuICAgICk6IElTZW5kQ2hhbmdlU2V0UmVzdWx0IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5odHRwQ2xpZW50LnBvc3RTeW5jKHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lclwiKSwgeyBkYXRhVmVyc2lvbjogY3VycmVudERhdGFWZXJzaW9uIH0sIGRhdGEpO1xuXG4gICAgICAgIGNvbnN0IGdldFN1Y2Nlc3NSZXN1bHRTeW5jID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVJlc3VsdCA9IHJlc3VsdC5qc29uPHsgZGF0YVZlcnNpb24/OiBudW1iZXIgfT4oKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YVZlcnNpb246IGRhdGFSZXN1bHQ/LmRhdGFWZXJzaW9uID8/IHJlamVjdChcIkludmFsaWQgZGF0YVZlcnNpb24gYWZ0ZXIgYXBwbHlpbmcgY2hhbmdlIHNldC5cIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyA9PSAyMDAgPyBnZXRTdWNjZXNzUmVzdWx0U3luYygpIDogcmVzdWx0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UmVxdWlzaXRlcyhyZXF1aXNpdGVMaXN0OiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8U2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJlcXVpc2l0ZUxpc3QpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldElubmVyKHBhdGhzOiB1bmRlZmluZWQgfCByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRocylcbiAgICAgICAgICAgIC5qc29uPFNlcnZlcklubmVyUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcnRpYWxJbm5lcihydWxlczogUGF0aExvYWRTcGVjaWZpY2F0aW9uW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlcklubmVyUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgY29udmVydGVkUnVsZXMgPSBydWxlcy5tYXAoY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShjb252ZXJ0ZWRSdWxlcy5sZW5ndGggPiAwID8gY29udmVydGVkUnVsZXMgOiBbXCIqXCJdKVxuICAgICAgICAgICAgLmpzb248U2VydmVySW5uZXJSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UGFydGlhbElubmVyQXNKc29uVHJlZShcbiAgICAgICAgcnVsZXM6IFBhdGhMb2FkU3BlY2lmaWNhdGlvbltdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxTZXJ2ZXJKc29uUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgY29udmVydGVkUnVsZXMgPSBydWxlcy5tYXAoY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGZvcm1hdDogXCJKc29uVHJlZVwiIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGNvbnZlcnRlZFJ1bGVzLmxlbmd0aCA+IDAgPyBjb252ZXJ0ZWRSdWxlcyA6IFtcIipcIl0pXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJKc29uUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJhd1BhcnRpYWxJbm5lckFzSnNvblRyZWUoXG4gICAgICAgIHJ1bGVzOiByZWFkb25seSBQYXRoTG9hZFNwZWNpZmljYXRpb25bXSxcbiAgICAgICAgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlclxuICAgICk6IFByb21pc2U8U2VydmVyUmF3UmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgY29udmVydGVkUnVsZXMgPSBydWxlcy5tYXAoY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyMlwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMobWF4SW5zdGFuY2VDb3VudCAhPSB1bmRlZmluZWQgJiYgeyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50LnRvU3RyaW5nKCkgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoY29udmVydGVkUnVsZXMubGVuZ3RoID4gMCA/IGNvbnZlcnRlZFJ1bGVzIDogW1wiKlwiXSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlclJhd1Jlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREYXRhVmVyc2lvbigpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvZ2V0LWRhdGEtdmVyc2lvblwiKSkuanNvbjxudW1iZXI+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEV4cGxhbmF0b3J5Tm90ZSgpOiBQcm9taXNlPENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5nZXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuZXhwbGFuYXRvcnlOb3RlKSlcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBdHRhY2htZW50QnlJZChhdHRhY2htZW50SWQ6IHN0cmluZyk6IFByb21pc2U8QXR0YWNoSW5mbz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQGF0dGFjaG1lbnQvJHthdHRhY2htZW50SWR9YF0pXG4gICAgICAgICAgICAuanNvbjxHZXRBdHRhY2htZW50c1Jlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gcmVzdWx0W2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnRJZH1gXT8udmFsdWUgPz8gcmVqZWN0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbEF0dGFjaG1lbnRzKCk6IFByb21pc2U8QXR0YWNoSW5mb1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAYXR0YWNobWVudC8qYF0pXG4gICAgICAgICAgICAuanNvbjxHZXRBdHRhY2htZW50c1Jlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZXN1bHQpLm1hcCh4ID0+IHgudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZW1vdmVBdHRhY2htZW50cyhhdHRhY2htZW50SWRzOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge30sXG4gICAgICAgICAgICAgICAgcmVtb3ZlZDogYXR0YWNobWVudElkcy5tYXAoaWQgPT4gYEBhdHRhY2htZW50LyR7aWR9YCksXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlT3JVcGRhdGVBdHRhY2htZW50cyhhdHRhY2htZW50czogcmVhZG9ubHkgQXR0YWNoSW5mb1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICBjaGFuZ2VkW2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnQuaWR9YF0gPSB7XG4gICAgICAgICAgICAgICAgY29udGVudFVyaTogYXR0YWNobWVudC5jb250ZW50VXJpLFxuICAgICAgICAgICAgICAgIGlkOiBhdHRhY2htZW50LmlkLFxuICAgICAgICAgICAgICAgIG1ldGE6IGF0dGFjaG1lbnQubWV0YSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHN0cmFuZ2VPcHRpb25zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7XG4gICAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICAgIGNoYW5nZWQ6IGNoYW5nZWQsXG4gICAgICAgICAgICAgICAgcmVtb3ZlZDogW10sXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0UHJlc2VudGF0aW9uKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSwgY29udGVudDogc3RyaW5nIHwgdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuaHR0cENsaWVudC5wdXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSk7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aFJhd0JvZHkoY29udGVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNCdWZmZXIoY29udGVudCkpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhSYXdCb2R5KGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aEpzb25Cb2R5KGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHBhdGNoUHJlc2VudGF0aW9uKFxuICAgICAgICBwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUsXG4gICAgICAgIHByZXNlbnRhdGlvbkNvbnRlbnQ6IFByZXNlbnRhdGlvbkNvbnRlbnRcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpLndpdGhKc29uQm9keShwcmVzZW50YXRpb25Db250ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmlsZVByb3BlcnRpZXMoZHJpdmVVcmk6IHN0cmluZyk6IFByb21pc2U8RmlsZVByb3BlcnRpZXMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5nZXQoYHYxL2ZpbGVzL2dldC1wcm9wZXJ0aWVzYClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBkcml2ZVVyaTogZHJpdmVVcmkgfSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwMCk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxGaWxlUHJvcGVydGllcz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcHJlcGFyZUFuZEdldEZpbGVQcm9wZXJ0aWVzKGRyaXZlVXJpOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxGaWxlUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldChgdjEvZmlsZXMvcHJlcGFyZS1hbmQtZ2V0LXByb3BlcnRpZXNgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2LCBkcml2ZVVyaTogZHJpdmVVcmkgfSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQxMyk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MTMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yRGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248eyBlcnJvckNvZGU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH0+KCk7XG4gICAgICAgICAgICBpZiAoZXJyb3JEYXRhLmVycm9yQ29kZSA9PT0gXCJGdWZTaXplVG9vTGFyZ2VcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBGdWZTaXplVG9vTGFyZ2VFcnJvcihlcnJvckRhdGEubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKGVycm9yRGF0YS5tZXNzYWdlLCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPEZpbGVQcm9wZXJ0aWVzPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB1cGxvYWRBbmRHZXRGaWxlUHJvcGVydGllcyhcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXSxcbiAgICAgICAgZ2Z2OiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2U+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL2ZpbGVzL3VwbG9hZC1hbmQtZ2V0LXByb3BlcnRpZXNgKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZHJpdmVVcmlzKVxuICAgICAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKVxuICAgICAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQxMyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogU2VydmVyRXJyb3JzOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzZXJ2ZXJFcnJvcjogZGF0YS5lcnJvckNvZGUsIGludmFsaWRTb3VyY2VEcml2ZUNvbnRlbnROYW1lczogXCJcIiwgc291cmNlc1RvdGFsQ291bnQ6IDAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2U+KCk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJFcnJvcjogU2VydmVyRXJyb3JzLlVua25vd25FcnJvcixcbiAgICAgICAgICAgICAgICBpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXM6IFwiXCIsXG4gICAgICAgICAgICAgICAgc291cmNlc1RvdGFsQ291bnQ6IDAsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGFjY2VwdFRyYW5zZmVyVHlwZShcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgdHJhbnNmZXJUeXBlOiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFNlcnZlckVycm9yUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfS90cmFuc2Zlci9jb21iaW5lYClcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZnVmRHJpdmVVcmk6IGZ1ZkRyaXZlVXJpLCB0eXBlSWQ6IHRyYW5zZmVyVHlwZSB9KVxuICAgICAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKVxuICAgICAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQxMyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogU2VydmVyRXJyb3JzOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzZXJ2ZXJFcnJvcjogZGF0YS5lcnJvckNvZGUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBTZXJ2ZXJFcnJvcnMuVW5rbm93bkVycm9yIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWNjZXB0TXVsdGlwbGVUcmFuc2ZlclR5cGUoXG4gICAgICAgIGZpbGVzOiBJQ29tYmluZUJ5VHJhbnNmZXJzW10sXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFNlcnZlckVycm9yUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfS90cmFuc2Zlci9jb21iaW5lLW11bHRpcGxlYClcbiAgICAgICAgICAgICAgICAud2l0aEpzb25Cb2R5KGZpbGVzKVxuICAgICAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKVxuICAgICAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQxMyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogU2VydmVyRXJyb3JzOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzZXJ2ZXJFcnJvcjogZGF0YS5lcnJvckNvZGUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBTZXJ2ZXJFcnJvcnMuVW5rbm93bkVycm9yIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0RnVmQnlEcml2ZVVyaShkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wdXQodGhpcy5nZXREcmFmdFVybChcInNldC1mdWZcIikpLndpdGhRdWVyeVBhcmFtcyh7IGRyaXZlVXJpOiBkcml2ZVVyaSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2QsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9jb21iaW5lLXdpdGgtZnVmXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGZ1ZkRyaXZlVXJpOiBkcml2ZVVyaSwgY29tYmluZU1ldGhvZDogY29tYmluZU1ldGhvZCB9KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbCk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxDb21iaW5lRnVmUmVzdWx0PigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGNlbHNUb1BhcnRpYWxGdWZzKFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgcGF0aFRvVGFibGU6IHN0cmluZyxcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXVxuICAgICk6IFByb21pc2U8RXhjZWxzVG9QYXJ0aWFsRnVmc1Jlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KFwidjEvZmlsZXMvZXhjZWxzLXRvLXBhcnRpYWwtZnVmc1wiKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiwgcGF0aFRvVGFibGU6IHBhdGhUb1RhYmxlIH0pXG4gICAgICAgICAgICAgICAgLndpdGhKc29uQm9keShkcml2ZVVyaXMpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RXhjZWxzVG9QYXJ0aWFsRnVmc1Jlc3BvbnNlPigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbXBvcnRGcm9tUGFydGlhbEZ1ZnNCeVBhdGgoXG4gICAgICAgIHBhdGhUb1RhYmxlOiBzdHJpbmcsXG4gICAgICAgIGRyaXZlVXJpOiBzdHJpbmdbXSxcbiAgICAgICAgY29tYmluZU1ldGhvZDogc3RyaW5nLFxuICAgICAgICBjb21iaW5hdG9yVHlwZTogQ29tYmluYXRvclR5cGVcbiAgICApOiBQcm9taXNlPEltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aFJlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9pbXBvcnQtZnJvbS1wYXJ0aWFsLWZ1ZnMtYnktcGF0aFwiKSlcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aFRvVGFibGU6IHBhdGhUb1RhYmxlLFxuICAgICAgICAgICAgICAgICAgICBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBjb21iaW5hdG9yVHlwZTogY29tYmluYXRvclR5cGUsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPEltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aFJlc3BvbnNlPigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBGdWZDb21iaW5lTWV0aG9kLFxuICAgICAgICBhcmdzPzogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9jb21iaW5lLXdpdGgtZnVmc1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHsgZHJpdmVVcmlzOiBkcml2ZVVyaXMsIGFyZ3VtZW50czogYXJncyB9KTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldERyYWZ0U2V0dGluZ3Moc2V0dGluZ3M6IERyYWZ0U2V0dGluZ3MpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHRoaXMuZ2V0RHJhZnRVcmwoXCJleHRlcm5hbC9zZXQtc2V0dGluZ3NcIikpLndpdGhKc29uQm9keShzZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldERyYWZ0U2V0dGluZ3MoKTogUHJvbWlzZTxEcmFmdFNldHRpbmdzPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldCh0aGlzLmdldERyYWZ0VXJsKFwiZXh0ZXJuYWwvZ2V0LXNldHRpbmdzXCIpKTtcblxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbjxEcmFmdFNldHRpbmdzPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBub3JtYWxpemVCeVJ1bGVzKHJ1bGVzOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcInRlc3Qtbm9ybWFsaXplXCIpKS53aXRoSnNvbkJvZHkocnVsZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24ocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdFJlbGF0ZWRVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9LyR7ZHJhZnRSZWxhdGVkVXJsfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy8ke3ByZXNlbnRhdGlvblR5cGUudG9TdHJpbmcoKX1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0TXVsdGlwbGVXaXRoTm9ybWFsaXphdGlvbihydWxlczogVmFsdWVGb3JJbnN0YW5jZXNTZXR0aW5nUnVsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9zZXQtbXVsdGlwbGUtd2l0aC1ub3JtYWxpemF0aW9uXCIpO1xuICAgICAgICBjb25zdCBmaW5hbFJ1bGVzID0gcnVsZXMubWFwKHggPT4gKHsgLi4ueCwgcGF0aDogY29udmVydFRvTGVnYWN5UGF0aCh4LnBhdGgpIH0pKTtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHVyaSkud2l0aEpzb25Cb2R5KGZpbmFsUnVsZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2hJbnN0YW5jZXNCeVRleHQoXG4gICAgICAgIHRleHQ6IHN0cmluZyxcbiAgICAgICAgcGF0aHNQcmVmaXg6IHN0cmluZyxcbiAgICAgICAgcGF0aHNUb1NlYXJjaDogc3RyaW5nW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IG1heEluc3RhbmNlQ291bnRQYXJhbXMgPSBtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCA/IHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudCB9IDoge307XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgc2VhcmNoU3RyaW5nOiB0ZXh0LCBwYXRoc1ByZWZpeDogcGF0aHNQcmVmaXgsIC4uLm1heEluc3RhbmNlQ291bnRQYXJhbXMgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL3NlYXJjaC1ieS1zdHJpbmdcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHBhcmFtcylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aHNUb1NlYXJjaClcbiAgICAgICAgICAgIC5qc29uPHN0cmluZ1tdPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjdXN0b21Ob3JtYWxpemUoXG4gICAgICAgIG5vcm1hbGl6ZXJJZDogc3RyaW5nLFxuICAgICAgICBwYXRoUHJlZml4ZXM6IHN0cmluZ1tdLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgbm9ybWFsaXplcklkOiBub3JtYWxpemVySWQgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvY3VzdG9tLW5vcm1hbGl6ZVwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMocGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRoUHJlZml4ZXMpXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0RW1wbG95ZWVzKHJlcXVlc3Q6IEltcG9ydEVtcGxveWVlc1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHRoaXMuZ2V0RHJhZnRVcmwoXCJzdGFmZlwiKSkud2l0aEpzb25Cb2R5KHJlcXVlc3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkZWxldGVJbnN0YW5jZXMoZGVsZXRpbmdSdWxlczogSW5zdGFuY2VzRGVsZXRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL2RlbGV0ZS1pbnN0YW5jZXNcIikpLndpdGhKc29uQm9keShkZWxldGluZ1J1bGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcnVuTWFzc0FjdGlvbihhY3Rpb25JZDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogTWFzc0FjdGlvblBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IGFjdGlvbklkOiBhY3Rpb25JZCB9O1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9tYXNzLWFjdGlvblwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludCh0eXBlOiBQcmludFR5cGUsIGJvZHk/OiBzdHJpbmdbXSk6IFByb21pc2U8UHJpbnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKGBwcmVzZW50YXRpb25zL2lubmVyL3ByaW50LyR7dHlwZX1gKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoYm9keSlcbiAgICAgICAgICAgIC5qc29uPFByaW50UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHByaW50RXhjZWwocGF0aFRvVGFibGU6IHN0cmluZyk6IFByb21pc2U8UHJpbnRSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKGBwcmVzZW50YXRpb25zL3RhYmxlL3ByaW50YCkpXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IHBhdGhUb1RhYmxlOiBwYXRoVG9UYWJsZSB9KTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlRXhjZWwgPSByZXNwb25zZS5qc29uPFByaW50UmVzcG9uc2U+KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlRXhjZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNoZWNrQnlQb3BkKCk6IFByb21pc2U8Q2FuZHlQb3BkUHJvdG9jb2w+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KFxuICAgICAgICAgICAgYHYxL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfS9jaGVja0J5UG9wZGBcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbjxDYW5keVBvcGRQcm90b2NvbD4oKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFlBQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLG1CQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUEyQkEsSUFBQUksV0FBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssc0JBQUEsR0FBQUwsT0FBQTtBQU9BLElBQUFNLFNBQUEsR0FBQU4sT0FBQTtBQUdBLElBQUFPLHFCQUFBLEdBQUFQLE9BQUE7QUFXQSxNQUFNUSxjQUFjLEdBQUc7RUFBRUMsR0FBRyxFQUFFLFdBQVc7RUFBRUMsV0FBVyxFQUFFO0FBQUksQ0FBQztBQUFDLElBRWxEQyxZQUFZLDBCQUFaQSxZQUFZO0VBQVpBLFlBQVk7RUFBWkEsWUFBWTtFQUFaQSxZQUFZO0VBQUEsT0FBWkEsWUFBWTtBQUFBO0FBQUFDLE9BQUEsQ0FBQUQsWUFBQSxHQUFBQSxZQUFBO0FBTXhCLFNBQVNFLG9DQUFvQ0EsQ0FBQ0MsSUFBMkIsRUFBVTtFQUMvRSxPQUNJLENBQUNBLElBQUksQ0FBQ0MsSUFB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
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.DigestApiClientWithCache = void 0;
7
7
  exports.withCache = withCache;
8
8
  var _TypingUtils = require("../../../TypingUtils");
9
- var _IterableUtils = require("../../../IterableUtils");
10
9
  function withCache(client) {
11
10
  return new DigestApiClientWithCache(client);
12
11
  }
@@ -17,29 +16,18 @@ class DigestApiClientWithCache {
17
16
  this.innerClient = innerClient;
18
17
  }
19
18
  async getDigest(request) {
20
- var _digestResponses$;
21
- const digestResponses = await this.getDigests([request]);
22
- return (_digestResponses$ = digestResponses === null || digestResponses === void 0 ? void 0 : digestResponses[0]) !== null && _digestResponses$ !== void 0 ? _digestResponses$ : (0, _TypingUtils.reject)();
23
- }
24
- async getDigests(requests) {
25
- const notInCacheRequests = requests.filter(x => !this.responseCache.has(this.getRequestKey(x)));
26
- if (notInCacheRequests.length > 0) {
27
- const notInCacheResponses = await this.innerClient.getDigests(notInCacheRequests);
28
- for (const [index, notInCacheResponse] of _IterableUtils.IterUtils.iterateEntries(notInCacheResponses)) {
29
- var _notInCacheRequests$i;
30
- const notInCacheRequest = (_notInCacheRequests$i = notInCacheRequests[index]) !== null && _notInCacheRequests$i !== void 0 ? _notInCacheRequests$i : (0, _TypingUtils.reject)();
31
- this.responseCache.set(this.getRequestKey(notInCacheRequest), notInCacheResponse);
32
- }
19
+ var _this$responseCache$g;
20
+ const requestKey = this.getRequestKey(request);
21
+ const requestsNotExistsInCache = !this.responseCache.has(requestKey);
22
+ if (requestsNotExistsInCache) {
23
+ const notInCacheResponse = await this.innerClient.getDigest(request);
24
+ this.responseCache.set(requestKey, notInCacheResponse);
33
25
  }
34
- return requests.map(request => {
35
- var _this$responseCache$g;
36
- const requestKey = this.getRequestKey(request);
37
- return (_this$responseCache$g = this.responseCache.get(requestKey)) !== null && _this$responseCache$g !== void 0 ? _this$responseCache$g : (0, _TypingUtils.reject)();
38
- });
26
+ return (_this$responseCache$g = this.responseCache.get(requestKey)) !== null && _this$responseCache$g !== void 0 ? _this$responseCache$g : (0, _TypingUtils.reject)();
39
27
  }
40
28
  getRequestKey(request) {
41
29
  return JSON.stringify(request);
42
30
  }
43
31
  }
44
32
  exports.DigestApiClientWithCache = DigestApiClientWithCache;
45
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVHlwaW5nVXRpbHMiLCJyZXF1aXJlIiwiX0l0ZXJhYmxlVXRpbHMiLCJ3aXRoQ2FjaGUiLCJjbGllbnQiLCJEaWdlc3RBcGlDbGllbnRXaXRoQ2FjaGUiLCJjb25zdHJ1Y3RvciIsImlubmVyQ2xpZW50IiwicmVzcG9uc2VDYWNoZSIsIk1hcCIsImdldERpZ2VzdCIsInJlcXVlc3QiLCJfZGlnZXN0UmVzcG9uc2VzJCIsImRpZ2VzdFJlc3BvbnNlcyIsImdldERpZ2VzdHMiLCJyZWplY3QiLCJyZXF1ZXN0cyIsIm5vdEluQ2FjaGVSZXF1ZXN0cyIsImZpbHRlciIsIngiLCJoYXMiLCJnZXRSZXF1ZXN0S2V5IiwibGVuZ3RoIiwibm90SW5DYWNoZVJlc3BvbnNlcyIsImluZGV4Iiwibm90SW5DYWNoZVJlc3BvbnNlIiwiSXRlclV0aWxzIiwiaXRlcmF0ZUVudHJpZXMiLCJfbm90SW5DYWNoZVJlcXVlc3RzJGkiLCJub3RJbkNhY2hlUmVxdWVzdCIsInNldCIsIm1hcCIsIl90aGlzJHJlc3BvbnNlQ2FjaGUkZyIsInJlcXVlc3RLZXkiLCJnZXQiLCJKU09OIiwic3RyaW5naWZ5IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvRGVjb3JhdG9ycy9EaWdlc3RBcGlDbGllbnRXaXRoQ2FjaGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlnZXN0UmVxdWVzdCB9IGZyb20gXCIuLi9UeXBlcy9EaWdlc3RSZXF1ZXN0XCI7XG5pbXBvcnQgeyBEaWdlc3RSZXNwb25zZSB9IGZyb20gXCIuLi9UeXBlcy9EaWdlc3RSZXNwb25zZVwiO1xuaW1wb3J0IHsgSURpZ2VzdEFwaUNsaWVudCB9IGZyb20gXCIuLi9JRGlnZXN0QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IEl0ZXJVdGlscyB9IGZyb20gXCIuLi8uLi8uLi9JdGVyYWJsZVV0aWxzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ2FjaGUoY2xpZW50OiBJRGlnZXN0QXBpQ2xpZW50KTogSURpZ2VzdEFwaUNsaWVudCB7XG4gICAgcmV0dXJuIG5ldyBEaWdlc3RBcGlDbGllbnRXaXRoQ2FjaGUoY2xpZW50KTtcbn1cblxuZXhwb3J0IGNsYXNzIERpZ2VzdEFwaUNsaWVudFdpdGhDYWNoZSBpbXBsZW1lbnRzIElEaWdlc3RBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5uZXJDbGllbnQ6IElEaWdlc3RBcGlDbGllbnQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNwb25zZUNhY2hlOiBNYXA8c3RyaW5nLCBEaWdlc3RSZXNwb25zZT4gPSBuZXcgTWFwPHN0cmluZywgRGlnZXN0UmVzcG9uc2U+KCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaW5uZXJDbGllbnQ6IElEaWdlc3RBcGlDbGllbnQpIHtcbiAgICAgICAgdGhpcy5pbm5lckNsaWVudCA9IGlubmVyQ2xpZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXREaWdlc3QocmVxdWVzdDogRGlnZXN0UmVxdWVzdCk6IFByb21pc2U8RGlnZXN0UmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgZGlnZXN0UmVzcG9uc2VzID0gYXdhaXQgdGhpcy5nZXREaWdlc3RzKFtyZXF1ZXN0XSk7XG4gICAgICAgIHJldHVybiBkaWdlc3RSZXNwb25zZXM/LlswXSA/PyByZWplY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RGlnZXN0cyhyZXF1ZXN0czogUmVhZG9ubHlBcnJheTxSZWFkb25seTxEaWdlc3RSZXF1ZXN0Pj4pOiBQcm9taXNlPERpZ2VzdFJlc3BvbnNlW10+IHtcbiAgICAgICAgY29uc3Qgbm90SW5DYWNoZVJlcXVlc3RzID0gcmVxdWVzdHMuZmlsdGVyKHggPT4gIXRoaXMucmVzcG9uc2VDYWNoZS5oYXModGhpcy5nZXRSZXF1ZXN0S2V5KHgpKSk7XG4gICAgICAgIGlmIChub3RJbkNhY2hlUmVxdWVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgbm90SW5DYWNoZVJlc3BvbnNlcyA9IGF3YWl0IHRoaXMuaW5uZXJDbGllbnQuZ2V0RGlnZXN0cyhub3RJbkNhY2hlUmVxdWVzdHMpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIG5vdEluQ2FjaGVSZXNwb25zZV0gb2YgSXRlclV0aWxzLml0ZXJhdGVFbnRyaWVzKG5vdEluQ2FjaGVSZXNwb25zZXMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm90SW5DYWNoZVJlcXVlc3QgPSBub3RJbkNhY2hlUmVxdWVzdHNbaW5kZXhdID8/IHJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VDYWNoZS5zZXQodGhpcy5nZXRSZXF1ZXN0S2V5KG5vdEluQ2FjaGVSZXF1ZXN0KSwgbm90SW5DYWNoZVJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVxdWVzdHMubWFwKHJlcXVlc3QgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEtleSA9IHRoaXMuZ2V0UmVxdWVzdEtleShyZXF1ZXN0KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlQ2FjaGUuZ2V0KHJlcXVlc3RLZXkpID8/IHJlamVjdCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJlcXVlc3RLZXkocmVxdWVzdDogRGlnZXN0UmVxdWVzdCkge1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVxdWVzdCk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBR0EsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsY0FBQSxHQUFBRCxPQUFBO0FBRU8sU0FBU0UsU0FBU0EsQ0FBQ0MsTUFBd0IsRUFBb0I7RUFDbEUsT0FBTyxJQUFJQyx3QkFBd0IsQ0FBQ0QsTUFBTSxDQUFDO0FBQy9DO0FBRU8sTUFBTUMsd0JBQXdCLENBQTZCO0VBSXZEQyxXQUFXQSxDQUFDQyxXQUE2QixFQUFFO0lBQUEsS0FIakNBLFdBQVc7SUFBQSxLQUNYQyxhQUFhLEdBQWdDLElBQUlDLEdBQUcsQ0FBeUIsQ0FBQztJQUczRixJQUFJLENBQUNGLFdBQVcsR0FBR0EsV0FBVztFQUNsQztFQUVBLE1BQWFHLFNBQVNBLENBQUNDLE9BQXNCLEVBQTJCO0lBQUEsSUFBQUMsaUJBQUE7SUFDcEUsTUFBTUMsZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDQyxVQUFVLENBQUMsQ0FBQ0gsT0FBTyxDQUFDLENBQUM7SUFDeEQsUUFBQUMsaUJBQUEsR0FBT0MsZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUcsQ0FBQyxDQUFDLGNBQUFELGlCQUFBLGNBQUFBLGlCQUFBLEdBQUksSUFBQUcsbUJBQU0sRUFBQyxDQUFDO0VBQzNDO0VBRUEsTUFBYUQsVUFBVUEsQ0FBQ0UsUUFBZ0QsRUFBNkI7SUFDakcsTUFBTUMsa0JBQWtCLEdBQUdELFFBQVEsQ0FBQ0UsTUFBTSxDQUFDQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUNYLGFBQWEsQ0FBQ1ksR0FBRyxDQUFDLElBQUksQ0FBQ0MsYUFBYSxDQUFDRixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9GLElBQUlGLGtCQUFrQixDQUFDSyxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQy9CLE1BQU1DLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxDQUFDaEIsV0FBVyxDQUFDTyxVQUFVLENBQUNHLGtCQUFrQixDQUFDO01BQ2pGLEtBQUssTUFBTSxDQUFDTyxLQUFLLEVBQUVDLGtCQUFrQixDQUFDLElBQUlDLHdCQUFTLENBQUNDLGNBQWMsQ0FBQ0osbUJBQW1CLENBQUMsRUFBRTtRQUFBLElBQUFLLHFCQUFBO1FBQ3JGLE1BQU1DLGlCQUFpQixJQUFBRCxxQkFBQSxHQUFHWCxrQkFBa0IsQ0FBQ08sS0FBSyxDQUFDLGNBQUFJLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksSUFBQWIsbUJBQU0sRUFBQyxDQUFDO1FBQy9ELElBQUksQ0FBQ1AsYUFBYSxDQUFDc0IsR0FBRyxDQUFDLElBQUksQ0FBQ1QsYUFBYSxDQUFDUSxpQkFBaUIsQ0FBQyxFQUFFSixrQkFBa0IsQ0FBQztNQUNyRjtJQUNKO0lBQ0EsT0FBT1QsUUFBUSxDQUFDZSxHQUFHLENBQUNwQixPQUFPLElBQUk7TUFBQSxJQUFBcUIscUJBQUE7TUFDM0IsTUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQ1osYUFBYSxDQUFDVixPQUFPLENBQUM7TUFDOUMsUUFBQXFCLHFCQUFBLEdBQU8sSUFBSSxDQUFDeEIsYUFBYSxDQUFDMEIsR0FBRyxDQUFDRCxVQUFVLENBQUMsY0FBQUQscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxJQUFBakIsbUJBQU0sRUFBQyxDQUFDO0lBQ3pELENBQUMsQ0FBQztFQUNOO0VBRVFNLGFBQWFBLENBQUNWLE9BQXNCLEVBQUU7SUFDMUMsT0FBT3dCLElBQUksQ0FBQ0MsU0FBUyxDQUFDekIsT0FBTyxDQUFDO0VBQ2xDO0FBQ0o7QUFBQzBCLE9BQUEsQ0FBQWhDLHdCQUFBLEdBQUFBLHdCQUFBIn0=
33
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVHlwaW5nVXRpbHMiLCJyZXF1aXJlIiwid2l0aENhY2hlIiwiY2xpZW50IiwiRGlnZXN0QXBpQ2xpZW50V2l0aENhY2hlIiwiY29uc3RydWN0b3IiLCJpbm5lckNsaWVudCIsInJlc3BvbnNlQ2FjaGUiLCJNYXAiLCJnZXREaWdlc3QiLCJyZXF1ZXN0IiwiX3RoaXMkcmVzcG9uc2VDYWNoZSRnIiwicmVxdWVzdEtleSIsImdldFJlcXVlc3RLZXkiLCJyZXF1ZXN0c05vdEV4aXN0c0luQ2FjaGUiLCJoYXMiLCJub3RJbkNhY2hlUmVzcG9uc2UiLCJzZXQiLCJnZXQiLCJyZWplY3QiLCJKU09OIiwic3RyaW5naWZ5IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvRGVjb3JhdG9ycy9EaWdlc3RBcGlDbGllbnRXaXRoQ2FjaGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlnZXN0UmVxdWVzdCB9IGZyb20gXCIuLi9UeXBlcy9EaWdlc3RSZXF1ZXN0XCI7XG5pbXBvcnQgeyBJRGlnZXN0QXBpQ2xpZW50IH0gZnJvbSBcIi4uL0lEaWdlc3RBcGlDbGllbnRcIjtcbmltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgUGlja2xpc3RSZXN1bHRWMiB9IGZyb20gXCIuLi8uLi8uLi9QaWNrbGlzdEFwaUNsaWVudC9UeXBlcy9QaWNrbGlzdFJlc3VsdFYyXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ2FjaGUoY2xpZW50OiBJRGlnZXN0QXBpQ2xpZW50KTogSURpZ2VzdEFwaUNsaWVudCB7XG4gICAgcmV0dXJuIG5ldyBEaWdlc3RBcGlDbGllbnRXaXRoQ2FjaGUoY2xpZW50KTtcbn1cblxuZXhwb3J0IGNsYXNzIERpZ2VzdEFwaUNsaWVudFdpdGhDYWNoZSBpbXBsZW1lbnRzIElEaWdlc3RBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5uZXJDbGllbnQ6IElEaWdlc3RBcGlDbGllbnQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNwb25zZUNhY2hlOiBNYXA8c3RyaW5nLCBQaWNrbGlzdFJlc3VsdFYyPiA9IG5ldyBNYXA8c3RyaW5nLCBQaWNrbGlzdFJlc3VsdFYyPigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGlubmVyQ2xpZW50OiBJRGlnZXN0QXBpQ2xpZW50KSB7XG4gICAgICAgIHRoaXMuaW5uZXJDbGllbnQgPSBpbm5lckNsaWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RGlnZXN0KHJlcXVlc3Q6IERpZ2VzdFJlcXVlc3QpOiBQcm9taXNlPFBpY2tsaXN0UmVzdWx0VjI+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdEtleSA9IHRoaXMuZ2V0UmVxdWVzdEtleShyZXF1ZXN0KTtcbiAgICAgICAgY29uc3QgcmVxdWVzdHNOb3RFeGlzdHNJbkNhY2hlID0gIXRoaXMucmVzcG9uc2VDYWNoZS5oYXMocmVxdWVzdEtleSk7XG4gICAgICAgIGlmIChyZXF1ZXN0c05vdEV4aXN0c0luQ2FjaGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdEluQ2FjaGVSZXNwb25zZSA9IGF3YWl0IHRoaXMuaW5uZXJDbGllbnQuZ2V0RGlnZXN0KHJlcXVlc3QpO1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zZUNhY2hlLnNldChyZXF1ZXN0S2V5LCBub3RJbkNhY2hlUmVzcG9uc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlQ2FjaGUuZ2V0KHJlcXVlc3RLZXkpID8/IHJlamVjdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UmVxdWVzdEtleShyZXF1ZXN0OiBEaWdlc3RSZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0KTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFQSxJQUFBQSxZQUFBLEdBQUFDLE9BQUE7QUFHTyxTQUFTQyxTQUFTQSxDQUFDQyxNQUF3QixFQUFvQjtFQUNsRSxPQUFPLElBQUlDLHdCQUF3QixDQUFDRCxNQUFNLENBQUM7QUFDL0M7QUFFTyxNQUFNQyx3QkFBd0IsQ0FBNkI7RUFJdkRDLFdBQVdBLENBQUNDLFdBQTZCLEVBQUU7SUFBQSxLQUhqQ0EsV0FBVztJQUFBLEtBQ1hDLGFBQWEsR0FBa0MsSUFBSUMsR0FBRyxDQUEyQixDQUFDO0lBRy9GLElBQUksQ0FBQ0YsV0FBVyxHQUFHQSxXQUFXO0VBQ2xDO0VBRUEsTUFBYUcsU0FBU0EsQ0FBQ0MsT0FBc0IsRUFBNkI7SUFBQSxJQUFBQyxxQkFBQTtJQUN0RSxNQUFNQyxVQUFVLEdBQUcsSUFBSSxDQUFDQyxhQUFhLENBQUNILE9BQU8sQ0FBQztJQUM5QyxNQUFNSSx3QkFBd0IsR0FBRyxDQUFDLElBQUksQ0FBQ1AsYUFBYSxDQUFDUSxHQUFHLENBQUNILFVBQVUsQ0FBQztJQUNwRSxJQUFJRSx3QkFBd0IsRUFBRTtNQUMxQixNQUFNRSxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQ1YsV0FBVyxDQUFDRyxTQUFTLENBQUNDLE9BQU8sQ0FBQztNQUNwRSxJQUFJLENBQUNILGFBQWEsQ0FBQ1UsR0FBRyxDQUFDTCxVQUFVLEVBQUVJLGtCQUFrQixDQUFDO0lBQzFEO0lBQ0EsUUFBQUwscUJBQUEsR0FBTyxJQUFJLENBQUNKLGFBQWEsQ0FBQ1csR0FBRyxDQUFDTixVQUFVLENBQUMsY0FBQUQscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxJQUFBUSxtQkFBTSxFQUFDLENBQUM7RUFDekQ7RUFFUU4sYUFBYUEsQ0FBQ0gsT0FBc0IsRUFBRTtJQUMxQyxPQUFPVSxJQUFJLENBQUNDLFNBQVMsQ0FBQ1gsT0FBTyxDQUFDO0VBQ2xDO0FBQ0o7QUFBQ1ksT0FBQSxDQUFBbEIsd0JBQUEsR0FBQUEsd0JBQUEifQ==
@@ -16,11 +16,9 @@ class DigestApiClientWithDebouncedBatching {
16
16
  this.getDigestDebounced = void 0;
17
17
  this.getDigestDebounced = (0, _AsyncUtils.debouncedMerge)(async requests => {
18
18
  try {
19
- const digestRequests = requests.map(x => x.arg);
20
- const digestResponses = await innerClient.getDigests(digestRequests);
21
- for (const [i, request] of _IterableUtils.IterUtils.iterateEntries(requests)) {
22
- var _digestResponses$i;
23
- request.resolve((_digestResponses$i = digestResponses[i]) !== null && _digestResponses$i !== void 0 ? _digestResponses$i : (0, _TypingUtils.reject)(`Request for gId:'${request.arg.gId} does not received'`));
19
+ for (const [_, request] of _IterableUtils.IterUtils.iterateEntries(requests)) {
20
+ const digestResponse = await innerClient.getDigest(request.arg);
21
+ request.resolve(digestResponse !== null && digestResponse !== void 0 ? digestResponse : (0, _TypingUtils.reject)(`Request for gId:'${request.arg.gId} does not received'`));
24
22
  }
25
23
  } catch (error) {
26
24
  for (const request of requests) {
@@ -32,9 +30,6 @@ class DigestApiClientWithDebouncedBatching {
32
30
  getDigest(request) {
33
31
  return this.getDigestDebounced(request);
34
32
  }
35
- getDigests(requests) {
36
- return Promise.all(requests.map(x => this.getDigest(x)));
37
- }
38
33
  }
39
34
  exports.DigestApiClientWithDebouncedBatching = DigestApiClientWithDebouncedBatching;
40
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQXN5bmNVdGlscyIsInJlcXVpcmUiLCJfSXRlcmFibGVVdGlscyIsIl9UeXBpbmdVdGlscyIsIndpdGhEZWJvdW5jZWRCYXRjaGluZyIsImNsaWVudCIsImRlYm91bmNlSW50ZXJ2YWwiLCJEaWdlc3RBcGlDbGllbnRXaXRoRGVib3VuY2VkQmF0Y2hpbmciLCJjb25zdHJ1Y3RvciIsImlubmVyQ2xpZW50IiwiZ2V0RGlnZXN0RGVib3VuY2VkIiwiZGVib3VuY2VkTWVyZ2UiLCJyZXF1ZXN0cyIsImRpZ2VzdFJlcXVlc3RzIiwibWFwIiwieCIsImFyZyIsImRpZ2VzdFJlc3BvbnNlcyIsImdldERpZ2VzdHMiLCJpIiwicmVxdWVzdCIsIkl0ZXJVdGlscyIsIml0ZXJhdGVFbnRyaWVzIiwiX2RpZ2VzdFJlc3BvbnNlcyRpIiwicmVzb2x2ZSIsInJlamVjdCIsImdJZCIsImVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldERpZ2VzdCIsIlByb21pc2UiLCJhbGwiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0NhbmR5QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudC9EZWNvcmF0b3JzL0RpZ2VzdEFwaUNsaWVudFdpdGhEZWJvdW5jZWRCYXRjaGluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWdlc3RSZXF1ZXN0IH0gZnJvbSBcIi4uL1R5cGVzL0RpZ2VzdFJlcXVlc3RcIjtcbmltcG9ydCB7IERpZ2VzdFJlc3BvbnNlIH0gZnJvbSBcIi4uL1R5cGVzL0RpZ2VzdFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBkZWJvdW5jZWRNZXJnZSwgTWVyZ2VkUmVxdWVzdHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vRW5naW5lL3NyYy9IZWxwZXJzL0FzeW5jVXRpbHNcIjtcbmltcG9ydCB7IEl0ZXJVdGlscyB9IGZyb20gXCIuLi8uLi8uLi9JdGVyYWJsZVV0aWxzXCI7XG5pbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IElEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi4vSURpZ2VzdEFwaUNsaWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aERlYm91bmNlZEJhdGNoaW5nKGNsaWVudDogSURpZ2VzdEFwaUNsaWVudCwgZGVib3VuY2VJbnRlcnZhbDogbnVtYmVyKTogSURpZ2VzdEFwaUNsaWVudCB7XG4gICAgcmV0dXJuIG5ldyBEaWdlc3RBcGlDbGllbnRXaXRoRGVib3VuY2VkQmF0Y2hpbmcoY2xpZW50LCBkZWJvdW5jZUludGVydmFsKTtcbn1cblxuZXhwb3J0IGNsYXNzIERpZ2VzdEFwaUNsaWVudFdpdGhEZWJvdW5jZWRCYXRjaGluZyBpbXBsZW1lbnRzIElEaWdlc3RBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2V0RGlnZXN0RGVib3VuY2VkOiAocmVxdWVzdDogRGlnZXN0UmVxdWVzdCkgPT4gUHJvbWlzZTxEaWdlc3RSZXNwb25zZT47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaW5uZXJDbGllbnQ6IElEaWdlc3RBcGlDbGllbnQsIGRlYm91bmNlSW50ZXJ2YWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLmdldERpZ2VzdERlYm91bmNlZCA9IGRlYm91bmNlZE1lcmdlKFxuICAgICAgICAgICAgYXN5bmMgKHJlcXVlc3RzOiBNZXJnZWRSZXF1ZXN0czxEaWdlc3RSZXF1ZXN0LCBEaWdlc3RSZXNwb25zZT4pID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWdlc3RSZXF1ZXN0cyA9IHJlcXVlc3RzLm1hcCh4ID0+IHguYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlnZXN0UmVzcG9uc2VzID0gYXdhaXQgaW5uZXJDbGllbnQuZ2V0RGlnZXN0cyhkaWdlc3RSZXF1ZXN0cyk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ksIHJlcXVlc3RdIG9mIEl0ZXJVdGlscy5pdGVyYXRlRW50cmllcyhyZXF1ZXN0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QucmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3RSZXNwb25zZXNbaV0gPz8gcmVqZWN0KGBSZXF1ZXN0IGZvciBnSWQ6JyR7cmVxdWVzdC5hcmcuZ0lkfSBkb2VzIG5vdCByZWNlaXZlZCdgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlYm91bmNlSW50ZXJ2YWwsXG4gICAgICAgICAgICB4ID0+IEpTT04uc3RyaW5naWZ5KHgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERpZ2VzdChyZXF1ZXN0OiBEaWdlc3RSZXF1ZXN0KTogUHJvbWlzZTxEaWdlc3RSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREaWdlc3REZWJvdW5jZWQocmVxdWVzdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERpZ2VzdHMocmVxdWVzdHM6IFJlYWRvbmx5QXJyYXk8UmVhZG9ubHk8RGlnZXN0UmVxdWVzdD4+KTogUHJvbWlzZTxEaWdlc3RSZXNwb25zZVtdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXF1ZXN0cy5tYXAoeCA9PiB0aGlzLmdldERpZ2VzdCh4KSkpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFlBQUEsR0FBQUYsT0FBQTtBQUdPLFNBQVNHLHFCQUFxQkEsQ0FBQ0MsTUFBd0IsRUFBRUMsZ0JBQXdCLEVBQW9CO0VBQ3hHLE9BQU8sSUFBSUMsb0NBQW9DLENBQUNGLE1BQU0sRUFBRUMsZ0JBQWdCLENBQUM7QUFDN0U7QUFFTyxNQUFNQyxvQ0FBb0MsQ0FBNkI7RUFHbkVDLFdBQVdBLENBQUNDLFdBQTZCLEVBQUVILGdCQUF3QixFQUFFO0lBQUEsS0FGM0RJLGtCQUFrQjtJQUcvQixJQUFJLENBQUNBLGtCQUFrQixHQUFHLElBQUFDLDBCQUFjLEVBQ3BDLE1BQU9DLFFBQXVELElBQUs7TUFDL0QsSUFBSTtRQUNBLE1BQU1DLGNBQWMsR0FBR0QsUUFBUSxDQUFDRSxHQUFHLENBQUNDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxHQUFHLENBQUM7UUFDL0MsTUFBTUMsZUFBZSxHQUFHLE1BQU1SLFdBQVcsQ0FBQ1MsVUFBVSxDQUFDTCxjQUFjLENBQUM7UUFDcEUsS0FBSyxNQUFNLENBQUNNLENBQUMsRUFBRUMsT0FBTyxDQUFDLElBQUlDLHdCQUFTLENBQUNDLGNBQWMsQ0FBQ1YsUUFBUSxDQUFDLEVBQUU7VUFBQSxJQUFBVyxrQkFBQTtVQUMzREgsT0FBTyxDQUFDSSxPQUFPLEVBQUFELGtCQUFBLEdBQ1hOLGVBQWUsQ0FBQ0UsQ0FBQyxDQUFDLGNBQUFJLGtCQUFBLGNBQUFBLGtCQUFBLEdBQUksSUFBQUUsbUJBQU0sRUFBRSxvQkFBbUJMLE9BQU8sQ0FBQ0osR0FBRyxDQUFDVSxHQUFJLHFCQUFvQixDQUN6RixDQUFDO1FBQ0w7TUFDSixDQUFDLENBQUMsT0FBT0MsS0FBSyxFQUFFO1FBQ1osS0FBSyxNQUFNUCxPQUFPLElBQUlSLFFBQVEsRUFBRTtVQUM1QlEsT0FBTyxDQUFDSyxNQUFNLENBQUNFLEtBQUssQ0FBQztRQUN6QjtNQUNKO0lBQ0osQ0FBQyxFQUNEckIsZ0JBQWdCLEVBQ2hCUyxDQUFDLElBQUlhLElBQUksQ0FBQ0MsU0FBUyxDQUFDZCxDQUFDLENBQ3pCLENBQUM7RUFDTDtFQUVPZSxTQUFTQSxDQUFDVixPQUFzQixFQUEyQjtJQUM5RCxPQUFPLElBQUksQ0FBQ1Ysa0JBQWtCLENBQUNVLE9BQU8sQ0FBQztFQUMzQztFQUVPRixVQUFVQSxDQUFDTixRQUFnRCxFQUE2QjtJQUMzRixPQUFPbUIsT0FBTyxDQUFDQyxHQUFHLENBQUNwQixRQUFRLENBQUNFLEdBQUcsQ0FBQ0MsQ0FBQyxJQUFJLElBQUksQ0FBQ2UsU0FBUyxDQUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVEO0FBQ0o7QUFBQ2tCLE9BQUEsQ0FBQTFCLG9DQUFBLEdBQUFBLG9DQUFBIn0=
35
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfQXN5bmNVdGlscyIsInJlcXVpcmUiLCJfSXRlcmFibGVVdGlscyIsIl9UeXBpbmdVdGlscyIsIndpdGhEZWJvdW5jZWRCYXRjaGluZyIsImNsaWVudCIsImRlYm91bmNlSW50ZXJ2YWwiLCJEaWdlc3RBcGlDbGllbnRXaXRoRGVib3VuY2VkQmF0Y2hpbmciLCJjb25zdHJ1Y3RvciIsImlubmVyQ2xpZW50IiwiZ2V0RGlnZXN0RGVib3VuY2VkIiwiZGVib3VuY2VkTWVyZ2UiLCJyZXF1ZXN0cyIsIl8iLCJyZXF1ZXN0IiwiSXRlclV0aWxzIiwiaXRlcmF0ZUVudHJpZXMiLCJkaWdlc3RSZXNwb25zZSIsImdldERpZ2VzdCIsImFyZyIsInJlc29sdmUiLCJyZWplY3QiLCJnSWQiLCJlcnJvciIsIngiLCJKU09OIiwic3RyaW5naWZ5IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnQvRGVjb3JhdG9ycy9EaWdlc3RBcGlDbGllbnRXaXRoRGVib3VuY2VkQmF0Y2hpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlnZXN0UmVxdWVzdCB9IGZyb20gXCIuLi9UeXBlcy9EaWdlc3RSZXF1ZXN0XCI7XG5pbXBvcnQgeyBkZWJvdW5jZWRNZXJnZSwgTWVyZ2VkUmVxdWVzdHMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vRW5naW5lL3NyYy9IZWxwZXJzL0FzeW5jVXRpbHNcIjtcbmltcG9ydCB7IEl0ZXJVdGlscyB9IGZyb20gXCIuLi8uLi8uLi9JdGVyYWJsZVV0aWxzXCI7XG5pbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vLi4vLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IElEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi4vSURpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgUGlja2xpc3RSZXN1bHRWMiB9IGZyb20gXCIuLi8uLi8uLi9QaWNrbGlzdEFwaUNsaWVudC9UeXBlcy9QaWNrbGlzdFJlc3VsdFYyXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRGVib3VuY2VkQmF0Y2hpbmcoY2xpZW50OiBJRGlnZXN0QXBpQ2xpZW50LCBkZWJvdW5jZUludGVydmFsOiBudW1iZXIpOiBJRGlnZXN0QXBpQ2xpZW50IHtcbiAgICByZXR1cm4gbmV3IERpZ2VzdEFwaUNsaWVudFdpdGhEZWJvdW5jZWRCYXRjaGluZyhjbGllbnQsIGRlYm91bmNlSW50ZXJ2YWwpO1xufVxuXG5leHBvcnQgY2xhc3MgRGlnZXN0QXBpQ2xpZW50V2l0aERlYm91bmNlZEJhdGNoaW5nIGltcGxlbWVudHMgSURpZ2VzdEFwaUNsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXREaWdlc3REZWJvdW5jZWQ6IChyZXF1ZXN0OiBEaWdlc3RSZXF1ZXN0KSA9PiBQcm9taXNlPFBpY2tsaXN0UmVzdWx0VjI+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGlubmVyQ2xpZW50OiBJRGlnZXN0QXBpQ2xpZW50LCBkZWJvdW5jZUludGVydmFsOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5nZXREaWdlc3REZWJvdW5jZWQgPSBkZWJvdW5jZWRNZXJnZShcbiAgICAgICAgICAgIGFzeW5jIChyZXF1ZXN0czogTWVyZ2VkUmVxdWVzdHM8RGlnZXN0UmVxdWVzdCwgUGlja2xpc3RSZXN1bHRWMj4pID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCByZXF1ZXN0XSBvZiBJdGVyVXRpbHMuaXRlcmF0ZUVudHJpZXMocmVxdWVzdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaWdlc3RSZXNwb25zZSA9IGF3YWl0IGlubmVyQ2xpZW50LmdldERpZ2VzdChyZXF1ZXN0LmFyZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnZXN0UmVzcG9uc2UgPz8gcmVqZWN0KGBSZXF1ZXN0IGZvciBnSWQ6JyR7cmVxdWVzdC5hcmcuZ0lkfSBkb2VzIG5vdCByZWNlaXZlZCdgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlYm91bmNlSW50ZXJ2YWwsXG4gICAgICAgICAgICB4ID0+IEpTT04uc3RyaW5naWZ5KHgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERpZ2VzdChyZXF1ZXN0OiBEaWdlc3RSZXF1ZXN0KTogUHJvbWlzZTxQaWNrbGlzdFJlc3VsdFYyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERpZ2VzdERlYm91bmNlZChyZXF1ZXN0KTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFDQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxjQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFJTyxTQUFTRyxxQkFBcUJBLENBQUNDLE1BQXdCLEVBQUVDLGdCQUF3QixFQUFvQjtFQUN4RyxPQUFPLElBQUlDLG9DQUFvQyxDQUFDRixNQUFNLEVBQUVDLGdCQUFnQixDQUFDO0FBQzdFO0FBRU8sTUFBTUMsb0NBQW9DLENBQTZCO0VBR25FQyxXQUFXQSxDQUFDQyxXQUE2QixFQUFFSCxnQkFBd0IsRUFBRTtJQUFBLEtBRjNESSxrQkFBa0I7SUFHL0IsSUFBSSxDQUFDQSxrQkFBa0IsR0FBRyxJQUFBQywwQkFBYyxFQUNwQyxNQUFPQyxRQUF5RCxJQUFLO01BQ2pFLElBQUk7UUFDQSxLQUFLLE1BQU0sQ0FBQ0MsQ0FBQyxFQUFFQyxPQUFPLENBQUMsSUFBSUMsd0JBQVMsQ0FBQ0MsY0FBYyxDQUFDSixRQUFRLENBQUMsRUFBRTtVQUMzRCxNQUFNSyxjQUFjLEdBQUcsTUFBTVIsV0FBVyxDQUFDUyxTQUFTLENBQUNKLE9BQU8sQ0FBQ0ssR0FBRyxDQUFDO1VBQy9ETCxPQUFPLENBQUNNLE9BQU8sQ0FDWEgsY0FBYyxhQUFkQSxjQUFjLGNBQWRBLGNBQWMsR0FBSSxJQUFBSSxtQkFBTSxFQUFFLG9CQUFtQlAsT0FBTyxDQUFDSyxHQUFHLENBQUNHLEdBQUkscUJBQW9CLENBQ3JGLENBQUM7UUFDTDtNQUNKLENBQUMsQ0FBQyxPQUFPQyxLQUFLLEVBQUU7UUFDWixLQUFLLE1BQU1ULE9BQU8sSUFBSUYsUUFBUSxFQUFFO1VBQzVCRSxPQUFPLENBQUNPLE1BQU0sQ0FBQ0UsS0FBSyxDQUFDO1FBQ3pCO01BQ0o7SUFDSixDQUFDLEVBQ0RqQixnQkFBZ0IsRUFDaEJrQixDQUFDLElBQUlDLElBQUksQ0FBQ0MsU0FBUyxDQUFDRixDQUFDLENBQ3pCLENBQUM7RUFDTDtFQUVPTixTQUFTQSxDQUFDSixPQUFzQixFQUE2QjtJQUNoRSxPQUFPLElBQUksQ0FBQ0osa0JBQWtCLENBQUNJLE9BQU8sQ0FBQztFQUMzQztBQUNKO0FBQUNhLE9BQUEsQ0FBQXBCLG9DQUFBLEdBQUFBLG9DQUFBIn0=