vcomply-workflow-engine 6.0.64 → 6.0.65

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 (83) hide show
  1. package/esm2022/lib/add-multiple-responsibility/add-multiple-responsibility.component.mjs +10 -1
  2. package/esm2022/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.mjs +10 -1
  3. package/esm2022/lib/add-multiple-risk/add-multiple-risk.component.mjs +10 -1
  4. package/esm2022/lib/interfaces/responsibilty.interface.mjs +1 -1
  5. package/esm2022/lib/more-option/more-option.component.mjs +180 -14
  6. package/esm2022/lib/report-a-case/services/report-a-case.service.mjs +2 -3
  7. package/esm2022/lib/report-a-case/workflow-case/workflow-case.component.mjs +4 -4
  8. package/esm2022/lib/services/common.service.mjs +1 -40
  9. package/esm2022/lib/sharedComponents/frequency/frequency-annual/frequency-annual.component.mjs +1 -5
  10. package/esm2022/lib/sharedComponents/frequency/frequency-biannual/frequency-biannual.component.mjs +1 -5
  11. package/esm2022/lib/sharedComponents/frequency/frequency-container/frequency-container.component.mjs +5 -5
  12. package/esm2022/lib/sharedComponents/frequency/frequency-daily/frequency-daily.component.mjs +1 -2
  13. package/esm2022/lib/sharedComponents/frequency/frequency-monthly/frequency-monthly.component.mjs +2 -6
  14. package/esm2022/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.mjs +2 -3
  15. package/esm2022/lib/sharedComponents/frequency/frequency-ongoing/frequency-ongoing.component.mjs +1 -3
  16. package/esm2022/lib/sharedComponents/frequency/frequency-quarterly/frequency-quarterly.component.mjs +1 -5
  17. package/esm2022/lib/sharedComponents/frequency/frequency-random/frequency-random.component.mjs +2 -9
  18. package/esm2022/lib/sharedComponents/frequency/frequency-weekly/frequency-weekly.component.mjs +2 -4
  19. package/esm2022/lib/sharedComponents/frequency/frequency.service.mjs +1 -243
  20. package/esm2022/lib/workflow/grc-object/grc-object-container/grc-object-container.component.mjs +17 -45
  21. package/esm2022/lib/workflow/shared/components/grc-category-listing/grc-category-listing.component.mjs +10 -13
  22. package/esm2022/lib/workflow/shared/services/grc.service.mjs +2 -2
  23. package/esm2022/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.mjs +10 -1
  24. package/esm2022/lib/workflow-compliance/workflow-compliance.component.mjs +411 -283
  25. package/esm2022/lib/workflow-engine-container/workflow-engine-container.component.mjs +31 -5
  26. package/esm2022/lib/workflow-engine.module.mjs +6 -13
  27. package/esm2022/lib/workflow-policy/workflow-policy.component.mjs +47 -91
  28. package/esm2022/lib/workflow-program/constants.mjs +3 -3
  29. package/esm2022/lib/workflow-program/workflow-program.component.mjs +311 -118
  30. package/esm2022/lib/workflow-services/common-workflow-services/common-route.service.mjs +20 -0
  31. package/esm2022/lib/workflow-services/policy.service.mjs +4 -4
  32. package/esm2022/lib/workflow-services/programs.service.mjs +113 -26
  33. package/esm2022/lib/workflow-services/responsibility.service.mjs +45 -48
  34. package/fesm2022/vcomply-workflow-engine.mjs +17392 -17517
  35. package/fesm2022/vcomply-workflow-engine.mjs.map +1 -1
  36. package/lib/add-multiple-responsibility/add-multiple-responsibility.component.d.ts +2 -0
  37. package/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.d.ts +2 -0
  38. package/lib/add-multiple-risk/add-multiple-risk.component.d.ts +2 -0
  39. package/lib/interfaces/responsibilty.interface.d.ts +12 -12
  40. package/lib/services/common.service.d.ts +0 -28
  41. package/lib/sharedComponents/frequency/frequency-random/frequency-random.component.d.ts +0 -1
  42. package/lib/sharedComponents/frequency/frequency.service.d.ts +0 -87
  43. package/lib/workflow/grc-object/grc-object-container/grc-object-container.component.d.ts +1 -5
  44. package/lib/workflow/shared/components/grc-category-listing/grc-category-listing.component.d.ts +1 -3
  45. package/lib/workflow-assessment/import-an-assessment/import-an-assessment.component.d.ts +2 -0
  46. package/lib/workflow-compliance/workflow-compliance.component.d.ts +6 -32
  47. package/lib/workflow-engine-container/workflow-engine-container.component.d.ts +1 -2
  48. package/lib/workflow-engine.module.d.ts +40 -42
  49. package/lib/workflow-policy/workflow-policy.component.d.ts +3 -10
  50. package/lib/workflow-program/workflow-program.component.d.ts +4 -7
  51. package/lib/workflow-risk/workflow-risk.component.d.ts +1 -1
  52. package/lib/workflow-services/common-workflow-services/common-route.service.d.ts +9 -0
  53. package/lib/workflow-services/programs.service.d.ts +53 -13
  54. package/lib/workflow-services/responsibility.service.d.ts +2 -14
  55. package/package.json +1 -1
  56. package/esm2022/lib/constants/api.constants.mjs +0 -8
  57. package/esm2022/lib/constants/mock.mjs +0 -152
  58. package/esm2022/lib/interfaces/frequency.interface.mjs +0 -2
  59. package/esm2022/lib/sharedComponents/list-container/list-container.component.mjs +0 -52
  60. package/esm2022/lib/sharedComponents/program-list/constant.mjs +0 -16
  61. package/esm2022/lib/sharedComponents/program-list/interfaces/data-source.interface.mjs +0 -2
  62. package/esm2022/lib/sharedComponents/program-list/interfaces/list-item.interface.mjs +0 -2
  63. package/esm2022/lib/sharedComponents/program-list/pipes/check-selected-items.pipes.mjs +0 -23
  64. package/esm2022/lib/sharedComponents/program-list/program-list/program-list.component.mjs +0 -182
  65. package/esm2022/lib/sharedComponents/program-list/program-list.module.mjs +0 -47
  66. package/esm2022/lib/sharedComponents/program-list/services/list-utils.service.mjs +0 -27
  67. package/esm2022/lib/sharedComponents/program-list/services/program-list-api.service.mjs +0 -32
  68. package/esm2022/lib/ui-kit/loaders/loaders.module.mjs +0 -24
  69. package/esm2022/lib/ui-kit/loaders/table-loader/table-loader.component.mjs +0 -19
  70. package/lib/constants/api.constants.d.ts +0 -7
  71. package/lib/constants/mock.d.ts +0 -15
  72. package/lib/interfaces/frequency.interface.d.ts +0 -37
  73. package/lib/sharedComponents/list-container/list-container.component.d.ts +0 -9
  74. package/lib/sharedComponents/program-list/constant.d.ts +0 -9
  75. package/lib/sharedComponents/program-list/interfaces/data-source.interface.d.ts +0 -4
  76. package/lib/sharedComponents/program-list/interfaces/list-item.interface.d.ts +0 -5
  77. package/lib/sharedComponents/program-list/pipes/check-selected-items.pipes.d.ts +0 -7
  78. package/lib/sharedComponents/program-list/program-list/program-list.component.d.ts +0 -45
  79. package/lib/sharedComponents/program-list/program-list.module.d.ts +0 -14
  80. package/lib/sharedComponents/program-list/services/list-utils.service.d.ts +0 -7
  81. package/lib/sharedComponents/program-list/services/program-list-api.service.d.ts +0 -14
  82. package/lib/ui-kit/loaders/loaders.module.d.ts +0 -8
  83. package/lib/ui-kit/loaders/table-loader/table-loader.component.d.ts +0 -9
@@ -11,7 +11,6 @@ export class ResponsibilityService {
11
11
  this.http = http;
12
12
  this.authService = authService;
13
13
  this.dataPerPage = 30;
14
- this.responsibilityPageNumber = 1;
15
14
  this.grcOwners$ = new BehaviorSubject([]);
16
15
  this.RCList = new BehaviorSubject([]);
17
16
  this.AssignorList = new BehaviorSubject([]);
@@ -186,6 +185,21 @@ export class ResponsibilityService {
186
185
  }))
187
186
  .pipe(retry(2));
188
187
  }
