ngx-histaff-alpha 2.2.0 → 2.2.2

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 (55) hide show
  1. package/esm2022/lib/app/enum/EnumFormBaseContolType.mjs +4 -1
  2. package/esm2022/lib/app/interfaces/IQueryListRequest.mjs +1 -1
  3. package/esm2022/lib/app/libraries/contractinfor/contractinfor.component.mjs +2 -2
  4. package/esm2022/lib/app/libraries/core-contract-seeker/core-contract-seeker/core-contract-seeker.component.mjs +9 -4
  5. package/esm2022/lib/app/libraries/core-control/core-control/core-control.component.mjs +3 -3
  6. package/esm2022/lib/app/libraries/core-control-no-grid-buffer/core-control-no-grid-buffer/core-control-no-grid-buffer.component.mjs +2 -2
  7. package/esm2022/lib/app/libraries/core-employee-seeker/core-employee-seeker/core-employee-seeker.component.mjs +8 -5
  8. package/esm2022/lib/app/libraries/core-form/core-form/enum-interfaces.mjs +1 -1
  9. package/esm2022/lib/app/libraries/core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component.mjs +13 -4
  10. package/esm2022/lib/app/libraries/core-job-seeker/core-job-seeker.component.mjs +9 -4
  11. package/esm2022/lib/app/libraries/core-loading-surface/core-loading-surface/core-loading-surface.component.mjs +3 -3
  12. package/esm2022/lib/app/libraries/core-mcc/core-mcc/core-mcc.component.mjs +2 -2
  13. package/esm2022/lib/app/libraries/core-org-tree/core-org-tree/core-org-tree.component.mjs +7 -4
  14. package/esm2022/lib/app/libraries/core-org-unit-seeker/core-org-unit-seeker/core-org-unit-seeker.component.mjs +9 -5
  15. package/esm2022/lib/app/libraries/core-page-list/core-page-list.component.mjs +11 -2
  16. package/esm2022/lib/app/libraries/core-permission/core-permission/core-permission.component.mjs +2 -2
  17. package/esm2022/lib/app/libraries/core-permission-actions/core-permission-actions/core-permission-actions.component.mjs +2 -2
  18. package/esm2022/lib/app/libraries/core-position-concurrent-seeker/core-position-concurrent-seeker/core-position-concurrent-seeker.component.mjs +9 -4
  19. package/esm2022/lib/app/libraries/core-position-seeker/core-position-seeker/core-position-seeker.component.mjs +6 -3
  20. package/esm2022/lib/app/libraries/core-table/core-table.component.mjs +4 -4
  21. package/esm2022/lib/app/libraries/core-tree-grid/core-tree-grid/core-tree-grid.component.mjs +3 -3
  22. package/esm2022/lib/app/libraries/core-wage-seeker/core-wage-seeker/core-wage-seeker.component.mjs +9 -4
  23. package/esm2022/lib/app/libraries/core-working-seeker/core-working-seeker/core-working-seeker.component.mjs +9 -4
  24. package/esm2022/lib/app/libraries/decision/decision.component.mjs +2 -2
  25. package/esm2022/lib/app/libraries/huconcurrently/huconcurrently.component.mjs +2 -2
  26. package/esm2022/lib/app/libraries/job/job.component.mjs +2 -5
  27. package/esm2022/lib/app/libraries/position/position.component.mjs +2 -2
  28. package/esm2022/lib/app/libraries/staffprofile/staffprofile.component.mjs +2 -2
  29. package/esm2022/lib/app/libraries/wage/wage.component.mjs +2 -2
  30. package/esm2022/lib/app/root/function/function.component.mjs +2 -2
  31. package/esm2022/lib/app/root/function-ignore/function-ignore/function-ignore.component.mjs +1 -1
  32. package/esm2022/lib/app/root/groupfunction/groupfunction.component.mjs +1 -1
  33. package/esm2022/lib/app/root/language/language/language.component.mjs +1 -1
  34. package/esm2022/lib/app/root/mutation-log/mutation-log/mutation-log.component.mjs +1 -1
  35. package/esm2022/lib/app/root/portal-route/portal-route.component.mjs +1 -1
  36. package/esm2022/lib/app/root/sys-action/sys-action/sys-action.component.mjs +1 -1
  37. package/esm2022/lib/app/root/sys-function-action/sys-function-action/sys-function-action.component.mjs +1 -1
  38. package/esm2022/lib/app/root/sys-module/sys-module/sys-module.component.mjs +2 -2
  39. package/fesm2022/ngx-histaff-alpha.mjs +110 -61
  40. package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
  41. package/lib/app/interfaces/IQueryListRequest.d.ts +1 -0
  42. package/lib/app/libraries/core-contract-seeker/core-contract-seeker/core-contract-seeker.component.d.ts +2 -1
  43. package/lib/app/libraries/core-employee-seeker/core-employee-seeker/core-employee-seeker.component.d.ts +2 -1
  44. package/lib/app/libraries/core-form/core-form/enum-interfaces.d.ts +15 -15
  45. package/lib/app/libraries/core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component.d.ts +3 -1
  46. package/lib/app/libraries/core-job-seeker/core-job-seeker.component.d.ts +2 -1
  47. package/lib/app/libraries/core-org-tree/core-org-tree/core-org-tree.component.d.ts +3 -2
  48. package/lib/app/libraries/core-org-unit-seeker/core-org-unit-seeker/core-org-unit-seeker.component.d.ts +3 -1
  49. package/lib/app/libraries/core-page-list/core-page-list.component.d.ts +2 -1
  50. package/lib/app/libraries/core-position-concurrent-seeker/core-position-concurrent-seeker/core-position-concurrent-seeker.component.d.ts +2 -1
  51. package/lib/app/libraries/core-position-seeker/core-position-seeker/core-position-seeker.component.d.ts +2 -1
  52. package/lib/app/libraries/core-wage-seeker/core-wage-seeker/core-wage-seeker.component.d.ts +2 -1
  53. package/lib/app/libraries/core-working-seeker/core-working-seeker/core-working-seeker.component.d.ts +2 -1
  54. package/lib/app/libraries/job/job.component.d.ts +1 -2
  55. package/package.json +1 -1
@@ -88,6 +88,7 @@ export class CorePageListComponent extends CoreFormControlBaseComponent {
88
88
  this.coreButtonGroupService = coreButtonGroupService;
89
89
  this.jsonService = jsonService;
90
90
  this.loading$ = new BehaviorSubject(false);
91
+ this.excludedIds$ = new BehaviorSubject([]);
91
92
  this.corePageHeaderButtonClick = new EventEmitter();
92
93
  this.rowClick = new EventEmitter();
93
94
  this.rowDoubleClick = new EventEmitter();
@@ -506,6 +507,12 @@ export class CorePageListComponent extends CoreFormControlBaseComponent {
506
507
  lang: x,
507
508
  });
508
509
  }));
510
+ this.subscriptions.push(this.excludedIds$.subscribe((x) => {
511
+ this.queryListRequest$.next({
512
+ ...this.queryListRequest$.value,
513
+ excludedIds: x
514
+ });
515
+ }));
509
516
  this.subscriptions.push(this.generalSearch$
510
517
  .pipe(debounceTime(500), distinctUntilChanged())
511
518
  .subscribe((x) => {
@@ -1603,7 +1610,7 @@ export class CorePageListComponent extends CoreFormControlBaseComponent {
1603
1610
  this.queryListSubscription.unsubscribe();
1604
1611
  }
1605
1612
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CorePageListComponent, deps: [{ token: i1.CorePageListService }, { token: i2.CorePageListState }, { token: i3.CorePageEditService }, { token: i4.Router }, { token: i4.ActivatedRoute }, { token: i5.MultiLanguageService }, { token: i6.AlertService }, { token: i7.AuthService }, { token: i8.AppService }, { token: i9.DialogService }, { token: i10.RoutingService }, { token: i11.LongTaskService }, { token: i12.LayoutService }, { token: i13.CoreCompositionService }, { token: i14.CoreButtonGroupService }, { token: i15.JsonService }], target: i0.ɵɵFactoryTarget.Component }); }
1606
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CorePageListComponent, isStandalone: true, selector: "core-page-list", inputs: { normalMode: "normalMode", hideHeader: "hideHeader", hideButtonGroup: "hideButtonGroup", seekerMode: "seekerMode", mccMode: "mccMode", height: "height", headerWrap: "headerWrap", headerFirstRowHeight: "headerFirstRowHeight", enableTimeZoneConverterForDateTimePeriodParameters: "enableTimeZoneConverterForDateTimePeriodParameters", showParamKit: "showParamKit", datePeriodComparisonFor: "datePeriodComparisonFor", datePeriodComparisonForLabelKey: "datePeriodComparisonForLabelKey", statusInclusionFor: "statusInclusionFor", statusInclusionForLabelKey: "statusInclusionForLabelKey", statusOptionsApi: "statusOptionsApi", hideDatePeriodComparison: "hideDatePeriodComparison", hideStatusInclusion: "hideStatusInclusion", title: "title", hasIdOfStringType: "hasIdOfStringType", hideCheck: "hideCheck", apiDefinition: "apiDefinition", columns: "columns", frozen: "frozen", inlineTools: "inlineTools", inlineToolItems: "inlineToolItems", editRoute: "editRoute", crud: "crud", showListInlineTools: "showListInlineTools", top: "top", left: "left", hideLeft: "hideLeft", outerParam$: "outerParam$", outerSort: "outerSort", outerFilterOperators: "outerFilterOperators", outerInOperators: "outerInOperators", autoResizeWithWindow: "autoResizeWithWindow", extraManualOffset: "extraManualOffset", wrap: "wrap", rowHeight: "rowHeight", selfResolveCorePageHeaderButtonClick: "selfResolveCorePageHeaderButtonClick", clearData$: "clearData$", deleteValidateFn: "deleteValidateFn", generateTemplateRequest: "generateTemplateRequest", importPreviewPath: "importPreviewPath", columnSearchDefaultOpen: "columnSearchDefaultOpen", fixedPageSize: "fixedPageSize", disableDoubleClick: "disableDoubleClick", noPaddingCell: "noPaddingCell", disableHighlightOnClick: "disableHighlightOnClick", loading$: "loading$" }, outputs: { corePageHeaderButtonClick: "corePageHeaderButtonClick", rowClick: "rowClick", rowDoubleClick: "rowDoubleClick", selectedIdsChange: "selectedIdsChange", selectedDataChange: "selectedDataChange", onInstanceCreated: "onInstanceCreated", onInputFileBase64DataReady: "onInputFileBase64DataReady" }, providers: [
1613
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.3", type: CorePageListComponent, isStandalone: true, selector: "core-page-list", inputs: { normalMode: "normalMode", hideHeader: "hideHeader", hideButtonGroup: "hideButtonGroup", seekerMode: "seekerMode", mccMode: "mccMode", height: "height", headerWrap: "headerWrap", headerFirstRowHeight: "headerFirstRowHeight", enableTimeZoneConverterForDateTimePeriodParameters: "enableTimeZoneConverterForDateTimePeriodParameters", showParamKit: "showParamKit", datePeriodComparisonFor: "datePeriodComparisonFor", datePeriodComparisonForLabelKey: "datePeriodComparisonForLabelKey", statusInclusionFor: "statusInclusionFor", statusInclusionForLabelKey: "statusInclusionForLabelKey", statusOptionsApi: "statusOptionsApi", hideDatePeriodComparison: "hideDatePeriodComparison", hideStatusInclusion: "hideStatusInclusion", title: "title", hasIdOfStringType: "hasIdOfStringType", hideCheck: "hideCheck", apiDefinition: "apiDefinition", columns: "columns", frozen: "frozen", inlineTools: "inlineTools", inlineToolItems: "inlineToolItems", editRoute: "editRoute", crud: "crud", showListInlineTools: "showListInlineTools", top: "top", left: "left", hideLeft: "hideLeft", outerParam$: "outerParam$", outerSort: "outerSort", outerFilterOperators: "outerFilterOperators", outerInOperators: "outerInOperators", autoResizeWithWindow: "autoResizeWithWindow", extraManualOffset: "extraManualOffset", wrap: "wrap", rowHeight: "rowHeight", selfResolveCorePageHeaderButtonClick: "selfResolveCorePageHeaderButtonClick", clearData$: "clearData$", deleteValidateFn: "deleteValidateFn", generateTemplateRequest: "generateTemplateRequest", importPreviewPath: "importPreviewPath", columnSearchDefaultOpen: "columnSearchDefaultOpen", fixedPageSize: "fixedPageSize", disableDoubleClick: "disableDoubleClick", noPaddingCell: "noPaddingCell", disableHighlightOnClick: "disableHighlightOnClick", loading$: "loading$", excludedIds$: "excludedIds$" }, outputs: { corePageHeaderButtonClick: "corePageHeaderButtonClick", rowClick: "rowClick", rowDoubleClick: "rowDoubleClick", selectedIdsChange: "selectedIdsChange", selectedDataChange: "selectedDataChange", onInstanceCreated: "onInstanceCreated", onInputFileBase64DataReady: "onInputFileBase64DataReady" }, providers: [
1607
1614
  {
1608
1615
  provide: NG_VALUE_ACCESSOR,
1609
1616
  multi: true,
@@ -1734,6 +1741,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
1734
1741
  type: Input
1735
1742
  }], loading$: [{
1736
1743
  type: Input
1744
+ }], excludedIds$: [{
1745
+ type: Input
1737
1746
  }], corePageHeaderButtonClick: [{
1738
1747
  type: Output
1739
1748
  }], rowClick: [{
@@ -1761,4 +1770,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
1761
1770
  type: ViewChild,
1762
1771
  args: ['fileImport']
1763
1772
  }] } });