188
+ getAssuranceForRequiresAudit() {
189
+ if (this.AssuranceListForAudit.getValue().length) {
190
+ return of(this.AssuranceListForAudit.getValue());
191
+ }
192
+ const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
193
+ return this.http
194
+ .get(this.env.assuranceApi + 'Audit/Category/List/?mode=entrust_module', {
195
+ headers,
196
+ })
197
+ .pipe(map((res) => {
198
+ this.AssuranceListForAudit.next(res);
199
+ return res;
200
+ }))
201
+ .pipe(retry(2));
202
+ }
189
203
  getRCDetailsOfFramework(rc_id, category_id) {
190
204
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
191
205
  return this.http.get(this.env.complianceGet +
@@ -196,14 +210,14 @@ export class ResponsibilityService {
196
210
  }
197
211
  submitEntrust(entrust_body) {
198
212
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
199
- return this.http.post(this.env.compliancePost + 'createReport&serviceType=1', entrust_body, { headers });
213
+ return this.http.post(this.env.compliancePost + 'createReport', entrust_body, { headers });
200
214
  }
201
215
  updateEntrust(entrust_body, object_id, isDelegate) {
202
216
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
203
217
  return this.http.post(this.env.compliancePost +
204
218
  'createReport&reportId=' +
205
219
  object_id +
206
- '&isDelegate=0&serviceType=1', entrust_body, { headers });
220
+ '&isDelegate=0', entrust_body, { headers });
207
221
  }
208
222
  editResponsibility(objectId) {
209
223
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
@@ -316,19 +330,19 @@ export class ResponsibilityService {
316
330
  }
317
331
  addGRCObject(payload) {
318
332
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
319
- return this.http.post(this.env.grc_get + 'grc/saveGRC&serviceType=1', payload, {
333
+ return this.http.post(this.env.grc_get + 'grc/saveGRC', payload, {
320
334
  headers,
321
335
  });
322
336
  }
323
337
  updateGRCObject(payload, _id) {
324
338
  payload._id = _id;
325
339
  const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
326
- return this.http.put(this.env.grc_get + 'grc/updateGRC&serviceType=1', payload, {
340
+ return this.http.put(this.env.grc_get + 'grc/updateGRC', payload, {
327
341
  headers,
328
342
  });
329
343
  }
330
344
  buildResponsibilityPayload(event) {
331
- console.log('event', event);
345
+ console.log(event, 'event');
332
346
  const payload = {
333
347
  title: event.report_name,
334
348
  key: event.is_key_compliance,
@@ -336,25 +350,34 @@ export class ResponsibilityService {
336
350
  notes: event.remarks,
337
351
  objective: event.objective,
338
352
  frequency: event.frequency,
339
- assignor: event.member_id,
353
+ assignorId: event.member_id,
340
354
  assignee: {
341
- type: event.isGroupAssignTo ? 'any' : 'all',
342
- userId: event.assignee_member_id?.split(','),
355
+ type: event.isGroupAssignTo ? 'any_one' : 'all',
356
+ userId: event.assignee_member_id?.split(',').map(Number),
343
357
  userGroupId: event.isGroupAssignTo ? event.userGroupIds?.assigneeAnyoneGroupIds : event.userGroupIds?.assigneeAllGroupIdss
344
358
  },
345
- responsibilityCenter: event.responsibilityCenterArr?.length ? {
359
+ responsibilityCenter: {
346
360
  type: event.responsibilityCenterType ? 'any' : 'all',
347
361
  id: event.responsibilityCenterArr
348
- } : undefined,
349
- reviewer: event.reviewer_arr?.level1?.reviewers?.length ? {
350
- type: event.reviewer_arr?.level1?.type?.toLowerCase(),
362
+ },
363
+ reviewer: {
364
+ type: event.reviewer_arr?.type?.toLowerCase(),
351
365
  userId: event.reviewer_arr?.level1?.reviewers?.map((reviewer) => reviewer?.member_id),
352
366
  frequency: {
353
- completeBy: event?.review_after_days,
354
- endAfter: event?.review_failed_after_days
367
+ dueDays: event?.review_after_days,
368
+ extensionDays: event?.review_failed_after_days
369
+ }
370
+ },
371
+ overseer: {
372
+ success: {
373
+ userId: event.cc_member_email?.split(',')?.filter(Boolean)?.map(Number),
374
+ userGroupId: event.userGroupIds?.ccEmailGroupIds
375
+ },
376
+ fail: {
377
+ userId: event.failure_cc_member_email?.split(',')?.filter(Boolean)?.map(Number),
378
+ userGroupId: event.userGroupIds?.failureCCEmailGroupIds
355
379
  }
356
- } : undefined,
357
- overseer: this.getOverseer(event),
380
+ },
358
381
  evidence: {
359
382
  required: event.report_upload_flag,
360
383
  format: {
@@ -362,48 +385,22 @@ export class ResponsibilityService {
362
385
  data: event?.report_format?.length ? event.report_format : event?.link_for_details
363
386
  }
364
387
  },
365
- program: { id: this.transformData(event.selectedCategory), tags: JSON.parse(event.custom_tags),
366
- },
388
+ tags: JSON.parse(event.custom_tags),
389
+ program: event.category_id?.split(',')?.filter(Boolean)?.map(Number),
367
390
  grcObjectId: event.linked_GRC_ids,
368
391
  assessmentId: event.assessment?.assessment_id,
369
392
  };
370
393
  return payload;
371
394
  }
372
- getOverseer(event) {
373
- if (event.cc_member_email?.length || event.failure_cc_member_email?.length) {
374
- return {
375
- success: {
376
- userId: event.cc_member_email?.split(',')?.filter(Boolean),
377
- userGroupId: event.userGroupIds?.ccEmailGroupIds
378
- },
379
- fail: {
380
- userId: event.failure_cc_member_email?.split(',')?.filter(Boolean),
381
- userGroupId: event.userGroupIds?.failureCCEmailGroupIds
382
- }
383
- };
384
- }
385
- return undefined;
386
- }
387
395
  getRiskClass(riskClass) {
388
396
  const riskClasses = {
389
397
  0: 'low',
390
- 1: 'low_medium',
391
- 2: 'medium_high',
398
+ 1: 'low-medium',
399
+ 2: 'medium-high',
392
400
  3: 'high'
393
401
  };
394
402
  return riskClasses[riskClass];
395
403
  }
396
- transformData(input) {
397
- let result = {};
398
- Object.entries(input).forEach(([key, value]) => {
399
- result[key.toString()] = value.map((item) => item.id);
400
- });
401
- return result;
402
- }
403
- getAllResponsibilities() {
404
- const headers = new HttpHeaders().set('token', this.authService.getAuthorizationToken());
405
- return this.http.get(this.env.complianceGet + `sailsResponsibilitiesList&page=${this.responsibilityPageNumber}&limit=-1`, { headers });
406
- }
407
404
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResponsibilityService, deps: [{ token: i1.HttpClient }, { token: i2.AuthService }, { token: i3.Configurations, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
408
405
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResponsibilityService, providedIn: 'root' }); }
409
406
  }
@@ -415,4 +412,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
415
412
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.AuthService }, { type: i3.Configurations, decorators: [{
416
413
  type: Optional
417
414
  }] }]; } });
418
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2liaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXhELE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQUt2RCxNQUFNLE9BQU8scUJBQXFCO0lBa0JoQyxZQUNVLElBQWdCLEVBQ2hCLFdBQXdCLEVBQ3BCLE1BQXVCO1FBRjNCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFsQmxDLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ1YsNkJBQXdCLEdBQVcsQ0FBQyxDQUFDO1FBRTVDLGVBQVUsR0FBeUIsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDekQsV0FBTSxHQUF5QixJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUM1RCxpQkFBWSxHQUF5QixJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUNsRSwwQkFBcUIsR0FBeUIsSUFBSSxlQUFlLENBQ3RFLEVBQUUsQ0FDSCxDQUFDO1FBQ0ssY0FBUyxHQUF5QixJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUMvRCwwQkFBcUIsR0FBeUIsSUFBSSxlQUFlLENBQ3RFLEVBQUUsQ0FDSCxDQUFDO1FBQ00saUJBQVksR0FBeUIsSUFBSSxlQUFlLENBQU0s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QUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBTSxFQUFFLEVBQUU7WUFDbkQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2YsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FDbkMsT0FBTyxFQUNQLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FDekMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxHQUFHLGtDQUFrQyxJQUFJLENBQUMsd0JBQXdCLFdBQVcsRUFDbkcsRUFBRSxPQUFPLEVBQUUsQ0FDWixDQUFDO0lBQ0osQ0FBQzsrR0FobkJVLHFCQUFxQjttSEFBckIscUJBQXFCLGNBRnBCLE1BQU07OzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXNCSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCByZXRyeSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zIH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbnMnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBBc3Nlc3NtZW50TGlzdCB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvYXNzZXNzbWVudC1saXN0L3NlcnZpY2UvYXNzZXNzbWVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHkgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Jlc3BvbnNpYmlsdHkuaW50ZXJmYWNlJztcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXNwb25zaWJpbGl0eVNlcnZpY2Uge1xuICBlbnYhOiBhbnk7XG4gIGRhdGFQZXJQYWdlID0gMzA7XG4gIHB1YmxpYyByZXNwb25zaWJpbGl0eVBhZ2VOdW1iZXI6IG51bWJlciA9IDE7XG5cbiAgZ3JjT3duZXJzJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oW10pO1xuICBwdWJsaWMgUkNMaXN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihbXSk7XG4gIHB1YmxpYyBBc3NpZ25vckxpc3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KFtdKTtcbiAgcHVibGljIEFzc3VyYW5jZUxpc3RGb3JBdWRpdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oXG4gICAgW11cbiAgKTtcbiAgcHVibGljIEdyb3VwTGlzdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oW10pO1xuICBwdWJsaWMgQXNzdXJhbmNlQ2F0ZWdvcnlMaXN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihcbiAgICBbXVxuICApO1xuICBwcml2YXRlIG92ZXJzZWVyTGlzdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG4gIHByaXZhdGUgcG9saWN5R3JvdXBzOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgY29uZmlnPzogQ29uZmlndXJhdGlvbnNcbiAgKSB7XG4gICAgaWYgKGNvbmZpZykge1xuICAgICAgdGhpcy5lbnYgPSBjb25maWcuZW52Q29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIGdldFJlc3BvbnNpYmlsaXR5Q2VudGVyTGlzdChwYXJhbXM/OiBIdHRwUGFyYW1zKSB7XG4gICAgaWYgKHRoaXMuUkNMaXN0LmdldFZhbHVlKCkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5SQ0xpc3QuZ2V0VmFsdWUoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PGFueVtdPih0aGlzLmVudj8uY29tcGxpYW5jZUdldCArICdyZXNwb25zaWJpbGl0eUNlbnRlclRyZWUnLCB7XG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXMpID0+IHtcbiAgICAgICAgICB0aGlzLlJDTGlzdC5uZXh0KHJlcyk7XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIGdldE9yZ2FuaXphdGlvbkdyb3VwcyhwYXJhbXM/OiBIdHRwUGFyYW1zKSB7XG4gICAgaWYgKHRoaXMuR3JvdXBMaXN0LmdldFZhbHVlKCkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5Hcm91cExpc3QuZ2V0VmFsdWUoKSk7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4oXG4gICAgICAgIHRoaXMuZW52Lm9yZ2FuaXphdGlvbkdldCArICdncm91cHNMaXN0JnN0YXR1cz0xJnR5cGU9Y29tcGxpYW5jZScsXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgICAgdGhpcy5Hcm91cExpc3QubmV4dChyZXMpO1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBnZXRPcmdhbml6YXRpb25Qb2xpY3lHcm91cHMocGFyYW1zPzogSHR0cFBhcmFtcykge1xuICAgIGlmICh0aGlzLnBvbGljeUdyb3Vwcz8uZ2V0VmFsdWUoKSkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMucG9saWN5R3JvdXBzPy52YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4oXG4gICAgICAgIHRoaXMuZW52Lm9yZ2FuaXphdGlvbkdldCArXG4gICAgICAgICAgJ2dyb3Vwc0xpc3QmcGVybVR5cGU9bWFuYWdlUG9saWNpZXMmZmV0Y2hfYWxsPXRydWUnLFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICAgIHRoaXMucG9saWN5R3JvdXBzLm5leHQocmVzKTtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBnZXRPcmdhbml6YXRpb25PdmVyc2VlcnNHcm91cHMocGFyYW1zPzogSHR0cFBhcmFtcykge1xuICAgIGlmICh0aGlzLm92ZXJzZWVyTGlzdD8uZ2V0VmFsdWUoKSkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMub3ZlcnNlZXJMaXN0Py52YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnYub3JnYW5pemF0aW9uR2V0ICsgJ2dyb3Vwc0xpc3QmZmV0Y2hfYWxsPXRydWUnLCB7XG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXMpID0+IHtcbiAgICAgICAgICB0aGlzLm92ZXJzZWVyTGlzdC5uZXh0KHJlcyk7XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5cbiAgZ2V0T3JnYW5pemF0aW9uVXNlcnMoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PGFueVtdPih0aGlzLmVudi5vcmdhbml6YXRpb25HZXQgKyAnb3JnYW5pemF0aW9uVXNlcnMnLCB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9KVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5cbiAgZ2V0T3JnYW5pemF0aW9uUGVvcGxlKHBhcmFtcz86IEh0dHBQYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnYub3JnYW5pemF0aW9uR2V0ICsgJ3Blb3BsZScsIHtcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIGdldEFzc2lnbm9yc0xpc3QocGFyYW1zPzogSHR0cFBhcmFtcykge1xuICAgIGlmICh0aGlzLkFzc2lnbm9yTGlzdC5nZXRWYWx1ZSgpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuQXNzaWdub3JMaXN0LmdldFZhbHVlKCkpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KFxuICAgICAgICB0aGlzLmVudj8ub3JnYW5pemF0aW9uR2V0ICsgJ29yZ2FuaXphdGlvblVzZXJzJmlzT25CZWhhbGY9MScsXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgICAgdGhpcy5Bc3NpZ25vckxpc3QubmV4dChyZXMpO1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBnZXRDYXRlZ29yaWVzTGlzdCgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KFxuICAgICAgICB0aGlzLmVudj8uY29tcGxpYW5jZUdldCArICdjb21wbGlhbmNlQ2F0ZWdvcnkvQ2F0ZWdvcnlMaXN0VHJlZScsXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9XG4gICAgICApXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cbiAgZ2V0UHJvZ3JhbXNMaXN0KHBhcmFtczogSHR0cFBhcmFtcywgaWRzPzogYW55KSB7XG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgY29uc3QgcHJvZ3JhbUlkID0geyBwcm9ncmFtSWQ6IGlkcyB9O1xuICAgIGlmIChpZHM/Lmxlbmd0aCkge1xuICAgICAgaGVhZGVycyA9IGhlYWRlcnMuYXBwZW5kKCdwYXlsb2FkLW9iamVjdCcsIEpTT04uc3RyaW5naWZ5KHByb2dyYW1JZCkpO1xuXG4gICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgIC5wb3N0PGFueVtdPihcbiAgICAgICAgICB0aGlzLmVudj8uY29tcGxpYW5jZVBvc3QgKyAnY29tcGxpYW5jZUNhdGVnb3J5L3Byb2dyYW1MaXN0JyxcbiAgICAgICAgICBwcm9ncmFtSWQsXG4gICAgICAgICAgeyBwYXJhbXMsIGhlYWRlcnMgfVxuICAgICAgICApXG4gICAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PGFueVtdPih0aGlzLmVudi5jb21wbGlhbmNlR2V0ICsgJ2NvbXBsaWFuY2VDYXRlZ29yeS9wcm9ncmFtTGlzdCcsIHtcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIGdldFByb2dyYW1zTGlzdENvdW50KHBhcmFtczogSHR0cFBhcmFtcywgaWRzPzogYW55KSB7XG4gICAgbGV0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4oXG4gICAgICAgIHRoaXMuZW52LmNvbXBsaWFuY2VHZXQgKyAnY29tcGxpYW5jZUNhdGVnb3J5L3Byb2dyYW1MaXN0Q291bnQnLFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuICBnZXRDYXRlZ29yaWVzVW5kZXJQcm9ncmFtKHBhcmFtczogSHR0cFBhcmFtcykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4oXG4gICAgICAgIHRoaXMuZW52LmNvbXBsaWFuY2VHZXQgKyAnY29tcGxpYW5jZUNhdGVnb3J5L0NhdGVnb3J5TGlzdFRyZWUnLFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuICBnZXRBc3N1cmFuY2UoKSB7XG4gICAgaWYgKHRoaXMuQXNzdXJhbmNlQ2F0ZWdvcnlMaXN0LmdldFZhbHVlKCkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy5Bc3N1cmFuY2VDYXRlZ29yeUxpc3QuZ2V0VmFsdWUoKSk7XG4gICAgfVxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnYuYXNzdXJhbmNlR2V0ICsgJ2NhdGVnb3J5L2xpc3QmaWQ9MScsIHtcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXMpID0+IHtcbiAgICAgICAgICB0aGlzLkFzc3VyYW5jZUNhdGVnb3J5TGlzdC5uZXh0KHJlcyk7XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG5cbiAgZ2V0UkNEZXRhaWxzT2ZGcmFtZXdvcmsocmNfaWQ6IGFueSwgY2F0ZWdvcnlfaWQ6IGFueSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLmVudi5jb21wbGlhbmNlR2V0ICtcbiAgICAgICAgJ2NvbXBsaWFuY2VDYXRlZ29yeS9DYXRlZ29yeVJDVHJlZUJ5SWQmaWQ9JyArXG4gICAgICAgIGNhdGVnb3J5X2lkICtcbiAgICAgICAgJyZyY19pZD0nICtcbiAgICAgICAgcmNfaWQsXG4gICAgICB7IGhlYWRlcnMgfVxuICAgICk7XG4gIH1cblxuICBzdWJtaXRFbnRydXN0KGVudHJ1c3RfYm9keTogYW55KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLmVudi5jb21wbGlhbmNlUG9zdCArICdjcmVhdGVSZXBvcnQmc2VydmljZVR5cGU9MScsXG4gICAgICBlbnRydXN0X2JvZHksXG4gICAgICB7IGhlYWRlcnMgfVxuICAgICk7XG4gIH1cbiAgdXBkYXRlRW50cnVzdChlbnRydXN0X2JvZHk6IGFueSwgb2JqZWN0X2lkOiBhbnksIGlzRGVsZWdhdGU6IGFueSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5lbnYuY29tcGxpYW5jZVBvc3QgK1xuICAgICAgICAnY3JlYXRlUmVwb3J0JnJlcG9ydElkPScgK1xuICAgICAgICBvYmplY3RfaWQgK1xuICAgICAgICAnJmlzRGVsZWdhdGU9MCZzZXJ2aWNlVHlwZT0xJyxcbiAgICAgIGVudHJ1c3RfYm9keSxcbiAgICAgIHsgaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuXG4gIGVkaXRSZXNwb25zaWJpbGl0eShvYmplY3RJZDogYW55KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICB0aGlzLmVudi5jb21wbGlhbmNlR2V0ICsgJ2NvbXBsaWFuY2VSZXBvcnQvcmVwb3J0QnlJZCZpZD0nICsgb2JqZWN0SWQsXG4gICAgICAgIHsgaGVhZGVycyB9XG4gICAgICApXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBhZGRCdWxrUmVzcG9uc2liaWxpdHkoZW50cnVzdF9ib2R5OiBhbnkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuZW52LmNvbXBsaWFuY2VQb3N0ICsgJ2ltcG9ydC9jcmVhdGUnLFxuICAgICAgZW50cnVzdF9ib2R5LFxuICAgICAgeyBoZWFkZXJzIH1cbiAgICApO1xuICB9XG5cbiAgdXBsb2FkVG9Ob2RlKHBheWxvYWQ6IGFueSwgZGVzOiBhbnkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIC8vIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnlbXT4odGhpcy5lbnYuZmlsZVVwbG9hZEVuZFBvaW50ICsgJ3Jpc2svcmVzcG9uc2liaWxpdHlDZW50ZXJMaXN0JywgeyByY19pZF9hcnI6IHJjQXJyYXkgPz8gW10gfSwgeyBoZWFkZXJzIH0pLnBpcGUocmV0cnkoMikpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KHRoaXMuZW52LmZpbGVVcGxvYWRFbmRQb2ludCArIGRlcywgcGF5bG9hZCwge1xuICAgICAgaGVhZGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIGZpbGVzVXBsb2FkaW5nOiBhbnlbXSA9IFtdO1xuICBmaWxlc1VwbG9hZGVkOiBhbnlbXSA9IFtdO1xuICBmaWxlc1VwbG9hZGVkQW5kVXBsb2FkaW5nOiBhbnlbXSA9IFtdO1xuXG4gIGdldENhdGVnb3J5RGV0YWlsc0J5SWQoaWQ6IGFueSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4oXG4gICAgICAgIHRoaXMuZW52LmNvbXBsaWFuY2VHZXQgKyAnY29tcGxpYW5jZUNhdGVnb3J5L0NhdGVnb3J5VHJlZUJ5SWQmaWQ9JyArIGlkLFxuICAgICAgICB7IGhlYWRlcnMgfVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5cbiAgZ2V0RnJhbWVXb3JrQ291bnQocGFyYW1zPzogSHR0cFBhcmFtcykge1xuICAgIGxldCBodHRwT3B0aW9uczogYW55ID0ge307XG4gICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICBodHRwT3B0aW9ucy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KHRoaXMuZW52LnByb2dyYW1FbmRwb2ludCArICcvZnJhbWV3b3JrY291bnQnLCBodHRwT3B0aW9ucylcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIGdldEZyYW1lV29ya0xpc3QocGFyYW1zOiBIdHRwUGFyYW1zKSB7XG4gICAgbGV0IGh0dHBPcHRpb25zOiBhbnkgPSB7fTtcbiAgICBodHRwT3B0aW9ucy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIGlmIChwYXJhbXMpIHtcbiAgICAgIGh0dHBPcHRpb25zLnBhcmFtcyA9IHBhcmFtcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnYucHJvZ3JhbUVuZHBvaW50ICsgJy9mcmFtZXdvcmsnLCBodHRwT3B0aW9ucylcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuICBnZXRGcmFtZXdvcmtTdWJDYXRlZ29yaWVzKGlkOiBhbnksIHBhcmFtczogSHR0cFBhcmFtcykge1xuICAgIGxldCBodHRwT3B0aW9uczogYW55ID0ge307XG4gICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICBodHRwT3B0aW9ucy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KHRoaXMuZW52LnByb2dyYW1FbmRwb2ludCArICcvZnJhbWV3b3JrLycgKyBpZCwgaHR0cE9wdGlvbnMpXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBnZXRGcmFtZXdvcmtDb250cm9scyhpZDogYW55LCBwYXJhbXM6IEh0dHBQYXJhbXMpIHtcbiAgICBsZXQgaHR0cE9wdGlvbnM6IGFueSA9IHt9O1xuICAgIGh0dHBPcHRpb25zLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgaWYgKHBhcmFtcykge1xuICAgICAgaHR0cE9wdGlvbnMucGFyYW1zID0gcGFyYW1zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PGFueVtdPih0aGlzLmVudi5wcm9ncmFtRW5kcG9pbnQgKyAnL2NvbnRyb2xzLycgKyBpZCwgaHR0cE9wdGlvbnMpXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBmaWxlVXBsb2FkKGZpbGU6IGFueSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZW52LmNvbXBsaWFuY2VQb3N0ICsgJ2ZpbGUvdXBsb2FkJywgZmlsZSwge1xuICAgICAgaGVhZGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFzc2Vzc21lbnRDYXRlZ29yeShwYXlsb2FkOiBhbnksIHByb2dyYW1faWRzPzogc3RyaW5nKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdChcbiAgICAgICAgdGhpcy5lbnYuYXNzZXNzbWVudEVucG9pbnQgK1xuICAgICAgICAgICdjYXRlZ29yeS9saXN0JmlzQ3JlYXRlUmVzcG9uc2liaWxpdHk9dHJ1ZScgK1xuICAgICAgICAgIChwcm9ncmFtX2lkcyA/ICcmcHJvZ3JhbV9pZHM9JyArIHByb2dyYW1faWRzIDogJycpLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB7IGhlYWRlcnMgfVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5cbiAgZ2V0QXNzZXNzbWVudExpc3QocGF5bG9hZDogYW55LCBpZDogc3RyaW5nLCBwcm9ncmFtX2lkcz86IHN0cmluZykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8QXJyYXk8QXNzZXNzbWVudExpc3Q+PihcbiAgICAgICAgdGhpcy5lbnYuYXNzZXNzbWVudEVucG9pbnQgK1xuICAgICAgICAgICdhc3Nlc3NtZW50L3NlbGVjdEFzc2Vzc21lbnQmaXNDcmVhdGVSZXNwb25zaWJpbGl0eT10cnVlJmNhdGlkPScgK1xuICAgICAgICAgIGlkICtcbiAgICAgICAgICAocHJvZ3JhbV9pZHMgPyAnJnByb2dyYW1faWRzPScgKyBwcm9ncmFtX2lkcyA6ICcnKSxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgeyBoZWFkZXJzIH1cbiAgICAgIClcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIGdldEFzc2Vzc21lbnREZXRhaWxzQnlJRChpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxBcnJheTxBc3Nlc3NtZW50TGlzdD4+KFxuICAgICAgICB0aGlzLmVudi5hc3Nlc3NtZW50RW5wb2ludCArICdhc3Nlc3NtZW50L2dldEFzc2Vzc21lbnRCeUlkJmlkPScgKyBpZCxcbiAgICAgICAge30sXG4gICAgICAgIHsgaGVhZGVycyB9XG4gICAgICApXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBnZXRHUkNPd25lckxpc3QoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4oXG4gICAgICB0aGlzLmVudi5vcmdhbml6YXRpb25HZXQgK1xuICAgICAgICAnb3JnYW5pemF0aW9uTWVtYmVycyZpc0dyY09iamVjdD10cnVlJnR5cGU9YWxsJyxcbiAgICAgIHsgaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuXG4gIGdldE9iamVjdFR5cGUoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4oXG4gICAgICB0aGlzLmVudi5ncmNfZ2V0ICsgJ2dyY09iamVjdC9nZXRHUkNUeXBlTGlzdCZwcm9qZWN0ZWQ9MScsXG4gICAgICB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGdldEdSQ09iamVjdERldGFpbHMoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KFxuICAgICAgdGhpcy5lbnYuZ3JjX2dldCArICdncmMvZ3JjQnlJZCZpc0VkaXQ9dHJ1ZSZpZD0nICsgaWQsXG4gICAgICB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGFkZEdSQ09iamVjdChwYXlsb2FkOiBhbnkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnlbXT4odGhpcy5lbnYuZ3JjX2dldCArICdncmMvc2F2ZUdSQyZzZXJ2aWNlVHlwZT0xJywgcGF5bG9hZCwge1xuICAgICAgaGVhZGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUdSQ09iamVjdChwYXlsb2FkOiBhbnksIF9pZDogc3RyaW5nKSB7XG4gICAgcGF5bG9hZC5faWQgPSBfaWQ7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxhbnlbXT4odGhpcy5lbnYuZ3JjX2dldCArICdncmMvdXBkYXRlR1JDJnNlcnZpY2VUeXBlPTEnLCBwYXlsb2FkLCB7XG4gICAgICBoZWFkZXJzLFxuICAgIH0pO1xuICB9XG5cbiAgYnVpbGRSZXNwb25zaWJpbGl0eVBheWxvYWQoZXZlbnQ6IGFueSk6IFJlc3BvbnNpYmlsaXR5IHwgbnVsbCB7XG4gICAgY29uc29sZS5sb2coJ2V2ZW50JywgZXZlbnQpO1xuICAgIGNvbnN0IHBheWxvYWQ6IFJlc3BvbnNpYmlsaXR5ID0ge1xuICAgICAgdGl0bGU6IGV2ZW50LnJlcG9ydF9uYW1lLFxuICAgICAga2V5OiBldmVudC5pc19rZXlfY29tcGxpYW5jZSxcbiAgICAgIHJpc2tDbGFzczogdGhpcy5nZXRSaXNrQ2xhc3MoZXZlbnQucmlza19jbGFzcyksXG4gICAgICBub3RlczogZXZlbnQucmVtYXJrcyxcbiAgICAgIG9iamVjdGl2ZTogZXZlbnQub2JqZWN0aXZlLFxuICAgICAgZnJlcXVlbmN5OiBldmVudC5mcmVxdWVuY3ksXG4gICAgICBhc3NpZ25vcjogZXZlbnQubWVtYmVyX2lkLFxuICAgICAgYXNzaWduZWU6IHtcbiAgICAgICAgdHlwZTogIGV2ZW50LmlzR3JvdXBBc3NpZ25UbyA/ICdhbnknIDogJ2FsbCcsXG4gICAgICAgIHVzZXJJZDogZXZlbnQuYXNzaWduZWVfbWVtYmVyX2lkPy5zcGxpdCgnLCcpLFxuICAgICAgICB1c2VyR3JvdXBJZDogZXZlbnQuaXNHcm91cEFzc2lnblRvID9ldmVudC51c2VyR3JvdXBJZHM/LmFzc2lnbmVlQW55b25lR3JvdXBJZHMgOiAgZXZlbnQudXNlckdyb3VwSWRzPy5hc3NpZ25lZUFsbEdyb3VwSWRzc1xuICAgICAgfSxcbiAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiBldmVudC5yZXNwb25zaWJpbGl0eUNlbnRlckFycj8ubGVuZ3RoID8ge1xuICAgICAgICB0eXBlOiAgZXZlbnQucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlID8gJ2FueScgOiAnYWxsJyxcbiAgICAgICAgaWQ6IGV2ZW50LnJlc3BvbnNpYmlsaXR5Q2VudGVyQXJyXG4gICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgcmV2aWV3ZXI6IGV2ZW50LnJldmlld2VyX2Fycj8ubGV2ZWwxPy5yZXZpZXdlcnM/Lmxlbmd0aCA/IHtcbiAgICAgICAgdHlwZTogZXZlbnQucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnR5cGU/LnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHVzZXJJZDogZXZlbnQucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnJldmlld2Vycz8ubWFwKChyZXZpZXdlcjogYW55KSA9PiByZXZpZXdlcj8ubWVtYmVyX2lkKSxcbiAgICAgICAgZnJlcXVlbmN5OiB7XG4gICAgICAgICAgY29tcGxldGVCeTogZXZlbnQ/LnJldmlld19hZnRlcl9kYXlzLFxuICAgICAgICAgIGVuZEFmdGVyOiBldmVudD8ucmV2aWV3X2ZhaWxlZF9hZnRlcl9kYXlzXG4gICAgICAgIH1cbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIG92ZXJzZWVyOiB0aGlzLmdldE92ZXJzZWVyKGV2ZW50KSxcbiAgICAgIGV2aWRlbmNlOiB7XG4gICAgICAgIHJlcXVpcmVkOiBldmVudC5yZXBvcnRfdXBsb2FkX2ZsYWcsXG4gICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgIHR5cGU6IGV2ZW50LnJlcG9ydF9mb3JtYXQ/Lmxlbmd0aCA/ICdmaWxlJyA6IChldmVudC5saW5rX2Zvcl9kZXRhaWxzPy5sZW5ndGggPyAnbGluaycgOiAnJyksXG4gICAgICAgICAgZGF0YTogZXZlbnQ/LnJlcG9ydF9mb3JtYXQ/Lmxlbmd0aCA/IGV2ZW50LnJlcG9ydF9mb3JtYXQgOiBldmVudD8ubGlua19mb3JfZGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvZ3JhbToge2lkOiB0aGlzLnRyYW5zZm9ybURhdGEoZXZlbnQuc2VsZWN0ZWRDYXRlZ29yeSksIHRhZ3M6IEpTT04ucGFyc2UoZXZlbnQuY3VzdG9tX3RhZ3MpLFxuICAgICAgfSxcbiAgICAgIGdyY09iamVjdElkOiBldmVudC5saW5rZWRfR1JDX2lkcyxcbiAgICAgIGFzc2Vzc21lbnRJZDogZXZlbnQuYXNzZXNzbWVudD8uYXNzZXNzbWVudF9pZCxcbiAgICAgIFxuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZDtcbiAgfVxuXG4gIGdldE92ZXJzZWVyKGV2ZW50OiBhbnkpIHtcbiAgICBpZihldmVudC5jY19tZW1iZXJfZW1haWw/Lmxlbmd0aCB8fCBldmVudC5mYWlsdXJlX2NjX21lbWJlcl9lbWFpbD8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2Vzczoge1xuICAgICAgICAgICAgdXNlcklkOiBldmVudC5jY19tZW1iZXJfZW1haWw/LnNwbGl0KCcsJyk/LmZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgICB1c2VyR3JvdXBJZDogZXZlbnQudXNlckdyb3VwSWRzPy5jY0VtYWlsR3JvdXBJZHNcbiAgICAgICAgfSxcbiAgICAgICAgZmFpbDoge1xuICAgICAgICAgIHVzZXJJZDogZXZlbnQuZmFpbHVyZV9jY19tZW1iZXJfZW1haWw/LnNwbGl0KCcsJyk/LmZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgICB1c2VyR3JvdXBJZDogZXZlbnQudXNlckdyb3VwSWRzPy5mYWlsdXJlQ0NFbWFpbEdyb3VwSWRzXG4gICAgICAgIH1cbiAgICAgfVxuICAgfSBcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBnZXRSaXNrQ2xhc3Mocmlza0NsYXNzOiAwIHwgMSB8IDIgfCAzKTogJ2xvdycgfCAnbG93X21lZGl1bScgfCAnbWVkaXVtX2hpZ2gnIHwgJ2hpZ2gnICB7XG4gICAgY29uc3Qgcmlza0NsYXNzZXM6IFJlY29yZDxudW1iZXIsICdsb3cnIHwgJ2xvd19tZWRpdW0nIHwgJ21lZGl1bV9oaWdoJyB8ICdoaWdoJz4gPSB7XG4gICAgICAwOiAnbG93JyxcbiAgICAgIDE6ICdsb3dfbWVkaXVtJyxcbiAgICAgIDI6ICdtZWRpdW1faGlnaCcsXG4gICAgICAzOiAnaGlnaCdcbiAgICB9O1xuICAgIHJldHVybiByaXNrQ2xhc3Nlc1tyaXNrQ2xhc3NdO1xuICB9XG5cbiAgXG4gIHRyYW5zZm9ybURhdGEoaW5wdXQ6IGFueSkge1xuICAgIGxldCByZXN1bHQ6IGFueSA9IHt9O1xuICAgT2JqZWN0LmVudHJpZXMoaW5wdXQpLmZvckVhY2goKFtrZXksIHZhbHVlXTogYW55KSA9PiB7XG4gICAgcmVzdWx0W2tleS50b1N0cmluZygpXSA9IHZhbHVlLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmlkKTtcbiAgIH0pO1xuICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldEFsbFJlc3BvbnNpYmlsaXRpZXMoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4oXG4gICAgICB0aGlzLmVudi5jb21wbGlhbmNlR2V0ICsgYHNhaWxzUmVzcG9uc2liaWxpdGllc0xpc3QmcGFnZT0ke3RoaXMucmVzcG9uc2liaWxpdHlQYWdlTnVtYmVyfSZsaW1pdD0tMWAsXG4gICAgICB7IGhlYWRlcnMgfVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
415
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2liaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXhELE9BQU8sRUFBRSxlQUFlLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQUt2RCxNQUFNLE9BQU8scUJBQXFCO0lBaUJoQyxZQUNVLElBQWdCLEVBQ2hCLFdBQXdCLEVBQ3BCLE1BQXVCO1FBRjNCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFqQmxDLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBRWpCLGVBQVUsR0FBeUIsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUM7UUFDekQsV0FBTSxHQUF5QixJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUM1RCxpQkFBWSxHQUF5QixJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUNsRSwwQkFBcUIsR0FBeUIsSUFBSSxlQUFlLENBQ3RFLEVBQUUsQ0FDSCxDQUFDO1FBQ0ssY0FBUyxHQUF5QixJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUMvRCwwQkFBcUIsR0FBeUIsSUFBSSxlQUFlLENBQ3RFLEVBQUUsQ0FDSCxDQUFDO1FBQ00saUJBQVksR0FBeUIsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7UUFDcEUsaUJBQVks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QUFPLENBQUM7SUFDakIsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUF3QjtRQUNuQyxNQUFNLFdBQVcsR0FBa0U7WUFDakYsQ0FBQyxFQUFFLEtBQUs7WUFDUixDQUFDLEVBQUUsWUFBWTtZQUNmLENBQUMsRUFBRSxhQUFhO1lBQ2hCLENBQUMsRUFBRSxNQUFNO1NBQ1YsQ0FBQztRQUNGLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7K0dBNW1CVSxxQkFBcUI7bUhBQXJCLHFCQUFxQixjQUZwQixNQUFNOzs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFxQkksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgcmV0cnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9ucyB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb25zJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXNzZXNzbWVudExpc3QgfSBmcm9tICcuLi9zaGFyZWRDb21wb25lbnRzL2Fzc2Vzc21lbnQtbGlzdC9zZXJ2aWNlL2Fzc2Vzc21lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZXNwb25zaWJpbHR5LmludGVyZmFjZSc7XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIHtcbiAgZW52ITogYW55O1xuICBkYXRhUGVyUGFnZSA9IDMwO1xuXG4gIGdyY093bmVycyQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KFtdKTtcbiAgcHVibGljIFJDTGlzdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oW10pO1xuICBwdWJsaWMgQXNzaWdub3JMaXN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihbXSk7XG4gIHB1YmxpYyBBc3N1cmFuY2VMaXN0Rm9yQXVkaXQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KFxuICAgIFtdXG4gICk7XG4gIHB1YmxpYyBHcm91cExpc3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KFtdKTtcbiAgcHVibGljIEFzc3VyYW5jZUNhdGVnb3J5TGlzdDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oXG4gICAgW11cbiAgKTtcbiAgcHJpdmF0ZSBvdmVyc2Vlckxpc3Q6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuICBwcml2YXRlIHBvbGljeUdyb3VwczogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIGNvbmZpZz86IENvbmZpZ3VyYXRpb25zXG4gICkge1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIHRoaXMuZW52ID0gY29uZmlnLmVudkNvbmZpZztcbiAgICB9XG4gIH1cblxuICBnZXRSZXNwb25zaWJpbGl0eUNlbnRlckxpc3QocGFyYW1zPzogSHR0cFBhcmFtcykge1xuICAgIGlmICh0aGlzLlJDTGlzdC5nZXRWYWx1ZSgpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuUkNMaXN0LmdldFZhbHVlKCkpO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnY/LmNvbXBsaWFuY2VHZXQgKyAncmVzcG9uc2liaWxpdHlDZW50ZXJUcmVlJywge1xuICAgICAgICBwYXJhbXMsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgICAgdGhpcy5SQ0xpc3QubmV4dChyZXMpO1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBnZXRPcmdhbml6YXRpb25Hcm91cHMocGFyYW1zPzogSHR0cFBhcmFtcykge1xuICAgIGlmICh0aGlzLkdyb3VwTGlzdC5nZXRWYWx1ZSgpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuR3JvdXBMaXN0LmdldFZhbHVlKCkpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KFxuICAgICAgICB0aGlzLmVudi5vcmdhbml6YXRpb25HZXQgKyAnZ3JvdXBzTGlzdCZzdGF0dXM9MSZ0eXBlPWNvbXBsaWFuY2UnLFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICAgIHRoaXMuR3JvdXBMaXN0Lm5leHQocmVzKTtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5cbiAgZ2V0T3JnYW5pemF0aW9uUG9saWN5R3JvdXBzKHBhcmFtcz86IEh0dHBQYXJhbXMpIHtcbiAgICBpZiAodGhpcy5wb2xpY3lHcm91cHM/LmdldFZhbHVlKCkpIHtcbiAgICAgIHJldHVybiBvZih0aGlzLnBvbGljeUdyb3Vwcz8udmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KFxuICAgICAgICB0aGlzLmVudi5vcmdhbml6YXRpb25HZXQgK1xuICAgICAgICAgICdncm91cHNMaXN0JnBlcm1UeXBlPW1hbmFnZVBvbGljaWVzJmZldGNoX2FsbD10cnVlJyxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9XG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXMpID0+IHtcbiAgICAgICAgICB0aGlzLnBvbGljeUdyb3Vwcy5uZXh0KHJlcyk7XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5cbiAgZ2V0T3JnYW5pemF0aW9uT3ZlcnNlZXJzR3JvdXBzKHBhcmFtcz86IEh0dHBQYXJhbXMpIHtcbiAgICBpZiAodGhpcy5vdmVyc2Vlckxpc3Q/LmdldFZhbHVlKCkpIHtcbiAgICAgIHJldHVybiBvZih0aGlzLm92ZXJzZWVyTGlzdD8udmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KHRoaXMuZW52Lm9yZ2FuaXphdGlvbkdldCArICdncm91cHNMaXN0JmZldGNoX2FsbD10cnVlJywge1xuICAgICAgICBwYXJhbXMsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgICAgdGhpcy5vdmVyc2Vlckxpc3QubmV4dChyZXMpO1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIGdldE9yZ2FuaXphdGlvblVzZXJzKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnYub3JnYW5pemF0aW9uR2V0ICsgJ29yZ2FuaXphdGlvblVzZXJzJywge1xuICAgICAgICBoZWFkZXJzLFxuICAgICAgfSlcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIGdldE9yZ2FuaXphdGlvblBlb3BsZShwYXJhbXM/OiBIdHRwUGFyYW1zKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KHRoaXMuZW52Lm9yZ2FuaXphdGlvbkdldCArICdwZW9wbGUnLCB7XG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0pXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBnZXRBc3NpZ25vcnNMaXN0KHBhcmFtcz86IEh0dHBQYXJhbXMpIHtcbiAgICBpZiAodGhpcy5Bc3NpZ25vckxpc3QuZ2V0VmFsdWUoKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBvZih0aGlzLkFzc2lnbm9yTGlzdC5nZXRWYWx1ZSgpKTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PGFueVtdPihcbiAgICAgICAgdGhpcy5lbnY/Lm9yZ2FuaXphdGlvbkdldCArICdvcmdhbml6YXRpb25Vc2VycyZpc09uQmVoYWxmPTEnLFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICAgIHRoaXMuQXNzaWdub3JMaXN0Lm5leHQocmVzKTtcbiAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5cbiAgZ2V0Q2F0ZWdvcmllc0xpc3QoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PGFueVtdPihcbiAgICAgICAgdGhpcy5lbnY/LmNvbXBsaWFuY2VHZXQgKyAnY29tcGxpYW5jZUNhdGVnb3J5L0NhdGVnb3J5TGlzdFRyZWUnLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG4gIGdldFByb2dyYW1zTGlzdChwYXJhbXM6IEh0dHBQYXJhbXMsIGlkcz86IGFueSkge1xuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIGNvbnN0IHByb2dyYW1JZCA9IHsgcHJvZ3JhbUlkOiBpZHMgfTtcbiAgICBpZiAoaWRzPy5sZW5ndGgpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLmFwcGVuZCgncGF5bG9hZC1vYmplY3QnLCBKU09OLnN0cmluZ2lmeShwcm9ncmFtSWQpKTtcblxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAucG9zdDxhbnlbXT4oXG4gICAgICAgICAgdGhpcy5lbnY/LmNvbXBsaWFuY2VQb3N0ICsgJ2NvbXBsaWFuY2VDYXRlZ29yeS9wcm9ncmFtTGlzdCcsXG4gICAgICAgICAgcHJvZ3JhbUlkLFxuICAgICAgICAgIHsgcGFyYW1zLCBoZWFkZXJzIH1cbiAgICAgICAgKVxuICAgICAgICAucGlwZShyZXRyeSgyKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnYuY29tcGxpYW5jZUdldCArICdjb21wbGlhbmNlQ2F0ZWdvcnkvcHJvZ3JhbUxpc3QnLCB7XG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgIH0pXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBnZXRQcm9ncmFtc0xpc3RDb3VudChwYXJhbXM6IEh0dHBQYXJhbXMsIGlkcz86IGFueSkge1xuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KFxuICAgICAgICB0aGlzLmVudi5jb21wbGlhbmNlR2V0ICsgJ2NvbXBsaWFuY2VDYXRlZ29yeS9wcm9ncmFtTGlzdENvdW50JyxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9XG4gICAgICApXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cbiAgZ2V0Q2F0ZWdvcmllc1VuZGVyUHJvZ3JhbShwYXJhbXM6IEh0dHBQYXJhbXMpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KFxuICAgICAgICB0aGlzLmVudi5jb21wbGlhbmNlR2V0ICsgJ2NvbXBsaWFuY2VDYXRlZ29yeS9DYXRlZ29yeUxpc3RUcmVlJyxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9XG4gICAgICApXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cbiAgZ2V0QXNzdXJhbmNlKCkge1xuICAgIGlmICh0aGlzLkFzc3VyYW5jZUNhdGVnb3J5TGlzdC5nZXRWYWx1ZSgpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuQXNzdXJhbmNlQ2F0ZWdvcnlMaXN0LmdldFZhbHVlKCkpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KHRoaXMuZW52LmFzc3VyYW5jZUdldCArICdjYXRlZ29yeS9saXN0JmlkPTEnLCB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgICAgdGhpcy5Bc3N1cmFuY2VDYXRlZ29yeUxpc3QubmV4dChyZXMpO1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBnZXRBc3N1cmFuY2VGb3JSZXF1aXJlc0F1ZGl0KCkge1xuICAgIGlmICh0aGlzLkFzc3VyYW5jZUxpc3RGb3JBdWRpdC5nZXRWYWx1ZSgpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuQXNzdXJhbmNlTGlzdEZvckF1ZGl0LmdldFZhbHVlKCkpO1xuICAgIH1cbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KFxuICAgICAgICB0aGlzLmVudi5hc3N1cmFuY2VBcGkgKyAnQXVkaXQvQ2F0ZWdvcnkvTGlzdC8/bW9kZT1lbnRydXN0X21vZHVsZScsXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICB9XG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXMpID0+IHtcbiAgICAgICAgICB0aGlzLkFzc3VyYW5jZUxpc3RGb3JBdWRpdC5uZXh0KHJlcyk7XG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIGdldFJDRGV0YWlsc09mRnJhbWV3b3JrKHJjX2lkOiBhbnksIGNhdGVnb3J5X2lkOiBhbnkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5lbnYuY29tcGxpYW5jZUdldCArXG4gICAgICAgICdjb21wbGlhbmNlQ2F0ZWdvcnkvQ2F0ZWdvcnlSQ1RyZWVCeUlkJmlkPScgK1xuICAgICAgICBjYXRlZ29yeV9pZCArXG4gICAgICAgICcmcmNfaWQ9JyArXG4gICAgICAgIHJjX2lkLFxuICAgICAgeyBoZWFkZXJzIH1cbiAgICApO1xuICB9XG5cbiAgc3VibWl0RW50cnVzdChlbnRydXN0X2JvZHk6IGFueSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5lbnYuY29tcGxpYW5jZVBvc3QgKyAnY3JlYXRlUmVwb3J0JyxcbiAgICAgIGVudHJ1c3RfYm9keSxcbiAgICAgIHsgaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuICB1cGRhdGVFbnRydXN0KGVudHJ1c3RfYm9keTogYW55LCBvYmplY3RfaWQ6IGFueSwgaXNEZWxlZ2F0ZTogYW55KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLmVudi5jb21wbGlhbmNlUG9zdCArXG4gICAgICAgICdjcmVhdGVSZXBvcnQmcmVwb3J0SWQ9JyArXG4gICAgICAgIG9iamVjdF9pZCArXG4gICAgICAgICcmaXNEZWxlZ2F0ZT0wJyxcbiAgICAgIGVudHJ1c3RfYm9keSxcbiAgICAgIHsgaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuXG4gIGVkaXRSZXNwb25zaWJpbGl0eShvYmplY3RJZDogYW55KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICB0aGlzLmVudi5jb21wbGlhbmNlR2V0ICsgJ2NvbXBsaWFuY2VSZXBvcnQvcmVwb3J0QnlJZCZpZD0nICsgb2JqZWN0SWQsXG4gICAgICAgIHsgaGVhZGVycyB9XG4gICAgICApXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBhZGRCdWxrUmVzcG9uc2liaWxpdHkoZW50cnVzdF9ib2R5OiBhbnkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuZW52LmNvbXBsaWFuY2VQb3N0ICsgJ2ltcG9ydC9jcmVhdGUnLFxuICAgICAgZW50cnVzdF9ib2R5LFxuICAgICAgeyBoZWFkZXJzIH1cbiAgICApO1xuICB9XG5cbiAgdXBsb2FkVG9Ob2RlKHBheWxvYWQ6IGFueSwgZGVzOiBhbnkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIC8vIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnlbXT4odGhpcy5lbnYuZmlsZVVwbG9hZEVuZFBvaW50ICsgJ3Jpc2svcmVzcG9uc2liaWxpdHlDZW50ZXJMaXN0JywgeyByY19pZF9hcnI6IHJjQXJyYXkgPz8gW10gfSwgeyBoZWFkZXJzIH0pLnBpcGUocmV0cnkoMikpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KHRoaXMuZW52LmZpbGVVcGxvYWRFbmRQb2ludCArIGRlcywgcGF5bG9hZCwge1xuICAgICAgaGVhZGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIGZpbGVzVXBsb2FkaW5nOiBhbnlbXSA9IFtdO1xuICBmaWxlc1VwbG9hZGVkOiBhbnlbXSA9IFtdO1xuICBmaWxlc1VwbG9hZGVkQW5kVXBsb2FkaW5nOiBhbnlbXSA9IFtdO1xuXG4gIGdldENhdGVnb3J5RGV0YWlsc0J5SWQoaWQ6IGFueSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4oXG4gICAgICAgIHRoaXMuZW52LmNvbXBsaWFuY2VHZXQgKyAnY29tcGxpYW5jZUNhdGVnb3J5L0NhdGVnb3J5VHJlZUJ5SWQmaWQ9JyArIGlkLFxuICAgICAgICB7IGhlYWRlcnMgfVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5cbiAgZ2V0RnJhbWVXb3JrQ291bnQocGFyYW1zPzogSHR0cFBhcmFtcykge1xuICAgIGxldCBodHRwT3B0aW9uczogYW55ID0ge307XG4gICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICBodHRwT3B0aW9ucy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KHRoaXMuZW52LnByb2dyYW1FbmRwb2ludCArICcvZnJhbWV3b3JrY291bnQnLCBodHRwT3B0aW9ucylcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIGdldEZyYW1lV29ya0xpc3QocGFyYW1zOiBIdHRwUGFyYW1zKSB7XG4gICAgbGV0IGh0dHBPcHRpb25zOiBhbnkgPSB7fTtcbiAgICBodHRwT3B0aW9ucy5oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIGlmIChwYXJhbXMpIHtcbiAgICAgIGh0dHBPcHRpb25zLnBhcmFtcyA9IHBhcmFtcztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnlbXT4odGhpcy5lbnYucHJvZ3JhbUVuZHBvaW50ICsgJy9mcmFtZXdvcmsnLCBodHRwT3B0aW9ucylcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuICBnZXRGcmFtZXdvcmtTdWJDYXRlZ29yaWVzKGlkOiBhbnksIHBhcmFtczogSHR0cFBhcmFtcykge1xuICAgIGxldCBodHRwT3B0aW9uczogYW55ID0ge307XG4gICAgaHR0cE9wdGlvbnMuaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICBpZiAocGFyYW1zKSB7XG4gICAgICBodHRwT3B0aW9ucy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8YW55W10+KHRoaXMuZW52LnByb2dyYW1FbmRwb2ludCArICcvZnJhbWV3b3JrLycgKyBpZCwgaHR0cE9wdGlvbnMpXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBnZXRGcmFtZXdvcmtDb250cm9scyhpZDogYW55LCBwYXJhbXM6IEh0dHBQYXJhbXMpIHtcbiAgICBsZXQgaHR0cE9wdGlvbnM6IGFueSA9IHt9O1xuICAgIGh0dHBPcHRpb25zLmhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgaWYgKHBhcmFtcykge1xuICAgICAgaHR0cE9wdGlvbnMucGFyYW1zID0gcGFyYW1zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PGFueVtdPih0aGlzLmVudi5wcm9ncmFtRW5kcG9pbnQgKyAnL2NvbnRyb2xzLycgKyBpZCwgaHR0cE9wdGlvbnMpXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBmaWxlVXBsb2FkKGZpbGU6IGFueSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZW52LmNvbXBsaWFuY2VQb3N0ICsgJ2ZpbGUvdXBsb2FkJywgZmlsZSwge1xuICAgICAgaGVhZGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFzc2Vzc21lbnRDYXRlZ29yeShwYXlsb2FkOiBhbnksIHByb2dyYW1faWRzPzogc3RyaW5nKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdChcbiAgICAgICAgdGhpcy5lbnYuYXNzZXNzbWVudEVucG9pbnQgK1xuICAgICAgICAgICdjYXRlZ29yeS9saXN0JmlzQ3JlYXRlUmVzcG9uc2liaWxpdHk9dHJ1ZScgK1xuICAgICAgICAgIChwcm9ncmFtX2lkcyA/ICcmcHJvZ3JhbV9pZHM9JyArIHByb2dyYW1faWRzIDogJycpLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB7IGhlYWRlcnMgfVxuICAgICAgKVxuICAgICAgLnBpcGUocmV0cnkoMikpO1xuICB9XG5cbiAgZ2V0QXNzZXNzbWVudExpc3QocGF5bG9hZDogYW55LCBpZDogc3RyaW5nLCBwcm9ncmFtX2lkcz86IHN0cmluZykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8QXJyYXk8QXNzZXNzbWVudExpc3Q+PihcbiAgICAgICAgdGhpcy5lbnYuYXNzZXNzbWVudEVucG9pbnQgK1xuICAgICAgICAgICdhc3Nlc3NtZW50L3NlbGVjdEFzc2Vzc21lbnQmaXNDcmVhdGVSZXNwb25zaWJpbGl0eT10cnVlJmNhdGlkPScgK1xuICAgICAgICAgIGlkICtcbiAgICAgICAgICAocHJvZ3JhbV9pZHMgPyAnJnByb2dyYW1faWRzPScgKyBwcm9ncmFtX2lkcyA6ICcnKSxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgeyBoZWFkZXJzIH1cbiAgICAgIClcbiAgICAgIC5waXBlKHJldHJ5KDIpKTtcbiAgfVxuXG4gIGdldEFzc2Vzc21lbnREZXRhaWxzQnlJRChpZDogc3RyaW5nKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxBcnJheTxBc3Nlc3NtZW50TGlzdD4+KFxuICAgICAgICB0aGlzLmVudi5hc3Nlc3NtZW50RW5wb2ludCArICdhc3Nlc3NtZW50L2dldEFzc2Vzc21lbnRCeUlkJmlkPScgKyBpZCxcbiAgICAgICAge30sXG4gICAgICAgIHsgaGVhZGVycyB9XG4gICAgICApXG4gICAgICAucGlwZShyZXRyeSgyKSk7XG4gIH1cblxuICBnZXRHUkNPd25lckxpc3QoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4oXG4gICAgICB0aGlzLmVudi5vcmdhbml6YXRpb25HZXQgK1xuICAgICAgICAnb3JnYW5pemF0aW9uTWVtYmVycyZpc0dyY09iamVjdD10cnVlJnR5cGU9YWxsJyxcbiAgICAgIHsgaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuXG4gIGdldE9iamVjdFR5cGUoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpLnNldChcbiAgICAgICd0b2tlbicsXG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldEF1dGhvcml6YXRpb25Ub2tlbigpXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnlbXT4oXG4gICAgICB0aGlzLmVudi5ncmNfZ2V0ICsgJ2dyY09iamVjdC9nZXRHUkNUeXBlTGlzdCZwcm9qZWN0ZWQ9MScsXG4gICAgICB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGdldEdSQ09iamVjdERldGFpbHMoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55W10+KFxuICAgICAgdGhpcy5lbnYuZ3JjX2dldCArICdncmMvZ3JjQnlJZCZpc0VkaXQ9dHJ1ZSZpZD0nICsgaWQsXG4gICAgICB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGFkZEdSQ09iamVjdChwYXlsb2FkOiBhbnkpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCkuc2V0KFxuICAgICAgJ3Rva2VuJyxcbiAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvblRva2VuKClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnlbXT4odGhpcy5lbnYuZ3JjX2dldCArICdncmMvc2F2ZUdSQycsIHBheWxvYWQsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVHUkNPYmplY3QocGF5bG9hZDogYW55LCBfaWQ6IHN0cmluZykge1xuICAgIHBheWxvYWQuX2lkID0gX2lkO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKS5zZXQoXG4gICAgICAndG9rZW4nLFxuICAgICAgdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3JpemF0aW9uVG9rZW4oKVxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55W10+KHRoaXMuZW52LmdyY19nZXQgKyAnZ3JjL3VwZGF0ZUdSQycsIHBheWxvYWQsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgfSk7XG4gIH1cblxuICBidWlsZFJlc3BvbnNpYmlsaXR5UGF5bG9hZChldmVudDogYW55KTogUmVzcG9uc2liaWxpdHkgfCBudWxsIHtcbiAgICBjb25zb2xlLmxvZyhldmVudCwgJ2V2ZW50Jyk7XG4gICAgY29uc3QgcGF5bG9hZDogUmVzcG9uc2liaWxpdHkgPSB7XG4gICAgICB0aXRsZTogZXZlbnQucmVwb3J0X25hbWUsXG4gICAgICBrZXk6IGV2ZW50LmlzX2tleV9jb21wbGlhbmNlLFxuICAgICAgcmlza0NsYXNzOiB0aGlzLmdldFJpc2tDbGFzcyhldmVudC5yaXNrX2NsYXNzKSxcbiAgICAgIG5vdGVzOiBldmVudC5yZW1hcmtzLFxuICAgICAgb2JqZWN0aXZlOiBldmVudC5vYmplY3RpdmUsXG4gICAgICBmcmVxdWVuY3k6IGV2ZW50LmZyZXF1ZW5jeSxcbiAgICAgIGFzc2lnbm9ySWQ6IGV2ZW50Lm1lbWJlcl9pZCxcbiAgICAgIGFzc2lnbmVlOiB7XG4gICAgICAgIHR5cGU6ICBldmVudC5pc0dyb3VwQXNzaWduVG8gPyAnYW55X29uZScgOiAnYWxsJyxcbiAgICAgICAgdXNlcklkOiBldmVudC5hc3NpZ25lZV9tZW1iZXJfaWQ/LnNwbGl0KCcsJykubWFwKE51bWJlciksXG4gICAgICAgIHVzZXJHcm91cElkOiBldmVudC5pc0dyb3VwQXNzaWduVG8gP2V2ZW50LnVzZXJHcm91cElkcz8uYXNzaWduZWVBbnlvbmVHcm91cElkcyA6ICBldmVudC51c2VyR3JvdXBJZHM/LmFzc2lnbmVlQWxsR3JvdXBJZHNzXG4gICAgICB9LFxuICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHtcbiAgICAgICAgdHlwZTogIGV2ZW50LnJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSA/ICdhbnknIDogJ2FsbCcsXG4gICAgICAgIGlkOiBldmVudC5yZXNwb25zaWJpbGl0eUNlbnRlckFyclxuICAgICAgfSxcbiAgICAgIHJldmlld2VyOiB7XG4gICAgICAgIHR5cGU6IGV2ZW50LnJldmlld2VyX2Fycj8udHlwZT8udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgdXNlcklkOiBldmVudC5yZXZpZXdlcl9hcnI/LmxldmVsMT8ucmV2aWV3ZXJzPy5tYXAoKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyPy5tZW1iZXJfaWQpLFxuICAgICAgICBmcmVxdWVuY3k6IHtcbiAgICAgICAgICBkdWVEYXlzOiBldmVudD8ucmV2aWV3X2FmdGVyX2RheXMsXG4gICAgICAgICAgZXh0ZW5zaW9uRGF5czogZXZlbnQ/LnJldmlld19mYWlsZWRfYWZ0ZXJfZGF5c1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb3ZlcnNlZXI6IHtcbiAgICAgICAgc3VjY2Vzczoge1xuICAgICAgICAgIHVzZXJJZDogZXZlbnQuY2NfbWVtYmVyX2VtYWlsPy5zcGxpdCgnLCcpPy5maWx0ZXIoQm9vbGVhbik/Lm1hcChOdW1iZXIpLFxuICAgICAgICAgIHVzZXJHcm91cElkOiBldmVudC51c2VyR3JvdXBJZHM/LmNjRW1haWxHcm91cElkc1xuICAgICAgICB9LFxuICAgICAgICBmYWlsOiB7XG4gICAgICAgICAgdXNlcklkOiBldmVudC5mYWlsdXJlX2NjX21lbWJlcl9lbWFpbD8uc3BsaXQoJywnKT8uZmlsdGVyKEJvb2xlYW4pPy5tYXAoTnVtYmVyKSxcbiAgICAgICAgICB1c2VyR3JvdXBJZDogZXZlbnQudXNlckdyb3VwSWRzPy5mYWlsdXJlQ0NFbWFpbEdyb3VwSWRzXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBldmlkZW5jZToge1xuICAgICAgICByZXF1aXJlZDogZXZlbnQucmVwb3J0X3VwbG9hZF9mbGFnLFxuICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICB0eXBlOiBldmVudC5yZXBvcnRfZm9ybWF0Py5sZW5ndGggPyAnZmlsZScgOiAoZXZlbnQubGlua19mb3JfZGV0YWlscz8ubGVuZ3RoID8gJ2xpbmsnIDogJycpLFxuICAgICAgICAgIGRhdGE6IGV2ZW50Py5yZXBvcnRfZm9ybWF0Py5sZW5ndGggPyBldmVudC5yZXBvcnRfZm9ybWF0IDogZXZlbnQ/LmxpbmtfZm9yX2RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRhZ3M6IEpTT04ucGFyc2UoZXZlbnQuY3VzdG9tX3RhZ3MpLFxuICAgICAgcHJvZ3JhbTogZXZlbnQuY2F0ZWdvcnlfaWQ/LnNwbGl0KCcsJyk/LmZpbHRlcihCb29sZWFuKT8ubWFwKE51bWJlciksXG4gICAgICBncmNPYmplY3RJZDogZXZlbnQubGlua2VkX0dSQ19pZHMsXG4gICAgICBhc3Nlc3NtZW50SWQ6IGV2ZW50LmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnRfaWQsXG4gICAgICBcbiAgICB9XG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cblxuICBnZXRSaXNrQ2xhc3Mocmlza0NsYXNzOiAwIHwgMSB8IDIgfCAzKTogJ2xvdycgfCAnbG93LW1lZGl1bScgfCAnbWVkaXVtLWhpZ2gnIHwgJ2hpZ2gnICB7XG4gICAgY29uc3Qgcmlza0NsYXNzZXM6IFJlY29yZDxudW1iZXIsICdsb3cnIHwgJ2xvdy1tZWRpdW0nIHwgJ21lZGl1bS1oaWdoJyB8ICdoaWdoJz4gPSB7XG4gICAgICAwOiAnbG93JyxcbiAgICAgIDE6ICdsb3ctbWVkaXVtJyxcbiAgICAgIDI6ICdtZWRpdW0taGlnaCcsXG4gICAgICAzOiAnaGlnaCdcbiAgICB9O1xuICAgIHJldHVybiByaXNrQ2xhc3Nlc1tyaXNrQ2xhc3NdO1xuICB9XG59XG4iXX0=