1764
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wYWdlLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtcGFnZS1saXN0L2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBhZ2UtbGlzdC9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBb0MsU0FBUyxFQUFlLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUNuTCxPQUFPLEVBQTBCLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsR0FBNEQsTUFBTSxvQ0FBb0MsQ0FBQztBQUlsSSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBZ0IsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQztBQUN6SSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsMkJBQTJCLEVBQXVDLE1BQU0sZ0ZBQWdGLENBQUM7QUFLbEssT0FBTyxFQUFFLGtCQUFrQixFQUF3RixNQUFNLG9DQUFvQyxDQUFD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QUFTO3NCQUFqQixLQUFLO2dCQUNHLG9DQUFvQztzQkFBNUMsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVJLHlCQUF5QjtzQkFBbEMsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUVpQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ2MscUJBQXFCO3NCQUF4RCxTQUFTO3VCQUFDLHVCQUF1QjtnQkFDQSxtQkFBbUI7c0JBQXBELFNBQVM7dUJBQUMscUJBQXFCO2dCQUNQLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIFRlbXBsYXRlUmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBpc0Rldk1vZGUsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENvcmVUYWJsZUNvbXBvbmVudCwgSUNvcmVUYWJsZVRvb2xDbGlja0V2ZW50RW1pdHRlckRhdGEsIElDb3JlVGFibGVUb29sSXRlbSwgfSBmcm9tICcuLi9jb3JlLXRhYmxlL2NvcmUtdGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVBhZ2VMaXN0U2VydmljZSwgSUdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0LCBJSW1wb3J0WGxzeFRvRGJSZXF1ZXN0IH0gZnJvbSAnLi9jb3JlLXBhZ2UtbGlzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZVBhZ2VFZGl0U2VydmljZSB9IGZyb20gJy4uL2NvcmUtcGFnZS1lZGl0L2NvcmUtcGFnZS1lZGl0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZnJvbUV2ZW50LCBtYXAsIHN3aXRjaE1hcCwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29yZVBhZ2VMaXN0U3RhdGUgfSBmcm9tICcuL2NvcmUtcGFnZS1saXN0LnN0YXRlJztcclxuaW1wb3J0IHsgSUNvcmVCdXR0b25WTlMgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0lDb3JlQnV0dG9uVk5TJztcclxuaW1wb3J0IHsgRW51bUNvcmVCdXR0b25WTlNDb2RlIH0gZnJvbSAnLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9FbnVtQ29yZUJ1dHRvblZOU0NvZGUnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb3JlQ29tbW9uUGFyYW1LaXRDb21wb25lbnQsIElDb3JlQ29tbW9uUGFyYW1LaXRFdmVudEVtaXR0ZXJEYXRhIH0gZnJvbSAnLi4vY29yZS1jb21tb24tcGFyYW0ta2l0L2NvcmUtY29tbW9uLXBhcmFtLWtpdC9jb3JlLWNvbW1vbi1wYXJhbS1raXQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTG9uZ1Rhc2tTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbG9uZy10YXNrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlQ29tcG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS1jb21wb3NpdGlvbi9jb3JlLWNvbXBvc2l0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlQnV0dG9uR3JvdXBTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJQ29yZUJ1dHRvbkdyb3VwU3RhdHVzIH0gZnJvbSAnLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnVtRmlsdGVyT3BlcmF0b3IsIElGaWx0ZXJPcGVyYXRvciwgSUluT3BlcmF0b3IsIElQYWdpbmF0aW9uLCBJUXVlcnlMaXN0UmVxdWVzdCwgSVNlYXJjaEl0ZW0sIElTb3J0SXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVF1ZXJ5TGlzdFJlcXVlc3QnO1xyXG5pbXBvcnQgeyBhcGkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBFbnVtVHJhbnNsYXRlS2V5IH0gZnJvbSBcImFscGhhLWdsb2JhbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgTXVsdGlMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0aW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JvdXRpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEpzb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvanNvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgYWxlcnRPcHRpb25zLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9hbGVydE9wdGlvbnMnO1xyXG5pbXBvcnQgeyBJRm9ybWF0ZWRSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUZvcm1hdGVkUmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBJUXVlcnlMaXN0UmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lRdWVyeUxpc3RSZXNwb25zZSc7XHJcbmltcG9ydCB7IGRlZmF1bHRQYWdpbmcgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGVmYXVsdFBhZ2luZyc7XHJcbmltcG9ydCB7IElJZHNSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JSWRzUmVxdWVzdCc7XHJcbmltcG9ydCB7IElUb2dnbGVBY3RpdmVJZHNSZXF1ZXN0LCBJVG9nZ2xlQXBwcm92ZUlkc1JlcXVlc3QsIElUb25nbGVVbkFwcHJvdmVJZHNSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JVG9nZ2xlQWN0aXZlSWRzUmVxdWVzdCc7XHJcbmltcG9ydCB7IEVudW1Tb3J0RGlyZWN0aW9uIH0gZnJvbSAnLi4vLi4vZW51bS9FbnVtU29ydERpcmVjdGlvbic7XHJcbmltcG9ydCB7IElTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0JztcclxuaW1wb3J0IHsgSUNvcmVUYWJsZUNvbHVtbkl0ZW0gfSBmcm9tICcuLi9jb3JlLXRhYmxlL0lDb3JlVGFibGVDb2x1bW5JdGVtJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29yZVBhZ2luYXRpb25GdWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1wYWdpbmF0aW9uLWZ1bGwvY29yZS1wYWdpbmF0aW9uLWZ1bGwvY29yZS1wYWdpbmF0aW9uLWZ1bGwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVBhZ2VIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLXBhZ2UtaGVhZGVyL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlQ29tcG9zaXRpb25Db21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWNvbXBvc2l0aW9uL2NvcmUtY29tcG9zaXRpb24vY29yZS1jb21wb3NpdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlQXBpUHJvZ3Jlc3NDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWFwaS1wcm9ncmVzcy9jb3JlLWFwaS1wcm9ncmVzcy9jb3JlLWFwaS1wcm9ncmVzcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGdWxsc2NyZWVuTW9kYWxMb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9mdWxsc2NyZWVuLW1vZGFsLWxvYWRlci9mdWxsc2NyZWVuLW1vZGFsLWxvYWRlci5jb21wb25lbnQnO1xyXG5cclxuLyogS2hpIGtow7RuZyBjw7MgZMOybmcgbsOgbyDEkcaw4bujYyB0aWNrIGNo4buNbiwgY8OhYyBuw7p0IHNhdSBz4bq9IMSRxrDhu6NjIOG6qW4gxJFpOiAqL1xyXG5jb25zdCBFTVBUWV9TRUxFQ1RJT05fSElEREVOX0JVVFRPTjogRW51bUNvcmVCdXR0b25WTlNDb2RlW10gPSBbXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULCAvLyBT4butYVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfTE9DSywgLy8gS2jDs2FcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOTE9DSywgLy8gTeG7nyBraMOzYVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQUNUSVZBVEUsIC8vIMOBcCBk4bulbmdcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0lOQUNUSVZBVEUsIC8vIE5n4burbmcgw6FwIGThu6VuZ1xyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUkVTRVQsIC8vIFJlc2V0ICht4bqtdCBraOG6qXUpXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DT1BZLCAvLyBTYW8gY2jDqXBcclxuXHJcbiAgLy8gQ8OhYyB0aOG7gyBsb+G6oWkgaW5cclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BSSU5ULFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUFJJTlRfMkMsXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QUklOVF8yQ18yMDA4LFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUFJJTlRfMkNfOTgsXHJcbiAgLy9cclxuXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEUsIC8vIHjDs2FcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FQUFJPVkUsIC8vIHBow6ogZHV54buHdFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUkVKRUNULCAvLyB04burIGNo4buRaVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5BUFBST1ZFLCAvLyBi4buPIHBow6ogZHV54buHdFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUEVORElOR19BUFBST1ZFLCAvLyBt4bufIGNo4budIHBow6ogZHV54buHdFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfTElRVUlEQVRFX0NPTlRSQUNULCAvLyB0aGFuaCBsw70gaOG7o3AgxJHhu5NuZ1xyXG5dXHJcblxyXG4vL2RlY2xhcmUgbGV0IGNvcmVGaWxlVXRpbHM6IGFueTtcclxuLy9pbXBvcnQgeyBjb3JlRmlsZVV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2pzL2NvcmVGaWxlVXRpbHMnO1xyXG4vL2NvbnN0IGJsb2JUb0Jhc2U2NCA9IGNvcmVGaWxlVXRpbHMucHJvdG90eXBlLmJsb2JUb0Jhc2U2NDtcclxuXHJcbmNvbnN0IGJsb2JUb0Jhc2U2NCA9IGFzeW5jIChibG9iKSA9PiB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCBfKSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcclxuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdClcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYilcclxuICB9KVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlUGFnZUxpc3RBcGlEZWZpbml0aW9uIHtcclxuICBxdWVyeUxpc3RSZWxhdGl2ZVBhdGg6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVBhZ2VMaXN0U2VhcmNoT2JqZWN0IHtcclxuICBwcmV2aW91czogSVNlYXJjaEl0ZW1bXTtcclxuICBjdXJyZW50OiBJU2VhcmNoSXRlbVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlUGFnZUxpc3RFZGl0Um91dGluZyB7XHJcbiAgYXV4aWxpYXJ5OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVQYWdlTGlzdENSVUQge1xyXG4gIGRlbGV0ZUlkcz86IGFwaTtcclxuICB0b2dnbGVBY3RpdmVJZHM/OiBhcGk7XHJcbiAgdG9nZ2xlQXBwcm92ZUlkcz86IGFwaTtcclxuICB0b2dnbGVVbmFwcHJvdmVJZHM/OiBhcGk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVhsc3hJbXBvcnRPYmplY3Qge1xyXG4gIHhsc3hTaWQ6IHN0cmluZyxcclxuICB4bHN4RXhDb2RlOiBzdHJpbmcsXHJcbiAgeGxzeFNlc3Npb246IG51bWJlcixcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVRhYmxlRmxhdENvbHVtbkl0ZW0ge1xyXG4gIGNhcHRpb246IHN0cmluZztcclxuICBmaWVsZDogc3RyaW5nO1xyXG4gIHR5cGU/OiBzdHJpbmc7XHJcbiAgcGlwZT86IHN0cmluZztcclxuICBhbGlnbj86IHN0cmluZztcclxuICB3aWR0aD86IG51bWJlcjtcclxuICBoaWRkZW4/OiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtcGFnZS1saXN0JyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIFJvdXRlck1vZHVsZSxcclxuICAgIENvcmVUYWJsZUNvbXBvbmVudCxcclxuICAgIENvcmVQYWdpbmF0aW9uRnVsbENvbXBvbmVudCxcclxuICAgIENvcmVQYWdlSGVhZGVyQ29tcG9uZW50LFxyXG4gICAgQ29yZUNvbXBvc2l0aW9uQ29tcG9uZW50LFxyXG4gICAgQ29yZUNvbW1vblBhcmFtS2l0Q29tcG9uZW50LFxyXG4gICAgQ29yZUFwaVByb2dyZXNzQ29tcG9uZW50LFxyXG4gICAgRnVsbHNjcmVlbk1vZGFsTG9hZGVyQ29tcG9uZW50XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29yZS1wYWdlLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgdXNlRXhpc3Rpbmc6IENvcmVQYWdlTGlzdENvbXBvbmVudCxcclxuICAgIH0sXHJcbiAgICBDb3JlUGFnZUxpc3RTdGF0ZSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29yZVBhZ2VMaXN0Q29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIC8qIFdIRU4gWU9VIERPIE5PVCBXQU5UIFBPUFVQLCBwYXNzIFtub3JtYWxNb2RlXT1cInRydWVcIiAqL1xyXG4gIEBJbnB1dCgpIG5vcm1hbE1vZGUhOiBib29sZWFuO1xyXG4gIC8qIFNUQVJUOiBTb21lIHJvdXRlZCBjb21wb25lbnRzLCBzdWNoIGFzIFN0YWZmUHJvZmlsZSwgbWF5IGJlIHJldXNlZCBhcyByZWFkb25seSBmb3Igc2Vla2luZyAqL1xyXG4gIEBJbnB1dCgpIGhpZGVIZWFkZXIhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhpZGVCdXR0b25Hcm91cCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2Vla2VyTW9kZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbWNjTW9kZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVpZ2h0ITogbnVtYmVyO1xyXG4gIC8qIEVORDogU29tZSByb3V0ZWQgY29tcG9uZW50cywgc3VjaCBhcyBTdGFmZlByb2ZpbGUsIG1heSBiZSByZXVzZWQgYXMgcmVhZG9ubHkgZm9yIHNlZWtpbmcgKi9cclxuXHJcbiAgLyogY2hhbmdlIHRoZXNlIDIgcHJvcHMgdG8gd3JhcCBoZWFkZXIgdGV4dHMgKi9cclxuICBASW5wdXQoKSBoZWFkZXJXcmFwITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoZWFkZXJGaXJzdFJvd0hlaWdodCE6IG51bWJlcjtcclxuICAvKiogKi9cclxuXHJcbiAgLyoqU2hvdyBQYXJhbUtpdCAqL1xyXG4gIEBJbnB1dCgpIGVuYWJsZVRpbWVab25lQ29udmVydGVyRm9yRGF0ZVRpbWVQZXJpb2RQYXJhbWV0ZXJzITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93UGFyYW1LaXQhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRhdGVQZXJpb2RDb21wYXJpc29uRm9yITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXkhOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIHN0YXR1c0luY2x1c2lvbkZvciE6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleSE6IEVudW1UcmFuc2xhdGVLZXk7XHJcbiAgQElucHV0KCkgc3RhdHVzT3B0aW9uc0FwaSE6IGFwaTtcclxuICBASW5wdXQoKSBoaWRlRGF0ZVBlcmlvZENvbXBhcmlzb24hOiBib29sZWFuOyAvLyBpZiB3ZSB3YW50IG5vdCB0byB1c2UgZGF0ZSBwIGZpbHRlclxyXG4gIEBJbnB1dCgpIGhpZGVTdGF0dXNJbmNsdXNpb24hOiBib29sZWFuOyAvLyBpZiB3ZSB3YW50IG5vdCB0byB1c2Ugc3RhdHVzIGZpbHRlclxyXG4gIC8qKkVuZCBTaG93IFBhcmFtS2l0ICovXHJcblxyXG4gIEBJbnB1dCgpIHRpdGxlITogRW51bVRyYW5zbGF0ZUtleTtcclxuICBASW5wdXQoKSBoYXNJZE9mU3RyaW5nVHlwZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGlkZUNoZWNrITogYm9vbGVhbjtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZX0pIGFwaURlZmluaXRpb24hOiBJQ29yZVBhZ2VMaXN0QXBpRGVmaW5pdGlvbjtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZX0pIGNvbHVtbnMhOiBJQ29yZVRhYmxlQ29sdW1uSXRlbVtdO1xyXG4gIEBJbnB1dCgpIGZyb3plbiE6IG51bWJlcjtcclxuICBASW5wdXQoKSBpbmxpbmVUb29scyE6IElDb3JlVGFibGVUb29sSXRlbVtdO1xyXG4gIEBJbnB1dCgpIGlubGluZVRvb2xJdGVtcyE6IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdO1xyXG4gIEBJbnB1dCgpIGVkaXRSb3V0ZSE6IElDb3JlUGFnZUxpc3RFZGl0Um91dGluZztcclxuICBASW5wdXQoKSBjcnVkITogSUNvcmVQYWdlTGlzdENSVUQ7XHJcbiAgQElucHV0KCkgc2hvd0xpc3RJbmxpbmVUb29scyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgdG9wITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBsZWZ0ITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBoaWRlTGVmdCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgb3V0ZXJQYXJhbSQhOiBCZWhhdmlvclN1YmplY3Q8YW55PjsgLy8gU29tZSBzaW1wbGUgbWFzdGVyIGRhdGEgZG8gbm90IGhhdmUgb3V0ZXJQYXJhbSQgSU1QT1JUQU5UISEhXHJcbiAgQElucHV0KCkgb3V0ZXJTb3J0ITogSVNvcnRJdGVtW107XHJcbiAgQElucHV0KCkgb3V0ZXJGaWx0ZXJPcGVyYXRvcnMhOiBJRmlsdGVyT3BlcmF0b3JbXTtcclxuICBASW5wdXQoKSBvdXRlckluT3BlcmF0b3JzITogSUluT3BlcmF0b3JbXSB8IG51bGw7XHJcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZVdpdGhXaW5kb3chOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGV4dHJhTWFudWFsT2Zmc2V0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHdyYXAhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHJvd0hlaWdodCE6IHN0cmluZztcclxuICBASW5wdXQoKSBzZWxmUmVzb2x2ZUNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2shOiBib29sZWFuOyAvLyBUaGUgY2FsbGVyIHdpbGwgaXRzZWxmIHJlc29sdmUgZXZlbnRzIGVtbWl0ZWQgYnkgQ29yZVBhZ2VIZWFkZXIgYnV0dG9ucyAoZm9yIHNvbWUpXHJcbiAgQElucHV0KCkgY2xlYXJEYXRhJCE6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcclxuICBASW5wdXQoKSBkZWxldGVWYWxpZGF0ZUZuITogRnVuY3Rpb247XHJcbiAgQElucHV0KCkgZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QhOiBJR2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3Q7XHJcbiAgQElucHV0KCkgaW1wb3J0UHJldmlld1BhdGghOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29sdW1uU2VhcmNoRGVmYXVsdE9wZW4hOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGZpeGVkUGFnZVNpemUhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgZGlzYWJsZURvdWJsZUNsaWNrITogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KCkgbm9QYWRkaW5nQ2VsbCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZGlzYWJsZUhpZ2hsaWdodE9uQ2xpY2shOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIEBPdXRwdXQoKSBjb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29yZUJ1dHRvblZOUz4oKTtcclxuICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJvd0RvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZElkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWREYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkluc3RhbmNlQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBvbklucHV0RmlsZUJhc2U2NERhdGFSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdjb3JlUGFnZUxpc3RDb250YWluZXInKSBjb3JlUGFnZUxpc3RDb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3BhZ2luYXRpb25Db250YWluZXInKSBwYWdpbmF0aW9uQ29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdmaWxlSW1wb3J0JykgZmlsZUltcG9ydCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGdlb21ldHJpY0RvbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaGVpZ2h0UmVzaXppbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoZWlnaHQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHRvcFBsYWNlSGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcmVzaXplSGVpZ2h0RmxhZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcGFnaW5hdGlvbkhlaWdodCE6IG51bWJlcjtcclxuICBjb21wb3NpdGlvbkhlaWdodCE6IG51bWJlcjtcclxuICBjb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciE6IG51bWJlcjtcclxuICBkaWFsb2dJbnN0YW5jZU51bWJlciE6IG51bWJlcjtcclxuXHJcbiAgcmVzaXplU3RyZWFtJCA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKTtcclxuXHJcbiAgY2xpY2tHZW5lcmF0ZVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBxdWVyeUxpc3RTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcbiAgbG9hZGluZyE6IGJvb2xlYW47XHJcblxyXG4gIHNlbGVjdGVkSWRzOiBzdHJpbmdbXSB8IG51bWJlcltdID0gW107XHJcbiAgc2VsZWN0ZWREYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICBpc0FkbWluOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHZpZXdJbml0RG9uZSE6IGJvb2xlYW47XHJcblxyXG4gIC8qIHN0YXJ0OiBwYXNzaW5nIHRoaXMgdmFyIHRvIFBhZ2luYXRpb24gKi9cclxuXHJcbiAgcGFnZUNvdW50ITogbnVtYmVyO1xyXG5cclxuICAvLyBQYXNzaW5nIEJlaGF2aW9yU3ViamVjdCB0byBvdGhlciBjb21wb25lbnQgaXMgbGlrZSB1c2luZyBhIHNlcnZpY2UgKHRoYXQgaG9sZHMgdGhpcyBCZWhhdmlvclN1YmplY3QpIGluamVjdGVkIHRvIGJvdGggY29tcG9uZW50c1xyXG4gIGN1cnJlbnRQYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxKTtcclxuXHJcbiAgLyogZW5kOiBwYXNzaW5nIHRoaXMgdmFyIHRvIFBhZ2luYXRpb24gKi9cclxuXHJcbiAgcGFnZVNpemUkITogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj47XHJcblxyXG4gIGZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcbiAgZmlsdGVyT3BlcmF0b3JzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUZpbHRlck9wZXJhdG9yW10+KFtdKTtcclxuICBpbk9wZXJhdG9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElJbk9wZXJhdG9yW10+KFtdKTtcclxuICBnZW5lcmFsU2VhcmNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgc2VhcmNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUNvcmVQYWdlTGlzdFNlYXJjaE9iamVjdCB8IG51bGw+KG51bGwpO1xyXG4gIHNvcnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU29ydEl0ZW1bXT4oW10pO1xyXG4gIHBhZ2luYXRpb24kITogQmVoYXZpb3JTdWJqZWN0PElQYWdpbmF0aW9uPjtcclxuICBmb3JjZVJlbG9hZGluZ0ZsYWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcXVlcnlMaXN0UmVxdWVzdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElRdWVyeUxpc3RSZXF1ZXN0Pih7IGxhbmc6ICd2aScgfSk7XHJcbiAgcXVlcnlMaXN0U3RyZWFtJCE6IE9ic2VydmFibGU8YW55PjtcclxuICBpbm5lckJvZHlDb3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMSk7XHJcblxyXG4gIHBhdXNlU3Vic2N0aXB0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGlzdCE6IGFueVtdO1xyXG4gIHRhYmxlSGVpZ2h0ITogbnVtYmVyO1xyXG4gIGF2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoITogc3RyaW5nW107XHJcbiAgZGF0YUltcG9ydCE6IGFueTtcclxuICBwZW5kaW5nQWN0aW9uITogRW51bUNvcmVCdXR0b25WTlNDb2RlIHwgbnVsbDtcclxuICBpZFN0YXRlOiBhbnk7XHJcbiAgdGVtcGxhdGVGaWxlTmFtZSE6IHN0cmluZztcclxuXHJcbiAgbG9uZ0FwaVJ1bm5pbmchOiBib29sZWFuO1xyXG4gIHByZWZldGNoTG9hZGluZyE6IGJvb2xlYW47XHJcblxyXG4gIGJ1dHRvbkdyb3VwU3RhdHVzITogSUNvcmVCdXR0b25Hcm91cFN0YXR1cztcclxuXHJcbiAgZXhwb3J0Q29yZVBhZ2VMaXN0R3JpZFRvRXhjZWxTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjb3JlUGFnZUxpc3RTZXJ2aWNlOiBDb3JlUGFnZUxpc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlUGFnZUxpc3RTdGF0ZTogQ29yZVBhZ2VMaXN0U3RhdGUsXHJcbiAgICBwcml2YXRlIGNvcmVQYWdlRWRpdFNlcnZpY2U6IENvcmVQYWdlRWRpdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwcFNlcnZpY2U6IEFwcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRpbmdTZXJ2aWNlOiBSb3V0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9uZ1Rhc2tTZXJ2aWNlOiBMb25nVGFza1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZUNvbXBvc2l0aW9uU2VydmljZTogQ29yZUNvbXBvc2l0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZUJ1dHRvbkdyb3VwU2VydmljZTogQ29yZUJ1dHRvbkdyb3VwU2VydmljZSxcclxuICAgIHByaXZhdGUganNvblNlcnZpY2U6IEpzb25TZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICBpZiAoISEhdGhpcy5pbmxpbmVUb29sSXRlbXMpIHtcclxuICAgICAgdGhpcy5pbmxpbmVUb29sSXRlbXMgPSBbXHJcbiAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULFxyXG4gICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFXHJcbiAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgbmF2aWdhdGlvbiA9IHRoaXMucm91dGVyPy5nZXRDdXJyZW50TmF2aWdhdGlvbigpXHJcbiAgICBpZiAobmF2aWdhdGlvbikge1xyXG4gICAgICBjb25zdCBleHRyYXMgPSBuYXZpZ2F0aW9uLmV4dHJhcztcclxuICAgICAgaWYgKCEhZXh0cmFzICYmICdzdGF0ZScgaW4gZXh0cmFzKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKGBDb3JlUGFnZUxpc3QgaXMgdXNpbmcgb2xkIGluc3RhbmNlIG51bWJlciAke3RoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJ9YCwgYWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISFleHRyYXMuc3RhdGUgJiYgJ2lkJyBpbiBleHRyYXMuc3RhdGUhKSB7XHJcbiAgICAgICAgICB0aGlzLmlkU3RhdGUgPSBleHRyYXMuc3RhdGVbJ2lkJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIWV4dHJhcy5zdGF0ZSAmJiAnaW5zdGFuY2VOdW1iZXInIGluIGV4dHJhcy5zdGF0ZSEpIHtcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgPSBleHRyYXMuc3RhdGVbJ2luc3RhbmNlTnVtYmVyJ107XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qIFRISVMgQ09ERSBXSUxMIERFRklORSBvdXRlclBhcmFtJCBGSUxURVIgZm9yIGltcG9ydCBwcmV2aWV3IHRhc2sgKi9cclxuICAgIGlmIChuYXZpZ2F0aW9uPy5leHRyYXM/LnN0YXRlKSB7XHJcbiAgICAgIGNvbnN0IGltcG9ydFByZXZpZXdPdXRlclBhcmFtID0gbmF2aWdhdGlvbj8uZXh0cmFzPy5zdGF0ZSFbXCJpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbVwiXVxyXG4gICAgICBpZiAoISF0aGlzLm91dGVyUGFyYW0kKSB7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5vdXRlclBhcmFtJD8udmFsdWUpIHtcclxuICAgICAgICAgIGlmICghIWltcG9ydFByZXZpZXdPdXRlclBhcmFtKSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdPdXRlclBhcmFtID0gdGhpcy5vdXRlclBhcmFtJC52YWx1ZTtcclxuICAgICAgICAgICAgbmV3T3V0ZXJQYXJhbSA9IHtcclxuICAgICAgICAgICAgICAuLi5uZXdPdXRlclBhcmFtLFxyXG4gICAgICAgICAgICAgIC4uLmltcG9ydFByZXZpZXdPdXRlclBhcmFtLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbSQubmV4dChuZXdPdXRlclBhcmFtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCEhaW1wb3J0UHJldmlld091dGVyUGFyYW0pIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRlclBhcmFtJC5uZXh0KGltcG9ydFByZXZpZXdPdXRlclBhcmFtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCEhaW1wb3J0UHJldmlld091dGVyUGFyYW0pIHtcclxuICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oaW1wb3J0UHJldmlld091dGVyUGFyYW0pXHJcbiAgICAgICAgICB0aGlzLm91dGVyUGFyYW1TdWJzY3JpYmVGbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICAgIGlmICghISF0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLnB1c2goe1xyXG4gICAgICBpbnN0YW5jZU51bWJlcjogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcixcclxuICAgICAgcmVsb2FkRmxhZyQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpLFxyXG4gICAgICBpZCQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKSxcclxuICAgICAgdGJvZHlIZWlnaHQkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCksXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmlkU3RhdGUpIHtcclxuICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgIGlkOiB0aGlzLmlkU3RhdGVcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRlbXBsYXRlRmlsZU5hbWUgPSB0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0Py5leENvZGU7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ291dGVySW5PcGVyYXRvcnMnXSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50SW5PcGVyYXRvcnM6IElJbk9wZXJhdG9yW10gPSB0aGlzLmluT3BlcmF0b3JzJC52YWx1ZTtcclxuICAgICAgY29uc3QgY2hhbmdlZEluT3BlcmF0b3JzOiBJSW5PcGVyYXRvcltdID0gY2hhbmdlc1snb3V0ZXJJbk9wZXJhdG9ycyddLmN1cnJlbnRWYWx1ZSB8fCBbXTtcclxuICAgICAgY29uc3QgcmVtYWluSW5PcGVyYXRvcnMgPSBjdXJyZW50SW5PcGVyYXRvcnMuZmlsdGVyKHggPT4gISEhY2hhbmdlZEluT3BlcmF0b3JzLmZpbHRlcih5ID0+IHkuZmllbGQgPT09IHguZmllbGQpLmxlbmd0aCk7XHJcbiAgICAgIGNvbnN0IG5ld0luT3BlcmF0b3JzID0gWy4uLnJlbWFpbkluT3BlcmF0b3JzLCAuLi5jaGFuZ2VkSW5PcGVyYXRvcnNdO1xyXG5cclxuICAgICAgdGhpcy5pbk9wZXJhdG9ycyQubmV4dChuZXdJbk9wZXJhdG9ycyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snaGVpZ2h0J10pIHtcclxuXHJcbiAgICAgIC8vIEtow7RuZyB0aOG7gyB0w61uaCDEkcaw4bujYyBz4buRIMSRbyBow6xuaCBo4buNYyBu4bq/dSBBZnRlclZpZXdJbml0IGNoxrBhIGNo4bqheVxyXG4gICAgICAvLyBOw6puIOG7nyDEkcOieSB0YSBjaOG7iSDEkcahbiBnaeG6o24gbMOgIGfDoW4gdGhheSDEkeG7lWkgY+G7p2EgaGVpZ2h0IHbDoG8gaGVpZ2h0JFxyXG4gICAgICB0aGlzLmhlaWdodCQubmV4dChjaGFuZ2VzWydoZWlnaHQnXS5jdXJyZW50VmFsdWUpO1xyXG5cclxuICAgICAgLypcclxuICAgICAgaWYgKCEhY2hhbmdlc1snaGVpZ2h0J10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgLy8gTuG6v3UgY2hp4buBdSBjYW8gY+G7p2EgQ29yZVBhZ2VMaXN0IMSRxrDhu6NjIHRydXnhu4FuIHbDoG9cclxuICAgICAgICAvLyBUaMOsIGPhuqduIHTDrW5oIGNoaeG7gXUgY2FvIGPhu6dhIENvcmVDb21wb3NpdGlvbiA9IHRoaXMuaGVpZ2h0XHJcbiAgICAgICAgLy8gTuG6v3UgaGnhu4NuIHRo4buLIENvcmVQYWdlSGVhZGVyIHRow6wgY+G6p24gdHLhu6sgdGnhur9wIMSRaSBjb3JlUGFnZUhlYWRlckhlaWdodFxyXG4gICAgICAgIHRoaXMuY29tcG9zaXRpb25IZWlnaHQgPSBjaGFuZ2VzWydoZWlnaHQnXS5jdXJyZW50VmFsdWUgLSAoISF0aGlzLmhpZGVIZWFkZXIgPyAwIDogdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0KTtcclxuICAgICAgICAvLyBUw61uaCBsdcO0biBjaGnhu4F1IGNhbyB0YWJsZUhlaWdodFxyXG4gICAgICAgIC8vIE7hur91IGV4dHJhTWFudWFsT2Zmc2V0IMSRxrDhu6NjIHRydXnhu4FuIHbDoG8gbeG7mXQgY8OhY2ggdGjhu6cgY8O0bmdcclxuICAgICAgICBpZiAoISF0aGlzLmV4dHJhTWFudWFsT2Zmc2V0KSB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gY2hhbmdlc1snaGVpZ2h0J10uY3VycmVudFZhbHVlIC0gdGhpcy5leHRyYU1hbnVhbE9mZnNldCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQ+G6p24gdMOtbmggY2hp4buBdSBjYW8gY+G7p2EgcGjhuqduIHRvcCBraGkgaG9vayBBZnRlclZpZXdJbml0IMSRxrDhu6NjIGvDrWNoIGhv4bqhdFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAqL1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydvdXRlckZpbHRlck9wZXJhdG9ycyddKSB7XHJcbiAgICAgIHRoaXMubWVyZ2VGaWx0ZXJPcGVyYXRvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucXVlcnlMaXN0U3Vic2NyaWJlKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyogUXVlcnlMaXN0IHN1YiAqL1xyXG4gIHN1YnNjcmliZVF1ZXJ5TGlzdCh4OiBhbnkpIHtcclxuICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgIGNvbnN0IGlubmVyQm9keTogSVF1ZXJ5TGlzdFJlc3BvbnNlID0gYm9keS5pbm5lckJvZHk7XHJcbiAgICAgICAgaWYgKCEhaW5uZXJCb2R5KSB7XHJcblxyXG4gICAgICAgICAgLyogI3JlZ2lvbiBUcmlja2lseSByZXNldCBpZCQsIHRtcEZpbHRlciQgYW5kIHRtcEluT3BlcmF0b3JzJCAqL1xyXG4gICAgICAgICAgdGhpcy5wYXVzZVN1YnNjdGlwdGlvbiA9IHRydWU7IC8vIDw9PSBQYXVzZVxyXG5cclxuICAgICAgICAgIGNvbnN0IG5ld1F1ZXJ5TGlzdFJlcXVlc3QgPSB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U3RhdGUuaWQkLm5leHQobnVsbClcclxuICAgICAgICAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuaWQgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8qIFRoaXMgY29kZSBibG9jayByYWlzZXMgYSBidWcgZ2VuZXJhbGx5ICovXHJcbiAgICAgICAgICAvLyBpZiAoISF0aGlzLmNvcmVQYWdlTGlzdFN0YXRlLmlkJC52YWx1ZSkge1xyXG4gICAgICAgICAgLy8gICB0aGlzLmNvcmVQYWdlTGlzdFN0YXRlLmlkJC5uZXh0KG51bGwpXHJcbiAgICAgICAgICAvLyAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuaWQgPSBudWxsO1xyXG4gICAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAgIC8vICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5pZCA9IG51bGw7XHJcbiAgICAgICAgICAvLyB9O1xyXG5cclxuICAgICAgICAgIGlmICghIXRoaXMudG1wRmlsdGVyQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZEZpbHRlciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5wcmltYXJ5RmlsdGVyKSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KG9sZEZpbHRlcik7XHJcbiAgICAgICAgICAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuZmlsdGVyID0gb2xkRmlsdGVyO1xyXG4gICAgICAgICAgICB0aGlzLnByaW1hcnlGaWx0ZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMudG1wRmlsdGVyQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCEhdGhpcy50bXBJbk9wZXJhdG9yc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBvbGRJbk9wZXJ0b3JzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnByaW1hcnlJbk9wZXJhdG9ycykpO1xyXG4gICAgICAgICAgICB0aGlzLmluT3BlcmF0b3JzJC5uZXh0KG9sZEluT3BlcnRvcnMpO1xyXG4gICAgICAgICAgICBuZXdRdWVyeUxpc3RSZXF1ZXN0LmluT3BlcmF0b3JzID0gb2xkSW5PcGVydG9ycztcclxuICAgICAgICAgICAgdGhpcy5wcmltYXJ5SW5PcGVyYXRvcnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy50bXBJbk9wZXJhdG9yc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dChuZXdRdWVyeUxpc3RSZXF1ZXN0KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gZmFsc2U7IC8vIDw9PSBBY3RpdmUgYmFjayBhZ2FpblxyXG5cclxuICAgICAgICAgIC8qICNlbmRyZWdpb24gVHJpY2tpbHkgcmVzZXQgaWQkLCB0bXBGaWx0ZXIkIGFuZCB0bXBJbk9wZXJhdG9ycyQgKi9cclxuXHJcbiAgICAgICAgICB0aGlzLmxpc3QgPSBpbm5lckJvZHkubGlzdCE7XHJcblxyXG4gICAgICAgICAgdGhpcy5pbm5lckJvZHlDb3VudCQubmV4dChpbm5lckJvZHkuY291bnQhKTtcclxuICAgICAgICAgIHRoaXMucGFnZUNvdW50ID0gTWF0aC5jZWlsKGlubmVyQm9keS5jb3VudCEgLyB0aGlzLnBhZ2VTaXplJC52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgaWYgKGlubmVyQm9keS5wYWdlICE9PSB0aGlzLmN1cnJlbnRQYWdlJC52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gdHJ1ZTsgLy8gPD09IFBhdXNlXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UkLm5leHQoaW5uZXJCb2R5LnBhZ2UhKTtcclxuICAgICAgICAgICAgdGhpcy5wYXVzZVN1YnNjdGlwdGlvbiA9IGZhbHNlOyAvLyA8PT0gQWN0aXZlIGJhY2sgYWdhaW5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5saXN0ID0gW107XHJcblxyXG4gICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xyXG4gICAgICAgICAgLy90aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xyXG4gICAgICAgIC8vdGhpcy5yZXNwb25zZVNlcnZpY2UucmVzb2x2ZShib2R5KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIC8vICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgIC8vICAgICBKU09OLnN0cmluZ2lmeSh4LCBudWxsLCAyKSxcclxuICAgICAgLy8gICAgIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zXHJcbiAgICAgIC8vICAgKTtcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbWVyZ2VGaWx0ZXJPcGVyYXRvcigpOiB2b2lkIHtcclxuICAgIC8qIFNUQVJUOiBNZXJnZSBmaWx0ZXJPcGVyYXRvciB3aXRoIG91dGVyIG9uZSAqL1xyXG4gICAgaWYgKCEhdGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycykge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSkpO1xyXG4gICAgICAgIHRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMubWFwKChvZm8pID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKChvKSA9PiBvLmZpZWxkID09PSBvZm8uZmllbGQgJiYgby5vcGVyYXRvciA9PT0gb2ZvLm9wZXJhdG9yKTtcclxuICAgICAgICAgIC8vIG9wdGltaXN0aWNhbGx5IGZpbHRlci5sZW5ndGggPT09IDFcclxuICAgICAgICAgIGlmICghIWZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZmlsdGVyWzBdLmRhdGVUaW1lVmFsdWUgPSBvZm8uZGF0ZVRpbWVWYWx1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMucHVzaChvZm8pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KHRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiBFTkQ6IENyZWF0ZS9NZXJnZS9PdmVyd3JpdGUgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuICB9XHJcbiAgdG1wRmlsdGVyQWN0aXZlITogYm9vbGVhbjtcclxuICB0bXBJbk9wZXJhdG9yc0FjdGl2ZSE6IGJvb2xlYW47XHJcbiAgcHJpbWFyeUZpbHRlciE6IGFueTtcclxuICBwcmltYXJ5SW5PcGVyYXRvcnMhOiBJSW5PcGVyYXRvcltdO1xyXG5cclxuICBvdXRlclBhcmFtU3Vic2NyaWJlRm4oKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5vdXRlclBhcmFtJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5vdXRlclBhcmFtJCBjaGFuZ2VzJywgeCk7XHJcblxyXG4gICAgICAgIC8vIG1lcmdlIG9yIG92ZXJ3cmlyZSBjdXJyZW50IGZpbHRlclxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXIgPSB0aGlzLmZpbHRlciQudmFsdWU7XHJcbiAgICAgICAgaWYgKCEhY3VycmVudEZpbHRlcikge1xyXG4gICAgICAgICAgY29uc3QgbmV3RmlsdGVyID0ge1xyXG4gICAgICAgICAgICAuLi5jdXJyZW50RmlsdGVyLFxyXG4gICAgICAgICAgICAuLi54LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KG5ld0ZpbHRlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jbGlja0dlbmVyYXRlVGVtcGxhdGUkLnBpcGUoXHJcbiAgICAgICAgbWFwKHggPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJtYXBcIiwgeClcclxuICAgICAgICAgIHJldHVybiB4O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbHRlcih4ID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiZmlsdGVyXCIsICEheClcclxuICAgICAgICAgIHJldHVybiAhIXhcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudGVtcGxhdGVGaWxlTmFtZSA9IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3Q/LmV4Q29kZSArIFwiX1wiICsgeCArIFwiLnhsc3hcIlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5nZW5lcmF0ZVRlbXBsYXRlKHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QpXHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuXHJcbiAgICAgICAgICBpZiAoeC5ib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkgcmV0dXJuXHJcblxyXG4gICAgICAgICAgbGV0IGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbeC5ib2R5XSkpXHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgdGhpcy50ZW1wbGF0ZUZpbGVOYW1lKTtcclxuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRMaW5rKTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5jbGljaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFwiRG93bmxvYWQgZmFpbGVkLiBQbGVhc2UgY29udGFjdCB5b3VyIGRldmVsb3BlciB0ZWFtIHRvIHJlc29sdmVcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSlcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEZpbHRlciQucGlwZShmaWx0ZXIoeCA9PiAhIXggJiYgISEhdGhpcy50bXBGaWx0ZXJBY3RpdmUpKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5RmlsdGVyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlciQudmFsdWUpKTtcclxuICAgICAgICB0aGlzLmZpbHRlciQubmV4dCh4KTtcclxuICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UudG1wRmlsdGVyJC5uZXh0KG51bGwpO1xyXG4gICAgICAgIHRoaXMudG1wRmlsdGVyQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgIClcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UudG1wSW5PcGVyYXRvcnMkLnBpcGUoZmlsdGVyKHggPT4gISF4Lmxlbmd0aCAmJiAhISF0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlKSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUluT3BlcmF0b3JzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmluT3BlcmF0b3JzJC52YWx1ZSkpO1xyXG4gICAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLm5leHQoeCk7XHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEluT3BlcmF0b3JzJC5uZXh0KFtdKTtcclxuICAgICAgICB0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgIClcclxuICAgIGlmICghIXRoaXMub3V0ZXJTb3J0KSB7XHJcbiAgICAgIHRoaXMuc29ydCQubmV4dCh0aGlzLm91dGVyU29ydCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkluc3RhbmNlQ3JlYXRlZC5lbWl0KHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG5cclxuICAgIGlmICghIXRoaXMuZml4ZWRQYWdlU2l6ZSkge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih0aGlzLmZpeGVkUGFnZVNpemUpO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGFnaW5hdGlvbj4oe1xyXG4gICAgICAgIHNraXA6IDAsXHJcbiAgICAgICAgdGFrZTogdGhpcy5maXhlZFBhZ2VTaXplLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnZVNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KGRlZmF1bHRQYWdpbmcudGFrZSk7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElQYWdpbmF0aW9uPih7XHJcbiAgICAgICAgc2tpcDogMCxcclxuICAgICAgICB0YWtlOiBkZWZhdWx0UGFnaW5nLnRha2UsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdBdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaDogc3RyaW5nW10gPSBbXTtcclxuICAgIHRoaXMuY29sdW1ucy5tYXAoKHgpID0+IHtcclxuICAgICAgLy8gaWYgKHgudHlwZSA9PT0gJ3RleHQnIHx8IHgudHlwZSA9PT0gJ3N0cmluZycgfHwgeC50eXBlID09PSAnZGF0ZScgfHwgeC50eXBlID09PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgIC8vIGlmICh4LnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICBpZiAoeC50eXBlID09PSAndGV4dCcgfHwgeC50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIG5ld0F2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoLnB1c2goeC5maWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaCA9IG5ld0F2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoO1xyXG5cclxuICAgIGlmICghIXRoaXMuY2xlYXJEYXRhJCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmNsZWFyRGF0YSRcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISF4O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckRhdGEkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhZ2luYXRpb25IZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdpbmF0aW9uLWhlaWdodCcpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIHNldCBkZWZhdWx0IHNvcnQgZGlyZWN0aW9uXHJcblxyXG4gICAgY29uc3QgbmV3U29ydDogSVNvcnRJdGVtW10gPSBbXTtcclxuICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiB4LmZpZWxkICE9PSBcImlkXCIpLm1hcCgoYykgPT4ge1xyXG4gICAgICBuZXdTb3J0LnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiBjLmZpZWxkLFxyXG4gICAgICAgIHNvcnREaXJlY3Rpb246IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICAvLyBhY2NlcHQgZGVmYXVsdHNvcnQgcGFyYW1cclxuICAgIHRoaXMuc29ydCQubmV4dChuZXdTb3J0Lm1hcCh0MSA9PiAoeyAuLi50MSwgLi4udGhpcy5zb3J0JC52YWx1ZS5maW5kKHQyID0+IHQyLmZpZWxkID09PSB0MS5maWVsZCkgfSkpKTtcclxuXHJcbiAgICAvKiBTVEFSVDogTWVyZ2UgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuICAgIGlmICghIXRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMubWFwKChvZm8pID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAobykgPT4gby5maWVsZCA9PT0gb2ZvLmZpZWxkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gb3B0aW1pc3RpY2FsbHkgZmlsdGVyLmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgaWYgKCEhZmlsdGVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJbMF0ub3BlcmF0b3IgPSBvZm8ub3BlcmF0b3I7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLnB1c2gob2ZvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChjdXJyZW50RmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyogRU5EOiBDcmVhdGUvTWVyZ2UvT3ZlcndyaXRlIGZpbHRlck9wZXJhdG9yIHdpdGggb3V0ZXIgb25lICovXHJcblxyXG4gICAgLyogU1RBUlQ6IFN1YnNjcmlwdGlvbiBmb3Igb3V0ZXJQYXJhbSQgKi9cclxuICAgIC8vIFNvbWUgc2ltcGxlIG1hc3RlciBkYXRhIGRvIG5vdCBoYXZlIG91dGVyUGFyYW0kIElNUE9SVEFOVCEhIVxyXG4gICAgaWYgKCEhdGhpcy5vdXRlclBhcmFtJCkge1xyXG4gICAgICB0aGlzLm91dGVyUGFyYW1TdWJzY3JpYmVGbigpO1xyXG4gICAgfVxyXG4gICAgLyogRU5EOiBTdWJzY3JpcHRpb24gZm9yIG91dGVyUGFyYW0kICovXHJcblxyXG4gICAgLyogU1RBUlQ6IFN1YnNjcmlwdGlvbnMgZm9yIHF1ZXJ5TGlzdFJlcXVlc3QkICovXHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgbGFuZzogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZ2VuZXJhbFNlYXJjaCRcclxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgICBnZW5lcmFsU2VhcmNoOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZS5nZW5lcmFsU2VhcmNoLFxyXG4gICAgICAgICAgICAgIHNlYXJjaEZvcjogeCxcclxuICAgICAgICAgICAgICBhdmFpbGFibGVDb2x1bW5zOiB0aGlzLmF2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZmlsdGVyJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGZpbHRlcjogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGZpbHRlck9wZXJhdG9yczogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgaW5PcGVyYXRvcnM6IHgsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgJ3RoaXMucXVlcnlMaXN0UmVxdWVzdCQgY2hhbmdlZDogJyxcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWVcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5zZWFyY2gkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCEhcHJldiB8fCAhIWN1cnIpIHtcclxuICAgICAgICAgICAgICBjb25kaXRpb24gPSBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3Vycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICAgIHNlYXJjaDogISF4Py5jdXJyZW50XHJcbiAgICAgICAgICAgICAgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHg/LmN1cnJlbnQpKVxyXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuc29ydCQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSkpLFxyXG4gICAgICAgICAgc29ydDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh4KSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLnBhZ2luYXRpb24kLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgcGFnaW5hdGlvbjogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAuZmlsdGVyKCh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKVswXVxyXG4gICAgICAgIC5yZWxvYWRGbGFnJCEuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckIGlzIGJlaW5nIGNoYW5nZWQuLi4nLCB4KTtcclxuICAgICAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5uZXh0KHgpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBmb3JjZVJlbG9hZGluZ0ZsYWc6IHgsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlJFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSAvLyBJTVBPUlRBTlQhXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiY3VycmVudFBhZ2UgY2hhbmdlIHRvXCIsIHgpXHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZT8ucGFnaW5hdGlvbiEsXHJcbiAgICAgICAgICAgICAgc2tpcDogKHggLSAxKSAqIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWU/LnBhZ2luYXRpb24/LnRha2UhLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5sb2FkaW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxvYWRpbmcgPSB4KVxyXG4gICAgKVxyXG5cclxuICAgIC8qIEVORDogU3Vic2NyaXB0aW9ucyBmb3IgcXVlcnlMaXN0UmVxdWVzdCQgKi9cclxuXHJcbiAgICAvLyBRdWFuIHRy4buNbmc6IENvcmVQYWdlTGlzdCBj4bqnbiBiaeG6v3QgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW9cclxuICAgIC8vIFR1eSBuaGnDqm4gY8OzIG5oaeG7gXUgdHLGsOG7nW5nIGjhu6NwIGNoaeG7gXUgY2FvIG7DoHkga2jDtG5nIMSRxrDhu6NjIHRydXnhu4FuIHbDoG8ga2hpIHRyaeG7g24ga2hhaVxyXG4gICAgLy8gWMOpdCB0csaw4budbmcgaOG7o3AgY8OhYyBmb3JtIGRhbmggbeG7pWMgY8ahIGLhuqNuXHJcbiAgICAvLyBjb250ZW50LWNvbnRhaW5lciA9PiBjb25zdW1lIGNvbXBvbmVudCA9PiBjb3JlLXBhZ2UtbGlzdCA9PiBjb3JlLXBhZ2UtaGVhZGVyID0+IGNvcmUtY29tcG9zaXRpb24gPT4gdG9wUmVmICsgdGFibGUgKyBwYWdpbmF0aW9uXHJcbiAgICAvLyB0YSBjw7MgdGjhu4MgdMOtbmggc+G7kSBt4bq3YyDEkeG7i25oIChu4bq/dSBoZWlnaHQga2jDtG5nIMSRxrDhu6NjIHRydXnhu4FuIHbDoG8pXHJcbiAgICBpZiAodGhpcy5oZWlnaHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmxheW91dFNlcnZpY2UuY29udGVudENvbnRhaW5lckhlaWdodCQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgLy8gYmFzaWNTcGFjaW5nIGzDoCBwYWRkaW5nQm90dG9tIGPhu6dhIGzhu5twIGNvbnRlbnQtY29udGFpbmVyXHJcbiAgICAgICAgICB0aGlzLmhlaWdodCA9IHggLSB0aGlzLmxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nO1xyXG4gICAgICAgICAgdGhpcy5oZWlnaHQkLm5leHQoeCAtIHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmcpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG9uUm93RG91YmxlQ2xpY2soZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCEhdGhpcy5zZWVrZXJNb2RlIHx8ICEhdGhpcy5tY2NNb2RlIHx8ICEhdGhpcy5kaXNhYmxlRG91YmxlQ2xpY2spIHtcclxuICAgICAgdGhpcy5yb3dEb3VibGVDbGljay5lbWl0KGV2ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghISF0aGlzLnNlbGZSZXNvbHZlQ29yZVBhZ2VIZWFkZXJCdXR0b25DbGljaykge1xyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VFZGl0U2VydmljZS5mcm9tVXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgICAgIGlmICghIXRoaXMubm9ybWFsTW9kZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5oYXNJZE9mU3RyaW5nVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICBidG9hKGV2ZW50LmlkKSxcclxuICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLnBhcmVudCxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICBidG9hKGV2ZW50LmlkLnRvU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5oYXNJZE9mU3RyaW5nVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQudG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yb3dEb3VibGVDbGljay5lbWl0KGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Sb3dDbGljayhlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdDb3JQYWdlTGlzdCBvblJvd0NsaWNrIGUnLCBlKTtcclxuICAgIGlmICghIWUuaWQpIHtcclxuICAgICAgdGhpcy5vbkNoYW5nZShlLmlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgIFwiVGhlICdpZCcgY29sdW1ucyBpcyBudWxsLiBQbGVhc2UgY2hlY2sgd2h5XCIsXHJcbiAgICAgICAgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMucm93Q2xpY2suZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uVG9vbENsaWNrKGV2ZW50OiBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSkgeyB9XHJcblxyXG4gIG9uU2VhcmNoaW5nKGU6IElTZWFyY2hJdGVtW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IHByZXYgPSAhIXRoaXMuc2VhcmNoJC52YWx1ZT8uY3VycmVudFxyXG4gICAgICA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZWFyY2gkLnZhbHVlPy5jdXJyZW50KSlcclxuICAgICAgOiBudWxsO1xyXG4gICAgdGhpcy5zZWFyY2gkLm5leHQoe1xyXG4gICAgICBwcmV2aW91czogcHJldiEsXHJcbiAgICAgIGN1cnJlbnQ6IGUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0V2hlbkNvbnRhaW5lckhhc0ZpeGVkSGVpZ2h0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICBjb25zdCBwYWdpbmF0aW9uSGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnaW5hdGlvbi1oZWlnaHQnKVxyXG4gICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRhYmxlQm9yZGVyVG9wID0gTnVtYmVyKFxyXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtdGFibGUtYm9yZGVyLXRvcCcpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGJsb2NrQ2VsbFNwYWNpbmcgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtbGF5b3V0LWJsb2NrLWNlbGwtc3BhY2luZycpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29yZVBhZ2VMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICctLWhlaWdodCcsXHJcbiAgICAgIGNvbnRhaW5lckhlaWdodCArICdweCdcclxuICAgICk7XHJcbiAgICBjb25zdCByZWxhdGVkVGFibGVGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICk7XHJcbiAgICBpZiAoISFyZWxhdGVkVGFibGVGaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHJlbGF0ZWRUYWJsZSA9IHJlbGF0ZWRUYWJsZUZpbHRlclswXS5jb3JlVGFibGVSZWY7XHJcbiAgICAgIGlmICghIXJlbGF0ZWRUYWJsZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdSZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiBGT1VORCEhIScpO1xyXG4gICAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZUhlaWdodCA9XHJcbiAgICAgICAgICBjb250YWluZXJIZWlnaHQgLVxyXG4gICAgICAgICAgcGFnaW5hdGlvbkhlaWdodCAtXHJcbiAgICAgICAgICB0YWJsZUJvcmRlclRvcCAtXHJcbiAgICAgICAgICAyICogYmxvY2tDZWxsU3BhY2luZyAqIDAgLyogcGFkZGluZyBpbmNsdWVkIGluIG9iamVjdCBpdHNlbGYgKi8gLVxyXG4gICAgICAgICAgKHRoaXMuZXh0cmFNYW51YWxPZmZzZXQgfHwgMCk7XHJcbiAgICAgICAgcmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgICAnLS1oZWlnaHQnLFxyXG4gICAgICAgICAgZmVhdHVyZUhlaWdodCArICdweCdcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEhlYWRlclJvd0hlaWdodCA9IE51bWJlcihcclxuICAgICAgICAgIGdldENvbXB1dGVkU3R5bGUocmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLWhlYWRlci0xc3Qtcm93LWhlaWdodCcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kSGVhZGVyUm93SGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0taGVhZGVyLTJuZC1yb3ctaGVpZ2h0JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmVhdHVyZVRib2R5SGVpZ2h0ID1cclxuICAgICAgICAgIGZlYXR1cmVIZWlnaHQgLSBmaXJzdEhlYWRlclJvd0hlaWdodCAtIHNlY29uZEhlYWRlclJvd0hlaWdodDtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ2ZlYXR1cmVUYm9keUhlaWdodCcsIGZlYXR1cmVUYm9keUhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXHJcbiAgICAgICAgICApWzBdXHJcbiAgICAgICAgICAudGJvZHlIZWlnaHQkLm5leHQoZmVhdHVyZVRib2R5SGVpZ2h0KTtcclxuICAgICAgICAvL30pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIHdhcyB1bmRlZmluZWQnKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHJlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUhlaWdodFdoZW5Db250YWluZXJIYXNVbmRlZmluZWRIZWlnaHQoKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbnRlbnRDb250YWluZXJIZWlnaHQkLnZhbHVlO1xyXG4gICAgY29uc3QgcGFnZUhlYWRlckhlaWdodCA9IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodDtcclxuICAgIGNvbnN0IHBhZ2luYXRpb25IZWlnaHQgPSB0aGlzLmxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQ7XHJcbiAgICBjb25zdCB0YWJsZUJvcmRlclRvcCA9IHRoaXMubGF5b3V0U2VydmljZS50YWJsZUJvcmRlclRvcDtcclxuICAgIGNvbnN0IGJhc2ljU3BhY2luZyA9IHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmc7XHJcblxyXG4gICAgdGhpcy5jb3JlUGFnZUxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgJy0taGVpZ2h0JyxcclxuICAgICAgY29udGFpbmVySGVpZ2h0IC0gMiAqIGJhc2ljU3BhY2luZyArICdweCdcclxuICAgICk7XHJcbiAgICBjb25zdCByZWxhdGVkVGFibGVGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICk7XHJcbiAgICBpZiAoISFyZWxhdGVkVGFibGVGaWx0ZXIubGVuZ3RoKSB7XHJcblxyXG4gICAgICBpZiAoISF0aGlzLmF1dG9SZXNpemVXaXRoV2luZG93KSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlbGF0ZWRUYWJsZSA9IHJlbGF0ZWRUYWJsZUZpbHRlclswXS5jb3JlVGFibGVSZWY7XHJcbiAgICAgICAgaWYgKCEhcmVsYXRlZFRhYmxlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnUmVsYXRlZCBDb3JlVGFibGVDb21wb25lbnRSZWYgRk9VTkQhISEnKTtcclxuICAgICAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmZWF0dXJlSGVpZ2h0ID1cclxuICAgICAgICAgICAgY29udGFpbmVySGVpZ2h0IC1cclxuICAgICAgICAgICAgcGFnZUhlYWRlckhlaWdodCAtXHJcbiAgICAgICAgICAgIHBhZ2luYXRpb25IZWlnaHQgLVxyXG4gICAgICAgICAgICB0YWJsZUJvcmRlclRvcCAtXHJcbiAgICAgICAgICAgIDIgKiBiYXNpY1NwYWNpbmcgLVxyXG4gICAgICAgICAgICAodGhpcy5leHRyYU1hbnVhbE9mZnNldCB8fCAwKTtcclxuICAgICAgICAgIHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICAgICAnLS1oZWlnaHQnLFxyXG4gICAgICAgICAgICBmZWF0dXJlSGVpZ2h0ICsgJ3B4J1xyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBmaXJzdEhlYWRlclJvd0hlaWdodCA9IE51bWJlcihcclxuICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1oZWFkZXItMXN0LXJvdy1oZWlnaHQnKVxyXG4gICAgICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IHNlY29uZEhlYWRlclJvd0hlaWdodCA9IE51bWJlcihcclxuICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1oZWFkZXItMm5kLXJvdy1oZWlnaHQnKVxyXG4gICAgICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBmZWF0dXJlVGJvZHlIZWlnaHQgPVxyXG4gICAgICAgICAgICBmZWF0dXJlSGVpZ2h0IC0gZmlyc3RIZWFkZXJSb3dIZWlnaHQgLSBzZWNvbmRIZWFkZXJSb3dIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2ZlYXR1cmVUYm9keUhlaWdodCcsIGZlYXR1cmVUYm9keUhlaWdodCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXHJcbiAgICAgICAgICAgIClbMF1cclxuICAgICAgICAgICAgLnRib2R5SGVpZ2h0JC5uZXh0KGZlYXR1cmVUYm9keUhlaWdodCk7XHJcbiAgICAgICAgICAvL30pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdSZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiB3YXMgdW5kZWZpbmVkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdObyByZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiBmb3VuZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVIZWlnaHQkKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICB0aGlzLmhlaWdodFJlc2l6aW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZXNpemVIZWlnaHQoKTtcclxuICAgICAgdGhpcy5oZWlnaHRSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgICBvYnNlcnZlci5uZXh0KG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0KCk6IHZvaWQge1xyXG4gICAgaWYgKCEhIXRoaXMuc2Vla2VyTW9kZSkge1xyXG4gICAgICAvKiAjc3RhcnQgRURJVElORyBDT0RFIEJMT0NLIEJFTExPVyBPTkxZIElGIFlPVSBLTk9XIEFMTCBUSEUgQVBQIERFU0lHTiBGTE9XUyAqL1xyXG4gICAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG4gICAgICBpZiAoISF0aGlzLmhlaWdodCkge1xyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0V2hlbkNvbnRhaW5lckhhc0ZpeGVkSGVpZ2h0KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRXaGVuQ29udGFpbmVySGFzVW5kZWZpbmVkSGVpZ2h0KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHRvIGRvIHNtdGggbWF5YmVcclxuICAgIH1cclxuICAgIC8qICNlbmQgRURJVElORyBDT0RFIEJMT0NLIEJFTExPVyBPTkxZIElGIFlPVSBLTk9XIEFMTCBUSEUgQVBQIERFU0lHTiBGTE9XUyAqL1xyXG4gIH1cclxuXHJcbiAgcXVlcnlMaXN0U3Vic2NyaWJlKCk6IHZvaWQge1xyXG4gICAgaWYgKCEhIXRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uICYmICEhdGhpcy5xdWVyeUxpc3RTdHJlYW0kKSB7XHJcbiAgICAgIHRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeUxpc3RTdHJlYW0kLnN1YnNjcmliZSh4ID0+IHRoaXMuc3Vic2NyaWJlUXVlcnlMaXN0KHgpKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsY3VsYXRlVGFibGVIZWlnaHRCYXNlZE9uSGVpZ2h0QW5kVG9wUmVmSGVpZ2h0KGhlaWdodDogbnVtYmVyLCB0b3BSZWZIZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkIHx8IHRvcFJlZkhlaWdodCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICB0aGlzLmNvbXBvc2l0aW9uSGVpZ2h0ID0gaGVpZ2h0IC0gKCEhdGhpcy5oaWRlSGVhZGVyID8gMCA6IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCk7XHJcbiAgICAvLyAoIXRvcFJlZkhlaWdodCA/IDE1IDogMCkgPT4gTuG6v3UgY8OzIHBo4bqnbiBUb3Agc+G6vSBjw7MgdGjDqm0gbWFyZ2luQm90dG9tIDE1cHggY+G7p2EgbsOzLlxyXG4gICAgdGhpcy50YWJsZUhlaWdodCA9IGhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCAtIHRvcFJlZkhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodCAtICghIXRvcFJlZkhlaWdodCA/IDE1IDogMCkgIC8vIDE1cHggaXMgbWFyZ2luQm90dG9tIG9mIHRvcFJlZlxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLyoqIFNUQVJUIHNldFRpbWVvdXQgKi9cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgY29uc3QgdHJ5RmluZCA9IHRoaXMuY29yZUJ1dHRvbkdyb3VwU2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKHggPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcik7XHJcbiAgICAgIGlmICghIXRyeUZpbmQubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cyA9IHRyeUZpbmRbMF07XHJcbiAgICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cy5tdXN0QmVIaWRkZW4kLm5leHQoRU1QVFlfU0VMRUNUSU9OX0hJRERFTl9CVVRUT04pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmICEoIXRoaXMuc2Vla2VyTW9kZSB8fCAhdGhpcy5oaWRlQnV0dG9uR3JvdXApKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKFwiS2jDtG5nIHTDrG0gdGjhuqV5IGluc3RhbmNlIG51bWJlciBj4bunYSBi4buZIG7DunQgxJFp4buBdSBraGnhu4NuXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY29tcG9zaXRpb25GaWx0ZXIgPSB0aGlzLmNvcmVDb21wb3NpdGlvblNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcih4ID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG4gICAgICBpZiAoISFjb21wb3NpdGlvbkZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIGNvbXBvc2l0aW9uRmlsdGVyWzBdLnRvcFJlZiQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvcFBsYWNlSGVpZ2h0JC5uZXh0KHgubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuaGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0QmFzZWRPbkhlaWdodEFuZFRvcFJlZkhlaWdodCh4LCB0aGlzLnRvcFBsYWNlSGVpZ2h0JC52YWx1ZSlcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnRvcFBsYWNlSGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0QmFzZWRPbkhlaWdodEFuZFRvcFJlZkhlaWdodCh0aGlzLmhlaWdodCQudmFsdWUsIHgpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5waXBlKFxyXG4gICAgICAgICAgc3dpdGNoTWFwKF8gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdlb21ldHJpY0RvbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzaXplSGVpZ2h0JCgpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXNpemVIZWlnaHRGbGFnJCBzd2l0Y2hNYXAgZmluYWwgdmFsdWVcIiwgeClcclxuICAgICAgICAgIGlmICghISF0aGlzLmhlaWdodFJlc2l6aW5nKSB0aGlzLmdlb21ldHJpY0RvbmUgPSB0cnVlO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICApXHJcbiAgICAgIC8vIHRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHQoKTtcclxuXHJcbiAgICAgIGlmICghIXRoaXMuc2hvd1BhcmFtS2l0KSB7XHJcbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gY2FsY3VsYXRpbmcgb2Zmc2V0IG9mIHRoZSB0b3BcclxuICAgICAgICBjb25zdCB0cnlGaW5kQ29yZUhlYWRlclBhcmFtc0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgJy5jb3JlLWhlYWRlci1wYXJhbXMtY29udGFpbmVyJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKEFycmF5LmZyb20odHJ5RmluZENvcmVIZWFkZXJQYXJhbXNFbGVtZW50KS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBBcnJheS5mcm9tKHRyeUZpbmRDb3JlSGVhZGVyUGFyYW1zRWxlbWVudClbMF07XHJcbiAgICAgICAgICBjb25zdCByZWN0ID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgIHRoaXMuZXh0cmFNYW51YWxPZmZzZXQgPSByZWN0LmhlaWdodCArIDE1OyAvLyBtYjE1IGlzIG1hcmdpbi1ib3R0b20gMTVweCBvZiBmb3JtIHJvd1xyXG5cclxuICAgICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICghISF0aGlzLmV4dHJhTWFudWFsT2Zmc2V0KSB0aGlzLmV4dHJhTWFudWFsT2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoISEhdGhpcy5leHRyYU1hbnVhbE9mZnNldCkgdGhpcy5leHRyYU1hbnVhbE9mZnNldCA9IDA7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5uZXh0KCEhIXRoaXMucmVzaXplSGVpZ2h0RmxhZyQudmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB0cnlGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzXHJcbiAgICAgICAgLmZpbHRlcigoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcik7XHJcbiAgICAgIGlmICghISF0cnlGaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgQ29yZVBhZ2VMaXN0IGluc3RhbmNlcyBkbyBub3QgaW5jbHVkZSBudW1iZXIgJHt0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyfWAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcilbMF1cclxuICAgICAgICAgICAgLmlkJC5waXBlKFxyXG4gICAgICAgICAgICAgIGZpbHRlcihfID0+ICEhIXRoaXMuaWRTdGF0ZSlcclxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKHg6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZSBpZCQgaGFzIGNoYW5nZWQsIHggPSAnLCB4KTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGlkOiB4LFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBvdXRlci1wdXNoXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbmZpcm1lZCQucGlwZShcclxuICAgICAgICAgIGZpbHRlcihpID0+ICEhIXRoaXMuZGlhbG9nU2VydmljZS5idXN5ICYmICEhaT8uY29uZmlybWVkICYmIGkuaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuZGlhbG9nSW5zdGFuY2VOdW1iZXIpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZXNldFNlcnZpY2UoKVxyXG5cclxuICAgICAgICAgIHN3aXRjaCAodGhpcy5wZW5kaW5nQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VUExPQUQ6XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJOb3cgdXBsb2FkaW5nLi4uIFwiLCB0aGlzLmRhdGFJbXBvcnQpO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBtaWRkZW0tcHVzaFxyXG4gICAgICAgICAgICAgIC8vIClcclxuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFOlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgY29uc3Qgc3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3Q6IElTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgICAgIHN5c0Z1bmN0aW9uQ29kZTogdGhpcy5yb3V0aW5nU2VydmljZS5jdXJyZW50RnVuY3Rpb24kLnZhbHVlPy5jb2RlISxcclxuICAgICAgICAgICAgICAgIHN5c0FjdGlvbkNvZGU6IEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFLFxyXG4gICAgICAgICAgICAgICAgYmVmb3JlOiBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRGF0YSksXHJcbiAgICAgICAgICAgICAgICBhZnRlcjogJ1wiXCInLFxyXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWU/LnVzZXJOYW1lIVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdDogSUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgICAgICAgICBzeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdFxyXG4gICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgIC5kZWxldGVJZHMocmVxdWVzdCwgdGhpcy5jcnVkLmRlbGV0ZUlkcyEpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAhISF0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keS5zdGF0dXNDb2RlID09PSA0MDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5BUFBST1ZFOlxyXG4gICAgICAgICAgICAgIGNvbnN0IHN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJTZW5kVW5hcHByb3ZlOiBJU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICBzeXNGdW5jdGlvbkNvZGU6IHRoaXMucm91dGluZ1NlcnZpY2UuY3VycmVudEZ1bmN0aW9uJC52YWx1ZT8uY29kZSEsXHJcbiAgICAgICAgICAgICAgICBzeXNBY3Rpb25Db2RlOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZTogSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZERhdGEpLFxyXG4gICAgICAgICAgICAgICAgYWZ0ZXI6ICdcIlwiJyxcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlPy51c2VyTmFtZSFcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHNlbmRSZXF1ZXN0OiBJVG9uZ2xlVW5BcHByb3ZlSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgICAgIHJlYXNvbjogdGhpcy5kaWFsb2dTZXJ2aWNlLnJlYXNvbiQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVRvQmluZDogZmFsc2VcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAucG9zdCh0aGlzLmNydWQudG9nZ2xlVW5hcHByb3ZlSWRzISwgc2VuZFJlcXVlc3QpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAhISF0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keS5zdGF0dXNDb2RlID09PSA0MDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcblxyXG4gICAgICBpZiAodGhpcy5hdXRvUmVzaXplV2l0aFdpbmRvdykge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5yZXNpemVTdHJlYW0kLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpLnN1YnNjcmliZSgoXzogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLm5leHQoISEhdGhpcy5yZXNpemVIZWlnaHRGbGFnJC52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL3NldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvKiBTVEFSVDogU3Vic2NyaXB0aW9uIGZvciBsaXN0ICovXHJcblxyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFN0cmVhbSQgPSB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnBpcGUoXHJcbiAgICAgICAgbWFwKHggPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJtYXAgeCA9PiBcIiwgeClcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcjFDb25kaXRpb24gPSAhIXggJiYgLyohIXguc29ydCAmJiAqLyAhIXgucGFnaW5hdGlvblxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJtYXAgZmlsdGVyMUNvbmRpdGlvbiA9PiBcIiwgZmlsdGVyMUNvbmRpdGlvbilcclxuICAgICAgICAgIHJldHVybiB4XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZmlsdGVyKCh4OiBJUXVlcnlMaXN0UmVxdWVzdCkgPT4gISF4ICYmIC8qISF4LnNvcnQgJiYgKi8gISF4LnBhZ2luYXRpb24pLFxyXG4gICAgICAgIGZpbHRlcigoXykgPT4gIXRoaXMucGF1c2VTdWJzY3RpcHRpb24pLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgICAvKiBTVEFSVDogQXNzaW1pbGF0aW9uIG51bGwgYW5kIG5vdC1leGlzdGluZyBwcm9wZXJ0eSAqL1xyXG4gICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIGxhbmc6IHN0cmluZztcclxuICAgICAgICAgICAgICAgIGdlbmVyYWxTZWFyY2g/OiBJR2VuZXJhbFNlYXJjaDtcclxuICAgICAgICAgICAgICAgIHNvcnQ/OiBJU29ydEl0ZW1bXTtcclxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb24/OiBJUGFnaW5hdGlvbjtcclxuICAgICAgICAgICAgICAgIGZpbHRlcj86IGFueTtcclxuICAgICAgICAgICAgICAgIGZpbHRlck9wZXJhdG9ycz86IElGaWx0ZXJPcGVyYXRvcltdO1xyXG4gICAgICAgICAgICAgICAgaW5PcGVyYXRvcnM/OiBJSW5PcGVyYXRvcltdO1xyXG4gICAgICAgICAgICAgICAgc2VhcmNoPzogSVNlYXJjaEl0ZW1bXTtcclxuICAgICAgICAgICAgICAgIGlkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCxcclxuICAgICAgICAgICAgICAgIGZvcmNlUmVsb2FkaW5nRmxhZz86IGJvb2xlYW47XHJcbiAgICAgICAgICAgICovXHJcblxyXG4gICAgICAgICAgLy9nZW5lcmFsU2VhcmNoXHJcbiAgICAgICAgICBpZiAoISEhcHJldi5nZW5lcmFsU2VhcmNoPy5zZWFyY2hGb3IpIHByZXYuZ2VuZXJhbFNlYXJjaCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIGlmICghISFjdXJyLmdlbmVyYWxTZWFyY2g/LnNlYXJjaEZvcikgY3Vyci5nZW5lcmFsU2VhcmNoID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgIC8vIHNvcnRcclxuICAgICAgICAgIGlmICghIXByZXYuc29ydCkge1xyXG4gICAgICAgICAgICBpZiAocHJldi5zb3J0Lmxlbmd0aCA9PT0gMCkgcHJldi5zb3J0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCEhY3Vyci5zb3J0KSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyLnNvcnQubGVuZ3RoID09PSAwKSBjdXJyLnNvcnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gc2VhcmNoXHJcbiAgICAgICAgICBpZiAoISFwcmV2LnNlYXJjaCkge1xyXG4gICAgICAgICAgICBpZiAocHJldi5zZWFyY2gubGVuZ3RoID09PSAwKSBwcmV2LnNlYXJjaCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghIWN1cnIuc2VhcmNoKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyLnNlYXJjaC5sZW5ndGggPT09IDApIGN1cnIuc2VhcmNoID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGlkXHJcbiAgICAgICAgICBpZiAoISEhcHJldi5pZCkgcHJldi5pZCA9IG51bGw7XHJcbiAgICAgICAgICBpZiAoISEhY3Vyci5pZCkgY3Vyci5pZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLyogRU5EOiBBc3NpbWlsYXRpb24gbnVsbCBhbmQgbm90LWV4aXN0aW5nIHByb3BlcnR5ICovXHJcblxyXG4gICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gSlNPTi5zdHJpbmdpZnkocHJldikgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpO1xyXG5cclxuICAgICAgICAgIGlmICghISFjb25kaXRpb24pIHtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cCgnQ09NUEFSSVNPTicpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygncHJldicsIHByZXYpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY3VycicsIGN1cnIpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY29uZGl0aW9uJywgY29uZGl0aW9uKTtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjtcclxuICAgICAgICB9KSxcclxuICAgICAgICAvKlxyXG4gICAgICAgICAgLyogU1RBUlQ6IHVzZSBzd2l0Y2hNYXAgZm9yIGNhbmNlbGxhdGlvblxyXG4gICAgICAgICAgKi9cclxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoJ3N3aXRjaE1hcCB0cmlnZ2VyZWQnKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwieC5pZCA9IFwiLCB4LmlkKVxyXG4gICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuYXBpRGVmaW5pdGlvbi5xdWVyeUxpc3RSZWxhdGl2ZVBhdGggKyBcIj9jb21wdXRpbmdXaXRoTG9jYWxUaW1lWm9uZT10cnVlXCI7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnF1ZXJ5TGlzdCh4LCB1cmwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLypcclxuICAgICAgICAvKiBFTkQ6IHVzZSBzd2l0Y2hNYXAgZm9yIGNhbmNlbGxhdGlvblxyXG4gICAgICAgICovXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgLyogRU5EOiBTdWJzY3JpcHRpb24gZm9yIGxpc3QgKi9cclxuICAgICAgLy99KTtcclxuICAgIH0pXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLm5leHQoISEhdGhpcy5yZXNpemVIZWlnaHRGbGFnJC52YWx1ZSksIDUwMClcclxuXHJcbiAgICAvKiogRU5EIHNldFRpbWVvdXQqL1xyXG4gIH1cclxuXHJcbiAgb25QYXJhbUtpdFZhbHVlQ2hhbmdlKGRhdGE6IElDb3JlQ29tbW9uUGFyYW1LaXRFdmVudEVtaXR0ZXJEYXRhKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKGRhdGEuZmllbGQpIHtcclxuICAgICAgY2FzZSAnZ2VuZXJhbFNlYXJjaCc6XHJcbiAgICAgICAgdGhpcy5nZW5lcmFsU2VhcmNoJC5uZXh0KGRhdGEudmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkYXRlRnJvbSc6XHJcbiAgICAgICAgY29uc3QgbmV3RnJvbUZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyRnJvbSA9IG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+XHJcbiAgICAgICAgICAgIHguZmllbGQgPT09IHRoaXMuZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3IgJiZcclxuICAgICAgICAgICAgeC5vcGVyYXRvciA9PT0gRW51bUZpbHRlck9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGZpbHRlckZyb20ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlckZyb21bMF0uZGF0ZVRpbWVWYWx1ZSA9IG5ldyBEYXRlKFxyXG4gICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDAsIDAsIDAsIDApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJGcm9tWzBdLmRhdGVUaW1lVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyRnJvbS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGlmICghIWRhdGEudmFsdWUpIHtcclxuICAgICAgICAgICAgbmV3RnJvbUZpbHRlck9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBmaWVsZDogdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvcixcclxuICAgICAgICAgICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTCxcclxuICAgICAgICAgICAgICBkYXRlVGltZVZhbHVlOiBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDAsIDAsIDAsIDApXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBgRmlsdGVyT3BlcmF0b3JzIGVycm9yIGZvciAke2RhdGEuZmllbGR9OiBjb21iaW5hdGlvbiBvZiBmaWVsZCBuYW1lIGFuZCBvcGVyYXRvciBuYW1lIGlzIG5vdCB1bmlxdWUgaW4gdGhlIGFycmF5YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZGF0ZVRvJzpcclxuICAgICAgICBjb25zdCBuZXdUb0ZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyVG8gPSBuZXdUb0ZpbHRlck9wZXJhdG9ycy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT5cclxuICAgICAgICAgICAgeC5maWVsZCA9PT0gdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvciAmJlxyXG4gICAgICAgICAgICB4Lm9wZXJhdG9yID09PSBFbnVtRmlsdGVyT3BlcmF0b3IuTEVTU19USEFOX09SX0VRVUFMXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZmlsdGVyVG8ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclRvWzBdLmRhdGVUaW1lVmFsdWUgPSBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAoZGF0YS52YWx1ZSBhcyBEYXRlKS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJUb1swXS5kYXRlVGltZVZhbHVlID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclRvLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgaWYgKCEhZGF0YS52YWx1ZSkge1xyXG4gICAgICAgICAgICBuZXdUb0ZpbHRlck9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBmaWVsZDogdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvcixcclxuICAgICAgICAgICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkxFU1NfVEhBTl9PUl9FUVVBTCxcclxuICAgICAgICAgICAgICBkYXRlVGltZVZhbHVlOiBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSlcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBGaWx0ZXJPcGVyYXRvcnMgZXJyb3IgZm9yICR7ZGF0YS5maWVsZH06IGNvbWJpbmF0aW9uIG9mIGZpZWxkIG5hbWUgYW5kIG9wZXJhdG9yIG5hbWUgaXMgbm90IHVuaXF1ZSBpbiB0aGUgYXJyYXlgXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLm5leHQobmV3VG9GaWx0ZXJPcGVyYXRvcnMpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnc3RhdHVzSWRzJzpcclxuICAgICAgICBjb25zdCBuZXdJbk9wZXJhdG9yczogSUluT3BlcmF0b3JbXSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmluT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGluZmlsdGVyID0gbmV3SW5PcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+IHguZmllbGQgPT09IHRoaXMuc3RhdHVzSW5jbHVzaW9uRm9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaW5maWx0ZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpbmZpbHRlclswXS52YWx1ZXMgPSBkYXRhLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5maWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBuZXdJbk9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc3RhdHVzSW5jbHVzaW9uRm9yLFxyXG4gICAgICAgICAgICB2YWx1ZXM6IGRhdGEudmFsdWUsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBJbk9wZXJhdG9ycyBlcnJvciBmb3IgJHtkYXRhLmZpZWxkfTogZmllbGQgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5PcGVyYXRvcnMkLm5leHQobmV3SW5PcGVyYXRvcnMpKVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydFRvRXhjZWwoKTogdm9pZCB7XHJcbiAgICAvKiBQaMawxqFuZyBwaMOhcCB4deG6pXQgQ1NWICovXHJcbiAgICAvKiBD4bqnbiB0aGF5IGLhurFuZyB4deG6pXQgRVhDRUwgYuG6sW5nIEJhY2tlbmQgKi9cclxuICAgIC8qXHJcbiAgICBjb25zdCBjc3ZEYXRhOiBhbnlbXVtdID0gW107XHJcblxyXG4gICAgbGV0IHJvdzE6IGFueVtdID0gW107XHJcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKCh4KSA9PiB4LmZpZWxkICE9ICdpZCcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5jb2x1bW5zKVxyXG4gICAgdGhpcy5jb2x1bW5zLm1hcCgoeCkgPT4ge1xyXG4gICAgICByb3cxLnB1c2godGhpcy5tbHMudHJhbnMoeC5jYXB0aW9uKSk7XHJcbiAgICB9KTtcclxuICAgIGNzdkRhdGEucHVzaChyb3cxKTtcclxuXHJcbiAgICB0aGlzLmxpc3QubWFwKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRSb3c6IGFueVtdID0gW107XHJcbiAgICAgIHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgIT0gJ2lkJykge1xyXG4gICAgICAgICAgbGV0IGN1cnJlbnRDZWxsID0gcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRDZWxsPy5yZXBsYWNlQWxsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRDZWxsID0gY3VycmVudENlbGwucmVwbGFjZUFsbCgnLCcsICc7Jyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjdXJyZW50Um93LnB1c2goY3VycmVudENlbGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjc3ZEYXRhLnB1c2goY3VycmVudFJvdyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgY3N2Q29udGVudCA9IGNzdkRhdGEubWFwKChlKSA9PiBlLmpvaW4oJywnKSkuam9pbignXFxuJyk7XHJcblxyXG4gICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZShcclxuICAgICAgJ2hyZWYnLFxyXG4gICAgICAnZGF0YTp0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04LCVFRiVCQiVCRicgKyBlbmNvZGVVUkkoY3N2Q29udGVudClcclxuICAgICk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCAnRXhwb3J0RXhlbC5jc3YnKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAqL1xyXG4gICAgLypcclxuICAgIELhuq90IMSR4bqndSB4deG6pXQgRXhjZWwgYuG6sW5nIEJhY2tlbmRcclxuICAgICovXHJcblxyXG4gICAgLy8gVGh1IHRo4bqtcCBuaGnDqm4gbGnhu4d1XHJcblxyXG4gICAgaWYgKCF0aGlzLmlubmVyQm9keUNvdW50JC52YWx1ZSkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKHRoaXMubWxzLnRyYW5zKCdYTFNYX05PX1JFU1VMVF9UT19FWFBPUlQnKSwgYWxlcnRPcHRpb25zKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVybCA9IHRoaXMuYXBpRGVmaW5pdGlvbi5xdWVyeUxpc3RSZWxhdGl2ZVBhdGg7XHJcbiAgICBjb25zdCB4ID0gdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZTsgLy8gQ+G6p24gbG/huqFpIGLhu48gcGFnaW5nIGto4buPaSDEkeG7kWkgdMaw4bujbmcgbsOgeVxyXG5cclxuICAgIHgucGFnaW5hdGlvbiA9IHtcclxuICAgICAgc2tpcDogMCxcclxuICAgICAgdGFrZTogdGhpcy5pbm5lckJvZHlDb3VudCQudmFsdWVcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYXBpU3RyZWFtJDogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgLy8gTuG6v3UgY8OzIGTDsm5nIGThu68gbGnhu4d1IGNoZWNrZWQgdGjDrCBjaOG7iSB4deG6pXQgY8OhYyBkw7JuZyBuw6B5XHJcbiAgICBpZiAoISF0aGlzLnNlbGVjdGVkRGF0YS5sZW5ndGgpIHtcclxuICAgICAgYXBpU3RyZWFtJCA9IG5ldyBPYnNlcnZhYmxlPGFueT4ob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoe1xyXG4gICAgICAgICAgb2s6IHRydWUsXHJcbiAgICAgICAgICBzdGF0dXM6IDIwMCxcclxuICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxyXG4gICAgICAgICAgICBpbm5lckJvZHk6IHtcclxuICAgICAgICAgICAgICBsaXN0OiB0aGlzLnNlbGVjdGVkRGF0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBUcsOhaSBs4bqhaSwgeHXhuqV0IDEwMCUgc2F1IGtoaSDEkcOjIGzhu41jICh0b8OgbiBi4buZIGPDoWMgdHJhbmcpXHJcbiAgICAgIGFwaVN0cmVhbSQgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UucXVlcnlMaXN0KHgsIHVybCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBJdCdzIHRpbWUgdG8gc3Vic2NyaWJlIGFwaVN0cmVhbSRcclxuICAgIHRoaXMucHJlZmV0Y2hMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICBhcGlTdHJlYW0kLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLnByZWZldGNoTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhgJHtib2R5LmlubmVyQm9keS5jb3VudH0gcm93cyBvZiBkYXRhIGZldGNoZWQuIEl0IGlzIHRpbWUgdG8gZG8gd2l0aCBiYWNrZW5kIGV4Y2VsIGV4cG9ydGluZ2AsIGFsZXJ0T3B0aW9ucylcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFwaVBvaW50ID0gYXBpLlhMU1hfRVhQT1JUX0NPUkVfUEFHRV9MSVNUX1RPX0VYQ0VMO1xyXG4gICAgICAgICAgICBjb25zdCBmbGF0Q29sdW1uczogSUNvcmVUYWJsZUZsYXRDb2x1bW5JdGVtW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAheC5oaWRkZW4pLm1hcChjID0+IHtcclxuICAgICAgICAgICAgICBmbGF0Q29sdW1ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBjYXB0aW9uOiBjLmNhcHRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICB0eXBlOiBjLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgIHBpcGU6IGMucGlwZSxcclxuICAgICAgICAgICAgICAgICAgYWxpZ246IGMuYWxpZ24sXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBjLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgICBoaWRkZW46IGMuaGlkZGVuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmxhdERhdGE6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIGZsYXRDb2x1bW5zLm1hcChjID0+IGtleXMucHVzaChjLmZpZWxkKSk7XHJcbiAgICAgICAgICAgIGJvZHkuaW5uZXJCb2R5Lmxpc3QubWFwKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGU6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICAgIGtleXMubWFwKGsgPT4ge1xyXG4gICAgICAgICAgICAgICAgZVtrXSA9IHJvd1trXTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIGZsYXREYXRhLnB1c2goZSk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgICAgICAgICAgY29sdW1uczogZmxhdENvbHVtbnMsXHJcbiAgICAgICAgICAgICAgZGF0YTogZmxhdERhdGFcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuanNvblNlcnZpY2Uuc3RyaW5naWZ5KG9iaik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0Q29yZVBhZ2VMaXN0R3JpZFRvRXhjZWxTdWJzY3JpcHRpb24gPSB0aGlzLmFwcFNlcnZpY2UuYmxvYlBvc3QoYXBpUG9pbnQsIHBheWxvYWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5ib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkgcmV0dXJuXHJcblxyXG4gICAgICAgICAgICAgIGxldCBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtyZXNwb25zZS5ib2R5XSkpXHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIHRoaXMubWxzLnRyYW5zKHRoaXMudGl0bGUpICsgXCIueGxzeFwiKTtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkTGluayk7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcblxyXG4gIH1cclxuXHJcbiAgb25Db3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKGU6IElDb3JlQnV0dG9uVk5TKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2suZW1pdChlKTtcclxuXHJcbiAgICBzd2l0Y2ggKGUuY29kZSkge1xyXG5cclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURTpcclxuXHJcbiAgICAgICAgaWYgKCEhIXRoaXMuc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUVkaXRTZXJ2aWNlLmZyb21VcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsTW9kZSkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW2J0b2EoJzAnKSwgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfV0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBvdXRsZXRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZVBhZ2VMaXN0QXV4OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBidG9hKCcwJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVDpcclxuICAgICAgICBpZiAoISEhdGhpcy5zZWxmUmVzb2x2ZUNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2spIHtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlRWRpdFNlcnZpY2UuZnJvbVVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IodGhpcy5tbHMudHJhbnMoJ1NFTEVDVF9PTkxZX09ORV9SRUNPUkRfVE9fRURJVCcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCEhdGhpcy5ub3JtYWxNb2RlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgICAgIFtidG9hKCcnICsgdGhpcy5zZWxlY3RlZElkc1swXSksIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH1dLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBidG9hKCcnICsgdGhpcy5zZWxlY3RlZElkc1swXSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19FRElUJyksIGFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BQ1RJVkFURTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0FDVElWQVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXF1ZXN0OiBJVG9nZ2xlQWN0aXZlSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgIHZhbHVlVG9CaW5kOiB0cnVlLFxyXG4gICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgY29uZmlybUFjdGl2ZSA9IHdpbmRvdy5jb25maXJtKFxyXG4gICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ2NvbW1vbi5jb25maXJtLmRlbGV0ZS5hY3RpdmUucHJlZml4JykgK1xyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZElkcykgK1xyXG4gICAgICAgICAgJz8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlybUFjdGl2ZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jcnVkLnRvZ2dsZUFjdGl2ZUlkcykge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzLCByZXF1ZXN0KVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuTk9fQVBJX0VORF9QT0lOVF9QUk9WSURFRF9GT1JfQUNUSVZBVElPTiksIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfSU5BQ1RJVkFURTpcclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuQ09SRV9QQUdFX0xJU1RfSU5BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0lOQUNUSVZBVEUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IElUb2dnbGVBY3RpdmVJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgdmFsdWVUb0JpbmQ6IGZhbHNlLFxyXG4gICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgY29uZmlybUluYWN0aXZlID0gd2luZG93LmNvbmZpcm0oXHJcbiAgICAgICAgICB0aGlzLm1scy50cmFucygnY29tbW9uLmNvbmZpcm0uZGVsZXRlLmluYWN0aXZlLnByZWZpeCcpICtcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRJZHMpICtcclxuICAgICAgICAgICc/J1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGNvbmZpcm1JbmFjdGl2ZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jcnVkLnRvZ2dsZUFjdGl2ZUlkcykge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzLCBwYXlsb2FkKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuTk9fQVBJX0VORF9QT0lOVF9QUk9WSURFRF9GT1JfQUNUSVZBVElPTiksIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFOlxyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnbnVtYmVyJyAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ3N0cmluZydcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgJ0NPUkVfUEFHRV9MSVNUX0RFTEVURV9JRFNfTUVUSE9EX1NVUE9SVFNfT05MWV9OVU1CRVJfQU5EX1NUUklOR19UWVBFUydcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0RFTEVURScpLFxyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghIXRoaXMuZGVsZXRlVmFsaWRhdGVGbikge1xyXG5cclxuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZDogYm9vbGVhbiA9IHRoaXMuZGVsZXRlVmFsaWRhdGVGbih0aGlzLnNlbGVjdGVkRGF0YSk7XHJcbiAgICAgICAgICBpZiAoISEhdmFsaWRhdGVkKSByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50aXRsZSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQ09ORklSTUFUSU9OKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5va0J1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DT05GSVJNKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jYW5jZWxCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q2FuY2VsT25seSQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3kgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5ib2R5JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9BUkVfWU9VX1NVUkVfVE9fREVMRVRFKTtcclxuICAgICAgICBsZXQgbGlzdERlbGV0ZUlkczogYW55W10gPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YS5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgbGlzdERlbGV0ZUlkcy5wdXNoKHhbdGhpcy5jb2x1bW5zWzFdLmZpZWxkXSlcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mb3JtYXRpb25MaW5lcyQubmV4dChsaXN0RGVsZXRlSWRzKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkFQUFJPVkU6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoXHJcbiAgICAgICAgICAgICAgICAnQ09SRV9QQUdFX0xJU1RfREVMRVRFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9BTkRfU1RSSU5HX1RZUEVTJ1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLm1scy50cmFucygnTk9fU0VMRUNURURfSURfVE9fREVMRVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5kZWxldGVWYWxpZGF0ZUZuKSB7XHJcblxyXG4gICAgICAgICAgY29uc3QgdmFsaWRhdGVkOiBib29sZWFuID0gdGhpcy5kZWxldGVWYWxpZGF0ZUZuKHRoaXMuc2VsZWN0ZWREYXRhKTtcclxuICAgICAgICAgIGlmICghISF2YWxpZGF0ZWQpIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGlvbiA9IEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5BUFBST1ZFXHJcbiAgICAgICAgLy8gdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04pXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9rQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NPTkZJUk0pXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNhbmNlbEJ1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DQU5DRUwpXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDYW5jZWxPbmx5JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJvZHkkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0FSRV9ZT1VfVU5BUFBST1ZFX0lOUFVUX1JFQVNPTik7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dpbmdVcCQubmV4dCh0cnVlKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FQUFJPVkU6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuQ09SRV9QQUdFX0xJU1RfQUNUSVZFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9UWVBFXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19BUFBST1ZFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXF1ZXN0QXBwcm92ZTogSVRvZ2dsZUFwcHJvdmVJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgdmFsdWVUb0JpbmQ6IHRydWUsXHJcbiAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBjb25maXJtQXBwcm92ZSA9IHdpbmRvdy5jb25maXJtKFxyXG4gICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ2NvbW1vbi5jb25maXJtLmFwcHJvdmUucHJlZml4JykgK1xyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZElkcykgK1xyXG4gICAgICAgICAgJz8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlybUFwcHJvdmUpIHtcclxuICAgICAgICAgIGlmICghIXRoaXMuY3J1ZC50b2dnbGVBcHByb3ZlSWRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5wb3N0KHRoaXMuY3J1ZC50b2dnbGVBcHByb3ZlSWRzLCByZXF1ZXN0QXBwcm92ZSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICEhIXRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2Fybih0aGlzLm1scy50cmFucyhFbnVtVHJhbnNsYXRlS2V5Lk5PX0FQSV9FTkRfUE9JTlRfUFJPVklERURfRk9SX0FDVElWQVRJT04pLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BFTkRJTkdfQVBQUk9WRTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX1BFTkRJTkdfQVBQUk9WRScpLFxyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdFBlbmRpbmdBcHByb3ZlOiBJVG9nZ2xlQXBwcm92ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICB2YWx1ZVRvQmluZDogZmFsc2UsXHJcbiAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBjb25maXJtUGVuZGluZ0FwcHJvdmUgPSB3aW5kb3cuY29uZmlybShcclxuICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdjb21tb24uY29uZmlybS5wZW5kaW5nLmFwcHJvdmUucHJlZml4JykgK1xyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZElkcykgK1xyXG4gICAgICAgICAgJz8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlybVBlbmRpbmdBcHByb3ZlKSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLmNydWQudG9nZ2xlQXBwcm92ZUlkcykge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQXBwcm92ZUlkcywgcmVxdWVzdFBlbmRpbmdBcHByb3ZlKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuTk9fQVBJX0VORF9QT0lOVF9QUk9WSURFRF9GT1JfQUNUSVZBVElPTiksIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRVhQT1JURVhFTDpcclxuXHJcbiAgICAgICAgdGhpcy5leHBvcnRUb0V4Y2VsKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ET1dOTE9BRDpcclxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkhFQURFUl9ET1dOTE9BRCBjbGlja2VkXCIsIG5vdyk7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGltcG9ydC1zYWxhcnktYmFja2RhdGVgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBzYWxhcnktaW1wb3J0YCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgaW1wb3J0LWFkZGApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGltcG9ydC1tb250aGx5LXRheGApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYHNoaWZ0c29ydGApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGRlY2xhcmVzdW5wZXJgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGByZWdpc3RlcmxlYXZlYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgb3ZlcnRpbWVgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBpbXBvcnQtdGF4LWFubnVhbGApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGNtcy9wcm9maWxlL2xpc3QvZXZhbHVhdGVgKSEgPCAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWNrR2VuZXJhdGVUZW1wbGF0ZSQubmV4dChub3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VQTE9BRDpcclxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgY21zL3Byb2ZpbGUvbGlzdC9ldmFsdWF0ZWApID49IDApIHtcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VIZWFkZXJCdXR0b25DbGljay5lbWl0KGUpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYnJvd3NlRmlsZUlucHV0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfTE9DSzpcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOTE9DSzpcclxuICAgICAgICB0aGlzLmNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2suZW1pdChlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGUuY29kZSlcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWRJZHNDaGFuZ2UoZTogc3RyaW5nW10gfCBudW1iZXJbXSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZElkcyA9IGU7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzQ2hhbmdlLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkRGF0YUNoYW5nZShlOiBhbnlbXSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSBlO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGFDaGFuZ2UuZW1pdChlKTtcclxuICAgIGlmICghIWUubGVuZ3RoKSB7XHJcbiAgICAgIGlmIChlLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzPy5tdXN0QmVIaWRkZW4kLm5leHQoW1xyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULFxyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9MSVFVSURBVEVfQ09OVFJBQ1RcclxuICAgICAgICBdKVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICBpZiAoISFlWzBdLmlzTG9jaykge1xyXG4gICAgICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cz8ubXVzdEJlSGlkZGVuJC5uZXh0KFtFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xPQ0tdKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzPy5tdXN0QmVIaWRkZW4kLm5leHQoW0VudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5MT0NLXSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzPy5tdXN0QmVIaWRkZW4kLm5leHQoRU1QVFlfU0VMRUNUSU9OX0hJRERFTl9CVVRUT04pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25Db2x1bW5DYXB0aW9uQ2xpY2soZTogSUNvcmVUYWJsZUNvbHVtbkl0ZW0pIHtcclxuICAgIGNvbnN0IG5ld1NvcnQ6IElTb3J0SXRlbVtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNvcnQkLnZhbHVlKSk7XHJcbiAgICBuZXdTb3J0Lm1hcCgoYykgPT4ge1xyXG4gICAgICBpZiAoYy5maWVsZCA9PT0gZS5maWVsZCkge1xyXG4gICAgICAgIGlmIChjLnNvcnREaXJlY3Rpb24gPT09IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkUpIHtcclxuICAgICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLkFTQztcclxuICAgICAgICB9IGVsc2UgaWYgKGMuc29ydERpcmVjdGlvbiA9PT0gRW51bVNvcnREaXJlY3Rpb24uQVNDKSB7XHJcbiAgICAgICAgICBjLnNvcnREaXJlY3Rpb24gPSBFbnVtU29ydERpcmVjdGlvbi5ERVNDO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjLnNvcnREaXJlY3Rpb24gPSBFbnVtU29ydERpcmVjdGlvbi5OT05FO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjLnNvcnREaXJlY3Rpb24gPSBFbnVtU29ydERpcmVjdGlvbi5OT05FO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc29ydCQubmV4dChuZXdTb3J0KTtcclxuICB9XHJcblxyXG4gIGlucHV0RmlsZSA9IGFzeW5jIChlOiBhbnkpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKFwiaW5wdXRGaWxlIGVcIiwgZSlcclxuICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXM7XHJcbiAgICBjb25zdCBmaWxlID0gZmlsZXNbMF07XHJcbiAgICBsZXQgZmlsZU5hbWUgPSBmaWxlLm5hbWU7XHJcblxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtmaWxlXSk7XHJcblxyXG4gICAgYmxvYlRvQmFzZTY0KGJsb2IpLnRoZW4oKGJhc2U2NDogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMub25JbnB1dEZpbGVCYXNlNjREYXRhUmVhZHkuZW1pdChiYXNlNjQpO1xyXG5cclxuICAgICAgLy8gTuG6v3UgdGhhbSBz4buRIGdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0IMSRxrDhu6NjIHRydXnhu4FuIHbDoG9cclxuICAgICAgLy8gSW1wb3J0IHPhur0gdGjhu7FjIHRoaSB0aGVvIHF1eSB0csOsbmggQ29yZVxyXG4gICAgICBpZiAodGhpcy5nZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdCkge1xyXG4gICAgICAgIGNvbnN0IGltcG9ydFhsc3hUb0RiUmVxdWVzdDogSUltcG9ydFhsc3hUb0RiUmVxdWVzdCA9IHtcclxuICAgICAgICAgIGZpbGVOYW1lLFxyXG4gICAgICAgICAgZXhDb2RlOiB0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0LmV4Q29kZSxcclxuICAgICAgICAgIGJhc2U2NFN0cmluZzogYmFzZTY0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmltcG9ydFhsc3hUb0RiKGltcG9ydFhsc3hUb0RiUmVxdWVzdCkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gTnVtYmVyKHRoaXMubG9uZ1Rhc2tTZXJ2aWNlLmRhdGEkLnZhbHVlPy5vdXRlck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICBsZXQgZG93bmxvYWRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbeC5ib2R5XSkpXHJcbiAgICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zcGxpdChcIi54bHN4XCIpWzBdICsgXCJfcHJvY2Vzc2VkX1wiICsgbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBcIi54bHN4XCI7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGZpbGVOYW1lKTtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkTGluayk7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGltcG9ydFByZXZpZXdPdXRlclBhcmFtOiBJWGxzeEltcG9ydE9iamVjdCA9IHtcclxuICAgICAgICAgICAgICAgIHhsc3hTaWQ6IHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWU/LmlkISxcclxuICAgICAgICAgICAgICAgIHhsc3hFeENvZGU6IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QuZXhDb2RlLFxyXG4gICAgICAgICAgICAgICAgeGxzeFNlc3Npb246IHNlc3Npb25cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmICghISF0aGlzLmltcG9ydFByZXZpZXdQYXRoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFwiJ2ltcG9ydFByZXZpZXdQYXRoJyBpbnB1dCBwcm9wZXJ0eSB3YXMgbWlzc2luZyFcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZVBhZ2VMaXN0QXV4OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbXBvcnRQcmV2aWV3UGF0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgc3RhdGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuXHJcblxyXG4gIH07XHJcblxyXG4gIGJyb3dzZUZpbGVJbnB1dCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiYnJvd3NlRmlsZUlucHV0XCIpXHJcbiAgICB0aGlzLmZpbGVJbXBvcnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLmZpbGVJbXBvcnQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgb25Qcm9ncmVzc1dpbmRvd0Nsb3NlKF86IGFueSkge1xyXG4gICAgdGhpcy5sb25nQXBpUnVubmluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5leHBvcnRDb3JlUGFnZUxpc3RHcmlkVG9FeGNlbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKCh4KSA9PiB4Py51bnN1YnNjcmliZSgpKTtcclxuICAgIGlmICghIXRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uKSB0aGlzLnF1ZXJ5TGlzdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLXBhZ2UtbGlzdC1jb250YWluZXJcIiAjY29yZVBhZ2VMaXN0Q29udGFpbmVyIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBoZWlnaHQgKyAncHgnIH1cIj5cclxuXHJcbiAgICA8Y29yZS1wYWdlLWhlYWRlciAqbmdJZj1cIiEhIWhpZGVIZWFkZXJcIiBbaW5zdGFuY2VOdW1iZXJdPVwiY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcIiBbdGl0bGVdPVwidGl0bGVcIiAoYnV0dG9uQ2xpY2spPVwib25Db3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIFtoaWRlQnV0dG9uR3JvdXBdPVwiISFzZWVrZXJNb2RlIHx8ICEhaGlkZUJ1dHRvbkdyb3VwXCI+PC9jb3JlLXBhZ2UtaGVhZGVyPlxyXG5cclxuICAgIDxpbnB1dCAjZmlsZUltcG9ydCB0eXBlPVwiZmlsZVwiIG5hbWU9XCJuYW1lXCJcclxuICAgICAgICBhY2NlcHQ9XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCwgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCJcclxuICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgKGNoYW5nZSk9J2lucHV0RmlsZSgkZXZlbnQpJyAvPlxyXG5cclxuICAgIDwhLS1cclxuICAgICAgICBLaGkgxJHDoyB0w61uaCDEkcaw4bujYyBjaMOtbmggeMOhYyBjaGnhu4F1IGNhbyBjb21wb3NpdGlvbkhlaWdodCBj4bunYSBjb3JlLWNvbXBvc2l0aW9uXHJcbiAgICAgICAgQ+G6p24gdMOtbmggxJHGsOG7o2MgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW8gY29yZVRhYmxlSGVpZ2h0IGPhu6dhIENvcmVUYWJsZVxyXG4gICAgICAgIE7hur91IHBo4bqnbiB0b3AgY+G7p2EgY29tcG9zaXRpb24gY+G7kSDEkeG7i25oICh2w60gZOG7pSBraGkgc+G7rSBk4bulbmcgQ29yZVBhcmFtS2l0KSB0aMOsIHBow6lwIHRy4burIMSRxqFuIGdp4bqjblxyXG4gICAgICAgIE5oxrBuZyBu4bq/dSBwaOG6p24gdG9wIMSRxrDhu6NjIGN1c3RvbWl6ZSwgdGEgcGjhuqNpIHPhu60gZOG7pW5nIGV4dHJhTWFudWFsT2Zmc2V0XHJcbiAgICAtLT5cclxuICAgIDxjb3JlLWNvbXBvc2l0aW9uIFtjb3JlQ29tcG9zaXRpb25JbnN0YW5jZU51bWJlcl09XCJjb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclwiIFt0b3BdPVwidG9wUGxhY2VcIiBbbGVmdF09XCIhIWhpZGVMZWZ0PyB1bmRlZmluZWQgOmxlZnRcIiBbbWFpbl09XCJjb3JlVGFibGVcIiBbaGVpZ2h0XT1cImNvbXBvc2l0aW9uSGVpZ2h0XCI+XHJcbiAgICA8L2NvcmUtY29tcG9zaXRpb24+XHJcblxyXG4gICAgPHJvdXRlci1vdXRsZXQgbmFtZT1cImNvcmVQYWdlTGlzdEF1eFwiPjwvcm91dGVyLW91dGxldD5cclxuXHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICN0b3BQbGFjZT5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFzaG93UGFyYW1LaXRcIj5cclxuICAgICAgICA8Y29yZS1jb21tb24tcGFyYW0ta2l0IFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvcl09XCJkYXRlUGVyaW9kQ29tcGFyaXNvbkZvclwiXHJcbiAgICAgICAgICAgIFtlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc109XCJlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc1wiXHJcbiAgICAgICAgICAgIFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5XT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXlcIlxyXG4gICAgICAgICAgICBbc3RhdHVzSW5jbHVzaW9uRm9yXT1cInN0YXR1c0luY2x1c2lvbkZvclwiIFtzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleV09XCJzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgIFtzdGF0dXNPcHRpb25zQXBpXT1cInN0YXR1c09wdGlvbnNBcGlcIiBbaGlkZURhdGVQZXJpb2RDb21wYXJpc29uXT1cImhpZGVEYXRlUGVyaW9kQ29tcGFyaXNvblwiIFtoaWRlU3RhdHVzSW5jbHVzaW9uXT1cImhpZGVTdGF0dXNJbmNsdXNpb25cIlxyXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwib25QYXJhbUtpdFZhbHVlQ2hhbmdlKCRldmVudClcIj48L2NvcmUtY29tbW9uLXBhcmFtLWtpdD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b3BcIj5cclxuXHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvcmVUYWJsZT5cclxuXHJcbiAgICA8ZGl2IFtjbGFzcy5vcGFjaXR5MF09XCIhISFnZW9tZXRyaWNEb25lXCI+XHJcblxyXG4gICAgICAgIDwhLS1cclxuICAgICAgICAgICAgS2hpIMSRw6MgdMOtbmggxJHGsOG7o2MgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW8gY29tcG9zaXRpb25IZWlnaHQgY+G7p2EgY29yZS1jb21wb3NpdGlvblxyXG4gICAgICAgICAgICBD4bqnbiB0w61uaCDEkcaw4bujYyBjaMOtbmggeMOhYyBjaGnhu4F1IGNhbyBjb3JlVGFibGVIZWlnaHQgY+G7p2EgQ29yZVRhYmxlXHJcbiAgICAgICAgICAgIE7hur91IHBo4bqnbiB0b3AgY+G7p2EgY29tcG9zaXRpb24gY+G7kSDEkeG7i25oICh2w60gZOG7pSBraGkgc+G7rSBk4bulbmcgQ29yZVBhcmFtS2l0KSB0aMOsIHBow6lwIHRy4burIMSRxqFuIGdp4bqjblxyXG4gICAgICAgICAgICBOaMawbmcgbuG6v3UgcGjhuqduIHRvcCDEkcaw4bujYyBjdXN0b21pemUsIHRhIHBo4bqjaSBz4butIGThu6VuZyBleHRyYU1hbnVhbE9mZnNldFxyXG5cclxuICAgICAgICAgICAgQ+G6p24gdMOtbmggdGFibGVIZWlnaHQgbmjGsCB0aOG6vyBuw6BvP1xyXG4gICAgICAgIC0tPlxyXG4gICAgICAgIDxjb3JlLXRhYmxlICNjb3JlVGFibGVBbG9uZSB3aWR0aD1cIjEwMCVcIiBbaGVpZ2h0XT1cInRhYmxlSGVpZ2h0XCIgW3Jvd0hlaWdodF09XCJyb3dIZWlnaHQgfHwgJzQ2cHgnXCIgW3dyYXBdPVwid3JhcFwiXHJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZGF0YV09XCJsaXN0XCIgW3Nob3dDaGVja2JveF09XCIhISFoaWRlQ2hlY2tcIiBoZWFkZXJIZWlnaHQ9XCI2MHB4XCIgW3Nob3dUb29sc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW3Rvb2xzXT1cImlubGluZVRvb2xzXCIgKG9uVG9vbENsaWNrKT1cIm9uVG9vbENsaWNrKCRldmVudClcIiAob25Sb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAob25Sb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAob25TZWxlY3RlZElkc0NoYW5nZSk9XCJvblNlbGVjdGVkSWRzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAob25TZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiIFtmcm96ZW5dPVwiZnJvemVuIHx8IDFcIlxyXG4gICAgICAgICAgICAob25TZWFyY2hpbmcpPVwib25TZWFyY2hpbmcoJGV2ZW50KVwiIChvbkNvbHVtbkNhcHRpb25DbGljayk9XCJvbkNvbHVtbkNhcHRpb25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2NvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXT1cImNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXCIgW2xvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgICAgICAgICAgIFtjb2x1bW5TZWFyY2hEZWZhdWx0T3Blbl09XCJjb2x1bW5TZWFyY2hEZWZhdWx0T3BlblwiIFtsYXp5TG9hZGluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2hlYWRlcldyYXBdPVwiaGVhZGVyV3JhcFwiXHJcbiAgICAgICAgICAgIFtoZWFkZXJGaXJzdFJvd0hlaWdodF09XCJoZWFkZXJGaXJzdFJvd0hlaWdodFwiXHJcbiAgICAgICAgICAgIFtub1BhZGRpbmdDZWxsXT1cIm5vUGFkZGluZ0NlbGxcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZUhpZ2hsaWdodE9uQ2xpY2tdPVwiZGlzYWJsZUhpZ2hsaWdodE9uQ2xpY2tcIlxyXG4gICAgICAgICAgICA+PC9jb3JlLXRhYmxlPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4LWVuZCBwYWdpbmF0aW9uLXdyYXBwZXJcIiAjcGFnaW5hdGlvbkNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGNvcmUtcGFnaW5hdGlvbi1mdWxsIFtoZWlnaHRdPVwicGFnaW5hdGlvbkhlaWdodFwiIFtjdXJyZW50UGFnZSRdPVwiY3VycmVudFBhZ2UkXCIgW3BhZ2VTaXplJF09XCJwYWdlU2l6ZSRcIlxyXG4gICAgICAgICAgICAgICAgW3BhZ2VDb3VudF09XCJwYWdlQ291bnRcIiBbaW5uZXJCb2R5Q291bnQkXT1cImlubmVyQm9keUNvdW50JFwiIFtwYWdpbmF0aW9uJF09XCJwYWdpbmF0aW9uJFwiXHJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2ZpeGVkUGFnZVNpemVdPVwiZml4ZWRQYWdlU2l6ZVwiIFtiYWNrZ3JvdW5kXT1cIicjODQ4NDg0J1wiPjwvY29yZS1wYWdpbmF0aW9uLWZ1bGw+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxjb3JlLWFwaS1wcm9ncmVzcyAqbmdJZj1cImxvbmdBcGlSdW5uaW5nXCIgKG9uQ2xvc2UpPVwib25Qcm9ncmVzc1dpbmRvd0Nsb3NlKCRldmVudClcIj48L2NvcmUtYXBpLXByb2dyZXNzPlxyXG5cclxuPGFwcC1mdWxsc2NyZWVuLW1vZGFsLWxvYWRlciAqbmdJZj1cInByZWZldGNoTG9hZGluZ1wiPjwvYXBwLWZ1bGxzY3JlZW4tbW9kYWwtbG9hZGVyPiJdfQ==
1773
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wYWdlLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtcGFnZS1saXN0L2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBhZ2UtbGlzdC9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBb0MsU0FBUyxFQUFlLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUNuTCxPQUFPLEVBQTBCLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsR0FBNEQsTUFBTSxvQ0FBb0MsQ0FBQztBQUlsSSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBZ0IsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQztBQUN6SSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsMkJBQTJCLEVBQXVDLE1BQU0sZ0ZBQWdGLENBQUM7QUFLbEssT0FBTyxFQUFFLGtCQUFrQixFQUF3RixNQUFNLG9DQUFvQyxDQUFD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Y2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkLCBUZW1wbGF0ZVJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgaXNEZXZNb2RlLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDb3JlVGFibGVDb21wb25lbnQsIElDb3JlVGFibGVUb29sQ2xpY2tFdmVudEVtaXR0ZXJEYXRhLCBJQ29yZVRhYmxlVG9vbEl0ZW0sIH0gZnJvbSAnLi4vY29yZS10YWJsZS9jb3JlLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVQYWdlTGlzdFNlcnZpY2UsIElHZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdCwgSUltcG9ydFhsc3hUb0RiUmVxdWVzdCB9IGZyb20gJy4vY29yZS1wYWdlLWxpc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVQYWdlRWRpdFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLXBhZ2UtZWRpdC9jb3JlLXBhZ2UtZWRpdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIGZyb21FdmVudCwgbWFwLCBzd2l0Y2hNYXAsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvcmVQYWdlTGlzdFN0YXRlIH0gZnJvbSAnLi9jb3JlLXBhZ2UtbGlzdC5zdGF0ZSc7XHJcbmltcG9ydCB7IElDb3JlQnV0dG9uVk5TIH0gZnJvbSAnLi4vY29yZS1idXR0b24tZ3JvdXAtdm5zL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9JQ29yZUJ1dHRvblZOUyc7XHJcbmltcG9ydCB7IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvRW51bUNvcmVCdXR0b25WTlNDb2RlJztcclxuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29yZUNvbW1vblBhcmFtS2l0Q29tcG9uZW50LCBJQ29yZUNvbW1vblBhcmFtS2l0RXZlbnRFbWl0dGVyRGF0YSB9IGZyb20gJy4uL2NvcmUtY29tbW9uLXBhcmFtLWtpdC9jb3JlLWNvbW1vbi1wYXJhbS1raXQvY29yZS1jb21tb24tcGFyYW0ta2l0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvbmdUYXNrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvbmctdGFzay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUNvbXBvc2l0aW9uU2VydmljZSB9IGZyb20gJy4uL2NvcmUtY29tcG9zaXRpb24vY29yZS1jb21wb3NpdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29yZUJ1dHRvbkdyb3VwU2VydmljZSB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUNvcmVCdXR0b25Hcm91cFN0YXR1cyB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC1zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW51bUZpbHRlck9wZXJhdG9yLCBJRmlsdGVyT3BlcmF0b3IsIElJbk9wZXJhdG9yLCBJUGFnaW5hdGlvbiwgSVF1ZXJ5TGlzdFJlcXVlc3QsIElTZWFyY2hJdGVtLCBJU29ydEl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lRdWVyeUxpc3RSZXF1ZXN0JztcclxuaW1wb3J0IHsgYXBpIH0gZnJvbSBcImFscGhhLWdsb2JhbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3V0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGF5b3V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2pzb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGFsZXJ0T3B0aW9ucywgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcclxuaW1wb3J0IHsgSUZvcm1hdGVkUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGb3JtYXRlZFJlc3BvbnNlJztcclxuaW1wb3J0IHsgSVF1ZXJ5TGlzdFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUXVlcnlMaXN0UmVzcG9uc2UnO1xyXG5pbXBvcnQgeyBkZWZhdWx0UGFnaW5nIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHRQYWdpbmcnO1xyXG5pbXBvcnQgeyBJSWRzUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUlkc1JlcXVlc3QnO1xyXG5pbXBvcnQgeyBJVG9nZ2xlQWN0aXZlSWRzUmVxdWVzdCwgSVRvZ2dsZUFwcHJvdmVJZHNSZXF1ZXN0LCBJVG9uZ2xlVW5BcHByb3ZlSWRzUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVRvZ2dsZUFjdGl2ZUlkc1JlcXVlc3QnO1xyXG5pbXBvcnQgeyBFbnVtU29ydERpcmVjdGlvbiB9IGZyb20gJy4uLy4uL2VudW0vRW51bVNvcnREaXJlY3Rpb24nO1xyXG5pbXBvcnQgeyBJU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCc7XHJcbmltcG9ydCB7IElDb3JlVGFibGVDb2x1bW5JdGVtIH0gZnJvbSAnLi4vY29yZS10YWJsZS9JQ29yZVRhYmxlQ29sdW1uSXRlbSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvcmVQYWdpbmF0aW9uRnVsbENvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtcGFnaW5hdGlvbi1mdWxsL2NvcmUtcGFnaW5hdGlvbi1mdWxsL2NvcmUtcGFnaW5hdGlvbi1mdWxsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVQYWdlSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyL2NvcmUtcGFnZS1oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUNvbXBvc2l0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1jb21wb3NpdGlvbi9jb3JlLWNvbXBvc2l0aW9uL2NvcmUtY29tcG9zaXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUFwaVByb2dyZXNzQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1hcGktcHJvZ3Jlc3MvY29yZS1hcGktcHJvZ3Jlc3MvY29yZS1hcGktcHJvZ3Jlc3MuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRnVsbHNjcmVlbk1vZGFsTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXIvZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXIuY29tcG9uZW50JztcclxuXHJcbi8qIEtoaSBraMO0bmcgY8OzIGTDsm5nIG7DoG8gxJHGsOG7o2MgdGljayBjaOG7jW4sIGPDoWMgbsO6dCBzYXUgc+G6vSDEkcaw4bujYyDhuqluIMSRaTogKi9cclxuY29uc3QgRU1QVFlfU0VMRUNUSU9OX0hJRERFTl9CVVRUT046IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdID0gW1xyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCwgLy8gU+G7rWFcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xPQ0ssIC8vIEtow7NhXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkxPQ0ssIC8vIE3hu58ga2jDs2FcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FDVElWQVRFLCAvLyDDgXAgZOG7pW5nXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9JTkFDVElWQVRFLCAvLyBOZ+G7q25nIMOhcCBk4bulbmdcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1JFU0VULCAvLyBSZXNldCAobeG6rXQga2jhuql1KVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ09QWSwgLy8gU2FvIGNow6lwXHJcblxyXG4gIC8vIEPDoWMgdGjhu4MgbG/huqFpIGluXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QUklOVCxcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BSSU5UXzJDLFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUFJJTlRfMkNfMjAwOCxcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BSSU5UXzJDXzk4LFxyXG4gIC8vXHJcblxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFLCAvLyB4w7NhXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BUFBST1ZFLCAvLyBwaMOqIGR1eeG7h3RcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1JFSkVDVCwgLy8gdOG7qyBjaOG7kWlcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRSwgLy8gYuG7jyBwaMOqIGR1eeG7h3RcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BFTkRJTkdfQVBQUk9WRSwgLy8gbeG7nyBjaOG7nSBwaMOqIGR1eeG7h3RcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xJUVVJREFURV9DT05UUkFDVCwgLy8gdGhhbmggbMO9IGjhu6NwIMSR4buTbmdcclxuXVxyXG5cclxuLy9kZWNsYXJlIGxldCBjb3JlRmlsZVV0aWxzOiBhbnk7XHJcbi8vaW1wb3J0IHsgY29yZUZpbGVVdGlscyB9IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9qcy9jb3JlRmlsZVV0aWxzJztcclxuLy9jb25zdCBibG9iVG9CYXNlNjQgPSBjb3JlRmlsZVV0aWxzLnByb3RvdHlwZS5ibG9iVG9CYXNlNjQ7XHJcblxyXG5jb25zdCBibG9iVG9CYXNlNjQgPSBhc3luYyAoYmxvYikgPT4ge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgXykgPT4ge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXHJcbiAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQpXHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVBhZ2VMaXN0QXBpRGVmaW5pdGlvbiB7XHJcbiAgcXVlcnlMaXN0UmVsYXRpdmVQYXRoOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVQYWdlTGlzdFNlYXJjaE9iamVjdCB7XHJcbiAgcHJldmlvdXM6IElTZWFyY2hJdGVtW107XHJcbiAgY3VycmVudDogSVNlYXJjaEl0ZW1bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVBhZ2VMaXN0RWRpdFJvdXRpbmcge1xyXG4gIGF1eGlsaWFyeTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlUGFnZUxpc3RDUlVEIHtcclxuICBkZWxldGVJZHM/OiBhcGk7XHJcbiAgdG9nZ2xlQWN0aXZlSWRzPzogYXBpO1xyXG4gIHRvZ2dsZUFwcHJvdmVJZHM/OiBhcGk7XHJcbiAgdG9nZ2xlVW5hcHByb3ZlSWRzPzogYXBpO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElYbHN4SW1wb3J0T2JqZWN0IHtcclxuICB4bHN4U2lkOiBzdHJpbmcsXHJcbiAgeGxzeEV4Q29kZTogc3RyaW5nLFxyXG4gIHhsc3hTZXNzaW9uOiBudW1iZXIsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVUYWJsZUZsYXRDb2x1bW5JdGVtIHtcclxuICBjYXB0aW9uOiBzdHJpbmc7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIHBpcGU/OiBzdHJpbmc7XHJcbiAgYWxpZ24/OiBzdHJpbmc7XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgaGlkZGVuPzogYm9vbGVhbjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLXBhZ2UtbGlzdCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBSb3V0ZXJNb2R1bGUsXHJcbiAgICBDb3JlVGFibGVDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnaW5hdGlvbkZ1bGxDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCxcclxuICAgIENvcmVDb21wb3NpdGlvbkNvbXBvbmVudCxcclxuICAgIENvcmVDb21tb25QYXJhbUtpdENvbXBvbmVudCxcclxuICAgIENvcmVBcGlQcm9ncmVzc0NvbXBvbmVudCxcclxuICAgIEZ1bGxzY3JlZW5Nb2RhbExvYWRlckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3JlUGFnZUxpc3RDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gICAgQ29yZVBhZ2VMaXN0U3RhdGUsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVQYWdlTGlzdENvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAvKiBXSEVOIFlPVSBETyBOT1QgV0FOVCBQT1BVUCwgcGFzcyBbbm9ybWFsTW9kZV09XCJ0cnVlXCIgKi9cclxuICBASW5wdXQoKSBub3JtYWxNb2RlITogYm9vbGVhbjtcclxuICAvKiBTVEFSVDogU29tZSByb3V0ZWQgY29tcG9uZW50cywgc3VjaCBhcyBTdGFmZlByb2ZpbGUsIG1heSBiZSByZXVzZWQgYXMgcmVhZG9ubHkgZm9yIHNlZWtpbmcgKi9cclxuICBASW5wdXQoKSBoaWRlSGVhZGVyITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoaWRlQnV0dG9uR3JvdXAhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNlZWtlck1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG1jY01vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhlaWdodCE6IG51bWJlcjtcclxuICAvKiBFTkQ6IFNvbWUgcm91dGVkIGNvbXBvbmVudHMsIHN1Y2ggYXMgU3RhZmZQcm9maWxlLCBtYXkgYmUgcmV1c2VkIGFzIHJlYWRvbmx5IGZvciBzZWVraW5nICovXHJcblxyXG4gIC8qIGNoYW5nZSB0aGVzZSAyIHByb3BzIHRvIHdyYXAgaGVhZGVyIHRleHRzICovXHJcbiAgQElucHV0KCkgaGVhZGVyV3JhcCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVhZGVyRmlyc3RSb3dIZWlnaHQhOiBudW1iZXI7XHJcbiAgLyoqICovXHJcblxyXG4gIC8qKlNob3cgUGFyYW1LaXQgKi9cclxuICBASW5wdXQoKSBlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVycyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd1BhcmFtS2l0ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkYXRlUGVyaW9kQ29tcGFyaXNvbkZvciE6IHN0cmluZztcclxuICBASW5wdXQoKSBkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5ITogRW51bVRyYW5zbGF0ZUtleTtcclxuICBASW5wdXQoKSBzdGF0dXNJbmNsdXNpb25Gb3IhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3RhdHVzSW5jbHVzaW9uRm9yTGFiZWxLZXkhOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIHN0YXR1c09wdGlvbnNBcGkhOiBhcGk7XHJcbiAgQElucHV0KCkgaGlkZURhdGVQZXJpb2RDb21wYXJpc29uITogYm9vbGVhbjsgLy8gaWYgd2Ugd2FudCBub3QgdG8gdXNlIGRhdGUgcCBmaWx0ZXJcclxuICBASW5wdXQoKSBoaWRlU3RhdHVzSW5jbHVzaW9uITogYm9vbGVhbjsgLy8gaWYgd2Ugd2FudCBub3QgdG8gdXNlIHN0YXR1cyBmaWx0ZXJcclxuICAvKipFbmQgU2hvdyBQYXJhbUtpdCAqL1xyXG5cclxuICBASW5wdXQoKSB0aXRsZSE6IEVudW1UcmFuc2xhdGVLZXk7XHJcbiAgQElucHV0KCkgaGFzSWRPZlN0cmluZ1R5cGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhpZGVDaGVjayE6IGJvb2xlYW47XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWV9KSBhcGlEZWZpbml0aW9uITogSUNvcmVQYWdlTGlzdEFwaURlZmluaXRpb247XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWV9KSBjb2x1bW5zITogSUNvcmVUYWJsZUNvbHVtbkl0ZW1bXTtcclxuICBASW5wdXQoKSBmcm96ZW4hOiBudW1iZXI7XHJcbiAgQElucHV0KCkgaW5saW5lVG9vbHMhOiBJQ29yZVRhYmxlVG9vbEl0ZW1bXTtcclxuICBASW5wdXQoKSBpbmxpbmVUb29sSXRlbXMhOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGVbXTtcclxuICBASW5wdXQoKSBlZGl0Um91dGUhOiBJQ29yZVBhZ2VMaXN0RWRpdFJvdXRpbmc7XHJcbiAgQElucHV0KCkgY3J1ZCE6IElDb3JlUGFnZUxpc3RDUlVEO1xyXG4gIEBJbnB1dCgpIHNob3dMaXN0SW5saW5lVG9vbHMhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRvcCE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgbGVmdCE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgaGlkZUxlZnQhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG91dGVyUGFyYW0kITogQmVoYXZpb3JTdWJqZWN0PGFueT47IC8vIFNvbWUgc2ltcGxlIG1hc3RlciBkYXRhIGRvIG5vdCBoYXZlIG91dGVyUGFyYW0kIElNUE9SVEFOVCEhIVxyXG4gIEBJbnB1dCgpIG91dGVyU29ydCE6IElTb3J0SXRlbVtdO1xyXG4gIEBJbnB1dCgpIG91dGVyRmlsdGVyT3BlcmF0b3JzITogSUZpbHRlck9wZXJhdG9yW107XHJcbiAgQElucHV0KCkgb3V0ZXJJbk9wZXJhdG9ycyE6IElJbk9wZXJhdG9yW10gfCBudWxsO1xyXG4gIEBJbnB1dCgpIGF1dG9SZXNpemVXaXRoV2luZG93ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBleHRyYU1hbnVhbE9mZnNldCE6IG51bWJlcjtcclxuICBASW5wdXQoKSB3cmFwITogYm9vbGVhbjtcclxuICBASW5wdXQoKSByb3dIZWlnaHQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrITogYm9vbGVhbjsgLy8gVGhlIGNhbGxlciB3aWxsIGl0c2VsZiByZXNvbHZlIGV2ZW50cyBlbW1pdGVkIGJ5IENvcmVQYWdlSGVhZGVyIGJ1dHRvbnMgKGZvciBzb21lKVxyXG4gIEBJbnB1dCgpIGNsZWFyRGF0YSQhOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XHJcbiAgQElucHV0KCkgZGVsZXRlVmFsaWRhdGVGbiE6IEZ1bmN0aW9uO1xyXG4gIEBJbnB1dCgpIGdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0ITogSUdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0O1xyXG4gIEBJbnB1dCgpIGltcG9ydFByZXZpZXdQYXRoITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNvbHVtblNlYXJjaERlZmF1bHRPcGVuITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBmaXhlZFBhZ2VTaXplITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVEb3VibGVDbGljayE6IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIG5vUGFkZGluZ0NlbGwhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVIaWdobGlnaHRPbkNsaWNrITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBsb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVkSWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10+KFtdKTtcclxuXHJcblxyXG4gIEBPdXRwdXQoKSBjb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29yZUJ1dHRvblZOUz4oKTtcclxuICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJvd0RvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZElkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWREYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkluc3RhbmNlQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBvbklucHV0RmlsZUJhc2U2NERhdGFSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdjb3JlUGFnZUxpc3RDb250YWluZXInKSBjb3JlUGFnZUxpc3RDb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3BhZ2luYXRpb25Db250YWluZXInKSBwYWdpbmF0aW9uQ29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdmaWxlSW1wb3J0JykgZmlsZUltcG9ydCE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGdlb21ldHJpY0RvbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaGVpZ2h0UmVzaXppbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoZWlnaHQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG4gIHRvcFBsYWNlSGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcmVzaXplSGVpZ2h0RmxhZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcGFnaW5hdGlvbkhlaWdodCE6IG51bWJlcjtcclxuICBjb21wb3NpdGlvbkhlaWdodCE6IG51bWJlcjtcclxuICBjb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciE6IG51bWJlcjtcclxuICBkaWFsb2dJbnN0YW5jZU51bWJlciE6IG51bWJlcjtcclxuXHJcbiAgcmVzaXplU3RyZWFtJCA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKTtcclxuXHJcbiAgY2xpY2tHZW5lcmF0ZVRlbXBsYXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBxdWVyeUxpc3RTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcbiAgbG9hZGluZyE6IGJvb2xlYW47XHJcblxyXG4gIHNlbGVjdGVkSWRzOiBzdHJpbmdbXSB8IG51bWJlcltdID0gW107XHJcbiAgc2VsZWN0ZWREYXRhOiBhbnlbXSA9IFtdO1xyXG5cclxuICBpc0FkbWluOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHZpZXdJbml0RG9uZSE6IGJvb2xlYW47XHJcblxyXG4gIC8qIHN0YXJ0OiBwYXNzaW5nIHRoaXMgdmFyIHRvIFBhZ2luYXRpb24gKi9cclxuXHJcbiAgcGFnZUNvdW50ITogbnVtYmVyO1xyXG5cclxuICAvLyBQYXNzaW5nIEJlaGF2aW9yU3ViamVjdCB0byBvdGhlciBjb21wb25lbnQgaXMgbGlrZSB1c2luZyBhIHNlcnZpY2UgKHRoYXQgaG9sZHMgdGhpcyBCZWhhdmlvclN1YmplY3QpIGluamVjdGVkIHRvIGJvdGggY29tcG9uZW50c1xyXG4gIGN1cnJlbnRQYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxKTtcclxuXHJcbiAgLyogZW5kOiBwYXNzaW5nIHRoaXMgdmFyIHRvIFBhZ2luYXRpb24gKi9cclxuXHJcbiAgcGFnZVNpemUkITogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj47XHJcblxyXG4gIGZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcbiAgZmlsdGVyT3BlcmF0b3JzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUZpbHRlck9wZXJhdG9yW10+KFtdKTtcclxuICBpbk9wZXJhdG9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElJbk9wZXJhdG9yW10+KFtdKTtcclxuICBnZW5lcmFsU2VhcmNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgc2VhcmNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUNvcmVQYWdlTGlzdFNlYXJjaE9iamVjdCB8IG51bGw+KG51bGwpO1xyXG4gIHNvcnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU29ydEl0ZW1bXT4oW10pO1xyXG4gIHBhZ2luYXRpb24kITogQmVoYXZpb3JTdWJqZWN0PElQYWdpbmF0aW9uPjtcclxuICBmb3JjZVJlbG9hZGluZ0ZsYWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcXVlcnlMaXN0UmVxdWVzdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElRdWVyeUxpc3RSZXF1ZXN0Pih7IGxhbmc6ICd2aScgfSk7XHJcbiAgcXVlcnlMaXN0U3RyZWFtJCE6IE9ic2VydmFibGU8YW55PjtcclxuICBpbm5lckJvZHlDb3VudCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMSk7XHJcblxyXG4gIHBhdXNlU3Vic2N0aXB0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGlzdCE6IGFueVtdO1xyXG4gIHRhYmxlSGVpZ2h0ITogbnVtYmVyO1xyXG4gIGF2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoITogc3RyaW5nW107XHJcbiAgZGF0YUltcG9ydCE6IGFueTtcclxuICBwZW5kaW5nQWN0aW9uITogRW51bUNvcmVCdXR0b25WTlNDb2RlIHwgbnVsbDtcclxuICBpZFN0YXRlOiBhbnk7XHJcbiAgdGVtcGxhdGVGaWxlTmFtZSE6IHN0cmluZztcclxuXHJcbiAgbG9uZ0FwaVJ1bm5pbmchOiBib29sZWFuO1xyXG4gIHByZWZldGNoTG9hZGluZyE6IGJvb2xlYW47XHJcblxyXG4gIGJ1dHRvbkdyb3VwU3RhdHVzITogSUNvcmVCdXR0b25Hcm91cFN0YXR1cztcclxuXHJcbiAgZXhwb3J0Q29yZVBhZ2VMaXN0R3JpZFRvRXhjZWxTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjb3JlUGFnZUxpc3RTZXJ2aWNlOiBDb3JlUGFnZUxpc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlUGFnZUxpc3RTdGF0ZTogQ29yZVBhZ2VMaXN0U3RhdGUsXHJcbiAgICBwcml2YXRlIGNvcmVQYWdlRWRpdFNlcnZpY2U6IENvcmVQYWdlRWRpdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwcFNlcnZpY2U6IEFwcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRpbmdTZXJ2aWNlOiBSb3V0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9uZ1Rhc2tTZXJ2aWNlOiBMb25nVGFza1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZUNvbXBvc2l0aW9uU2VydmljZTogQ29yZUNvbXBvc2l0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZUJ1dHRvbkdyb3VwU2VydmljZTogQ29yZUJ1dHRvbkdyb3VwU2VydmljZSxcclxuICAgIHByaXZhdGUganNvblNlcnZpY2U6IEpzb25TZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICBpZiAoISEhdGhpcy5pbmxpbmVUb29sSXRlbXMpIHtcclxuICAgICAgdGhpcy5pbmxpbmVUb29sSXRlbXMgPSBbXHJcbiAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULFxyXG4gICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFXHJcbiAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgbmF2aWdhdGlvbiA9IHRoaXMucm91dGVyPy5nZXRDdXJyZW50TmF2aWdhdGlvbigpXHJcbiAgICBpZiAobmF2aWdhdGlvbikge1xyXG4gICAgICBjb25zdCBleHRyYXMgPSBuYXZpZ2F0aW9uLmV4dHJhcztcclxuICAgICAgaWYgKCEhZXh0cmFzICYmICdzdGF0ZScgaW4gZXh0cmFzKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKGBDb3JlUGFnZUxpc3QgaXMgdXNpbmcgb2xkIGluc3RhbmNlIG51bWJlciAke3RoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJ9YCwgYWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISFleHRyYXMuc3RhdGUgJiYgJ2lkJyBpbiBleHRyYXMuc3RhdGUhKSB7XHJcbiAgICAgICAgICB0aGlzLmlkU3RhdGUgPSBleHRyYXMuc3RhdGVbJ2lkJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIWV4dHJhcy5zdGF0ZSAmJiAnaW5zdGFuY2VOdW1iZXInIGluIGV4dHJhcy5zdGF0ZSEpIHtcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgPSBleHRyYXMuc3RhdGVbJ2luc3RhbmNlTnVtYmVyJ107XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qIFRISVMgQ09ERSBXSUxMIERFRklORSBvdXRlclBhcmFtJCBGSUxURVIgZm9yIGltcG9ydCBwcmV2aWV3IHRhc2sgKi9cclxuICAgIGlmIChuYXZpZ2F0aW9uPy5leHRyYXM/LnN0YXRlKSB7XHJcbiAgICAgIGNvbnN0IGltcG9ydFByZXZpZXdPdXRlclBhcmFtID0gbmF2aWdhdGlvbj8uZXh0cmFzPy5zdGF0ZSFbXCJpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbVwiXVxyXG4gICAgICBpZiAoISF0aGlzLm91dGVyUGFyYW0kKSB7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5vdXRlclBhcmFtJD8udmFsdWUpIHtcclxuICAgICAgICAgIGlmICghIWltcG9ydFByZXZpZXdPdXRlclBhcmFtKSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdPdXRlclBhcmFtID0gdGhpcy5vdXRlclBhcmFtJC52YWx1ZTtcclxuICAgICAgICAgICAgbmV3T3V0ZXJQYXJhbSA9IHtcclxuICAgICAgICAgICAgICAuLi5uZXdPdXRlclBhcmFtLFxyXG4gICAgICAgICAgICAgIC4uLmltcG9ydFByZXZpZXdPdXRlclBhcmFtLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbSQubmV4dChuZXdPdXRlclBhcmFtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCEhaW1wb3J0UHJldmlld091dGVyUGFyYW0pIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRlclBhcmFtJC5uZXh0KGltcG9ydFByZXZpZXdPdXRlclBhcmFtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCEhaW1wb3J0UHJldmlld091dGVyUGFyYW0pIHtcclxuICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oaW1wb3J0UHJldmlld091dGVyUGFyYW0pXHJcbiAgICAgICAgICB0aGlzLm91dGVyUGFyYW1TdWJzY3JpYmVGbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICAgIGlmICghISF0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLnB1c2goe1xyXG4gICAgICBpbnN0YW5jZU51bWJlcjogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcixcclxuICAgICAgcmVsb2FkRmxhZyQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpLFxyXG4gICAgICBpZCQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKSxcclxuICAgICAgdGJvZHlIZWlnaHQkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCksXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmlkU3RhdGUpIHtcclxuICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgIGlkOiB0aGlzLmlkU3RhdGVcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRlbXBsYXRlRmlsZU5hbWUgPSB0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0Py5leENvZGU7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ291dGVySW5PcGVyYXRvcnMnXSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50SW5PcGVyYXRvcnM6IElJbk9wZXJhdG9yW10gPSB0aGlzLmluT3BlcmF0b3JzJC52YWx1ZTtcclxuICAgICAgY29uc3QgY2hhbmdlZEluT3BlcmF0b3JzOiBJSW5PcGVyYXRvcltdID0gY2hhbmdlc1snb3V0ZXJJbk9wZXJhdG9ycyddLmN1cnJlbnRWYWx1ZSB8fCBbXTtcclxuICAgICAgY29uc3QgcmVtYWluSW5PcGVyYXRvcnMgPSBjdXJyZW50SW5PcGVyYXRvcnMuZmlsdGVyKHggPT4gISEhY2hhbmdlZEluT3BlcmF0b3JzLmZpbHRlcih5ID0+IHkuZmllbGQgPT09IHguZmllbGQpLmxlbmd0aCk7XHJcbiAgICAgIGNvbnN0IG5ld0luT3BlcmF0b3JzID0gWy4uLnJlbWFpbkluT3BlcmF0b3JzLCAuLi5jaGFuZ2VkSW5PcGVyYXRvcnNdO1xyXG5cclxuICAgICAgdGhpcy5pbk9wZXJhdG9ycyQubmV4dChuZXdJbk9wZXJhdG9ycyk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snaGVpZ2h0J10pIHtcclxuXHJcbiAgICAgIC8vIEtow7RuZyB0aOG7gyB0w61uaCDEkcaw4bujYyBz4buRIMSRbyBow6xuaCBo4buNYyBu4bq/dSBBZnRlclZpZXdJbml0IGNoxrBhIGNo4bqheVxyXG4gICAgICAvLyBOw6puIOG7nyDEkcOieSB0YSBjaOG7iSDEkcahbiBnaeG6o24gbMOgIGfDoW4gdGhheSDEkeG7lWkgY+G7p2EgaGVpZ2h0IHbDoG8gaGVpZ2h0JFxyXG4gICAgICB0aGlzLmhlaWdodCQubmV4dChjaGFuZ2VzWydoZWlnaHQnXS5jdXJyZW50VmFsdWUpO1xyXG5cclxuICAgICAgLypcclxuICAgICAgaWYgKCEhY2hhbmdlc1snaGVpZ2h0J10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgLy8gTuG6v3UgY2hp4buBdSBjYW8gY+G7p2EgQ29yZVBhZ2VMaXN0IMSRxrDhu6NjIHRydXnhu4FuIHbDoG9cclxuICAgICAgICAvLyBUaMOsIGPhuqduIHTDrW5oIGNoaeG7gXUgY2FvIGPhu6dhIENvcmVDb21wb3NpdGlvbiA9IHRoaXMuaGVpZ2h0XHJcbiAgICAgICAgLy8gTuG6v3UgaGnhu4NuIHRo4buLIENvcmVQYWdlSGVhZGVyIHRow6wgY+G6p24gdHLhu6sgdGnhur9wIMSRaSBjb3JlUGFnZUhlYWRlckhlaWdodFxyXG4gICAgICAgIHRoaXMuY29tcG9zaXRpb25IZWlnaHQgPSBjaGFuZ2VzWydoZWlnaHQnXS5jdXJyZW50VmFsdWUgLSAoISF0aGlzLmhpZGVIZWFkZXIgPyAwIDogdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0KTtcclxuICAgICAgICAvLyBUw61uaCBsdcO0biBjaGnhu4F1IGNhbyB0YWJsZUhlaWdodFxyXG4gICAgICAgIC8vIE7hur91IGV4dHJhTWFudWFsT2Zmc2V0IMSRxrDhu6NjIHRydXnhu4FuIHbDoG8gbeG7mXQgY8OhY2ggdGjhu6cgY8O0bmdcclxuICAgICAgICBpZiAoISF0aGlzLmV4dHJhTWFudWFsT2Zmc2V0KSB7XHJcbiAgICAgICAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gY2hhbmdlc1snaGVpZ2h0J10uY3VycmVudFZhbHVlIC0gdGhpcy5leHRyYU1hbnVhbE9mZnNldCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gQ+G6p24gdMOtbmggY2hp4buBdSBjYW8gY+G7p2EgcGjhuqduIHRvcCBraGkgaG9vayBBZnRlclZpZXdJbml0IMSRxrDhu6NjIGvDrWNoIGhv4bqhdFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAqL1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydvdXRlckZpbHRlck9wZXJhdG9ycyddKSB7XHJcbiAgICAgIHRoaXMubWVyZ2VGaWx0ZXJPcGVyYXRvcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucXVlcnlMaXN0U3Vic2NyaWJlKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyogUXVlcnlMaXN0IHN1YiAqL1xyXG4gIHN1YnNjcmliZVF1ZXJ5TGlzdCh4OiBhbnkpIHtcclxuICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xyXG4gICAgICAgIGNvbnN0IGlubmVyQm9keTogSVF1ZXJ5TGlzdFJlc3BvbnNlID0gYm9keS5pbm5lckJvZHk7XHJcbiAgICAgICAgaWYgKCEhaW5uZXJCb2R5KSB7XHJcblxyXG4gICAgICAgICAgLyogI3JlZ2lvbiBUcmlja2lseSByZXNldCBpZCQsIHRtcEZpbHRlciQgYW5kIHRtcEluT3BlcmF0b3JzJCAqL1xyXG4gICAgICAgICAgdGhpcy5wYXVzZVN1YnNjdGlwdGlvbiA9IHRydWU7IC8vIDw9PSBQYXVzZVxyXG5cclxuICAgICAgICAgIGNvbnN0IG5ld1F1ZXJ5TGlzdFJlcXVlc3QgPSB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlO1xyXG5cclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U3RhdGUuaWQkLm5leHQobnVsbClcclxuICAgICAgICAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuaWQgPSBudWxsO1xyXG5cclxuICAgICAgICAgIC8qIFRoaXMgY29kZSBibG9jayByYWlzZXMgYSBidWcgZ2VuZXJhbGx5ICovXHJcbiAgICAgICAgICAvLyBpZiAoISF0aGlzLmNvcmVQYWdlTGlzdFN0YXRlLmlkJC52YWx1ZSkge1xyXG4gICAgICAgICAgLy8gICB0aGlzLmNvcmVQYWdlTGlzdFN0YXRlLmlkJC5uZXh0KG51bGwpXHJcbiAgICAgICAgICAvLyAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuaWQgPSBudWxsO1xyXG4gICAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAgIC8vICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5pZCA9IG51bGw7XHJcbiAgICAgICAgICAvLyB9O1xyXG5cclxuICAgICAgICAgIGlmICghIXRoaXMudG1wRmlsdGVyQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZEZpbHRlciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5wcmltYXJ5RmlsdGVyKSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KG9sZEZpbHRlcik7XHJcbiAgICAgICAgICAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuZmlsdGVyID0gb2xkRmlsdGVyO1xyXG4gICAgICAgICAgICB0aGlzLnByaW1hcnlGaWx0ZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIHRoaXMudG1wRmlsdGVyQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCEhdGhpcy50bXBJbk9wZXJhdG9yc0FjdGl2ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBvbGRJbk9wZXJ0b3JzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnByaW1hcnlJbk9wZXJhdG9ycykpO1xyXG4gICAgICAgICAgICB0aGlzLmluT3BlcmF0b3JzJC5uZXh0KG9sZEluT3BlcnRvcnMpO1xyXG4gICAgICAgICAgICBuZXdRdWVyeUxpc3RSZXF1ZXN0LmluT3BlcmF0b3JzID0gb2xkSW5PcGVydG9ycztcclxuICAgICAgICAgICAgdGhpcy5wcmltYXJ5SW5PcGVyYXRvcnMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy50bXBJbk9wZXJhdG9yc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dChuZXdRdWVyeUxpc3RSZXF1ZXN0KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gZmFsc2U7IC8vIDw9PSBBY3RpdmUgYmFjayBhZ2FpblxyXG5cclxuICAgICAgICAgIC8qICNlbmRyZWdpb24gVHJpY2tpbHkgcmVzZXQgaWQkLCB0bXBGaWx0ZXIkIGFuZCB0bXBJbk9wZXJhdG9ycyQgKi9cclxuXHJcbiAgICAgICAgICB0aGlzLmxpc3QgPSBpbm5lckJvZHkubGlzdCE7XHJcblxyXG4gICAgICAgICAgdGhpcy5pbm5lckJvZHlDb3VudCQubmV4dChpbm5lckJvZHkuY291bnQhKTtcclxuICAgICAgICAgIHRoaXMucGFnZUNvdW50ID0gTWF0aC5jZWlsKGlubmVyQm9keS5jb3VudCEgLyB0aGlzLnBhZ2VTaXplJC52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgaWYgKGlubmVyQm9keS5wYWdlICE9PSB0aGlzLmN1cnJlbnRQYWdlJC52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gdHJ1ZTsgLy8gPD09IFBhdXNlXHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UkLm5leHQoaW5uZXJCb2R5LnBhZ2UhKTtcclxuICAgICAgICAgICAgdGhpcy5wYXVzZVN1YnNjdGlwdGlvbiA9IGZhbHNlOyAvLyA8PT0gQWN0aXZlIGJhY2sgYWdhaW5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5saXN0ID0gW107XHJcblxyXG4gICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xyXG4gICAgICAgICAgLy90aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xyXG4gICAgICAgIC8vdGhpcy5yZXNwb25zZVNlcnZpY2UucmVzb2x2ZShib2R5KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIC8vICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgIC8vICAgICBKU09OLnN0cmluZ2lmeSh4LCBudWxsLCAyKSxcclxuICAgICAgLy8gICAgIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zXHJcbiAgICAgIC8vICAgKTtcclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbWVyZ2VGaWx0ZXJPcGVyYXRvcigpOiB2b2lkIHtcclxuICAgIC8qIFNUQVJUOiBNZXJnZSBmaWx0ZXJPcGVyYXRvciB3aXRoIG91dGVyIG9uZSAqL1xyXG4gICAgaWYgKCEhdGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycykge1xyXG4gICAgICBpZiAodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSkpO1xyXG4gICAgICAgIHRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMubWFwKChvZm8pID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKChvKSA9PiBvLmZpZWxkID09PSBvZm8uZmllbGQgJiYgby5vcGVyYXRvciA9PT0gb2ZvLm9wZXJhdG9yKTtcclxuICAgICAgICAgIC8vIG9wdGltaXN0aWNhbGx5IGZpbHRlci5sZW5ndGggPT09IDFcclxuICAgICAgICAgIGlmICghIWZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZmlsdGVyWzBdLmRhdGVUaW1lVmFsdWUgPSBvZm8uZGF0ZVRpbWVWYWx1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMucHVzaChvZm8pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KHRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiBFTkQ6IENyZWF0ZS9NZXJnZS9PdmVyd3JpdGUgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuICB9XHJcbiAgdG1wRmlsdGVyQWN0aXZlITogYm9vbGVhbjtcclxuICB0bXBJbk9wZXJhdG9yc0FjdGl2ZSE6IGJvb2xlYW47XHJcbiAgcHJpbWFyeUZpbHRlciE6IGFueTtcclxuICBwcmltYXJ5SW5PcGVyYXRvcnMhOiBJSW5PcGVyYXRvcltdO1xyXG5cclxuICBvdXRlclBhcmFtU3Vic2NyaWJlRm4oKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5vdXRlclBhcmFtJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygndGhpcy5vdXRlclBhcmFtJCBjaGFuZ2VzJywgeCk7XHJcblxyXG4gICAgICAgIC8vIG1lcmdlIG9yIG92ZXJ3cmlyZSBjdXJyZW50IGZpbHRlclxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXIgPSB0aGlzLmZpbHRlciQudmFsdWU7XHJcbiAgICAgICAgaWYgKCEhY3VycmVudEZpbHRlcikge1xyXG4gICAgICAgICAgY29uc3QgbmV3RmlsdGVyID0ge1xyXG4gICAgICAgICAgICAuLi5jdXJyZW50RmlsdGVyLFxyXG4gICAgICAgICAgICAuLi54LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KG5ld0ZpbHRlcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyJC5uZXh0KHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jbGlja0dlbmVyYXRlVGVtcGxhdGUkLnBpcGUoXHJcbiAgICAgICAgbWFwKHggPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJtYXBcIiwgeClcclxuICAgICAgICAgIHJldHVybiB4O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbHRlcih4ID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiZmlsdGVyXCIsICEheClcclxuICAgICAgICAgIHJldHVybiAhIXhcclxuICAgICAgICB9KSxcclxuICAgICAgICBzd2l0Y2hNYXAoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudGVtcGxhdGVGaWxlTmFtZSA9IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3Q/LmV4Q29kZSArIFwiX1wiICsgeCArIFwiLnhsc3hcIlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5nZW5lcmF0ZVRlbXBsYXRlKHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QpXHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuXHJcbiAgICAgICAgICBpZiAoeC5ib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkgcmV0dXJuXHJcblxyXG4gICAgICAgICAgbGV0IGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbeC5ib2R5XSkpXHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgdGhpcy50ZW1wbGF0ZUZpbGVOYW1lKTtcclxuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRMaW5rKTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5jbGljaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFwiRG93bmxvYWQgZmFpbGVkLiBQbGVhc2UgY29udGFjdCB5b3VyIGRldmVsb3BlciB0ZWFtIHRvIHJlc29sdmVcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSlcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEZpbHRlciQucGlwZShmaWx0ZXIoeCA9PiAhIXggJiYgISEhdGhpcy50bXBGaWx0ZXJBY3RpdmUpKS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5RmlsdGVyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlciQudmFsdWUpKTtcclxuICAgICAgICB0aGlzLmZpbHRlciQubmV4dCh4KTtcclxuICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UudG1wRmlsdGVyJC5uZXh0KG51bGwpO1xyXG4gICAgICAgIHRoaXMudG1wRmlsdGVyQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgIClcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UudG1wSW5PcGVyYXRvcnMkLnBpcGUoZmlsdGVyKHggPT4gISF4Lmxlbmd0aCAmJiAhISF0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlKSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUluT3BlcmF0b3JzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmluT3BlcmF0b3JzJC52YWx1ZSkpO1xyXG4gICAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLm5leHQoeCk7XHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEluT3BlcmF0b3JzJC5uZXh0KFtdKTtcclxuICAgICAgICB0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlID0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgIClcclxuICAgIGlmICghIXRoaXMub3V0ZXJTb3J0KSB7XHJcbiAgICAgIHRoaXMuc29ydCQubmV4dCh0aGlzLm91dGVyU29ydCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkluc3RhbmNlQ3JlYXRlZC5lbWl0KHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG5cclxuICAgIGlmICghIXRoaXMuZml4ZWRQYWdlU2l6ZSkge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPih0aGlzLmZpeGVkUGFnZVNpemUpO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGFnaW5hdGlvbj4oe1xyXG4gICAgICAgIHNraXA6IDAsXHJcbiAgICAgICAgdGFrZTogdGhpcy5maXhlZFBhZ2VTaXplLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnZVNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KGRlZmF1bHRQYWdpbmcudGFrZSk7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElQYWdpbmF0aW9uPih7XHJcbiAgICAgICAgc2tpcDogMCxcclxuICAgICAgICB0YWtlOiBkZWZhdWx0UGFnaW5nLnRha2UsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdBdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaDogc3RyaW5nW10gPSBbXTtcclxuICAgIHRoaXMuY29sdW1ucy5tYXAoKHgpID0+IHtcclxuICAgICAgLy8gaWYgKHgudHlwZSA9PT0gJ3RleHQnIHx8IHgudHlwZSA9PT0gJ3N0cmluZycgfHwgeC50eXBlID09PSAnZGF0ZScgfHwgeC50eXBlID09PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgIC8vIGlmICh4LnR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICBpZiAoeC50eXBlID09PSAndGV4dCcgfHwgeC50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIG5ld0F2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoLnB1c2goeC5maWVsZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaCA9IG5ld0F2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoO1xyXG5cclxuICAgIGlmICghIXRoaXMuY2xlYXJEYXRhJCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmNsZWFyRGF0YSRcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gISF4O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckRhdGEkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhZ2luYXRpb25IZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdpbmF0aW9uLWhlaWdodCcpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIHNldCBkZWZhdWx0IHNvcnQgZGlyZWN0aW9uXHJcblxyXG4gICAgY29uc3QgbmV3U29ydDogSVNvcnRJdGVtW10gPSBbXTtcclxuICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiB4LmZpZWxkICE9PSBcImlkXCIpLm1hcCgoYykgPT4ge1xyXG4gICAgICBuZXdTb3J0LnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiBjLmZpZWxkLFxyXG4gICAgICAgIHNvcnREaXJlY3Rpb246IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICAvLyBhY2NlcHQgZGVmYXVsdHNvcnQgcGFyYW1cclxuICAgIHRoaXMuc29ydCQubmV4dChuZXdTb3J0Lm1hcCh0MSA9PiAoeyAuLi50MSwgLi4udGhpcy5zb3J0JC52YWx1ZS5maW5kKHQyID0+IHQyLmZpZWxkID09PSB0MS5maWVsZCkgfSkpKTtcclxuXHJcbiAgICAvKiBTVEFSVDogTWVyZ2UgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuICAgIGlmICghIXRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMubWFwKChvZm8pID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAobykgPT4gby5maWVsZCA9PT0gb2ZvLmZpZWxkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gb3B0aW1pc3RpY2FsbHkgZmlsdGVyLmxlbmd0aCA9PT0gMVxyXG4gICAgICAgICAgaWYgKCEhZmlsdGVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBmaWx0ZXJbMF0ub3BlcmF0b3IgPSBvZm8ub3BlcmF0b3I7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLnB1c2gob2ZvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChjdXJyZW50RmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyogRU5EOiBDcmVhdGUvTWVyZ2UvT3ZlcndyaXRlIGZpbHRlck9wZXJhdG9yIHdpdGggb3V0ZXIgb25lICovXHJcblxyXG4gICAgLyogU1RBUlQ6IFN1YnNjcmlwdGlvbiBmb3Igb3V0ZXJQYXJhbSQgKi9cclxuICAgIC8vIFNvbWUgc2ltcGxlIG1hc3RlciBkYXRhIGRvIG5vdCBoYXZlIG91dGVyUGFyYW0kIElNUE9SVEFOVCEhIVxyXG4gICAgaWYgKCEhdGhpcy5vdXRlclBhcmFtJCkge1xyXG4gICAgICB0aGlzLm91dGVyUGFyYW1TdWJzY3JpYmVGbigpO1xyXG4gICAgfVxyXG4gICAgLyogRU5EOiBTdWJzY3JpcHRpb24gZm9yIG91dGVyUGFyYW0kICovXHJcblxyXG4gICAgLyogU1RBUlQ6IFN1YnNjcmlwdGlvbnMgZm9yIHF1ZXJ5TGlzdFJlcXVlc3QkICovXHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgbGFuZzogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZXhjbHVkZWRJZHMkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgZXhjbHVkZWRJZHM6IHhcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZ2VuZXJhbFNlYXJjaCRcclxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgICBnZW5lcmFsU2VhcmNoOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZS5nZW5lcmFsU2VhcmNoLFxyXG4gICAgICAgICAgICAgIHNlYXJjaEZvcjogeCxcclxuICAgICAgICAgICAgICBhdmFpbGFibGVDb2x1bW5zOiB0aGlzLmF2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZmlsdGVyJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGZpbHRlcjogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGZpbHRlck9wZXJhdG9yczogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgaW5PcGVyYXRvcnM6IHgsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgJ3RoaXMucXVlcnlMaXN0UmVxdWVzdCQgY2hhbmdlZDogJyxcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWVcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5zZWFyY2gkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCEhcHJldiB8fCAhIWN1cnIpIHtcclxuICAgICAgICAgICAgICBjb25kaXRpb24gPSBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3Vycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICAgIHNlYXJjaDogISF4Py5jdXJyZW50XHJcbiAgICAgICAgICAgICAgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHg/LmN1cnJlbnQpKVxyXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuc29ydCQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSkpLFxyXG4gICAgICAgICAgc29ydDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh4KSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLnBhZ2luYXRpb24kLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgcGFnaW5hdGlvbjogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAuZmlsdGVyKCh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKVswXVxyXG4gICAgICAgIC5yZWxvYWRGbGFnJCEuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckIGlzIGJlaW5nIGNoYW5nZWQuLi4nLCB4KTtcclxuICAgICAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5uZXh0KHgpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBmb3JjZVJlbG9hZGluZ0ZsYWc6IHgsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlJFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSAvLyBJTVBPUlRBTlQhXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiY3VycmVudFBhZ2UgY2hhbmdlIHRvXCIsIHgpXHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZT8ucGFnaW5hdGlvbiEsXHJcbiAgICAgICAgICAgICAgc2tpcDogKHggLSAxKSAqIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWU/LnBhZ2luYXRpb24/LnRha2UhLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5sb2FkaW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxvYWRpbmcgPSB4KVxyXG4gICAgKVxyXG5cclxuICAgIC8qIEVORDogU3Vic2NyaXB0aW9ucyBmb3IgcXVlcnlMaXN0UmVxdWVzdCQgKi9cclxuXHJcbiAgICAvLyBRdWFuIHRy4buNbmc6IENvcmVQYWdlTGlzdCBj4bqnbiBiaeG6v3QgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW9cclxuICAgIC8vIFR1eSBuaGnDqm4gY8OzIG5oaeG7gXUgdHLGsOG7nW5nIGjhu6NwIGNoaeG7gXUgY2FvIG7DoHkga2jDtG5nIMSRxrDhu6NjIHRydXnhu4FuIHbDoG8ga2hpIHRyaeG7g24ga2hhaVxyXG4gICAgLy8gWMOpdCB0csaw4budbmcgaOG7o3AgY8OhYyBmb3JtIGRhbmggbeG7pWMgY8ahIGLhuqNuXHJcbiAgICAvLyBjb250ZW50LWNvbnRhaW5lciA9PiBjb25zdW1lIGNvbXBvbmVudCA9PiBjb3JlLXBhZ2UtbGlzdCA9PiBjb3JlLXBhZ2UtaGVhZGVyID0+IGNvcmUtY29tcG9zaXRpb24gPT4gdG9wUmVmICsgdGFibGUgKyBwYWdpbmF0aW9uXHJcbiAgICAvLyB0YSBjw7MgdGjhu4MgdMOtbmggc+G7kSBt4bq3YyDEkeG7i25oIChu4bq/dSBoZWlnaHQga2jDtG5nIMSRxrDhu6NjIHRydXnhu4FuIHbDoG8pXHJcbiAgICBpZiAodGhpcy5oZWlnaHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmxheW91dFNlcnZpY2UuY29udGVudENvbnRhaW5lckhlaWdodCQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgLy8gYmFzaWNTcGFjaW5nIGzDoCBwYWRkaW5nQm90dG9tIGPhu6dhIGzhu5twIGNvbnRlbnQtY29udGFpbmVyXHJcbiAgICAgICAgICB0aGlzLmhlaWdodCA9IHggLSB0aGlzLmxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nO1xyXG4gICAgICAgICAgdGhpcy5oZWlnaHQkLm5leHQoeCAtIHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmcpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG9uUm93RG91YmxlQ2xpY2soZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCEhdGhpcy5zZWVrZXJNb2RlIHx8ICEhdGhpcy5tY2NNb2RlIHx8ICEhdGhpcy5kaXNhYmxlRG91YmxlQ2xpY2spIHtcclxuICAgICAgdGhpcy5yb3dEb3VibGVDbGljay5lbWl0KGV2ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghISF0aGlzLnNlbGZSZXNvbHZlQ29yZVBhZ2VIZWFkZXJCdXR0b25DbGljaykge1xyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VFZGl0U2VydmljZS5mcm9tVXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgICAgIGlmICghIXRoaXMubm9ybWFsTW9kZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5oYXNJZE9mU3RyaW5nVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICBidG9hKGV2ZW50LmlkKSxcclxuICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLnBhcmVudCxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICBidG9hKGV2ZW50LmlkLnRvU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5oYXNJZE9mU3RyaW5nVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQudG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yb3dEb3VibGVDbGljay5lbWl0KGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Sb3dDbGljayhlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdDb3JQYWdlTGlzdCBvblJvd0NsaWNrIGUnLCBlKTtcclxuICAgIGlmICghIWUuaWQpIHtcclxuICAgICAgdGhpcy5vbkNoYW5nZShlLmlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgIFwiVGhlICdpZCcgY29sdW1ucyBpcyBudWxsLiBQbGVhc2UgY2hlY2sgd2h5XCIsXHJcbiAgICAgICAgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMucm93Q2xpY2suZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uVG9vbENsaWNrKGV2ZW50OiBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSkgeyB9XHJcblxyXG4gIG9uU2VhcmNoaW5nKGU6IElTZWFyY2hJdGVtW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IHByZXYgPSAhIXRoaXMuc2VhcmNoJC52YWx1ZT8uY3VycmVudFxyXG4gICAgICA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZWFyY2gkLnZhbHVlPy5jdXJyZW50KSlcclxuICAgICAgOiBudWxsO1xyXG4gICAgdGhpcy5zZWFyY2gkLm5leHQoe1xyXG4gICAgICBwcmV2aW91czogcHJldiEsXHJcbiAgICAgIGN1cnJlbnQ6IGUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0V2hlbkNvbnRhaW5lckhhc0ZpeGVkSGVpZ2h0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICBjb25zdCBwYWdpbmF0aW9uSGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnaW5hdGlvbi1oZWlnaHQnKVxyXG4gICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRhYmxlQm9yZGVyVG9wID0gTnVtYmVyKFxyXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtdGFibGUtYm9yZGVyLXRvcCcpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGJsb2NrQ2VsbFNwYWNpbmcgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtbGF5b3V0LWJsb2NrLWNlbGwtc3BhY2luZycpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29yZVBhZ2VMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICctLWhlaWdodCcsXHJcbiAgICAgIGNvbnRhaW5lckhlaWdodCArICdweCdcclxuICAgICk7XHJcbiAgICBjb25zdCByZWxhdGVkVGFibGVGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICk7XHJcbiAgICBpZiAoISFyZWxhdGVkVGFibGVGaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHJlbGF0ZWRUYWJsZSA9IHJlbGF0ZWRUYWJsZUZpbHRlclswXS5jb3JlVGFibGVSZWY7XHJcbiAgICAgIGlmICghIXJlbGF0ZWRUYWJsZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdSZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiBGT1VORCEhIScpO1xyXG4gICAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZUhlaWdodCA9XHJcbiAgICAgICAgICBjb250YWluZXJIZWlnaHQgLVxyXG4gICAgICAgICAgcGFnaW5hdGlvbkhlaWdodCAtXHJcbiAgICAgICAgICB0YWJsZUJvcmRlclRvcCAtXHJcbiAgICAgICAgICAyICogYmxvY2tDZWxsU3BhY2luZyAqIDAgLyogcGFkZGluZyBpbmNsdWVkIGluIG9iamVjdCBpdHNlbGYgKi8gLVxyXG4gICAgICAgICAgKHRoaXMuZXh0cmFNYW51YWxPZmZzZXQgfHwgMCk7XHJcbiAgICAgICAgcmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgICAnLS1oZWlnaHQnLFxyXG4gICAgICAgICAgZmVhdHVyZUhlaWdodCArICdweCdcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEhlYWRlclJvd0hlaWdodCA9IE51bWJlcihcclxuICAgICAgICAgIGdldENvbXB1dGVkU3R5bGUocmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLWhlYWRlci0xc3Qtcm93LWhlaWdodCcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kSGVhZGVyUm93SGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0taGVhZGVyLTJuZC1yb3ctaGVpZ2h0JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmVhdHVyZVRib2R5SGVpZ2h0ID1cclxuICAgICAgICAgIGZlYXR1cmVIZWlnaHQgLSBmaXJzdEhlYWRlclJvd0hlaWdodCAtIHNlY29uZEhlYWRlclJvd0hlaWdodDtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ2ZlYXR1cmVUYm9keUhlaWdodCcsIGZlYXR1cmVUYm9keUhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXHJcbiAgICAgICAgICApWzBdXHJcbiAgICAgICAgICAudGJvZHlIZWlnaHQkLm5leHQoZmVhdHVyZVRib2R5SGVpZ2h0KTtcclxuICAgICAgICAvL30pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIHdhcyB1bmRlZmluZWQnKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHJlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUhlaWdodFdoZW5Db250YWluZXJIYXNVbmRlZmluZWRIZWlnaHQoKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbnRlbnRDb250YWluZXJIZWlnaHQkLnZhbHVlO1xyXG4gICAgY29uc3QgcGFnZUhlYWRlckhlaWdodCA9IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodDtcclxuICAgIGNvbnN0IHBhZ2luYXRpb25IZWlnaHQgPSB0aGlzLmxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQ7XHJcbiAgICBjb25zdCB0YWJsZUJvcmRlclRvcCA9IHRoaXMubGF5b3V0U2VydmljZS50YWJsZUJvcmRlclRvcDtcclxuICAgIGNvbnN0IGJhc2ljU3BhY2luZyA9IHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmc7XHJcblxyXG4gICAgdGhpcy5jb3JlUGFnZUxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgJy0taGVpZ2h0JyxcclxuICAgICAgY29udGFpbmVySGVpZ2h0IC0gMiAqIGJhc2ljU3BhY2luZyArICdweCdcclxuICAgICk7XHJcbiAgICBjb25zdCByZWxhdGVkVGFibGVGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICk7XHJcbiAgICBpZiAoISFyZWxhdGVkVGFibGVGaWx0ZXIubGVuZ3RoKSB7XHJcblxyXG4gICAgICBpZiAoISF0aGlzLmF1dG9SZXNpemVXaXRoV2luZG93KSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlbGF0ZWRUYWJsZSA9IHJlbGF0ZWRUYWJsZUZpbHRlclswXS5jb3JlVGFibGVSZWY7XHJcbiAgICAgICAgaWYgKCEhcmVsYXRlZFRhYmxlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnUmVsYXRlZCBDb3JlVGFibGVDb21wb25lbnRSZWYgRk9VTkQhISEnKTtcclxuICAgICAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmZWF0dXJlSGVpZ2h0ID1cclxuICAgICAgICAgICAgY29udGFpbmVySGVpZ2h0IC1cclxuICAgICAgICAgICAgcGFnZUhlYWRlckhlaWdodCAtXHJcbiAgICAgICAgICAgIHBhZ2luYXRpb25IZWlnaHQgLVxyXG4gICAgICAgICAgICB0YWJsZUJvcmRlclRvcCAtXHJcbiAgICAgICAgICAgIDIgKiBiYXNpY1NwYWNpbmcgLVxyXG4gICAgICAgICAgICAodGhpcy5leHRyYU1hbnVhbE9mZnNldCB8fCAwKTtcclxuICAgICAgICAgIHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICAgICAnLS1oZWlnaHQnLFxyXG4gICAgICAgICAgICBmZWF0dXJlSGVpZ2h0ICsgJ3B4J1xyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBmaXJzdEhlYWRlclJvd0hlaWdodCA9IE51bWJlcihcclxuICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1oZWFkZXItMXN0LXJvdy1oZWlnaHQnKVxyXG4gICAgICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IHNlY29uZEhlYWRlclJvd0hlaWdodCA9IE51bWJlcihcclxuICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1oZWFkZXItMm5kLXJvdy1oZWlnaHQnKVxyXG4gICAgICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBmZWF0dXJlVGJvZHlIZWlnaHQgPVxyXG4gICAgICAgICAgICBmZWF0dXJlSGVpZ2h0IC0gZmlyc3RIZWFkZXJSb3dIZWlnaHQgLSBzZWNvbmRIZWFkZXJSb3dIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2ZlYXR1cmVUYm9keUhlaWdodCcsIGZlYXR1cmVUYm9keUhlaWdodCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXHJcbiAgICAgICAgICAgIClbMF1cclxuICAgICAgICAgICAgLnRib2R5SGVpZ2h0JC5uZXh0KGZlYXR1cmVUYm9keUhlaWdodCk7XHJcbiAgICAgICAgICAvL30pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdSZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiB3YXMgdW5kZWZpbmVkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdObyByZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiBmb3VuZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVIZWlnaHQkKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICB0aGlzLmhlaWdodFJlc2l6aW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZXNpemVIZWlnaHQoKTtcclxuICAgICAgdGhpcy5oZWlnaHRSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgICBvYnNlcnZlci5uZXh0KG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0KCk6IHZvaWQge1xyXG4gICAgaWYgKCEhIXRoaXMuc2Vla2VyTW9kZSkge1xyXG4gICAgICAvKiAjc3RhcnQgRURJVElORyBDT0RFIEJMT0NLIEJFTExPVyBPTkxZIElGIFlPVSBLTk9XIEFMTCBUSEUgQVBQIERFU0lHTiBGTE9XUyAqL1xyXG4gICAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG4gICAgICBpZiAoISF0aGlzLmhlaWdodCkge1xyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0V2hlbkNvbnRhaW5lckhhc0ZpeGVkSGVpZ2h0KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRXaGVuQ29udGFpbmVySGFzVW5kZWZpbmVkSGVpZ2h0KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHRvIGRvIHNtdGggbWF5YmVcclxuICAgIH1cclxuICAgIC8qICNlbmQgRURJVElORyBDT0RFIEJMT0NLIEJFTExPVyBPTkxZIElGIFlPVSBLTk9XIEFMTCBUSEUgQVBQIERFU0lHTiBGTE9XUyAqL1xyXG4gIH1cclxuXHJcbiAgcXVlcnlMaXN0U3Vic2NyaWJlKCk6IHZvaWQge1xyXG4gICAgaWYgKCEhIXRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uICYmICEhdGhpcy5xdWVyeUxpc3RTdHJlYW0kKSB7XHJcbiAgICAgIHRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeUxpc3RTdHJlYW0kLnN1YnNjcmliZSh4ID0+IHRoaXMuc3Vic2NyaWJlUXVlcnlMaXN0KHgpKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsY3VsYXRlVGFibGVIZWlnaHRCYXNlZE9uSGVpZ2h0QW5kVG9wUmVmSGVpZ2h0KGhlaWdodDogbnVtYmVyLCB0b3BSZWZIZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkIHx8IHRvcFJlZkhlaWdodCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICB0aGlzLmNvbXBvc2l0aW9uSGVpZ2h0ID0gaGVpZ2h0IC0gKCEhdGhpcy5oaWRlSGVhZGVyID8gMCA6IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCk7XHJcbiAgICAvLyAoIXRvcFJlZkhlaWdodCA/IDE1IDogMCkgPT4gTuG6v3UgY8OzIHBo4bqnbiBUb3Agc+G6vSBjw7MgdGjDqm0gbWFyZ2luQm90dG9tIDE1cHggY+G7p2EgbsOzLlxyXG4gICAgdGhpcy50YWJsZUhlaWdodCA9IGhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCAtIHRvcFJlZkhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodCAtICghIXRvcFJlZkhlaWdodCA/IDE1IDogMCkgIC8vIDE1cHggaXMgbWFyZ2luQm90dG9tIG9mIHRvcFJlZlxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLyoqIFNUQVJUIHNldFRpbWVvdXQgKi9cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgY29uc3QgdHJ5RmluZCA9IHRoaXMuY29yZUJ1dHRvbkdyb3VwU2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKHggPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcik7XHJcbiAgICAgIGlmICghIXRyeUZpbmQubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cyA9IHRyeUZpbmRbMF07XHJcbiAgICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cy5tdXN0QmVIaWRkZW4kLm5leHQoRU1QVFlfU0VMRUNUSU9OX0hJRERFTl9CVVRUT04pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmICEoIXRoaXMuc2Vla2VyTW9kZSB8fCAhdGhpcy5oaWRlQnV0dG9uR3JvdXApKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKFwiS2jDtG5nIHTDrG0gdGjhuqV5IGluc3RhbmNlIG51bWJlciBj4bunYSBi4buZIG7DunQgxJFp4buBdSBraGnhu4NuXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY29tcG9zaXRpb25GaWx0ZXIgPSB0aGlzLmNvcmVDb21wb3NpdGlvblNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcih4ID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG4gICAgICBpZiAoISFjb21wb3NpdGlvbkZpbHRlci5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIGNvbXBvc2l0aW9uRmlsdGVyWzBdLnRvcFJlZiQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvcFBsYWNlSGVpZ2h0JC5uZXh0KHgubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuaGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0QmFzZWRPbkhlaWdodEFuZFRvcFJlZkhlaWdodCh4LCB0aGlzLnRvcFBsYWNlSGVpZ2h0JC52YWx1ZSlcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnRvcFBsYWNlSGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0QmFzZWRPbkhlaWdodEFuZFRvcFJlZkhlaWdodCh0aGlzLmhlaWdodCQudmFsdWUsIHgpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5waXBlKFxyXG4gICAgICAgICAgc3dpdGNoTWFwKF8gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdlb21ldHJpY0RvbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzaXplSGVpZ2h0JCgpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXNpemVIZWlnaHRGbGFnJCBzd2l0Y2hNYXAgZmluYWwgdmFsdWVcIiwgeClcclxuICAgICAgICAgIGlmICghISF0aGlzLmhlaWdodFJlc2l6aW5nKSB0aGlzLmdlb21ldHJpY0RvbmUgPSB0cnVlO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICApXHJcbiAgICAgIC8vIHRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHQoKTtcclxuXHJcbiAgICAgIGlmICghIXRoaXMuc2hvd1BhcmFtS2l0KSB7XHJcbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gY2FsY3VsYXRpbmcgb2Zmc2V0IG9mIHRoZSB0b3BcclxuICAgICAgICBjb25zdCB0cnlGaW5kQ29yZUhlYWRlclBhcmFtc0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgICAgJy5jb3JlLWhlYWRlci1wYXJhbXMtY29udGFpbmVyJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKEFycmF5LmZyb20odHJ5RmluZENvcmVIZWFkZXJQYXJhbXNFbGVtZW50KS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBBcnJheS5mcm9tKHRyeUZpbmRDb3JlSGVhZGVyUGFyYW1zRWxlbWVudClbMF07XHJcbiAgICAgICAgICBjb25zdCByZWN0ID0gaXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgIHRoaXMuZXh0cmFNYW51YWxPZmZzZXQgPSByZWN0LmhlaWdodCArIDE1OyAvLyBtYjE1IGlzIG1hcmdpbi1ib3R0b20gMTVweCBvZiBmb3JtIHJvd1xyXG5cclxuICAgICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICghISF0aGlzLmV4dHJhTWFudWFsT2Zmc2V0KSB0aGlzLmV4dHJhTWFudWFsT2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoISEhdGhpcy5leHRyYU1hbnVhbE9mZnNldCkgdGhpcy5leHRyYU1hbnVhbE9mZnNldCA9IDA7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5uZXh0KCEhIXRoaXMucmVzaXplSGVpZ2h0RmxhZyQudmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB0cnlGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzXHJcbiAgICAgICAgLmZpbHRlcigoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcik7XHJcbiAgICAgIGlmICghISF0cnlGaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgQ29yZVBhZ2VMaXN0IGluc3RhbmNlcyBkbyBub3QgaW5jbHVkZSBudW1iZXIgJHt0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyfWAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAgICAgLmZpbHRlcigoeCkgPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcilbMF1cclxuICAgICAgICAgICAgLmlkJC5waXBlKFxyXG4gICAgICAgICAgICAgIGZpbHRlcihfID0+ICEhIXRoaXMuaWRTdGF0ZSlcclxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKHg6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZSBpZCQgaGFzIGNoYW5nZWQsIHggPSAnLCB4KTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIGlkOiB4LFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBvdXRlci1wdXNoXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbmZpcm1lZCQucGlwZShcclxuICAgICAgICAgIGZpbHRlcihpID0+ICEhIXRoaXMuZGlhbG9nU2VydmljZS5idXN5ICYmICEhaT8uY29uZmlybWVkICYmIGkuaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuZGlhbG9nSW5zdGFuY2VOdW1iZXIpXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZXNldFNlcnZpY2UoKVxyXG5cclxuICAgICAgICAgIHN3aXRjaCAodGhpcy5wZW5kaW5nQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VUExPQUQ6XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJOb3cgdXBsb2FkaW5nLi4uIFwiLCB0aGlzLmRhdGFJbXBvcnQpO1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCAvLyBtaWRkZW0tcHVzaFxyXG4gICAgICAgICAgICAgIC8vIClcclxuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFOlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgY29uc3Qgc3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3Q6IElTeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgICAgIHN5c0Z1bmN0aW9uQ29kZTogdGhpcy5yb3V0aW5nU2VydmljZS5jdXJyZW50RnVuY3Rpb24kLnZhbHVlPy5jb2RlISxcclxuICAgICAgICAgICAgICAgIHN5c0FjdGlvbkNvZGU6IEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFLFxyXG4gICAgICAgICAgICAgICAgYmVmb3JlOiBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkRGF0YSksXHJcbiAgICAgICAgICAgICAgICBhZnRlcjogJ1wiXCInLFxyXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWU/LnVzZXJOYW1lIVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdDogSUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgICAgICAgICBzeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdFxyXG4gICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgIC5kZWxldGVJZHMocmVxdWVzdCwgdGhpcy5jcnVkLmRlbGV0ZUlkcyEpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAhISF0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keS5zdGF0dXNDb2RlID09PSA0MDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5BUFBST1ZFOlxyXG4gICAgICAgICAgICAgIGNvbnN0IHN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJTZW5kVW5hcHByb3ZlOiBJU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICBzeXNGdW5jdGlvbkNvZGU6IHRoaXMucm91dGluZ1NlcnZpY2UuY3VycmVudEZ1bmN0aW9uJC52YWx1ZT8uY29kZSEsXHJcbiAgICAgICAgICAgICAgICBzeXNBY3Rpb25Db2RlOiBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRSxcclxuICAgICAgICAgICAgICAgIGJlZm9yZTogSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZERhdGEpLFxyXG4gICAgICAgICAgICAgICAgYWZ0ZXI6ICdcIlwiJyxcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLmF1dGhTZXJ2aWNlLmRhdGEkLnZhbHVlPy51c2VyTmFtZSFcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHNlbmRSZXF1ZXN0OiBJVG9uZ2xlVW5BcHByb3ZlSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgICAgIHJlYXNvbjogdGhpcy5kaWFsb2dTZXJ2aWNlLnJlYXNvbiQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVRvQmluZDogZmFsc2VcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAucG9zdCh0aGlzLmNydWQudG9nZ2xlVW5hcHByb3ZlSWRzISwgc2VuZFJlcXVlc3QpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAhISF0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keS5zdGF0dXNDb2RlID09PSA0MDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBudWxsO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcblxyXG4gICAgICBpZiAodGhpcy5hdXRvUmVzaXplV2l0aFdpbmRvdykge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5yZXNpemVTdHJlYW0kLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpLnN1YnNjcmliZSgoXzogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLm5leHQoISEhdGhpcy5yZXNpemVIZWlnaHRGbGFnJC52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL3NldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvKiBTVEFSVDogU3Vic2NyaXB0aW9uIGZvciBsaXN0ICovXHJcblxyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFN0cmVhbSQgPSB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnBpcGUoXHJcbiAgICAgICAgbWFwKHggPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJtYXAgeCA9PiBcIiwgeClcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcjFDb25kaXRpb24gPSAhIXggJiYgLyohIXguc29ydCAmJiAqLyAhIXgucGFnaW5hdGlvblxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJtYXAgZmlsdGVyMUNvbmRpdGlvbiA9PiBcIiwgZmlsdGVyMUNvbmRpdGlvbilcclxuICAgICAgICAgIHJldHVybiB4XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZmlsdGVyKCh4OiBJUXVlcnlMaXN0UmVxdWVzdCkgPT4gISF4ICYmIC8qISF4LnNvcnQgJiYgKi8gISF4LnBhZ2luYXRpb24pLFxyXG4gICAgICAgIGZpbHRlcigoXykgPT4gIXRoaXMucGF1c2VTdWJzY3RpcHRpb24pLFxyXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgICAvKiBTVEFSVDogQXNzaW1pbGF0aW9uIG51bGwgYW5kIG5vdC1leGlzdGluZyBwcm9wZXJ0eSAqL1xyXG4gICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIGxhbmc6IHN0cmluZztcclxuICAgICAgICAgICAgICAgIGdlbmVyYWxTZWFyY2g/OiBJR2VuZXJhbFNlYXJjaDtcclxuICAgICAgICAgICAgICAgIHNvcnQ/OiBJU29ydEl0ZW1bXTtcclxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb24/OiBJUGFnaW5hdGlvbjtcclxuICAgICAgICAgICAgICAgIGZpbHRlcj86IGFueTtcclxuICAgICAgICAgICAgICAgIGZpbHRlck9wZXJhdG9ycz86IElGaWx0ZXJPcGVyYXRvcltdO1xyXG4gICAgICAgICAgICAgICAgaW5PcGVyYXRvcnM/OiBJSW5PcGVyYXRvcltdO1xyXG4gICAgICAgICAgICAgICAgc2VhcmNoPzogSVNlYXJjaEl0ZW1bXTtcclxuICAgICAgICAgICAgICAgIGlkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCxcclxuICAgICAgICAgICAgICAgIGZvcmNlUmVsb2FkaW5nRmxhZz86IGJvb2xlYW47XHJcbiAgICAgICAgICAgICovXHJcblxyXG4gICAgICAgICAgLy9nZW5lcmFsU2VhcmNoXHJcbiAgICAgICAgICBpZiAoISEhcHJldi5nZW5lcmFsU2VhcmNoPy5zZWFyY2hGb3IpIHByZXYuZ2VuZXJhbFNlYXJjaCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIGlmICghISFjdXJyLmdlbmVyYWxTZWFyY2g/LnNlYXJjaEZvcikgY3Vyci5nZW5lcmFsU2VhcmNoID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICAgIC8vIHNvcnRcclxuICAgICAgICAgIGlmICghIXByZXYuc29ydCkge1xyXG4gICAgICAgICAgICBpZiAocHJldi5zb3J0Lmxlbmd0aCA9PT0gMCkgcHJldi5zb3J0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCEhY3Vyci5zb3J0KSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyLnNvcnQubGVuZ3RoID09PSAwKSBjdXJyLnNvcnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gc2VhcmNoXHJcbiAgICAgICAgICBpZiAoISFwcmV2LnNlYXJjaCkge1xyXG4gICAgICAgICAgICBpZiAocHJldi5zZWFyY2gubGVuZ3RoID09PSAwKSBwcmV2LnNlYXJjaCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghIWN1cnIuc2VhcmNoKSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyLnNlYXJjaC5sZW5ndGggPT09IDApIGN1cnIuc2VhcmNoID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIGlkXHJcbiAgICAgICAgICBpZiAoISEhcHJldi5pZCkgcHJldi5pZCA9IG51bGw7XHJcbiAgICAgICAgICBpZiAoISEhY3Vyci5pZCkgY3Vyci5pZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLyogRU5EOiBBc3NpbWlsYXRpb24gbnVsbCBhbmQgbm90LWV4aXN0aW5nIHByb3BlcnR5ICovXHJcblxyXG4gICAgICAgICAgY29uc3QgY29uZGl0aW9uID0gSlNPTi5zdHJpbmdpZnkocHJldikgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpO1xyXG5cclxuICAgICAgICAgIGlmICghISFjb25kaXRpb24pIHtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cCgnQ09NUEFSSVNPTicpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygncHJldicsIHByZXYpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY3VycicsIGN1cnIpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY29uZGl0aW9uJywgY29uZGl0aW9uKTtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjtcclxuICAgICAgICB9KSxcclxuICAgICAgICAvKlxyXG4gICAgICAgICAgLyogU1RBUlQ6IHVzZSBzd2l0Y2hNYXAgZm9yIGNhbmNlbGxhdGlvblxyXG4gICAgICAgICAgKi9cclxuICAgICAgICBzd2l0Y2hNYXAoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZ3JvdXAoJ3N3aXRjaE1hcCB0cmlnZ2VyZWQnKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwieC5pZCA9IFwiLCB4LmlkKVxyXG4gICAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuYXBpRGVmaW5pdGlvbi5xdWVyeUxpc3RSZWxhdGl2ZVBhdGggKyBcIj9jb21wdXRpbmdXaXRoTG9jYWxUaW1lWm9uZT10cnVlXCI7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnF1ZXJ5TGlzdCh4LCB1cmwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLypcclxuICAgICAgICAvKiBFTkQ6IHVzZSBzd2l0Y2hNYXAgZm9yIGNhbmNlbGxhdGlvblxyXG4gICAgICAgICovXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgLyogRU5EOiBTdWJzY3JpcHRpb24gZm9yIGxpc3QgKi9cclxuICAgICAgLy99KTtcclxuICAgIH0pXHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLm5leHQoISEhdGhpcy5yZXNpemVIZWlnaHRGbGFnJC52YWx1ZSksIDUwMClcclxuXHJcbiAgICAvKiogRU5EIHNldFRpbWVvdXQqL1xyXG4gIH1cclxuXHJcbiAgb25QYXJhbUtpdFZhbHVlQ2hhbmdlKGRhdGE6IElDb3JlQ29tbW9uUGFyYW1LaXRFdmVudEVtaXR0ZXJEYXRhKTogdm9pZCB7XHJcbiAgICBzd2l0Y2ggKGRhdGEuZmllbGQpIHtcclxuICAgICAgY2FzZSAnZ2VuZXJhbFNlYXJjaCc6XHJcbiAgICAgICAgdGhpcy5nZW5lcmFsU2VhcmNoJC5uZXh0KGRhdGEudmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkYXRlRnJvbSc6XHJcbiAgICAgICAgY29uc3QgbmV3RnJvbUZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyRnJvbSA9IG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+XHJcbiAgICAgICAgICAgIHguZmllbGQgPT09IHRoaXMuZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3IgJiZcclxuICAgICAgICAgICAgeC5vcGVyYXRvciA9PT0gRW51bUZpbHRlck9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGZpbHRlckZyb20ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlckZyb21bMF0uZGF0ZVRpbWVWYWx1ZSA9IG5ldyBEYXRlKFxyXG4gICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDAsIDAsIDAsIDApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJGcm9tWzBdLmRhdGVUaW1lVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyRnJvbS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGlmICghIWRhdGEudmFsdWUpIHtcclxuICAgICAgICAgICAgbmV3RnJvbUZpbHRlck9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBmaWVsZDogdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvcixcclxuICAgICAgICAgICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTCxcclxuICAgICAgICAgICAgICBkYXRlVGltZVZhbHVlOiBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDAsIDAsIDAsIDApXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBgRmlsdGVyT3BlcmF0b3JzIGVycm9yIGZvciAke2RhdGEuZmllbGR9OiBjb21iaW5hdGlvbiBvZiBmaWVsZCBuYW1lIGFuZCBvcGVyYXRvciBuYW1lIGlzIG5vdCB1bmlxdWUgaW4gdGhlIGFycmF5YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZGF0ZVRvJzpcclxuICAgICAgICBjb25zdCBuZXdUb0ZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyVG8gPSBuZXdUb0ZpbHRlck9wZXJhdG9ycy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT5cclxuICAgICAgICAgICAgeC5maWVsZCA9PT0gdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvciAmJlxyXG4gICAgICAgICAgICB4Lm9wZXJhdG9yID09PSBFbnVtRmlsdGVyT3BlcmF0b3IuTEVTU19USEFOX09SX0VRVUFMXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZmlsdGVyVG8ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclRvWzBdLmRhdGVUaW1lVmFsdWUgPSBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAoZGF0YS52YWx1ZSBhcyBEYXRlKS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJUb1swXS5kYXRlVGltZVZhbHVlID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclRvLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgaWYgKCEhZGF0YS52YWx1ZSkge1xyXG4gICAgICAgICAgICBuZXdUb0ZpbHRlck9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBmaWVsZDogdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvcixcclxuICAgICAgICAgICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkxFU1NfVEhBTl9PUl9FUVVBTCxcclxuICAgICAgICAgICAgICBkYXRlVGltZVZhbHVlOiBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSlcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBGaWx0ZXJPcGVyYXRvcnMgZXJyb3IgZm9yICR7ZGF0YS5maWVsZH06IGNvbWJpbmF0aW9uIG9mIGZpZWxkIG5hbWUgYW5kIG9wZXJhdG9yIG5hbWUgaXMgbm90IHVuaXF1ZSBpbiB0aGUgYXJyYXlgXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLm5leHQobmV3VG9GaWx0ZXJPcGVyYXRvcnMpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnc3RhdHVzSWRzJzpcclxuICAgICAgICBjb25zdCBuZXdJbk9wZXJhdG9yczogSUluT3BlcmF0b3JbXSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmluT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGluZmlsdGVyID0gbmV3SW5PcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+IHguZmllbGQgPT09IHRoaXMuc3RhdHVzSW5jbHVzaW9uRm9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaW5maWx0ZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpbmZpbHRlclswXS52YWx1ZXMgPSBkYXRhLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5maWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBuZXdJbk9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc3RhdHVzSW5jbHVzaW9uRm9yLFxyXG4gICAgICAgICAgICB2YWx1ZXM6IGRhdGEudmFsdWUsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBJbk9wZXJhdG9ycyBlcnJvciBmb3IgJHtkYXRhLmZpZWxkfTogZmllbGQgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5PcGVyYXRvcnMkLm5leHQobmV3SW5PcGVyYXRvcnMpKVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydFRvRXhjZWwoKTogdm9pZCB7XHJcbiAgICAvKiBQaMawxqFuZyBwaMOhcCB4deG6pXQgQ1NWICovXHJcbiAgICAvKiBD4bqnbiB0aGF5IGLhurFuZyB4deG6pXQgRVhDRUwgYuG6sW5nIEJhY2tlbmQgKi9cclxuICAgIC8qXHJcbiAgICBjb25zdCBjc3ZEYXRhOiBhbnlbXVtdID0gW107XHJcblxyXG4gICAgbGV0IHJvdzE6IGFueVtdID0gW107XHJcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKCh4KSA9PiB4LmZpZWxkICE9ICdpZCcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5jb2x1bW5zKVxyXG4gICAgdGhpcy5jb2x1bW5zLm1hcCgoeCkgPT4ge1xyXG4gICAgICByb3cxLnB1c2godGhpcy5tbHMudHJhbnMoeC5jYXB0aW9uKSk7XHJcbiAgICB9KTtcclxuICAgIGNzdkRhdGEucHVzaChyb3cxKTtcclxuXHJcbiAgICB0aGlzLmxpc3QubWFwKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRSb3c6IGFueVtdID0gW107XHJcbiAgICAgIHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgIT0gJ2lkJykge1xyXG4gICAgICAgICAgbGV0IGN1cnJlbnRDZWxsID0gcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRDZWxsPy5yZXBsYWNlQWxsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRDZWxsID0gY3VycmVudENlbGwucmVwbGFjZUFsbCgnLCcsICc7Jyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjdXJyZW50Um93LnB1c2goY3VycmVudENlbGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjc3ZEYXRhLnB1c2goY3VycmVudFJvdyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgY3N2Q29udGVudCA9IGNzdkRhdGEubWFwKChlKSA9PiBlLmpvaW4oJywnKSkuam9pbignXFxuJyk7XHJcblxyXG4gICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZShcclxuICAgICAgJ2hyZWYnLFxyXG4gICAgICAnZGF0YTp0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04LCVFRiVCQiVCRicgKyBlbmNvZGVVUkkoY3N2Q29udGVudClcclxuICAgICk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCAnRXhwb3J0RXhlbC5jc3YnKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAqL1xyXG4gICAgLypcclxuICAgIELhuq90IMSR4bqndSB4deG6pXQgRXhjZWwgYuG6sW5nIEJhY2tlbmRcclxuICAgICovXHJcblxyXG4gICAgLy8gVGh1IHRo4bqtcCBuaGnDqm4gbGnhu4d1XHJcblxyXG4gICAgaWYgKCF0aGlzLmlubmVyQm9keUNvdW50JC52YWx1ZSkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKHRoaXMubWxzLnRyYW5zKCdYTFNYX05PX1JFU1VMVF9UT19FWFBPUlQnKSwgYWxlcnRPcHRpb25zKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVybCA9IHRoaXMuYXBpRGVmaW5pdGlvbi5xdWVyeUxpc3RSZWxhdGl2ZVBhdGg7XHJcbiAgICBjb25zdCB4ID0gdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZTsgLy8gQ+G6p24gbG/huqFpIGLhu48gcGFnaW5nIGto4buPaSDEkeG7kWkgdMaw4bujbmcgbsOgeVxyXG5cclxuICAgIHgucGFnaW5hdGlvbiA9IHtcclxuICAgICAgc2tpcDogMCxcclxuICAgICAgdGFrZTogdGhpcy5pbm5lckJvZHlDb3VudCQudmFsdWVcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYXBpU3RyZWFtJDogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgLy8gTuG6v3UgY8OzIGTDsm5nIGThu68gbGnhu4d1IGNoZWNrZWQgdGjDrCBjaOG7iSB4deG6pXQgY8OhYyBkw7JuZyBuw6B5XHJcbiAgICBpZiAoISF0aGlzLnNlbGVjdGVkRGF0YS5sZW5ndGgpIHtcclxuICAgICAgYXBpU3RyZWFtJCA9IG5ldyBPYnNlcnZhYmxlPGFueT4ob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoe1xyXG4gICAgICAgICAgb2s6IHRydWUsXHJcbiAgICAgICAgICBzdGF0dXM6IDIwMCxcclxuICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxyXG4gICAgICAgICAgICBpbm5lckJvZHk6IHtcclxuICAgICAgICAgICAgICBsaXN0OiB0aGlzLnNlbGVjdGVkRGF0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBUcsOhaSBs4bqhaSwgeHXhuqV0IDEwMCUgc2F1IGtoaSDEkcOjIGzhu41jICh0b8OgbiBi4buZIGPDoWMgdHJhbmcpXHJcbiAgICAgIGFwaVN0cmVhbSQgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UucXVlcnlMaXN0KHgsIHVybCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBJdCdzIHRpbWUgdG8gc3Vic2NyaWJlIGFwaVN0cmVhbSRcclxuICAgIHRoaXMucHJlZmV0Y2hMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICBhcGlTdHJlYW0kLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLnByZWZldGNoTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhgJHtib2R5LmlubmVyQm9keS5jb3VudH0gcm93cyBvZiBkYXRhIGZldGNoZWQuIEl0IGlzIHRpbWUgdG8gZG8gd2l0aCBiYWNrZW5kIGV4Y2VsIGV4cG9ydGluZ2AsIGFsZXJ0T3B0aW9ucylcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFwaVBvaW50ID0gYXBpLlhMU1hfRVhQT1JUX0NPUkVfUEFHRV9MSVNUX1RPX0VYQ0VMO1xyXG4gICAgICAgICAgICBjb25zdCBmbGF0Q29sdW1uczogSUNvcmVUYWJsZUZsYXRDb2x1bW5JdGVtW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAheC5oaWRkZW4pLm1hcChjID0+IHtcclxuICAgICAgICAgICAgICBmbGF0Q29sdW1ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBjYXB0aW9uOiBjLmNhcHRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICB0eXBlOiBjLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgIHBpcGU6IGMucGlwZSxcclxuICAgICAgICAgICAgICAgICAgYWxpZ246IGMuYWxpZ24sXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBjLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgICBoaWRkZW46IGMuaGlkZGVuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmxhdERhdGE6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIGZsYXRDb2x1bW5zLm1hcChjID0+IGtleXMucHVzaChjLmZpZWxkKSk7XHJcbiAgICAgICAgICAgIGJvZHkuaW5uZXJCb2R5Lmxpc3QubWFwKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGU6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICAgIGtleXMubWFwKGsgPT4ge1xyXG4gICAgICAgICAgICAgICAgZVtrXSA9IHJvd1trXTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIGZsYXREYXRhLnB1c2goZSk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgICAgICAgICAgY29sdW1uczogZmxhdENvbHVtbnMsXHJcbiAgICAgICAgICAgICAgZGF0YTogZmxhdERhdGFcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuanNvblNlcnZpY2Uuc3RyaW5naWZ5KG9iaik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0Q29yZVBhZ2VMaXN0R3JpZFRvRXhjZWxTdWJzY3JpcHRpb24gPSB0aGlzLmFwcFNlcnZpY2UuYmxvYlBvc3QoYXBpUG9pbnQsIHBheWxvYWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5ib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkgcmV0dXJuXHJcblxyXG4gICAgICAgICAgICAgIGxldCBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtyZXNwb25zZS5ib2R5XSkpXHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIHRoaXMubWxzLnRyYW5zKHRoaXMudGl0bGUpICsgXCIueGxzeFwiKTtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkTGluayk7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcblxyXG4gIH1cclxuXHJcbiAgb25Db3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKGU6IElDb3JlQnV0dG9uVk5TKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2suZW1pdChlKTtcclxuXHJcbiAgICBzd2l0Y2ggKGUuY29kZSkge1xyXG5cclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURTpcclxuXHJcbiAgICAgICAgaWYgKCEhIXRoaXMuc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUVkaXRTZXJ2aWNlLmZyb21VcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsTW9kZSkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW2J0b2EoJzAnKSwgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfV0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBvdXRsZXRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZVBhZ2VMaXN0QXV4OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBidG9hKCcwJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVDpcclxuICAgICAgICBpZiAoISEhdGhpcy5zZWxmUmVzb2x2ZUNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2spIHtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlRWRpdFNlcnZpY2UuZnJvbVVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IodGhpcy5tbHMudHJhbnMoJ1NFTEVDVF9PTkxZX09ORV9SRUNPUkRfVE9fRURJVCcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCEhdGhpcy5ub3JtYWxNb2RlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgICAgIFtidG9hKCcnICsgdGhpcy5zZWxlY3RlZElkc1swXSksIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH1dLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBidG9hKCcnICsgdGhpcy5zZWxlY3RlZElkc1swXSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19FRElUJyksIGFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BQ1RJVkFURTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0FDVElWQVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXF1ZXN0OiBJVG9nZ2xlQWN0aXZlSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgIHZhbHVlVG9CaW5kOiB0cnVlLFxyXG4gICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgY29uZmlybUFjdGl2ZSA9IHdpbmRvdy5jb25maXJtKFxyXG4gICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ2NvbW1vbi5jb25maXJtLmRlbGV0ZS5hY3RpdmUucHJlZml4JykgK1xyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZElkcykgK1xyXG4gICAgICAgICAgJz8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlybUFjdGl2ZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jcnVkLnRvZ2dsZUFjdGl2ZUlkcykge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzLCByZXF1ZXN0KVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuTk9fQVBJX0VORF9QT0lOVF9QUk9WSURFRF9GT1JfQUNUSVZBVElPTiksIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfSU5BQ1RJVkFURTpcclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuQ09SRV9QQUdFX0xJU1RfSU5BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0lOQUNUSVZBVEUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IElUb2dnbGVBY3RpdmVJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgdmFsdWVUb0JpbmQ6IGZhbHNlLFxyXG4gICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgY29uZmlybUluYWN0aXZlID0gd2luZG93LmNvbmZpcm0oXHJcbiAgICAgICAgICB0aGlzLm1scy50cmFucygnY29tbW9uLmNvbmZpcm0uZGVsZXRlLmluYWN0aXZlLnByZWZpeCcpICtcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRJZHMpICtcclxuICAgICAgICAgICc/J1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGNvbmZpcm1JbmFjdGl2ZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jcnVkLnRvZ2dsZUFjdGl2ZUlkcykge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzLCBwYXlsb2FkKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuTk9fQVBJX0VORF9QT0lOVF9QUk9WSURFRF9GT1JfQUNUSVZBVElPTiksIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFOlxyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnbnVtYmVyJyAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ3N0cmluZydcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgJ0NPUkVfUEFHRV9MSVNUX0RFTEVURV9JRFNfTUVUSE9EX1NVUE9SVFNfT05MWV9OVU1CRVJfQU5EX1NUUklOR19UWVBFUydcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0RFTEVURScpLFxyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghIXRoaXMuZGVsZXRlVmFsaWRhdGVGbikge1xyXG5cclxuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZDogYm9vbGVhbiA9IHRoaXMuZGVsZXRlVmFsaWRhdGVGbih0aGlzLnNlbGVjdGVkRGF0YSk7XHJcbiAgICAgICAgICBpZiAoISEhdmFsaWRhdGVkKSByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50aXRsZSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQ09ORklSTUFUSU9OKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5va0J1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DT05GSVJNKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jYW5jZWxCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q2FuY2VsT25seSQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3kgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5ib2R5JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9BUkVfWU9VX1NVUkVfVE9fREVMRVRFKTtcclxuICAgICAgICBsZXQgbGlzdERlbGV0ZUlkczogYW55W10gPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YS5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgbGlzdERlbGV0ZUlkcy5wdXNoKHhbdGhpcy5jb2x1bW5zWzFdLmZpZWxkXSlcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mb3JtYXRpb25MaW5lcyQubmV4dChsaXN0RGVsZXRlSWRzKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkFQUFJPVkU6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoXHJcbiAgICAgICAgICAgICAgICAnQ09SRV9QQUdFX0xJU1RfREVMRVRFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9BTkRfU1RSSU5HX1RZUEVTJ1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLm1scy50cmFucygnTk9fU0VMRUNURURfSURfVE9fREVMRVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5kZWxldGVWYWxpZGF0ZUZuKSB7XHJcblxyXG4gICAgICAgICAgY29uc3QgdmFsaWRhdGVkOiBib29sZWFuID0gdGhpcy5kZWxldGVWYWxpZGF0ZUZuKHRoaXMuc2VsZWN0ZWREYXRhKTtcclxuICAgICAgICAgIGlmICghISF2YWxpZGF0ZWQpIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGlvbiA9IEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5BUFBST1ZFXHJcbiAgICAgICAgLy8gdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04pXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9rQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NPTkZJUk0pXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNhbmNlbEJ1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DQU5DRUwpXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDYW5jZWxPbmx5JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJvZHkkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0FSRV9ZT1VfVU5BUFBST1ZFX0lOUFVUX1JFQVNPTik7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dpbmdVcCQubmV4dCh0cnVlKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FQUFJPVkU6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuQ09SRV9QQUdFX0xJU1RfQUNUSVZFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9UWVBFXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19BUFBST1ZFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXF1ZXN0QXBwcm92ZTogSVRvZ2dsZUFwcHJvdmVJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgdmFsdWVUb0JpbmQ6IHRydWUsXHJcbiAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBjb25maXJtQXBwcm92ZSA9IHdpbmRvdy5jb25maXJtKFxyXG4gICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ2NvbW1vbi5jb25maXJtLmFwcHJvdmUucHJlZml4JykgK1xyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZElkcykgK1xyXG4gICAgICAgICAgJz8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlybUFwcHJvdmUpIHtcclxuICAgICAgICAgIGlmICghIXRoaXMuY3J1ZC50b2dnbGVBcHByb3ZlSWRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5wb3N0KHRoaXMuY3J1ZC50b2dnbGVBcHByb3ZlSWRzLCByZXF1ZXN0QXBwcm92ZSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICEhIXRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2Fybih0aGlzLm1scy50cmFucyhFbnVtVHJhbnNsYXRlS2V5Lk5PX0FQSV9FTkRfUE9JTlRfUFJPVklERURfRk9SX0FDVElWQVRJT04pLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BFTkRJTkdfQVBQUk9WRTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX1BFTkRJTkdfQVBQUk9WRScpLFxyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdFBlbmRpbmdBcHByb3ZlOiBJVG9nZ2xlQXBwcm92ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICB2YWx1ZVRvQmluZDogZmFsc2UsXHJcbiAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBjb25maXJtUGVuZGluZ0FwcHJvdmUgPSB3aW5kb3cuY29uZmlybShcclxuICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdjb21tb24uY29uZmlybS5wZW5kaW5nLmFwcHJvdmUucHJlZml4JykgK1xyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZElkcykgK1xyXG4gICAgICAgICAgJz8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlybVBlbmRpbmdBcHByb3ZlKSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLmNydWQudG9nZ2xlQXBwcm92ZUlkcykge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQXBwcm92ZUlkcywgcmVxdWVzdFBlbmRpbmdBcHByb3ZlKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuTk9fQVBJX0VORF9QT0lOVF9QUk9WSURFRF9GT1JfQUNUSVZBVElPTiksIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRVhQT1JURVhFTDpcclxuXHJcbiAgICAgICAgdGhpcy5leHBvcnRUb0V4Y2VsKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ET1dOTE9BRDpcclxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkhFQURFUl9ET1dOTE9BRCBjbGlja2VkXCIsIG5vdyk7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGltcG9ydC1zYWxhcnktYmFja2RhdGVgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBzYWxhcnktaW1wb3J0YCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgaW1wb3J0LWFkZGApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGltcG9ydC1tb250aGx5LXRheGApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYHNoaWZ0c29ydGApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGRlY2xhcmVzdW5wZXJgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGByZWdpc3RlcmxlYXZlYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgb3ZlcnRpbWVgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBpbXBvcnQtdGF4LWFubnVhbGApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGNtcy9wcm9maWxlL2xpc3QvZXZhbHVhdGVgKSEgPCAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWNrR2VuZXJhdGVUZW1wbGF0ZSQubmV4dChub3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VQTE9BRDpcclxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgY21zL3Byb2ZpbGUvbGlzdC9ldmFsdWF0ZWApID49IDApIHtcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VIZWFkZXJCdXR0b25DbGljay5lbWl0KGUpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYnJvd3NlRmlsZUlucHV0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfTE9DSzpcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOTE9DSzpcclxuICAgICAgICB0aGlzLmNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2suZW1pdChlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGUuY29kZSlcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWRJZHNDaGFuZ2UoZTogc3RyaW5nW10gfCBudW1iZXJbXSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZElkcyA9IGU7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzQ2hhbmdlLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkRGF0YUNoYW5nZShlOiBhbnlbXSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSBlO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGFDaGFuZ2UuZW1pdChlKTtcclxuICAgIGlmICghIWUubGVuZ3RoKSB7XHJcbiAgICAgIGlmIChlLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzPy5tdXN0QmVIaWRkZW4kLm5leHQoW1xyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULFxyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9MSVFVSURBVEVfQ09OVFJBQ1RcclxuICAgICAgICBdKVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICBpZiAoISFlWzBdLmlzTG9jaykge1xyXG4gICAgICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cz8ubXVzdEJlSGlkZGVuJC5uZXh0KFtFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xPQ0tdKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzPy5tdXN0QmVIaWRkZW4kLm5leHQoW0VudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5MT0NLXSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzPy5tdXN0QmVIaWRkZW4kLm5leHQoRU1QVFlfU0VMRUNUSU9OX0hJRERFTl9CVVRUT04pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25Db2x1bW5DYXB0aW9uQ2xpY2soZTogSUNvcmVUYWJsZUNvbHVtbkl0ZW0pIHtcclxuICAgIGNvbnN0IG5ld1NvcnQ6IElTb3J0SXRlbVtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNvcnQkLnZhbHVlKSk7XHJcbiAgICBuZXdTb3J0Lm1hcCgoYykgPT4ge1xyXG4gICAgICBpZiAoYy5maWVsZCA9PT0gZS5maWVsZCkge1xyXG4gICAgICAgIGlmIChjLnNvcnREaXJlY3Rpb24gPT09IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkUpIHtcclxuICAgICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLkFTQztcclxuICAgICAgICB9IGVsc2UgaWYgKGMuc29ydERpcmVjdGlvbiA9PT0gRW51bVNvcnREaXJlY3Rpb24uQVNDKSB7XHJcbiAgICAgICAgICBjLnNvcnREaXJlY3Rpb24gPSBFbnVtU29ydERpcmVjdGlvbi5ERVNDO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjLnNvcnREaXJlY3Rpb24gPSBFbnVtU29ydERpcmVjdGlvbi5OT05FO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjLnNvcnREaXJlY3Rpb24gPSBFbnVtU29ydERpcmVjdGlvbi5OT05FO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc29ydCQubmV4dChuZXdTb3J0KTtcclxuICB9XHJcblxyXG4gIGlucHV0RmlsZSA9IGFzeW5jIChlOiBhbnkpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKFwiaW5wdXRGaWxlIGVcIiwgZSlcclxuICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXM7XHJcbiAgICBjb25zdCBmaWxlID0gZmlsZXNbMF07XHJcbiAgICBsZXQgZmlsZU5hbWUgPSBmaWxlLm5hbWU7XHJcblxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtmaWxlXSk7XHJcblxyXG4gICAgYmxvYlRvQmFzZTY0KGJsb2IpLnRoZW4oKGJhc2U2NDogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMub25JbnB1dEZpbGVCYXNlNjREYXRhUmVhZHkuZW1pdChiYXNlNjQpO1xyXG5cclxuICAgICAgLy8gTuG6v3UgdGhhbSBz4buRIGdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0IMSRxrDhu6NjIHRydXnhu4FuIHbDoG9cclxuICAgICAgLy8gSW1wb3J0IHPhur0gdGjhu7FjIHRoaSB0aGVvIHF1eSB0csOsbmggQ29yZVxyXG4gICAgICBpZiAodGhpcy5nZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdCkge1xyXG4gICAgICAgIGNvbnN0IGltcG9ydFhsc3hUb0RiUmVxdWVzdDogSUltcG9ydFhsc3hUb0RiUmVxdWVzdCA9IHtcclxuICAgICAgICAgIGZpbGVOYW1lLFxyXG4gICAgICAgICAgZXhDb2RlOiB0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0LmV4Q29kZSxcclxuICAgICAgICAgIGJhc2U2NFN0cmluZzogYmFzZTY0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmltcG9ydFhsc3hUb0RiKGltcG9ydFhsc3hUb0RiUmVxdWVzdCkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gTnVtYmVyKHRoaXMubG9uZ1Rhc2tTZXJ2aWNlLmRhdGEkLnZhbHVlPy5vdXRlck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICBsZXQgZG93bmxvYWRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbeC5ib2R5XSkpXHJcbiAgICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zcGxpdChcIi54bHN4XCIpWzBdICsgXCJfcHJvY2Vzc2VkX1wiICsgbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBcIi54bHN4XCI7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGZpbGVOYW1lKTtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkTGluayk7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGltcG9ydFByZXZpZXdPdXRlclBhcmFtOiBJWGxzeEltcG9ydE9iamVjdCA9IHtcclxuICAgICAgICAgICAgICAgIHhsc3hTaWQ6IHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWU/LmlkISxcclxuICAgICAgICAgICAgICAgIHhsc3hFeENvZGU6IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QuZXhDb2RlLFxyXG4gICAgICAgICAgICAgICAgeGxzeFNlc3Npb246IHNlc3Npb25cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmICghISF0aGlzLmltcG9ydFByZXZpZXdQYXRoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFwiJ2ltcG9ydFByZXZpZXdQYXRoJyBpbnB1dCBwcm9wZXJ0eSB3YXMgbWlzc2luZyFcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZVBhZ2VMaXN0QXV4OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbXBvcnRQcmV2aWV3UGF0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgc3RhdGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuXHJcblxyXG4gIH07XHJcblxyXG4gIGJyb3dzZUZpbGVJbnB1dCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiYnJvd3NlRmlsZUlucHV0XCIpXHJcbiAgICB0aGlzLmZpbGVJbXBvcnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLmZpbGVJbXBvcnQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgb25Qcm9ncmVzc1dpbmRvd0Nsb3NlKF86IGFueSkge1xyXG4gICAgdGhpcy5sb25nQXBpUnVubmluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5leHBvcnRDb3JlUGFnZUxpc3RHcmlkVG9FeGNlbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKCh4KSA9PiB4Py51bnN1YnNjcmliZSgpKTtcclxuICAgIGlmICghIXRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uKSB0aGlzLnF1ZXJ5TGlzdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLXBhZ2UtbGlzdC1jb250YWluZXJcIiAjY29yZVBhZ2VMaXN0Q29udGFpbmVyIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBoZWlnaHQgKyAncHgnIH1cIj5cclxuXHJcbiAgICA8Y29yZS1wYWdlLWhlYWRlciAqbmdJZj1cIiEhIWhpZGVIZWFkZXJcIiBbaW5zdGFuY2VOdW1iZXJdPVwiY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcIiBbdGl0bGVdPVwidGl0bGVcIiAoYnV0dG9uQ2xpY2spPVwib25Db3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIFtoaWRlQnV0dG9uR3JvdXBdPVwiISFzZWVrZXJNb2RlIHx8ICEhaGlkZUJ1dHRvbkdyb3VwXCI+PC9jb3JlLXBhZ2UtaGVhZGVyPlxyXG5cclxuICAgIDxpbnB1dCAjZmlsZUltcG9ydCB0eXBlPVwiZmlsZVwiIG5hbWU9XCJuYW1lXCJcclxuICAgICAgICBhY2NlcHQ9XCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCwgYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCJcclxuICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgKGNoYW5nZSk9J2lucHV0RmlsZSgkZXZlbnQpJyAvPlxyXG5cclxuICAgIDwhLS1cclxuICAgICAgICBLaGkgxJHDoyB0w61uaCDEkcaw4bujYyBjaMOtbmggeMOhYyBjaGnhu4F1IGNhbyBjb21wb3NpdGlvbkhlaWdodCBj4bunYSBjb3JlLWNvbXBvc2l0aW9uXHJcbiAgICAgICAgQ+G6p24gdMOtbmggxJHGsOG7o2MgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW8gY29yZVRhYmxlSGVpZ2h0IGPhu6dhIENvcmVUYWJsZVxyXG4gICAgICAgIE7hur91IHBo4bqnbiB0b3AgY+G7p2EgY29tcG9zaXRpb24gY+G7kSDEkeG7i25oICh2w60gZOG7pSBraGkgc+G7rSBk4bulbmcgQ29yZVBhcmFtS2l0KSB0aMOsIHBow6lwIHRy4burIMSRxqFuIGdp4bqjblxyXG4gICAgICAgIE5oxrBuZyBu4bq/dSBwaOG6p24gdG9wIMSRxrDhu6NjIGN1c3RvbWl6ZSwgdGEgcGjhuqNpIHPhu60gZOG7pW5nIGV4dHJhTWFudWFsT2Zmc2V0XHJcbiAgICAtLT5cclxuICAgIDxjb3JlLWNvbXBvc2l0aW9uIFtjb3JlQ29tcG9zaXRpb25JbnN0YW5jZU51bWJlcl09XCJjb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclwiIFt0b3BdPVwidG9wUGxhY2VcIiBbbGVmdF09XCIhIWhpZGVMZWZ0PyB1bmRlZmluZWQgOmxlZnRcIiBbbWFpbl09XCJjb3JlVGFibGVcIiBbaGVpZ2h0XT1cImNvbXBvc2l0aW9uSGVpZ2h0XCI+XHJcbiAgICA8L2NvcmUtY29tcG9zaXRpb24+XHJcblxyXG4gICAgPHJvdXRlci1vdXRsZXQgbmFtZT1cImNvcmVQYWdlTGlzdEF1eFwiPjwvcm91dGVyLW91dGxldD5cclxuXHJcbjwvZGl2PlxyXG5cclxuPG5nLXRlbXBsYXRlICN0b3BQbGFjZT5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiISFzaG93UGFyYW1LaXRcIj5cclxuICAgICAgICA8Y29yZS1jb21tb24tcGFyYW0ta2l0IFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvcl09XCJkYXRlUGVyaW9kQ29tcGFyaXNvbkZvclwiXHJcbiAgICAgICAgICAgIFtlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc109XCJlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc1wiXHJcbiAgICAgICAgICAgIFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5XT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXlcIlxyXG4gICAgICAgICAgICBbc3RhdHVzSW5jbHVzaW9uRm9yXT1cInN0YXR1c0luY2x1c2lvbkZvclwiIFtzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleV09XCJzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgIFtzdGF0dXNPcHRpb25zQXBpXT1cInN0YXR1c09wdGlvbnNBcGlcIiBbaGlkZURhdGVQZXJpb2RDb21wYXJpc29uXT1cImhpZGVEYXRlUGVyaW9kQ29tcGFyaXNvblwiIFtoaWRlU3RhdHVzSW5jbHVzaW9uXT1cImhpZGVTdGF0dXNJbmNsdXNpb25cIlxyXG4gICAgICAgICAgICAob25DaGFuZ2UpPVwib25QYXJhbUtpdFZhbHVlQ2hhbmdlKCRldmVudClcIj48L2NvcmUtY29tbW9uLXBhcmFtLWtpdD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b3BcIj5cclxuXHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvcmVUYWJsZT5cclxuXHJcbiAgICA8ZGl2IFtjbGFzcy5vcGFjaXR5MF09XCIhISFnZW9tZXRyaWNEb25lXCI+XHJcblxyXG4gICAgICAgIDwhLS1cclxuICAgICAgICAgICAgS2hpIMSRw6MgdMOtbmggxJHGsOG7o2MgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW8gY29tcG9zaXRpb25IZWlnaHQgY+G7p2EgY29yZS1jb21wb3NpdGlvblxyXG4gICAgICAgICAgICBD4bqnbiB0w61uaCDEkcaw4bujYyBjaMOtbmggeMOhYyBjaGnhu4F1IGNhbyBjb3JlVGFibGVIZWlnaHQgY+G7p2EgQ29yZVRhYmxlXHJcbiAgICAgICAgICAgIE7hur91IHBo4bqnbiB0b3AgY+G7p2EgY29tcG9zaXRpb24gY+G7kSDEkeG7i25oICh2w60gZOG7pSBraGkgc+G7rSBk4bulbmcgQ29yZVBhcmFtS2l0KSB0aMOsIHBow6lwIHRy4burIMSRxqFuIGdp4bqjblxyXG4gICAgICAgICAgICBOaMawbmcgbuG6v3UgcGjhuqduIHRvcCDEkcaw4bujYyBjdXN0b21pemUsIHRhIHBo4bqjaSBz4butIGThu6VuZyBleHRyYU1hbnVhbE9mZnNldFxyXG5cclxuICAgICAgICAgICAgQ+G6p24gdMOtbmggdGFibGVIZWlnaHQgbmjGsCB0aOG6vyBuw6BvP1xyXG4gICAgICAgIC0tPlxyXG4gICAgICAgIDxjb3JlLXRhYmxlICNjb3JlVGFibGVBbG9uZSB3aWR0aD1cIjEwMCVcIiBbaGVpZ2h0XT1cInRhYmxlSGVpZ2h0XCIgW3Jvd0hlaWdodF09XCJyb3dIZWlnaHQgfHwgJzQ2cHgnXCIgW3dyYXBdPVwid3JhcFwiXHJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZGF0YV09XCJsaXN0XCIgW3Nob3dDaGVja2JveF09XCIhISFoaWRlQ2hlY2tcIiBoZWFkZXJIZWlnaHQ9XCI2MHB4XCIgW3Nob3dUb29sc109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW3Rvb2xzXT1cImlubGluZVRvb2xzXCIgKG9uVG9vbENsaWNrKT1cIm9uVG9vbENsaWNrKCRldmVudClcIiAob25Sb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAob25Sb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAob25TZWxlY3RlZElkc0NoYW5nZSk9XCJvblNlbGVjdGVkSWRzQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAob25TZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiIFtmcm96ZW5dPVwiZnJvemVuIHx8IDFcIlxyXG4gICAgICAgICAgICAob25TZWFyY2hpbmcpPVwib25TZWFyY2hpbmcoJGV2ZW50KVwiIChvbkNvbHVtbkNhcHRpb25DbGljayk9XCJvbkNvbHVtbkNhcHRpb25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2NvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXT1cImNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXCIgW2xvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgICAgICAgICAgIFtjb2x1bW5TZWFyY2hEZWZhdWx0T3Blbl09XCJjb2x1bW5TZWFyY2hEZWZhdWx0T3BlblwiIFtsYXp5TG9hZGluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2hlYWRlcldyYXBdPVwiaGVhZGVyV3JhcFwiXHJcbiAgICAgICAgICAgIFtoZWFkZXJGaXJzdFJvd0hlaWdodF09XCJoZWFkZXJGaXJzdFJvd0hlaWdodFwiXHJcbiAgICAgICAgICAgIFtub1BhZGRpbmdDZWxsXT1cIm5vUGFkZGluZ0NlbGxcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZUhpZ2hsaWdodE9uQ2xpY2tdPVwiZGlzYWJsZUhpZ2hsaWdodE9uQ2xpY2tcIlxyXG4gICAgICAgICAgICA+PC9jb3JlLXRhYmxlPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4LWVuZCBwYWdpbmF0aW9uLXdyYXBwZXJcIiAjcGFnaW5hdGlvbkNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGNvcmUtcGFnaW5hdGlvbi1mdWxsIFtoZWlnaHRdPVwicGFnaW5hdGlvbkhlaWdodFwiIFtjdXJyZW50UGFnZSRdPVwiY3VycmVudFBhZ2UkXCIgW3BhZ2VTaXplJF09XCJwYWdlU2l6ZSRcIlxyXG4gICAgICAgICAgICAgICAgW3BhZ2VDb3VudF09XCJwYWdlQ291bnRcIiBbaW5uZXJCb2R5Q291bnQkXT1cImlubmVyQm9keUNvdW50JFwiIFtwYWdpbmF0aW9uJF09XCJwYWdpbmF0aW9uJFwiXHJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2ZpeGVkUGFnZVNpemVdPVwiZml4ZWRQYWdlU2l6ZVwiIFtiYWNrZ3JvdW5kXT1cIicjODQ4NDg0J1wiPjwvY29yZS1wYWdpbmF0aW9uLWZ1bGw+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxjb3JlLWFwaS1wcm9ncmVzcyAqbmdJZj1cImxvbmdBcGlSdW5uaW5nXCIgKG9uQ2xvc2UpPVwib25Qcm9ncmVzc1dpbmRvd0Nsb3NlKCRldmVudClcIj48L2NvcmUtYXBpLXByb2dyZXNzPlxyXG5cclxuPGFwcC1mdWxsc2NyZWVuLW1vZGFsLWxvYWRlciAqbmdJZj1cInByZWZldGNoTG9hZGluZ1wiPjwvYXBwLWZ1bGxzY3JlZW4tbW9kYWwtbG9hZGVyPiJdfQ==